]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
LoongArch: Do not check R_LARCH_SOP_PUSH_ABSOLUTE to avoid broken links to old object...
authorLulu Cai <cailulu@loongson.cn>
Wed, 19 Jun 2024 03:00:36 +0000 (11:00 +0800)
committerliuzhensong <liuzhensong@loongson.cn>
Fri, 28 Jun 2024 09:35:31 +0000 (17:35 +0800)
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.

bfd/elfnn-loongarch.c

index b1720760475b0e59f9b8a39daacd2fba9138f812..da84aabc1ae61c214ad9debf7b4fc2327225023d 100644 (file)
@@ -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