diff options
-rw-r--r-- | bfd/ChangeLog | 15 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 7 | ||||
-rw-r--r-- | bfd/bfd.c | 3 | ||||
-rw-r--r-- | bfd/elf.c | 153 | ||||
-rw-r--r-- | bfd/section.c | 4 | ||||
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/objcopy.c | 3 | ||||
-rw-r--r-- | binutils/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/compress.exp | 2 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/dw2-1.W | 4 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/dw2-3.W | 6 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/dw2-3gabi.W | 156 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/objdump.W | 6 | ||||
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/ldfile.c | 3 |
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; @@ -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; . @@ -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; |