diff options
author | Fangrui Song <i@maskray.me> | 2023-02-23 22:11:14 -0800 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2023-02-23 22:11:14 -0800 |
commit | 50980ba351856dff75bb0743bfca62f4c3ab19ff (patch) | |
tree | 57293555d30735da578d765d9d4058b46d237df9 /ld/testsuite | |
parent | 6777dece58127236db900215857f9070ad63e0bf (diff) | |
download | binutils-50980ba351856dff75bb0743bfca62f4c3ab19ff.zip binutils-50980ba351856dff75bb0743bfca62f4c3ab19ff.tar.gz binutils-50980ba351856dff75bb0743bfca62f4c3ab19ff.tar.bz2 |
RISC-V: Add --[no-]relax-gp to ld
--relax enables all relaxations. --no-relax-gp disables GP relaxation to
allow measuring its effect.
The option can test effectiveness of GP relaxation and support some ABI
variants that use GP for other purposes.
Link: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/issues/298
bfd/
* elfnn-riscv.c (struct riscv_elf_link_hash_table): Add params.
(riscv_elfNN_set_options): New.
(riscv_info_to_howto_rela): Check relax_gp.
(_bfd_riscv_relax_section): Likewise.
* elfxx-riscv.h (struct riscv_elf_params): New.
(riscv_elf32_set_options): New.
(riscv_elf64_set_options): New.
ld/
* emultempl/riscvelf.em: Add option parsing.
* testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d: New.
* testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d: New.
* testsuite/ld-riscv-elf/pcgp-relax-02.d: Test --relax --relax-gp can be
used together.
Diffstat (limited to 'ld/testsuite')
4 files changed, 25 insertions, 1 deletions
diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d new file mode 100644 index 0000000..8e40cc5 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01-norelaxgp.d @@ -0,0 +1,4 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --no-relax-gp --relax +#error: .*relocation truncated to fit: R_RISCV_HI20 against `symbolL' diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp index 0f7ccd9..5dd6144 100644 --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp @@ -122,6 +122,7 @@ if [istarget "riscv*-*-*"] { run_dump_test "align-small-region" run_dump_test "call-relax" run_dump_test "pcgp-relax-01" + run_dump_test "pcgp-relax-01-norelaxgp" run_dump_test "pcgp-relax-02" run_dump_test "c-lui" run_dump_test "c-lui-2" @@ -141,6 +142,7 @@ if [istarget "riscv*-*-*"] { run_dump_test "code-model-medany-weakref-01" run_dump_test "code-model-medany-weakref-02" run_dump_test "code-model-relax-medlow-01" + run_dump_test "code-model-relax-medlow-01-norelaxgp" run_dump_test "code-model-relax-medlow-02" run_dump_test "code-model-relax-medlow-weakref-01" run_dump_test "code-model-relax-medlow-weakref-02" diff --git a/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d b/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d new file mode 100644 index 0000000..d134457 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d @@ -0,0 +1,18 @@ +#source: pcgp-relax-01.s +#ld: --no-relax-gp --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section \.text: + +0+[0-9a-f]+ <_start>: +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a0,a0,[0-9]+ +.*:[ ]+[0-9a-f]+[ ]+jal[ ]+ra,[0-9a-f]+ <_start> +.*:[ ]+[0-9a-f]+[ ]+auipc[ ]+a1,0x[0-9a-f]+ +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a1,a1,[0-9]+ # [0-9a-f]+ <data_g> +.*:[ ]+[0-9a-f]+[ ]+lui[ ]+a2,0x[0-9a-f]+ +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a2,a2,[0-9]+ # [0-9a-f]+ <data_g> +.*:[ ]+[0-9a-f]+[ ]+addi[ ]+a3,tp,0 # 0 <data_t> +.*:[ ]+[0-9a-f]+[ ]+auipc[ ]+a0,0x[0-9a-f]+ diff --git a/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d b/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d index 1248132..055f03e 100644 --- a/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d +++ b/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d @@ -1,6 +1,6 @@ #source: pcgp-relax-02.s #as: -#ld: --relax +#ld: --relax --relax-gp #objdump: -d .*:[ ]+file format .* |