[PATCH] readelf: Decode DW_AT_discr_list block attributes.

Mark Wielaard mark@klomp.org
Fri May 10 16:14:00 GMT 2019


Decode DW_AT_descr_list blocks using the DW_DSC values.
This requires knowing the signedness of the discriminant.
Which means the attr_callback function needs access to the
parent DIE. Pass the whole DIE path, plus the current level.
That way the type of the discriminant can be looked up in
the variant_part (parent) DIE of the variant DIE (which has
the discr_list attribute).

Add a testcase using both signed and unsigned discriminants.

https://sourceware.org/bugzilla/show_bug.cgi?id=24509

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 src/ChangeLog                 |   7 +
 src/readelf.c                 | 103 ++++++++++++-
 tests/ChangeLog               |   9 ++
 tests/Makefile.am             |   7 +-
 tests/run-readelf-discr.sh    | 337 ++++++++++++++++++++++++++++++++++++++++++
 tests/testfile-rng.debug.bz2  | Bin 0 -> 1286 bytes
 tests/testfile-urng.debug.bz2 | Bin 0 -> 1178 bytes
 7 files changed, 453 insertions(+), 10 deletions(-)
 create mode 100755 tests/run-readelf-discr.sh
 create mode 100644 tests/testfile-rng.debug.bz2
 create mode 100644 tests/testfile-urng.debug.bz2

diff --git a/src/ChangeLog b/src/ChangeLog
index ae13793..15ef415 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2019-05-10  Mark Wielaard  <mark@klomp.org>
+
+	* readelf.c (struct attrcb_args): Rename die to dies.
+	(attr_callback): Get current current die using dies[level].
+	Handle DW_AT_discr_list as block, not as constant.
+	(print_debug_units): pass dies, not dies[level] as args.
+
 2019-04-28  Mark Wielaard  <mark@klomp.org>
 
 	* unstrip.c (add_new_section_symbols): Call ELF_CHECK after
