Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2011-01

Dwar2 changed?

6 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Martin

Has dwarf 2 changed ?

with trunk ( I updated from a few month back, to today), I no longer get the classname of an exception (stabs is fine, but dwarf now fails)

> TCmdLineDebugger.SendCmdLn "-data-evaluate-expression

^^shortstring(^POINTER($eax)^+12)^^"
<< TCmdLineDebugger.ReadLn "^done,value="#0 <repeats 20 times>"" << TCmdLineDebugger.ReadLn "(gdb) "

GNU gdb (GDB) Fedora (7.1-18.fc13)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu". For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.

Reply by email

Joost van der Sluis
to Martin
Martin wrote
Has dwarf 2 changed ?

Yes

with trunk ( I updated from a few month back, to today), I no longer get the classname of an exception (stabs is fine, but dwarf now fails)

Well, passing variables to procedures by reference has different Dwarf-debug information now.
And there are some changes which in theory shoudn't change anything, but maybe I made a mistake.

You could try to compile an example with an older version and a newer version. And compare the output of 'objdump -W'

>> TCmdLineDebugger.SendCmdLn "-data-evaluate-expression ^^shortstring(^POINTER($eax)^+12)^^" << TCmdLineDebugger.ReadLn "^done,value="#0 <repeats 20 times>"" << TCmdLineDebugger.ReadLn "(gdb) "

You do realize that this is an hack? (I partly wrote it) It could also be that the location of the exception-name has been changed by something. This hack doesn't use any debug-information. Only the definitions of a shortstring and pointer.

Joost.

Reply by email

Marc Weustink
to Joost van der Sluis
Joost van der Sluis wrote 9 lines
On Wed, 2011-01-12 at 23:52 +0000, Martin wrote: > Has dwarf 2 changed ? > >> TCmdLineDebugger.SendCmdLn "-data-evaluate-expression > ^^shortstring(^POINTER($eax)^+12)^^" > << TCmdLineDebugger.ReadLn "^done,value="#0<repeats 20 times>"" > << TCmdLineDebugger.ReadLn "(gdb) " You do realize that this is an hack? (I partly wrote it)

It looks much like I first wrote it :)

Anyway, without rtl debug info this is the only way to retrieve the classname of the exception object.

It could also be that the location of the exception-name has been changed by something. This hack doesn't use any debug-information. Only the definitions of a shortstring and pointer.

I don't think that the exception name location is changed, it would mean that the VMT layout has changed.

Marc

Reply by email

Martin
to Joost van der Sluis: Yes Well, passing variables to procedures by reference has different Dwarf-debug…
Joost van der Sluis wrote 10 lines
> >> TCmdLineDebugger.SendCmdLn "-data-evaluate-expression > ^^shortstring(^POINTER($eax)^+12)^^" > << TCmdLineDebugger.ReadLn "^done,value="#0<repeats 20 times>"" > << TCmdLineDebugger.ReadLn "(gdb) " You do realize that this is an hack? (I partly wrote it) It could also be that the location of the exception-name has been changed by something. This hack doesn't use any debug-information. Only the definitions of a shortstring and pointer.

I do, yes...

But:
- I know eax is correct, because the fall-back (using ^char instead of shortstring works:
-data-evaluate-expression ^char(^pointer(^POINTER($eax)^+12)^+1)
- The fallback is usually needed, if shortstring is not in the symboltable at all, but then the expression gives an error. Now the expression returns data, but the wrong data...

Strange, the same fpc on windows still works perfect with half a dozen different fpc versions (6.3 to 7.2)

It is also possible that my previous fpc trunk on my fedora box was build with some debug ino, and now I forgot, and just build it... but again on windows I tested with fpc 2.4.2 and trunc, both build with several different configs...

Martin

Reply by email

Joost van der Sluis
to Martin
Martin wrote 20 lines
On 13/01/2011 07:45, Joost van der Sluis wrote: > >> >> TCmdLineDebugger.SendCmdLn "-data-evaluate-expression >> ^^shortstring(^POINTER($eax)^+12)^^" >> << TCmdLineDebugger.ReadLn "^done,value="#0<repeats 20 times>"" >> << TCmdLineDebugger.ReadLn "(gdb) " > You do realize that this is an hack? (I partly wrote it) > It could also be that the location of the exception-name has been > changed by something. This hack doesn't use any debug-information. Only > the definitions of a shortstring and pointer. > I do, yes... But: - I know eax is correct, because the fall-back (using ^char instead of shortstring works: -data-evaluate-expression ^char(^pointer(^POINTER($eax)^+12)^+1) - The fallback is usually needed, if shortstring is not in the symboltable at all, but then the expression gives an error. Now the expression returns data, but the wrong data...

Ehh? Does the fallback work or not?

Strange, the same fpc on windows still works perfect with half a dozen different fpc versions (6.3 to 7.2)

So it could be a gdb-problem?

It is also possible that my previous fpc trunk on my fedora box was build with some debug ino, and now I forgot, and just build it... but again on windows I tested with fpc 2.4.2 and trunc, both build with several different configs...

You lost me. Do I still have to do something?

Joost.

Reply by email

Martin
to Joost van der Sluis
Joost van der Sluis wrote 14 lines
>>> >> TCmdLineDebugger.SendCmdLn "-data-evaluate-expression >>> ^^shortstring(^POINTER($eax)^+12)^^" >>> << TCmdLineDebugger.ReadLn "^done,value="#0<repeats 20 times>"" >>> << TCmdLineDebugger.ReadLn "(gdb) " >> You do realize that this is an hack? (I partly wrote it) >> It could also be that the location of the exception-name has been >> changed by something. This hack doesn't use any debug-information. Only >> the definitions of a shortstring and pointer. > I do, yes... > > But: > - I know eax is correct, because the fall-back (using ^char instead of > shortstring works: > -data-evaluate-expression ^char(^pointer(^POINTER($eax)^+12)^+1)

The fallback does work. So the data is in the correct location

> - The fallback is usually needed, if shortstring is not in the > symboltable at all, but then the expression gives an error. Now the > expression returns data, but the wrong data... Ehh? Does the fallback work or not?

yes, but it was not triggered, because the first query did not return a gdbg-error, there just was no usable data.
I added the data check, so now the fallback is triggered, and it works.

> Strange, the same fpc on windows still works perfect with half a dozen > different fpc versions (6.3 to 7.2) So it could be a gdb-problem?

possible, yes, strange though

afaik "shortstring" is encoded as a record (len; chars), so maybe something in there...

Show quoted text 6 lines
> It is also possible that my previous fpc trunk on my fedora box was > build with some debug ino, and now I forgot, and just build it... but > again on windows I tested with fpc 2.4.2 and trunc, both build with > several different configs... You lost me. Do I still have to do something?

probably not, because there is not enough info yet to start on something.

I was just asking if something obvious springs to mind....

I currently don't have the time to go through all the options and see what works and what not.
e.g compile rtl with/whitout -gs / -gw
or check older versions, ...

Reply by email