summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf64-sparc.c2
-rw-r--r--bfd/elflink.h15
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);