From f7f48060a60cc7d4237785975039ca5e8e59d179 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Jun 01 2018 22:09:02 +0000 Subject: 0.171-1 - New upstream release. - DWARF5 and split dwarf, including GNU DebugFission, support. - readelf: Handle all new DWARF5 sections. --debug-dump=info+ will show split unit DIEs when found. --dwarf-skeleton can be used when inspecting a .dwo file. Recognizes GNU locviews with --debug-dump=loc. - libdw: New functions dwarf_die_addr_die, dwarf_get_units, dwarf_getabbrevattr_data and dwarf_cu_info. libdw will now try to resolve the alt file on first use when not set yet with dwarf_set_alt. dwarf_aggregate_size() now works with multi-dimensional arrays. - libdwfl: Use process_vm_readv when available instead of ptrace. - backends: Add a RISC-V backend. --- diff --git a/.gitignore b/.gitignore index a5b5128..55cd66b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /elfutils-0.168.tar.bz2 /elfutils-0.169.tar.bz2 /elfutils-0.170.tar.bz2 +/elfutils-0.171.tar.bz2 diff --git a/elfutils-0.170-GNU_variable_value.patch b/elfutils-0.170-GNU_variable_value.patch deleted file mode 100644 index 8ff5f5c..0000000 --- a/elfutils-0.170-GNU_variable_value.patch +++ /dev/null @@ -1,46 +0,0 @@ -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-0.170-core-pid.patch b/elfutils-0.170-core-pid.patch deleted file mode 100644 index 6354f21..0000000 --- a/elfutils-0.170-core-pid.patch +++ /dev/null @@ -1,120 +0,0 @@ -commit 699a741b488010d56cc358a5f7b4d8a8f4886347 -Author: Mark Wielaard -Date: Sat Dec 23 23:16:24 2017 +0100 - - tests: Try to use coredumpctl to extract core files. - - If systemd-coredump is installed we have to use coredumpctl to extract - the core file to test. Unfortunately systemd-coredump/coredumpctl seem - to be somewhat fragile if multiple core dumps are generated/extracted - at the same time. So use a lock file to only run one core dump test at - a time (under make -j). - - Signed-off-by: Mark Wielaard - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index fca0072..64cb5bd 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -515,6 +515,9 @@ dwarf_default_lower_bound_LDADD = $(libdw) - system_elf_libelf_test_CPPFLAGS = - system_elf_libelf_test_LDADD = $(libelf) - -+# A lock file used to make sure only one test dumps core at a time -+CLEANFILES += core-dump-backtrace.lock -+ - if GCOV - check: check-am coverage - .PHONY: coverage -diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh -index c1f3156..e04a7ea 100644 ---- a/tests/backtrace-subr.sh -+++ b/tests/backtrace-subr.sh -@@ -137,19 +137,46 @@ check_native() - # Backtrace core file. - check_native_core() - { -+# systemd-coredump/coredumpctl doesn't seem to like concurrent core dumps -+# use a lock file (fd 200) tests/core-dump-backtrace.lock -+( - child=$1 - - # Disable valgrind while dumping core. - SAVED_VALGRIND_CMD="$VALGRIND_CMD" - unset VALGRIND_CMD - -+ # Wait for lock for 10 seconds or skip. -+ flock -x -w 10 200 || exit 77; -+ - # Skip the test if we cannot adjust core ulimit. -- core="core.`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" -+ pid="`ulimit -c unlimited || exit 77; set +ex; testrun ${abs_builddir}/$child --gencore; true`" -+ core="core.$pid" - # see if /proc/sys/kernel/core_uses_pid is set to 0 - if [ -f core ]; then - mv core "$core" - fi -- if [ ! -f "$core" ]; then echo "No $core file generated"; exit 77; fi -+ type -P coredumpctl && have_coredumpctl=1 || have_coredumpctl=0 -+ if [ ! -f "$core" -a $have_coredumpctl -eq 1 ]; then -+ # Maybe systemd-coredump took it. But give it some time to dump first... -+ sleep 1 -+ coredumpctl --output="$core" dump $pid || rm -f $core -+ -+ # Try a couple of times after waiting some more if something went wrong... -+ if [ ! -f "$core" ]; then -+ sleep 2 -+ coredumpctl --output="$core" dump $pid || rm -f $core -+ fi -+ -+ if [ ! -f "$core" ]; then -+ sleep 3 -+ coredumpctl --output="$core" dump $pid || rm -f $core -+ fi -+ fi -+ if [ ! -f "$core" ]; then -+ echo "No $core file generated"; -+ exit 77; -+ fi - - if [ "x$SAVED_VALGRIND_CMD" != "x" ]; then - VALGRIND_CMD="$SAVED_VALGRIND_CMD" -@@ -163,4 +190,6 @@ check_native_core() - cat $core.{bt,err} - check_native_unsupported $core.err $child-$core - check_all $core.{bt,err} $child-$core -+ rm $core{,.{bt,err}} -+) 200>${abs_builddir}/core-dump-backtrace.lock - } - -commit 61e33d72788c58467668b2f2ad44d5b95ebbee80 -Author: Mark Wielaard -Date: Fri Feb 16 20:34:25 2018 +0100 - - tests: Accept any core if no core with the "correct" pid can be found. - - In some containers our view of pids is confused. We see the container - pid namespace, but the core is generated using the host pid namespace. - Since tests are run in a new fresh directory any core here is most like - is ours. - - Signed-off-by: Mark Wielaard - -diff --git a/tests/backtrace-subr.sh b/tests/backtrace-subr.sh -index e04a7ea..ff42c6f 100644 ---- a/tests/backtrace-subr.sh -+++ b/tests/backtrace-subr.sh -@@ -174,6 +174,13 @@ check_native_core() - fi - fi - if [ ! -f "$core" ]; then -+ # In some containers our view of pids is confused. Since tests are -+ # run in a new fresh directory any core here is most like is ours. -+ if ls core.[0-9]* 1> /dev/null 2>&1; then -+ mv core.[0-9]* "$core" -+ fi -+ fi -+ if [ ! -f "$core" ]; then - echo "No $core file generated"; - exit 77; - fi diff --git a/elfutils-0.170-dwarf_aggregate_size.patch b/elfutils-0.170-dwarf_aggregate_size.patch deleted file mode 100644 index 895458e..0000000 --- a/elfutils-0.170-dwarf_aggregate_size.patch +++ /dev/null @@ -1,170 +0,0 @@ -From a2246aaad96e062eb3bab55af9526aaa70adcfd0 Mon Sep 17 00:00:00 2001 -From: Dima Kogan -Date: Fri, 8 Dec 2017 01:45:10 -0800 -Subject: [PATCH 1/2] libdw: dwarf_aggregate_size() works with - multi-dimensional arrays - -If we have a multidimensional array of dimensions (a,b,c) the number of elements -should be a*b*c, but prior to this patch dwarf_aggregate_size() would report -a+b+c instead. - -This patch fixes the bug and adds a test that demonstrates the bug (the test -fails without the functional part of this patch). - -Fixes: https://sourceware.org/bugzilla/show_bug.cgi?id=22546 - -Signed-off-by: Dima Kogan ---- - libdw/ChangeLog | 5 +++++ - libdw/dwarf_aggregate_size.c | 43 ++++++++++++++++++++++--------------------- - tests/ChangeLog | 6 ++++++ - tests/run-aggregate-size.sh | 2 ++ - tests/run-peel-type.sh | 1 + - tests/testfile-sizes3.o.bz2 | Bin 1147 -> 1208 bytes - 6 files changed, 36 insertions(+), 21 deletions(-) - -diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c -index 838468d..3010c0a 100644 ---- a/libdw/dwarf_aggregate_size.c -+++ b/libdw/dwarf_aggregate_size.c -@@ -63,7 +63,7 @@ array_size (Dwarf_Die *die, Dwarf_Word *size, - return -1; - - bool any = false; -- Dwarf_Word total = 0; -+ Dwarf_Word count_total = 1; - do - { - Dwarf_Word count; -@@ -134,34 +134,35 @@ array_size (Dwarf_Die *die, Dwarf_Word *size, - continue; - } - -- /* This is a subrange_type or enumeration_type and we've set COUNT. -- Now determine the stride for this array dimension. */ -- Dwarf_Word stride = eltsize; -- if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_byte_stride, -- attr_mem) != NULL) -- { -- if (INTUSE(dwarf_formudata) (attr_mem, &stride) != 0) -- return -1; -- } -- else if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_bit_stride, -- attr_mem) != NULL) -- { -- if (INTUSE(dwarf_formudata) (attr_mem, &stride) != 0) -- return -1; -- if (stride % 8) /* XXX maybe compute in bits? */ -- return -1; -- stride /= 8; -- } -+ count_total *= count; - - any = true; -- total += stride * count; - } - while (INTUSE(dwarf_siblingof) (&child, &child) == 0); - - if (!any) - return -1; - -- *size = total; -+ /* This is a subrange_type or enumeration_type and we've set COUNT. -+ Now determine the stride for this array. */ -+ Dwarf_Word stride = eltsize; -+ if (INTUSE(dwarf_attr_integrate) (die, DW_AT_byte_stride, -+ attr_mem) != NULL) -+ { -+ if (INTUSE(dwarf_formudata) (attr_mem, &stride) != 0) -+ return -1; -+ } -+ else if (INTUSE(dwarf_attr_integrate) (die, DW_AT_bit_stride, -+ attr_mem) != NULL) -+ { -+ if (INTUSE(dwarf_formudata) (attr_mem, &stride) != 0) -+ return -1; -+ if (stride % 8) /* XXX maybe compute in bits? */ -+ return -1; -+ stride /= 8; -+ } -+ -+ *size = count_total * stride; - return 0; - } - -diff --git a/tests/run-aggregate-size.sh b/tests/run-aggregate-size.sh -index 42b0742..6d8aa24 100755 ---- a/tests/run-aggregate-size.sh -+++ b/tests/run-aggregate-size.sh -@@ -54,6 +54,7 @@ - # volatile int ia[32]; - # const volatile void * const volatile restrict va[64]; - # struct s sa[8]; -+# double d3d[3][4][5]; - # - # typedef const int foo; - # typedef volatile foo bar; -@@ -98,6 +99,7 @@ ca size 16 - ia size 128 - va size 512 - sa size 128 -+d3d size 480 - f size 4 - b size 4 - EOF -diff --git a/tests/run-peel-type.sh b/tests/run-peel-type.sh -index 7fd96e8..668e316 100755 ---- a/tests/run-peel-type.sh -+++ b/tests/run-peel-type.sh -@@ -55,6 +55,7 @@ ca raw type array_type - ia raw type array_type - va raw type array_type - sa raw type array_type -+d3d raw type array_type - f raw type base_type - b raw type base_type - EOF - --- -1.8.3.1 - -From c25dc62e59dc42378370602b0d05415a42b051d6 Mon Sep 17 00:00:00 2001 -From: Mark Wielaard -Date: Mon, 11 Dec 2017 23:58:34 +0100 -Subject: [PATCH 2/2] libdw: dwarf_aggregate_size should not peel the given - DIE. - -Reserve memory for a new DIE first. The caller might not care, but it -isn't really nice to change the DIE the caller gave us. - -See also https://sourceware.org/bugzilla/show_bug.cgi?id=22546#c5 - -Signed-off-by: Mark Wielaard ---- - libdw/ChangeLog | 5 +++++ - libdw/dwarf_aggregate_size.c | 6 +++--- - 2 files changed, 8 insertions(+), 3 deletions(-) - -diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c -index 3010c0a..6e50185 100644 ---- a/libdw/dwarf_aggregate_size.c -+++ b/libdw/dwarf_aggregate_size.c -@@ -199,12 +199,12 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, Dwarf_Die *type_mem) - int - dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) - { -- Dwarf_Die type_mem; -+ Dwarf_Die die_mem, type_mem; - -- if (INTUSE (dwarf_peel_type) (die, die) != 0) -+ if (INTUSE (dwarf_peel_type) (die, &die_mem) != 0) - return -1; - -- return aggregate_size (die, size, &type_mem); -+ return aggregate_size (&die_mem, size, &type_mem); - } - INTDEF (dwarf_aggregate_size) - OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144) --- -1.8.3.1 - diff --git a/elfutils-0.170-elf_sync.patch b/elfutils-0.170-elf_sync.patch deleted file mode 100644 index 1d116e2..0000000 --- a/elfutils-0.170-elf_sync.patch +++ /dev/null @@ -1,306 +0,0 @@ -commit 6d2e7e7100429df3d548251e9685a1eb7bb434cb -Author: Mark Wielaard -Date: Tue Aug 15 22:43:01 2017 +0200 - - libelf: Sync elf.h from glibc. - - Add new powerpc note descriptors. - - Signed-off-by: Mark Wielaard - -diff --git a/libelf/elf.h b/libelf/elf.h -index fa35203..84a7126 100644 ---- a/libelf/elf.h -+++ b/libelf/elf.h -@@ -1,5 +1,5 @@ - /* This file defines standard ELF types, structures, and macros. -- Copyright (C) 1995-2016 Free Software Foundation, Inc. -+ Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -762,8 +762,23 @@ typedef struct - #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ - #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ - #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ -+#define NT_PPC_TAR 0x103 /* Target Address Register */ -+#define NT_PPC_PPR 0x104 /* Program Priority Register */ -+#define NT_PPC_DSCR 0x105 /* Data Stream Control Register */ -+#define NT_PPC_EBB 0x106 /* Event Based Branch Registers */ -+#define NT_PPC_PMU 0x107 /* Performance Monitor Registers */ -+#define NT_PPC_TM_CGPR 0x108 /* TM checkpointed GPR Registers */ -+#define NT_PPC_TM_CFPR 0x109 /* TM checkpointed FPR Registers */ -+#define NT_PPC_TM_CVMX 0x10a /* TM checkpointed VMX Registers */ -+#define NT_PPC_TM_CVSX 0x10b /* TM checkpointed VSX Registers */ -+#define NT_PPC_TM_SPR 0x10c /* TM Special Purpose Registers */ -+#define NT_PPC_TM_CTAR 0x10d /* TM checkpointed Target Address -+ Register */ -+#define NT_PPC_TM_CPPR 0x10e /* TM checkpointed Program Priority -+ Register */ -+#define NT_PPC_TM_CDSCR 0x10f /* TM checkpointed Data Stream Control -+ Register */ - #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ --#define NT_PPC_TM_SPR 0x10c /* PowerPC HW Transactional Memory SPRs */ - #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ - #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ - #define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ -@@ -1171,6 +1186,18 @@ typedef struct - #define AT_L2_CACHESHAPE 36 - #define AT_L3_CACHESHAPE 37 - -+/* Shapes of the caches, with more room to describe them. -+ *GEOMETRY are comprised of cache line size in bytes in the bottom 16 bits -+ and the cache associativity in the next 16 bits. */ -+#define AT_L1I_CACHESIZE 40 -+#define AT_L1I_CACHEGEOMETRY 41 -+#define AT_L1D_CACHESIZE 42 -+#define AT_L1D_CACHEGEOMETRY 43 -+#define AT_L2_CACHESIZE 44 -+#define AT_L2_CACHEGEOMETRY 45 -+#define AT_L3_CACHESIZE 46 -+#define AT_L3_CACHEGEOMETRY 47 -+ - /* Note section contents. Each entry in the note section begins with - a header of a fixed form. */ - -@@ -2533,9 +2560,10 @@ enum - #define DT_PPC64_OPT (DT_LOPROC + 3) - #define DT_PPC64_NUM 4 - --/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry. */ -+/* PowerPC64 specific bits in the DT_PPC64_OPT Dyn entry. */ - #define PPC64_OPT_TLS 1 - #define PPC64_OPT_MULTI_TOC 2 -+#define PPC64_OPT_LOCALENTRY 4 - - /* PowerPC64 specific values for the Elf64_Sym st_other field. */ - #define STO_PPC64_LOCAL_BIT 5 -@@ -3683,6 +3711,68 @@ enum - #define R_BPF_NONE 0 /* No reloc */ - #define R_BPF_MAP_FD 1 /* Map fd to pointer */ - -+/* Imagination Meta specific relocations. */ -+ -+#define R_METAG_HIADDR16 0 -+#define R_METAG_LOADDR16 1 -+#define R_METAG_ADDR32 2 /* 32bit absolute address */ -+#define R_METAG_NONE 3 /* No reloc */ -+#define R_METAG_RELBRANCH 4 -+#define R_METAG_GETSETOFF 5 -+ -+/* Backward compatability */ -+#define R_METAG_REG32OP1 6 -+#define R_METAG_REG32OP2 7 -+#define R_METAG_REG32OP3 8 -+#define R_METAG_REG16OP1 9 -+#define R_METAG_REG16OP2 10 -+#define R_METAG_REG16OP3 11 -+#define R_METAG_REG32OP4 12 -+ -+#define R_METAG_HIOG 13 -+#define R_METAG_LOOG 14 -+ -+#define R_METAG_REL8 15 -+#define R_METAG_REL16 16 -+ -+/* GNU */ -+#define R_METAG_GNU_VTINHERIT 30 -+#define R_METAG_GNU_VTENTRY 31 -+ -+/* PIC relocations */ -+#define R_METAG_HI16_GOTOFF 32 -+#define R_METAG_LO16_GOTOFF 33 -+#define R_METAG_GETSET_GOTOFF 34 -+#define R_METAG_GETSET_GOT 35 -+#define R_METAG_HI16_GOTPC 36 -+#define R_METAG_LO16_GOTPC 37 -+#define R_METAG_HI16_PLT 38 -+#define R_METAG_LO16_PLT 39 -+#define R_METAG_RELBRANCH_PLT 40 -+#define R_METAG_GOTOFF 41 -+#define R_METAG_PLT 42 -+#define R_METAG_COPY 43 -+#define R_METAG_JMP_SLOT 44 -+#define R_METAG_RELATIVE 45 -+#define R_METAG_GLOB_DAT 46 -+ -+/* TLS relocations */ -+#define R_METAG_TLS_GD 47 -+#define R_METAG_TLS_LDM 48 -+#define R_METAG_TLS_LDO_HI16 49 -+#define R_METAG_TLS_LDO_LO16 50 -+#define R_METAG_TLS_LDO 51 -+#define R_METAG_TLS_IE 52 -+#define R_METAG_TLS_IENONPIC 53 -+#define R_METAG_TLS_IENONPIC_HI16 54 -+#define R_METAG_TLS_IENONPIC_LO16 55 -+#define R_METAG_TLS_TPOFF 56 -+#define R_METAG_TLS_DTPMOD 57 -+#define R_METAG_TLS_DTPOFF 58 -+#define R_METAG_TLS_LE 59 -+#define R_METAG_TLS_LE_HI16 60 -+#define R_METAG_TLS_LE_LO16 61 -+ - __END_DECLS - - #endif /* elf.h */ -commit 88f3d2daa107b09fdba376a82bce7ed534c93645 -Author: Mark Wielaard -Date: Sat Feb 17 00:23:19 2018 +0100 - - libelf: Sync elf.h from glibc. - - Signed-off-by: Mark Wielaard - -diff --git a/libelf/elf.h b/libelf/elf.h -index 84a7126..4f43577 100644 ---- a/libelf/elf.h -+++ b/libelf/elf.h -@@ -1,5 +1,5 @@ - /* This file defines standard ELF types, structures, and macros. -- Copyright (C) 1995-2017 Free Software Foundation, Inc. -+ Copyright (C) 1995-2018 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -739,6 +739,8 @@ typedef struct - /* Legal values for note segment descriptor types for core files. */ - - #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */ -+#define NT_PRFPREG 2 /* Contains copy of fpregset -+ struct. */ - #define NT_FPREGSET 2 /* Contains copy of fpregset struct */ - #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */ - #define NT_PRXREG 4 /* Contains copy of prxregset struct */ -@@ -790,11 +792,20 @@ typedef struct - #define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ - #define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */ - #define NT_S390_TDB 0x308 /* s390 transaction diagnostic block */ -+#define NT_S390_VXRS_LOW 0x309 /* s390 vector registers 0-15 -+ upper half. */ -+#define NT_S390_VXRS_HIGH 0x30a /* s390 vector registers 16-31. */ -+#define NT_S390_GS_CB 0x30b /* s390 guarded storage registers. */ -+#define NT_S390_GS_BC 0x30c /* s390 guarded storage -+ broadcast control block. */ -+#define NT_S390_RI_CB 0x30d /* s390 runtime instrumentation. */ - #define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ - #define NT_ARM_TLS 0x401 /* ARM TLS register */ - #define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ - #define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */ - #define NT_ARM_SYSTEM_CALL 0x404 /* ARM system call number */ -+#define NT_ARM_SVE 0x405 /* ARM Scalable Vector Extension -+ registers */ - - /* Legal values for the note segment descriptor types for object files. */ - -@@ -859,7 +870,8 @@ typedef struct - #define DT_ENCODING 32 /* Start of encoded range */ - #define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ - #define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ --#define DT_NUM 34 /* Number used */ -+#define DT_SYMTAB_SHNDX 34 /* Address of SYMTAB_SHNDX section */ -+#define DT_NUM 35 /* Number used */ - #define DT_LOOS 0x6000000d /* Start of OS-specific */ - #define DT_HIOS 0x6ffff000 /* End of OS-specific */ - #define DT_LOPROC 0x70000000 /* Start of processor-specific */ -@@ -967,6 +979,8 @@ typedef struct - #define DF_1_SYMINTPOSE 0x00800000 /* Object has individual interposers. */ - #define DF_1_GLOBAUDIT 0x01000000 /* Global auditing required. */ - #define DF_1_SINGLETON 0x02000000 /* Singleton symbols are used. */ -+#define DF_1_STUB 0x04000000 -+#define DF_1_PIE 0x08000000 - - /* Flags for the feature selection in DT_FEATURE_1. */ - #define DTF_1_PARINIT 0x00000001 -@@ -1263,6 +1277,62 @@ typedef struct - /* Version note generated by GNU gold containing a version string. */ - #define NT_GNU_GOLD_VERSION 4 - -+/* Program property. */ -+#define NT_GNU_PROPERTY_TYPE_0 5 -+ -+/* Note section name of program property. */ -+#define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property" -+ -+/* Values used in GNU .note.gnu.property notes (NT_GNU_PROPERTY_TYPE_0). */ -+ -+/* Stack size. */ -+#define GNU_PROPERTY_STACK_SIZE 1 -+/* No copy relocation on protected data symbol. */ -+#define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 -+ -+/* Processor-specific semantics, lo */ -+#define GNU_PROPERTY_LOPROC 0xc0000000 -+/* Processor-specific semantics, hi */ -+#define GNU_PROPERTY_HIPROC 0xdfffffff -+/* Application-specific semantics, lo */ -+#define GNU_PROPERTY_LOUSER 0xe0000000 -+/* Application-specific semantics, hi */ -+#define GNU_PROPERTY_HIUSER 0xffffffff -+ -+/* The x86 instruction sets indicated by the corresponding bits are -+ used in program. Their support in the hardware is optional. */ -+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 -+/* The x86 instruction sets indicated by the corresponding bits are -+ used in program and they must be supported by the hardware. */ -+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 -+/* X86 processor-specific features used in program. */ -+#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 -+ -+#define GNU_PROPERTY_X86_ISA_1_486 (1U << 0) -+#define GNU_PROPERTY_X86_ISA_1_586 (1U << 1) -+#define GNU_PROPERTY_X86_ISA_1_686 (1U << 2) -+#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 3) -+#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 4) -+#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 5) -+#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 6) -+#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 7) -+#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 8) -+#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 9) -+#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 10) -+#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 11) -+#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 12) -+#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 13) -+#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 14) -+#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 15) -+#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 16) -+#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 17) -+ -+/* This indicates that all executable sections are compatible with -+ IBT. */ -+#define GNU_PROPERTY_X86_FEATURE_1_IBT (1U << 0) -+/* This indicates that all executable sections are compatible with -+ SHSTK. */ -+#define GNU_PROPERTY_X86_FEATURE_1_SHSTK (1U << 1) - - /* Move records. */ - typedef struct -@@ -3706,6 +3776,28 @@ enum - - #define R_TILEGX_NUM 130 - -+/* RISC-V ELF Flags */ -+#define EF_RISCV_RVC 0x0001 -+#define EF_RISCV_FLOAT_ABI 0x0006 -+#define EF_RISCV_FLOAT_ABI_SOFT 0x0000 -+#define EF_RISCV_FLOAT_ABI_SINGLE 0x0002 -+#define EF_RISCV_FLOAT_ABI_DOUBLE 0x0004 -+#define EF_RISCV_FLOAT_ABI_QUAD 0x0006 -+ -+/* RISC-V relocations. */ -+#define R_RISCV_NONE 0 -+#define R_RISCV_32 1 -+#define R_RISCV_64 2 -+#define R_RISCV_RELATIVE 3 -+#define R_RISCV_COPY 4 -+#define R_RISCV_JUMP_SLOT 5 -+#define R_RISCV_TLS_DTPMOD32 6 -+#define R_RISCV_TLS_DTPMOD64 7 -+#define R_RISCV_TLS_DTPREL32 8 -+#define R_RISCV_TLS_DTPREL64 9 -+#define R_RISCV_TLS_TPREL32 10 -+#define R_RISCV_TLS_TPREL64 11 -+ - /* BPF specific declarations. */ - - #define R_BPF_NONE 0 /* No reloc */ diff --git a/elfutils-0.170-locviews.patch b/elfutils-0.170-locviews.patch deleted file mode 100644 index 3709e7b..0000000 --- a/elfutils-0.170-locviews.patch +++ /dev/null @@ -1,1270 +0,0 @@ -commit 704f5fc477efaf120980449e677deb563da8491f -Author: Mark Wielaard -Date: Wed Nov 29 15:43:26 2017 +0100 - - readelf: Adjust print_ops formatting. - - Use only 2 spaces for index (there are never 10000, the most seen in the - wild is 64). Adjust re-indenting after GNU_entry_value. - - Signed-off-by: Mark Wielaard - -diff --git a/src/readelf.c b/src/readelf.c -index a9168d1..2faa1d5 100644 ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -1,5 +1,5 @@ - /* Print information from ELF file in human-readable form. -- Copyright (C) 1999-2016 Red Hat, Inc. -+ Copyright (C) 1999-2017 Red Hat, Inc. - This file is part of elfutils. - Written by Ulrich Drepper , 1999. - -@@ -4152,7 +4152,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - CONSUME (addrsize); - - char *a = format_dwarf_addr (dwflmod, 0, addr, addr); -- printf ("%*s[%4" PRIuMAX "] %s %s\n", -+ printf ("%*s[%2" PRIuMAX "] %s %s\n", - indent, "", (uintmax_t) offset, op_name, a); - free (a); - -@@ -4172,7 +4172,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - data += ref_size; - CONSUME (ref_size); - /* addr is a DIE offset, so format it as one. */ -- printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", -+ printf ("%*s[%2" PRIuMAX "] %s [%6" PRIxMAX "]\n", - indent, "", (uintmax_t) offset, - op_name, (uintmax_t) addr); - offset += 1 + ref_size; -@@ -4184,7 +4184,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const1u: - // XXX value might be modified by relocation - NEED (1); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu8 "\n", - indent, "", (uintmax_t) offset, - op_name, *((uint8_t *) data)); - ++data; -@@ -4195,7 +4195,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const2u: - NEED (2); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu16 "\n", - indent, "", (uintmax_t) offset, - op_name, read_2ubyte_unaligned (dbg, data)); - CONSUME (2); -@@ -4206,7 +4206,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const4u: - NEED (4); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu32 "\n", - indent, "", (uintmax_t) offset, - op_name, read_4ubyte_unaligned (dbg, data)); - CONSUME (4); -@@ -4217,7 +4217,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const8u: - NEED (8); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu64 "\n", - indent, "", (uintmax_t) offset, - op_name, (uint64_t) read_8ubyte_unaligned (dbg, data)); - CONSUME (8); -@@ -4228,7 +4228,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const1s: - NEED (1); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRId8 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRId8 "\n", - indent, "", (uintmax_t) offset, - op_name, *((int8_t *) data)); - ++data; -@@ -4239,7 +4239,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const2s: - NEED (2); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRId16 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRId16 "\n", - indent, "", (uintmax_t) offset, - op_name, read_2sbyte_unaligned (dbg, data)); - CONSUME (2); -@@ -4250,7 +4250,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const4s: - NEED (4); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRId32 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRId32 "\n", - indent, "", (uintmax_t) offset, - op_name, read_4sbyte_unaligned (dbg, data)); - CONSUME (4); -@@ -4261,7 +4261,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_const8s: - NEED (8); - // XXX value might be modified by relocation -- printf ("%*s[%4" PRIuMAX "] %s %" PRId64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRId64 "\n", - indent, "", (uintmax_t) offset, - op_name, read_8sbyte_unaligned (dbg, data)); - CONSUME (8); -@@ -4277,7 +4277,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - uint64_t uleb; - NEED (1); - get_uleb128 (uleb, data, data + len); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu64 "\n", - indent, "", (uintmax_t) offset, op_name, uleb); - CONSUME (data - start); - offset += 1 + (data - start); -@@ -4290,7 +4290,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - get_uleb128 (uleb, data, data + len); - NEED (1); - get_uleb128 (uleb2, data, data + len); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 ", %" PRIu64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu64 ", %" PRIu64 "\n", - indent, "", (uintmax_t) offset, op_name, uleb, uleb2); - CONSUME (data - start); - offset += 1 + (data - start); -@@ -4303,7 +4303,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - int64_t sleb; - NEED (1); - get_sleb128 (sleb, data, data + len); -- printf ("%*s[%4" PRIuMAX "] %s %" PRId64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRId64 "\n", - indent, "", (uintmax_t) offset, op_name, sleb); - CONSUME (data - start); - offset += 1 + (data - start); -@@ -4315,7 +4315,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - get_uleb128 (uleb, data, data + len); - NEED (1); - get_sleb128 (sleb, data, data + len); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 " %" PRId64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu64 " %" PRId64 "\n", - indent, "", (uintmax_t) offset, op_name, uleb, sleb); - CONSUME (data - start); - offset += 1 + (data - start); -@@ -4323,7 +4323,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - - case DW_OP_call2: - NEED (2); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu16 "\n", - indent, "", (uintmax_t) offset, op_name, - read_2ubyte_unaligned (dbg, data)); - CONSUME (2); -@@ -4332,7 +4332,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - - case DW_OP_call4: - NEED (4); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu32 "\n", - indent, "", (uintmax_t) offset, op_name, - read_4ubyte_unaligned (dbg, data)); - CONSUME (4); -@@ -4342,7 +4342,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - case DW_OP_skip: - case DW_OP_bra: - NEED (2); -- printf ("%*s[%4" PRIuMAX "] %s %" PRIuMAX "\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIuMAX "\n", - indent, "", (uintmax_t) offset, op_name, - (uintmax_t) (offset + read_2sbyte_unaligned (dbg, data) + 3)); - CONSUME (2); -@@ -4354,7 +4354,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - start = data; - NEED (1); - get_uleb128 (uleb, data, data + len); -- printf ("%*s[%4" PRIuMAX "] %s: ", -+ printf ("%*s[%2" PRIuMAX "] %s: ", - indent, "", (uintmax_t) offset, op_name); - NEED (uleb); - print_block (uleb, data); -@@ -4378,7 +4378,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - NEED (1); - get_sleb128 (sleb, data, data + len); - -- printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "] %+" PRId64 "\n", -+ printf ("%*s[%2" PRIuMAX "] %s [%6" PRIxMAX "] %+" PRId64 "\n", - indent, "", (intmax_t) offset, - op_name, (uintmax_t) addr, sleb); - CONSUME (data - start); -@@ -4390,10 +4390,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - start = data; - NEED (1); - get_uleb128 (uleb, data, data + len); -- printf ("%*s[%4" PRIuMAX "] %s:\n", -+ printf ("%*s[%2" PRIuMAX "] %s:\n", - indent, "", (uintmax_t) offset, op_name); - NEED (uleb); -- print_ops (dwflmod, dbg, indent + 6, indent + 6, vers, -+ print_ops (dwflmod, dbg, indent + 5, indent + 5, vers, - addrsize, offset_size, cu, uleb, data); - data += uleb; - CONSUME (data - start); -@@ -4411,7 +4411,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - NEED (1); - uint8_t usize = *(uint8_t *) data++; - NEED (usize); -- printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "] ", -+ printf ("%*s[%2" PRIuMAX "] %s [%6" PRIxMAX "] ", - indent, "", (uintmax_t) offset, op_name, uleb); - print_block (usize, data); - data += usize; -@@ -4429,7 +4429,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - get_uleb128 (uleb2, data, data + len); - if (! print_unresolved_addresses && cu != NULL) - uleb2 += cu->start; -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 " [%6" PRIx64 "]\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu64 " [%6" PRIx64 "]\n", - indent, "", (uintmax_t) offset, op_name, uleb, uleb2); - CONSUME (data - start); - offset += 1 + (data - start); -@@ -4445,7 +4445,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - get_uleb128 (uleb, data, data + len); - if (! print_unresolved_addresses && cu != NULL) - uleb += cu->start; -- printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 " [%6" PRIxMAX "]\n", -+ printf ("%*s[%2" PRIuMAX "] %s %" PRIu8 " [%6" PRIxMAX "]\n", - indent, "", (uintmax_t) offset, - op_name, usize, uleb); - CONSUME (data - start); -@@ -4461,7 +4461,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - get_uleb128 (uleb, data, data + len); - if (uleb != 0 && ! print_unresolved_addresses && cu != NULL) - uleb += cu->start; -- printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", -+ printf ("%*s[%2" PRIuMAX "] %s [%6" PRIxMAX "]\n", - indent, "", (uintmax_t) offset, op_name, uleb); - CONSUME (data - start); - offset += 1 + (data - start); -@@ -4474,7 +4474,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - uintmax_t param_off = (uintmax_t) read_4ubyte_unaligned (dbg, data); - if (! print_unresolved_addresses && cu != NULL) - param_off += cu->start; -- printf ("%*s[%4" PRIuMAX "] %s [%6" PRIxMAX "]\n", -+ printf ("%*s[%2" PRIuMAX "] %s [%6" PRIxMAX "]\n", - indent, "", (uintmax_t) offset, op_name, param_off); - CONSUME (4); - data += 4; -@@ -4483,7 +4483,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - - default: - /* No Operand. */ -- printf ("%*s[%4" PRIuMAX "] %s\n", -+ printf ("%*s[%2" PRIuMAX "] %s\n", - indent, "", (uintmax_t) offset, op_name); - ++offset; - break; -@@ -4493,7 +4493,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, - continue; - - invalid: -- printf (gettext ("%*s[%4" PRIuMAX "] %s \n"), -+ printf (gettext ("%*s[%2" PRIuMAX "] %s \n"), - indent, "", (uintmax_t) offset, op_name); - break; - } -diff --git a/tests/run-readelf-dwz-multi.sh b/tests/run-readelf-dwz-multi.sh -index 23ca944..139b8c1 100755 ---- a/tests/run-readelf-dwz-multi.sh -+++ b/tests/run-readelf-dwz-multi.sh -@@ -107,7 +107,7 @@ DWARF section [28] '.debug_info' at offset 0x1078: - low_pc (addr) 0x00000000004006ac
- high_pc (udata) 44 (0x00000000004006d8) - frame_base (exprloc) -- [ 0] call_frame_cfa -+ [ 0] call_frame_cfa - GNU_all_tail_call_sites (flag_present) yes - sibling (ref_udata) [ 6e] - [ 48] formal_parameter -@@ -116,21 +116,21 @@ DWARF section [28] '.debug_info' at offset 0x1078: - decl_line (data1) 3 - type (GNU_ref_alt) [ 3e] - location (exprloc) -- [ 0] fbreg -36 -+ [ 0] fbreg -36 - [ 56] formal_parameter - name (strp) "argv" - decl_file (data1) 1 - decl_line (data1) 3 - type (ref_udata) [ 6e] - location (exprloc) -- [ 0] fbreg -48 -+ [ 0] fbreg -48 - [ 61] variable - name (string) "b" - decl_file (data1) 1 - decl_line (data1) 5 - type (GNU_ref_alt) [ 5a] - location (exprloc) -- [ 0] fbreg -32 -+ [ 0] fbreg -32 - [ 6e] pointer_type - byte_size (data1) 8 - type (ref_udata) [ 2b] -@@ -168,7 +168,7 @@ DWARF section [28] '.debug_info' at offset 0x1078: - low_pc (addr) 0x00000000004006ac
- high_pc (udata) 44 (0x00000000004006d8) - frame_base (exprloc) -- [ 0] call_frame_cfa -+ [ 0] call_frame_cfa - GNU_all_tail_call_sites (flag_present) yes - sibling (ref_udata) [ 6e] - [ 48] formal_parameter -@@ -177,21 +177,21 @@ DWARF section [28] '.debug_info' at offset 0x1078: - decl_line (data1) 3 - type (GNU_ref_alt) [ 3e] - location (exprloc) -- [ 0] fbreg -36 -+ [ 0] fbreg -36 - [ 56] formal_parameter - name (strp) "argv" - decl_file (data1) 1 - decl_line (data1) 3 - type (ref_udata) [ 6e] - location (exprloc) -- [ 0] fbreg -48 -+ [ 0] fbreg -48 - [ 61] variable - name (string) "b" - decl_file (data1) 1 - decl_line (data1) 5 - type (GNU_ref_alt) [ 5a] - location (exprloc) -- [ 0] fbreg -32 -+ [ 0] fbreg -32 - [ 6e] pointer_type - byte_size (data1) 8 - type (ref_udata) [ 2b] -@@ -225,7 +225,7 @@ DWARF section [25] '.debug_info' at offset 0x106c: - low_pc (addr) +0x0000000000000670 - high_pc (udata) 23 (+0x0000000000000687) - frame_base (exprloc) -- [ 0] call_frame_cfa -+ [ 0] call_frame_cfa - GNU_all_call_sites (flag_present) yes - [ 41] formal_parameter - name (string) "fb" -@@ -233,7 +233,7 @@ DWARF section [25] '.debug_info' at offset 0x106c: - decl_line (data1) 3 - type (GNU_ref_alt) [ 76] - location (exprloc) -- [ 0] fbreg -24 -+ [ 0] fbreg -24 - EOF - - # Same as above, but find alt debug file in a .dwz subdir. -@@ -265,7 +265,7 @@ DWARF section [25] '.debug_info' at offset 0x106c: - low_pc (addr) +0x0000000000000670 - high_pc (udata) 23 (+0x0000000000000687) - frame_base (exprloc) -- [ 0] call_frame_cfa -+ [ 0] call_frame_cfa - GNU_all_call_sites (flag_present) yes - [ 41] formal_parameter - name (string) "fb" -@@ -273,7 +273,7 @@ DWARF section [25] '.debug_info' at offset 0x106c: - decl_line (data1) 3 - type (GNU_ref_alt) [ 76] - location (exprloc) -- [ 0] fbreg -24 -+ [ 0] fbreg -24 - EOF - mv .dwz/testfile_multi.dwz . - rmdir .dwz -@@ -304,7 +304,7 @@ DWARF section [28] '.debug_info' at offset 0x1088: - low_pc (addr) 0x00000000004004ec
- high_pc (udata) 18 (0x00000000004004fe) - frame_base (exprloc) -- [ 0] call_frame_cfa -+ [ 0] call_frame_cfa - GNU_all_call_sites (flag_present) yes - [ 41] formal_parameter - name (GNU_strp_alt) "argc" -@@ -312,21 +312,21 @@ DWARF section [28] '.debug_info' at offset 0x1088: - decl_line (data1) 8 - type (GNU_ref_alt) [ 30] - location (exprloc) -- [ 0] fbreg -36 -+ [ 0] fbreg -36 - [ 4f] formal_parameter - name (GNU_strp_alt) "argv" - decl_file (data1) 1 - decl_line (data1) 8 - type (GNU_ref_alt) [ 41] - location (exprloc) -- [ 0] fbreg -48 -+ [ 0] fbreg -48 - [ 5d] variable - name (string) "fbb" - decl_file (data1) 1 - decl_line (data1) 10 - type (GNU_ref_alt) [ 14] - location (exprloc) -- [ 0] fbreg -32 -+ [ 0] fbreg -32 - EOF - - exit 0 -diff --git a/tests/run-readelf-loc.sh b/tests/run-readelf-loc.sh -index 98870fc..3959d3d 100755 ---- a/tests/run-readelf-loc.sh -+++ b/tests/run-readelf-loc.sh -@@ -63,9 +63,9 @@ testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ra - testfileloc<<\EOF - - DWARF section [33] '.debug_loc' at offset 0xd2a: -- [ 0] 0x0000000000400480
..0x000000000040048d [ 0] reg5 -- [ 23] 0x0000000000400485 ..0x000000000040048d [ 0] reg5 -- [ 46] 0x00000000004004b2 ..0x00000000004004ba [ 0] breg5 0 -+ [ 0] 0x0000000000400480
..0x000000000040048d [ 0] reg5 -+ [ 23] 0x0000000000400485 ..0x000000000040048d [ 0] reg5 -+ [ 46] 0x00000000004004b2 ..0x00000000004004ba [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: - [ 0] 0x0000000000400480
..0x0000000000400482 -@@ -79,9 +79,9 @@ testrun_compare ${abs_top_builddir}/src/readelf -N --debug-dump=loc --debug-dump - testfileloc<<\EOF - - DWARF section [33] '.debug_loc' at offset 0xd2a: -- [ 0] 0x0000000000400480..0x000000000040048d [ 0] reg5 -- [ 23] 0x0000000000400485..0x000000000040048d [ 0] reg5 -- [ 46] 0x00000000004004b2..0x00000000004004ba [ 0] breg5 0 -+ [ 0] 0x0000000000400480..0x000000000040048d [ 0] reg5 -+ [ 23] 0x0000000000400485..0x000000000040048d [ 0] reg5 -+ [ 46] 0x00000000004004b2..0x00000000004004ba [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: - [ 0] 0x0000000000400480..0x0000000000400482 -@@ -95,9 +95,9 @@ testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc --debug-dump - testfileloc<<\EOF - - DWARF section [33] '.debug_loc' at offset 0xd2a: -- [ 0] 000000000000000000..0x000000000000000d [ 0] reg5 -- [ 23] 0x0000000000000005..0x000000000000000d [ 0] reg5 -- [ 46] 0x0000000000000012..0x000000000000001a [ 0] breg5 0 -+ [ 0] 000000000000000000..0x000000000000000d [ 0] reg5 -+ [ 23] 0x0000000000000005..0x000000000000000d [ 0] reg5 -+ [ 46] 0x0000000000000012..0x000000000000001a [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: - [ 0] 000000000000000000..0x0000000000000002 -diff --git a/tests/run-readelf-zdebug-rel.sh b/tests/run-readelf-zdebug-rel.sh -index 1232d63..082971e 100755 ---- a/tests/run-readelf-zdebug-rel.sh -+++ b/tests/run-readelf-zdebug-rel.sh -@@ -69,7 +69,7 @@ DWARF section [ 4] '.debug_info' at offset 0x58: - low_pc (addr) 000000000000000000 - high_pc (data8) 24 (0x0000000000000018) - frame_base (exprloc) -- [ 0] call_frame_cfa -+ [ 0] call_frame_cfa - GNU_all_call_sites (flag_present) yes - sibling (ref4) [ 80] - [ 4e] formal_parameter -@@ -84,7 +84,7 @@ DWARF section [ 4] '.debug_info' at offset 0x58: - decl_line (data1) 4 - type (ref4) [ 87] - location (exprloc) -- [ 0] reg4 -+ [ 0] reg4 - [ 6a] variable - name (string) "a" - decl_file (data1) 1 -@@ -97,7 +97,7 @@ DWARF section [ 4] '.debug_info' at offset 0x58: - decl_line (data1) 7 - type (ref4) [ 9a] - location (exprloc) -- [ 0] reg5 -+ [ 0] reg5 - [ 80] base_type - byte_size (data1) 4 - encoding (data1) signed (5) -@@ -127,12 +127,12 @@ cat info.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=i - cat > loc.out << \EOF - - DWARF section [ 7] '.debug_loc' at offset 0x185: -- [ 0] 000000000000000000..0x0000000000000003 [ 0] reg5 -- 0x0000000000000003..0x0000000000000010 [ 0] breg5 -42 -- [ 2] stack_value -- 0x0000000000000010..0x0000000000000018 [ 0] GNU_entry_value: -- [ 0] reg5 -- [ 3] stack_value -+ [ 0] 000000000000000000..0x0000000000000003 [ 0] reg5 -+ 0x0000000000000003..0x0000000000000010 [ 0] breg5 -42 -+ [ 2] stack_value -+ 0x0000000000000010..0x0000000000000018 [ 0] GNU_entry_value: -+ [ 0] reg5 -+ [ 3] stack_value - EOF - - cat loc.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug-rel.o -diff --git a/tests/run-readelf-zdebug.sh b/tests/run-readelf-zdebug.sh -index 37cf7ea..fc666fd 100755 ---- a/tests/run-readelf-zdebug.sh -+++ b/tests/run-readelf-zdebug.sh -@@ -46,12 +46,12 @@ tempfiles loc.out aranges.out ranges.out macro.out line.out frame.out - cat > loc.out << \EOF - - DWARF section [30] '.debug_loc' at offset 0xa17: -- [ 0] 0x00000000004003c0..0x00000000004003c3 [ 0] reg5 -- 0x00000000004003c3..0x00000000004003d6 [ 0] breg5 -42 -- [ 2] stack_value -- 0x00000000004003d6..0x00000000004003d9 [ 0] GNU_entry_value: -- [ 0] reg5 -- [ 3] stack_value -+ [ 0] 0x00000000004003c0..0x00000000004003c3 [ 0] reg5 -+ 0x00000000004003c3..0x00000000004003d6 [ 0] breg5 -42 -+ [ 2] stack_value -+ 0x00000000004003d6..0x00000000004003d9 [ 0] GNU_entry_value: -+ [ 0] reg5 -+ [ 3] stack_value - EOF - - cat loc.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug -@@ -476,15 +476,15 @@ Call frame information section [16] '.eh_frame' at offset 0x5b8: - def_cfa_offset 24 - advance_loc 10 to 0x3b0 - def_cfa_expression 11 -- [ 0] breg7 8 -- [ 2] breg16 0 -- [ 4] lit15 -- [ 5] and -- [ 6] lit11 -- [ 7] ge -- [ 8] lit3 -- [ 9] shl -- [ 10] plus -+ [ 0] breg7 8 -+ [ 2] breg16 0 -+ [ 4] lit15 -+ [ 5] and -+ [ 6] lit11 -+ [ 7] ge -+ [ 8] lit3 -+ [ 9] shl -+ [10] plus - nop - nop - nop - -commit 36eabdb739b16b934afe318c786a97c94b47bbf6 -Author: Mark Wielaard -Date: Wed Nov 29 16:27:33 2017 +0100 - - readelf: Print CU, base address and unresolved .debug_range entries. - - Also adjust the formatting for the resolved addresses to print them - on separate lines so they nicely line up even when the addresses are - resolved to symbol+offset names. - - Signed-off-by: Mark Wielaard - -diff --git a/src/readelf.c b/src/readelf.c -index 8661ba8..8e13462 100644 ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -5007,15 +5007,33 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, - Dwarf_Addr base = 0; - unsigned char *const endp = (unsigned char *) data->d_buf + data->d_size; - unsigned char *readp = data->d_buf; -+ Dwarf_CU *last_cu = NULL; - while (readp < endp) - { - ptrdiff_t offset = readp - (unsigned char *) data->d_buf; -+ Dwarf_CU *cu; - - if (first && skip_listptr_hole (&known_rangelistptr, &listptr_idx, -- &address_size, NULL, &base, NULL, -+ &address_size, NULL, &base, &cu, - offset, &readp, endp)) - continue; - -+ if (last_cu != cu) -+ { -+ char *basestr = format_dwarf_addr (dwflmod, address_size, -+ base, base); -+ Dwarf_Die cudie; -+ if (dwarf_cu_die (cu, &cudie, -+ NULL, NULL, NULL, NULL, -+ NULL, NULL) == NULL) -+ printf (gettext ("\n Unknown CU base: %s\n"), basestr); -+ else -+ printf (gettext ("\n CU [%6" PRIx64 "] base: %s\n"), -+ dwarf_dieoffset (&cudie), basestr); -+ free (basestr); -+ } -+ last_cu = cu; -+ - if (unlikely (data->d_size - offset < (size_t) address_size * 2)) - { - printf (gettext (" [%6tx] \n"), offset); -@@ -5040,29 +5058,36 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, - if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ - { - char *b = format_dwarf_addr (dwflmod, address_size, end, end); -- printf (gettext (" [%6tx] base address %s\n"), offset, b); -+ printf (gettext (" [%6tx] base address\n %s\n"), offset, b); - free (b); - base = end; - } - else if (begin == 0 && end == 0) /* End of list entry. */ - { - if (first) -- printf (gettext (" [%6tx] empty list\n"), offset); -+ printf (gettext (" [%6tx] empty list\n"), offset); - first = true; - } - else - { -- char *b = format_dwarf_addr (dwflmod, address_size, base + begin, -- begin); -- char *e = format_dwarf_addr (dwflmod, address_size, base + end, -- end); - /* We have an address range entry. */ - if (first) /* First address range entry in a list. */ -- printf (gettext (" [%6tx] %s..%s\n"), offset, b, e); -+ printf (" [%6tx] ", offset); - else -- printf (gettext (" %s..%s\n"), b, e); -- free (b); -- free (e); -+ printf (" "); -+ -+ printf ("range %" PRIx64 ", %" PRIx64 "\n", begin, end); -+ if (! print_unresolved_addresses) -+ { -+ char *b = format_dwarf_addr (dwflmod, address_size, base + begin, -+ base + begin); -+ char *e = format_dwarf_addr (dwflmod, address_size, -+ base + end - 1, base + end); -+ printf (" %s..\n", b); -+ printf (" %s\n", e); -+ free (b); -+ free (e); -+ } - - first = false; - } -diff --git a/tests/run-readelf-loc.sh b/tests/run-readelf-loc.sh -index 3959d3d..4b666cf 100755 ---- a/tests/run-readelf-loc.sh -+++ b/tests/run-readelf-loc.sh -@@ -68,10 +68,22 @@ DWARF section [33] '.debug_loc' at offset 0xd2a: - [ 46] 0x00000000004004b2 ..0x00000000004004ba [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: -- [ 0] 0x0000000000400480
..0x0000000000400482 -- 0x0000000000400485 ..0x000000000040048d -- [ 30] 0x00000000004004ad ..0x00000000004004af -- 0x00000000004004b2 ..0x00000000004004ba -+ -+ CU [ b] base: 0x0000000000400480
-+ [ 0] range 0, 2 -+ 0x0000000000400480
.. -+ 0x0000000000400481 -+ range 5, d -+ 0x0000000000400485 .. -+ 0x000000000040048c -+ -+ CU [ e0] base: 0x00000000004004a0 -+ [ 30] range d, f -+ 0x00000000004004ad .. -+ 0x00000000004004ae -+ range 12, 1a -+ 0x00000000004004b2 .. -+ 0x00000000004004b9 - EOF - - # Don't resolve addresses to symbols. -@@ -84,10 +96,22 @@ DWARF section [33] '.debug_loc' at offset 0xd2a: - [ 46] 0x00000000004004b2..0x00000000004004ba [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: -- [ 0] 0x0000000000400480..0x0000000000400482 -- 0x0000000000400485..0x000000000040048d -- [ 30] 0x00000000004004ad..0x00000000004004af -- 0x00000000004004b2..0x00000000004004ba -+ -+ CU [ b] base: 0x0000000000400480 -+ [ 0] range 0, 2 -+ 0x0000000000400480.. -+ 0x0000000000400481 -+ range 5, d -+ 0x0000000000400485.. -+ 0x000000000040048c -+ -+ CU [ e0] base: 0x00000000004004a0 -+ [ 30] range d, f -+ 0x00000000004004ad.. -+ 0x00000000004004ae -+ range 12, 1a -+ 0x00000000004004b2.. -+ 0x00000000004004b9 - EOF - - # Produce "raw" unprocessed content. -@@ -100,10 +124,14 @@ DWARF section [33] '.debug_loc' at offset 0xd2a: - [ 46] 0x0000000000000012..0x000000000000001a [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: -- [ 0] 000000000000000000..0x0000000000000002 -- 0x0000000000000005..0x000000000000000d -- [ 30] 0x000000000000000d..0x000000000000000f -- 0x0000000000000012..0x000000000000001a -+ -+ CU [ b] base: 0x0000000000400480 -+ [ 0] range 0, 2 -+ range 5, d -+ -+ CU [ e0] base: 0x00000000004004a0 -+ [ 30] range d, f -+ range 12, 1a - EOF - - exit 0 -diff --git a/tests/run-readelf-zdebug.sh b/tests/run-readelf-zdebug.sh -index fc666fd..7be9bee 100755 ---- a/tests/run-readelf-zdebug.sh -+++ b/tests/run-readelf-zdebug.sh -@@ -80,7 +80,9 @@ cat aranges.out | sed -e "s/.debug_aranges' at offset 0xa65/.zdebug_aranges' at - cat > ranges.out << \EOF - - DWARF section [32] '.debug_ranges' at offset 0xa95: -- [ 0] 0x00000000004003c0..0x00000000004003d9 -+ -+ CU [ b] base: 000000000000000000 -+ [ 0] range 4003c0, 4003d9 - EOF - - cat ranges.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=ranges testfile-debug - -commit fbb6c932e3ff74d4fb8bc54b72d9c9bdc4513f69 -Author: Mark Wielaard -Date: Wed Nov 29 16:37:50 2017 +0100 - - readelf: Print CU, base address and unresolved .debug_loc entries. - - Also adjust the formatting for the resolved addresses to print them - on separate lines so they nicely line up even when the addresses are - resolved to symbol+offset names. And print the operands starting on - a new line. - - Signed-off-by: Mark Wielaard - -diff --git a/src/readelf.c b/src/readelf.c -index 8e13462..bb48af9 100644 ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -7130,19 +7130,36 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - uint_fast8_t offset_size = 4; - - bool first = true; -- struct Dwarf_CU *cu = NULL; - Dwarf_Addr base = 0; - unsigned char *readp = data->d_buf; - unsigned char *const endp = (unsigned char *) data->d_buf + data->d_size; -+ Dwarf_CU *last_cu = NULL; - while (readp < endp) - { - ptrdiff_t offset = readp - (unsigned char *) data->d_buf; -+ Dwarf_CU *cu; - - if (first && skip_listptr_hole (&known_loclistptr, &listptr_idx, - &address_size, &offset_size, &base, - &cu, offset, &readp, endp)) - continue; - -+ if (last_cu != cu) -+ { -+ char *basestr = format_dwarf_addr (dwflmod, address_size, -+ base, base); -+ Dwarf_Die cudie; -+ if (dwarf_cu_die (cu, &cudie, -+ NULL, NULL, NULL, NULL, -+ NULL, NULL) == NULL) -+ printf (gettext ("\n Unknown CU base: %s\n"), basestr); -+ else -+ printf (gettext ("\n CU [%6" PRIx64 "] base: %s\n"), -+ dwarf_dieoffset (&cudie), basestr); -+ free (basestr); -+ } -+ last_cu = cu; -+ - if (unlikely (data->d_size - offset < (size_t) address_size * 2)) - { - printf (gettext (" [%6tx] \n"), offset); -@@ -7167,14 +7184,14 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ - { - char *b = format_dwarf_addr (dwflmod, address_size, end, end); -- printf (gettext (" [%6tx] base address %s\n"), offset, b); -+ printf (gettext (" [%6tx] base address\n %s\n"), offset, b); - free (b); - base = end; - } - else if (begin == 0 && end == 0) /* End of list entry. */ - { - if (first) -- printf (gettext (" [%6tx] empty list\n"), offset); -+ printf (gettext (" [%6tx] empty list\n"), offset); - first = true; - } - else -@@ -7182,18 +7199,23 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - /* We have a location expression entry. */ - uint_fast16_t len = read_2ubyte_unaligned_inc (dbg, readp); - -- char *b = format_dwarf_addr (dwflmod, address_size, base + begin, -- begin); -- char *e = format_dwarf_addr (dwflmod, address_size, base + end, -- end); -- - if (first) /* First entry in a list. */ -- printf (gettext (" [%6tx] %s..%s"), offset, b, e); -+ printf (" [%6tx] ", offset); - else -- printf (gettext (" %s..%s"), b, e); -+ printf (" "); - -- free (b); -- free (e); -+ printf ("range %" PRIx64 ", %" PRIx64 "\n", begin, end); -+ if (! print_unresolved_addresses) -+ { -+ char *b = format_dwarf_addr (dwflmod, address_size, base + begin, -+ base + begin); -+ char *e = format_dwarf_addr (dwflmod, address_size, -+ base + end - 1, base + end); -+ printf (" %s..\n", b); -+ printf (" %s\n", e); -+ free (b); -+ free (e); -+ } - - if (endp - readp <= (ptrdiff_t) len) - { -@@ -7201,8 +7223,9 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - break; - } - -- print_ops (dwflmod, dbg, 1, 18 + (address_size * 4), -- 3 /*XXX*/, address_size, offset_size, cu, len, readp); -+ print_ops (dwflmod, dbg, 11, 11, -+ cu != NULL ? cu->version : 3, -+ address_size, offset_size, cu, len, readp); - - first = false; - readp += len; -diff --git a/tests/run-readelf-loc.sh b/tests/run-readelf-loc.sh -index 4b666cf..e5152df 100755 ---- a/tests/run-readelf-loc.sh -+++ b/tests/run-readelf-loc.sh -@@ -63,9 +63,22 @@ testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ra - testfileloc<<\EOF - - DWARF section [33] '.debug_loc' at offset 0xd2a: -- [ 0] 0x0000000000400480
..0x000000000040048d [ 0] reg5 -- [ 23] 0x0000000000400485 ..0x000000000040048d [ 0] reg5 -- [ 46] 0x00000000004004b2 ..0x00000000004004ba [ 0] breg5 0 -+ -+ CU [ b] base: 0x0000000000400480
-+ [ 0] range 0, d -+ 0x0000000000400480
.. -+ 0x000000000040048c -+ [ 0] reg5 -+ [ 23] range 5, d -+ 0x0000000000400485 .. -+ 0x000000000040048c -+ [ 0] reg5 -+ -+ CU [ e0] base: 0x00000000004004a0 -+ [ 46] range 12, 1a -+ 0x00000000004004b2 .. -+ 0x00000000004004b9 -+ [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: - -@@ -91,9 +104,22 @@ testrun_compare ${abs_top_builddir}/src/readelf -N --debug-dump=loc --debug-dump - testfileloc<<\EOF - - DWARF section [33] '.debug_loc' at offset 0xd2a: -- [ 0] 0x0000000000400480..0x000000000040048d [ 0] reg5 -- [ 23] 0x0000000000400485..0x000000000040048d [ 0] reg5 -- [ 46] 0x00000000004004b2..0x00000000004004ba [ 0] breg5 0 -+ -+ CU [ b] base: 0x0000000000400480 -+ [ 0] range 0, d -+ 0x0000000000400480.. -+ 0x000000000040048c -+ [ 0] reg5 -+ [ 23] range 5, d -+ 0x0000000000400485.. -+ 0x000000000040048c -+ [ 0] reg5 -+ -+ CU [ e0] base: 0x00000000004004a0 -+ [ 46] range 12, 1a -+ 0x00000000004004b2.. -+ 0x00000000004004b9 -+ [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: - -@@ -119,9 +145,16 @@ testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc --debug-dump - testfileloc<<\EOF - - DWARF section [33] '.debug_loc' at offset 0xd2a: -- [ 0] 000000000000000000..0x000000000000000d [ 0] reg5 -- [ 23] 0x0000000000000005..0x000000000000000d [ 0] reg5 -- [ 46] 0x0000000000000012..0x000000000000001a [ 0] breg5 0 -+ -+ CU [ b] base: 0x0000000000400480 -+ [ 0] range 0, d -+ [ 0] reg5 -+ [ 23] range 5, d -+ [ 0] reg5 -+ -+ CU [ e0] base: 0x00000000004004a0 -+ [ 46] range 12, 1a -+ [ 0] breg5 0 - - DWARF section [34] '.debug_ranges' at offset 0xd94: - -diff --git a/tests/run-readelf-zdebug-rel.sh b/tests/run-readelf-zdebug-rel.sh -index 2b57d05..ccccd82 100755 ---- a/tests/run-readelf-zdebug-rel.sh -+++ b/tests/run-readelf-zdebug-rel.sh -@@ -127,12 +127,17 @@ cat info.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=i - cat > loc.out << \EOF - - DWARF section [ 7] '.debug_loc' at offset 0x185: -- [ 0] 000000000000000000..0x0000000000000003 [ 0] reg5 -- 0x0000000000000003..0x0000000000000010 [ 0] breg5 -42 -- [ 2] stack_value -- 0x0000000000000010..0x0000000000000018 [ 0] GNU_entry_value: -- [ 0] reg5 -- [ 3] stack_value -+ -+ CU [ b] base: 000000000000000000 -+ [ 0] range 0, 3 -+ [ 0] reg5 -+ range 3, 10 -+ [ 0] breg5 -42 -+ [ 2] stack_value -+ range 10, 18 -+ [ 0] GNU_entry_value: -+ [ 0] reg5 -+ [ 3] stack_value - EOF - - cat loc.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug-rel.o -diff --git a/tests/run-readelf-zdebug.sh b/tests/run-readelf-zdebug.sh -index 7be9bee..28128ad 100755 ---- a/tests/run-readelf-zdebug.sh -+++ b/tests/run-readelf-zdebug.sh -@@ -46,12 +46,17 @@ tempfiles loc.out aranges.out ranges.out macro.out line.out frame.out - cat > loc.out << \EOF - - DWARF section [30] '.debug_loc' at offset 0xa17: -- [ 0] 0x00000000004003c0..0x00000000004003c3 [ 0] reg5 -- 0x00000000004003c3..0x00000000004003d6 [ 0] breg5 -42 -- [ 2] stack_value -- 0x00000000004003d6..0x00000000004003d9 [ 0] GNU_entry_value: -- [ 0] reg5 -- [ 3] stack_value -+ -+ CU [ b] base: 000000000000000000 -+ [ 0] range 4003c0, 4003c3 -+ [ 0] reg5 -+ range 4003c3, 4003d6 -+ [ 0] breg5 -42 -+ [ 2] stack_value -+ range 4003d6, 4003d9 -+ [ 0] GNU_entry_value: -+ [ 0] reg5 -+ [ 3] stack_value - EOF - - cat loc.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug - -commit e98f032d293a8ea8ea2b25949d7f452603e644d9 -Author: Mark Wielaard -Date: Thu Jan 25 13:24:19 2018 +0100 - - readelf: Fix crash on reading loc data or range data with bad/no CUs. - - In print_debug_ranges_section and print_debug_loc_section we try to - get the associated CU through skip_listptr_hole for the first data data. - If no CU at all can be found (because the .debug_info section was bogus) - this would keep the Dwarf_CU uninitialized causing a crash later on - when it was compared to the last_cu and used because it was unequal. - Fix this by explicitly initializing cu to last_cu (which is NULL on - first use). - - Signed-off-by: Mark Wielaard - -diff --git a/src/readelf.c b/src/readelf.c -index 4bdaef2..6c49d30 100644 ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -5014,7 +5014,7 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, - while (readp < endp) - { - ptrdiff_t offset = readp - (unsigned char *) data->d_buf; -- Dwarf_CU *cu; -+ Dwarf_CU *cu = last_cu; - - if (first && skip_listptr_hole (&known_rangelistptr, &listptr_idx, - &address_size, NULL, &base, &cu, -@@ -7140,7 +7140,7 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - while (readp < endp) - { - ptrdiff_t offset = readp - (unsigned char *) data->d_buf; -- Dwarf_CU *cu; -+ Dwarf_CU *cu = last_cu; - - if (first && skip_listptr_hole (&known_loclistptr, &listptr_idx, - &address_size, &offset_size, &base, - -commit 0f1d3389f18887ff4ef411812e95deab3e8dfb7c -Author: Mark Wielaard -Date: Thu Mar 1 00:14:52 2018 +0100 - - readelf: Add some support for locviews. - - This adds minimal support for locviews as output by GCC8. - It changes readelf to keep track of loclistptrs from DW_AT_GNU_locviews - and prints the locview pairs for those. Since there is no terminator - we have to keep track of where the next loclist entry starts. - The --debug-dump=loc output looks as follows: - - CU [ 714] base: +0x0000000000003020 - [ b4] view pair 1, 2 - [ b6] range 4, 7f - +0x0000000000003024 .. - +0x000000000000309e - [ 0] reg5 - [ d9] view pair 3, 1 - view pair 1, 2 - [ dd] range 4, 4c - +0x0000000000003024 .. - +0x000000000000306b - [ 0] reg5 - range 4c, 7f - +0x000000000000306c .. - +0x000000000000309e - [ 0] reg2 - - Note that in the above output the view pairs correspond to the ranges - immediately following in the loc list. This is how GCC8 currently - outputs the locview pairs and ranges, but this is not guaranteed and - you'll need to look at the location and GNU_locviews attributes of the - DIE to know which really match up together. We might want to adjust the - output to make this more clear. - - This does not yet add an locview accessor to libdw. It just recognizes - the DW_AT_GNU_locviews attribute as a loclistptr when encoded as a - sec_offset form. - - Signed-off-by: Mark Wielaard - -diff --git a/libdw/dwarf.h b/libdw/dwarf.h -index 4f36206..d53a30d 100644 ---- a/libdw/dwarf.h -+++ b/libdw/dwarf.h -@@ -339,6 +339,8 @@ enum - DW_AT_GNU_all_tail_call_sites = 0x2116, - DW_AT_GNU_all_call_sites = 0x2117, - DW_AT_GNU_all_source_call_sites = 0x2118, -+ DW_AT_GNU_locviews = 0x2137, -+ DW_AT_GNU_entry_view = 0x2138, - DW_AT_GNU_macros = 0x2119, - DW_AT_GNU_deleted = 0x211a, - -diff --git a/libdw/dwarf_formudata.c b/libdw/dwarf_formudata.c -index 9c1644e..95872d6 100644 ---- a/libdw/dwarf_formudata.c -+++ b/libdw/dwarf_formudata.c -@@ -141,6 +141,7 @@ dwarf_formudata (Dwarf_Attribute *attr, Dwarf_Word *return_uval) - case DW_AT_string_length: - case DW_AT_use_location: - case DW_AT_vtable_elem_location: -+ case DW_AT_GNU_locviews: - /* loclistptr */ - if (__libdw_formptr (attr, IDX_debug_loc, - DWARF_E_NO_LOCLIST, NULL, -diff --git a/src/readelf.c b/src/readelf.c -index 2d49af3..098209f 100644 ---- a/src/readelf.c -+++ b/src/readelf.c -@@ -4532,6 +4532,7 @@ struct listptr - bool dwarf64:1; - bool warned:1; - struct Dwarf_CU *cu; -+ unsigned int attr; - }; - - #define listptr_offset_size(p) ((p)->dwarf64 ? 8 : 4) -@@ -4592,6 +4593,15 @@ compare_listptr (const void *a, const void *b, void *arg) - gettext ("%s %#" PRIx64 " used with different base addresses"), - name, (uint64_t) p1->offset); - } -+ if (p1->attr != p2 ->attr) -+ { -+ p1->warned = p2->warned = true; -+ error (0, 0, -+ gettext ("%s %#" PRIx64 -+ " used with different attribute %s and %s"), -+ name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr), -+ dwarf_attr_name (p2->attr)); -+ } - } - - return 0; -@@ -4619,7 +4629,7 @@ reset_listptr (struct listptr_table *table) - static bool - notice_listptr (enum section_e section, struct listptr_table *table, - uint_fast8_t address_size, uint_fast8_t offset_size, -- struct Dwarf_CU *cu, Dwarf_Off offset) -+ struct Dwarf_CU *cu, Dwarf_Off offset, unsigned int attr) - { - if (print_debug_sections & section) - { -@@ -4640,7 +4650,8 @@ notice_listptr (enum section_e section, struct listptr_table *table, - .addr64 = address_size == 8, - .dwarf64 = offset_size == 8, - .offset = offset, -- .cu = cu -+ .cu = cu, -+ .attr = attr - }; - - if (p->offset != offset) -@@ -4664,7 +4675,8 @@ static bool - skip_listptr_hole (struct listptr_table *table, size_t *idxp, - uint_fast8_t *address_sizep, uint_fast8_t *offset_sizep, - Dwarf_Addr *base, struct Dwarf_CU **cu, ptrdiff_t offset, -- unsigned char **readp, unsigned char *endp) -+ unsigned char **readp, unsigned char *endp, -+ unsigned int *attr) - { - if (table->n == 0) - return false; -@@ -4699,10 +4711,27 @@ skip_listptr_hole (struct listptr_table *table, size_t *idxp, - *base = listptr_base (p); - if (cu != NULL) - *cu = p->cu; -+ if (attr != NULL) -+ *attr = p->attr; - - return false; - } - -+static Dwarf_Off -+next_listptr_offset (struct listptr_table *table, size_t idx) -+{ -+ /* Note that multiple attributes could in theory point to the same loclist -+ offset, so make sure we pick one that is bigger than the current one. -+ The table is sorted on offset. */ -+ Dwarf_Off offset = table->table[idx].offset; -+ while (++idx < table->n) -+ { -+ Dwarf_Off next = table->table[idx].offset; -+ if (next > offset) -+ return next; -+ } -+ return 0; -+} - - static void - print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)), -@@ -5042,7 +5071,7 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, - - if (first && skip_listptr_hole (&known_rangelistptr, &listptr_idx, - &address_size, NULL, &base, &cu, -- offset, &readp, endp)) -+ offset, &readp, endp, NULL)) - continue; - - if (last_cu != cu) -@@ -6121,10 +6150,11 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) - case DW_AT_GNU_call_site_data_value: - case DW_AT_GNU_call_site_target: - case DW_AT_GNU_call_site_target_clobbered: -+ case DW_AT_GNU_locviews: - { - bool nlpt = notice_listptr (section_loc, &known_loclistptr, - cbargs->addrsize, cbargs->offset_size, -- cbargs->cu, num); -+ cbargs->cu, num, attr); - if (!cbargs->silent) - printf (" %*s%-20s (%s) location list [%6" PRIxMAX "]%s\n", - (int) (level * 2), "", dwarf_attr_name (attr), -@@ -6137,7 +6167,7 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) - { - bool nlpt = notice_listptr (section_ranges, &known_rangelistptr, - cbargs->addrsize, cbargs->offset_size, -- cbargs->cu, num); -+ cbargs->cu, num, attr); - if (!cbargs->silent) - printf (" %*s%-20s (%s) range list [%6" PRIxMAX "]%s\n", - (int) (level * 2), "", dwarf_attr_name (attr), -@@ -7215,10 +7245,11 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - { - ptrdiff_t offset = readp - (unsigned char *) data->d_buf; - Dwarf_CU *cu = last_cu; -+ unsigned int attr = 0; - - if (first && skip_listptr_hole (&known_loclistptr, &listptr_idx, - &address_size, &offset_size, &base, -- &cu, offset, &readp, endp)) -+ &cu, offset, &readp, endp, &attr)) - continue; - - if (last_cu != cu) -@@ -7237,6 +7268,40 @@ print_debug_loc_section (Dwfl_Module *dwflmod, - } - last_cu = cu; - -+ if (attr == DW_AT_GNU_locviews) -+ { -+ Dwarf_Off next_off = next_listptr_offset (&known_loclistptr, -+ listptr_idx); -+ const unsigned char *locp = readp; -+ const unsigned char *locendp; -+ if (next_off == 0) -+ locendp = endp; -+ else -+ locendp = (const unsigned char *) data->d_buf + next_off; -+ -+ while (locp < locendp) -+ { -+ uint64_t v1, v2; -+ get_uleb128 (v1, locp, locendp); -+ if (locp >= locendp) -+ { -+ printf (gettext (" [%6tx] \n"), offset); -+ break; -+ } -+ get_uleb128 (v2, locp, locendp); -+ if (first) /* First view pair in a list. */ -+ printf (" [%6tx] ", offset); -+ else -+ printf (" "); -+ printf ("view pair %" PRId64 ", %" PRId64 "\n", v1, v2); -+ first = false; -+ } -+ -+ first = true; -+ readp = (unsigned char *) locendp; -+ continue; -+ } -+ - if (unlikely (data->d_size - offset < (size_t) address_size * 2)) - { - printf (gettext (" [%6tx] \n"), offset); diff --git a/elfutils-0.170-m68k-packed-not-aligned.patch b/elfutils-0.170-m68k-packed-not-aligned.patch deleted file mode 100644 index d19426a..0000000 --- a/elfutils-0.170-m68k-packed-not-aligned.patch +++ /dev/null @@ -1,67 +0,0 @@ -commit ab6b37ac32ddf2f2f11f800a770170814f5cbb8b -Author: Mark Wielaard -Date: Tue Oct 24 14:23:30 2017 +0200 - - backends: Ignore GCC8 -Wpacked-not-aligned for m68k_corenote.c. - - The GCC8 -Wpacked-not-aligned warns if a structure field with explicit - padding in a packed structure will be misaligned. m68k prstatus core - notes are described by a packed structure which has such aligned structure - fields. - - Signed-off-by: Mark Wielaard - -diff --git a/backends/Makefile.am b/backends/Makefile.am -index 0fde0cb..2c62add 100644 ---- a/backends/Makefile.am -+++ b/backends/Makefile.am -@@ -119,6 +119,13 @@ m68k_SRCS = m68k_init.c m68k_symbol.c m68k_regs.c \ - libebl_m68k_pic_a_SOURCES = $(m68k_SRCS) - am_libebl_m68k_pic_a_OBJECTS = $(m68k_SRCS:.c=.os) - -+# m68k prstatus core notes are described by a packed structure -+# which has not naturally aligned fields. Since we don't access -+# these fields directly, but take their offset to be used later -+# to extract the data through elfxx_xlatetom/memmove, this isn't -+# an issue. -+m68k_corenote_no_Wpacked_not_aligned = yes -+ - bpf_SRCS = bpf_init.c bpf_regs.c - cpu_bpf = ../libcpu/libcpu_bpf.a - libebl_bpf_pic_a_SOURCES = $(bpf_SRCS) -diff --git a/config/eu.am b/config/eu.am -index 796f388..05c27f0 100644 ---- a/config/eu.am -+++ b/config/eu.am -@@ -74,6 +74,7 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ - $(if $($(*F)_no_Werror),,-Werror) \ - $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ - $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ -+ $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ - $($(*F)_CFLAGS) - - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) ---- elfutils-0.170/backends/Makefile.in.orig 2018-02-15 17:29:58.185213368 +0100 -+++ elfutils-0.170/backends/Makefile.in 2018-02-15 17:32:30.207695806 +0100 -@@ -421,6 +421,7 @@ - $(if $($(*F)_no_Werror),,-Werror) \ - $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ - $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ -+ $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \ - $($(*F)_CFLAGS) - - COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) -@@ -515,6 +516,13 @@ - - libebl_m68k_pic_a_SOURCES = $(m68k_SRCS) - am_libebl_m68k_pic_a_OBJECTS = $(m68k_SRCS:.c=.os) -+ -+# m68k prstatus core notes are described by a packed structure -+# which has not naturally aligned fields. Since we don't access -+# these fields directly, but take their offset to be used later -+# to extract the data through elfxx_xlatetom/memmove, this isn't -+# an issue. -+m68k_corenote_no_Wpacked_not_aligned = yes - bpf_SRCS = bpf_init.c bpf_regs.c - cpu_bpf = ../libcpu/libcpu_bpf.a - libebl_bpf_pic_a_SOURCES = $(bpf_SRCS) diff --git a/elfutils-0.170-new-notes-hack.patch b/elfutils-0.170-new-notes-hack.patch deleted file mode 100644 index 1785617..0000000 --- a/elfutils-0.170-new-notes-hack.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/libebl/eblcheckreloctargettype.c b/libebl/eblcheckreloctargettype.c -index e0d57c1..068ad8f 100644 ---- a/libebl/eblcheckreloctargettype.c -+++ b/libebl/eblcheckreloctargettype.c -@@ -46,6 +46,7 @@ ebl_check_reloc_target_type (Ebl *ebl, Elf64_Word sh_type) - case SHT_INIT_ARRAY: - case SHT_FINI_ARRAY: - case SHT_PREINIT_ARRAY: -+ case SHT_NOTE: - return true; - - default: -diff --git a/src/elflint.c b/src/elflint.c -index df1b3a0..f4d82d9 100644 ---- a/src/elflint.c -+++ b/src/elflint.c -@@ -4329,6 +4329,8 @@ section [%2d] '%s': unknown core file note type %" PRIu32 - case NT_GNU_HWCAP: - case NT_GNU_BUILD_ID: - case NT_GNU_GOLD_VERSION: -+ case NT_GNU_PROPERTY_TYPE_0: -+ case 256: - break; - - case 0: diff --git a/elfutils-0.170-sys-ptrace.patch b/elfutils-0.170-sys-ptrace.patch deleted file mode 100644 index 68eb415..0000000 --- a/elfutils-0.170-sys-ptrace.patch +++ /dev/null @@ -1,113 +0,0 @@ -commit 4482d0009a99b1773f2426479b666b08f57af9d5 -Author: Mark Wielaard -Date: Thu Feb 15 14:44:18 2018 +0100 - - Include sys/ptrace.h as early as possible. - - On some systems, at least on Fedora 27 ppc64le with glibc 2.26-24 and - kernel 4.14.18-300, including sys/ptrace.h late (after signal.h or - sys/wait.h for example) will cause issues and produce errors like: - - In file included from /usr/include/asm/sigcontext.h:12:0, - from /usr/include/bits/sigcontext.h:30, - from /usr/include/signal.h:287, - from /usr/include/sys/wait.h:36, - from linux-pid-attach.c:38: - /usr/include/sys/ptrace.h:73:3: error: expected identifier before numeric constant - PTRACE_GETREGS = 12, - ^ - - Swapping the include order fixes these issues. - - Signed-off-by: Mark Wielaard - -diff --git a/backends/ppc_initreg.c b/backends/ppc_initreg.c -index 69d623b..3e4432f 100644 ---- a/backends/ppc_initreg.c -+++ b/backends/ppc_initreg.c -@@ -30,13 +30,14 @@ - # include - #endif - --#include "system.h" - #include - #if defined(__powerpc__) && defined(__linux__) --# include - # include -+# include - #endif - -+#include "system.h" -+ - #define BACKEND ppc_ - #include "libebl_CPU.h" - -diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c -index e6a5c41..2ab4109 100644 ---- a/libdwfl/linux-pid-attach.c -+++ b/libdwfl/linux-pid-attach.c -@@ -35,7 +35,6 @@ - #include - #include - #include --#include - #include - #include - -@@ -43,6 +42,7 @@ - - #include - #include -+#include - - static bool - linux_proc_pid_is_stopped (pid_t pid) -diff --git a/tests/backtrace-child.c b/tests/backtrace-child.c -index 2c27414..9c6ba94 100644 ---- a/tests/backtrace-child.c -+++ b/tests/backtrace-child.c -@@ -81,7 +81,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -100,6 +99,7 @@ main (int argc __attribute__ ((unused)), char **argv) - - #else /* __linux__ */ - #include -+#include - - #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) - #define NOINLINE_NOCLONE __attribute__ ((noinline, noclone)) -diff --git a/tests/backtrace-dwarf.c b/tests/backtrace-dwarf.c -index 2dc8a9a..7ff826c 100644 ---- a/tests/backtrace-dwarf.c -+++ b/tests/backtrace-dwarf.c -@@ -17,7 +17,6 @@ - - #include - #include --#include - #include - #include - #include -@@ -25,7 +24,6 @@ - #include - #include - #include --#include - #include ELFUTILS_HEADER(dwfl) - - #ifndef __linux__ -@@ -40,6 +38,8 @@ main (int argc __attribute__ ((unused)), char **argv) - - #else /* __linux__ */ - #include -+#include -+#include - - #define main cleanup_13_main - #include "cleanup-13.c" diff --git a/elfutils-0.170-unwind.patch b/elfutils-0.170-unwind.patch deleted file mode 100644 index bbadc1b..0000000 --- a/elfutils-0.170-unwind.patch +++ /dev/null @@ -1,128 +0,0 @@ -commit c049419d96d82e4f5834133d5f68f6054e46f789 -Author: Mark Wielaard -Date: Tue Apr 10 16:13:34 2018 +0200 - - libdwfl: Handle unwind frame when the return address register isn't set. - - When we have unwound the frame and then cannot set the return address - we wouldn't set any error. That meant that a dwfl_thread_getframes () - call could end in an error, but without any dwfl_errno set, producing - the "no error" error message. - - If we cannot set the return address at the end of unwinding the frame - that means that either the return address register is bogus (error), - or that the return address is undefined (end of the call stack). - - This fixes the run-backtrace-native-biarch.sh testcase for me on an - i386 on x86_64 setup with gcc 7.2.1 and glibc 2.17. - - Signed-off-by: Mark Wielaard - -diff --git a/libdwfl/frame_unwind.c b/libdwfl/frame_unwind.c -index eaea495..8da691e 100644 ---- a/libdwfl/frame_unwind.c -+++ b/libdwfl/frame_unwind.c -@@ -632,24 +632,38 @@ handle_cfi (Dwfl_Frame *state, Dwarf_Addr pc, Dwarf_CFI *cfi, Dwarf_Addr bias) - ra_set = true; - } - } -- if (unwound->pc_state == DWFL_FRAME_STATE_ERROR -- && __libdwfl_frame_reg_get (unwound, -- frame->fde->cie->return_address_register, -- &unwound->pc)) -+ if (unwound->pc_state == DWFL_FRAME_STATE_ERROR) - { -- /* PPC32 __libc_start_main properly CFI-unwinds PC as zero. Currently -- none of the archs supported for unwinding have zero as a valid PC. */ -- if (unwound->pc == 0) -- unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED; -+ if (__libdwfl_frame_reg_get (unwound, -+ frame->fde->cie->return_address_register, -+ &unwound->pc)) -+ { -+ /* PPC32 __libc_start_main properly CFI-unwinds PC as zero. -+ Currently none of the archs supported for unwinding have -+ zero as a valid PC. */ -+ if (unwound->pc == 0) -+ unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED; -+ else -+ { -+ unwound->pc_state = DWFL_FRAME_STATE_PC_SET; -+ /* In SPARC the return address register actually contains -+ the address of the call instruction instead of the return -+ address. Therefore we add here an offset defined by the -+ backend. Most likely 0. */ -+ unwound->pc += ebl_ra_offset (ebl); -+ } -+ } - else -- { -- unwound->pc_state = DWFL_FRAME_STATE_PC_SET; -- /* In SPARC the return address register actually contains -- the address of the call instruction instead of the return -- address. Therefore we add here an offset defined by the -- backend. Most likely 0. */ -- unwound->pc += ebl_ra_offset (ebl); -- } -+ { -+ /* We couldn't set the return register, either it was bogus, -+ or the return pc is undefined, maybe end of call stack. */ -+ unsigned pcreg = frame->fde->cie->return_address_register; -+ if (! ebl_dwarf_to_regno (ebl, &pcreg) -+ || pcreg >= ebl_frame_nregs (ebl)) -+ __libdwfl_seterrno (DWFL_E_INVALID_REGISTER); -+ else -+ unwound->pc_state = DWFL_FRAME_STATE_PC_UNDEFINED; -+ } - } - free (frame); - } - -commit 7be459fa531b1284408bf16616422b8dbf193278 -Author: Mark Wielaard -Date: Wed Apr 11 10:37:45 2018 +0200 - - aarch64: Add default cfi rule to restore SP from CFA address. - - The CFA is set by default to the stack pointer of the previous frame. - So that is also how we can always restore the SP. This default aarch64 - CFI rule is necessary on Fedora 28 with GCC8 to make the run-deleted.sh - and run-backtrace-dwarf.sh testcases work. - - Signed-off-by: Mark Wielaard - -diff --git a/backends/aarch64_cfi.c b/backends/aarch64_cfi.c -index acbb9b6..a5579ab 100644 ---- a/backends/aarch64_cfi.c -+++ b/backends/aarch64_cfi.c -@@ -1,5 +1,5 @@ --/* arm ABI-specified defaults for DWARF CFI. -- Copyright (C) 2013 Red Hat, Inc. -+/* arm64 ABI-specified defaults for DWARF CFI. -+ Copyright (C) 2013, 2018 Red Hat, Inc. - This file is part of elfutils. - - This file is free software; you can redistribute it and/or modify -@@ -62,6 +62,9 @@ aarch64_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) - /* The Frame Pointer (FP, r29) and Link Register (LR, r30). */ - SV (29), SV (30), - -+ /* The Stack Pointer (r31) is restored from CFA address by default. */ -+ DW_CFA_val_offset, ULEB128_7 (31), ULEB128_7 (0), -+ - /* Callee-saved fpregs v8-v15. v0 == 64. */ - SV (72), SV (73), SV (74), SV (75), - SV (76), SV (77), SV (78), SV (79), -diff --git a/tests/run-addrcfi.sh b/tests/run-addrcfi.sh -index 376a6dc..fd89d02 100755 ---- a/tests/run-addrcfi.sh -+++ b/tests/run-addrcfi.sh -@@ -3637,7 +3637,7 @@ dwarf_cfi_addrframe (.eh_frame): no matching address range - integer reg28 (x28): same_value - integer reg29 (x29): same_value - integer reg30 (x30): same_value -- integer reg31 (sp): undefined -+ integer reg31 (sp): location expression: call_frame_cfa stack_value - integer reg33 (elr): undefined - FP/SIMD reg64 (v0): undefined - FP/SIMD reg65 (v1): undefined diff --git a/elfutils-0.171-new-notes-hack.patch b/elfutils-0.171-new-notes-hack.patch new file mode 100644 index 0000000..f14562e --- /dev/null +++ b/elfutils-0.171-new-notes-hack.patch @@ -0,0 +1,30 @@ +diff --git a/src/elflint.c b/src/elflint.c +index df1b3a0..f4d82d9 100644 +--- a/src/elflint.c ++++ b/src/elflint.c +@@ -4329,6 +4329,8 @@ section [%2d] '%s': unknown core file note type %" PRIu32 + case NT_GNU_HWCAP: + case NT_GNU_BUILD_ID: + case NT_GNU_GOLD_VERSION: ++ case NT_GNU_PROPERTY_TYPE_0: ++ case 256: + break; + + case 0: +diff --git a/src/elflint.c b/src/elflint.c +index 0a26d97..1cbf570 100644 +--- a/src/elflint.c ++++ b/src/elflint.c +@@ -3906,10 +3906,11 @@ section [%2zu] '%s': size not multiple of entry size\n"), + cnt, section_name (ebl, cnt), + (int) shdr->sh_type); + ++#define SHF_GNU_BUILD_NOTE (1 << 20) + #define ALL_SH_FLAGS (SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR | SHF_MERGE \ + | SHF_STRINGS | SHF_INFO_LINK | SHF_LINK_ORDER \ + | SHF_OS_NONCONFORMING | SHF_GROUP | SHF_TLS \ +- | SHF_COMPRESSED) ++ | SHF_COMPRESSED | SHF_GNU_BUILD_NOTE) + if (shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS) + { + GElf_Xword sh_flags = shdr->sh_flags & ~(GElf_Xword) ALL_SH_FLAGS; diff --git a/elfutils.spec b/elfutils.spec index 946e02f..d1a7b08 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -1,7 +1,7 @@ Name: elfutils Summary: A collection of utilities and DSOs to handle ELF files and DWARF data -Version: 0.170 -%global baserelease 11 +Version: 0.171 +%global baserelease 1 URL: http://elfutils.org/ %global source_url ftp://sourceware.org/pub/elfutils/%{version}/ License: GPLv3+ and (GPLv2+ or LGPLv3+) @@ -20,16 +20,7 @@ Release: %{baserelease}%{?dist} Source: %{?source_url}%{name}-%{version}.tar.bz2 # Patches -Patch1: elfutils-0.170-dwarf_aggregate_size.patch -Source1: testfile-sizes3.o.bz2 -Patch2: elfutils-0.170-sys-ptrace.patch -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 -Patch8: elfutils-0.170-locviews.patch -Patch9: elfutils-0.170-unwind.patch +Patch1: elfutils-0.171-new-notes-hack.patch Requires: elfutils-libelf%{depsuffix} = %{version}-%{release} Requires: elfutils-libs%{depsuffix} = %{version}-%{release} @@ -183,17 +174,10 @@ profiling) of processes. %setup -q # Apply patches -%patch1 -p1 -b .aggregate_size -cp %SOURCE1 tests/ -%patch2 -p1 -b .sys_ptrace -%patch3 -p1 -b .m68k_packed -%patch4 -p1 -b .core_pid -%patch5 -p1 -b .elf_sync -%patch6 -p1 -b .notes_hack -%patch7 -p1 -b .variable_value -%patch8 -p1 -b .locviews -%patch9 -p1 -b .unwind +%patch1 -p1 -b .notes_hack +# In case the above patches added any new test scripts, make sure they +# are executable. find . -name \*.sh ! -perm -0100 -print | xargs chmod +x %build @@ -328,6 +312,21 @@ fi %endif %changelog +* Fri Jun 01 2018 Mark Wielaard - 0.171-1 +- New upstream release. + - DWARF5 and split dwarf, including GNU DebugFission, support. + - readelf: Handle all new DWARF5 sections. + --debug-dump=info+ will show split unit DIEs when found. + --dwarf-skeleton can be used when inspecting a .dwo file. + Recognizes GNU locviews with --debug-dump=loc. + - libdw: New functions dwarf_die_addr_die, dwarf_get_units, + dwarf_getabbrevattr_data and dwarf_cu_info. + libdw will now try to resolve the alt file on first use + when not set yet with dwarf_set_alt. + dwarf_aggregate_size() now works with multi-dimensional arrays. + - libdwfl: Use process_vm_readv when available instead of ptrace. + - backends: Add a RISC-V backend. + * Wed Apr 11 2018 Mark Wielaard - 0.170-11 - Add explict libstdc++-devel BuildRequires for demangle support. - Add elfutils-0.170-unwind.patch. (#1555726) diff --git a/sources b/sources index cc6dd59..78d3ddb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (elfutils-0.170.tar.bz2) = bcfabe5fc500369bff72794bf060bfeef2f1a66a5bd7d2a1642adb7d54f6431bf48f13d0305433590539f3979188ce649d4fe70382f02c3be2ff24bf4c2d571a +SHA512 (elfutils-0.171.tar.bz2) = 777be2d63ca9b11440bf358a33428d9ca974e2612a880934156c9f7194af596ed627c1ed2d48dbd47a3761c94913b8f39565f9dcb6b62c92bf229f04c96d5ee3 diff --git a/testfile-sizes3.o.bz2 b/testfile-sizes3.o.bz2 deleted file mode 100644 index 8633382..0000000 Binary files a/testfile-sizes3.o.bz2 and /dev/null differ