Skip to content

Commit

Permalink
RISC-V: Add address printer tests on disassembler
Browse files Browse the repository at this point in the history
This commit adds address printer tests on the disassembler focusing on
various path to/on maybe_print_address.  It also tests whether the address
adjustment on RV32 (fix to PR29342) works as expected and whether the
highest address is printed with a symbol.

gas/ChangeLog:

	* testsuite/gas/riscv/dis-addr-a.s: Rename from auipc-x0.s.
	* testsuite/gas/riscv/dis-addr-a.d: Rename from auipc-x0.d.
	* testsuite/gas/riscv/dis-addr-2.s: New address printer tests
	on the disassembler.
	* testsuite/gas/riscv/dis-addr-2-32.d: Likewise.
	* testsuite/gas/riscv/dis-addr-2-64.d: Likewise.
	* testsuite/gas/riscv/dis-addr-3.s: New address printer tests
	on the disassembler if `gp' is the highest address.
	* testsuite/gas/riscv/dis-addr-3-32.d: Likewise.
	* testsuite/gas/riscv/dis-addr-3-64.d: Likewise.
  • Loading branch information
a4lg committed Aug 4, 2022
1 parent 145cc77 commit 43481e5
Show file tree
Hide file tree
Showing 8 changed files with 171 additions and 0 deletions.
File renamed without changes.
File renamed without changes.
29 changes: 29 additions & 0 deletions gas/testsuite/gas/riscv/dis-addr-2-32.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#as: -march=rv32ic
#source: dis-addr-2.s
#objdump: -d

.*: file format elf32-(little|big)riscv


Disassembly of section .text:

0+000 <target>:
[ ]+[0-9a-f]+:[ ]+fffff2b7[ ]+lui[ ]+t0,0xfffff
[ ]+[0-9a-f]+:[ ]+ffc2a903[ ]+lw[ ]+s2,-4\(t0\) # ffffeffc <addr_load>
[ ]+[0-9a-f]+:[ ]+ffffe337[ ]+lui[ ]+t1,0xffffe
[ ]+[0-9a-f]+:[ ]+ff332c23[ ]+sw[ ]+s3,-8\(t1\) # ffffdff8 <addr_store>
[ ]+[0-9a-f]+:[ ]+ffffd3b7[ ]+lui[ ]+t2,0xffffd
[ ]+[0-9a-f]+:[ ]+000380e7[ ]+jalr[ ]+t2 # ffffd000 <addr_jalr_1>
[ ]+[0-9a-f]+:[ ]+ffffce37[ ]+lui[ ]+t3,0xffffc
[ ]+[0-9a-f]+:[ ]+ff4e00e7[ ]+jalr[ ]+-12\(t3\) # ffffbff4 <addr_jalr_2>
[ ]+[0-9a-f]+:[ ]+ffffbeb7[ ]+lui[ ]+t4,0xffffb
[ ]+[0-9a-f]+:[ ]+000e8a67[ ]+jalr[ ]+s4,t4 # ffffb000 <addr_jalr_3>
[ ]+[0-9a-f]+:[ ]+ffffaf37[ ]+lui[ ]+t5,0xffffa
[ ]+[0-9a-f]+:[ ]+ff0f0a93[ ]+addi[ ]+s5,t5,-16 # ffff9ff0 <addr_loadaddr>
[ ]+[0-9a-f]+:[ ]+ffff9fb7[ ]+lui[ ]+t6,0xffff9
[ ]+[0-9a-f]+:[ ]+1fb1[ ]+addi[ ]+t6,t6,-20 # ffff8fec <addr_loadaddr_c>
[ ]+[0-9a-f]+:[ ]+4001a283[ ]+lw[ ]+t0,1024\(gp\) # 600 <addr_rel_gp_pos>
[ ]+[0-9a-f]+:[ ]+c001a303[ ]+lw[ ]+t1,-1024\(gp\) # fffffe00 <addr_rel_gp_neg>
[ ]+[0-9a-f]+:[ ]+10002383[ ]+lw[ ]+t2,256\(zero\) # 100 <addr_rel_zero_pos>
[ ]+[0-9a-f]+:[ ]+80002e03[ ]+lw[ ]+t3,-2048\(zero\) # fffff800 <addr_rel_zero_neg>
[ ]+[0-9a-f]+:[ ]+fff00e83[ ]+lb[ ]+t4,-1\(zero\) # ffffffff <addr_top>
33 changes: 33 additions & 0 deletions gas/testsuite/gas/riscv/dis-addr-2-64.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#as: -march=rv64ic -defsym rv64=1
#source: dis-addr-2.s
#objdump: -d

.*: file format elf64-(little|big)riscv


Disassembly of section .text:

0+000 <target>:
[ ]+[0-9a-f]+:[ ]+fffff2b7[ ]+lui[ ]+t0,0xfffff
[ ]+[0-9a-f]+:[ ]+ffc2a903[ ]+lw[ ]+s2,-4\(t0\) # ffffffffffffeffc <addr_load>
[ ]+[0-9a-f]+:[ ]+ffffe337[ ]+lui[ ]+t1,0xffffe
[ ]+[0-9a-f]+:[ ]+ff332c23[ ]+sw[ ]+s3,-8\(t1\) # ffffffffffffdff8 <addr_store>
[ ]+[0-9a-f]+:[ ]+ffffd3b7[ ]+lui[ ]+t2,0xffffd
[ ]+[0-9a-f]+:[ ]+000380e7[ ]+jalr[ ]+t2 # ffffffffffffd000 <addr_jalr_1>
[ ]+[0-9a-f]+:[ ]+ffffce37[ ]+lui[ ]+t3,0xffffc
[ ]+[0-9a-f]+:[ ]+ff4e00e7[ ]+jalr[ ]+-12\(t3\) # ffffffffffffbff4 <addr_jalr_2>
[ ]+[0-9a-f]+:[ ]+ffffbeb7[ ]+lui[ ]+t4,0xffffb
[ ]+[0-9a-f]+:[ ]+000e8a67[ ]+jalr[ ]+s4,t4 # ffffffffffffb000 <addr_jalr_3>
[ ]+[0-9a-f]+:[ ]+ffffaf37[ ]+lui[ ]+t5,0xffffa
[ ]+[0-9a-f]+:[ ]+ff0f0a93[ ]+addi[ ]+s5,t5,-16 # ffffffffffff9ff0 <addr_loadaddr>
[ ]+[0-9a-f]+:[ ]+ffff9fb7[ ]+lui[ ]+t6,0xffff9
[ ]+[0-9a-f]+:[ ]+1fb1[ ]+addi[ ]+t6,t6,-20 # ffffffffffff8fec <addr_loadaddr_c>
[ ]+[0-9a-f]+:[ ]+ffff8b37[ ]+lui[ ]+s6,0xffff8
[ ]+[0-9a-f]+:[ ]+fe8b0b9b[ ]+addiw[ ]+s7,s6,-24 # ffffffffffff7fe8 <addr_loadaddr_w>
[ ]+[0-9a-f]+:[ ]+ffff7c37[ ]+lui[ ]+s8,0xffff7
[ ]+[0-9a-f]+:[ ]+3c11[ ]+addiw[ ]+s8,s8,-28 # ffffffffffff6fe4 <addr_loadaddr_w_c>
[ ]+[0-9a-f]+:[ ]+4001a283[ ]+lw[ ]+t0,1024\(gp\) # 600 <addr_rel_gp_pos>
[ ]+[0-9a-f]+:[ ]+c001a303[ ]+lw[ ]+t1,-1024\(gp\) # fffffffffffffe00 <addr_rel_gp_neg>
[ ]+[0-9a-f]+:[ ]+10002383[ ]+lw[ ]+t2,256\(zero\) # 100 <addr_rel_zero_pos>
[ ]+[0-9a-f]+:[ ]+80002e03[ ]+lw[ ]+t3,-2048\(zero\) # fffffffffffff800 <addr_rel_zero_neg>
[ ]+[0-9a-f]+:[ ]+fff00e83[ ]+lb[ ]+t4,-1\(zero\) # ffffffffffffffff <addr_top>
70 changes: 70 additions & 0 deletions gas/testsuite/gas/riscv/dis-addr-2.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
.set __global_pointer$, 0x00000200

.ifdef rv64
topbase = 0xffffffff00000000
.else
topbase = 0
.endif

.set addr_load, topbase + 0xffffeffc # -0x1000 -4
.set addr_store, topbase + 0xffffdff8 # -0x2000 -8
.set addr_jalr_1, topbase + 0xffffd000 # -0x3000
.set addr_jalr_2, topbase + 0xffffbff4 # -0x4000 -12
.set addr_jalr_3, topbase + 0xffffb000 # -0x5000
.set addr_loadaddr, topbase + 0xffff9ff0 # -0x6000 -16
.set addr_loadaddr_c, topbase + 0xffff8fec # -0x7000 -20
.set addr_loadaddr_w, topbase + 0xffff7fe8 # -0x8000 -24
.set addr_loadaddr_w_c, topbase + 0xffff6fe4 # -0x9000 -28
.set addr_rel_gp_pos, 0x00000600 # __global_pointer$ + 0x400
.set addr_rel_gp_neg, topbase + 0xfffffe00 # __global_pointer$ - 0x400
.set addr_rel_zero_pos, 0x00000100
.set addr_rel_zero_neg, topbase + 0xfffff800 # -0x800
.set addr_top, topbase + 0xffffffff # -1

target:
.option push
.option arch, -c
## Use hi_addr
# Load
lui t0, 0xfffff
lw s2, -4(t0)
# Store
lui t1, 0xffffe
sw s3, -8(t1)
# JALR (implicit destination, no offset)
lui t2, 0xffffd
jalr t2
# JALR (implicit destination, with offset)
lui t3, 0xffffc
jalr -12(t3)
# JALR (explicit destination, no offset)
lui t4, 0xffffb
jalr s4, t4
# ADDI (not compressed)
lui t5, 0xffffa
addi s5, t5, -16
# C.ADDI
lui t6, 0xffff9
.option pop
c.addi t6, -20
.ifdef rv64
.option push
.option arch, -c
# ADDIW (not compressed)
lui s6, 0xffff8
addiw s7, s6, -24
# C.ADDIW
lui s8, 0xffff7
.option pop
c.addiw s8, -28
.endif

# Use addresses relative to gp
lw t0, 0x400(gp)
lw t1, -0x400(gp)
# Use addresses relative to zero
lw t2, 0x100(zero)
lw t3, -0x800(zero)

# Access to the highest address
lb t4, -1(zero)
12 changes: 12 additions & 0 deletions gas/testsuite/gas/riscv/dis-addr-3-32.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#as: -march=rv32i
#source: dis-addr-3.s
#objdump: -d

.*: file format elf32-(little|big)riscv


Disassembly of section .text:

0+000 <target>:
[ ]+[0-9a-f]+:[ ]+0051a283[ ]+lw[ ]+t0,5\(gp\) # 4 <addr_rel_gp_pos>
[ ]+[0-9a-f]+:[ ]+ffd1a303[ ]+lw[ ]+t1,-3\(gp\) # fffffffc <addr_rel_gp_neg>
12 changes: 12 additions & 0 deletions gas/testsuite/gas/riscv/dis-addr-3-64.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#as: -march=rv64i -defsym rv64=1
#source: dis-addr-3.s
#objdump: -d

.*: file format elf64-(little|big)riscv


Disassembly of section .text:

0+000 <target>:
[ ]+[0-9a-f]+:[ ]+0051a283[ ]+lw[ ]+t0,5\(gp\) # 4 <addr_rel_gp_pos>
[ ]+[0-9a-f]+:[ ]+ffd1a303[ ]+lw[ ]+t1,-3\(gp\) # fffffffffffffffc <addr_rel_gp_neg>
15 changes: 15 additions & 0 deletions gas/testsuite/gas/riscv/dis-addr-3.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.ifdef rv64
topbase = 0xffffffff00000000
.else
topbase = 0
.endif

.set __global_pointer$, topbase + 0xffffffff # -1
.set addr_rel_gp_pos, 0x00000004 # +4
.set addr_rel_gp_neg, topbase + 0xfffffffc # -4

target:
# Use addresses relative to gp
# (gp is the highest address)
lw t0, +5(gp)
lw t1, -3(gp)

0 comments on commit 43481e5

Please sign in to comment.