]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
RISC-V: Add TLSDESC reloc definitions.
authorTatsuyuki Ishi <ishitatsuyuki@gmail.com>
Tue, 20 Feb 2024 17:55:49 +0000 (02:55 +0900)
committerNelson Chu <nelson@rivosinc.com>
Thu, 29 Feb 2024 07:02:49 +0000 (15:02 +0800)
bfd/
    * elfxx-riscv.c: Add 5 TLSDESC reloc descriptions.
    * reloc.c: Likewise.
    * libbfd.h: Regenerate.
    * bfd-in2.h: Regenerate.
include/
    * elf/riscv.h: Add 5 TLSDESC reloc descriptions.

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

index 37917845cf5ac93ec67b87513b5a6c570d30c107..a335df522d20a6435a6750ef89af3a57642cf656 100644 (file)
@@ -5420,6 +5420,10 @@ enum bfd_reloc_code_real
   BFD_RELOC_RISCV_TLS_DTPREL64,
   BFD_RELOC_RISCV_TLS_TPREL32,
   BFD_RELOC_RISCV_TLS_TPREL64,
+  BFD_RELOC_RISCV_TLSDESC_HI20,
+  BFD_RELOC_RISCV_TLSDESC_LOAD_LO12,
+  BFD_RELOC_RISCV_TLSDESC_ADD_LO12,
+  BFD_RELOC_RISCV_TLSDESC_CALL,
   BFD_RELOC_RISCV_ALIGN,
   BFD_RELOC_RISCV_RVC_BRANCH,
   BFD_RELOC_RISCV_RVC_JUMP,
index 9a121b4712145030d5e69a8c05282d898c89fd7a..a4aa71fd809cddff5c8f4115592345aea9250bfa 100644 (file)
@@ -218,7 +218,20 @@ static reloc_howto_type howto_table[] =
         MINUS_ONE,                     /* dst_mask */
         false),                        /* pcrel_offset */
 
-  EMPTY_HOWTO (12),
+  HOWTO (R_RISCV_TLSDESC,              /* type */
+        0,                             /* rightshift */
+        0,                             /* size is handled by dynamic linker */
+        0,                             /* bitsize */
+        false,                         /* pc_relative */
+        0,                             /* bitpos */
+        complain_overflow_dont,        /* complain_on_overflow */
+        bfd_elf_generic_reloc,         /* special_function */
+        "R_RISCV_TLSDESC",             /* name */
+        false,                         /* partial_inplace */
+        0,                             /* src_mask */
+        MINUS_ONE,                     /* dst_mask */
+        false),                        /* pcrel_offset */
+
   EMPTY_HOWTO (13),
   EMPTY_HOWTO (14),
   EMPTY_HOWTO (15),
@@ -808,6 +821,62 @@ static reloc_howto_type howto_table[] =
         0,                             /* src_mask */
         0,                             /* dst_mask */
         false),                        /* pcrel_offset */
+
+  HOWTO (R_RISCV_TLSDESC_HI20,         /* type */
+        0,                             /* rightshift */
+        4,                             /* size */
+        32,                            /* bitsize */
+        true,                          /* pc_relative */
+        0,                             /* bitpos */
+        complain_overflow_dont,        /* complain_on_overflow */
+        bfd_elf_generic_reloc,         /* special_function */
+        "R_RISCV_TLSDESC_HI20",        /* name */
+        true,                          /* partial_inplace */
+        0,                             /* src_mask */
+        ENCODE_UTYPE_IMM (-1U),        /* dst_mask */
+        false),                        /* pcrel_offset */
+
+  HOWTO (R_RISCV_TLSDESC_LOAD_LO12,    /* type */
+        0,                             /* rightshift */
+        4,                             /* size */
+        32,                            /* bitsize */
+        false,                         /* pc_relative */
+        0,                             /* bitpos */
+        complain_overflow_dont,        /* complain_on_overflow */
+        bfd_elf_generic_reloc,         /* special_function */
+        "R_RISCV_TLSDESC_LOAD_LO12",   /* name */
+        false,                         /* partial_inplace */
+        0,                             /* src_mask */
+        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */
+        false),                        /* pcrel_offset */
+
+  HOWTO (R_RISCV_TLSDESC_ADD_LO12,     /* type */
+        0,                             /* rightshift */
+        4,                             /* size */
+        32,                            /* bitsize */
+        false,                         /* pc_relative */
+        0,                             /* bitpos */
+        complain_overflow_dont,        /* complain_on_overflow */
+        bfd_elf_generic_reloc,         /* special_function */
+        "R_RISCV_TLSDESC_ADD_LO12",    /* name */
+        false,                         /* partial_inplace */
+        0,                             /* src_mask */
+        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */
+        false),                        /* pcrel_offset */
+
+  HOWTO (R_RISCV_TLSDESC_CALL,         /* type */
+        0,                             /* rightshift */
+        0,                             /* size */
+        0,                             /* bitsize */
+        false,                         /* pc_relative */
+        0,                             /* bitpos */
+        complain_overflow_dont,        /* complain_on_overflow */
+        bfd_elf_generic_reloc,         /* special_function */
+        "R_RISCV_TLSDESC_CALL",        /* name */
+        false,                         /* partial_inplace */
+        0,                             /* src_mask */
+        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */
+        false)                         /* pcrel_offset */
 };
 
 static reloc_howto_type howto_table_internal[] =
