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.
This commit is contained in:
parent
142394ed11
commit
f7f48060a6
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@
|
||||
/elfutils-0.168.tar.bz2
|
||||
/elfutils-0.169.tar.bz2
|
||||
/elfutils-0.170.tar.bz2
|
||||
/elfutils-0.171.tar.bz2
|
||||
|
@ -1,46 +0,0 @@
|
||||
commit e23c71330c3b332d19fdf9e48ca8b03680d9ad34
|
||||
Author: Mark Wielaard <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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;
|
@ -1,120 +0,0 @@
|
||||
commit 699a741b488010d56cc358a5f7b4d8a8f4886347
|
||||
Author: Mark Wielaard <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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 <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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
|
@ -1,170 +0,0 @@
|
||||
From a2246aaad96e062eb3bab55af9526aaa70adcfd0 Mon Sep 17 00:00:00 2001
|
||||
From: Dima Kogan <dkogan@debian.org>
|
||||
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 <dima@secretsauce.net>
|
||||
---
|
||||
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 <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
---
|
||||
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
|
||||
|
@ -1,306 +0,0 @@
|
||||
commit 6d2e7e7100429df3d548251e9685a1eb7bb434cb
|
||||
Author: Mark Wielaard <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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 <mark@klomp.org>
|
||||
Date: Sat Feb 17 00:23:19 2018 +0100
|
||||
|
||||
libelf: Sync elf.h from glibc.
|
||||
|
||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
||||
|
||||
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 */
|
File diff suppressed because it is too large
Load Diff
@ -1,67 +0,0 @@
|
||||
commit ab6b37ac32ddf2f2f11f800a770170814f5cbb8b
|
||||
Author: Mark Wielaard <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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)
|
@ -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:
|
@ -1,113 +0,0 @@
|
||||
commit 4482d0009a99b1773f2426479b666b08f57af9d5
|
||||
Author: Mark Wielaard <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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 <config.h>
|
||||
#endif
|
||||
|
||||
-#include "system.h"
|
||||
#include <stdlib.h>
|
||||
#if defined(__powerpc__) && defined(__linux__)
|
||||
-# include <sys/user.h>
|
||||
# include <sys/ptrace.h>
|
||||
+# include <sys/user.h>
|
||||
#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 <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
-#include <sys/wait.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -43,6 +42,7 @@
|
||||
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/syscall.h>
|
||||
+#include <sys/wait.h>
|
||||
|
||||
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 <config.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
-#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
@@ -100,6 +99,7 @@ main (int argc __attribute__ ((unused)), char **argv)
|
||||
|
||||
#else /* __linux__ */
|
||||
#include <sys/ptrace.h>
|
||||
+#include <signal.h>
|
||||
|
||||
#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 <config.h>
|
||||
#include <assert.h>
|
||||
-#include <signal.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio_ext.h>
|
||||
#include <locale.h>
|
||||
@@ -25,7 +24,6 @@
|
||||
#include <error.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
-#include <sys/wait.h>
|
||||
#include ELFUTILS_HEADER(dwfl)
|
||||
|
||||
#ifndef __linux__
|
||||
@@ -40,6 +38,8 @@ main (int argc __attribute__ ((unused)), char **argv)
|
||||
|
||||
#else /* __linux__ */
|
||||
#include <sys/ptrace.h>
|
||||
+#include <sys/wait.h>
|
||||
+#include <signal.h>
|
||||
|
||||
#define main cleanup_13_main
|
||||
#include "cleanup-13.c"
|
@ -1,128 +0,0 @@
|
||||
commit c049419d96d82e4f5834133d5f68f6054e46f789
|
||||
Author: Mark Wielaard <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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 <mark@klomp.org>
|
||||
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 <mark@klomp.org>
|
||||
|
||||
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
|
30
elfutils-0.171-new-notes-hack.patch
Normal file
30
elfutils-0.171-new-notes-hack.patch
Normal file
@ -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;
|
@ -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 <mjw@fedoraproject.org> - 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 <mjw@fedoraproject.org> - 0.170-11
|
||||
- Add explict libstdc++-devel BuildRequires for demangle support.
|
||||
- Add elfutils-0.170-unwind.patch. (#1555726)
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (elfutils-0.170.tar.bz2) = bcfabe5fc500369bff72794bf060bfeef2f1a66a5bd7d2a1642adb7d54f6431bf48f13d0305433590539f3979188ce649d4fe70382f02c3be2ff24bf4c2d571a
|
||||
SHA512 (elfutils-0.171.tar.bz2) = 777be2d63ca9b11440bf358a33428d9ca974e2612a880934156c9f7194af596ed627c1ed2d48dbd47a3761c94913b8f39565f9dcb6b62c92bf229f04c96d5ee3
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user