aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog15
-rw-r--r--bfd/bfd-in2.h7
-rw-r--r--bfd/bfd.c3
-rw-r--r--bfd/elf.c153
-rw-r--r--bfd/section.c4
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/objcopy.c3
-rw-r--r--binutils/testsuite/ChangeLog10
-rw-r--r--binutils/testsuite/binutils-all/compress.exp2
-rw-r--r--binutils/testsuite/binutils-all/dw2-1.W4
-rw-r--r--binutils/testsuite/binutils-all/dw2-3.W6
-rw-r--r--binutils/testsuite/binutils-all/dw2-3gabi.W156
-rw-r--r--binutils/testsuite/binutils-all/objdump.W6
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/ldfile.c3
15 files changed, 317 insertions, 65 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d0b8e04..804c683 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
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/ChangeLog b/binutils/ChangeLog
index 999d6d2..b0a5b1b 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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
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/ChangeLog b/binutils/testsuite/ChangeLog
index 066aa7e..52daa35 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -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
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/ChangeLog b/ld/ChangeLog
index bfa89d5..f5e25b2 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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.
diff --git a/ld/ldfile.c b/ld/ldfile.c
index 21bdbf4..d4f7cb4 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 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;