diff options
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf64-sparc.c | 2 | ||||
-rw-r--r-- | bfd/elflink.h | 15 |
3 files changed, 13 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 13afd20454b..0b574426a96 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +1999-08-02 Jakub Jelinek <jj@ultra.linux.cz> + + * elflink.h (elf_bfd_final_link): Copy the whole isym, not just + some fields. + * elf64-sparc.c (sparc64_elf_output_arch_syms): Declare used + variables and initialize them. + 1999-08-01 Mark Mitchell <mark@codesourcery.com> * elf32-mips.c (_bfd_mips_elf_final_link): Handle the case where diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 733ea5e5c79..e98f1be893b 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -1403,6 +1403,8 @@ sparc64_elf_output_arch_syms (output_bfd, info, finfo, func) to back up symtab->sh_info. */ if (elf_hash_table (info)->dynlocal) { + bfd * dynobj = elf_hash_table (info)->dynobj; + asection *dynsymsec = bfd_get_section_by_name (dynobj, ".dynsym"); struct elf_link_local_dynamic_entry *e; for (e = elf_hash_table (info)->dynlocal; e ; e = e->next) diff --git a/bfd/elflink.h b/bfd/elflink.h index cfb49098827..7b3a41725ce 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -4250,19 +4250,12 @@ elf_bfd_final_link (abfd, info) { asection *s; - sym.st_size = e->isym.st_size; - sym.st_other = e->isym.st_other; - - /* Note that we saved a word of storage and overwrote + /* Copy the internal symbol as is. + Note that we saved a word of storage and overwrote the original st_name with the dynstr_index. */ - sym.st_name = e->isym.st_name; + sym = e->isym; - if (e->isym.st_shndx == 0 || e->isym.st_shndx >= SHN_LORESERVE) - { - sym.st_shndx = e->isym.st_shndx; - sym.st_value = e->isym.st_value; - } - else + if (e->isym.st_shndx > 0 && e->isym.st_shndx < SHN_LORESERVE) { s = bfd_section_from_elf_index (e->input_bfd, e->isym.st_shndx); |