From: Ulrich Drepper Date: Fri, 11 Jan 2008 07:18:44 +0000 (+0000) Subject: More immediate operand fixes for x86 disassembler. X-Git-Tag: elfutils-0.132~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9dc49f58df3307f26c59b6eaa218c7cf7a2eca36;p=thirdparty%2Felfutils.git More immediate operand fixes for x86 disassembler. --- diff --git a/libcpu/i386_data.h b/libcpu/i386_data.h index c1f2d5e73..5f66c610f 100644 --- a/libcpu/i386_data.h +++ b/libcpu/i386_data.h @@ -507,7 +507,11 @@ FCT_ax (struct output_data *d) bufp[(*bufcntp)++] = '%'; if (! is_16bit) - bufp[(*bufcntp)++] = 'e'; + bufp[(*bufcntp)++] = ( +#ifdef X86_64 + (*d->prefixes & has_rex_w) ? 'r' : +#endif + 'e'); bufp[(*bufcntp)++] = 'a'; bufp[(*bufcntp)++] = 'x'; @@ -694,8 +698,14 @@ FCT_imm (struct output_data *d) { if (*d->param_start + 4 > d->end) return -1; - uint32_t word = read_4ubyte_unaligned_inc (*d->param_start); - needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32, word); + int32_t word = read_4sbyte_unaligned_inc (*d->param_start); +#ifdef X86_64 + if (*d->prefixes & has_rex_w) + needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx64, + (int64_t) word); + else +#endif + needed = snprintf (&d->bufp[*bufcntp], avail, "$0x%" PRIx32, word); } if ((size_t) needed > avail) return (size_t) needed - avail; diff --git a/tests/testfile45.S.bz2 b/tests/testfile45.S.bz2 index 2fc212898..c39be44b7 100644 Binary files a/tests/testfile45.S.bz2 and b/tests/testfile45.S.bz2 differ diff --git a/tests/testfile45.expect.bz2 b/tests/testfile45.expect.bz2 index cb054b63c..539a03a24 100644 Binary files a/tests/testfile45.expect.bz2 and b/tests/testfile45.expect.bz2 differ