PATCH: PR binutils/18209: objdump -h is not very helpful printing decompressed section names

H.J. Lu hjl.tools@gmail.com
Sun Apr 19 14:13:00 GMT 2015


Change compressed input debug section name for objdump is very
confusing.  But we need to change it for linker so that linker will
consider th section as a debug section.  This patch delays section
rename to elf_fake_sections for objcopy and avoids it for objdump.

OK for master?

Thanks.

H.J.
---
bfd/

	PR binutils/18209
	* bfd.c (bfd): Add is_linker_input.
	* elf.c (convert_debug_to_zdebug): New.
	(convert_zdebug_to_debug): Likewise.
	(_bfd_elf_make_section_from_shdr): Don't convert .debug_* to
	.zdebug_* here.  Use convert_zdebug_to_debug.  Set SEC_ELF_RENAME.
	(_bfd_elf_init_reloc_shdr): Pass a pointer to section name
	instead of a pointer to section.
	(elf_fake_sections): Rename the section name if SEC_ELF_RENAME
	is set.
	* section.c (SEC_ELF_RENAME): New.
	* bfd-in2.h: Regenerated.

binutils/

	PR binutils/18209
	* objcopy.c (setup_section): Copy compress status.

binutils/testsuite/

	PR binutils/18209
	* binutils-all/compress.exp: Replace dw2-3.W with dw2-3gabi.W
	on zlib-gabi output.
	* binutils-all/dw2-1.W: Convert section names to .zdebug_*.
	* binutils-all/dw2-3.W: Likewise.
	* binutils-all/objdump.W: Likewise.
	* binutils-all/dw2-3gabi.W: New file.

ld/

	PR binutils/18209
	* ldfile.c (ldfile_try_open_bfd): Set is_linker_input to 1.
---
 bfd/bfd-in2.h                                |   7 ++
 bfd/bfd.c                                    |   3 +
 bfd/elf.c                                    | 153 ++++++++++++++++----------
 bfd/section.c                                |   4 +
 binutils/objcopy.c                           |   3 +
 binutils/testsuite/binutils-all/compress.exp |   2 +-
 binutils/testsuite/binutils-all/dw2-1.W      |   4 +-
 binutils/testsuite/binutils-all/dw2-3.W      |   6 +-
 binutils/testsuite/binutils-all/dw2-3gabi.W  | 156 +++++++++++++++++++++++++++
 binutils/testsuite/binutils-all/objdump.W    |   6 +-
 ld/ldfile.c                                  |   3 +
 11 files changed, 282 insertions(+), 65 deletions(-)
 create mode 100644 binutils/testsuite/binutils-all/dw2-3gabi.W

diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 122caa0..d4e2b9a 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1400,6 +1400,10 @@ typedef struct bfd_section
      TMS320C54X only.  */
 #define SEC_TIC54X_BLOCK 0x10000000
 
+  /* This section should be renamed.  This is for ELF linker
+     internal use only.  */
+#define SEC_ELF_RENAME 0x10000000
+
   /* Conditionally link this section; do not link if there are no
      references found to any symbol in the section.  This is for TI
      TMS320C54X only.  */
@@ -6465,6 +6469,9 @@ struct bfd
   /* Set if this is the linker output BFD.  */
   unsigned int is_linker_output : 1;
 
+  /* Set if this is the linker input BFD.  */
+  unsigned int is_linker_input : 1;
+
   /* If this is an input for a compiler plug-in library.  */
   ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
 
diff --git a/bfd/bfd.c b/bfd/bfd.c
index ba78cf3..5b336a9 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -212,6 +212,9 @@ CODE_FRAGMENT
 .  {* Set if this is the linker output BFD.  *}
 .  unsigned int is_linker_output : 1;
 .
+.  {* Set if this is the linker input BFD.  *}
+.  unsigned int is_linker_input : 1;
+.
 .  {* If this is an input for a compiler plug-in library.  *}
 .  ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
 .
diff --git a/bfd/elf.c b/bfd/elf.c
index 85a4b6b..9083880 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -855,6 +855,31 @@ bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
   return elf_next_in_group (sec) != NULL;
 }
 
