]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
LoongArch: Add LA32 and LA32R relocations
authormengqinggang <mengqinggang@loongson.cn>
Sun, 7 Sep 2025 07:47:56 +0000 (15:47 +0800)
committermengqinggang <mengqinggang@loongson.cn>
Wed, 10 Dec 2025 08:06:47 +0000 (16:06 +0800)
LA32 and LA32R do not have pcaddu18i.
LA32R does not have pcalau12i.

Add R_LARCH_CALL30 for pcaddu12i + jirl used in LA32 and LA32R.
Add R_LARCH_*_PCADD_HI20 for pcaddu12i used in LA32R.
Add R_LARCH_*_PCADD_LO12 for addi.w/ld.w used in LA32R.

bfd/bfd-in2.h
bfd/elfnn-loongarch.c
bfd/elfxx-loongarch.c
bfd/libbfd.h
bfd/reloc.c
include/elf/loongarch.h

index c89fe7ad8ac5eb0bd8a25559ff16c45991b1873d..ff0c5f88cdc90ef1f622d888a658f5abe35a9091 100644 (file)
@@ -7444,6 +7444,19 @@ enum bfd_reloc_code_real
   BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,
   BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,
   BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,
+  BFD_RELOC_LARCH_CALL30,
+  BFD_RELOC_LARCH_PCADD_HI20,
+  BFD_RELOC_LARCH_PCADD_LO12,
+  BFD_RELOC_LARCH_GOT_PCADD_HI20,
+  BFD_RELOC_LARCH_GOT_PCADD_LO12,
+  BFD_RELOC_LARCH_TLS_IE_PCADD_HI20,
+  BFD_RELOC_LARCH_TLS_IE_PCADD_LO12,
+  BFD_RELOC_LARCH_TLS_LD_PCADD_HI20,
+  BFD_RELOC_LARCH_TLS_LD_PCADD_LO12,
+  BFD_RELOC_LARCH_TLS_GD_PCADD_HI20,
+  BFD_RELOC_LARCH_TLS_GD_PCADD_LO12,
+  BFD_RELOC_LARCH_TLS_DESC_PCADD_HI20,
+  BFD_RELOC_LARCH_TLS_DESC_PCADD_LO12,
   BFD_RELOC_UNUSED
 };
 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