diff --git a/src/readelf.c b/src/readelf.c
index c346e1f..7efdfa2 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -6930,7 +6930,7 @@ struct attrcb_args
 {
   Dwfl_Module *dwflmod;
   Dwarf *dbg;
-  Dwarf_Die *die;
+  Dwarf_Die *dies;
   int level;
   bool silent;
   bool is_split;
@@ -6946,7 +6946,7 @@ attr_callback (Dwarf_Attribute *attrp, void *arg)
 {
   struct attrcb_args *cbargs = (struct attrcb_args *) arg;
   const int level = cbargs->level;
-  Dwarf_Die *die = cbargs->die;
+  Dwarf_Die *die = &cbargs->dies[level];
   bool is_split = cbargs->is_split;
 
   unsigned int attr = dwarf_whatattr (attrp);
@@ -7290,9 +7290,6 @@ attr_callback (Dwarf_Attribute *attrp, void *arg)
 	case DW_AT_ordering:
 	  valuestr = dwarf_ordering_name (num);
 	  break;
-	case DW_AT_discr_list:
-	  valuestr = dwarf_discr_list_name (num);
-	  break;
 	case DW_AT_decl_file:
 	case DW_AT_call_file:
 	  {
@@ -7347,7 +7344,7 @@ attr_callback (Dwarf_Attribute *attrp, void *arg)
       /* When highpc is in constant form it is relative to lowpc.
 	 In that case also show the address.  */
       Dwarf_Addr highpc;
-      if (attr == DW_AT_high_pc && dwarf_highpc (cbargs->die, &highpc) == 0)
+      if (attr == DW_AT_high_pc && dwarf_highpc (die, &highpc) == 0)
 	{
 	  printf ("           %*s%-20s (%s) %" PRIuMAX " (",
 		  (int) (level * 2), "", dwarf_attr_name (attr),
@@ -7369,7 +7366,7 @@ attr_callback (Dwarf_Attribute *attrp, void *arg)
 	      bool is_signed;
 	      int bytes = 0;
 	      if (attr == DW_AT_const_value)
-		die_type_sign_bytes (cbargs->die, &is_signed, &bytes);
+		die_type_sign_bytes (die, &is_signed, &bytes);
 	      else
 		is_signed = (form == DW_FORM_sdata
 			     || form == DW_FORM_implicit_const);
@@ -7524,6 +7521,96 @@ attr_callback (Dwarf_Attribute *attrp, void *arg)
 	  else
 	    print_block (block.length, block.data);
 	  break;
+
+	case DW_AT_discr_list:
+	  if (block.length == 0)
+	    puts ("<default>");
+	  else if (form != DW_FORM_data16)
+	    {
+	      const unsigned char *readp = block.data;
+	      const unsigned char *readendp = readp + block.length;
+
+	      /* See if we are dealing with a signed or unsigned
+		 values.  If the parent of this variant DIE is a
+		 variant_part then it will either have a discriminant
+		 which points to the member which type is the
+		 discriminant type.  Or the variant_part itself has a
+		 type representing the discriminant.  */
+	      bool is_signed = false;
+	      if (level > 0)
+		{
+		  Dwarf_Die *parent = &cbargs->dies[level - 1];
+		  if (dwarf_tag (die) == DW_TAG_variant
+		      && dwarf_tag (parent) == DW_TAG_variant_part)
+		    {
+		      Dwarf_Die member;
+		      Dwarf_Attribute discr_attr;
+		      int bytes;
+		      if (dwarf_formref_die (dwarf_attr (parent,
+							 DW_AT_discr,
+							 &discr_attr),
+					     &member) != NULL)
+			die_type_sign_bytes (&member, &is_signed, &bytes);
+		      else
+			die_type_sign_bytes (parent, &is_signed, &bytes);
+		    }
+		}
+	      while (readp < readendp)
+		{
+		  int d = (int) *readp++;
+		  printf ("%s ", dwarf_discr_list_name (d));
+		  if (readp >= readendp)
+		    goto attrval_out;
+
+		  Dwarf_Word val;
+		  Dwarf_Sword sval;
+		  if (d == DW_DSC_label)
+		    {
+		      if (is_signed)
+			{
+			  get_sleb128 (sval, readp, readendp);
+			  printf ("%" PRId64 "", sval);
+			}
+		      else
+			{
+			  get_uleb128 (val, readp, readendp);
+			  printf ("%" PRIu64 "", val);
+			}
+		    }
+		  else if (d == DW_DSC_range)
+		    {
+		      if (is_signed)
+			{
+			  get_sleb128 (sval, readp, readendp);
+			  printf ("%" PRId64 "..", sval);
+			  if (readp >= readendp)
+			    goto attrval_out;
+			  get_sleb128 (sval, readp, readendp);
+			  printf ("%" PRId64 "", sval);
+			}
+		      else
+			{
+			  get_uleb128 (val, readp, readendp);
+			  printf ("%" PRIu64 "..", val);
+			  if (readp >= readendp)
+			    goto attrval_out;
+			  get_uleb128 (val, readp, readendp);
+			  printf ("%" PRIu64 "", val);
+			}
+		    }
+		  else
+		    {
+		      print_block (readendp - readp, readp);
+		      break;
+		    }
+		  if (readp < readendp)
+		    printf (", ");
+		}
+	      putchar ('\n');
+	    }
+	  else
+	    print_block (block.length, block.data);
+	  break;
 	}
       break;
 
@@ -7724,7 +7811,7 @@ print_debug_units (Dwfl_Module *dwflmod,
 
       /* Print the attribute values.  */
       args.level = level;
-      args.die = &dies[level];
+      args.dies = dies;
       (void) dwarf_getattrs (&dies[level], attr_callback, &args, 0);
 
       /* Make room for the next level's DIE.  */
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 49392f1..15ac64f 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,12 @@
+2019-05-10  Mark Wielaard  <mark@klomp.org>
+
+	* Makefile.am (TESTS): Add run-readelf-discr.sh.
+	(EXTRA_DIST): Likewise and add testfile-rng.debug.bz2 and
+	testfile-urng.debug.bz2.
+	* run-readelf-discr.sh: New test.
+	* testfile-rng.debug.bz2: New test file.
+	* testfile-urng.debug.bz2: Likewise.
+
 2019-04-30  Mark Wielaard  <mark@klomp.org>
 
 	* xlate_notes.c: New file.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 498c1db..80900e4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -159,7 +159,8 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \
 	run-next-cfi.sh run-next-cfi-self.sh \
 	run-copyadd-sections.sh run-copymany-sections.sh \
 	run-typeiter-many.sh run-strip-test-many.sh \
-	run-strip-version.sh run-xlate-note.sh
+	run-strip-version.sh run-xlate-note.sh \
+	run-readelf-discr.sh
 
 if !BIARCH
 export ELFUTILS_DISABLE_BIARCH = 1
@@ -424,7 +425,9 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \
 	     testfile-debug-rel-ppc64-z.o.bz2 \
 	     testfile-debug-rel-ppc64.o.bz2 \
 	     run-strip-version.sh testfile-version.bz2 \
-	     run-xlate-note.sh
+	     run-xlate-note.sh \
+	     run-readelf-discr.sh \
+	     testfile-rng.debug.bz2 testfile-urng.debug.bz2
 
 if USE_VALGRIND
 valgrind_cmd='valgrind -q --leak-check=full --error-exitcode=1'
diff --git a/tests/run-readelf-discr.sh b/tests/run-readelf-discr.sh
new file mode 100755
index 0000000..dc84d82
--- /dev/null
+++ b/tests/run-readelf-discr.sh
@@ -0,0 +1,337 @@
+#! /bin/sh
+# Copyright (C) 2019 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
+
+# = rng.ads =
+# package Rng is
+# 
+#    type Rec (I : Integer) is record
+#       case I is
+#  when Positive =>
+#     case I is
+#        when 1..15 | 17 | 23 =>
+#   null;
+#        when others =>
+#   J : Integer;
+#     end case;
+#  when -52..-1 =>
+#     Q: Integer;
+#  when -64 =>
+#     R: Boolean;
+#  when others =>
+#     null;
+#       end case;
+#    end record;
+# 
+#    R : Rec (1);
+# 
+# end Rng;
+
+# = urng.ads =
+#
+# package Urng is
+# 
+#    type Unsigned is mod 65536;
+#    type Rec (U : Unsigned) is record
+#       case U is
+#  when 17 | 23 | 32768..65535 =>
+#     null;
+#  when 256 => 
+#     B: Boolean;
+#  when others =>
+#     I : Integer;
+#       end case;
+#    end record;
+# 
+#    R : Rec (1);
+# 
+# end Urng;
+
+# gcc -c -g -fgnat-encodings=minimal -gstrict-dwarf rng.ads
+# eu-strip -g -f rng.debug rng.o 
+# gcc -c -g -fgnat-encodings=minimal -gstrict-dwarf urng.ads
+# eu-strip -g -f urng.debug urng.o 
+
+testfiles testfile-rng.debug testfile-urng.debug
+
+testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=info testfile-rng.debug testfile-urng.debug <<EOF
+
+testfile-rng.debug:
+
+
+DWARF section [ 5] '.debug_info' at offset 0x40:
+ [Offset]
+ Compilation unit at offset 0:
+ Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4
+ [     b]  compile_unit         abbrev: 1
+           producer             (strp) "GNU Ada 9.1.1 20190503 (Red Hat 9.1.1-1) -g -fgnat-encodings=minimal -gstrict-dwarf -mtune=generic -march=x86-64"
+           language             (data1) Ada95 (13)
+           name                 (strp) "rng.ads"
+           comp_dir             (strp) "/home/mark"
+           low_pc               (addr) 000000000000000000
+           high_pc              (data8) 2016 (0x00000000000007e0)
+           stmt_list            (sec_offset) 0
+ [    2d]    structure_type       abbrev: 2
+             name                 (strp) "rng__rec"
+             byte_size            (exprloc) 
+              [ 0] push_object_address
+              [ 1] deref_size 4
+              [ 3] call4 [    c6]
+              [ 8] plus_uconst 7
+              [10] const1s -4
+              [12] and
+             decl_file            (data1) rng.ads (1)
+             decl_line            (data1) 3
+             decl_column          (data1) 9
+             sibling              (ref4) [    ab]
+ [    47]      member               abbrev: 3
+               name                 (string) "i"
+               decl_file            (data1) rng.ads (1)
+               decl_line            (data1) 3
+               decl_column          (data1) 14
+               type                 (ref4) [    fe]
+               data_member_location (data1) 0
+ [    52]      variant_part         abbrev: 4
+               discr                (ref4) [    47]
+ [    57]        variant              abbrev: 5
+                 discr_list           (block1) range 1..2147483647
+                 sibling              (ref4) [    81]
+ [    64]          variant_part         abbrev: 4
+                   discr                (ref4) [    47]
+ [    69]            variant              abbrev: 6
+                     discr_list           (block1) range 1..15, label 17, label 23
+ [    72]            variant              abbrev: 7
+ [    73]              member               abbrev: 3
+                       name                 (string) "j"
+                       decl_file            (data1) rng.ads (1)
+                       decl_line            (data1) 10
+                       decl_column          (data1) 19
+                       type                 (ref4) [    fe]
+                       data_member_location (data1) 4
+ [    81]        variant              abbrev: 5
+                 discr_list           (block1) range -52..-1
+                 sibling              (ref4) [    96]
+ [    8a]          member               abbrev: 3
+                   name                 (string) "q"
+                   decl_file            (data1) rng.ads (1)
+                   decl_line            (data1) 13
+                   decl_column          (data1) 13
+                   type                 (ref4) [    fe]
+                   data_member_location (data1) 4
+ [    96]        variant              abbrev: 8
+                 discr_value          (sdata) -64
+                 sibling              (ref4) [    a8]
+ [    9c]          member               abbrev: 3
+                   name                 (string) "r"
+                   decl_file            (data1) rng.ads (1)
+                   decl_line            (data1) 15
+                   decl_column          (data1) 13
+                   type                 (ref4) [   105]
+                   data_member_location (data1) 4
+ [    a8]        variant              abbrev: 9
+ [    ab]    dwarf_procedure      abbrev: 10
+             location             (exprloc) 
+              [ 0] dup
+              [ 1] lit0
+              [ 2] gt
+              [ 3] over
+              [ 4] lit15
+              [ 5] le
+              [ 6] and
+              [ 7] over
+              [ 8] lit17
+              [ 9] eq
+              [10] or
+              [11] over
+              [12] lit23
+              [13] eq
+              [14] or
+              [15] bra 22
+              [18] lit4
+              [19] skip 23
+              [22] lit0
+              [23] swap
+              [24] drop
+ [    c6]    dwarf_procedure      abbrev: 10
+             location             (exprloc) 
+              [ 0] dup
+              [ 1] lit0
+              [ 2] gt
+              [ 3] bra 36
+              [ 6] dup
+              [ 7] const1s -52
+              [ 9] lt
+              [10] over
+              [11] lit0
+              [12] ge
+              [13] or
+              [14] bra 21
+              [17] lit4
+              [18] skip 33
+              [21] dup
+              [22] const1s -64
+              [24] eq
+              [25] bra 32
+              [28] lit0
+              [29] skip 33
+              [32] lit4
+              [33] skip 52
+              [36] dup
+              [37] call4 [    ab]
+              [42] plus_uconst 3
+              [44] const1s -4
+              [46] and
+              [47] plus_uconst 3
+              [49] const1s -4
+              [51] and
+              [52] swap
+              [53] drop
+ [    fe]    base_type            abbrev: 11
+             byte_size            (data1) 4
+             encoding             (data1) signed (5)
+             name                 (strp) "integer"
+             artificial           (flag_present) yes
+ [   105]    base_type            abbrev: 12
+             byte_size            (data1) 1
+             encoding             (data1) boolean (2)
+             name                 (strp) "boolean"
+ [   10c]    variable             abbrev: 13
+             name                 (strp) "rng__r"
+             decl_file            (data1) rng.ads (1)
+             decl_line            (data1) 21
+             decl_column          (data1) 4
+             type                 (ref4) [    2d]
+             external             (flag_present) yes
+             location             (exprloc) 
+              [ 0] addr 0x7e4
+ [   122]    subprogram           abbrev: 14
+             external             (flag_present) yes
+             name                 (strp) "rng___elabs"
+             artificial           (flag_present) yes
+             low_pc               (addr) 0x0000000000000734
+             high_pc              (data8) 22 (0x000000000000074a)
+             frame_base           (exprloc) 
+              [ 0] call_frame_cfa
+
+testfile-urng.debug:
+
+
+DWARF section [ 5] '.debug_info' at offset 0x40:
+ [Offset]
+ Compilation unit at offset 0:
+ Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4
+ [     b]  compile_unit         abbrev: 1
+           producer             (strp) "GNU Ada 9.1.1 20190503 (Red Hat 9.1.1-1) -g -fgnat-encodings=minimal -gstrict-dwarf -mtune=generic -march=x86-64"
+           language             (data1) Ada95 (13)
+           name                 (strp) "urng.ads"
+           comp_dir             (strp) "/home/mark"
+           low_pc               (addr) 000000000000000000
+           high_pc              (data8) 977 (0x00000000000003d1)
+           stmt_list            (sec_offset) 0
+ [    2d]    base_type            abbrev: 2
+             byte_size            (data1) 2
+             encoding             (data1) unsigned (7)
+             name                 (strp) "urng__unsigned"
+ [    34]    structure_type       abbrev: 3
+             name                 (strp) "urng__rec"
+             byte_size            (exprloc) 
+              [ 0] push_object_address
+              [ 1] deref_size 2
+              [ 3] call4 [    8d]
+              [ 8] plus_uconst 7
+              [10] const1s -4
+              [12] and
+             decl_file            (data1) urng.ads (1)
+             decl_line            (data1) 4
+             decl_column          (data1) 9
+             sibling              (ref4) [    8d]
+ [    4e]      member               abbrev: 4
+               name                 (string) "u"
+               decl_file            (data1) urng.ads (1)
+               decl_line            (data1) 4
+               decl_column          (data1) 14
+               type                 (ref4) [    2d]
+               data_member_location (data1) 0
+ [    59]      variant_part         abbrev: 5
+               discr                (ref4) [    4e]
+ [    5e]        variant              abbrev: 6
+                 discr_list           (block1) label 17, label 23, range 32768..65535
+ [    6b]        variant              abbrev: 7
+                 discr_value          (udata) 256
+                 sibling              (ref4) [    7e]
+ [    72]          member               abbrev: 4
+                   name                 (string) "b"
+                   decl_file            (data1) urng.ads (1)
+                   decl_line            (data1) 9
+                   decl_column          (data1) 13
+                   type                 (ref4) [    a4]
+                   data_member_location (data1) 4
+ [    7e]        variant              abbrev: 8
+ [    7f]          member               abbrev: 4
+                   name                 (string) "i"
+                   decl_file            (data1) urng.ads (1)
+                   decl_line            (data1) 11
+                   decl_column          (data1) 13
+                   type                 (ref4) [    ab]
+                   data_member_location (data1) 4
+ [    8d]    dwarf_procedure      abbrev: 9
+             location             (exprloc) 
+              [ 0] dup
+              [ 1] lit17
+              [ 2] ne
+              [ 3] over
+              [ 4] lit23
+              [ 5] ne
+              [ 6] and
+              [ 7] over
+              [ 8] lit0
+              [ 9] ge
+              [10] and
+              [11] bra 18
+              [14] lit0
+              [15] skip 19
+              [18] lit4
+              [19] swap
+              [20] drop
+ [    a4]    base_type            abbrev: 2
+             byte_size            (data1) 1
+             encoding             (data1) boolean (2)
+             name                 (strp) "boolean"
+ [    ab]    base_type            abbrev: 10
+             byte_size            (data1) 4
+             encoding             (data1) signed (5)
+             name                 (strp) "integer"
+             artificial           (flag_present) yes
+ [    b2]    variable             abbrev: 11
+             name                 (strp) "urng__r"
+             decl_file            (data1) urng.ads (1)
+             decl_line            (data1) 15
+             decl_column          (data1) 4
+             type                 (ref4) [    34]
+             external             (flag_present) yes
+             location             (exprloc) 
+              [ 0] addr 0x3d8
+ [    c8]    subprogram           abbrev: 12
+             external             (flag_present) yes
+             name                 (strp) "urng___elabs"
+             artificial           (flag_present) yes
+             low_pc               (addr) 0x0000000000000386
+             high_pc              (data8) 22 (0x000000000000039c)
+             frame_base           (exprloc) 
+              [ 0] call_frame_cfa
+EOF
diff --git a/tests/testfile-rng.debug.bz2 b/tests/testfile-rng.debug.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..58c1b76b8bbfe319c2f4016faf5cd1f63e80e118
GIT binary patch
literal 1286
zcmV+h1^N0yT4*^jL0KkKS<Bi9EC2+IfB*mg|NU?O|9|)O`rQBjzwqH8MWqNxKtMqR
zKtMqNAPvw2I<HVoftOuaxM(EEfE4tPQ`9urrkZ*Yr<C;ujL|VXrqF;i4^T8@(8S0O
zQ1p!rG;Ih(Xes(rVNYpKNuV?U003wJ01X2`00003KmZz=GA2kSHB4ze6ClvjXv#8R
zk5eXq0MIcEOo4>N(9i<}$)N^J0GI^C$&&yAU`zzW!7u;-00LxSCIm2m5+q5fnq?Ez
z6MCnF+NY4v&_>cd2AYAUBhZW^X{n$GsL*MnO`}3GWb_hV`;iE}i;2~cMoI{@5DPXi
zqcR|bz=D*Nsg)?l)_Woh3AkKYu`#Q2A#KD3(8Iyk?mDIo*C(fGtbwcFIlN1=b>!*j
z#d#;ml1sRRR|U#!PA}cQy`Sf|`i{DU7~)ya3CS=PCN0i6F33G;1BlEu`-;pdPfMpq
ze-`!Ln)Z7dbiMNGnF{j6qb`m&X`m52CvHdu;(56+Ee%~RysM#WyNtf{-HskZ1An+J
z<kM*H?PpA}8s9r=Ju`;XD(V10L;~fZ0Vv?Mga>Z><3B@BRl|bnGW?OFL5nUR>B*ZM
zB||{EO(7i?k_j|6tuzu~*tX0_o0Asxi5D6{w`k6CViCw-ufMIV_M~DsaLTyT;kEqt
zd(r`8v<3zhFj!1S9i)PDgeJtBL7>n>5q!G=CIZtKkqr%lZKSvj0m<U@dcNff>$$ao
zcCTye`_bRBKDXrpn1^(M4FYkfBRob4^$xWe6$U!}KJC)=URn4<0!<{+%|+wr`s(vX
zAUlEW^gYioDZB~AdU`6bAm!Mdl#KQnq7gOmF@;~_SyiyNFwy{t)WqrbDQP*R$${#}
zW!}|l1|2F}6d$`tsiAq8c=i0XOj-LQZqkxgG_Pe4g2^(uNu$+ZEG8o_VSH}n_Lm}T
zUy@}Lk6DM7s4=U6eb`uEw?pExgm8*;W7PV5)|+`(Wpex(tqq{dc$rWlF!s_R?BW5^
zMl6UMYjid<T1}Wt%wTYuUB{(25W}Fwth1IGAf#y(zg>!&&(GnVjb6bPk4C1nropO4
zg6q2ON`lR-DixdSazR4^21`CAn8>0_kL);4c<kZqMv&NolvQ0v=&(L!(*lACYf}P@
zShRj&?epU1frhL(k;O<%t6J9GkLIU)yRoerL?Lcv+rq?|&xSudP|1ZOA6B*XMpb4k
zZnM1=aBrAszlnm;?3$PrVUU|>9%bfAj6xS*L<<%v-i=m4VmqXLFLS>MM1|lWwvwu`
z4xv(AGQH2*!q7sH-K}cUoqNn(O^MnaY{$=;?XqaMvYu6rvfi<JUPFi$_B`_KU?75T
z4iAoSgidaqK~zYwFh3Q%`Jn%T5$_8b)eJ->1_g$Y%xED7j{a2e^fXZlm?HY^>h4{s
zdEecua;_*|>_K)=R<Q+3H=<E*2*SP2Ravi|wa~6mmZg7N1}I1$z=1%K#4>6S3PBN$
zAsM8wNNM!q)k6b<t}x?JRXWbFB8Aj_mQ_&gm$gG6>$+0NhyWO%@?}FunJg!q2iJ5L
zU<x9@g2@>|m=Q@VPysMMD6;7R9XU{R+b~zQ%Y+037zj~hfD=Rk2HS3m(bO$Ch8D`U
w27BpKk69hjv#4e<v9y@*#u6}r9DT`+@0=8|abw*16L*E&kxmpOGWLQ?0E^vR3jhEB

literal 0
HcmV?d00001

diff --git a/tests/testfile-urng.debug.bz2 b/tests/testfile-urng.debug.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..4697f364c22c587a00975fa85cbdf264d59f5adc
GIT binary patch
literal 1178
zcmV;L1ZDd|T4*^jL0KkKSr>o~^#BAo|NsC0|NPJQ|9kiS`Y^xm-{HY(M&$&_NB~G;
zAS6KmU`)^h+NXkc4(^@ZP-!$1Ns4++PgC@x)b%_XiI6s<YI-4%XblF9JwO=%+6a1@
z8Icc2Z9_vqgcDOkOwf%?5E=jhpa1{>0000000000YGE}Ps(zDG)6|}c?NiDC9-uuy
zXlMWifB*mh13&}P01XgniGWN2Fh-hS089Xy8W@-W000DG7zAmFkiZfokf(@hF+8Rw
zjWo~z(drLS02&5?p^yMH&>8?9paV^)B|eSww8hm}LuAYdDFE_G8mb}&c&eJdnrrsx
z56cU;_HjOyZc@LYmazV=MG#pksVlEpO6Ww@3Bn#_RlVm#aiOOf#+(h|T$@N*T}@S?
z5%as&{9N|q<kpj5rV$#Y0IVnxMrB34ftWLR4!G2({AY(TkyeVd4e9zbDA?^`S(ki*
z88XDA6sqe4K|=Y|f&^Pva=dx>UvOHuau7oD1M?v$0B>hILB<cA+VNt+^6c!xBAyhb
zL4gPnizpG|@Inl1d^%Y(s?&kqz2w!Lr#ghggAAD|%n{FG1$@MVbil@FhKdYGhNrYD
zO##km2x$o1F)FMvE5ed)->qV7HoSG<17^e;CKQ@Q28DRR1k*q!()+Zbpc?|SS1l4?
zE|}6pG}>*nDy#z{{s&MmT3}MQt#2Il^F^tI>QE&-bI=bk$Qm3&F?AL-q2!^0-hPL{
zZ#slv$>AmKyh-AKTd4(tV3b0^n#@ecJtHy-qGm<NW*wLmAc5sUYX|Ec6sx-feD++V
z;EHF)0pn!2Y?MKQ2xhTwnfPH3>}FW0Uf-oZ_jN}!XnA+0J4#_04JB6jmvX>hgEJ{X
z4H%5N(9w|aV^qp4nUh7C1q{nsGbMp)7p<Dso71o;x^lZDB27uQLoOX=aHkM44J#}#
zbr1)=@%3&3o5g8aR#ieloEk;NNJR*Rg+2<0_oHT17)~<oAq6((DBePuTVYU=3CvI}
z8JQbGY>>MR;~>k=o{{lxw87*CIg04kp<~V#8C9>w#U=`9roLB3=C4=tq1>-$E(x`#
z&Qd7#CqJgid#9J-ggQbN>Dkw4s50S;pa%qmAb=4iJ1wLR8KlSPdjdB(1#c(>jBjXB
z((!nJW?H4x#)XQ;{h3J<Y;i9ZPl>s`goOv+O;rKXNd@3g85XZ*elUY}w$tl;Z<cY$
zk{pTg>fms1%s}2;mmtc8nt}h-M;P)!gaQn|f)a0ULcZ3*Ax?rTEZ**!&y}ZZDwf8;
zT=-zNwilIwLc#B{!rF&;=5_1{STn({;X{IbnkwN)g_xA&`HAX+6o4bdA#9Ucwp2>d
zO*-6<B^7`(#}ecCt14J8gkdVvNkWewpY@-I7+FM09Opd7BRw$d%Q$xMu`N;~3IaG#
z;W|BzhX|A$f}ueG%BvZtsxW}6bonF(!NuD`rT{!hj0iNqLj#Zsh&q~cCnwyM?&h{G
ssqA|{R1`1yI4G$IBjEEiDJmLoN<}d>=&D7sy9@spaz!{$kQaas^(wUubN~PV

literal 0
HcmV?d00001

-- 
1.8.3.1



More information about the Elfutils-devel mailing list