+static char *
+convert_debug_to_zdebug (bfd *abfd, const char *name)
+{
+  unsigned int len = strlen (name);
+  char *new_name = bfd_alloc (abfd, len + 2);
+  if (new_name == NULL)
+    return NULL;
+  new_name[0] = '.';
+  new_name[1] = 'z';
+  memcpy (new_name + 2, name + 1, len);
+  return new_name;
+}
+
+static char *
+convert_zdebug_to_debug (bfd *abfd, const char *name)
+{
+  unsigned int len = strlen (name);
+  char *new_name = bfd_alloc (abfd, len);
+  if (new_name == NULL)
+    return NULL;
+  new_name[0] = '.';
+  memcpy (new_name + 1, name + 2, len - 1);
+  return new_name;
+}
+
 /* Make a BFD section from an ELF section.  We store a pointer to the
    BFD section in the bfd_section field of the header.  */
 
@@ -1041,7 +1066,6 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
 	  || (name[1] == 'z' && name[7] == '_')))
     {
       enum { nothing, compress, decompress } action = nothing;
-      char *new_name;
       int compression_header_size;
       bfd_boolean compressed
 	= bfd_is_section_compressed_with_header (abfd, newsect,
@@ -1090,42 +1114,26 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
 	    }
 	}
 
-      new_name = NULL;
-      if (action == decompress
-	   || (action == compress
-	       && (abfd->flags & BFD_COMPRESS_GABI) != 0))
+      if (abfd->is_linker_input)
 	{
-	  if (name[1] == 'z')
+	  if (name[1] == 'z'
+	      && (action == decompress
+		  || (action == compress
+		      && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
 	    {
-	      unsigned int len = strlen (name);
-
-	      new_name = bfd_alloc (abfd, len);
-	      if (new_name == NULL)
-		return FALSE;
-	      new_name[0] = '.';
-	      memcpy (new_name + 1, name + 2, len - 1);
-	    }
-	}
-      else if (action == compress
-	       && newsect->compress_status == COMPRESS_SECTION_DONE)
-	{
-	  /* PR binutils/18087: Compression does not always make a section
-	     smaller.  So only rename the section when compression has
-	     actually taken place.  */
-	  if (name[1] != 'z')
-	    {
-	      unsigned int len = strlen (name);
-
-	      new_name = bfd_alloc (abfd, len + 2);
+	      /* Convert section name from .zdebug_* to .debug_* so
+		 that linker will consider this section as a debug
+		 section.  */
+	      char *new_name = convert_zdebug_to_debug (abfd, name);
 	      if (new_name == NULL)
 		return FALSE;
-	      new_name[0] = '.';
-	      new_name[1] = 'z';
-	      memcpy (new_name + 2, name + 1, len);
+	      bfd_rename_section (abfd, newsect, new_name);
 	    }
 	}
-      if (new_name != NULL)
-	bfd_rename_section (abfd, newsect, new_name);
+      else
+	/* For objdump, don't rename the section.  For objcopy, delay
+	   section rename to elf_fake_sections.  */
+	newsect->flags |= SEC_ELF_RENAME;
     }
 
   return TRUE;
@@ -2689,7 +2697,7 @@ _bfd_elf_single_rel_hdr (asection *sec)
 static bfd_boolean
 _bfd_elf_init_reloc_shdr (bfd *abfd,
 			  struct bfd_elf_section_reloc_data *reldata,
-			  asection *asect,
+			  const char *sec_name,
 			  bfd_boolean use_rela_p)
 {
   Elf_Internal_Shdr *rel_hdr;
@@ -2702,11 +2710,11 @@ _bfd_elf_init_reloc_shdr (bfd *abfd,
   rel_hdr = bfd_zalloc (abfd, amt);
   reldata->hdr = rel_hdr;
 
-  amt = sizeof ".rela" + strlen (asect->name);
+  amt = sizeof ".rela" + strlen (sec_name);
   name = (char *) bfd_alloc (abfd, amt);
   if (name == NULL)
     return FALSE;
-  sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
+  sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
   rel_hdr->sh_name =
     (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
 					FALSE);
@@ -2763,33 +2771,66 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
 
   this_hdr = &esd->this_hdr;
 
-  /* For linking, compress DWARF debug sections with names: .debug_*.  */
-  if (arg->link_info
-      && (arg->link_info->compress_debug & COMPRESS_DEBUG)
-      && (asect->flags & SEC_DEBUGGING)
-      && name[1] == 'd'
-      && name[6] == '_')
+  if (arg->link_info)
     {
-      /* Set SEC_ELF_COMPRESS to indicate this section should be
-	 compressed.  */
-      asect->flags |= SEC_ELF_COMPRESS;
+      /* ld: compress DWARF debug sections with names: .debug_*.  */
+      if ((arg->link_info->compress_debug & COMPRESS_DEBUG)
+	  && (asect->flags & SEC_DEBUGGING)
+	  && name[1] == 'd'
+	  && name[6] == '_')
+	{
+	  /* Set SEC_ELF_COMPRESS to indicate this section should be
+	     compressed.  */
+	  asect->flags |= SEC_ELF_COMPRESS;
 
-      if (arg->link_info->compress_debug != COMPRESS_DEBUG_GABI_ZLIB)
+	  if (arg->link_info->compress_debug != COMPRESS_DEBUG_GABI_ZLIB)
+	    {
+	      /* If SHF_COMPRESSED isn't used, rename compressed DWARF
+		 debug section to .zdebug_*.  */
+	      char *new_name = convert_debug_to_zdebug (abfd, name);
+	      if (new_name == NULL)
+		{
+		  arg->failed = TRUE;
+		  return;
+		}
+	      bfd_rename_section (abfd, asect, new_name);
+	      name = asect->name;
+	    }
+	}
+    }
+  else if ((asect->flags & SEC_ELF_RENAME))
+    {
+      /* objcopy: rename output DWARF debug section.  */
+      if ((abfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)))
+	{
+	  /* When we decompress or compress with SHF_COMPRESSED,
+	     convert section name from .zdebug_* to .debug_* if
+	     needed.  */
+	  if (name[1] == 'z')
+	    {
+	      char *new_name = convert_zdebug_to_debug (abfd, name);
+	      if (new_name == NULL)
+		{
+		  arg->failed = TRUE;
+		  return;
+		}
+	      name = new_name;
+	    }
+	}
+      else if (asect->compress_status == COMPRESS_SECTION_DONE)
 	{
-	  /* If SHF_COMPRESSED isn't used, rename compressed DWARF
-	     debug section to .zdebug_*.  */
-	  unsigned int len = strlen (name);
-	  char *new_name = bfd_alloc (abfd, len + 2);
+	  /* PR binutils/18087: Compression does not always make a
+	     section smaller.  So only rename the section when
+	     compression has actually taken place.  If input section
+	     name is .zdebug_*, we should never compress it again.  */
+	  char *new_name = convert_debug_to_zdebug (abfd, name);
 	  if (new_name == NULL)
 	    {
 	      arg->failed = TRUE;
 	      return;
 	    }
-	  new_name[0] = '.';
-	  new_name[1] = 'z';
-	  memcpy (new_name + 2, name + 1, len);
-	  bfd_rename_section (abfd, asect, new_name);
-	  name = asect->name;
+	  BFD_ASSERT (name[1] != 'z');
+	  name = new_name;
 	}
     }
 
@@ -2972,13 +3013,13 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
 	  && (arg->link_info->relocatable || arg->link_info->emitrelocations))
 	{
 	  if (esd->rel.count && esd->rel.hdr == NULL
-	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, asect, FALSE))
+	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name, FALSE))
 	    {
 	      arg->failed = TRUE;
 	      return;
 	    }
 	  if (esd->rela.count && esd->rela.hdr == NULL
-	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, asect, TRUE))
+	      && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name, TRUE))
 	    {
 	      arg->failed = TRUE;
 	      return;
@@ -2987,7 +3028,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
       else if (!_bfd_elf_init_reloc_shdr (abfd,
 					  (asect->use_rela_p
 					   ? &esd->rela : &esd->rel),
-					  asect,
+					  name,
 					  asect->use_rela_p))
 	  arg->failed = TRUE;
     }
