554 lines
22 KiB
Diff
554 lines
22 KiB
Diff
|
commit 17bfd57dd13f81b8ed5d1ee5109355bc377cf76c
|
||
|
Author: Mark Wielaard <mark@klomp.org>
|
||
|
Date: Thu Jul 20 22:34:29 2017 +0200
|
||
|
|
||
|
strip: Deal with ARM data marker symbols pointing to debug sections.
|
||
|
|
||
|
ARM data marker symbols "$d" indicate the start of a sequence of data
|
||
|
items in a section. For data only sections no data marker symbol is
|
||
|
necessary, but may be put pointing to the start of the section.
|
||
|
binutils however has a bug which places a data marker symbol somewhere
|
||
|
inside the section (at least for .debug_frame).
|
||
|
https://sourceware.org/bugzilla/show_bug.cgi?id=21809
|
||
|
|
||
|
When strip finds a symbol pointing to a debug section that would be
|
||
|
put into the .debug file then it will copy over the whole symbol table.
|
||
|
This isn't necessary because the symbol is redundant.
|
||
|
|
||
|
Add an ebl hook to recognize data marker symbols with implementations
|
||
|
for arm and aarch64. Use it in strip to strip such symbols from the
|
||
|
symbol table if they point to a debug section.
|
||
|
|
||
|
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
||
|
|
||
|
diff --git a/backends/aarch64_init.c b/backends/aarch64_init.c
|
||
|
index 0866494..fad923f 100644
|
||
|
--- a/backends/aarch64_init.c
|
||
|
+++ b/backends/aarch64_init.c
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Initialization of AArch64 specific backend library.
|
||
|
- Copyright (C) 2013 Red Hat, Inc.
|
||
|
+ Copyright (C) 2013, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
|
||
|
This file is free software; you can redistribute it and/or modify
|
||
|
@@ -56,6 +56,7 @@ aarch64_init (Elf *elf __attribute__ ((unused)),
|
||
|
HOOK (eh, reloc_simple_type);
|
||
|
HOOK (eh, return_value_location);
|
||
|
HOOK (eh, check_special_symbol);
|
||
|
+ HOOK (eh, data_marker_symbol);
|
||
|
HOOK (eh, abi_cfi);
|
||
|
|
||
|
/* X0-X30 (31 regs) + SP + 1 Reserved + ELR, 30 Reserved regs (34-43)
|
||
|
diff --git a/backends/aarch64_symbol.c b/backends/aarch64_symbol.c
|
||
|
index 76999e4..da3382e 100644
|
||
|
--- a/backends/aarch64_symbol.c
|
||
|
+++ b/backends/aarch64_symbol.c
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* AArch64 specific symbolic name handling.
|
||
|
- Copyright (C) 2013, 2015 Red Hat, Inc.
|
||
|
+ Copyright (C) 2013, 2015, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
|
||
|
This file is free software; you can redistribute it and/or modify
|
||
|
@@ -90,3 +90,15 @@ aarch64_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym,
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
+
|
||
|
+/* A data mapping symbol is a symbol with "$d" name or "$d.<any...>" name,
|
||
|
+ STT_NOTYPE, STB_LOCAL and st_size of zero. The indicate the stat of a
|
||
|
+ sequence of data items. */
|
||
|
+bool
|
||
|
+aarch64_data_marker_symbol (const GElf_Sym *sym, const char *sname)
|
||
|
+{
|
||
|
+ return (sym != NULL && sname != NULL
|
||
|
+ && sym->st_size == 0 && GELF_ST_BIND (sym->st_info) == STB_LOCAL
|
||
|
+ && GELF_ST_TYPE (sym->st_info) == STT_NOTYPE
|
||
|
+ && (strcmp (sname, "$d") == 0 || strncmp (sname, "$d.", 3) == 0));
|
||
|
+}
|
||
|
diff --git a/backends/arm_init.c b/backends/arm_init.c
|
||
|
index caadac6..f2b1b11 100644
|
||
|
--- a/backends/arm_init.c
|
||
|
+++ b/backends/arm_init.c
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Initialization of Arm specific backend library.
|
||
|
- Copyright (C) 2002, 2005, 2009, 2013, 2014, 2015 Red Hat, Inc.
|
||
|
+ Copyright (C) 2002, 2005, 2009, 2013, 2014, 2015, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||
|
|
||
|
@@ -64,6 +64,7 @@ arm_init (Elf *elf __attribute__ ((unused)),
|
||
|
HOOK (eh, abi_cfi);
|
||
|
HOOK (eh, check_reloc_target_type);
|
||
|
HOOK (eh, symbol_type_name);
|
||
|
+ HOOK (eh, data_marker_symbol);
|
||
|
|
||
|
/* We only unwind the core integer registers. */
|
||
|
eh->frame_nregs = 16;
|
||
|
diff --git a/backends/arm_symbol.c b/backends/arm_symbol.c
|
||
|
index da4a50a..3edda72 100644
|
||
|
--- a/backends/arm_symbol.c
|
||
|
+++ b/backends/arm_symbol.c
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Arm specific symbolic name handling.
|
||
|
- Copyright (C) 2002-2009, 2014, 2015 Red Hat, Inc.
|
||
|
+ Copyright (C) 2002-2009, 2014, 2015, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
|
||
|
This file is free software; you can redistribute it and/or modify
|
||
|
@@ -32,6 +32,7 @@
|
||
|
|
||
|
#include <elf.h>
|
||
|
#include <stddef.h>
|
||
|
+#include <string.h>
|
||
|
|
||
|
#define BACKEND arm_
|
||
|
#include "libebl_CPU.h"
|
||
|
@@ -142,3 +143,15 @@ arm_symbol_type_name (int type,
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
+
|
||
|
+/* A data mapping symbol is a symbol with "$d" name or "$d.<any...>" name,
|
||
|
+ * STT_NOTYPE, STB_LOCAL and st_size of zero. The indicate the stat of a
|
||
|
+ * sequence of data items. */
|
||
|
+bool
|
||
|
+arm_data_marker_symbol (const GElf_Sym *sym, const char *sname)
|
||
|
+{
|
||
|
+ return (sym != NULL && sname != NULL
|
||
|
+ && sym->st_size == 0 && GELF_ST_BIND (sym->st_info) == STB_LOCAL
|
||
|
+ && GELF_ST_TYPE (sym->st_info) == STT_NOTYPE
|
||
|
+ && (strcmp (sname, "$d") == 0 || strncmp (sname, "$d.", 3) == 0));
|
||
|
+}
|
||
|
diff --git a/libebl/Makefile.am b/libebl/Makefile.am
|
||
|
index 6f945eb..2491df8 100644
|
||
|
--- a/libebl/Makefile.am
|
||
|
+++ b/libebl/Makefile.am
|
||
|
@@ -1,6 +1,6 @@
|
||
|
## Process this file with automake to create Makefile.in
|
||
|
##
|
||
|
-## Copyright (C) 2000-2010, 2013, 2016 Red Hat, Inc.
|
||
|
+## Copyright (C) 2000-2010, 2013, 2016, 2017 Red Hat, Inc.
|
||
|
## This file is part of elfutils.
|
||
|
##
|
||
|
## This file is free software; you can redistribute it and/or modify
|
||
|
@@ -53,7 +53,8 @@ gen_SOURCES = eblopenbackend.c eblclosebackend.c \
|
||
|
eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \
|
||
|
ebl_check_special_section.c ebl_syscall_abi.c eblabicfi.c \
|
||
|
eblstother.c eblinitreg.c ebldwarftoregno.c eblnormalizepc.c \
|
||
|
- eblunwind.c eblresolvesym.c eblcheckreloctargettype.c
|
||
|
+ eblunwind.c eblresolvesym.c eblcheckreloctargettype.c \
|
||
|
+ ebl_data_marker_symbol.c
|
||
|
|
||
|
libebl_a_SOURCES = $(gen_SOURCES)
|
||
|
|
||
|
diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h
|
||
|
index b725374..f3a0e64 100644
|
||
|
--- a/libebl/ebl-hooks.h
|
||
|
+++ b/libebl/ebl-hooks.h
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Backend hook signatures internal interface for libebl.
|
||
|
- Copyright (C) 2000-2011, 2013, 2014, 2016 Red Hat, Inc.
|
||
|
+ Copyright (C) 2000-2011, 2013, 2014, 2016, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
|
||
|
This file is free software; you can redistribute it and/or modify
|
||
|
@@ -121,6 +121,9 @@ bool EBLHOOK(relative_reloc_p) (int);
|
||
|
bool EBLHOOK(check_special_symbol) (Elf *, GElf_Ehdr *, const GElf_Sym *,
|
||
|
const char *, const GElf_Shdr *);
|
||
|
|
||
|
+/* Check if this is a data marker symbol. e.g. '$d' symbols for ARM. */
|
||
|
+bool EBLHOOK(data_marker_symbol) (const GElf_Sym *sym, const char *sname);
|
||
|
+
|
||
|
/* Check whether only valid bits are set on the st_other symbol flag.
|
||
|
Standard ST_VISIBILITY have already been masked off. */
|
||
|
bool EBLHOOK(check_st_other_bits) (unsigned char st_other);
|
||
|
diff --git a/libebl/ebl_data_marker_symbol.c b/libebl/ebl_data_marker_symbol.c
|
||
|
new file mode 100644
|
||
|
index 0000000..922d720
|
||
|
--- /dev/null
|
||
|
+++ b/libebl/ebl_data_marker_symbol.c
|
||
|
@@ -0,0 +1,44 @@
|
||
|
+/* Check whether a symbol is a special data marker.
|
||
|
+ Copyright (C) 2017 Red Hat, Inc.
|
||
|
+ This file is part of elfutils.
|
||
|
+
|
||
|
+ This file is free software; you can redistribute it and/or modify
|
||
|
+ it under the terms of either
|
||
|
+
|
||
|
+ * the GNU Lesser General Public License as published by the Free
|
||
|
+ Software Foundation; either version 3 of the License, or (at
|
||
|
+ your option) any later version
|
||
|
+
|
||
|
+ or
|
||
|
+
|
||
|
+ * the GNU General Public License as published by the Free
|
||
|
+ Software Foundation; either version 2 of the License, or (at
|
||
|
+ your option) any later version
|
||
|
+
|
||
|
+ or both in parallel, as here.
|
||
|
+
|
||
|
+ elfutils is distributed in the hope that it will be useful, but
|
||
|
+ WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
+ General Public License for more details.
|
||
|
+
|
||
|
+ You should have received copies of the GNU General Public License and
|
||
|
+ the GNU Lesser General Public License along with this program. If
|
||
|
+ not, see <http://www.gnu.org/licenses/>. */
|
||
|
+
|
||
|
+#ifdef HAVE_CONFIG_H
|
||
|
+# include <config.h>
|
||
|
+#endif
|
||
|
+
|
||
|
+#include <inttypes.h>
|
||
|
+#include <libeblP.h>
|
||
|
+
|
||
|
+
|
||
|
+bool
|
||
|
+ebl_data_marker_symbol (Ebl *ebl, const GElf_Sym *sym, const char *sname)
|
||
|
+{
|
||
|
+ if (ebl == NULL)
|
||
|
+ return false;
|
||
|
+
|
||
|
+ return ebl->data_marker_symbol (sym, sname);
|
||
|
+}
|
||
|
diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
|
||
|
index f3a65cf..1f81477 100644
|
||
|
--- a/libebl/eblopenbackend.c
|
||
|
+++ b/libebl/eblopenbackend.c
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Generate ELF backend handle.
|
||
|
- Copyright (C) 2000-2016 Red Hat, Inc.
|
||
|
+ Copyright (C) 2000-2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
|
||
|
This file is free software; you can redistribute it and/or modify
|
||
|
@@ -184,6 +184,7 @@ static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
|
||
|
const GElf_Sym *sym,
|
||
|
const char *name,
|
||
|
const GElf_Shdr *destshdr);
|
||
|
+static bool default_data_marker_symbol (const GElf_Sym *sym, const char *sname);
|
||
|
static bool default_check_st_other_bits (unsigned char st_other);
|
||
|
static bool default_check_special_section (Ebl *, int,
|
||
|
const GElf_Shdr *, const char *);
|
||
|
@@ -235,6 +236,7 @@ fill_defaults (Ebl *result)
|
||
|
result->none_reloc_p = default_none_reloc_p;
|
||
|
result->relative_reloc_p = default_relative_reloc_p;
|
||
|
result->check_special_symbol = default_check_special_symbol;
|
||
|
+ result->data_marker_symbol = default_data_marker_symbol;
|
||
|
result->check_st_other_bits = default_check_st_other_bits;
|
||
|
result->bss_plt_p = default_bss_plt_p;
|
||
|
result->return_value_location = default_return_value_location;
|
||
|
@@ -672,6 +674,13 @@ default_check_special_symbol (Elf *elf __attribute__ ((unused)),
|
||
|
}
|
||
|
|
||
|
static bool
|
||
|
+default_data_marker_symbol (const GElf_Sym *sym __attribute__ ((unused)),
|
||
|
+ const char *sname __attribute__ ((unused)))
|
||
|
+{
|
||
|
+ return false;
|
||
|
+}
|
||
|
+
|
||
|
+static bool
|
||
|
default_check_st_other_bits (unsigned char st_other __attribute__ ((unused)))
|
||
|
{
|
||
|
return false;
|
||
|
diff --git a/libebl/libebl.h b/libebl/libebl.h
|
||
|
index 87896e4..882bdb9 100644
|
||
|
--- a/libebl/libebl.h
|
||
|
+++ b/libebl/libebl.h
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Interface for libebl.
|
||
|
- Copyright (C) 2000-2010, 2013, 2014, 2015, 2016 Red Hat, Inc.
|
||
|
+ Copyright (C) 2000-2010, 2013, 2014, 2015, 2016, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
|
||
|
This file is free software; you can redistribute it and/or modify
|
||
|
@@ -156,6 +156,10 @@ extern bool ebl_check_special_symbol (Ebl *ebl, GElf_Ehdr *ehdr,
|
||
|
const GElf_Sym *sym, const char *name,
|
||
|
const GElf_Shdr *destshdr);
|
||
|
|
||
|
+/* Check if this is a data marker symbol. e.g. '$d' symbols for ARM. */
|
||
|
+extern bool ebl_data_marker_symbol (Ebl *ebl, const GElf_Sym *sym,
|
||
|
+ const char *sname);
|
||
|
+
|
||
|
/* Check whether only valid bits are set on the st_other symbol flag. */
|
||
|
extern bool ebl_check_st_other_bits (Ebl *ebl, unsigned char st_other);
|
||
|
|
||
|
diff --git a/src/strip.c b/src/strip.c
|
||
|
index 4a35ea1..773ed54 100644
|
||
|
--- a/src/strip.c
|
||
|
+++ b/src/strip.c
|
||
|
@@ -1,5 +1,5 @@
|
||
|
/* Discard section not used at runtime from object files.
|
||
|
- Copyright (C) 2000-2012, 2014, 2015, 2016 Red Hat, Inc.
|
||
|
+ Copyright (C) 2000-2012, 2014, 2015, 2016, 2017 Red Hat, Inc.
|
||
|
This file is part of elfutils.
|
||
|
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
|
||
|
|
||
|
@@ -960,8 +960,19 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
|
||
|
if (shdr_info[scnidx].idx == 0)
|
||
|
/* This symbol table has a real symbol in
|
||
|
a discarded section. So preserve the
|
||
|
- original table in the debug file. */
|
||
|
- shdr_info[cnt].debug_data = symdata;
|
||
|
+ original table in the debug file. Unless
|
||
|
+ it is a redundant data marker to a debug
|
||
|
+ (data only) section. */
|
||
|
+ if (! (ebl_section_strip_p (ebl, ehdr,
|
||
|
+ &shdr_info[scnidx].shdr,
|
||
|
+ shdr_info[scnidx].name,
|
||
|
+ remove_comment,
|
||
|
+ remove_debug)
|
||
|
+ && ebl_data_marker_symbol (ebl, sym,
|
||
|
+ elf_strptr (elf,
|
||
|
+ shdr_info[cnt].shdr.sh_link,
|
||
|
+ sym->st_name))))
|
||
|
+ shdr_info[cnt].debug_data = symdata;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@@ -1293,7 +1304,10 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
|
||
|
shdr_info[cnt].shdr.sh_name = dwelf_strent_off (shdr_info[cnt].se);
|
||
|
|
||
|
/* Update the section header from the input file. Some fields
|
||
|
- might be section indeces which now have to be adjusted. */
|
||
|
+ might be section indeces which now have to be adjusted. Keep
|
||
|
+ the index to the "current" sh_link in case we need it to lookup
|
||
|
+ symbol table names. */
|
||
|
+ size_t sh_link = shdr_info[cnt].shdr.sh_link;
|
||
|
if (shdr_info[cnt].shdr.sh_link != 0)
|
||
|
shdr_info[cnt].shdr.sh_link =
|
||
|
shdr_info[shdr_info[cnt].shdr.sh_link].idx;
|
||
|
@@ -1492,13 +1506,17 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
|
||
|
/* The symbol points to a section that is discarded
|
||
|
but isn't preserved in the debug file. Check that
|
||
|
this is a section or group signature symbol
|
||
|
- for a section which has been removed. */
|
||
|
+ for a section which has been removed. Or a special
|
||
|
+ data marker symbol to a debug section. */
|
||
|
{
|
||
|
elf_assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION
|
||
|
|| ((shdr_info[sidx].shdr.sh_type
|
||
|
== SHT_GROUP)
|
||
|
&& (shdr_info[sidx].shdr.sh_info
|
||
|
- == inner)));
|
||
|
+ == inner))
|
||
|
+ || ebl_data_marker_symbol (ebl, sym,
|
||
|
+ elf_strptr (elf, sh_link,
|
||
|
+ sym->st_name)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||
|
index 7fd4b21..edfdb53 100644
|
||
|
--- a/tests/Makefile.am
|
||
|
+++ b/tests/Makefile.am
|
||
|
@@ -81,7 +81,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
|
||
|
run-strip-test3.sh run-strip-test4.sh run-strip-test5.sh \
|
||
|
run-strip-test6.sh run-strip-test7.sh run-strip-test8.sh \
|
||
|
run-strip-test9.sh run-strip-test10.sh run-strip-test11.sh \
|
||
|
- run-strip-nothing.sh \
|
||
|
+ run-strip-nothing.sh run-strip-g.sh \
|
||
|
run-strip-groups.sh run-strip-reloc.sh run-strip-strmerge.sh \
|
||
|
run-strip-nobitsalign.sh run-strip-remove-keep.sh \
|
||
|
run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-test3.sh \
|
||
|
@@ -176,7 +176,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
|
||
|
run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
|
||
|
run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \
|
||
|
run-strip-test9.sh run-strip-test10.sh run-strip-test11.sh \
|
||
|
- run-strip-nothing.sh run-strip-remove-keep.sh \
|
||
|
+ run-strip-nothing.sh run-strip-remove-keep.sh run-strip-g.sh \
|
||
|
run-strip-strmerge.sh run-strip-nobitsalign.sh \
|
||
|
testfile-nobitsalign.bz2 testfile-nobitsalign.strip.bz2 \
|
||
|
run-strip-reloc.sh hello_i386.ko.bz2 hello_x86_64.ko.bz2 \
|
||
|
diff --git a/tests/run-strip-g.sh b/tests/run-strip-g.sh
|
||
|
new file mode 100755
|
||
|
index 0000000..1303819
|
||
|
--- /dev/null
|
||
|
+++ b/tests/run-strip-g.sh
|
||
|
@@ -0,0 +1,102 @@
|
||
|
+#! /bin/sh
|
||
|
+# Copyright (C) 2017 Red Hat, Inc.
|
||
|
+# This file is part of elfutils.
|
||
|
+#
|
||
|
+# This file is free software; you can redistribute it and/or modify
|
||
|
+# it under the terms of the GNU General Public License as published by
|
||
|
+# the Free Software Foundation; either version 3 of the License, or
|
||
|
+# (at your option) any later version.
|
||
|
+#
|
||
|
+# elfutils is distributed in the hope that it will be useful, but
|
||
|
+# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+# GNU General Public License for more details.
|
||
|
+#
|
||
|
+# You should have received a copy of the GNU General Public License
|
||
|
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
+
|
||
|
+. $srcdir/test-subr.sh
|
||
|
+
|
||
|
+# When stripping just the debug sections/symbols we keep the symtab
|
||
|
+# in the main ELF file. There should be no symbols pointing into the
|
||
|
+# debug sections and so there should not be a copy in the debug file
|
||
|
+# except for a NOBITS one.
|
||
|
+
|
||
|
+tempfiles a.out strip.out debug.out readelf.out
|
||
|
+
|
||
|
+echo Create debug a.out.
|
||
|
+echo "int main() { return 1; }" | gcc -g -xc -
|
||
|
+
|
||
|
+echo strip -g to file with debug file
|
||
|
+testrun ${abs_top_builddir}/src/strip -g -o strip.out -f debug.out ||
|
||
|
+ { echo "*** failed to strip -g -o strip.out -f debug.out a.out"; exit -1; }
|
||
|
+
|
||
|
+status=0
|
||
|
+testrun ${abs_top_builddir}/src/readelf -S strip.out > readelf.out
|
||
|
+grep SYMTAB readelf.out || status=$?
|
||
|
+echo $status
|
||
|
+if test $status -ne 0; then
|
||
|
+ echo no symtab found in strip.out
|
||
|
+ exit 1
|
||
|
+fi
|
||
|
+
|
||
|
+status=0
|
||
|
+testrun ${abs_top_builddir}/src/readelf -S debug.out > readelf.out
|
||
|
+grep SYMTAB readelf.out || status=$?
|
||
|
+echo $status
|
||
|
+if test $status -ne 1; then
|
||
|
+ echo symtab found in debug.out
|
||
|
+ exit 1
|
||
|
+fi
|
||
|
+
|
||
|
+# arm (with data marker in .debug_frame). See tests/run-addrcfi.sh
|
||
|
+testfiles testfilearm
|
||
|
+
|
||
|
+echo arm strip -g to file with debug file
|
||
|
+testrun ${abs_top_builddir}/src/strip -g -o strip.out -f debug.out testfilearm ||
|
||
|
+ { echo "*** failed to strip -g -o strip.out -f debug.out a.out"; exit -1; }
|
||
|
+
|
||
|
+status=0
|
||
|
+testrun ${abs_top_builddir}/src/readelf -S strip.out > readelf.out
|
||
|
+grep SYMTAB readelf.out || status=$?
|
||
|
+echo $status
|
||
|
+if test $status -ne 0; then
|
||
|
+ echo no symtab found in strip.out
|
||
|
+ exit 1
|
||
|
+fi
|
||
|
+
|
||
|
+status=0
|
||
|
+testrun ${abs_top_builddir}/src/readelf -S debug.out > readelf.out
|
||
|
+grep SYMTAB readelf.out || status=$?
|
||
|
+echo $status
|
||
|
+if test $status -ne 1; then
|
||
|
+ echo symtab found in debug.out
|
||
|
+ exit 1
|
||
|
+fi
|
||
|
+
|
||
|
+# aarch64 (with data marker in .debug_frame). See tests/run-addrcfi.sh
|
||
|
+testfiles testfileaarch64
|
||
|
+
|
||
|
+echo aarch64 strip -g to file with debug file
|
||
|
+testrun ${abs_top_builddir}/src/strip -g -o strip.out -f debug.out testfileaarch64 ||
|
||
|
+ { echo "*** failed to strip -g -o strip.out -f debug.out a.out"; exit -1; }
|
||
|
+
|
||
|
+status=0
|
||
|
+testrun ${abs_top_builddir}/src/readelf -S strip.out > readelf.out
|
||
|
+grep SYMTAB readelf.out || status=$?
|
||
|
+echo $status
|
||
|
+if test $status -ne 0; then
|
||
|
+ echo no symtab found in strip.out
|
||
|
+ exit 1
|
||
|
+fi
|
||
|
+
|
||
|
+status=0
|
||
|
+testrun ${abs_top_builddir}/src/readelf -S debug.out > readelf.out
|
||
|
+grep SYMTAB readelf.out || status=$?
|
||
|
+echo $status
|
||
|
+if test $status -ne 1; then
|
||
|
+ echo symtab found in debug.out
|
||
|
+ exit 1
|
||
|
+fi
|
||
|
+
|
||
|
+exit 0
|
||
|
diff -ru elfutils-0.169.orig/libebl/Makefile.in elfutils-0.169/libebl/Makefile.in
|
||
|
--- elfutils-0.169.orig/libebl/Makefile.in 2017-07-21 12:49:56.824083447 +0200
|
||
|
+++ elfutils-0.169/libebl/Makefile.in 2017-07-21 12:50:44.169036296 +0200
|
||
|
@@ -163,7 +163,8 @@
|
||
|
eblstother.$(OBJEXT) eblinitreg.$(OBJEXT) \
|
||
|
ebldwarftoregno.$(OBJEXT) eblnormalizepc.$(OBJEXT) \
|
||
|
eblunwind.$(OBJEXT) eblresolvesym.$(OBJEXT) \
|
||
|
- eblcheckreloctargettype.$(OBJEXT)
|
||
|
+ eblcheckreloctargettype.$(OBJEXT) \
|
||
|
+ ebl_data_marker_symbol.$(OBJEXT)
|
||
|
am_libebl_a_OBJECTS = $(am__objects_1)
|
||
|
libebl_a_OBJECTS = $(am_libebl_a_OBJECTS)
|
||
|
AM_V_P = $(am__v_P_@AM_V@)
|
||
|
@@ -405,7 +406,8 @@
|
||
|
eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \
|
||
|
ebl_check_special_section.c ebl_syscall_abi.c eblabicfi.c \
|
||
|
eblstother.c eblinitreg.c ebldwarftoregno.c eblnormalizepc.c \
|
||
|
- eblunwind.c eblresolvesym.c eblcheckreloctargettype.c
|
||
|
+ eblunwind.c eblresolvesym.c eblcheckreloctargettype.c \
|
||
|
+ ebl_data_marker_symbol.c
|
||
|
|
||
|
libebl_a_SOURCES = $(gen_SOURCES)
|
||
|
noinst_HEADERS = libeblP.h ebl-hooks.h
|
||
|
diff -ru elfutils-0.169.orig/tests/Makefile.in elfutils-0.169/tests/Makefile.in
|
||
|
--- elfutils-0.169.orig/tests/Makefile.in 2017-07-21 12:49:56.849082894 +0200
|
||
|
+++ elfutils-0.169/tests/Makefile.in 2017-07-21 12:50:44.461029838 +0200
|
||
|
@@ -139,17 +139,18 @@
|
||
|
run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
|
||
|
run-strip-test7.sh run-strip-test8.sh run-strip-test9.sh \
|
||
|
run-strip-test10.sh run-strip-test11.sh run-strip-nothing.sh \
|
||
|
- run-strip-groups.sh run-strip-reloc.sh run-strip-strmerge.sh \
|
||
|
- run-strip-nobitsalign.sh run-strip-remove-keep.sh \
|
||
|
- run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-test3.sh \
|
||
|
- run-unstrip-test4.sh run-unstrip-M.sh run-elfstrmerge-test.sh \
|
||
|
- run-ecp-test.sh run-ecp-test2.sh run-alldts.sh \
|
||
|
- run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \
|
||
|
- run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \
|
||
|
- run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
|
||
|
- run-find-prologues.sh run-allregs.sh run-addrcfi.sh \
|
||
|
- run-nm-self.sh run-readelf-self.sh run-readelf-test1.sh \
|
||
|
- run-readelf-test2.sh run-readelf-test3.sh run-readelf-test4.sh \
|
||
|
+ run-strip-g.sh run-strip-groups.sh run-strip-reloc.sh \
|
||
|
+ run-strip-strmerge.sh run-strip-nobitsalign.sh \
|
||
|
+ run-strip-remove-keep.sh run-unstrip-test.sh \
|
||
|
+ run-unstrip-test2.sh run-unstrip-test3.sh run-unstrip-test4.sh \
|
||
|
+ run-unstrip-M.sh run-elfstrmerge-test.sh run-ecp-test.sh \
|
||
|
+ run-ecp-test2.sh run-alldts.sh run-elflint-test.sh \
|
||
|
+ run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \
|
||
|
+ run-ranlib-test3.sh run-ranlib-test4.sh run-addrscopes.sh \
|
||
|
+ run-strings-test.sh run-funcscopes.sh run-find-prologues.sh \
|
||
|
+ run-allregs.sh run-addrcfi.sh run-nm-self.sh \
|
||
|
+ run-readelf-self.sh run-readelf-test1.sh run-readelf-test2.sh \
|
||
|
+ run-readelf-test3.sh run-readelf-test4.sh \
|
||
|
run-readelf-twofiles.sh run-readelf-macro.sh \
|
||
|
run-readelf-loc.sh run-readelf-aranges.sh run-readelf-line.sh \
|
||
|
run-readelf-z.sh run-native-test.sh run-bug1-test.sh \
|
||
|
@@ -1046,7 +1047,7 @@
|
||
|
run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
|
||
|
run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \
|
||
|
run-strip-test9.sh run-strip-test10.sh run-strip-test11.sh \
|
||
|
- run-strip-nothing.sh run-strip-remove-keep.sh \
|
||
|
+ run-strip-nothing.sh run-strip-remove-keep.sh run-strip-g.sh \
|
||
|
run-strip-strmerge.sh run-strip-nobitsalign.sh \
|
||
|
testfile-nobitsalign.bz2 testfile-nobitsalign.strip.bz2 \
|
||
|
run-strip-reloc.sh hello_i386.ko.bz2 hello_x86_64.ko.bz2 \
|
||
|
@@ -2340,6 +2341,13 @@
|
||
|
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
|
||
|
--log-file $$b.log --trs-file $$b.trs \
|
||
|
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
|
||
|
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
|
||
|
+run-strip-g.sh.log: run-strip-g.sh
|
||
|
+ @p='run-strip-g.sh'; \
|
||
|
+ b='run-strip-g.sh'; \
|
||
|
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
|
||
|
+ --log-file $$b.log --trs-file $$b.trs \
|
||
|
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
|
||
|
"$$tst" $(AM_TESTS_FD_REDIRECT)
|
||
|
run-strip-groups.sh.log: run-strip-groups.sh
|
||
|
@p='run-strip-groups.sh'; \
|