I've been doing some more digging into this problem.  I think perhaps
there is an issue with my build of GHDL.  I've been setting
breakpoints and single stepping through the code trying to find a
cause.  I did find one things that seemed odd.

First, I've been debugging the pure VHDL simulation.  I set a
breakpoint in main, and looked at the stack to see if things made
sense.  For example

(gdb) b 24
Breakpoint 1 at 0x80a0e5a: file
../../../gcc-4.3.4/gcc/vhdl/grt/main.adb, line 24.
(gdb) r
Starting program:
/home/pete/ghdl-pladow/fpga_stamp/fpga_stamp_m0/test/fpga_stamp_t0

Breakpoint 1, main (argc=1, argv=(system.address) 0xbf953d94)
    at ../../../gcc-4.3.4/gcc/vhdl/grt/main.adb:24
24         return Ghdl_Main (Argc, Argv);

Note that argc and argv look fine.  But if I let it run until the error, I get:

(gdb) c
Program received signal SIGSEGV, Segmentation fault.
0xec835356 in ?? ()
(gdb) bt
[...snip...]
#8  0x080a0e66 in main (argc=Cannot access memory at address
0xe58955c3) at ../../../gcc-4.3.4/gcc/vhdl/grt/main.adb:24
(gdb) frame 8
#8  0x080a0e66 in main (argc=Cannot access memory at address
0xe58955c3) at ../../../gcc-4.3.4/gcc/vhdl/grt/main.adb:24
24         return Ghdl_Main (Argc, Argv);
(gdb) p Argc
Cannot access memory at address 0xe58955c3
(gdb) p Argv
Cannot access memory at address 0xe58955c7

Note that argc is completely trashed.  And argv as well.  This hints
at stack corruption.  So, I started single stepping through the code
to try and find the problem.  I stepped and looked for when argc and
argv became trashed.  Here's the call that did it:

(gdb) s
48         Grt_Init;
(gdb) bt
#0  ghdl_main (argc=1, argv=(system.address) 0xbf981774) at
/home/pete/Download/gcc-4.3.4/gcc/vhdl/grt/ghdl_main.adb:48
#1  0x080a0e66 in main (argc=1, argv=(system.address) 0xbf981774) at
../../../gcc-4.3.4/gcc/vhdl/grt/main.adb:24
(gdb) s
49         Grt.Main.Run;
(gdb) bt
#0  ghdl_main (argc=1, argv=(system.address) 0x7a51e8) at
/home/pete/Download/gcc-4.3.4/gcc/vhdl/grt/ghdl_main.adb:49
#1  0x080a0e66 in main (argc=8024052, argv=(system.address) 0x7a51e8)
at ../../../gcc-4.3.4/gcc/vhdl/grt/main.adb:24

The call to Grt_Init seems to trash main's argc and argv.  Now, I've
been digging around trying to find the code for Grt_Init.  The only
thing I find is at the top of ghdl_main.adb:

   --  Grt_Init corresponds to the 'adainit' subprogram for grt.
   procedure Grt_Init;
   pragma Import (C, Grt_Init, "grt_init");

Now, it looks like grt_init is generated (I found it in the build
directory).  But I can't single step into the code.  And without line
information I can't see where things are going wrong.

Now, considering this is a generated file from my build, and the
problem appears to be here, I'm thinking there is definitely something
wrong with my build.  I've attached the generated grt_init code
(run-bind.adb) for your perusal.

Thanks,
Pete

Attachment: run-bind.adb
Description: Binary data

Attachment: run-bind.ads
Description: Binary data

_______________________________________________
Ghdl-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/ghdl-discuss

Reply via email to