diff --git a/bfd/section.c b/bfd/section.c
index d59a0e3..cf63121 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -345,6 +345,10 @@ CODE_FRAGMENT
 .     TMS320C54X only.  *}
 .#define SEC_TIC54X_BLOCK 0x10000000
 .
+.  {* This section should be renamed.  This is for ELF linker
+.     internal use only.  *}
+.#define SEC_ELF_RENAME 0x10000000
+.
 .  {* Conditionally link this section; do not link if there are no
 .     references found to any symbol in the section.  This is for TI
 .     TMS320C54X only.  *}
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index f7fc814..7f1bd76 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -2929,6 +2929,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
   /* Copy merge entity size.  */
   osection->entsize = isection->entsize;
 
+  /* Copy compress status.  */
+  osection->compress_status = isection->compress_status;
+
   /* This used to be mangle_section; we do here to avoid using
      bfd_get_section_by_name since some formats allow multiple
      sections with the same name.  */
diff --git a/binutils/testsuite/binutils-all/compress.exp b/binutils/testsuite/binutils-all/compress.exp
index 4d3b71c..8787e77 100644
--- a/binutils/testsuite/binutils-all/compress.exp
+++ b/binutils/testsuite/binutils-all/compress.exp
@@ -566,7 +566,7 @@ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
     fail "$testname"
     send_log "$got\n"
 }
