This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 07/10] readelf: Handle compressed sections and extend -z to cover -x and -p.


When printing a (non-string, non-data) section use uncompressed data when
possible. For dumping hex and string sections (-x and -p) -z will dump the
uncompressed data (otherwise the compressed data is dumped).

-z, --decompress           Show compression information for compressed
                           sections (when used with -S); decompress section
                           before dumping data (when used with -p or -x)

Includes test cases for ET_REL files using compressed relocation (target)
debug sections to test libdwfl transparent uncompression of sections.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
---
 src/ChangeLog                    |  13 ++
 src/readelf.c                    | 124 +++++++++++++++---
 tests/ChangeLog                  |   7 +
 tests/Makefile.am                |   7 +-
 tests/run-readelf-zdebug-rel.sh  | 144 +++++++++++++++++++++
 tests/run-readelf-zp.sh          | 271 +++++++++++++++++++++++++++++++++++++++
 tests/run-readelf-zx.sh          |  66 ++++++++++
 tests/testfile-debug-rel-g.o.bz2 | Bin 0 -> 1238 bytes
 tests/testfile-debug-rel-z.o.bz2 | Bin 0 -> 1225 bytes
 tests/testfile-debug-rel.o.bz2   | Bin 0 -> 1069 bytes
 10 files changed, 609 insertions(+), 23 deletions(-)
 create mode 100755 tests/run-readelf-zdebug-rel.sh
 create mode 100755 tests/run-readelf-zp.sh
 create mode 100755 tests/run-readelf-zx.sh
 create mode 100644 tests/testfile-debug-rel-g.o.bz2
 create mode 100644 tests/testfile-debug-rel-z.o.bz2
 create mode 100644 tests/testfile-debug-rel.o.bz2

diff --git a/src/ChangeLog b/src/ChangeLog
index 9724221..1b5be54 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,16 @@
+2015-10-20  Mark Wielaard  <mjw@redhat.com>
+
+	* readelf.c (options): Expand -z help text.
+	(dump_data_section): Check whether we need and can decompress section
+	data and call elf_rawzdata if so,
+	(print_string_section): Likewise.
+	(elf_contains_chdrs): New function.
+	(process_elf_file): Rename print_unrelocated to print_unchanged,
+	use elf_contains_chdrs.
+	(print_scngrp): Check whether section is compressed before use.
+	(print_symtab): Likewise.
+	(handle_hash): Likewise.
+
 2015-10-16  Mark Wielaard  <mjw@redhat.com>
 
 	* readelf.c (argp_option): Describe --decompress,-z.
diff --git a/src/readelf.c b/src/readelf.c
index 1d507cf..85fa92b 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -114,7 +114,7 @@ static const struct argp_option options[] =
   { "wide", 'W', NULL, 0,
     N_("Ignored for compatibility (lines always wide)"), 0 },
   { "decompress", 'z', NULL, 0,
-    N_("Show compression information for compressed sections (when used with -S)."), 0 },
+    N_("Show compression information for compressed sections (when used with -S); decompress section before dumping data (when used with -p or -x)"), 0 },
   { NULL, 0, NULL, 0, NULL, 0 }
 };
 
@@ -806,6 +806,20 @@ process_file (int fd, const char *fname, bool only_one)
     close (fd);
 }
 
+/* Check whether there are any compressed sections in the ELF file.  */
+static bool
+elf_contains_chdrs (Elf *elf)
+{
+  Elf_Scn *scn = NULL;
+  while ((scn = elf_nextscn (elf, scn)) != NULL)
+    {
+      GElf_Shdr shdr_mem;
+      GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+      if (shdr != NULL && (shdr->sh_flags & SHF_COMPRESSED) != 0)
+	return true;
+    }
+  return false;
+}
 
 /* Process one ELF file.  */
 static void
@@ -844,17 +858,21 @@ process_elf_file (Dwfl_Module *dwflmod, int fd)
 	   gettext ("cannot determine number of program headers: %s"),
 	   elf_errmsg (-1));
 
-  /* For an ET_REL file, libdwfl has adjusted the in-core shdrs
-     and may have applied relocation to some sections.
-     So we need to get a fresh Elf handle on the file to display those.  */
-  bool print_unrelocated = (print_section_header
-			    || print_relocations
-			    || dump_data_sections != NULL
-			    || print_notes);
+  /* For an ET_REL file, libdwfl has adjusted the in-core shdrs and
+     may have applied relocation to some sections.  If there are any
+     compressed sections, any pass (or libdw/libdwfl) might have
+     uncompressed them.  So we need to get a fresh Elf handle on the
+     file to display those.  */
+  bool print_unchanged = ((print_section_header
+			   || print_relocations
+			   || dump_data_sections != NULL
+			   || print_notes)
+			  && (ehdr->e_type == ET_REL
+			      || elf_contains_chdrs (ebl->elf)));
 
   Elf *pure_elf = NULL;
   Ebl *pure_ebl = ebl;
-  if (ehdr->e_type == ET_REL && print_unrelocated)
+  if (print_unchanged)
     {
       /* Read the file afresh.  */
       off_t aroff = elf_getaroff (elf);
@@ -1503,7 +1521,17 @@ print_scngrp (Ebl *ebl)
       GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
 
       if (shdr != NULL && shdr->sh_type == SHT_GROUP)
-	handle_scngrp (ebl, scn, shdr);
+	{
+	  if ((shdr->sh_flags & SHF_COMPRESSED) != 0)
+	    {
+	      if (elf_compress (scn, 0, 0) < 0)
+		printf ("WARNING: %s [%zd]\n",
+			gettext ("Couldn't uncompress section"),
+			elf_ndxscn (scn));
+	      shdr = gelf_getshdr (scn, &shdr_mem);
+	    }
+	  handle_scngrp (ebl, scn, shdr);
+	}
     }
 }
 
@@ -2202,7 +2230,17 @@ print_symtab (Ebl *ebl, int type)
       GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
 
       if (shdr != NULL && shdr->sh_type == (GElf_Word) type)
-	handle_symtab (ebl, scn, shdr);
+	{
+	  if ((shdr->sh_flags & SHF_COMPRESSED) != 0)
+	    {
+	      if (elf_compress (scn, 0, 0) < 0)
+		printf ("WARNING: %s [%zd]\n",
+			gettext ("Couldn't uncompress section"),
+			elf_ndxscn (scn));
+	      shdr = gelf_getshdr (scn, &shdr_mem);
+	    }
+	  handle_symtab (ebl, scn, shdr);
+	}
     }
 }
 
