objtool: Compact output for alternatives with one instruction

When disassembling, if an instruction has alternatives which are all
made of a single instruction then print each alternative on a single
line (instruction + description) so that the output is more compact.

Signed-off-by: Alexandre Chartre <alexandre.chartre@oracle.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
Link: https://patch.msgid.link/20251121095340.464045-29-alexandre.chartre@oracle.com
This commit is contained in:
Alexandre Chartre
2025-11-21 10:53:38 +01:00
committed by Peter Zijlstra
parent 56967b9a77
commit 07d70b271a
+22
View File
@@ -863,6 +863,7 @@ static void disas_alt_print_compact(char *alt_name, struct disas_alt *dalts,
int alt_count, int insn_count)
{
struct instruction *orig_insn;
int width;
int i, j;
int len;
@@ -871,6 +872,27 @@ static void disas_alt_print_compact(char *alt_name, struct disas_alt *dalts,
len = disas_print(stdout, orig_insn->sec, orig_insn->offset, 0, NULL);
printf("%s\n", alt_name);
/*
* If all alternatives have a single instruction then print each
* alternative on a single line. Otherwise, print alternatives
* one above the other with a clear separation.
*/
if (insn_count == 1) {
width = 0;
for (i = 0; i < alt_count; i++) {
if (dalts[i].width > width)
width = dalts[i].width;
}
for (i = 0; i < alt_count; i++) {
printf("%*s= %-*s (if %s)\n", len, "", width,
dalts[i].insn[0].str, dalts[i].name);
}
return;
}
for (i = 0; i < alt_count; i++) {
printf("%*s= %s\n", len, "", dalts[i].name);
for (j = 0; j < insn_count; j++) {