From 39a938a62d0153a98ab3d1115d845b904192a832 Mon Sep 17 00:00:00 2001 From: Lianbo Jiang Date: Tue, 21 Feb 2023 11:03:26 +0800 Subject: [PATCH 76/89] Fix for "dis" command to correctly display the offset of disassembly code For gdb-10.2, the disassembly code may start with "=>", which needs to be stripped when calculating the address. Otherwise, parsing the address will fail because the current code always assumes that it starts with the "0x". For example: crash> gdb disassemble 0xffffffffa2317add Dump of assembler code for function native_queued_spin_lock_slowpath: ... 0xffffffffa2317ad3 <+35>: mov %edx,%eax 0xffffffffa2317ad5 <+37>: lock cmpxchg %ecx,(%rdi) => 0xffffffffa2317ad9 <+41>: cmp %eax,%edx 0xffffffffa2317adb <+43>: jne 0xffffffffa2317ac0 ... 0xffffffffa2317add <+45>: pop %rbp ... Without the patch: crash> dis 0xffffffffa2317add -r | tail -5 0xffffffffa2317ad3 : mov %edx,%eax 0xffffffffa2317ad5 : lock cmpxchg %ecx,(%rdi) 0xffffffffa2317ad5 : cmp %eax,%edx ^^ 0xffffffffa2317adb : jne 0xffffffffa2317ac0 ... 0xffffffffa2317add : pop %rbp With the patch: crash> dis 0xffffffffa2317add -r | tail -5 0xffffffffa2317ad3 : mov %edx,%eax 0xffffffffa2317ad5 : lock cmpxchg %ecx,(%rdi) 0xffffffffa2317ad9 : cmp %eax,%edx 0xffffffffa2317adb : jne 0xffffffffa2317ac0 ... 0xffffffffa2317add : pop %rbp Reported-by: Vernon Lovejoy Signed-off-by: Lianbo Jiang --- kernel.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel.c b/kernel.c index 3ca513962970..3f2d9a15a78d 100644 --- a/kernel.c +++ b/kernel.c @@ -2113,6 +2113,10 @@ cmd_dis(void) rewind(pc->tmpfile); while (fgets(buf2, BUFSIZE, pc->tmpfile)) { + + if (STRNEQ(buf2, "=>")) + shift_string_left(buf2, 2); + strip_beginning_whitespace(buf2); if (do_load_module_filter) -- 2.37.1