@@ -3271,6 +3309,16 @@ handle_hash (Ebl *ebl)
 
       if (likely (shdr != NULL))
 	{
+	  if ((shdr->sh_type == SHT_HASH || shdr->sh_type == SHT_GNU_HASH)
+	      && (shdr->sh_flags & SHF_COMPRESSED) != 0)
+	    {
+	      if (elf_compress (scn, 0, 0) < 0)
+		printf ("WARNING: %s [%zd]\n",
+			gettext ("Couldn't uncompress section"),
+			elf_ndxscn (scn));
+	      shdr = gelf_getshdr (scn, &shdr_mem);
+	    }
+
 	  if (shdr->sh_type == SHT_HASH)
 	    {
 	      if (ebl_sysvhash_entrysize (ebl) == sizeof (Elf64_Xword))
@@ -8320,11 +8368,9 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
 	  int n;
 	  for (n = 0; n < ndebug_sections; ++n)
 	    if (strcmp (name, debug_sections[n].name) == 0
-#if USE_ZLIB
 		|| (name[0] == '.' && name[1] == 'z'
 		    && debug_sections[n].name[1] == 'd'
 		    && strcmp (&name[2], &debug_sections[n].name[1]) == 0)
-#endif
 		)
 	      {
 		if ((print_debug_sections | implicit_debug_sections)
@@ -9456,16 +9502,34 @@ dump_data_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name)
 	    elf_ndxscn (scn), name);
   else
     {
+      if (print_decompress)
+	{
+	  /* We try to decompress the section, but keep the old shdr around
+	     so we can show both the original shdr size and the uncompressed
+	     data size.   */
+	  if ((shdr->sh_flags & SHF_COMPRESSED) != 0)
+	    elf_compress (scn, 0, 0);
+	  else if (strncmp (name, ".zdebug", strlen (".zdebug")) == 0)
+	    elf_compress_gnu (scn, 0, 0);
+	}
+
       Elf_Data *data = elf_rawdata (scn, NULL);
       if (data == NULL)
 	error (0, 0, gettext ("cannot get data for section [%zu] '%s': %s"),
 	       elf_ndxscn (scn), name, elf_errmsg (-1));
       else
 	{
-	  printf (gettext ("\nHex dump of section [%zu] '%s', %" PRIu64
-			   " bytes at offset %#0" PRIx64 ":\n"),
-		  elf_ndxscn (scn), name,
-		  shdr->sh_size, shdr->sh_offset);
+	  if (data->d_size == shdr->sh_size)
+	    printf (gettext ("\nHex dump of section [%zu] '%s', %" PRIu64
+			     " bytes at offset %#0" PRIx64 ":\n"),
+		    elf_ndxscn (scn), name,
+		    shdr->sh_size, shdr->sh_offset);
+	  else
+	    printf (gettext ("\nHex dump of section [%zu] '%s', %" PRIu64
+			     " bytes (%zd uncompressed) at offset %#0"
+			     PRIx64 ":\n"),
+		    elf_ndxscn (scn), name,
+		    shdr->sh_size, data->d_size, shdr->sh_offset);
 	  hex_dump (data->d_buf, data->d_size);
 	}
     }
@@ -9479,16 +9543,34 @@ print_string_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name)
 	    elf_ndxscn (scn), name);
   else
     {
+      if (print_decompress)
+	{
+	  /* We try to decompress the section, but keep the old shdr around
+	     so we can show both the original shdr size and the uncompressed
+	     data size.  */
+	  if ((shdr->sh_flags & SHF_COMPRESSED) != 0)
+	    elf_compress (scn, 0, 0);
+	  else if (strncmp (name, ".zdebug", strlen (".zdebug")) == 0)
+	    elf_compress_gnu (scn, 0, 0);
+	}
+
       Elf_Data *data = elf_rawdata (scn, NULL);
       if (data == NULL)
 	error (0, 0, gettext ("cannot get data for section [%zu] '%s': %s"),
 	       elf_ndxscn (scn), name, elf_errmsg (-1));
       else
 	{
-	  printf (gettext ("\nString section [%zu] '%s' contains %" PRIu64
-			   " bytes at offset %#0" PRIx64 ":\n"),
-		  elf_ndxscn (scn), name,
-		  shdr->sh_size, shdr->sh_offset);
+	  if (data->d_size == shdr->sh_size)
+	    printf (gettext ("\nString section [%zu] '%s' contains %" PRIu64
+			     " bytes at offset %#0" PRIx64 ":\n"),
+		    elf_ndxscn (scn), name,
+		    shdr->sh_size, shdr->sh_offset);
+	  else
+	    printf (gettext ("\nString section [%zu] '%s' contains %" PRIu64
+			     " bytes (%zd uncompressed) at offset %#0"
+			     PRIx64 ":\n"),
+		    elf_ndxscn (scn), name,
+		    shdr->sh_size, data->d_size, shdr->sh_offset);
 
 	  const char *start = data->d_buf;
 	  const char *const limit = start + data->d_size;
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 8ddf32b..6e9abbe 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,10 @@
+2015-10-20  Mark Wielaard  <mjw@redhat.com>
+
+	* run-readelf-zx.sh: New test.
+	* run-readelf-zp.sh: Likewise.
+	* Makefile.am (TESTS): Add run-readelf-zx.sh and run-readelf-zp.sh.
+	(EXTRA_DIST): Likewise.
+
 2015-10-21  Mark Wielaard  <mjw@redhat.com>
 
 	* Makefile.am (check_PROGRAMS): Add elfgetzdata and elfputzdata.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 131ed46..7e243e9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -117,7 +117,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
 	run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \
 	run-backtrace-core-aarch64.sh \
 	run-backtrace-demangle.sh run-stack-d-test.sh run-stack-i-test.sh \
-	run-stack-demangled-test.sh \
+	run-stack-demangled-test.sh run-readelf-zx.sh run-readelf-zp.sh \
 	run-readelf-dwz-multi.sh run-allfcts-multi.sh run-deleted.sh \
 	run-linkmap-cut.sh run-aggregate-size.sh vdsosyms run-readelf-A.sh \
 	run-getsrc-die.sh run-strptr.sh newdata elfstrtab dwfl-proc-attach \
@@ -143,7 +143,7 @@ TESTS += run-readelf-s.sh run-dwflsyms.sh
 endif
 
 if ZLIB
-TESTS += run-readelf-zdebug.sh
+TESTS += run-readelf-zdebug.sh run-readelf-zdebug-rel.sh
 endif
 
 if HAVE_LIBASM
@@ -298,6 +298,9 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
 	     run-stack-demangled-test.sh \
 	     testfiledwarfinlines.bz2 testfiledwarfinlines.core.bz2 \
 	     run-readelf-zdebug.sh testfile-debug.bz2 testfile-zdebug.bz2 \
+	     run-readelf-zdebug-rel.sh testfile-debug-rel.o.bz2 \
+	     testfile-debug-rel-g.o.bz2 testfile-debug-rel-z.o.bz2 \
+	     run-readelf-zx.sh run-readelf-zp.sh \
 	     run-deleted.sh run-linkmap-cut.sh linkmap-cut-lib.so.bz2 \
 	     linkmap-cut.bz2 linkmap-cut.core.bz2 \
 	     run-aggregate-size.sh testfile-sizes1.o.bz2 testfile-sizes2.o.bz2 \
diff --git a/tests/run-readelf-zdebug-rel.sh b/tests/run-readelf-zdebug-rel.sh
new file mode 100755
index 0000000..88ea5bf
--- /dev/null
+++ b/tests/run-readelf-zdebug-rel.sh
@@ -0,0 +1,144 @@
+#! /bin/sh
+# Copyright (C) 2015 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
+
+# - testfile-zdebug-rel.c
+# #define UINT64_MAX 18446744073709551615UL
+#
+# int
+# main (int argc, char **argv)
+# {
+#   unsigned long a = UINT64_MAX - 8;
+#   unsigned long b = 42 + argc;
+#
+#   if ( a + b < b )
+#     argc = a + argc;
+#   else
+#      b--;
+#
+#   return a - b;
+# }
+#
+# gcc -Og -g -Xassembler --compress-debug-sections=none \
+#     -c -o testfile-debug-rel.o testfile-zdebug-rel.c
+# gcc -Og -g -Xassembler --compress-debug-sections=zlib-gnu \
+#     -c -o testfile-debug-rel-g.o testfile-zdebug-rel.c
+# gcc -Og -g -Xassembler --compress-debug-sections=zlib-gabi \
+#     -c -o testfile-debug-rel-z.o testfile-zdebug-rel.c
+
+testfiles testfile-debug-rel.o testfile-debug-rel-g.o testfile-debug-rel-z.o
+tempfiles readelf.out
+tempfiles info.out loc.out
+
+cat > info.out << \EOF
+
+DWARF section [ 4] '.debug_info' at offset 0x58:
+ [Offset]
+ Compilation unit at offset 0:
+ Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4
+ [     b]  compile_unit
+           producer             (strp) "GNU C11 5.3.1 20151207 (Red Hat 5.3.1-2) -mtune=generic -march=x86-64 -g -Og"
+           language             (data1) C99 (12)
+           name                 (strp) "testfile-zdebug-rel.c"
+           comp_dir             (strp) "/tmp"
+           low_pc               (addr) 000000000000000000
+           high_pc              (data8) 24 (0x0000000000000018)
+           stmt_list            (sec_offset) 0
+ [    2d]    subprogram
+             external             (flag_present) 
+             name                 (strp) "main"
+             decl_file            (data1) 1
+             decl_line            (data1) 4
+             prototyped           (flag_present) 
+             type                 (ref4) [    80]
+             low_pc               (addr) 000000000000000000
+             high_pc              (data8) 24 (0x0000000000000018)
+             frame_base           (exprloc) 
+              [   0] call_frame_cfa
+             GNU_all_call_sites   (flag_present) 
+             sibling              (ref4) [    80]
+ [    4e]      formal_parameter
+               name                 (strp) "argc"
+               decl_file            (data1) 1
+               decl_line            (data1) 4
+               type                 (ref4) [    80]
+               location             (sec_offset) location list [     0]
+ [    5d]      formal_parameter
+               name                 (strp) "argv"
+               decl_file            (data1) 1
+               decl_line            (data1) 4
+               type                 (ref4) [    87]
+               location             (exprloc) 
+                [   0] reg4
+ [    6a]      variable
+               name                 (string) "a"
+               decl_file            (data1) 1
+               decl_line            (data1) 6
+               type                 (ref4) [    9a]
+               const_value          (sdata) -9
+ [    74]      variable
+               name                 (string) "b"
+               decl_file            (data1) 1
+               decl_line            (data1) 7
+               type                 (ref4) [    9a]
+               location             (exprloc) 
+                [   0] reg5
+ [    80]    base_type
+             byte_size            (data1) 4
+             encoding             (data1) signed (5)
+             name                 (string) "int"
+ [    87]    pointer_type
+             byte_size            (data1) 8
+             type                 (ref4) [    8d]
+ [    8d]    pointer_type
+             byte_size            (data1) 8
+             type                 (ref4) [    93]
+ [    93]    base_type
+             byte_size            (data1) 1
+             encoding             (data1) signed_char (6)
+             name                 (strp) "char"
+ [    9a]    base_type
+             byte_size            (data1) 8
+             encoding             (data1) unsigned (7)
+             name                 (strp) "long unsigned int"
+EOF
+
+cat info.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=info testfile-debug-rel.o
+
+cat info.out | sed -e "s/'.debug_info'/'.zdebug_info'/" | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=info testfile-debug-rel-g.o
+
+cat info.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=info testfile-debug-rel-z.o
+
+cat > loc.out << \EOF
+
+DWARF section [ 7] '.debug_loc' at offset 0x185:
+ [     0]  000000000000000000..0x0000000000000003 [   0] reg5
+           0x0000000000000003..0x0000000000000010 [   0] breg5 -42
+                                                  [   2] stack_value
+           0x0000000000000010..0x0000000000000018 [   0] GNU_entry_value:
+       [   0] reg5
+                                                  [   3] stack_value
+EOF
+
+cat loc.out | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug-rel.o
+
+cat loc.out | sed -e "s/'.debug_loc' at offset 0x185/'.zdebug_loc' at offset 0x138/" | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug-rel-g.o
+
+cat loc.out | sed -e "s/at offset 0x185/at offset 0x150/" | testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=loc testfile-debug-rel-z.o
+
+exit 0
diff --git a/tests/run-readelf-zp.sh b/tests/run-readelf-zp.sh
new file mode 100755
index 0000000..872126c
--- /dev/null
+++ b/tests/run-readelf-zp.sh
@@ -0,0 +1,271 @@
+#! /bin/sh
+# Copyright (C) 2015 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
+
+# See run-readelf-zdebug.sh for testfile.
+
+testfiles testfile-zdebug
+testrun_compare ${abs_top_builddir}/src/readelf -z -p.zdebug_str testfile-zdebug <<\EOF
+
+String section [35] '.zdebug_str' contains 2431 bytes (6433 uncompressed) at offset 0x1da3:
+  [     0]  UINT64_MAX 18446744073709551615UL
+  [    22]  __DBL_DENORM_MIN__ ((double)4.94065645841246544177e-324L)
+  [    5c]  __linux 1
+  [    66]  __SIZEOF_SIZE_T__ 8
+  [    7a]  __UINTPTR_TYPE__ long unsigned int
+  [    9d]  __SIZEOF_POINTER__ 8
+  [    b2]  __UINT8_MAX__ 255
+  [    c4]  __PTRDIFF_MAX__ 9223372036854775807L
+  [    e9]  __DEC64_MANT_DIG__ 16
+  [    ff]  __FLT_RADIX__ 2
+  [   10f]  __DEC32_MIN__ 1E-95DF
+  [   125]  __unix__ 1
+  [   130]  testfile-zdebug.c
+  [   142]  __UINT_LEAST64_MAX__ 18446744073709551615UL
+  [   16e]  __SIZEOF_WINT_T__ 4
+  [   182]  __LONG_MAX__ 9223372036854775807L
+  [   1a4]  __LDBL_MIN__ 3.36210314311209350626e-4932L
+  [   1cf]  __GCC_ATOMIC_SHORT_LOCK_FREE 2
+  [   1ee]  __LP64__ 1
+  [   1f9]  __UINT64_C(c) c ## UL
+  [   20f]  __DBL_HAS_INFINITY__ 1
+  [   226]  __SSE2_MATH__ 1
+  [   236]  __linux__ 1
+  [   242]  __STDC_HOSTED__ 1
+  [   254]  __WINT_MIN__ 0U
+  [   264]  __x86_64__ 1
+  [   271]  __UINT32_TYPE__ unsigned int
+  [   28e]  __UINT_LEAST8_MAX__ 255
+  [   2a6]  __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
+  [   2d7]  __FLT_MAX__ 3.40282346638528859812e+38F
+  [   2ff]  long unsigned int
+  [   311]  __DBL_MANT_DIG__ 53
+  [   325]  linux 1
+  [   32d]  __DBL_HAS_QUIET_NAN__ 1
+  [   345]  __UINT8_TYPE__ unsigned char
+  [   362]  __DEC32_MAX_EXP__ 97
+  [   377]  __INT32_TYPE__ int
+  [   38a]  __SIG_ATOMIC_TYPE__ int
+  [   3a2]  __DEC64_MAX_EXP__ 385
+  [   3b8]  __DBL_MIN_EXP__ (-1021)
+  [   3d0]  _LP64 1
+  [   3d8]  __LDBL_HAS_INFINITY__ 1
+  [   3f0]  __INT_FAST64_TYPE__ long int
+  [   40d]  __gnu_linux__ 1
+  [   41d]  __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
+  [   43e]  __UINT_FAST64_TYPE__ long unsigned int
+  [   465]  __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+  [   48c]  __UINT16_MAX__ 65535
+  [   4a1]  __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
+  [   4ce]  __PRAGMA_REDEFINE_EXTNAME 1
+  [   4ea]  __INT_LEAST16_TYPE__ short int
+  [   509]  __k8__ 1
+  [   512]  __DECIMAL_DIG__ 21
+  [   525]  main
+  [   52a]  __DBL_MAX__ ((double)1.79769313486231570815e+308L)
+  [   55d]  __INT16_TYPE__ short int
+  [   576]  __LDBL_HAS_QUIET_NAN__ 1
+  [   58f]  __SIZEOF_DOUBLE__ 8
+  [   5a3]  __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
+  [   5ca]  __ATOMIC_SEQ_CST 5
+  [   5dd]  __UINT64_TYPE__ long unsigned int
+  [   5ff]  __INT_LEAST32_TYPE__ int
+  [   618]  __INT_LEAST64_MAX__ 9223372036854775807L
+  [   641]  __OPTIMIZE__ 1
+  [   650]  __INTMAX_C(c) c ## L
+  [   665]  __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+  [   687]  __INT_FAST8_MAX__ 127
+  [   69d]  __PTRDIFF_TYPE__ long int
+  [   6b7]  __LDBL_MIN_EXP__ (-16381)
+  [   6d1]  __SIZEOF_LONG_LONG__ 8
+  [   6e8]  __FLT_DIG__ 6
+  [   6f6]  __UINTMAX_MAX__ 18446744073709551615UL
+  [   71d]  __SIZEOF_WCHAR_T__ 4
+  [   732]  __INT64_C(c) c ## L
+  [   746]  __UINTPTR_MAX__ 18446744073709551615UL
+  [   76d]  __FLT_MAX_10_EXP__ 38
+  [   783]  __FLT_MIN__ 1.17549435082228750797e-38F
+  [   7ab]  __UINT_LEAST64_TYPE__ long unsigned int
+  [   7d3]  __SIZEOF_LONG_DOUBLE__ 16
+  [   7ed]  __SIZE_MAX__ 18446744073709551615UL
+  [   811]  __INT8_C(c) c
+  [   81f]  __amd64__ 1
+  [   82b]  __INT_LEAST64_TYPE__ long int
+  [   849]  __INT_FAST64_MAX__ 9223372036854775807L
+  [   871]  __DEC_EVAL_METHOD__ 2
+  [   887]  __DEC32_MAX__ 9.999999E96DF
+  [   8a3]  __GNUC_MINOR__ 8
+  [   8b4]  __WCHAR_MAX__ 2147483647
+  [   8cd]  __SIZE_TYPE__ long unsigned int
+  [   8ed]  __INT8_MAX__ 127
+  [   8fe]  __INTMAX_MAX__ 9223372036854775807L
+  [   922]  __ATOMIC_HLE_RELEASE 131072
+  [   93e]  __FLT_HAS_QUIET_NAN__ 1
+  [   956]  __DBL_EPSILON__ ((double)2.22044604925031308085e-16L)
+  [   98c]  __FLT_MIN_EXP__ (-125)
+  [   9a3]  __INT_LEAST8_MAX__ 127
+  [   9ba]  __SIZEOF_INT128__ 16
+  [   9cf]  __INTPTR_MAX__ 9223372036854775807L
+  [   9f3]  __INTPTR_TYPE__ long int
+  [   a0c]  __LDBL_MIN_10_EXP__ (-4931)
+  [   a28]  __GCC_ATOMIC_POINTER_LOCK_FREE 2
+  [   a49]  __UINT_LEAST32_MAX__ 4294967295U
+  [   a6a]  __SIZEOF_SHORT__ 2
+  [   a7d]  __LDBL_MAX_10_EXP__ 4932
+  [   a96]  __INT16_C(c) c
+  [   aa5]  __MMX__ 1
+  [   aaf]  unix 1
+  [   ab6]  __FLT_MAX_EXP__ 128
+  [   aca]  __DEC64_MAX__ 9.999999999999999E384DD
+  [   af0]  __FLT_EPSILON__ 1.19209289550781250000e-7F
+  [   b1b]  __INT_FAST16_TYPE__ long int
+  [   b38]  __VERSION__ "4.8.2 20140120 (Red Hat 4.8.2-15)"
+  [   b68]  __GCC_ATOMIC_LLONG_LOCK_FREE 2
+  [   b87]  __DEC128_MIN_EXP__ (-6142)
+  [   ba2]  __ATOMIC_RELEASE 3
+  [   bb5]  __GNUC_PATCHLEVEL__ 2
+  [   bcb]  __UINT_FAST64_MAX__ 18446744073709551615UL
+  [   bf6]  __DBL_DECIMAL_DIG__ 17
+  [   c0d]  __DBL_DIG__ 15
+  [   c1c]  __FLT_MANT_DIG__ 24
+  [   c30]  __FLT_DECIMAL_DIG__ 9
+  [   c46]  __INT16_MAX__ 32767
+  [   c5a]  __DEC128_MIN__ 1E-6143DL
+  [   c73]  __BIGGEST_ALIGNMENT__ 16
+  [   c8c]  __INT64_MAX__ 9223372036854775807L
+  [   caf]  __INT_FAST32_TYPE__ long int
+  [   ccc]  __GCC_ATOMIC_INT_LOCK_FREE 2
+  [   ce9]  __DEC128_MAX_EXP__ 6145
+  [   d01]  __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
+  [   d26]  __FXSR__ 1
+  [   d31]  __INT8_TYPE__ signed char
+  [   d4b]  __ATOMIC_ACQ_REL 4
+  [   d5e]  __UINT_LEAST16_MAX__ 65535
+  [   d79]  __UINTMAX_TYPE__ long unsigned int
+  [   d9c]  __UINT_FAST8_MAX__ 255
+  [   db3]  __ORDER_BIG_ENDIAN__ 4321
+  [   dcd]  __INT_LEAST32_MAX__ 2147483647
+  [   dec]  __UINT_LEAST16_TYPE__ short unsigned int
+  [   e15]  __INT_FAST8_TYPE__ signed char
+  [   e34]  __DBL_MAX_EXP__ 1024
+  [   e49]  __STDC__ 1
+  [   e54]  __ELF__ 1
+  [   e5e]  __FLT_EVAL_METHOD__ 0
+  [   e74]  __ATOMIC_ACQUIRE 2
+  [   e87]  __DEC64_EPSILON__ 1E-15DD
+  [   ea1]  __INT32_MAX__ 2147483647
+  [   eba]  __GCC_ATOMIC_CHAR_LOCK_FREE 2
+  [   ed8]  __DEC128_EPSILON__ 1E-33DL
+  [   ef3]  __UINT_FAST8_TYPE__ unsigned char
+  [   f15]  __amd64 1
+  [   f1f]  __DEC32_MIN_EXP__ (-94)
+  [   f37]  __GCC_HAVE_DWARF2_CFI_ASM 1
+  [   f53]  __LDBL_DIG__ 18
+  [   f63]  __UINT32_MAX__ 4294967295U
+  [   f7e]  __GNUC_GNU_INLINE__ 1
+  [   f94]  __SSE2__ 1
+  [   f9f]  __ATOMIC_HLE_ACQUIRE 65536
+  [   fba]  __SSE_MATH__ 1
+  [   fc9]  __INT_FAST16_MAX__ 9223372036854775807L
+  [   ff1]  __LDBL_MAX__ 1.18973149535723176502e+4932L
+  [  101c]  __DBL_MIN__ ((double)2.22507385850720138309e-308L)
+  [  104f]  __DEC128_MANT_DIG__ 34
+  [  1066]  __INT32_C(c) c
+  [  1075]  __DEC64_MIN_EXP__ (-382)
+  [  108e]  __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
+  [  10b1]  __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+  [  10d3]  __LDBL_MAX_EXP__ 16384
+  [  10ea]  __DEC32_MANT_DIG__ 7
+  [  10ff]  __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
+  [  1139]  __CHAR32_TYPE__ unsigned int
+  [  1156]  __INT_LEAST8_TYPE__ signed char
+  [  1176]  __UINT16_C(c) c
+  [  1186]  __GCC_ATOMIC_BOOL_LOCK_FREE 2
+  [  11a4]  __SIZEOF_FLOAT__ 4
+  [  11b7]  __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
+  [  11dc]  __DBL_MAX_10_EXP__ 308
+  [  11f3]  __LDBL_EPSILON__ 1.08420217248550443401e-19L
+  [  1220]  __ORDER_PDP_ENDIAN__ 3412
+  [  123a]  __ORDER_LITTLE_ENDIAN__ 1234
+  [  1257]  __WINT_TYPE__ unsigned int
+  [  1272]  __unix 1
+  [  127b]  __ATOMIC_RELAXED 0
+  [  128e]  __UINT_FAST32_MAX__ 18446744073709551615UL
+  [  12b9]  __INT_FAST32_MAX__ 9223372036854775807L
+  [  12e1]  __SIG_ATOMIC_MAX__ 2147483647
+  [  12ff]  __UINT_FAST32_TYPE__ long unsigned int
+  [  1326]  __INT_MAX__ 2147483647
+  [  133d]  __GXX_ABI_VERSION 1002
+  [  1354]  __SIZEOF_INT__ 4
+  [  1365]  char
+  [  136a]  __UINT_FAST16_TYPE__ long unsigned int
+  [  1391]  __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L
+  [  13c3]  __WINT_MAX__ 4294967295U
+  [  13dc]  __FLT_HAS_INFINITY__ 1
+  [  13f3]  __SHRT_MAX__ 32767
+  [  1406]  __INT_LEAST16_MAX__ 32767
+  [  1420]  __LONG_LONG_MAX__ 9223372036854775807LL
+  [  1448]  __SIZEOF_LONG__ 8
+  [  145a]  __INTMAX_TYPE__ long int
+  [  1473]  __LDBL_HAS_DENORM__ 1
+  [  1489]  __code_model_small__ 1
+  [  14a0]  __REGISTER_PREFIX__ 
+  [  14b5]  __ATOMIC_CONSUME 1
+  [  14c8]  __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
+  [  150d]  __GNUC__ 4
+  [  1518]  __UINT16_TYPE__ short unsigned int
+  [  153b]  __SSE__ 1
+  [  1545]  __UINT32_C(c) c ## U
+  [  155a]  __k8 1
+  [  1561]  __UINTMAX_C(c) c ## UL
+  [  1578]  __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
+  [  159d]  __SIZEOF_PTRDIFF_T__ 8
+  [  15b4]  __CHAR_BIT__ 8
+  [  15c3]  __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
+  [  15f0]  __DEC32_EPSILON__ 1E-6DF
+  [  1609]  __UINT_LEAST32_TYPE__ unsigned int
+  [  162c]  __DBL_HAS_DENORM__ 1
+  [  1641]  /tmp
+  [  1646]  __LDBL_MANT_DIG__ 64
+  [  165b]  __GCC_ATOMIC_LONG_LOCK_FREE 2
+  [  1679]  __DECIMAL_BID_FORMAT__ 1
+  [  1692]  __FLT_MIN_10_EXP__ (-37)
+  [  16ab]  __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
+  [  16cf]  __WCHAR_TYPE__ int
+  [  16e2]  __FINITE_MATH_ONLY__ 0
+  [  16f9]  argc
+  [  16fe]  __USER_LABEL_PREFIX__ 
+  [  1715]  __CHAR16_TYPE__ short unsigned int
+  [  1738]  __UINT64_MAX__ 18446744073709551615UL
+  [  175e]  __UINT8_C(c) c
+  [  176d]  __x86_64 1
+  [  1778]  __UINT_LEAST8_TYPE__ unsigned char
+  [  179b]  __INT64_TYPE__ long int
+  [  17b3]  __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
+  [  17d8]  argv
+  [  17dd]  __GNUC_RH_RELEASE__ 15
+  [  17f4]  __UINT_FAST16_MAX__ 18446744073709551615UL
+  [  181f]  __FLT_HAS_DENORM__ 1
+  [  1834]  __DEC64_MIN__ 1E-383DD
+  [  184b]  __DBL_MIN_10_EXP__ (-307)
+  [  1865]  __FLT_DENORM_MIN__ 1.40129846432481707092e-45F
+  [  1894]  GNU C 4.8.2 20140120 (Red Hat 4.8.2-15) -mtune=generic -march=x86-64 -g3 -O3 -fuse-ld=gold -fno-asynchronous-unwind-tables
+  [  190f]  __SCHAR_MAX__ 127
+EOF
+
+exit 0
diff --git a/tests/run-readelf-zx.sh b/tests/run-readelf-zx.sh
new file mode 100755
index 0000000..994528c
--- /dev/null
+++ b/tests/run-readelf-zx.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Copyright (C) 2015 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
+
+# See run-elfgetchdr.sh for testfiles.
+
+testfiles testfile-zgnu64
+testrun_compare ${abs_top_builddir}/src/readelf -z -x.zdebug_aranges testfile-zgnu64 <<\EOF
+
+Hex dump of section [2] '.zdebug_aranges', 50 bytes (96 uncompressed) at offset 0x260:
+  0x00000000 2c000000 02000000 00000800 00000000 ,...............
+  0x00000010 78004000 00000000 14000000 00000000 x.(a).............
+  0x00000020 00000000 00000000 00000000 00000000 ................
+  0x00000030 2c000000 02005500 00000800 00000000 ,.....U.........
+  0x00000040 8c004000 00000000 16000000 00000000 ..(a).............
+  0x00000050 00000000 00000000 00000000 00000000 ................
+EOF
+
+testfiles testfile-zgabi64
+testrun_compare ${abs_top_builddir}/src/readelf -z -x.debug_aranges testfile-zgabi64 <<\EOF
+
+Hex dump of section [2] '.debug_aranges', 62 bytes (96 uncompressed) at offset 0x260:
+  0x00000000 2c000000 02000000 00000800 00000000 ,...............
+  0x00000010 78004000 00000000 14000000 00000000 x.(a).............
+  0x00000020 00000000 00000000 00000000 00000000 ................
+  0x00000030 2c000000 02005500 00000800 00000000 ,.....U.........
+  0x00000040 8c004000 00000000 16000000 00000000 ..(a).............
+  0x00000050 00000000 00000000 00000000 00000000 ................
+EOF
+
+testfiles testfile-zgnu32
+testrun_compare ${abs_top_builddir}/src/readelf -z -x.zdebug_aranges testfile-zgnu32 <<\EOF
+
+Hex dump of section [2] '.zdebug_aranges', 49 bytes (64 uncompressed) at offset 0x1c0:
+  0x00000000 1c000000 02000000 00000400 00000000 ................
+  0x00000010 54800408 14000000 00000000 00000000 T...............
+  0x00000020 1c000000 02004d00 00000400 00000000 ......M.........
+  0x00000030 68800408 16000000 00000000 00000000 h...............
+EOF
+
+testfiles testfile-zgabi32
+testrun_compare ${abs_top_builddir}/src/readelf -z -x.debug_aranges testfile-zgabi32 <<\EOF
+
+Hex dump of section [2] '.debug_aranges', 49 bytes (64 uncompressed) at offset 0x1c0:
+  0x00000000 1c000000 02000000 00000400 00000000 ................
+  0x00000010 54800408 14000000 00000000 00000000 T...............
+  0x00000020 1c000000 02004d00 00000400 00000000 ......M.........
+  0x00000030 68800408 16000000 00000000 00000000 h...............
+EOF
+
+exit 0
diff --git a/tests/testfile-debug-rel-g.o.bz2 b/tests/testfile-debug-rel-g.o.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..b8c94e7e0f7b45925204d7832db9e9103b0b61e7
GIT binary patch
literal 1238
zcmV;{1S$JMT4*^jL0KkKStlD=iU0$VfB*mg|L*Sh|NC42_jUjO|NhSZU;cVUJwpA?
zSRp$_q{z?%QQ(a)I3%aa3C^pG+&Hlt5XQ}sO}c|+7aO{4=&9-|QSO%EsxjWhs1RA_oY
zX!L3{Xvj1+pwns^JrF%XriK&EQ$i+)flo=|H9t|Oh)jg_KUBu1)YEA+WHvwu$&<(<
z6CsFV21W>Aj6+AEG{B5ZBN2f#&_qzkG7N~*O)>xg00006fB*rY00Te(000000000%
zrbb3XKrn%(nhb+OLqKRWG-3e40LW-yn1BN&5tB_c28|gsXwcBfrU(fXiA?oI)YC>y
z8Z^)YK+tFnGypVcG8$=+0000000*c50iZMh00HgC%fUDng3_!ol)_OkgVv}$Mm4)2
zq+yEDK4fMM4`IswaD)cL1XQ+t;8t6RCe0S7jorbV9(W?4xjYmQP<?YhHQn2OgZL3l
zQV<3s7VruO2pNJ#FdZnU;t^4Q#xbPUvt1JRl=W+1L%mZx>&b;pkv97I)<UhSAf9D}
zKoFs&#Ks_4X}o4jvn8OTV}u~kT&V7{<yFp2L_wti0hWpaL|KR|i?tF2B?*Fwp(GVd
zNkP)EI1N^{X=tN#tt<T84VyKMDNQRTB?cf(p*A)o+8aQI+ikE(a)tpQBcM2oAqWeVqZ
zY9pkn0nnr%avY7(={dUY7&xzN1R(a)XGA=i>`20gHRO-T`aZKCfG5`o0*SadF#n52oo
zIjpd8IW>Qn=sLD|sjxbdLc4DS1$#uhnnV&7?WBzLKK39sm_A%qUg(a)8B*Auy+qVGyo
zl(a)lxDs<DF6v(a)7!q3CL1kWb4L8n?TZ;Nr?GIfFyO>$Xt97wz?KS^buy#l3XwqnknKm
zDflQA5kUNABzR_9(v*x+v)mqdbO`Fw3oya>G1E;5C2xxzsD1XozZM)tyHWub_+ZnE
z&|Oq8u_QItJ%0-3WaihvVaBE^O@>7~h*Q&8Mo0xtb8fA5;V>eXM47T}rMYAVOBq|b
zouCS6PxFW~`A>wl2!Or}KvD>Sfj}QCm68BR9f&|s82pV#lw!|HmMWWOi$rTpSa1Rx
ztJVb8izV#6;58Ue<;IwZ!--aiAAckXUffVIwsg|!)jFYAB~so}on^+x#%bIwG6L7+
z?Dleh8n<s7O{LlmIRRv~QjH9uS(f(54Se&?_Y~op2(a)f4g4S-omMQ%0kuz~;{dUJsx
zPUtfdA}8u$HfM4{MVVNI*aR_;E&>}ZCtH!JQXm8%D(I3C6^9jB4i_yo;rQo~V|h1k
z)Rk52AP1d>vC+oqNVgVHq!kqcIt1CgwQ<JoLlBGztUAep3)?$R!2japg%L@@Q>cq;
zB!U#FP&I~bDo$DffucqL_H+(a)F4M!P?EcyZjsD-1QJ_QM#Fv?<9xM)ucuwp)Wa$x`(
zp_J9+uxW223OmY;nt;<DidrTx1KBCgA)?e>(cCtz1kT#I3udloDrq)0m60G|DPV<j
zb<cg5kn+<nDUUOUpUS|w1f9h)U(&vw^=!(o+R<4>cj(a)otL!&$9NwR7bS+o(3#K^Aq
zo;n6gobmFpAe$YY`Z$?i<}Gx$6tH>v2y5imv5hXL0l#I(a)X8*<9kxmpO3C7l9fJQSN
Au>b%7

literal 0
HcmV?d00001

diff --git a/tests/testfile-debug-rel-z.o.bz2 b/tests/testfile-debug-rel-z.o.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..1cdac790e0baa3cc9ba6e4d00b4b1cd7d8001aa6
GIT binary patch
literal 1225
zcmV;)1UCCZT4*^jL0KkKS*B;@X#fMNfB*mg|L*Sh|NG0|_ig|G|NhVY+y1r%JwkoX
z7y&y)q{z?%SGoXnyLOidsg!8+(t4VD2-8ePhJerw01SXM8UO*IpwIvS00HU-hJf^d
zG|&wmpotSrCN!Be#4=<WG}A_dKr#bBXfy*r0004?G#UU6001;-02%;@fSQ=p%|ihX
zPyhe`000dD0000000000000010ilp-lT8B&pfoheqf7|M$)Lz&$TBp@(WXJ8KnxM4
zgAmXF$)S(a)08Vwo*i7BMo3VNQAHmBuA^-VoP)b&3?jUJ(sMt}oP6lnD}hNIL0>I{vj
z(|V)I4(a)eCS4X6y78U}+wnx3Fx1&W2thyx~#86bhn76HJ9lWn3&1+VDVzA1nxDBboF
zzeT|5PqKn312V7CZxelId3hIOb0Ckx7q50Y381xx(a)Fp<XhlCM&8a<AZYrJUrswJo}
z0e~Pde*uYsOr(;aVFF+jBEN_rm-CtqSqSL}b66_P-R-<=o%grI?t6U=91Xixg2OyH
z07drB<pBv|(#_8KXQFG^;vt~tHTw$FOdb7Lkqsyk3~4}uSrEHNP;-RBfKq5kM|i|2
zcNiJ%Zkklt(_DnG=|ShS%xO&0`&g7Q2{we-*nzY*2(a)Q?5*cI9XV%5JxKSKt_B(i$K
z?yYVrm#kNryLncppTUBa+98C^g9;P+ovwG;n17s$XwrO&m2V6t+At&(LCN_HICuFH
zo=yYcXNctI-ty>aetMmGNDXZ9yY*oK;Ivlfk|89qnnLt=JrscS(a)pw|@{xH3+E>`1n
zYR%&Ew!bD_3~b0%8UqD~g;p)lz(a)L9HGHnA(<7KzA<w5|a&DMN;+<3ir%zyL;C4}{&
z&Q4u|f)=(E9fY9fb1O*H;%lCbKH2yf@{v?#rGyJKkbCZYMG{ExLSXkRHVKy$P*X5T
zr-%XxS`5>MzzO7Wp?F5*6kOwRxifqr#qO-T8(vpCO6U83WZPB?<x|UAtf2ZrRjnqs
ziH)Vdb)F;;XIJKd>o{aHQy0#zQZzl&Tuxo48hG}og%V3f91usLWjdGTvKxF+-*C>R
z0#b?rFX+MOhNV{w9ZA{I7C09r9NhV6nm2JNyA+w=NK=fZUP256VI;k{kky$SDf`bB
zHg&n_P*gAlO7u`?%Z`2IJbuhJT5?=>`X1q4gtccrRjFNXUS`K+f$+7ETg$<AHB{*7
z%c#uqJW&d34s{T~NX(a)FrTNsF%h+rTMU?GuMguNj|8X|_=x4{F;6Qk<6HH0+~12deY
zCoHxRFvnXeBy<8$2(a)k|wtT$kALOLS=!5|_jE6VzU{@DR=*P?kRC2TOV;FYUq8%mwU
ztjW?05E0-H#DV4lb>x_s)P)IQZ6ji6B@<GCrD$CuGl~}|#A#B>1OS6N<SER%MZ~p$
z3{Ot*VHk-atElQBMrKvHc>o*q(_xm<7jQ!iCG2Bn2}`1ddgNrJd2`Ig%bM;1kbEl#
z!2p653NPl0HqS0D+oM`x)Qi+VW2z+6Q4bg|uQ}%fyDqh6u=%z6<2Z76xI&syPmjKl
n#-FA!tBK1*rIZS!rcANvPqz=OHc0}1e~Y;yoG3_BGxD^6o#83v

literal 0
HcmV?d00001

diff --git a/tests/testfile-debug-rel.o.bz2 b/tests/testfile-debug-rel.o.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..a3f8dffa65792a829407c74ff29c5842485e0bde
GIT binary patch
literal 1069
zcmV+|1k(FLT4*^jL0KkKS<clVasUI-fB*mg|Lo(a)X|NGnRmudh1-}uj~$(NKt06+-9
z2m$~AsMyd0LExZLn8Q;bgvBr>q2(a)_8ri`1_JxvVMG-v>1Xfz(7ka~bUOc2w`Jg2Di
z)X)r`p$ShWl=VEOGHQCBnHrB!00E#4000000000005kxD35k;dFeWCAF&F?Q0UBgz
zz)dn>6C(fs0T?EX1R%m<WWY=biK9$L011FbnHn$?Oqc}7zyJV738Mi5M2MO+BPw|(
zsp3O=nrJmWOoyPDn3@?h^k^Y~2pJlBMuwP1&;n+OiAtET(-EM?Wal&+3R$JaDJeB1
zQ-=PVQ>am0WQfBz7S!q()P6agi5O4h5PLdK<pKz+dK=Rr4$*t{Dp6v_8Pbab7X`5q
z2FfXw@~*#f#5F2Un5WGU6tguJ2qZ@(Dna60ro=`k2#8)Jryc39&f+}-aE-9?=-SKB
ztJ=HJ=h(9d>XH#^;$Q*-6<7cp<j>?%ph#X1kN3;B)3sp0#}Nz{yMtMFjxD_^r{01l
z(u5$;lnD~zKyV$w))W}bBnoXIQqmPn0YgSxGg=5}S6V1wkW$cg+E&@oVVKgg>1fgF
z!a9r!T1ae5o-{4c(3F}<wArG-A)U5(a)7$cTr!VxB$ZLnU;5N(;4bL8ec%!K!BixUx^
z(a)R~sl8M(a)t)3a+_CibOX<0h#tcS1O3Xj!4RFqbfj94o~l4-^syD?9IYi%@KI}xe?Ey
zdMS%0oVXLyqoHnKN%K1pu~^21cVBBZXwIVYMX8|8XvS$KVnC9c^6A1-b-xS5PIw`A
zB7bMm#?rM#NVOW<^A(0_*qbP5ccERDJc38tX16)LQ$!}vG_hJn;K+o#Ep}0Gfyf{g
zrnDO5(a)1nMPsOwB7VKEg;KgVv2I%y?d79(a)dRp+O=~y&<Yu6f^mcZ+($wwV=Tx8Uvn6
z7>91(Sft62+(a)pRQV~v(a)Wsp14&!NS)=R2`coBD$aWRj~A5$g39!?$#Goto3rnkat3M
z{AsQ#V`*kG!e!gw{$mZD`pvP{FO-yr>#oJ1C^$AMHP~A%Mq2g^JIJv&HvK|@%SnKq
z3%|K;?0hv`8uO_>;JZ%^Ky*lMHa`a)5|<6Q<4|7y)Kj6221~VLFv(#~vt_Ubw4apa
zl}=Vn^E)eI9NZez52JbwP1@?6btuP7S2@?!_`^Z?5lytN)i|)G!b(a)YgR>T1Og(a)9LU
zmL{f~XL;@{gAd`)I+}tnMByzA7fqKLjDkYTN);5FIgli}>#9bdK1}2XqM!q%1r8EV
z5J>2lS3(I75P=>oND(*;Pmv=GVhSdsBk=%M6cwT#6Q)eYU|K7RhskDulZ;wT>?1H$
nqKWlv^6#}&Z(a)Sg(m8_2VZDp;m^D<&9-|=@OQ-ui(?NS#Y^HJj5

literal 0
HcmV?d00001

-- 
2.5.0

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]