<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 28, 2023 at 4:51 PM Tatsuyuki Ishi <<a href="mailto:ishitatsuyuki@gmail.com">ishitatsuyuki@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">bfd/<br>
    * elfxx-riscv.c: Add 5 TLSDESC reloc descriptions.<br>
    * reloc.c: Likewise.<br>
    * libbfd.h: Regenerate.<br>
    * bfd-in2.h: Regenerate.<br>
include/<br>
    * elf/riscv.h: Add 5 TLSDESC reloc descriptions.<br>
---<br>
 bfd/bfd-in2.h       |  4 +++<br>
 bfd/elfxx-riscv.c   | 75 ++++++++++++++++++++++++++++++++++++++++++++-<br>
 bfd/libbfd.h        |  4 +++<br>
 bfd/reloc.c         |  8 +++++<br>
 include/elf/riscv.h |  5 +++<br>
 5 files changed, 95 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h<br>
index 040d5560cdf..9bc6b9885ff 100644<br>
--- a/bfd/bfd-in2.h<br>
+++ b/bfd/bfd-in2.h<br>
@@ -5407,6 +5407,10 @@ enum bfd_reloc_code_real<br>
   BFD_RELOC_RISCV_TLS_DTPREL64,<br>
   BFD_RELOC_RISCV_TLS_TPREL32,<br>
   BFD_RELOC_RISCV_TLS_TPREL64,<br>
+  BFD_RELOC_RISCV_TLSDESC_HI20,<br>
+  BFD_RELOC_RISCV_TLSDESC_LOAD_LO12,<br>
+  BFD_RELOC_RISCV_TLSDESC_ADD_LO12,<br>
+  BFD_RELOC_RISCV_TLSDESC_CALL,<br>
   BFD_RELOC_RISCV_ALIGN,<br>
   BFD_RELOC_RISCV_RVC_BRANCH,<br>
   BFD_RELOC_RISCV_RVC_JUMP,<br>
diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c<br>
index 567631e7d96..65d676b06b1 100644<br>
--- a/bfd/elfxx-riscv.c<br>
+++ b/bfd/elfxx-riscv.c<br>
@@ -218,7 +218,20 @@ static reloc_howto_type howto_table[] =<br>
         MINUS_ONE,                     /* dst_mask */<br>
         false),                        /* pcrel_offset */<br>
<br>
-  EMPTY_HOWTO (12),<br>
+  HOWTO (R_RISCV_TLSDESC,              /* type */<br>
+        0,                             /* rightshift */<br>
+        0,                             /* size is handled by dynamic linker */<br>
+        0,                             /* bitsize */<br>
+        false,                         /* pc_relative */<br>
+        0,                             /* bitpos */<br>
+        complain_overflow_dont,        /* complain_on_overflow */<br>
+        bfd_elf_generic_reloc,         /* special_function */<br>
+        "R_RISCV_TLSDESC",             /* name */<br>
+        false,                         /* partial_inplace */<br>
+        0,                             /* src_mask */<br>
+        MINUS_ONE,                     /* dst_mask */<br>
+        false),                        /* pcrel_offset */<br>
+<br>
   EMPTY_HOWTO (13),<br>
   EMPTY_HOWTO (14),<br>
   EMPTY_HOWTO (15),<br>
@@ -808,6 +821,62 @@ static reloc_howto_type howto_table[] =<br>
         0,                             /* src_mask */<br>
         0,                             /* dst_mask */<br>
         false),                        /* pcrel_offset */<br>
