aboutsummaryrefslogtreecommitdiff
path: root/opcodes/aarch64-dis.c
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2022-06-16 13:46:41 +0100
committerAndrew Burgess <aburgess@redhat.com>2022-06-29 12:03:22 +0100
commit6837a663c55602490ed095e5891e0c4deff4b9db (patch)
treea762fdea523363cb8cf594cc2d5a22c6ecc69340 /opcodes/aarch64-dis.c
parent13f72372413400410aaa94b7f0e2ff7de663fdcb (diff)
downloadgdb-6837a663c55602490ed095e5891e0c4deff4b9db.zip
gdb-6837a663c55602490ed095e5891e0c4deff4b9db.tar.gz
gdb-6837a663c55602490ed095e5891e0c4deff4b9db.tar.bz2
opcodes/aarch64: split off creation of comment text in disassembler
The function aarch64_print_operand (aarch64-opc.c) is responsible for converting an instruction operand into the textual representation of that operand. In some cases, a comment is included in the operand representation, though this (currently) only happens for the last operand of the instruction. In a future commit I would like to enable the new libopcodes styling for AArch64, this will allow objdump and GDB[1] to syntax highlight the disassembler output, however, having operands and comments combined in a single string like this makes such styling harder. In this commit, I propose to extend aarch64_print_operand to take a second buffer. Any comments for the instruction are written into this extra buffer. The two callers of aarch64_print_operand are then updated to pass an extra buffer, and print any resulting comment. In this commit no styling is added, that will come later. However, I have adjusted the output slightly. Before this commit some comments would be separated from the instruction operands with a tab character, while in other cases the comment was separated with two single spaces. After this commit I use a single tab character in all cases. This means a few test cases needed updated. If people would prefer me to move everyone to use the two spaces, then just let me know. Or maybe there was a good reason why we used a mix of styles, I could probably figure out a way to maintain the old output exactly if that is critical. Other than that, there should be no user visible changes after this commit. [1] GDB patches have not been merged yet, but have been posted to the GDB mailing list: https://sourceware.org/pipermail/gdb-patches/2022-June/190142.html
Diffstat (limited to 'opcodes/aarch64-dis.c')
-rw-r--r--opcodes/aarch64-dis.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c
index bd2068b..acaad28 100644
--- a/opcodes/aarch64-dis.c
+++ b/opcodes/aarch64-dis.c
@@ -3287,6 +3287,8 @@ print_operands (bfd_vma pc, const aarch64_opcode *opcode,
for (i = 0, num_printed = 0; i < AARCH64_MAX_OPND_NUM; ++i)
{
char str[128];
+ char cmt[128];
+
/* We regard the opcode operand info more, however we also look into
the inst->operands to support the disassembling of the optional
operand.
@@ -3298,7 +3300,8 @@ print_operands (bfd_vma pc, const aarch64_opcode *opcode,
/* Generate the operand string in STR. */
aarch64_print_operand (str, sizeof (str), pc, opcode, opnds, i, &pcrel_p,
- &info->target, &notes, arch_variant);
+ &info->target, &notes, cmt, sizeof (cmt),
+ arch_variant);
/* Print the delimiter (taking account of omitted operand(s)). */
if (str[0] != '\0')
@@ -3309,7 +3312,15 @@ print_operands (bfd_vma pc, const aarch64_opcode *opcode,
if (pcrel_p)
(*info->print_address_func) (info->target, info);
else
- (*info->fprintf_func) (info->stream, "%s", str);
+ {
+ (*info->fprintf_func) (info->stream, "%s", str);
+
+ /* Print the comment. This works because only the last operand
+ ever adds a comment. If that ever changes then we'll need to
+ be smarter here. */
+ if (cmt[0] != '\0')
+ (*info->fprintf_func) (info->stream, "\t// %s", cmt);
+ }
}
if (notes && !no_notes)