@@ -935,6 +1004,10 @@ static const struct elf_reloc_map riscv_reloc_map[] =
   { BFD_RELOC_RISCV_TPREL_LO12_I, R_RISCV_TPREL_LO12_I },
   { BFD_RELOC_RISCV_TLS_GOT_HI20, R_RISCV_TLS_GOT_HI20 },
   { BFD_RELOC_RISCV_TLS_GD_HI20, R_RISCV_TLS_GD_HI20 },
+  { BFD_RELOC_RISCV_TLSDESC_HI20, R_RISCV_TLSDESC_HI20 },
+  { BFD_RELOC_RISCV_TLSDESC_LOAD_LO12, R_RISCV_TLSDESC_LOAD_LO12 },
+  { BFD_RELOC_RISCV_TLSDESC_ADD_LO12, R_RISCV_TLSDESC_ADD_LO12 },
+  { BFD_RELOC_RISCV_TLSDESC_CALL, R_RISCV_TLSDESC_CALL },
   { BFD_RELOC_RISCV_ALIGN, R_RISCV_ALIGN },
   { BFD_RELOC_RISCV_RVC_BRANCH, R_RISCV_RVC_BRANCH },
   { BFD_RELOC_RISCV_RVC_JUMP, R_RISCV_RVC_JUMP },
index 40bbe6a3886aa8b5d792b325e20ba0c1259f4c37..49f63a0b8e5a69582560b287196a71c23f6af24d 100644 (file)
@@ -2409,6 +2409,10 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_RISCV_TLS_DTPREL64",
   "BFD_RELOC_RISCV_TLS_TPREL32",
   "BFD_RELOC_RISCV_TLS_TPREL64",
+  "BFD_RELOC_RISCV_TLSDESC_HI20",
+  "BFD_RELOC_RISCV_TLSDESC_LOAD_LO12",
+  "BFD_RELOC_RISCV_TLSDESC_ADD_LO12",
+  "BFD_RELOC_RISCV_TLSDESC_CALL",
   "BFD_RELOC_RISCV_ALIGN",
   "BFD_RELOC_RISCV_RVC_BRANCH",
   "BFD_RELOC_RISCV_RVC_JUMP",
index 7583b7fd5525d8271fc3a7f7772876388c599543..a187afe9b5629b7d48d0e3c95c0a510efc1f3875 100644 (file)
@@ -5002,6 +5002,14 @@ ENUMX
   BFD_RELOC_RISCV_TLS_TPREL32
 ENUMX
   BFD_RELOC_RISCV_TLS_TPREL64
+ENUMX
+  BFD_RELOC_RISCV_TLSDESC_HI20
+ENUMX
+  BFD_RELOC_RISCV_TLSDESC_LOAD_LO12
+ENUMX
+  BFD_RELOC_RISCV_TLSDESC_ADD_LO12
+ENUMX
+  BFD_RELOC_RISCV_TLSDESC_CALL
 ENUMX
   BFD_RELOC_RISCV_ALIGN
 ENUMX
index 2000cf21b9d32f55bd47180625ff91fc04f17b35..c1e73f7f5c02044d2ee144610e91c933be5378ed 100644 (file)
@@ -44,6 +44,7 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)
   RELOC_NUMBER (R_RISCV_TLS_DTPREL64, 9)
   RELOC_NUMBER (R_RISCV_TLS_TPREL32, 10)
   RELOC_NUMBER (R_RISCV_TLS_TPREL64, 11)
+  RELOC_NUMBER (R_RISCV_TLSDESC, 12)
 
   /* Relocation types not used by the dynamic linker.  */
   RELOC_NUMBER (R_RISCV_BRANCH, 16)
@@ -90,6 +91,10 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)
   /* Reserved 59 for R_RISCV_PLT32.  */
   RELOC_NUMBER (R_RISCV_SET_ULEB128, 60)
   RELOC_NUMBER (R_RISCV_SUB_ULEB128, 61)
+  RELOC_NUMBER (R_RISCV_TLSDESC_HI20, 62)
+  RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)
+  RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)
+  RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)
 END_RELOC_NUMBERS (R_RISCV_max)
 
 /* Internal relocations used exclusively by the relaxation pass.  */