+<br>
+  HOWTO (R_RISCV_TLSDESC_HI20,         /* type */<br>
+        0,                             /* rightshift */<br>
+        4,                             /* size */<br>
+        32,                            /* bitsize */<br>
+        true,                          /* pc_relative */<br>
+        0,                             /* bitpos */<br>
+        complain_overflow_signed,      /* complain_on_overflow */<br>
+        bfd_elf_generic_reloc,         /* special_function */<br>
+        "R_RISCV_TLSDESC_HI20",        /* name */<br>
+        true,                          /* partial_inplace */<br>
+        0,                             /* src_mask */<br>
+        ENCODE_UTYPE_IMM (-1U),        /* dst_mask */<br>
+        false),                        /* pcrel_offset */<br></blockquote><div><br></div><div>complain_overflow_dont?<br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
+  HOWTO (R_RISCV_TLSDESC_LOAD_LO12,    /* type */<br>
+        0,                             /* rightshift */<br>
+        4,                             /* size */<br>
+        32,                            /* bitsize */<br>
+        false,                         /* pc_relative */<br>
+        0,                             /* bitpos */<br>
+        complain_overflow_signed,      /* complain_on_overflow */<br>
+        bfd_elf_generic_reloc,         /* special_function */<br>
+        "R_RISCV_TLSDESC_LOAD_LO12",   /* name */<br>
+        false,                         /* partial_inplace */<br>
+        0,                             /* src_mask */<br>
+        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */<br>
+        false),                        /* pcrel_offset */<br></blockquote><div><br></div><div>Likewise.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
+  HOWTO (R_RISCV_TLSDESC_ADD_LO12,     /* type */<br>
+        0,                             /* rightshift */<br>
+        4,                             /* size */<br>
+        32,                            /* bitsize */<br>
+        false,                         /* pc_relative */<br>
+        0,                             /* bitpos */<br>
+        complain_overflow_signed,      /* complain_on_overflow */<br>
+        bfd_elf_generic_reloc,         /* special_function */<br>
+        "R_RISCV_TLSDESC_ADD_LO12",    /* name */<br>
+        false,                         /* partial_inplace */<br>
+        0,                             /* src_mask */<br>
+        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */<br>
+        false),                        /* pcrel_offset */<br></blockquote><div><br></div><div>Likewise.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
+  HOWTO (R_RISCV_TLSDESC_CALL,         /* type */<br>
+        0,                             /* rightshift */<br>
+        0,                             /* size */<br>
+        0,                             /* bitsize */<br>
+        false,                         /* pc_relative */<br>
+        0,                             /* bitpos */<br>
+        complain_overflow_dont,        /* complain_on_overflow */<br>
+        bfd_elf_generic_reloc,         /* special_function */<br>
+        "R_RISCV_TLSDESC_CALL",        /* name */<br>
+        false,                         /* partial_inplace */<br>
+        0,                             /* src_mask */<br>
+        ENCODE_ITYPE_IMM (-1U),        /* dst_mask */<br>
+        false)                         /* pcrel_offset */<br>
 };<br>
<br>
 static reloc_howto_type howto_table_internal[] =<br>
@@ -935,6 +1004,10 @@ static const struct elf_reloc_map riscv_reloc_map[] =<br>
   { BFD_RELOC_RISCV_TPREL_LO12_I, R_RISCV_TPREL_LO12_I },<br>
   { BFD_RELOC_RISCV_TLS_GOT_HI20, R_RISCV_TLS_GOT_HI20 },<br>
   { BFD_RELOC_RISCV_TLS_GD_HI20, R_RISCV_TLS_GD_HI20 },<br>
+  { BFD_RELOC_RISCV_TLSDESC_HI20, R_RISCV_TLSDESC_HI20 },<br>
+  { BFD_RELOC_RISCV_TLSDESC_LOAD_LO12, R_RISCV_TLSDESC_LOAD_LO12 },<br>
+  { BFD_RELOC_RISCV_TLSDESC_ADD_LO12, R_RISCV_TLSDESC_ADD_LO12 },<br>
+  { BFD_RELOC_RISCV_TLSDESC_CALL, R_RISCV_TLSDESC_CALL },<br>
   { BFD_RELOC_RISCV_ALIGN, R_RISCV_ALIGN },<br>
   { BFD_RELOC_RISCV_RVC_BRANCH, R_RISCV_RVC_BRANCH },<br>
   { BFD_RELOC_RISCV_RVC_JUMP, R_RISCV_RVC_JUMP },<br>
