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
run-bind.adb
Description: Binary data
run-bind.ads
Description: Binary data
_______________________________________________ Ghdl-discuss mailing list [email protected] https://mail.gna.org/listinfo/ghdl-discuss
