diff options
author | Alan Modra <amodra@gmail.com> | 2019-08-29 18:35:54 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2019-08-29 21:07:00 +0930 |
commit | c0d9f31dbd8765dd925e6a4b4acdb9b23d1706f6 (patch) | |
tree | f2d9204312bc52783b59059935c3b05f64745642 /bfd/elf32-ppc.c | |
parent | dd9b12c2451f0e46e73ec54d8762727d428b4c14 (diff) | |
download | gdb-c0d9f31dbd8765dd925e6a4b4acdb9b23d1706f6.zip gdb-c0d9f31dbd8765dd925e6a4b4acdb9b23d1706f6.tar.gz gdb-c0d9f31dbd8765dd925e6a4b4acdb9b23d1706f6.tar.bz2 |
PR24697, R_PPC_EMB_SDA21 cannot be used when making a shared object
This removes a restriction on various R_PPC_EMB relocations that has
been present for ppc32 since 1996-04-26 git commit e25a798839. As far
as I know, only those relocs that would require addressing via r2 for
.sdata2/.sbss2 access are disallowed in shared libraries.
PR 24697
* elf32-ppc.c (ppc_elf_check_relocs): Call bad_shared_reloc
when !bfd_link_executable for R_PPC_EMB_SDA2I16 and
R_PPC_EMB_SDA2REL. Don't call bad_shared_reloc for any other
reloc.
Diffstat (limited to 'bfd/elf32-ppc.c')
-rw-r--r-- | bfd/elf32-ppc.c | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 78d39ef..5e5834a 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -3096,11 +3096,6 @@ ppc_elf_check_relocs (bfd *abfd, /* Indirect .sdata relocation. */ case R_PPC_EMB_SDAI16: - if (bfd_link_pic (info)) - { - bad_shared_reloc (abfd, r_type); - return FALSE; - } htab->sdata[0].sym->ref_regular = 1; if (!elf_allocate_pointer_linker_section (abfd, &htab->sdata[0], h, rel)) @@ -3114,7 +3109,7 @@ ppc_elf_check_relocs (bfd *abfd, /* Indirect .sdata2 relocation. */ case R_PPC_EMB_SDA2I16: - if (bfd_link_pic (info)) + if (!bfd_link_executable (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -3160,7 +3155,7 @@ ppc_elf_check_relocs (bfd *abfd, break; case R_PPC_EMB_SDA2REL: - if (bfd_link_pic (info)) + if (!bfd_link_executable (info)) { bad_shared_reloc (abfd, r_type); return FALSE; @@ -3177,11 +3172,6 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_VLE_SDA21: case R_PPC_EMB_SDA21: case R_PPC_EMB_RELSDA: - if (bfd_link_pic (info)) - { - bad_shared_reloc (abfd, r_type); - return FALSE; - } if (h != NULL) { ppc_elf_hash_entry (h)->has_sda_refs = TRUE; @@ -3194,11 +3184,6 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_EMB_NADDR16_LO: case R_PPC_EMB_NADDR16_HI: case R_PPC_EMB_NADDR16_HA: - if (bfd_link_pic (info)) - { - bad_shared_reloc (abfd, r_type); - return FALSE; - } if (h != NULL) h->non_got_ref = TRUE; break; |