From bef5d1d463ef7a6b19b74ea653003bbdc6d82fe4 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 1 Mar 2018 17:13:19 +0100 Subject: [PATCH] Add elfutils-0.170-GNU_variable_value.patch --- elfutils-0.170-GNU_variable_value.patch | 46 +++++++++++++++++++++++++ elfutils.spec | 5 +++ 2 files changed, 51 insertions(+) create mode 100644 elfutils-0.170-GNU_variable_value.patch diff --git a/elfutils-0.170-GNU_variable_value.patch b/elfutils-0.170-GNU_variable_value.patch new file mode 100644 index 0000000..8ff5f5c --- /dev/null +++ b/elfutils-0.170-GNU_variable_value.patch @@ -0,0 +1,46 @@ +commit e23c71330c3b332d19fdf9e48ca8b03680d9ad34 +Author: Mark Wielaard +Date: Thu Nov 2 16:23:24 2017 +0100 + + readelf: Handle DW_OP_GNU_variable_value. + + Also format both DW_OP_call_ref and DW_OP_GNU_variable_value argument + as a normal DIE reference. + + Signed-off-by: Mark Wielaard + +diff --git a/libdw/dwarf.h b/libdw/dwarf.h +index 902d261..8edf719 100644 +--- a/libdw/dwarf.h ++++ b/libdw/dwarf.h +@@ -545,6 +545,7 @@ enum + DW_OP_GNU_convert = 0xf7, + DW_OP_GNU_reinterpret = 0xf9, + DW_OP_GNU_parameter_ref = 0xfa, ++ DW_OP_GNU_variable_value = 0xfd, + + DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */ + DW_OP_hi_user = 0xff /* Implementation-defined range end. */ +diff --git a/src/readelf.c b/src/readelf.c +index 5e2f3fc..833884b 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -4160,6 +4160,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + break; + + case DW_OP_call_ref: ++ case DW_OP_GNU_variable_value: + /* Offset operand. */ + if (ref_size != 4 && ref_size != 8) + goto invalid; /* Cannot be used in CFA. */ +@@ -4170,8 +4171,8 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + addr = read_8ubyte_unaligned (dbg, data); + data += ref_size; + CONSUME (ref_size); +- +- printf ("%*s[%4" PRIuMAX "] %s %#" PRIxMAX "\n", ++ /* addr is a DIE offset, so format it as one. */ ++ printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", + indent, "", (uintmax_t) offset, + op_name, (uintmax_t) addr); + offset += 1 + ref_size; diff --git a/elfutils.spec b/elfutils.spec index 911109e..ad00720 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -27,6 +27,7 @@ Patch3: elfutils-0.170-m68k-packed-not-aligned.patch Patch4: elfutils-0.170-core-pid.patch Patch5: elfutils-0.170-elf_sync.patch Patch6: elfutils-0.170-new-notes-hack.patch +Patch7: elfutils-0.170-GNU_variable_value.patch Requires: elfutils-libelf%{depsuffix} = %{version}-%{release} Requires: elfutils-libs%{depsuffix} = %{version}-%{release} @@ -185,6 +186,7 @@ cp %SOURCE1 tests/ %patch4 -p1 -b .core_pid %patch5 -p1 -b .elf_sync %patch6 -p1 -b .notes_hack +%patch7 -p1 -b .variable_value find . -name \*.sh ! -perm -0100 -print | xargs chmod +x @@ -320,6 +322,9 @@ fi %endif %changelog +* Thu Mar 01 2018 Mark Wielaard +- Add elfutils-0.170-GNU_variable_value.patch + * Fri Feb 16 2018 Mark Wielaard - 0.170-9 - Add elfutils-0.170-core-pid.patch - Add elfutils-0.170-elf_sync.patch