diff --git a/bfd/libbfd.h b/bfd/libbfd.h<br>
index cc432677a81..919b63d51a1 100644<br>
--- a/bfd/libbfd.h<br>
+++ b/bfd/libbfd.h<br>
@@ -2400,6 +2400,10 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",<br>
   "BFD_RELOC_RISCV_TLS_DTPREL64",<br>
   "BFD_RELOC_RISCV_TLS_TPREL32",<br>
   "BFD_RELOC_RISCV_TLS_TPREL64",<br>
+  "BFD_RELOC_RISCV_TLSDESC_HI20",<br>
+  "BFD_RELOC_RISCV_TLSDESC_LOAD_LO12",<br>
+  "BFD_RELOC_RISCV_TLSDESC_ADD_LO12",<br>
+  "BFD_RELOC_RISCV_TLSDESC_CALL",<br>
   "BFD_RELOC_RISCV_ALIGN",<br>
   "BFD_RELOC_RISCV_RVC_BRANCH",<br>
   "BFD_RELOC_RISCV_RVC_JUMP",<br>
diff --git a/bfd/reloc.c b/bfd/reloc.c<br>
index 93ebad879e0..345f444d17a 100644<br>
--- a/bfd/reloc.c<br>
+++ b/bfd/reloc.c<br>
@@ -4984,6 +4984,14 @@ ENUMX<br>
   BFD_RELOC_RISCV_TLS_TPREL32<br>
 ENUMX<br>
   BFD_RELOC_RISCV_TLS_TPREL64<br>
+ENUMX<br>
+  BFD_RELOC_RISCV_TLSDESC_HI20<br>
+ENUMX<br>
+  BFD_RELOC_RISCV_TLSDESC_LOAD_LO12<br>
+ENUMX<br>
+  BFD_RELOC_RISCV_TLSDESC_ADD_LO12<br>
+ENUMX<br>
+  BFD_RELOC_RISCV_TLSDESC_CALL<br>
 ENUMX<br>
   BFD_RELOC_RISCV_ALIGN<br>
 ENUMX<br>
diff --git a/include/elf/riscv.h b/include/elf/riscv.h<br>
index 56d419c665b..7f5c0407ac8 100644<br>
--- a/include/elf/riscv.h<br>
+++ b/include/elf/riscv.h<br>
@@ -44,6 +44,7 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)<br>
   RELOC_NUMBER (R_RISCV_TLS_DTPREL64, 9)<br>
   RELOC_NUMBER (R_RISCV_TLS_TPREL32, 10)<br>
   RELOC_NUMBER (R_RISCV_TLS_TPREL64, 11)<br>
+  RELOC_NUMBER (R_RISCV_TLSDESC, 12)<br>
<br>
   /* Relocation types not used by the dynamic linker.  */<br>
   RELOC_NUMBER (R_RISCV_BRANCH, 16)<br>
@@ -90,6 +91,10 @@ START_RELOC_NUMBERS (elf_riscv_reloc_type)<br>
   /* Reserved 59 for R_RISCV_PLT32.  */<br>
   RELOC_NUMBER (R_RISCV_SET_ULEB128, 60)<br>
   RELOC_NUMBER (R_RISCV_SUB_ULEB128, 61)<br>
+  RELOC_NUMBER (R_RISCV_TLSDESC_HI20, 62)<br>
+  RELOC_NUMBER (R_RISCV_TLSDESC_LOAD_LO12, 63)<br>
+  RELOC_NUMBER (R_RISCV_TLSDESC_ADD_LO12, 64)<br>
+  RELOC_NUMBER (R_RISCV_TLSDESC_CALL, 65)<br>
 END_RELOC_NUMBERS (R_RISCV_max)<br>
<br>
 /* Internal relocations used exclusively by the relaxation pass.  */<br>
-- <br>
2.43.0<br>
<br>
</blockquote></div></div>