[PATCH v7 4/5] RISC-V: Add address printer tests on disassembler

Nelson Chu nelson@rivosinc.com
Wed Aug 24 11:42:17 GMT 2022


On Wed, Aug 24, 2022 at 9:29 AM Tsukasa OI via Binutils
<binutils@sourceware.org> wrote:
>
> 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, whether the highest
> address is printed with a symbol and JALR address computation is fixed.
>
> gas/ChangeLog:
>
>         * testsuite/gas/riscv/dis-addr-1.s: Rename from auipc-x0.s.
>         * testsuite/gas/riscv/dis-addr-1.d: Rename from auipc-x0.d.

I think the test case is for another purpose, it is not only for the
PR29342, so just keep it as before.

>         * 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.

OK, looks good.  Just moving them to the corresponding patches should be enough.

> ---
>  .../gas/riscv/{auipc-x0.d => dis-addr-1.d}    |  0
>  .../gas/riscv/{auipc-x0.s => dis-addr-1.s}    |  0
>  gas/testsuite/gas/riscv/dis-addr-2-32.d       | 31 ++++++++
>  gas/testsuite/gas/riscv/dis-addr-2-64.d       | 35 +++++++++
>  gas/testsuite/gas/riscv/dis-addr-2.s          | 74 +++++++++++++++++++
>  gas/testsuite/gas/riscv/dis-addr-3-32.d       | 12 +++
>  gas/testsuite/gas/riscv/dis-addr-3-64.d       | 12 +++
>  gas/testsuite/gas/riscv/dis-addr-3.s          | 15 ++++
>  8 files changed, 179 insertions(+)
>  rename gas/testsuite/gas/riscv/{auipc-x0.d => dis-addr-1.d} (100%)
>  rename gas/testsuite/gas/riscv/{auipc-x0.s => dis-addr-1.s} (100%)
>  create mode 100644 gas/testsuite/gas/riscv/dis-addr-2-32.d
>  create mode 100644 gas/testsuite/gas/riscv/dis-addr-2-64.d
>  create mode 100644 gas/testsuite/gas/riscv/dis-addr-2.s
>  create mode 100644 gas/testsuite/gas/riscv/dis-addr-3-32.d
>  create mode 100644 gas/testsuite/gas/riscv/dis-addr-3-64.d
>  create mode 100644 gas/testsuite/gas/riscv/dis-addr-3.s
>
> diff --git a/gas/testsuite/gas/riscv/auipc-x0.d b/gas/testsuite/gas/riscv/dis-addr-1.d
> similarity index 100%
> rename from gas/testsuite/gas/riscv/auipc-x0.d
> rename to gas/testsuite/gas/riscv/dis-addr-1.d
> diff --git a/gas/testsuite/gas/riscv/auipc-x0.s b/gas/testsuite/gas/riscv/dis-addr-1.s
> similarity index 100%
> rename from gas/testsuite/gas/riscv/auipc-x0.s
> rename to gas/testsuite/gas/riscv/dis-addr-1.s
> diff --git a/gas/testsuite/gas/riscv/dis-addr-2-32.d b/gas/testsuite/gas/riscv/dis-addr-2-32.d
> new file mode 100644
> index 00000000000..5117c3d8a0c
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/dis-addr-2-32.d
> @@ -0,0 +1,31 @@
> +#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]+:[   ]+10400ee7[     ]+jalr[         ]+t4,260\(zero\) # 104 <addr_jalr_rel_zero_pos>
> +[      ]+[0-9a-f]+:[   ]+80400f67[     ]+jalr[         ]+t5,-2044\(zero\) # fffff804 <addr_jalr_rel_zero_neg>
> +[      ]+[0-9a-f]+:[   ]+fff00f83[     ]+lb[           ]+t6,-1\(zero\) # ffffffff <addr_top>
> diff --git a/gas/testsuite/gas/riscv/dis-addr-2-64.d b/gas/testsuite/gas/riscv/dis-addr-2-64.d
> new file mode 100644
> index 00000000000..d806bad25b4
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/dis-addr-2-64.d
> @@ -0,0 +1,35 @@
> +#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]+:[   ]+10400ee7[     ]+jalr[         ]+t4,260\(zero\) # 104 <addr_jalr_rel_zero_pos>
> +[      ]+[0-9a-f]+:[   ]+80400f67[     ]+jalr[         ]+t5,-2044\(zero\) # fffffffffffff804 <addr_jalr_rel_zero_neg>
> +[      ]+[0-9a-f]+:[   ]+fff00f83[     ]+lb[           ]+t6,-1\(zero\) # ffffffffffffffff <addr_top>
> diff --git a/gas/testsuite/gas/riscv/dis-addr-2.s b/gas/testsuite/gas/riscv/dis-addr-2.s
> new file mode 100644
> index 00000000000..cb7f0cd9dc2
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/dis-addr-2.s
> @@ -0,0 +1,74 @@
> +.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_jalr_rel_zero_pos,           0x00000104  # 0x104
> +.set addr_jalr_rel_zero_neg, topbase + 0xfffff804  # -0x7fc
> +.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)
> +       jalr    t4, 0x104(zero)
> +       jalr    t5, -0x7fc(zero)
> +
> +       # Access to the highest address
> +       lb      t6, -1(zero)
> diff --git a/gas/testsuite/gas/riscv/dis-addr-3-32.d b/gas/testsuite/gas/riscv/dis-addr-3-32.d
> new file mode 100644
> index 00000000000..42ca89850ac
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/dis-addr-3-32.d
> @@ -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>
> diff --git a/gas/testsuite/gas/riscv/dis-addr-3-64.d b/gas/testsuite/gas/riscv/dis-addr-3-64.d
> new file mode 100644
> index 00000000000..394c58fac96
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/dis-addr-3-64.d
> @@ -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>
> diff --git a/gas/testsuite/gas/riscv/dis-addr-3.s b/gas/testsuite/gas/riscv/dis-addr-3.s
> new file mode 100644
> index 00000000000..6ba9fc7a39d
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/dis-addr-3.s
> @@ -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)
> --
> 2.34.1
>


More information about the Binutils mailing list