mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
Correctly parse DW_FORM_ref_addr -- its format is different in Dwarf2
vs Dwarf3 and later. Fixes #298864. (Tom Tromey, tromey@redhat.com) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12545
This commit is contained in:
parent
f53053e7c9
commit
3ba809deb6
@ -1121,9 +1121,17 @@ void get_Form_contents ( /*OUT*/ULong* cts,
|
||||
So for the moment we merely range-check, to see that they
|
||||
actually do specify a plausible offset within this
|
||||
object's .debug_info, and return the value unchanged.
|
||||
|
||||
In DWARF 2, DW_FORM_ref_addr is address-sized, but in
|
||||
DWARF 3 and later, it is offset-sized.
|
||||
*/
|
||||
*cts = (ULong)(UWord)get_UWord(c);
|
||||
*ctsSzB = sizeof(UWord);
|
||||
if (cc->version == 2) {
|
||||
*cts = (ULong)(UWord)get_UWord(c);
|
||||
*ctsSzB = sizeof(UWord);
|
||||
} else {
|
||||
*cts = get_Dwarfish_UWord(c, cc->is_dw64);
|
||||
*ctsSzB = cc->is_dw64 ? sizeof(ULong) : sizeof(UInt);
|
||||
}
|
||||
TRACE_D3("0x%lx", (UWord)*cts);
|
||||
if (0) VG_(printf)("DW_FORM_ref_addr 0x%lx\n", (UWord)*cts);
|
||||
if (/* the following 2 are surely impossible, but ... */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user