-if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then {
+if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3gabi.W] } then {
     fail "$testname"
 } else {
     pass "$testname"
diff --git a/binutils/testsuite/binutils-all/dw2-1.W b/binutils/testsuite/binutils-all/dw2-1.W
index 3811019..a3612e9 100644
--- a/binutils/testsuite/binutils-all/dw2-1.W
+++ b/binutils/testsuite/binutils-all/dw2-1.W
@@ -1,7 +1,7 @@
 
 .*dw2-1-compressed.o:     file format .*
 
-Contents of the .debug_info section:
+Contents of the .zdebug_info section:
 
   Compilation Unit @ offset 0x0:
    Length:        0x4e \(32-bit\)
@@ -30,7 +30,7 @@ Contents of the .debug_info section:
     <50>   DW_AT_encoding    : 5	\(signed\)
  <1><51>: Abbrev Number: 0
 
-Raw dump of debug contents of section .debug_line:
+Raw dump of debug contents of section .zdebug_line:
 
   Offset:                      0x0
   Length:                      62
diff --git a/binutils/testsuite/binutils-all/dw2-3.W b/binutils/testsuite/binutils-all/dw2-3.W
index 0d0fe6a..30c2a31 100644
--- a/binutils/testsuite/binutils-all/dw2-3.W
+++ b/binutils/testsuite/binutils-all/dw2-3.W
@@ -1,7 +1,7 @@
 
 .*: +file format .*
 
-Contents of the .debug_info section:
+Contents of the .zdebug_info section:
 
   Compilation Unit @ offset 0x0:
    Length:        0x5e \(32-bit\)
@@ -56,7 +56,7 @@ Contents of the .debug_info section:
     <9b>   DW_AT_const_value : 2
  <1><9c>: Abbrev Number: 0
 
-Contents of the .debug_abbrev section:
+Contents of the .zdebug_abbrev section:
 
   Number TAG \(0x0\)
    1      DW_TAG_compile_unit    \[has children\]
@@ -110,7 +110,7 @@ Contents of the .debug_abbrev section:
     DW_AT_const_value  DW_FORM_data1
     DW_AT value: 0     DW_FORM value: 0
 
-Raw dump of debug contents of section .debug_line:
+Raw dump of debug contents of section .zdebug_line:
 
   Offset:                      0x0
   Length:                      62
diff --git a/binutils/testsuite/binutils-all/dw2-3gabi.W b/binutils/testsuite/binutils-all/dw2-3gabi.W
new file mode 100644
index 0000000..0d0fe6a
--- /dev/null
+++ b/binutils/testsuite/binutils-all/dw2-3gabi.W
@@ -0,0 +1,156 @@
+
+.*: +file format .*
+
+Contents of the .debug_info section:
+
+  Compilation Unit @ offset 0x0:
+   Length:        0x5e \(32-bit\)
+   Version:       2
+   Abbrev Offset: 0x0
+   Pointer Size:  4
+ <0><b>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+    <c>   DW_AT_stmt_list   : 0x0
+    <10>   DW_AT_high_pc     : 0x4
+    <14>   DW_AT_low_pc      : 0x0
+    <18>   DW_AT_name        : file1.txt
+    <22>   DW_AT_producer    : GNU C 3.3.3
+    <2e>   DW_AT_language    : 1	\(ANSI C\)
+ <1><2f>: Abbrev Number: 2 \(DW_TAG_subprogram\)
+    <30>   DW_AT_external    : 1
+    <31>   DW_AT_decl_file   : 1
+    <32>   DW_AT_decl_line   : 2
+    <33>   DW_AT_name        : func_cu1
+    <3c>   DW_AT_type        : <0x85>
+    <40>   DW_AT_low_pc      : 0x0
+    <44>   DW_AT_high_pc     : 0x4
+    <48>   DW_AT_frame_base  : 1 byte block: 55 	\(DW_OP_reg5 \([^()]*\)\)
+ <1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\)
+    <4b>   DW_AT_name        : int1
+    <50>   DW_AT_byte_size   : 4
+    <51>   DW_AT_encoding    : 5	\(signed\)
+ <1><52>: Abbrev Number: 4 \(DW_TAG_const_type\)
+    <53>   DW_AT_type        : <0x4a>
+ <1><57>: Abbrev Number: 5 \(DW_TAG_variable\)
+    <58>   DW_AT_name        : one
+    <5c>   DW_AT_type        : <0x52>
+    <60>   DW_AT_const_value : 1
+ <1><61>: Abbrev Number: 0
+  Compilation Unit @ offset 0x62:
+   Length:        0x37 \(32-bit\)
+   Version:       2
+   Abbrev Offset: 0x45
+   Pointer Size:  4
+ <0><6d>: Abbrev Number: 1 \(DW_TAG_compile_unit\)
+    <6e>   DW_AT_name        : file1.txt
+    <78>   DW_AT_producer    : GNU C 3.3.3
+    <84>   DW_AT_language    : 1	\(ANSI C\)
+ <1><85>: Abbrev Number: 2 \(DW_TAG_base_type\)
+    <86>   DW_AT_name        : int2
+    <8b>   DW_AT_byte_size   : 4
+    <8c>   DW_AT_encoding    : 5	\(signed\)
+ <1><8d>: Abbrev Number: 3 \(DW_TAG_const_type\)
+    <8e>   DW_AT_type        : <0x85>
+ <1><92>: Abbrev Number: 4 \(DW_TAG_variable\)
+    <93>   DW_AT_name        : two
+    <97>   DW_AT_type        : <0x8d>
+    <9b>   DW_AT_const_value : 2
+ <1><9c>: Abbrev Number: 0
+
+Contents of the .debug_abbrev section:
+
+  Number TAG \(0x0\)
+   1      DW_TAG_compile_unit    \[has children\]
+    DW_AT_stmt_list    DW_FORM_data4
+    DW_AT_high_pc      DW_FORM_addr
+    DW_AT_low_pc       DW_FORM_addr
+    DW_AT_name         DW_FORM_string
+    DW_AT_producer     DW_FORM_string
+    DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
+   2      DW_TAG_subprogram    \[no children\]
+    DW_AT_external     DW_FORM_flag
+    DW_AT_decl_file    DW_FORM_data1
+    DW_AT_decl_line    DW_FORM_data1
+    DW_AT_name         DW_FORM_string
+    DW_AT_type         DW_FORM_ref_addr
+    DW_AT_low_pc       DW_FORM_addr
+    DW_AT_high_pc      DW_FORM_addr
+    DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
+   3      DW_TAG_base_type    \[no children\]
+    DW_AT_name         DW_FORM_string
+    DW_AT_byte_size    DW_FORM_data1
+    DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
+   4      DW_TAG_const_type    \[no children\]
+    DW_AT_type         DW_FORM_ref4
+    DW_AT value: 0     DW_FORM value: 0
+   5      DW_TAG_variable    \[no children\]
+    DW_AT_name         DW_FORM_string
+    DW_AT_type         DW_FORM_ref4
+    DW_AT_const_value  DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
+  Number TAG \(0x45\)
+   1      DW_TAG_compile_unit    \[has children\]
+    DW_AT_name         DW_FORM_string
+    DW_AT_producer     DW_FORM_string
+    DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
+   2      DW_TAG_base_type    \[no children\]
+    DW_AT_name         DW_FORM_string
+    DW_AT_byte_size    DW_FORM_data1
+    DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
+   3      DW_TAG_const_type    \[no children\]
+    DW_AT_type         DW_FORM_ref4
+    DW_AT value: 0     DW_FORM value: 0
+   4      DW_TAG_variable    \[no children\]
+    DW_AT_name         DW_FORM_string
+    DW_AT_type         DW_FORM_ref4
+    DW_AT_const_value  DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
+
+Raw dump of debug contents of section .debug_line:
+
+  Offset:                      0x0
+  Length:                      62
+  DWARF Version:               2
+  Prologue Length:             35
+  Minimum Instruction Length:  1
+  Initial value of 'is_stmt':  1
+  Line Base:                   1
+  Line Range:                  1
+  Opcode Base:                 16
+
+ Opcodes:
+  Opcode 1 has 0 args
+  Opcode 2 has 1 args
+  Opcode 3 has 1 args
+  Opcode 4 has 1 args
+  Opcode 5 has 1 args
+  Opcode 6 has 0 args
+  Opcode 7 has 0 args
+  Opcode 8 has 0 args
+  Opcode 9 has 1 args
+  Opcode 10 has 0 args
+  Opcode 11 has 0 args
+  Opcode 12 has 1 args
+  Opcode 13 has 0 args
+  Opcode 14 has 0 args
+  Opcode 15 has 0 args
+
+ The Directory Table is empty.
+
+ The File Name Table \(offset 0x1f\):
+  Entry	Dir	Time	Size	Name
+  1	0	0	0	file1.txt
+
+ Line Number Statements:
+  \[0x0000002d\]  Extended opcode 2: set Address to 0x0
+  \[0x00000034\]  Advance Line by 3 to 4
+  \[0x00000036\]  Copy
+  \[0x00000037\]  Copy
+  \[0x00000038\]  Extended opcode 2: set Address to 0x4
+  \[0x0000003f\]  Extended opcode 1: End of Sequence
+
+
diff --git a/binutils/testsuite/binutils-all/objdump.W b/binutils/testsuite/binutils-all/objdump.W
index 48dde48..c84ee9f 100644
--- a/binutils/testsuite/binutils-all/objdump.W
+++ b/binutils/testsuite/binutils-all/objdump.W
@@ -1,7 +1,7 @@
 
 .*dw2-compressed.o:     file format .*
 
