RISC-V: Added ld testcases for the medlow and medany code models.
There are two linker scripts, code-model-01.ld and code-model-02.ld, which are corresponding to the two different memory layouts, * code-model-01.ld: the text section is in the 32-bit address range, but the data section is far away from the text section, which means the data section is over the 32-bit address range. * code-model-02.ld: the text section is over the 32-bit address range, but the data section is placed nearly zero address. We use the two linker scripts, to test the current medlow and medany behaviors of GNU ld, including the weak symbol references and the relaxations behaviors. Besides, these testcases also show the limits of the current medlow and medany code models, that is - we may get the truncated to fit errors when linking with the above two linker scripts. ld/ * testsuite/ld-riscv-elf/code-model-01.ld: New testcases to test the behaviors of the current medlow and medany code models. * testsuite/ld-riscv-elf/code-model-02.ld: Likewise. * testsuite/ld-riscv-elf/code-model-medany-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-medany-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-medany-weakref-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-medany-weakref-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-medlow-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-medlow-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medany-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medany-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medlow-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medlow-02.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d: Likewise. * testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d: Likewise. * testsuite/ld-riscv-elf/code-model.s: Likewise. * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
This commit is contained in:
parent
527b8861cd
commit
fdb2b35b8f
24
ld/testsuite/ld-riscv-elf/code-model-01.ld
Normal file
24
ld/testsuite/ld-riscv-elf/code-model-01.ld
Normal file
@ -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
|
||||
}
|
24
ld/testsuite/ld-riscv-elf/code-model-02.ld
Normal file
24
ld/testsuite/ld-riscv-elf/code-model-02.ld
Normal file
@ -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
|
||||
}
|
4
ld/testsuite/ld-riscv-elf/code-model-medany-01.d
Normal file
4
ld/testsuite/ld-riscv-elf/code-model-medany-01.d
Normal file
@ -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'
|
17
ld/testsuite/ld-riscv-elf/code-model-medany-02.d
Normal file
17
ld/testsuite/ld-riscv-elf/code-model-medany-02.d
Normal file
@ -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>
|
4
ld/testsuite/ld-riscv-elf/code-model-medany-weakref-01.d
Normal file
4
ld/testsuite/ld-riscv-elf/code-model-medany-weakref-01.d
Normal file
@ -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'
|
13
ld/testsuite/ld-riscv-elf/code-model-medany-weakref-02.d
Normal file
13
ld/testsuite/ld-riscv-elf/code-model-medany-weakref-02.d
Normal file
@ -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]+>
|
4
ld/testsuite/ld-riscv-elf/code-model-medlow-01.d
Normal file
4
ld/testsuite/ld-riscv-elf/code-model-medlow-01.d
Normal file
@ -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'
|
15
ld/testsuite/ld-riscv-elf/code-model-medlow-02.d
Normal file
15
ld/testsuite/ld-riscv-elf/code-model-medlow-02.d
Normal file
@ -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>
|
13
ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d
Normal file
13
ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d
Normal file
@ -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 <.*>
|
13
ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d
Normal file
13
ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d
Normal file
@ -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 <.*>
|
4
ld/testsuite/ld-riscv-elf/code-model-relax-medany-01.d
Normal file
4
ld/testsuite/ld-riscv-elf/code-model-relax-medany-01.d
Normal file
@ -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'
|
15
ld/testsuite/ld-riscv-elf/code-model-relax-medany-02.d
Normal file
15
ld/testsuite/ld-riscv-elf/code-model-relax-medany-02.d
Normal file
@ -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]+
|
@ -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'
|
@ -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]+>
|
13
ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01.d
Normal file
13
ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01.d
Normal file
@ -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>
|
13
ld/testsuite/ld-riscv-elf/code-model-relax-medlow-02.d
Normal file
13
ld/testsuite/ld-riscv-elf/code-model-relax-medlow-02.d
Normal file
@ -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]+
|
@ -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
|
@ -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
|
47
ld/testsuite/ld-riscv-elf/code-model.s
Normal file
47
ld/testsuite/ld-riscv-elf/code-model.s
Normal file
@ -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
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user