diff options
Diffstat (limited to 'ld')
20 files changed, 280 insertions, 0 deletions
diff --git a/ld/testsuite/ld-riscv-elf/code-model-01.ld b/ld/testsuite/ld-riscv-elf/code-model-01.ld new file mode 100644 index 0000000000..676f0843dd --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-01.ld @@ -0,0 +1,24 @@ +/* text: in the 32-bit address range. + data: far away from text. */ + +ENTRY(_start) +MEMORY +{ + rom (rx) : ORIGIN = 0x10000, LENGTH = 0x1000 + ram (!rx) : ORIGIN = 0x800000000, LENGTH = 0x1000 +} +SECTIONS { + .text : { + *(.text*) + } >rom + + .data : { + *(.data*) + } >ram + + __global_pointer$ = .; + + .got : { + *(.got*) + } > ram +} diff --git a/ld/testsuite/ld-riscv-elf/code-model-02.ld b/ld/testsuite/ld-riscv-elf/code-model-02.ld new file mode 100644 index 0000000000..af8a2feb05 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-02.ld @@ -0,0 +1,24 @@ +/* text: over the 32-bit address range. + data: far away from text, and nearly-zero. */ + +ENTRY(_start) +MEMORY +{ + rom (rx) : ORIGIN = 0x800000000, LENGTH = 0x1000 + ram (!rx) : ORIGIN = 0x10, LENGTH = 0x1000 +} +SECTIONS { + .text : { + *(.text*) + } >rom + + .data : { + *(.data*) + } >ram + + __global_pointer$ = .; + + .got : { + *(.got*) + } > ram +} diff --git a/ld/testsuite/ld-riscv-elf/code-model-medany-01.d b/ld/testsuite/ld-riscv-elf/code-model-medany-01.d new file mode 100644 index 0000000000..071eee8e5b --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medany-01.d @@ -0,0 +1,4 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --no-relax +#error: .*relocation truncated to fit: R_RISCV_GOT_HI20 against symbol `symbolG' diff --git a/ld/testsuite/ld-riscv-elf/code-model-medany-02.d b/ld/testsuite/ld-riscv-elf/code-model-medany-02.d new file mode 100644 index 0000000000..017a1dcfda --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medany-02.d @@ -0,0 +1,17 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --no-relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x[0-9a-f]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+ld[ ]+t0,[0-9]+\(t0\) # [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x[0-9a-f]+> +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x[0-9a-f]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,t0,[0-9]+ # [0-9a-f]+ <symbolL> +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x[0-9a-f]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,t0,[0-9]+ # [0-9a-f]+ <symbolG> diff --git a/ld/testsuite/ld-riscv-elf/code-model-medany-weakref-01.d b/ld/testsuite/ld-riscv-elf/code-model-medany-weakref-01.d new file mode 100644 index 0000000000..0fe5c45139 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medany-weakref-01.d @@ -0,0 +1,4 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --no-relax +#error: .*relocation truncated to fit: R_RISCV_GOT_HI20 against undefined symbol `symbolW' diff --git a/ld/testsuite/ld-riscv-elf/code-model-medany-weakref-02.d b/ld/testsuite/ld-riscv-elf/code-model-medany-weakref-02.d new file mode 100644 index 0000000000..2b3aaae82a --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medany-weakref-02.d @@ -0,0 +1,13 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --no-relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x0 +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+ld[ ]+t0,[0-9]+\(t0\) # [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x[0-9a-f]+> diff --git a/ld/testsuite/ld-riscv-elf/code-model-medlow-01.d b/ld/testsuite/ld-riscv-elf/code-model-medlow-01.d new file mode 100644 index 0000000000..a92389326e --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medlow-01.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 +#error: .*relocation truncated to fit: R_RISCV_HI20 against `symbolL' diff --git a/ld/testsuite/ld-riscv-elf/code-model-medlow-02.d b/ld/testsuite/ld-riscv-elf/code-model-medlow-02.d new file mode 100644 index 0000000000..11688635fe --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medlow-02.d @@ -0,0 +1,15 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --no-relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x[0-9a-f]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,t0,[0-9]+ # [0-9a-f]+ <symbolL> +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x[0-9a-f]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,t0,[0-9]+ # [0-9a-f]+ <symbolG> diff --git a/ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d b/ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d new file mode 100644 index 0000000000..28f8fe98b2 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d @@ -0,0 +1,13 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --no-relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+10000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x0 +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,t0,0 # 0 <.*> diff --git a/ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d b/ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d new file mode 100644 index 0000000000..405b0fe25a --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d @@ -0,0 +1,13 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --no-relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x0 +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,t0,0 # 0 <.*> diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medany-01.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-01.d new file mode 100644 index 0000000000..afa24eff63 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-01.d @@ -0,0 +1,4 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --relax +#error: .*relocation truncated to fit: R_RISCV_GOT_HI20 against symbol `symbolG' diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medany-02.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-02.d new file mode 100644 index 0000000000..7b5b9e99c6 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-02.d @@ -0,0 +1,15 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x[0-9a-f]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+ld[ ]+t0,[0-9]+\(t0\) # [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x[0-9a-f]+> +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,zero,[0-9]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,zero,[0-9]+ diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d new file mode 100644 index 0000000000..5b2d1eaf1d --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d @@ -0,0 +1,4 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --relax +#error: .*relocation truncated to fit: R_RISCV_GOT_HI20 against undefined symbol `symbolW' diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d new file mode 100644 index 0000000000..783be0c536 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d @@ -0,0 +1,13 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medany__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+lui[ ]+t0,0x0 +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+ld[ ]+t0,[0-9]+\(t0\) # [0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x[0-9a-f]+> diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01.d new file mode 100644 index 0000000000..eea2f7d661 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01.d @@ -0,0 +1,13 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+10000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,gp,\-[0-9]+ # [0-9a-f]+ <symbolL> +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,gp,\-[0-9]+ # [0-9a-f]+ <symbolG> diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-02.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-02.d new file mode 100644 index 0000000000..adc81f5ab2 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-02.d @@ -0,0 +1,13 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,zero,[0-9]+ +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,zero,[0-9]+ diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d new file mode 100644 index 0000000000..b1f22039ee --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d @@ -0,0 +1,12 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-01.ld -melf64lriscv --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+10000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,zero,0 diff --git a/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d new file mode 100644 index 0000000000..332046d7c5 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d @@ -0,0 +1,12 @@ +#source: code-model.s +#as: -march=rv64i -mabi=lp64 --defsym __medlow__=1 --defsym __undefweak__=1 +#ld: -Tcode-model-02.ld -melf64lriscv --relax +#objdump: -d -Mno-aliases + +.*:[ ]+file format .* + + +Disassembly of section .text: + +0+800000000 <_start>: +[ ]+[0-9a-f]+:[ ]+[0-9a-f]+[ ]+addi[ ]+t0,zero,0 diff --git a/ld/testsuite/ld-riscv-elf/code-model.s b/ld/testsuite/ld-riscv-elf/code-model.s new file mode 100644 index 0000000000..a88301a539 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/code-model.s @@ -0,0 +1,47 @@ + .text + .global _start +_start: + +.ifdef __medany__ + .option pic +.ifdef __undefweak__ + # Refer to undefined weak symbol by GOT_PCREL. + la t0, symbolW + .option nopic +.else + # Refer to global data symbol by GOT_PCREL. + la t0, symbolG + .option nopic + # Refer to local data symbol by PCREL. + lla t0, symbolL + # Refer to non-pic data global symbol by PCREL. + la t0, symbolG +.endif +.endif + +.ifdef __medlow__ +.ifdef __undefweak__ + # Refer to undefined weak symbol by absolutely access. + lui t0, %hi(symbolW) + addi t0, t0, %lo(symbolW) +.else + # Refer to local data symbol by absolutely access. + lui t0, %hi(symbolL) + addi t0, t0, %lo(symbolL) + # Refer to global data symbol by absolutely access. + lui t0, %hi(symbolG) + addi t0, t0, %lo(symbolG) +.endif +.endif + .size _start, .-_start + + .data + .global symbolG +symbolL: + .dword 0x1111222233334444 +symbolG: + .dword 0x5555666677778888 + +.ifdef __undefweak__ + .weak symbolW +.endif diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp index 3bd788208e..961f06433f 100644 --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp @@ -132,6 +132,22 @@ if [istarget "riscv*-*-*"] { run_dump_test "pcrel-lo-addend-3a" run_dump_test "pcrel-lo-addend-3b" run_dump_test "pcrel-lo-addend-3c" + run_dump_test "code-model-medlow-01" + run_dump_test "code-model-medlow-02" + run_dump_test "code-model-medlow-weakref-01" + run_dump_test "code-model-medlow-weakref-02" + run_dump_test "code-model-medany-01" + run_dump_test "code-model-medany-02" + 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-02" + run_dump_test "code-model-relax-medlow-weakref-01" + run_dump_test "code-model-relax-medlow-weakref-02" + run_dump_test "code-model-relax-medany-01" + run_dump_test "code-model-relax-medany-02" + run_dump_test "code-model-relax-medany-weakref-01" + run_dump_test "code-model-relax-medany-weakref-02" run_dump_test "attr-merge-arch-01" run_dump_test "attr-merge-arch-02" run_dump_test "attr-merge-arch-03" |