This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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]

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


On Tue, Apr 21, 2015 at 9:17 AM, Nicholas Clifton <nickc@redhat.com> wrote:
> Hi H.J.
>
>> OK for master?
>
>
> This patch appears to introduce a lot of regressions.  For example:
>
> Checking Binutils in: mips-elf ... BIN: 4 done
>   BIN REGRESSION: objdump compress debug sections
>   BIN REGRESSION: objdump compress debug sections 3
>   BIN REGRESSION: objdump -W
..
> and so on - there are lots more.
>

It is because some compressed debug sections aren't smaller
for big endian targets.  Please try this patch.


-- 
H.J.
From 05570de228af6cf1cac0b2fb3ff4d49cb9456c0a Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 18 Apr 2015 08:28:15 -0700
Subject: [PATCH] Don't change compressed input debug section names

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

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 c60e1c8..d67c22b 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..d70581b 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 .z?debug_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 .z?debug_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..4e97a1c 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 .z?debug_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..a5379d0 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 .z?debug_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 .z?debug_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;
-- 
1.9.3


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