aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-12-06 14:40:10 +1030
committerAlan Modra <amodra@gmail.com>2022-12-06 14:40:10 +1030
commit7b5f66a118a6e252a56c472c082a29d39ede68c6 (patch)
treeae6097315f0fbd29f6a2783856afddd8c715b532 /bfd/elf.c
parent89dbeac7460eaa2c6b0149b8abfac880ecefbfe3 (diff)
downloadbinutils-7b5f66a118a6e252a56c472c082a29d39ede68c6.zip
binutils-7b5f66a118a6e252a56c472c082a29d39ede68c6.tar.gz
binutils-7b5f66a118a6e252a56c472c082a29d39ede68c6.tar.bz2
Get rid of SEC_ELF_RENAME
SEC_ELF_RENAME is a flag used to effect section name changes when compressing/decompressing zlib-gnu debug sections. This can be accomplished more directly in one of the objcopy specific bfd functions. Renaming for ld input is simplified too. Ld input object files always have BFD_DECOMPRESS set. bfd/ * compress.c (bfd_convert_section_size): Rename to.. (bfd_convert_section_setup): ..this. Handle objcopy renaming of compressed/decompressed debug sections. * elf.c (_bfd_elf_make_section_from_shdr): Only rename zdebug input for linker. (elf_fake_sections): Don't handle renaming of debug sections for objcopy here. * section.c (SEC_ELF_RENAME): Delete. * bfd-in2.h: Regenerate. binutils/ * objcopy.c (setup_section): Call bfd_convert_section_setup. Don't call bfd_convert_section_size.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c95
1 files changed, 22 insertions, 73 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index a013f88..61058de 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1246,30 +1246,16 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
return false;
}
#endif
- }
-
- if (action != nothing)
- {
- if (abfd->is_linker_input)
+ if (abfd->is_linker_input
+ && name[1] == 'z')
{
- if (name[1] == 'z'
- && (action == decompress
- || (action == compress
- && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
- {
- /* Convert section name from .zdebug_* to .debug_* so
- that linker will consider this section as a debug
- section. */
- char *new_name = bfd_zdebug_name_to_debug (abfd, name);
- if (new_name == NULL)
- return false;
- bfd_rename_section (newsect, new_name);
- }
+ /* Rename section from .zdebug_* to .debug_* so that ld
+ scripts will see this section as a debug section. */
+ char *new_name = bfd_zdebug_name_to_debug (abfd, name);
+ if (new_name == NULL)
+ return false;
+ bfd_rename_section (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;
}
}
@@ -3181,57 +3167,20 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
this_hdr = &esd->this_hdr;
- if (arg->link_info)
- {
- /* 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 this section will be compressed, delay adding section
- name to section name section after it is compressed in
- _bfd_elf_assign_file_positions_for_non_load. */
- delay_st_name_p = true;
- }
- }
- 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 = bfd_zdebug_name_to_debug (abfd, name);
- if (new_name == NULL)
- {
- arg->failed = true;
- return;
- }
- name = new_name;
- }
- }
- else if (asect->compress_status == COMPRESS_SECTION_DONE
- && name[1] == 'd')
- {
- /* 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 = bfd_debug_name_to_zdebug (abfd, name);
- if (new_name == NULL)
- {
- arg->failed = true;
- return;
- }
- name = new_name;
- }
+ /* ld: compress DWARF debug sections with names: .debug_*. */
+ if (arg->link_info
+ && (arg->link_info->compress_debug & COMPRESS_DEBUG) != 0
+ && (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 this section will be compressed, delay adding section
+ name to section name section after it is compressed in
+ _bfd_elf_assign_file_positions_for_non_load. */
+ delay_st_name_p = true;
}
if (delay_st_name_p)