From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-sender-0.a4lg.com (mail-sender-0.a4lg.com [IPv6:2401:2500:203:30b:4000:6bfe:4757:0]) by sourceware.org (Postfix) with ESMTPS id 1B25A38300AE for ; Sat, 27 Aug 2022 00:23:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1B25A38300AE Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=irq.a4lg.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=irq.a4lg.com Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail-sender-0.a4lg.com (Postfix) with ESMTPSA id 58C1C300089; Sat, 27 Aug 2022 00:23:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irq.a4lg.com; s=2017s01; t=1661559823; bh=AnApdIJiNt9FTGMHULd6uzH8Vr/bV1ZUBd87/ZfClko=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Mime-Version:Content-Transfer-Encoding; b=MbgdRZ5DE3byeYtW5KctYm9fFxV7CQFyFY6dBc9FoNhxNxbTNsFD6pnQq//7VluFG DoWF90z9Nek3byMeNzgLrDjQXqbR1MmvZweKwPWMIZtBTEtjpsBLdCfrDfeuEKDSOb ciQB2WwMv/Rs2IugqPNl73vxTLdpFfEyyAQeHAtU= From: Tsukasa OI To: Tsukasa OI , "H . Peter Anvin" , Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu Cc: binutils@sourceware.org Subject: [PATCH v8 4/7] RISC-V: Print highest address on the disassembler Date: Sat, 27 Aug 2022 00:22:56 +0000 Message-Id: <83ef6d68e80ab6e0bed9eaae67f68dd9105da887.1661559777.git.research_trasio@irq.a4lg.com> In-Reply-To: References: Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,KAM_MANYTO,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This patch makes possible to print the highest address (0xffffffff on RV32, 0xffffffff_ffffffff on RV64). This is particularly useful if the highest address space is used for I/O registers and corresponding symbols are defined. gas/ChangeLog: * testsuite/gas/riscv/dis-addr-topaddr.s: New test for the top address printing. * testsuite/gas/riscv/dis-addr-topaddr-32.d: Likewise. * testsuite/gas/riscv/dis-addr-topaddr-64.d: Likewise. opcodes/ChangeLog: * riscv-dis.c (struct riscv_private_data): Add `to_print_addr' to enable printing the highest address. (maybe_print_address): Utilize `to_print_addr'. (riscv_disassemble_insn): Likewise. --- gas/testsuite/gas/riscv/dis-addr-topaddr-32.d | 11 +++++++++++ gas/testsuite/gas/riscv/dis-addr-topaddr-64.d | 11 +++++++++++ gas/testsuite/gas/riscv/dis-addr-topaddr.s | 10 ++++++++++ opcodes/riscv-dis.c | 9 ++++++--- 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 gas/testsuite/gas/riscv/dis-addr-topaddr-32.d create mode 100644 gas/testsuite/gas/riscv/dis-addr-topaddr-64.d create mode 100644 gas/testsuite/gas/riscv/dis-addr-topaddr.s diff --git a/gas/testsuite/gas/riscv/dis-addr-topaddr-32.d b/gas/testsuite/gas/riscv/dis-addr-topaddr-32.d new file mode 100644 index 00000000000..87854cd58e6 --- /dev/null +++ b/gas/testsuite/gas/riscv/dis-addr-topaddr-32.d @@ -0,0 +1,11 @@ +#as: -march=rv32ic +#source: dis-addr-topaddr.s +#objdump: -d + +.*: file format elf32-(little|big)riscv + + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+fff00283[ ]+lb[ ]+t0,-1\(zero\) # ffffffff diff --git a/gas/testsuite/gas/riscv/dis-addr-topaddr-64.d b/gas/testsuite/gas/riscv/dis-addr-topaddr-64.d new file mode 100644 index 00000000000..38f67efdcaf --- /dev/null +++ b/gas/testsuite/gas/riscv/dis-addr-topaddr-64.d @@ -0,0 +1,11 @@ +#as: -march=rv64ic -defsym rv64=1 +#source: dis-addr-topaddr.s +#objdump: -d + +.*: file format elf64-(little|big)riscv + + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+fff00283[ ]+lb[ ]+t0,-1\(zero\) # ffffffffffffffff diff --git a/gas/testsuite/gas/riscv/dis-addr-topaddr.s b/gas/testsuite/gas/riscv/dis-addr-topaddr.s new file mode 100644 index 00000000000..b66587f448d --- /dev/null +++ b/gas/testsuite/gas/riscv/dis-addr-topaddr.s @@ -0,0 +1,10 @@ +.ifdef rv64 +topbase = 0xffffffff00000000 +.else +topbase = 0 +.endif + +.set addr_top, topbase + 0xffffffff # -1 + +target: + lb t0, -1(zero) diff --git a/opcodes/riscv-dis.c b/opcodes/riscv-dis.c index b3ca680e506..7532c72187d 100644 --- a/opcodes/riscv-dis.c +++ b/opcodes/riscv-dis.c @@ -52,6 +52,7 @@ struct riscv_private_data bfd_vma gp; bfd_vma print_addr; bfd_vma hi_addr[OP_MASK_RD + 1]; + bool to_print_addr; }; /* Used for mapping symbols. */ @@ -183,6 +184,7 @@ maybe_print_address (struct riscv_private_data *pd, int base_reg, int offset, pd->print_addr = offset; else return; /* Don't print the address. */ + pd->to_print_addr = true; /* Sign-extend a 32-bit value to a 64-bit value. */ if (wide) @@ -602,9 +604,10 @@ riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info) pd = info->private_data = xcalloc (1, sizeof (struct riscv_private_data)); pd->gp = -1; - pd->print_addr = -1; + pd->print_addr = 0; for (i = 0; i < (int)ARRAY_SIZE (pd->hi_addr); i++) pd->hi_addr[i] = -1; + pd->to_print_addr = false; for (i = 0; i < info->symtab_size; i++) if (strcmp (bfd_asymbol_name (info->symtab[i]), RISCV_GP_SYMBOL) == 0) @@ -668,13 +671,13 @@ riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info) print_insn_args (op->args, word, memaddr, info); /* Try to disassemble multi-instruction addressing sequences. */ - if (pd->print_addr != (bfd_vma)-1) + if (pd->to_print_addr) { info->target = pd->print_addr; (*info->fprintf_styled_func) (info->stream, dis_style_comment_start, " # "); (*info->print_address_func) (info->target, info); - pd->print_addr = -1; + pd->to_print_addr = false; } /* Finish filling out insn_info fields. */ -- 2.34.1