<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>