From 515fba93a55d04d21474d1454396067825f221ce Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 20 Jul 2012 00:09:56 +0200 Subject: [PATCH] Add DW_OP_GNU_parameter_ref to dwarf.h and handle it in readelf. DW_OP_GNU_parameter_ref takes as operand a 4 byte CU relative reference to the abstract optimized away DW_TAG_formal_parameter. Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 4 ++++ libdw/dwarf.h | 1 + src/ChangeLog | 4 ++++ src/readelf.c | 12 ++++++++++++ 4 files changed, 21 insertions(+) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index ce45d1554..2bafdc22d 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,7 @@ +2012-07-19 Mark Wielaard + + * dwarf.h: Add DW_OP_GNU_parameter_ref. + 2012-07-24 Mark Wielaard * dwarf.h: Correct spelling of DW_LANG_ObjC. diff --git a/libdw/dwarf.h b/libdw/dwarf.h index d6ec13187..f41d29602 100644 --- a/libdw/dwarf.h +++ b/libdw/dwarf.h @@ -472,6 +472,7 @@ enum DW_OP_GNU_deref_type = 0xf6, DW_OP_GNU_convert = 0xf7, DW_OP_GNU_reinterpret = 0xf9, + DW_OP_GNU_parameter_ref = 0xfa, DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */ DW_OP_hi_user = 0xff /* Implementation-defined range end. */ diff --git a/src/ChangeLog b/src/ChangeLog index 2b657f833..78b9a0b67 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-07-19 Mark Wielaard + + * readelf.c (print_ops): Handle DW_OP_GNU_parameter_ref. + 2012-07-11 Mark Wielaard * readelf.c (options): Add macro to help of debug-dump. diff --git a/src/readelf.c b/src/readelf.c index ab76a1fa7..93f56c3b6 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -4403,6 +4403,18 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, offset += 1 + (data - start); break; + case DW_OP_GNU_parameter_ref: + /* 4 byte CU relative reference to the abstract optimized away + DW_TAG_formal_parameter. */ + NEED (4); + printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", + indent, "", (uintmax_t) offset, op_name, + (uintmax_t) read_4ubyte_unaligned (dbg, data)); + CONSUME (4); + data += 4; + offset += 5; + break; + default: /* No Operand. */ if (op < sizeof known / sizeof known[0] && known[op] != NULL) -- 2.47.2