aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLulu Cai <cailulu@loongson.cn>2024-06-19 11:00:36 +0800
committerliuzhensong <liuzhensong@loongson.cn>2024-06-28 17:35:31 +0800
commite4ed68e5770d348c209fbef37a96e83a17115b86 (patch)
tree1dd412cf1e8ae5f5bb44db0155d3e9d92b33ace4
parent2513312930b2b8a0b50fb681f2781372cce3c2f6 (diff)
downloadgdb-e4ed68e5770d348c209fbef37a96e83a17115b86.zip
gdb-e4ed68e5770d348c209fbef37a96e83a17115b86.tar.gz
gdb-e4ed68e5770d348c209fbef37a96e83a17115b86.tar.bz2
LoongArch: Do not check R_LARCH_SOP_PUSH_ABSOLUTE to avoid broken links to old object files
R_LARCH_SOP_PUSH_ABSOLUTE with -fPIC was heavily used in the era of gas-2.38. We do not check this relocation to prevent broken links with old object files.
-rw-r--r--bfd/elfnn-loongarch.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index b172076..da84aab 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -756,10 +756,6 @@ loongarch_tls_transition (bfd *input_bfd,
return loongarch_tls_transition_without_check (info, r_type, h);
}
-/* Look through the relocs for a section during the first phase, and
- allocate space in the global offset table or procedure linkage
- table. */
-
static bool
bad_static_reloc (bfd *abfd, const Elf_Internal_Rela *rel, asection *sec,
unsigned r_type, struct elf_link_hash_entry *h,
@@ -787,6 +783,10 @@ bad_static_reloc (bfd *abfd, const Elf_Internal_Rela *rel, asection *sec,
return false;
}
+/* Look through the relocs for a section during the first phase, and
+ allocate space in the global offset table or procedure linkage
+ table. */
+
static bool
loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
asection *sec, const Elf_Internal_Rela *relocs)
@@ -948,10 +948,11 @@ loongarch_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
break;
case R_LARCH_ABS_HI20:
- case R_LARCH_SOP_PUSH_ABSOLUTE:
if (bfd_link_pic (info))
return bad_static_reloc (abfd, rel, sec, r_type, h, isym);
+ /* Fall through. */
+ case R_LARCH_SOP_PUSH_ABSOLUTE:
if (h != NULL)
/* If this reloc is in a read-only section, we might
need a copy reloc. We can't check reliably at this