This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] [ARC] Force the disassam to use the hexadecimal number for printing
- From: Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>
- To: <nickc at redhat dot com>, <binutils at sourceware dot org>
- Cc: <Francois dot Bedard at synopsys dot com>, <Claudiu dot Zissulescu at synopsys dot com>
- Date: Fri, 3 Nov 2017 14:28:01 +0100
- Subject: [PATCH] [ARC] Force the disassam to use the hexadecimal number for printing
- Authentication-results: sourceware.org; auth=none
- References: <b7d36419-8d2c-f4c7-d71d-74b0197337da@redhat.com>
Please find the updated patch with the required test.
Thank you,
Claudiu
opcode/
2017-03-30 Claudiu Zissulescu <claziss@synopsys.com>
* arc-dis.c (print_hex): New variable.
(parse_option): Check for hex option.
(print_insn_arc): Use hexadecimal representation for short
immediate values when requested.
(print_arc_disassembler_options): Add hex option to the list.
binutils/
2017-03-30 Claudiu Zissulescu <claziss@synopsys.com>
* doc/binutils.texi (ARC): Update disassembler options.
* testsuite/binutils-all/arc/hexprint.s: New file.
* testsuite/binutils-all/arc/objdump.exp: Test hex printing feature.
---
binutils/doc/binutils.texi | 7 +++++--
binutils/testsuite/binutils-all/arc/hexprint.s | 2 ++
binutils/testsuite/binutils-all/arc/objdump.exp | 7 ++++++-
opcodes/arc-dis.c | 14 +++++++++++++-
4 files changed, 26 insertions(+), 4 deletions(-)
create mode 100644 binutils/testsuite/binutils-all/arc/hexprint.s
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 98a4592..0cf3a10 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -2313,8 +2313,11 @@ special QuarkSE-EM instructions, @option{quarkse2_em} selects the
printing of special QuarkSE2-EM instructions, @option{fpuda} selects
the printing of double precision assist instructions, @option{fpus}
selects the printing of FPU single precision FP instructions, while
-@option{fpud} selects the printing of FPU souble precision FP
-instructions.
+@option{fpud} selects the printing of FPU double precision FP
+instructions. Additionally, one can choose to have all the immediates
+printed in hexadecimal using @option{hex}. By default, the short
+immediates are printed using the decimal representation, while the
+long immediate values are printed as hexadecimal.
@option{cpu=...} allows to enforce a particular ISA when disassembling
instructions, overriding the @option{-m} value or whatever is in the ELF file.
diff --git a/binutils/testsuite/binutils-all/arc/hexprint.s b/binutils/testsuite/binutils-all/arc/hexprint.s
new file mode 100644
index 0000000..bdc61b0
--- /dev/null
+++ b/binutils/testsuite/binutils-all/arc/hexprint.s
@@ -0,0 +1,2 @@
+ .cpu EM
+ st r0,[r1,-9]
diff --git a/binutils/testsuite/binutils-all/arc/objdump.exp b/binutils/testsuite/binutils-all/arc/objdump.exp
index 2037b2b..669d57a 100644
--- a/binutils/testsuite/binutils-all/arc/objdump.exp
+++ b/binutils/testsuite/binutils-all/arc/objdump.exp
@@ -91,4 +91,9 @@ check_assembly "arc double_store -Mcpu=em,fpus" $objfile \
# Make sure that the last cpu= value is used.
check_assembly "arc double_store -Mcpu=hs,cpu=em" $objfile \
$double_store_em_expected "-Mcpu=hs,cpu=em"
-
+# Check the hex printing for short immediates.
+set thexobj [do_objfile hexprint.s]
+check_assembly "arc hex printing" $thexobj \
+ {st\s*r0,\[r1,0xfffffff7\]} "-Mhex"
+check_assembly "arc normal printing" $thexobj \
+ {st\s*r0,\[r1,-9\]}
diff --git a/opcodes/arc-dis.c b/opcodes/arc-dis.c
index 9473f94..a01e72e 100644
--- a/opcodes/arc-dis.c
+++ b/opcodes/arc-dis.c
@@ -122,6 +122,9 @@ static linkclass decodelist = NULL;
static unsigned enforced_isa_mask = ARC_OPCODE_NONE;
+/* True if we want to print using only hex numbers. */
+static bfd_boolean print_hex = FALSE;
+
/* Macros section. */
#ifdef DEBUG
@@ -780,6 +783,8 @@ parse_option (const char *option)
add_to_decodelist (FLOAT, DP);
add_to_decodelist (FLOAT, CVT);
}
+ else if (CONST_STRNEQ (option, "hex"))
+ print_hex = TRUE;
else
fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option);
}
@@ -1265,7 +1270,12 @@ print_insn_arc (bfd_vma memaddr,
if (rname && open_braket)
(*info->fprintf_func) (info->stream, "%s", rname);
else
- (*info->fprintf_func) (info->stream, "%d", value);
+ {
+ if (print_hex)
+ (*info->fprintf_func) (info->stream, "%#x", value);
+ else
+ (*info->fprintf_func) (info->stream, "%d", value);
+ }
}
else if (operand->flags & ARC_OPERAND_ADDRTYPE)
{
@@ -1378,6 +1388,8 @@ with -M switch (multiple options should be separated by commas):\n"));
fpus Recognize single precision FPU instructions.\n"));
fprintf (stream, _("\
fpud Recognize double precision FPU instructions.\n"));
+ fprintf (stream, _("\
+ hex Use only hexadecimal number to print immediates.\n"));
}
void arc_insn_decode (bfd_vma addr,
--
1.9.1