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.168.tar.bz2
|
||||||
/elfutils-0.169.tar.bz2
|
/elfutils-0.169.tar.bz2
|
||||||
/elfutils-0.170.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
|
Name: elfutils
|
||||||
Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
|
Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
|
||||||
Version: 0.170
|
Version: 0.171
|
||||||
%global baserelease 11
|
%global baserelease 1
|
||||||
URL: http://elfutils.org/
|
URL: http://elfutils.org/
|
||||||
%global source_url ftp://sourceware.org/pub/elfutils/%{version}/
|
%global source_url ftp://sourceware.org/pub/elfutils/%{version}/
|
||||||
License: GPLv3+ and (GPLv2+ or LGPLv3+)
|
License: GPLv3+ and (GPLv2+ or LGPLv3+)
|
||||||
@ -20,16 +20,7 @@ Release: %{baserelease}%{?dist}
|
|||||||
Source: %{?source_url}%{name}-%{version}.tar.bz2
|
Source: %{?source_url}%{name}-%{version}.tar.bz2
|
||||||
|
|
||||||
# Patches
|
# Patches
|
||||||
Patch1: elfutils-0.170-dwarf_aggregate_size.patch
|
Patch1: elfutils-0.171-new-notes-hack.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
|
|
||||||
|
|
||||||
Requires: elfutils-libelf%{depsuffix} = %{version}-%{release}
|
Requires: elfutils-libelf%{depsuffix} = %{version}-%{release}
|
||||||
Requires: elfutils-libs%{depsuffix} = %{version}-%{release}
|
Requires: elfutils-libs%{depsuffix} = %{version}-%{release}
|
||||||
@ -183,17 +174,10 @@ profiling) of processes.
|
|||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
# Apply patches
|
# Apply patches
|
||||||
%patch1 -p1 -b .aggregate_size
|
%patch1 -p1 -b .notes_hack
|
||||||
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
|
|
||||||
|
|
||||||
|
# In case the above patches added any new test scripts, make sure they
|
||||||
|
# are executable.
|
||||||
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -328,6 +312,21 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%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
|
* Wed Apr 11 2018 Mark Wielaard <mjw@fedoraproject.org> - 0.170-11
|
||||||
- Add explict libstdc++-devel BuildRequires for demangle support.
|
- Add explict libstdc++-devel BuildRequires for demangle support.
|
||||||
- Add elfutils-0.170-unwind.patch. (#1555726)
|
- 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