diff options
author | Alan Modra <amodra@gmail.com> | 2022-12-06 14:40:10 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2022-12-06 14:40:10 +1030 |
commit | 7b5f66a118a6e252a56c472c082a29d39ede68c6 (patch) | |
tree | ae6097315f0fbd29f6a2783856afddd8c715b532 /bfd/elf.c | |
parent | 89dbeac7460eaa2c6b0149b8abfac880ecefbfe3 (diff) | |
download | binutils-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.c | 95 |
1 files changed, 22 insertions, 73 deletions
@@ -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) |