index ddb809760ab710189c49d9cd8f7b608102c5efd4..dd6ac76a0424d47e1710fa7fa97c9e414e17c294 100644 (file)
@@ -5136,9 +5136,8 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
        if (local_exec)
          {
            /* DESC -> LE relaxation:
-              pcalalau12i $a0,%desc_pc_hi20(var) =>
-              lu12i.w $a0,%le_hi20(var)
-           */
+              pcalau12i $a0,%desc_pc_hi20(var) =>
+              lu12i.w $a0,%le_hi20(var)  */
            bfd_put (32, abfd, LARCH_OP_LU12I_W | LARCH_RD_A0,
                contents + rel->r_offset);
            rel->r_info = ELFNN_R_INFO (r_symndx, R_LARCH_TLS_LE_HI20);
@@ -5146,9 +5145,8 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
        else
          {
            /* DESC -> IE relaxation:
-              pcalalau12i $a0,%desc_pc_hi20(var) =>
-              pcalalau12i $a0,%ie_pc_hi20(var)
-           */
+              pcalau12i $a0,%desc_pc_hi20(var) =>
+              pcalau12i $a0,%ie_pc_hi20(var)  */
            rel->r_info = ELFNN_R_INFO (r_symndx, R_LARCH_TLS_IE_PC_HI20);
          }
        return true;
@@ -5158,8 +5156,7 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
          {
            /* DESC -> LE relaxation:
               addi.d $a0,$a0,%desc_pc_lo12(var) =>
-              ori  $a0,$a0,le_lo12(var)
-           */
+              ori  $a0,$a0,le_lo12(var)  */
            insn = LARCH_OP_ORI | LARCH_RD_RJ_A0;
            bfd_put (32, abfd, LARCH_OP_ORI | LARCH_RD_RJ_A0,
                contents + rel->r_offset);
@@ -5181,8 +5178,7 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
       case R_LARCH_TLS_DESC_CALL:
        /* DESC -> LE/IE relaxation:
           ld.d $ra,$a0,%desc_ld(var) => NOP
-          jirl $ra,$ra,%desc_call(var) => NOP
-       */
+          jirl $ra,$ra,%desc_call(var) => NOP  */
        rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
        bfd_put (32, abfd, LARCH_NOP, contents + rel->r_offset);
        /* link with -relax option will delete NOP.  */
@@ -5194,9 +5190,8 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
        if (local_exec)
          {
            /* IE -> LE relaxation:
-              pcalalau12i $rd,%ie_pc_hi20(var) =>
-              lu12i.w $rd,%le_hi20(var)
-           */
+              pcalau12i $rd,%ie_pc_hi20(var) =>
+              lu12i.w $rd,%le_hi20(var)  */
            insn = bfd_getl32 (contents + rel->r_offset);
            bfd_put (32, abfd, LARCH_OP_LU12I_W | LARCH_GET_RD(insn),
                contents + rel->r_offset);
index ce1032f30e98c1992ce460d9dfbf251efca98289..b29ca218f24f1f58c7aa1e0aa09a8b5aeae2bdcb 100644 (file)
@@ -1882,6 +1882,228 @@ static loongarch_reloc_howto_type loongarch_howto_table[] =
         BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,   /* bfd_reloc_code_real_type.  */
         reloc_sign_bits,                       /* adjust_reloc_bits.  */
         "desc_pcrel_20"),                      /* larch_reloc_type_name.  */
+
+  /* For LA32R medium call.  */
+  LOONGARCH_HOWTO (R_LARCH_CALL30,             /* type (127).  */
+        2,                                     /* rightshift.  */
+        8,                                     /* size.  */
+        30,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        0,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_CALL30",                      /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask.  */
+        0x000ffc0001ffffe0,                    /* dst_mask.  */
+        false,                                 /* pcrel_offset.  */
+        BFD_RELOC_LARCH_CALL30,                /* bfd_reloc_code_real_type.  */
+        reloc_sign_bits,                       /* adjust_reloc_bits.  */
+        "call30"),                             /* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_PCADD_HI20,         /* type (128).  */
+        12,                                    /* rightshift.  */
+        4,                                     /* size.  */
+        20,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        5,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_PCADD_HI20",                  /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x1ffffe0,                             /* dst_mask */
+        true,                                  /* pcrel_offset */
+        BFD_RELOC_LARCH_PCADD_HI20,            /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "pcadd_hi20"),                         /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_PCADD_LO12,         /* type (129).  */
+        0,                                     /* rightshift.  */
+        4,                                     /* size.  */
+        12,                                    /* bitsize.  */
+        false,                                 /* pc_relative.  */
+        10,                                    /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_PCADD_LO12",                  /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x3ffc00,                              /* dst_mask */
+        false,                                 /* pcrel_offset */
+        BFD_RELOC_LARCH_PCADD_LO12,            /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "pcadd_lo12"),                         /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT_PCADD_HI20,     /* type (130).  */
+        12,                                    /* rightshift.  */
+        4,                                     /* size.  */
+        20,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        5,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_GOT_PCADD_HI20",              /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x1ffffe0,                             /* dst_mask */
+        true,                                  /* pcrel_offset */
+        BFD_RELOC_LARCH_GOT_PCADD_HI20,        /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "got_pcadd_hi20"),                     /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_GOT_PCADD_LO12,     /* type (131).  */
+        0,                                     /* rightshift.  */
+        4,                                     /* size.  */
+        12,                                    /* bitsize.  */
+        false,                                 /* pc_relative.  */
+        10,                                    /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_GOT_PCADD_LO12",              /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x3ffc00,                              /* dst_mask */
+        false,                                 /* pcrel_offset */
+        BFD_RELOC_LARCH_GOT_PCADD_LO12,        /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "got_pcadd_lo12"),                     /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE_PCADD_HI20,  /* type (132).  */
+        12,                                    /* rightshift.  */
+        4,                                     /* size.  */
+        20,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        5,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_IE_PCADD_HI20",           /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x1ffffe0,                             /* dst_mask */
+        true,                                  /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_IE_PCADD_HI20,     /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "ie_pcadd_hi20"),                      /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_IE_PCADD_LO12,  /* type (133).  */
+        0,                                     /* rightshift.  */
+        4,                                     /* size.  */
+        12,                                    /* bitsize.  */
+        false,                                 /* pc_relative.  */
+        10,                                    /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_IE_PCADD_LO12",           /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x3ffc00,                              /* dst_mask */
+        false,                                 /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_IE_PCADD_LO12,     /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "ie_pcadd_lo12"),                      /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LD_PCADD_HI20,  /* type (134).  */
+        12,                                    /* rightshift.  */
+        4,                                     /* size.  */
+        20,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        5,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_LD_PCADD_HI20",           /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x1ffffe0,                             /* dst_mask */
+        true,                                  /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_LD_PCADD_HI20,     /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "ld_pcadd_hi20"),                      /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_LD_PCADD_LO12,  /* type (135).  */
+        0,                                     /* rightshift.  */
+        4,                                     /* size.  */
+        12,                                    /* bitsize.  */
+        false,                                 /* pc_relative.  */
+        10,                                    /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_LD_PCADD_LO12",           /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x3ffc00,                              /* dst_mask */
+        false,                                 /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_LD_PCADD_LO12,     /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "ld_pcadd_lo12"),                      /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_GD_PCADD_HI20,  /* type (136).  */
+        12,                                    /* rightshift.  */
+        4,                                     /* size.  */
+        20,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        5,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_GD_PCADD_HI20",           /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x1ffffe0,                             /* dst_mask */
+        true,                                  /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_GD_PCADD_HI20,     /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "gd_pcadd_hi20"),                      /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_GD_PCADD_LO12,  /* type (137).  */
+        0,                                     /* rightshift.  */
+        4,                                     /* size.  */
+        12,                                    /* bitsize.  */
+        false,                                 /* pc_relative.  */
+        10,                                    /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_GD_PCADD_LO12",           /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x3ffc00,                              /* dst_mask */
+        false,                                 /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_GD_PCADD_LO12,     /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "gd_pcadd_lo12"),                      /* larch_reloc_type_name */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PCADD_HI20,        /* type (138).  */
+        12,                                    /* rightshift.  */
+        4,                                     /* size.  */
+        20,                                    /* bitsize.  */
+        true,                                  /* pc_relative.  */
+        5,                                     /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_DESC_PCADD_HI20",         /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask.  */
+        0x1ffffe0,                             /* dst_mask.  */
+        true,                                  /* pcrel_offset.  */
+        BFD_RELOC_LARCH_TLS_DESC_PCADD_HI20,   /* bfd_reloc_code_real_type.  */
+        reloc_bits,                            /* adjust_reloc_bits.  */
+        "desc_pcadd_hi20"),                    /* larch_reloc_type_name.  */
+
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PCADD_LO12,        /* type (139).  */
+        0,                                     /* rightshift.  */
+        4,                                     /* size.  */
+        12,                                    /* bitsize.  */
+        false,                                 /* pc_relative.  */
+        10,                                    /* bitpos.  */
+        complain_overflow_signed,              /* complain_on_overflow.  */
+        bfd_elf_generic_reloc,                 /* special_function.  */
+        "R_LARCH_TLS_DESC_PCADD_LO12",         /* name.  */
+        false,                                 /* partial_inplace.  */
+        0,                                     /* src_mask */
+        0x3ffc00,                              /* dst_mask */
+        false,                                 /* pcrel_offset */
+        BFD_RELOC_LARCH_TLS_DESC_PCADD_LO12,   /* bfd_reloc_code_real_type */
+        reloc_bits,                            /* adjust_reloc_bits */
+        "desc_pcadd_lo12"),                    /* larch_reloc_type_name */
 };
 
 reloc_howto_type *
