<html><head></head><body dir="auto" style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div class="AppleOriginalContents" style="direction: ltr;"><blockquote type="cite"><div>On Feb 19, 2024, at 10:44, Nelson Chu <nelson@rivosinc.com> wrote:</div><br class="Apple-interchange-newline"><div><meta charset="UTF-8"><br class="Apple-interchange-newline"><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div class="gmail_quote" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><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;">gas/<br>   <span class="Apple-converted-space"> </span>* tc-riscv.c (percent_op_*): Add support for %tlsdesc_hi,<br>   <span class="Apple-converted-space"> </span>%tlsdesc_load_lo, %tlsdesc_add_lo and %tlsdesc_call. percent_op_rtype<br>   <span class="Apple-converted-space"> </span>renamed to percent_op_relax_only as this matcher is extended to handle<br>   <span class="Apple-converted-space"> </span>jalr as well which is not R-type.<br>   <span class="Apple-converted-space"> </span>(riscv_ip): Apply the percent_op_relax_only rename and update comment.<br>   <span class="Apple-converted-space"> </span>(md_apply_fix): Add TLSDESC_* to relaxable list. Add TLSDESC_HI20 to<br>   <span class="Apple-converted-space"> </span>TLS relocation check list.<br>   <span class="Apple-converted-space"> </span>* testsuite/gas/riscv/tlsdesc.*: New test cases for TLSDESC relocation<br>   <span class="Apple-converted-space"> </span>generation.<br>opcodes/<br>   <span class="Apple-converted-space"> </span>* riscv-opc.c (riscv_opcodes): Add a new syntax for jalr with<br>   <span class="Apple-converted-space"> </span>%tlsdesc_call annotations.<br>---<br> gas/config/tc-riscv.c             | 18 +++++++++++++-----<br> gas/testsuite/gas/riscv/tlsdesc.d | 22 ++++++++++++++++++++++<br> gas/testsuite/gas/riscv/tlsdesc.s | 24 ++++++++++++++++++++++++<br> opcodes/riscv-opc.c               |  1 +<br> 4 files changed, 60 insertions(+), 5 deletions(-)<br> create mode 100644 gas/testsuite/gas/riscv/tlsdesc.d<br> create mode 100644 gas/testsuite/gas/riscv/tlsdesc.s<br><br>diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c<br>index 04738d5e00c..376d2a34530 100644<br>--- a/gas/config/tc-riscv.c<br>+++ b/gas/config/tc-riscv.c<br>@@ -2113,6 +2113,7 @@ static const struct percent_op_match percent_op_utype[] =<br>   {"tprel_hi", BFD_RELOC_RISCV_TPREL_HI20},<br>   {"pcrel_hi", BFD_RELOC_RISCV_PCREL_HI20},<br>   {"got_pcrel_hi", BFD_RELOC_RISCV_GOT_HI20},<br>+  {"tlsdesc_hi", BFD_RELOC_RISCV_TLSDESC_HI20},<br>   {"tls_ie_pcrel_hi", BFD_RELOC_RISCV_TLS_GOT_HI20},<br>   {"tls_gd_pcrel_hi", BFD_RELOC_RISCV_TLS_GD_HI20},<br>   {"hi", BFD_RELOC_RISCV_HI20},<br>@@ -2124,6 +2125,8 @@ static const struct percent_op_match percent_op_itype[] =<br>   {"lo", BFD_RELOC_RISCV_LO12_I},<br>   {"tprel_lo", BFD_RELOC_RISCV_TPREL_LO12_I},<br>   {"pcrel_lo", BFD_RELOC_RISCV_PCREL_LO12_I},<br>+  {"tlsdesc_load_lo", BFD_RELOC_RISCV_TLSDESC_LOAD_LO12},<br>+  {"tlsdesc_add_lo", BFD_RELOC_RISCV_TLSDESC_ADD_LO12},<br>   {0, 0}<br> };<br><br>@@ -2135,8 +2138,9 @@ static const struct percent_op_match percent_op_stype[] =<br>   {0, 0}<br> };<br><br>-static const struct percent_op_match percent_op_rtype[] =<br>+static const struct percent_op_match percent_op_relax_only[] =<br> {<br>+  {"tlsdesc_call", BFD_RELOC_RISCV_TLSDESC_CALL},<br>   {"tprel_add", BFD_RELOC_RISCV_TPREL_ADD},<br>   {0, 0}<br> };<br>@@ -3244,10 +3248,10 @@ riscv_ip (char *str, struct riscv_cl_insn *ip, expressionS *imm_expr,<br>             <span class="Apple-converted-space"> </span>*imm_reloc = BFD_RELOC_RISCV_LO12_I;<br>             <span class="Apple-converted-space"> </span>goto load_store;<br>           <span class="Apple-converted-space"> </span>case '1':<br>-             /* This is used for TLS, where the fourth operand is<br>-                %tprel_add, to get a relocation applied to an add<br>-                instruction, for relaxation to use.  */<br>-             p = percent_op_rtype;<br>+             /* This is used for TLS relocations that acts as relaxation<br>+                markers and do not change the instruction encoding,<br>+                i.e. %tprel_add and %tlsdesc_call.  */<br>+             p = percent_op_relax_only;<br></blockquote><div><br></div><div>Okay, looks good.</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;">             <span class="Apple-converted-space"> </span>goto alu_op;<br>           <span class="Apple-converted-space"> </span>case '0': /* AMO displacement, which must be zero.  */<br>           <span class="Apple-converted-space"> </span>load_store:<br>@@ -4036,6 +4040,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)<br>     case BFD_RELOC_RISCV_TPREL_LO12_I:<br>     case BFD_RELOC_RISCV_TPREL_LO12_S:<br>     case BFD_RELOC_RISCV_TPREL_ADD:<br>+    case BFD_RELOC_RISCV_TLSDESC_HI20:<br>       relaxable = true;<br>       /* Fall through.  */<br><br>@@ -4209,6 +4214,9 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)<br><br>     case BFD_RELOC_RISCV_CALL:<br>     case BFD_RELOC_RISCV_CALL_PLT:<br>+    case BFD_RELOC_RISCV_TLSDESC_LOAD_LO12:<br>+    case BFD_RELOC_RISCV_TLSDESC_ADD_LO12:<br>+    case BFD_RELOC_RISCV_TLSDESC_CALL:<br>       relaxable = true;<br>       break;<br><br>diff --git a/gas/testsuite/gas/riscv/tlsdesc.d b/gas/testsuite/gas/riscv/tlsdesc.d<br>new file mode 100644<br>index 00000000000..11872953d23<br>--- /dev/null<br>+++ b/gas/testsuite/gas/riscv/tlsdesc.d<br>@@ -0,0 +1,22 @@<br>+#as: -march=rv32ia<br></blockquote><div><br></div><div>Probably can remove the architecture setting, so that we can test more situations.</div></div></div></blockquote><div class="AppleOriginalContents" style="direction: ltr;"><br></div>Removed it in v4.</div><div class="AppleOriginalContents" style="direction: ltr;"><br><blockquote type="cite"><div><div class="gmail_quote" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><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;">+#source: tlsdesc.s<br>+#readelf: -Wr<br></blockquote><div><br></div><div>#objdump: -dr maye be better.</div></div></div></blockquote><div class="AppleOriginalContents" style="direction: ltr;"><br></div><div class="AppleOriginalContents" style="direction: ltr;">Changed to that and updated the snapshot. Please take another look.</div><br><blockquote type="cite"><div><div class="gmail_quote" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><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;">+<br>+Relocation section '.rela.text' at offset 0x[0-9a-f]+ contains 16 entries:<br>+ +Offset +Info +Type +Sym. Value +Symbol's Name \+ Addend<br>+0+ +0+a3e +R_RISCV_TLSDESC_HI20 +0+ +sg1 \+ 0<br>+0+ +0+33 +R_RISCV_RELAX + 0<br>+0+4 +0+63f +R_RISCV_TLSDESC_LOAD_LO12 0+ +\.desc1 \+ 0<br>+0+4 +0+33 +R_RISCV_RELAX + 0<br>+0+8 +0+640 +R_RISCV_TLSDESC_ADD_LO12 0+ +\.desc1 \+ 0<br>+0+8 +0+33 +R_RISCV_RELAX + 0<br>+0+c +0+641 +R_RISCV_TLSDESC_CALL +0+ +\.desc1 \+ 0<br>+0+c +0+33 +R_RISCV_RELAX + 0<br>+0+10 +0+53e +R_RISCV_TLSDESC_HI20 +0+4 +sl1 \+ 0<br>+0+10 +0+33 +R_RISCV_RELAX + 0<br>+0+14 +0+83f +R_RISCV_TLSDESC_LOAD_LO12 0+10 +\.desc2 \+ 0<br>+0+14 +0+33 +R_RISCV_RELAX + 0<br>+0+18 +0+840 +R_RISCV_TLSDESC_ADD_LO12 0+10 +\.desc2 \+ 0<br>+0+18 +0+33 +R_RISCV_RELAX +0<br>+0+1c +0+841 +R_RISCV_TLSDESC_CALL +0+10 +\.desc2 \+ 0<br>+0+1c +0+33 +R_RISCV_RELAX +0</blockquote><div><br></div><div>[ ] means [space+tab]</div><div><br></div><div><div>0+000 <span style="font-family: "Helvetica Neue"; font-size: 13px;"><_start>:</span></div><div><span style="font-family: "Helvetica Neue"; font-size: 13px;">[ ]+0:[ </span><span style="font-family: "Helvetica Neue"; font-size: 13px;">]+[0-9a-f]+[ ]+auipc[ ]+a0,0x0</span></div><div><span style="font-family: "Helvetica Neue"; font-size: 13px;">[ ]+0</span><span style="font-family: "Helvetica Neue"; font-size: 13px;">:[ ]+</span><span style="font-family: "Helvetica Neue"; font-size: 13px;">R_RISCV_TLSDESC_HI20[ ]+sg1</span></div></div><div><span style="font-size: 13px; font-family: "Helvetica Neue";">[ ]+0</span><span style="font-size: 13px; font-family: "Helvetica Neue";">:[ ]+</span><span style="font-size: 13px; font-family: "Helvetica Neue";">R_RISCV_RELAX[ ]+0</span><span style="font-family: "Helvetica Neue"; font-size: 13px;"><br></span></div><div>... </div><div><div style="margin: 0px; font-stretch: normal; font-size: 13px; line-height: normal; font-family: "Helvetica Neue"; font-size-adjust: none; font-kerning: auto; font-variant-alternates: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-east-asian: normal; font-feature-settings: normal;"><br></div></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;">diff --git a/gas/testsuite/gas/riscv/tlsdesc.s b/gas/testsuite/gas/riscv/tlsdesc.s<br>new file mode 100644<br>index 00000000000..15468d5f947<br>--- /dev/null<br>+++ b/gas/testsuite/gas/riscv/tlsdesc.s<br>@@ -0,0 +1,24 @@<br>+       .section        .tbss,"awT",@nobits<br>+       .global sg1<br>+sg1:<br>+       .zero   4<br>+sl1:<br>+       .zero   4<br>+<br>+       .text<br>+       .globl  _start<br>+       .type   _start,@function<br>+_start:<br>+.desc1:<br>+       auipc   a0, %tlsdesc_hi(sg1)<br>+       lw      t0, %tlsdesc_load_lo(.desc1)(a0)<br>+       addi    a0, a0, %tlsdesc_add_lo(.desc1)<br>+       jalr    t0, t0, %tlsdesc_call(.desc1)<br>+<br>+.desc2:<br>+       auipc   a0, %tlsdesc_hi(sl1)<br>+       lw      t0, %tlsdesc_load_lo(.desc2)(a0)<br>+       addi    a0, a0, %tlsdesc_add_lo(.desc2)<br>+       jalr    t0, t0, %tlsdesc_call(.desc2)<br>+<br>+       ret<br>diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c<br>index bf19978e025..edaf4b0c8b5 100644<br>--- a/opcodes/riscv-opc.c<br>+++ b/opcodes/riscv-opc.c<br>@@ -372,6 +372,7 @@ const struct riscv_opcode riscv_opcodes[] =<br> {"jalr",        0, INSN_CLASS_I, "s,j",       MATCH_JALR|(X_RA << OP_SH_RD), MASK_JALR|MASK_RD, match_opcode, INSN_ALIAS|INSN_JSR },<br> {"jalr",        0, INSN_CLASS_I, "d,s",       MATCH_JALR, MASK_JALR|MASK_IMM, match_opcode, INSN_ALIAS|INSN_JSR },<br> {"jalr",        0, INSN_CLASS_I, "d,o(s)",    MATCH_JALR, MASK_JALR, match_opcode, INSN_JSR },<br>+{"jalr",        0, INSN_CLASS_I, "d,s,1",     MATCH_JALR, MASK_JALR|MASK_IMM, match_opcode, INSN_JSR },<br> {"jalr",        0, INSN_CLASS_I, "d,s,j",     MATCH_JALR, MASK_JALR, match_opcode, INSN_JSR },<br> {"j",           0, INSN_CLASS_C, "Ca",        MATCH_C_J, MASK_C_J, match_opcode, INSN_ALIAS|INSN_BRANCH },<br> {"j",           0, INSN_CLASS_I, "a",         MATCH_JAL, MASK_JAL|MASK_RD, match_opcode, INSN_ALIAS|INSN_BRANCH },<br>--<span class="Apple-converted-space"> </span><br>2.43.0</blockquote></div></div></blockquote></div><br></body></html>