diff options
author | Jakub Jelinek <jakub@redhat.com> | 2002-04-03 17:42:39 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2002-04-03 17:42:39 +0000 |
commit | 1858edb362f6b665e7a1fbf3358c48d1bdece82e (patch) | |
tree | 40cecef4a3808f7701f6b32c4008f764727d2bde /bfd | |
parent | 1fb48c07fb920a5a77580aac7d89896b682123eb (diff) | |
download | gdb-1858edb362f6b665e7a1fbf3358c48d1bdece82e.tar.gz |
* elf32-sparc.c (elf32_sparc_relocate_section): Don't emit dynamic
PC relative relocs against hidden symbols.
* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-sparc.c | 11 | ||||
-rw-r--r-- | bfd/elf64-sparc.c | 14 |
3 files changed, 30 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4093a38a5d8..01295e132d3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2002-04-03 Jakub Jelinek <jakub@redhat.com> + + * elf32-sparc.c (elf32_sparc_relocate_section): Don't emit dynamic + PC relative relocs against hidden symbols. + * elf64-sparc.c (sparc64_elf_relocate_section): Likewise. + 2002-04-03 Alan Modra <amodra@bigpond.net.au> * elf.c (_bfd_elf_make_section_from_shdr): When setting section diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index fff9fa2edc2..a11db81c305 100644 --- a/bfd/elf32-sparc.c +++ b/bfd/elf32-sparc.c @@ -1467,6 +1467,17 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, if (!(outrel.r_offset & 3)) r_type = R_SPARC_32; break; + case R_SPARC_DISP8: + case R_SPARC_DISP16: + case R_SPARC_DISP32: + /* If the symbol is not dynamic, we should not keep + a dynamic relocation. But an .rela.* slot has been + allocated for it, output R_SPARC_NONE. + FIXME: Add code tracking needed dynamic relocs as + e.g. i386 has. */ + if (h->dynindx == -1) + skip = true, relocate = true; + break; } if (skip) diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 3305f99c7e3..78d2a560f67 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -2053,11 +2053,11 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, case R_SPARC_DISP8: case R_SPARC_DISP16: case R_SPARC_DISP32: + case R_SPARC_DISP64: case R_SPARC_WDISP30: case R_SPARC_WDISP22: case R_SPARC_WDISP19: case R_SPARC_WDISP16: - case R_SPARC_DISP64: if (h == NULL) break; /* Fall through. */ @@ -2146,6 +2146,18 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, case R_SPARC_UA64: if (!(outrel.r_offset & 7)) r_type = R_SPARC_64; break; + case R_SPARC_DISP8: + case R_SPARC_DISP16: + case R_SPARC_DISP32: + case R_SPARC_DISP64: + /* If the symbol is not dynamic, we should not keep + a dynamic relocation. But an .rela.* slot has been + allocated for it, output R_SPARC_NONE. + FIXME: Add code tracking needed dynamic relocs as + e.g. i386 has. */ + if (h->dynindx == -1) + skip = true, relocate = true; + break; } if (skip) |