index c22665935c9ecf99c254ad3f08d2a03bd074f8af..c8249710dff9f315085732dec84543eb81e7144f 100644 (file)
@@ -3590,6 +3590,19 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_LARCH_TLS_LD_PCREL20_S2",
   "BFD_RELOC_LARCH_TLS_GD_PCREL20_S2",
   "BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2",
+  "BFD_RELOC_LARCH_CALL30",
+  "BFD_RELOC_LARCH_PCADD_HI20",
+  "BFD_RELOC_LARCH_PCADD_LO12",
+  "BFD_RELOC_LARCH_GOT_PCADD_HI20",
+  "BFD_RELOC_LARCH_GOT_PCADD_LO12",
+  "BFD_RELOC_LARCH_TLS_IE_PCADD_HI20",
+  "BFD_RELOC_LARCH_TLS_IE_PCADD_LO12",
+  "BFD_RELOC_LARCH_TLS_LD_PCADD_HI20",
+  "BFD_RELOC_LARCH_TLS_LD_PCADD_LO12",
+  "BFD_RELOC_LARCH_TLS_GD_PCADD_HI20",
+  "BFD_RELOC_LARCH_TLS_GD_PCADD_LO12",
+  "BFD_RELOC_LARCH_TLS_DESC_PCADD_HI20",
+  "BFD_RELOC_LARCH_TLS_DESC_PCADD_LO12",
  "@@overflow: BFD_RELOC_UNUSED@@",
 };
 #endif
