[COMMITTED] opcodes: xtensa: display loaded literal value

Message ID 20210423103408.29069-1-jcmvbkbc@gmail.com
State New
Headers show
Series
  • [COMMITTED] opcodes: xtensa: display loaded literal value
Related show

Commit Message

H.J. Lu via Binutils April 23, 2021, 10:34 a.m.
Display literal value loaded with l32r opcode as a part of disassembly.
This significantly simplifies reading of disassembly output.

2020-04-23  Max Filippov  <jcmvbkbc@gmail.com>
opcodes/
	* xtensa-dis.c (print_xtensa_operand): For PC-relative operand
	of l32r fetch and display referenced literal value.
---
 opcodes/xtensa-dis.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

-- 
2.20.1

Patch

diff --git a/opcodes/xtensa-dis.c b/opcodes/xtensa-dis.c
index e38fc39f4e7e..cfa058f96c71 100644
--- a/opcodes/xtensa-dis.c
+++ b/opcodes/xtensa-dis.c
@@ -194,7 +194,8 @@  print_xtensa_operand (bfd_vma memaddr,
 		      unsigned operand_val)
 {
   xtensa_isa isa = xtensa_default_isa;
-  int signed_operand_val;
+  int signed_operand_val, status;
+  bfd_byte litbuf[4];
 
   if (show_raw_fields)
     {
@@ -216,6 +217,23 @@  print_xtensa_operand (bfd_vma memaddr,
 					    &operand_val, memaddr);
 	  info->target = operand_val;
 	  (*info->print_address_func) (info->target, info);
+	  /*  Also display value loaded by L32R (but not if reloc exists,
+	      those tend to be wrong):  */
+	  if ((info->flags & INSN_HAS_RELOC) == 0
+	      && !strcmp ("l32r", xtensa_opcode_name (isa, opc)))
+	    status = (*info->read_memory_func) (operand_val, litbuf, 4, info);
+	  else
+	    status = -1;
+
+	  if (status == 0)
+	    {
+	      unsigned literal = bfd_get_bits (litbuf, 32,
+					       info->endian == BFD_ENDIAN_BIG);
+
+	      (*info->fprintf_func) (info->stream, " (");
+	      (*info->print_address_func) (literal, info);
+	      (*info->fprintf_func) (info->stream, ")");
+	    }
 	}
       else
 	{