--- /dev/null
+/* 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
+}
--- /dev/null
+/* 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
+}
--- /dev/null
+#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'
--- /dev/null
+#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>
--- /dev/null
+#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'
--- /dev/null
+#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]+>
--- /dev/null
+#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'
--- /dev/null
+#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>
--- /dev/null
+#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 <.*>
--- /dev/null
+#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 <.*>
--- /dev/null
+#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'
--- /dev/null
+#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]+
--- /dev/null
+#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'
--- /dev/null
+#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]+>
--- /dev/null
+#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>
--- /dev/null
+#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]+
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+ .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
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"