[binutils-gdb] alpha: handle discarded got section
Alan Modra via Binutils-cvs <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=53a7f1375a961e97a195682234b2aff84d6c3744 commit 53a7f1375a961e97a195682234b2aff84d6c3744 Author: Alan Modra <[email protected]> Date: Mon May 11 09:20:29 2026 +0930 alpha: handle discarded got section This fixes testsuite failures I noticed when changing dynobj to be linker created, but I think the bug could be triggered by suitably crafted linker scripts without any dynobj changes. * elf64-alpha.c (elf64_alpha_final_link): Don't attempt to write out a got section that has been discarded. Diff: --- bfd/elf64-alpha.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 0a63ca0bbdb..91cc7bcaec8 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -5248,28 +5248,28 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info) /* Now write out the computed sections. */ /* The .got subsections... */ - { - bfd *i, *dynobj = elf_hash_table(info)->dynobj; - for (i = htab->got_list; - i != NULL; - i = alpha_elf_tdata(i)->got_link_next) - { - asection *sgot; + bfd *i, *dynobj = elf_hash_table(info)->dynobj; + for (i = htab->got_list; + i != NULL; + i = alpha_elf_tdata(i)->got_link_next) + { + asection *sgot; - /* elf_bfd_final_link already did everything in dynobj. */ - if (i == dynobj) - continue; + /* elf_bfd_final_link already did everything in dynobj. */ + if (i == dynobj) + continue; - sgot = alpha_elf_tdata(i)->got; - if (! bfd_set_section_contents (abfd, sgot->output_section, + sgot = alpha_elf_tdata(i)->got; + if (sgot != NULL + && !bfd_is_abs_section (sgot->output_section) + && !bfd_set_section_contents (abfd, sgot->output_section, sgot->contents, (file_ptr) sgot->output_offset, sgot->size)) - return false; - } - } + return false; + } - if (mdebug_sec != (asection *) NULL) + if (mdebug_sec != NULL) { BFD_ASSERT (abfd->output_has_begun); if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,