From: Alan Modra Date: Tue, 23 Jul 2002 04:38:17 +0000 (+0000) Subject: * elflink.h (elf_link_input_bfd): Don't change internal symbols X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fad2542d0f071d62cbd40b1db2bff32147c87728;p=binutils-gdb.git * elflink.h (elf_link_input_bfd): Don't change internal symbols when outputting relocs. --- 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 + + * elflink.h (elf_link_input_bfd): Don't change internal symbols + when outputting relocs. + 2002-07-20 Jason Thorpe * 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; }