Don't change compressed input debug section names
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 23 Apr 2015 14:58:05 +0000 (07:58 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 23 Apr 2015 14:59:59 +0000 (07:59 -0700)
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.

15 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/bfd.c
bfd/elf.c
bfd/section.c
binutils/ChangeLog
binutils/objcopy.c
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/compress.exp
binutils/testsuite/binutils-all/dw2-1.W
binutils/testsuite/binutils-all/dw2-3.W
binutils/testsuite/binutils-all/dw2-3gabi.W [new file with mode: 0644]
binutils/testsuite/binutils-all/objdump.W
ld/ChangeLog
ld/ldfile.c

index d0b8e0482c2e0b4001faf889adaaa8d8acfed9de..804c683b3cd8d88c6eff732599d90c40674a023e 100644 (file)
@@ -1,3 +1,18 @@
+2015-04-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       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.
+
 2015-04-23  Alan Modra  <amodra@gmail.com>
 
        * elf64-ppc.c (TOC_BASE_ALIGN): Define.
index 122caa09ff432d4ddb3154a0df1aa6b7ee4f2f6c..d4e2b9a81ca6c5813e2284809d9619626e168dfb 100644 (file)
@@ -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;
 
index ba78cf34a93f2b1ed3df60a1b1c4960bc1b58b26..5b336a9a0a2fb2464071e7ac3f535fd277a67885 100644 (file)
--- 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;
 .
index c60e1c873a63b39cb9f26df8d796b6e9421aa507..d67c22bb303b4277b2162afce9907017e87dac98 100644 (file)
--- 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;
     }
index d59a0e3014e547bed1f779c9bf80a6116fd9fade..cf63121a7288b56e44e034fef254176af472f57d 100644 (file)
@@ -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.  *}
index 999d6d2823cb488c42482b68b1fc5906256f4f97..b0a5b1b93a08ecd56860418d00193bca398396b0 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/18209
+       * objcopy.c (setup_section): Copy compress status.
+
 2015-04-15  H.J. Lu  <hongjiu.lu@intel.com>
 
        * NEWS: Mention
index f7fc814c1dfe536126ce45c116bfc5d0e79f65f4..7f1bd76b5eacd0d69e6c530d2345a1f2f6d5c348 100644 (file)
@@ -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.  */
index 066aa7e8922771b87b92870219d1f4b2fc062d00..52daa35e6ff120ff440cde61156f856a903cf0eb 100644 (file)
@@ -1,3 +1,13 @@
+2015-04-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       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.
+
 2015-04-20  H.J. Lu  <hongjiu.lu@intel.com>
 
        * binutils-all/i386/compressed-1b.d: Don't hardcode offset of
index 4d3b71cc0dc63c7b66d7d8ee9ac9c27b947ded6a..8787e771edac986c1d6eb7000404bdcd0484c585 100644 (file)
@@ -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"
index 3811019e3040a8f2359632ef7828fdc64b5a5e2c..d70581b2956b49a37194ff2b5227db41d1a3a72c 100644 (file)
@@ -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
index 0d0fe6afbbe3be754a3e4c3661bbe01a6a3e74bb..4e97a1cef403ac09576a6a633c84523be88ca6ce 100644 (file)
@@ -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 (file)
index 0000000..0d0fe6a
--- /dev/null
@@ -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
+
+
index 48dde487b851c024327b0d92ce38ea9ef6e9e648..a5379d0c561f4f18a59defc9d23aad5b3ec62b08 100644 (file)
@@ -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\]
index bfa89d59fb180c41b1fffae608deddc41cdd8e26..f5e25b2136d4b1a2435d01bf1ee23b8fe38db778 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/18209
+       * ldfile.c (ldfile_try_open_bfd): Set is_linker_input to 1.
+
 2015-04-23  Alan Modra  <amodra@gmail.com>
 
        * emulparams/elf64ppc.sh (GOT): Align.
index 21bdbf404710ab57e735cd805daf4f9fc9de04d1..d4f7cb43a0bdddcd2290b8d2bee048371d5029d7 100644 (file)
@@ -142,6 +142,9 @@ ldfile_try_open_bfd (const char *attempt,
   /* Linker needs to decompress sections.  */
   entry->the_bfd->flags |= BFD_DECOMPRESS;
 
+  /* This is a linker input BFD.  */
+  entry->the_bfd->is_linker_input = 1;
+
 #ifdef ENABLE_PLUGINS
   if (entry->flags.lto_output)
     entry->the_bfd->lto_output = 1;
This page took 0.042911 seconds and 4 git commands to generate.