mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
RISC-V: Support assembler modifier %got_pcrel_hi.
gas/ * config/tc-riscv.c: Support the modifier %got_pcrel_hi. * doc/c-riscv.texi: Add documentation. * testsuite/gas/riscv/no-relax-reloc.d: Add test case for the new modifier %got_pcrel_hi. * testsuite/gas/riscv/no-relax-reloc.s: Likewise. * testsuite/gas/riscv/relax-reloc.d: Likewise. * testsuite/gas/riscv/relax-reloc.s: Likewise.
This commit is contained in:
gas
@ -1,5 +1,14 @@
|
|||||||
2020-03-04 Nelson Chu <nelson.chu@sifive.com>
|
2020-03-04 Nelson Chu <nelson.chu@sifive.com>
|
||||||
|
|
||||||
|
* config/tc-riscv.c (percent_op_utype): Support the modifier
|
||||||
|
%got_pcrel_hi.
|
||||||
|
* doc/c-riscv.texi: Add documentation.
|
||||||
|
* testsuite/gas/riscv/no-relax-reloc.d: Add test case for the new
|
||||||
|
modifier %got_pcrel_hi.
|
||||||
|
* testsuite/gas/riscv/no-relax-reloc.s: Likewise.
|
||||||
|
* testsuite/gas/riscv/relax-reloc.d: Likewise.
|
||||||
|
* testsuite/gas/riscv/relax-reloc.s: Likewise.
|
||||||
|
|
||||||
* doc/c-riscv.texi (relocation modifiers): Add documentation.
|
* doc/c-riscv.texi (relocation modifiers): Add documentation.
|
||||||
(RISC-V-Formats): Update the section name from "Instruction Formats"
|
(RISC-V-Formats): Update the section name from "Instruction Formats"
|
||||||
to "RISC-V Instruction Formats".
|
to "RISC-V Instruction Formats".
|
||||||
|
@ -1308,6 +1308,7 @@ static const struct percent_op_match percent_op_utype[] =
|
|||||||
{
|
{
|
||||||
{"%tprel_hi", BFD_RELOC_RISCV_TPREL_HI20},
|
{"%tprel_hi", BFD_RELOC_RISCV_TPREL_HI20},
|
||||||
{"%pcrel_hi", BFD_RELOC_RISCV_PCREL_HI20},
|
{"%pcrel_hi", BFD_RELOC_RISCV_PCREL_HI20},
|
||||||
|
{"%got_pcrel_hi", BFD_RELOC_RISCV_GOT_HI20},
|
||||||
{"%tls_ie_pcrel_hi", BFD_RELOC_RISCV_TLS_GOT_HI20},
|
{"%tls_ie_pcrel_hi", BFD_RELOC_RISCV_TLS_GOT_HI20},
|
||||||
{"%tls_gd_pcrel_hi", BFD_RELOC_RISCV_TLS_GD_HI20},
|
{"%tls_gd_pcrel_hi", BFD_RELOC_RISCV_TLS_GD_HI20},
|
||||||
{"%hi", BFD_RELOC_RISCV_HI20},
|
{"%hi", BFD_RELOC_RISCV_HI20},
|
||||||
|
@ -257,6 +257,23 @@ Or you can use the pseudo lla/lw/sw/... instruction to do this.
|
|||||||
lla a0, @var{symbol}
|
lla a0, @var{symbol}
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
|
@item %got_pcrel_hi(@var{symbol})
|
||||||
|
The high 20 bits of relative address between pc and the GOT entry of
|
||||||
|
@var{symbol}. This is usually used with the %pcrel_lo modifier to access
|
||||||
|
the GOT entry.
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
@var{label}:
|
||||||
|
auipc a0, %got_pcrel_hi(@var{symbol}) // R_RISCV_GOT_HI20
|
||||||
|
addi a0, a0, %pcrel_lo(@var{label}) // R_RISCV_PCREL_LO12_I
|
||||||
|
|
||||||
|
@var{label}:
|
||||||
|
auipc a0, %got_pcrel_hi(@var{symbol}) // R_RISCV_GOT_HI20
|
||||||
|
load/store a0, %pcrel_lo(@var{label})(a0) // R_RISCV_PCREL_LO12_I/S
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
Also, the pseudo la instruction with PIC has similar behavior.
|
||||||
|
|
||||||
@item %tprel_add(@var{symbol})
|
@item %tprel_add(@var{symbol})
|
||||||
This is used purely to associate the R_RISCV_TPREL_ADD relocation for
|
This is used purely to associate the R_RISCV_TPREL_ADD relocation for
|
||||||
TLS relaxation. This one is only valid as the fourth operand to the normally
|
TLS relaxation. This one is only valid as the fourth operand to the normally
|
||||||
|
@ -9,4 +9,6 @@ RELOCATION RECORDS FOR .*
|
|||||||
0+4 R_RISCV_LO12_I.*
|
0+4 R_RISCV_LO12_I.*
|
||||||
0+8 R_RISCV_PCREL_HI20.*
|
0+8 R_RISCV_PCREL_HI20.*
|
||||||
0+c R_RISCV_PCREL_LO12_I.*
|
0+c R_RISCV_PCREL_LO12_I.*
|
||||||
0+10 R_RISCV_CALL.*
|
0+10 R_RISCV_GOT_HI20.*
|
||||||
|
0+14 R_RISCV_PCREL_LO12_I.*
|
||||||
|
0+18 R_RISCV_CALL.*
|
||||||
|
@ -2,7 +2,10 @@ target:
|
|||||||
lui a5,%hi(target)
|
lui a5,%hi(target)
|
||||||
lw a5,%lo(target)(a5)
|
lw a5,%lo(target)(a5)
|
||||||
|
|
||||||
.LA0: auipc a5,%pcrel_hi(bar)
|
.LA0: auipc a5,%pcrel_hi(symbol1)
|
||||||
lw a0,%pcrel_lo(.LA0)(a5)
|
lw a0,%pcrel_lo(.LA0)(a5)
|
||||||
|
|
||||||
|
.LA1: auipc a5,%got_pcrel_hi(symbol2)
|
||||||
|
lw a0,%pcrel_lo(.LA1)(a5)
|
||||||
|
|
||||||
call target
|
call target
|
||||||
|
@ -13,5 +13,8 @@ RELOCATION RECORDS FOR .*
|
|||||||
0+8 R_RISCV_RELAX.*
|
0+8 R_RISCV_RELAX.*
|
||||||
0+c R_RISCV_PCREL_LO12_I.*
|
0+c R_RISCV_PCREL_LO12_I.*
|
||||||
0+c R_RISCV_RELAX.*
|
0+c R_RISCV_RELAX.*
|
||||||
0+10 R_RISCV_CALL.*
|
0+10 R_RISCV_GOT_HI20.*
|
||||||
0+10 R_RISCV_RELAX.*
|
0+14 R_RISCV_PCREL_LO12_I.*
|
||||||
|
0+14 R_RISCV_RELAX.*
|
||||||
|
0+18 R_RISCV_CALL.*
|
||||||
|
0+18 R_RISCV_RELAX.*
|
||||||
|
@ -2,7 +2,10 @@ target:
|
|||||||
lui a5,%hi(target)
|
lui a5,%hi(target)
|
||||||
lw a5,%lo(target)(a5)
|
lw a5,%lo(target)(a5)
|
||||||
|
|
||||||
.LA0: auipc a5,%pcrel_hi(bar)
|
.LA0: auipc a5,%pcrel_hi(symbol1)
|
||||||
lw a0,%pcrel_lo(.LA0)(a5)
|
lw a0,%pcrel_lo(.LA0)(a5)
|
||||||
|
|
||||||
|
.LA1: auipc a5,%got_pcrel_hi(symbol2)
|
||||||
|
lw a0,%pcrel_lo(.LA1)(a5)
|
||||||
|
|
||||||
call target
|
call target
|
||||||
|
Reference in New Issue
Block a user