-Contents of the .debug_info section:
+Contents of the .zdebug_info section:
 
   Compilation Unit @ offset 0x0:
    Length:        0x4e \(32-bit\)
@@ -30,7 +30,7 @@ Contents of the .debug_info section:
     <50>   DW_AT_encoding    : 5	\(signed\)
  <1><51>: Abbrev Number: 0
 
-Raw dump of debug contents of section .debug_line:
+Raw dump of debug contents of section .zdebug_line:
 
   Offset:                      0x0
   Length:                      62
@@ -74,7 +74,7 @@ Raw dump of debug contents of section .debug_line:
   \[0x.*\]  Extended opcode 1: End of Sequence
 
 
-Contents of the .debug_abbrev section:
+Contents of the .zdebug_abbrev section:
 
   Number TAG \(0x0\)
    1      DW_TAG_compile_unit    \[has children\]
diff --git a/ld/ldfile.c b/ld/ldfile.c
index 21bdbf4..9c14182 100644
--- a/ld/ldfile.c
+++ b/ld/ldfile.c
@@ -142,6 +142,9 @@ ldfile_try_open_bfd (const char *attempt,
   /* Linker needs to decompress sections.  */
   entry->the_bfd->flags |= BFD_DECOMPRESS;
 
+  /* This is the linker output BFD. */
+  entry->the_bfd->is_linker_input = 1;
+
 #ifdef ENABLE_PLUGINS
   if (entry->flags.lto_output)
     entry->the_bfd->lto_output = 1;
-- 
2.1.0



More information about the Binutils mailing list