diff options
author | Ian Lance Taylor <ian@airs.com> | 1999-09-04 16:26:08 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1999-09-04 16:26:08 +0000 |
commit | 7843f00e2d20477ff4fe77054c7f2c5a90a20bca (patch) | |
tree | a3b1a31ff9e27a3f9e2745611d5bfd031647b44c /bfd/elf32-sparc.c | |
parent | 4fe53c9827dd950f6fac045494bb4821a40b2141 (diff) | |
download | gdb-7843f00e2d20477ff4fe77054c7f2c5a90a20bca.zip gdb-7843f00e2d20477ff4fe77054c7f2c5a90a20bca.tar.gz gdb-7843f00e2d20477ff4fe77054c7f2c5a90a20bca.tar.bz2 |
* elf-bfd.h (ELF_LINK_NON_GOT_REF): Define.
* elflink.h (elf_adjust_dynamic_symbol): Copy REF_REGULAR_NONWEAK
and NON_GOT_REF from weak defined symbol to real symbol.
* elf32-i386.c (elf_i386_check_relocs): Set NON_GOT_REF.
(elf_i386_adjust_dynamic_symbol): If NON_GOT_REF is not set, don't
create a COPY reloc.
* elf32-sparc.c (elf32_sparc_check_relocs): Set NON_GOT_REF.
(elf32_sparc_adjust_dynamic_symbol): If NON_GOT_REF is not set,
don't create a COPY reloc.
Diffstat (limited to 'bfd/elf32-sparc.c')
-rw-r--r-- | bfd/elf32-sparc.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index bb11c07..979d25b 100644 --- a/bfd/elf32-sparc.c +++ b/bfd/elf32-sparc.c @@ -510,6 +510,9 @@ elf32_sparc_check_relocs (abfd, info, sec, relocs) case R_SPARC_PC10: case R_SPARC_PC22: + if (h != NULL) + h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF; + if (h != NULL && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) break; @@ -521,6 +524,9 @@ elf32_sparc_check_relocs (abfd, info, sec, relocs) case R_SPARC_WDISP22: case R_SPARC_WDISP19: case R_SPARC_WDISP16: + if (h != NULL) + h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF; + /* If we are linking with -Bsymbolic, we do not need to copy a PC relative reloc against a global symbol which is defined in an object we are including in the link (i.e., @@ -543,6 +549,9 @@ elf32_sparc_check_relocs (abfd, info, sec, relocs) case R_SPARC_13: case R_SPARC_LO10: case R_SPARC_UA32: + if (h != NULL) + h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF; + if (info->shared) { /* When creating a shared object, we must copy these @@ -834,6 +843,11 @@ elf32_sparc_adjust_dynamic_symbol (info, h) if (info->shared) return true; + /* If there are no references to this symbol that do not use the + GOT, we don't need to generate a copy reloc. */ + if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0) + return true; + /* We must allocate the symbol in our .dynbss section, which will become part of the .bss section of the executable. There will be an entry for this symbol in the .dynsym section. The dynamic |