Dwarf_Op
Sasha Da Rocha Pinheiro
darochapinhe@wisc.edu
Fri Apr 26 16:48:00 GMT 2019
Hi Mark,
The output from dwarfdump:
< 5><0x00400918:0x00400974><main><cie offset 0x000000b4::cie index 0><fde offset 0x000000b0 length: 0x00000024>
<eh aug data len 0x0>
0x00400918: <off cfa=00(r31) >
0x0040091c: <off cfa=32(r31) > <off r29=-32(cfa) > <off r30=-24(cfa) >
0x00400920: <off cfa=32(r29) > <off r29=-32(cfa) > <off r30=-24(cfa) >
0x00400970: <off cfa=00(r31) >
I'm getting the rules for r30 at PC 0x0040091c.
The value you see -24 from cfa is passed delivered by libdw as:
(gdb) p/x locations[i]
$19 = {atom = 0x23, number = 0xffffffffffffffe8, number2 = 0x0, offset = 0x0}
The atom here is DW_OP_plus_uconst.
Previously I have said it was 0xffffffe8, because the printf with specifier %x printed that way. But gdb seems to print its full 8 bytes.
I used dwarf_frame_register.
Even though, the member number is of unsigned int type with signed encoded values. Am I correct?
Sasha
From: Mark Wielaard <mark@klomp.org>
Sent: Friday, April 26, 2019 3:20 AM
To: Sasha Da Rocha Pinheiro; elfutils-devel@sourceware.org
Subject: Re: Dwarf_Op
Hi Sasha,
On Thu, 2019-04-25 at 23:59 +0000, Sasha Da Rocha Pinheiro wrote:
> I have a Dwarf_Op object whose member "number" has size of 8 bytes.
> Its value although is 0x00000000FFFFFFE8.
> Shouldn't it be 0xFFFFFFFFFFFFFFE8 instead?
> Since it means an offset, for the current operation, shouldn't it be
> of a signed integer type instead of unsigned?
Could you provide more information?
Which function did you use to get the Dwarf_Op?
What was its associated attribute or frame?
What is its atom_value?
How are you using the Dwarf_Op that requires interpreting its number
fields?
Thanks,
Mark
More information about the Elfutils-devel
mailing list