diff options
author | Alan Modra <amodra@gmail.com> | 2002-07-23 04:38:17 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2002-07-23 04:38:17 +0000 |
commit | fad2542d0f071d62cbd40b1db2bff32147c87728 (patch) | |
tree | aa7bbc63c80e1c45f5feb2fd5bf92393c24148d1 | |
parent | 27bae383c5b39ba13f6ab0b263168145a76e5ab9 (diff) | |
download | binutils-fad2542d0f071d62cbd40b1db2bff32147c87728.tar.gz binutils-fad2542d0f071d62cbd40b1db2bff32147c87728.tar.bz2 binutils-fad2542d0f071d62cbd40b1db2bff32147c87728.zip |
* elflink.h (elf_link_input_bfd): Don't change internal symbols
when outputting relocs.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elflink.h | 21 |
2 files changed, 16 insertions, 10 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 323294fe841..bfbece507b6 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-07-23 Alan Modra <amodra@bigpond.net.au> + + * elflink.h (elf_link_input_bfd): Don't change internal symbols + when outputting relocs. + 2002-07-20 Jason Thorpe <thorpej@wasabisystems.com> * elf64-alpha.c (elf64_alpha_size_dynamic_sections): Only insert diff --git a/bfd/elflink.h b/bfd/elflink.h index ed1bea0bc8e..956f6917e42 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -6967,6 +6967,7 @@ elf_link_input_bfd (finfo, input_bfd) { unsigned long r_symndx; asection *sec; + Elf_Internal_Sym sym; if (next_erel == bed->s->int_rels_per_ext_rel) { @@ -7019,9 +7020,9 @@ elf_link_input_bfd (finfo, input_bfd) /* This is a reloc against a local symbol. */ *rel_hash = NULL; - isym = isymbuf + r_symndx; + sym = isymbuf[r_symndx]; sec = finfo->sections[r_symndx]; - if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) + if (ELF_ST_TYPE (sym.st_info) == STT_SECTION) { /* I suppose the backend ought to fill in the section of any STT_SECTION symbol against a @@ -7068,34 +7069,34 @@ elf_link_input_bfd (finfo, input_bfd) must output it now. */ shlink = symtab_hdr->sh_link; name = (bfd_elf_string_from_elf_section - (input_bfd, shlink, isym->st_name)); + (input_bfd, shlink, sym.st_name)); if (name == NULL) return false; osec = sec->output_section; - isym->st_shndx = + sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, osec); - if (isym->st_shndx == SHN_BAD) + if (sym.st_shndx == SHN_BAD) return false; - isym->st_value += sec->output_offset; + sym.st_value += sec->output_offset; if (! finfo->info->relocateable) { - isym->st_value += osec->vma; - if (ELF_ST_TYPE (isym->st_info) == STT_TLS) + sym.st_value += osec->vma; + if (ELF_ST_TYPE (sym.st_info) == STT_TLS) { /* STT_TLS symbols are relative to PT_TLS segment base. */ BFD_ASSERT (finfo->first_tls_sec != NULL); - isym->st_value -= finfo->first_tls_sec->vma; + sym.st_value -= finfo->first_tls_sec->vma; } } finfo->indices[r_symndx] = bfd_get_symcount (output_bfd); - if (! elf_link_output_sym (finfo, name, isym, sec)) + if (! elf_link_output_sym (finfo, name, &sym, sec)) return false; } |