From 54a6d4b1b6828519ea707f2ce4d8c1829c9fe595 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 31 Dec 2008 10:21:51 -0800 Subject: [PATCH] Fix printing of rex prefix in x86-64 disassembler. --- libcpu/ChangeLog | 3 +++ libcpu/i386_disasm.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 041123e..c562ff5 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,5 +1,8 @@ 2008-12-31 Ulrich Drepper + * i386_disasm.c [X86_64] (i386_disasm): Handle rex prefix when + printing only prefix. + * i386_disasm.c (i386_disasm): Minor optimizations. * i386_parse.y (instrtable_out): No need to emit index, the reader can diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c index 9961e4d..b99748b 100644 --- a/libcpu/i386_disasm.c +++ b/libcpu/i386_disasm.c @@ -520,6 +520,23 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, case prefix_lock: ADD_STRING ("lock"); break; +#ifdef X86_64 + case 0x40 ... 0x4f: + ADD_STRING ("rex"); + if (byte != 0x40) + { + ADD_CHAR ('.'); + if (byte & 0x8) + ADD_CHAR ('w'); + if (byte & 0x4) + ADD_CHAR ('r'); + if (byte & 0x3) + ADD_CHAR ('x'); + if (byte & 0x1) + ADD_CHAR ('b'); + } + break; +#endif default: /* Cannot happen. */ puts ("unknown prefix"); -- 2.7.4