[fpc-devel] x86_64 stabs info - patch (sort of)
Willibald Krenn
Willibald.Krenn at gmx.at
Tue Oct 12 01:04:56 CEST 2010
Hi,
On my Win64 machine, gdb kept crashing whenever I tried to step into
fpc_raiseexception with an error saying that the reg '-1' wasn't
defined. And yes, stabs info showed:
4943 FUN 0 187 0000000000408710 66408 fpc_raiseexception:F129
4944 RSYM 0 625 0000000000000001 66432 OBJ:R129
4945 RSYM 0 625 0000000000000002 66441 ANADDR:R4
4946 RSYM 0 625 00000000ffffffff 66451 AFRAME:R4
(AFRAME should be 8, since it's passed in R8...)
So in the end I looked into x86reg.dat and was quite amazed that stabs
index for all 'new' AMD64 regs is set to -1, which is wrong of course.
Hacking along I changed the stabs-reg indices to match the dwarf64 index
(see also here:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/amd64-tdep.h?rev=1.18&content-type=text/x-cvsweb-markup&cvsroot=src)
and after bootstrapping the compiler, I can now step into raise as
expected. (That said, I did not double-check whether dwarf64 index
always matches stabs index...)
Notice: This fix is absolutely necessary if you are working with Lazarus
on Win64, as Lazarus automatically sets a breakpoint in fpc_raise...
which then crashes gdb, which in turn crashes any running debugging
session - in case an exception is raised. Of course it affects also all
methods/funs that take e.g. three params that can be passed in regs...
Perhaps someone with more knowledge of stabs and the x86reg.dat can do a
proper fix? TIA!
Cheers,
Willi
More information about the fpc-devel
mailing list