index 112f3439c70c0a5678f0efb82099b35857c26a46..699c042cece3d730e6a1ac6fbe87c631f8192c7a 100644 (file)
@@ -8248,6 +8248,33 @@ ENUMX
 ENUMX
   BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2
 
+ENUMX
+  BFD_RELOC_LARCH_CALL30
+ENUMX
+  BFD_RELOC_LARCH_PCADD_HI20
+ENUMX
+  BFD_RELOC_LARCH_PCADD_LO12
+ENUMX
+  BFD_RELOC_LARCH_GOT_PCADD_HI20
+ENUMX
+  BFD_RELOC_LARCH_GOT_PCADD_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE_PCADD_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_IE_PCADD_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_LD_PCADD_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_LD_PCADD_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_GD_PCADD_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_GD_PCADD_LO12
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_PCADD_HI20
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_PCADD_LO12
+
 ENUMDOC
   LARCH relocations.
 
index ca031a18dad93ed05baa6a49beb2257ae900a1d8..06641133a5cae591d0cd04c679d60f45c88f1ea3 100644 (file)
@@ -289,6 +289,41 @@ RELOC_NUMBER (R_LARCH_TLS_LD_PCREL20_S2, 124)
 RELOC_NUMBER (R_LARCH_TLS_GD_PCREL20_S2, 125)
 RELOC_NUMBER (R_LARCH_TLS_DESC_PCREL20_S2, 126)
 
+/* LA32R medium call
+   pcaddu12i + jirl
+   %call30(sym).  */
+RELOC_NUMBER (R_LARCH_CALL30, 127)
+
+/* LA32R PCREL: pcaddu12i, %pcadd_hi20(sym).  */
+RELOC_NUMBER (R_LARCH_PCADD_HI20, 128)
+/* LA32R PCREL: addi.w/ld.[bhw], %pcadd_lo12(sym).  */
+RELOC_NUMBER (R_LARCH_PCADD_LO12, 129)
+
+/* LA32R GOT: pcaddu12i, %got_pcadd_hi20(sym).  */
+RELOC_NUMBER (R_LARCH_GOT_PCADD_HI20, 130)
+/* LA32R GOT: ld.w, %got_pcadd_lo12(sym).  */
+RELOC_NUMBER (R_LARCH_GOT_PCADD_LO12, 131)
+
+/* LA32R TLS IE: pcaddu12i, %ie_pcadd_hi20(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_IE_PCADD_HI20, 132)
+/* LA32R TLS IE: ld.w, %ie_pcadd_lo12(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_IE_PCADD_LO12, 133)
+
+/* LA32R TLS LD: pcaddu12i, %ld_pcadd_hi20(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_LD_PCADD_HI20, 134)
+/* LA32R TLS LD: addi.w, %ld_pcadd_lo12(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_LD_PCADD_LO12, 135)
+
+/* LA32R TLS GD: pcaddu12i, %gd_pcadd_hi20(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_GD_PCADD_HI20, 136)
+/* LA32R TLS GD: addi.w, %gd_pcadd_lo12(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_GD_PCADD_LO12, 137)
+
+/* LA32R TLS DESC: pcaddu12i, %desc_pcadd_hi20(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_DESC_PCADD_HI20, 138)
+/* LA32R TLS DESC: addi.w, %desc_pcadd_lo12(sym).  */
+RELOC_NUMBER (R_LARCH_TLS_DESC_PCADD_LO12, 139)
+
 END_RELOC_NUMBERS (R_LARCH_count)
 
 /* Processor specific flags for the ELF header e_flags field.  */