summaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-01.ld24
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-02.ld24
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medany-01.d4
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medany-02.d17
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medany-weakref-01.d4
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medany-weakref-02.d13
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medlow-01.d4
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medlow-02.d15
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d13
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d13
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medany-01.d4
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medany-02.d15
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d4
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d13
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medlow-01.d13
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medlow-02.d13
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d12
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d12
-rw-r--r--ld/testsuite/ld-riscv-elf/code-model.s47
-rw-r--r--ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp16
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"