From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53030) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SoDLK-0006ah-29 for qemu-devel@nongnu.org; Mon, 09 Jul 2012 08:45:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SoDLD-00023T-K1 for qemu-devel@nongnu.org; Mon, 09 Jul 2012 08:45:33 -0400 Received: from cantor2.suse.de ([195.135.220.15]:36527 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SoDLD-00021M-AC for qemu-devel@nongnu.org; Mon, 09 Jul 2012 08:45:27 -0400 Message-ID: <4FFAD262.6040204@suse.de> Date: Mon, 09 Jul 2012 14:45:22 +0200 From: =?UTF-8?B?QW5kcmVhcyBGw6RyYmVy?= MIME-Version: 1.0 References: <1340636155-26426-1-git-send-email-peter.maydell@linaro.org> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] disas: Fix printing of addresses in disassembly List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: qemu-devel@nongnu.org, patches@linaro.org Am 09.07.2012 12:27, schrieb Peter Maydell: > Ping? [patchwork url http://patchwork.ozlabs.org/patch/167132/] >=20 > -- PMM >=20 > On 25 June 2012 15:55, Peter Maydell wrote: >> In our disassembly code, the bfd_vma type is always 64 bits, >> even if the target's virtual address width is only 32 bits. This >> means that when we print out addresses we need to truncate them >> to 32 bits, to avoid odd output which has incorrectly sign-extended >> a value to 64 bits, for instance this ARM example: >> 0x80479a60: e59f4088 ldr r4, [pc, #136] ; 0xffffffff80479a4= f >> >> (It would also be possible to truncate before passing the address >> to info->print_address_func(), but truncating in the final print >> function is the same approach that binutils takes to this problem.) Is this bug fixed in binutils and didn't make it into QEMU due to GPLv3? Or is this in QEMU glue code? Andreas >> >> Signed-off-by: Peter Maydell >> --- >> disas.c | 19 +++++++++++++++++++ >> 1 files changed, 19 insertions(+), 0 deletions(-) >> >> diff --git a/disas.c b/disas.c >> index 93d8d30..7b2acc9 100644 >> --- a/disas.c >> +++ b/disas.c >> @@ -64,6 +64,22 @@ generic_print_address (bfd_vma addr, struct disasse= mble_info *info) >> (*info->fprintf_func) (info->stream, "0x%" PRIx64, addr); >> } >> >> +/* Print address in hex, truncated to the width of a target virtual a= ddress. */ >> +static void >> +generic_print_target_address(bfd_vma addr, struct disassemble_info *i= nfo) >> +{ >> + uint64_t mask =3D ~0ULL >> (64 - TARGET_VIRT_ADDR_SPACE_BITS); >> + generic_print_address(addr & mask, info); >> +} >> + >> +/* Print address in hex, truncated to the width of a host virtual add= ress. */ >> +static void >> +generic_print_host_address(bfd_vma addr, struct disassemble_info *inf= o) >> +{ >> + uint64_t mask =3D ~0ULL >> (64 - (sizeof(void *) * 8)); >> + generic_print_address(addr & mask, info); >> +} >> + >> /* Just return the given address. */ >> >> int >> @@ -154,6 +170,7 @@ void target_disas(FILE *out, target_ulong code, ta= rget_ulong size, int flags) >> disasm_info.read_memory_func =3D target_read_memory; >> disasm_info.buffer_vma =3D code; >> disasm_info.buffer_length =3D size; >> + disasm_info.print_address_func =3D generic_print_target_address; >> >> #ifdef TARGET_WORDS_BIGENDIAN >> disasm_info.endian =3D BFD_ENDIAN_BIG; >> @@ -274,6 +291,7 @@ void disas(FILE *out, void *code, unsigned long si= ze) >> int (*print_insn)(bfd_vma pc, disassemble_info *info); >> >> INIT_DISASSEMBLE_INFO(disasm_info, out, fprintf); >> + disasm_info.print_address_func =3D generic_print_host_address; >> >> disasm_info.buffer =3D code; >> disasm_info.buffer_vma =3D (uintptr_t)code; >> @@ -386,6 +404,7 @@ void monitor_disas(Monitor *mon, CPUArchState *env= , >> monitor_disas_env =3D env; >> monitor_disas_is_physical =3D is_physical; >> disasm_info.read_memory_func =3D monitor_read_memory; >> + disasm_info.print_address_func =3D generic_print_target_address; >> >> disasm_info.buffer_vma =3D pc; >> >> -- >> 1.7.1 >> >> >=20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=C3=BCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=C3=B6rffer; HRB 16746 AG N=C3=BC= rnberg