gdb: Use unwinder name in frame_info::to_string
authorLancelot SIX <lsix@lancelotsix.com>
Sun, 1 Aug 2021 15:47:29 +0000 (15:47 +0000)
committerLancelot SIX <lsix@lancelotsix.com>
Wed, 4 Aug 2021 23:12:06 +0000 (23:12 +0000)
While working on a stack unwinding issue using 'set debug frame on', I
noticed the frame_info::to_string method could be slightly improved.

Unwinders have been given a name in
a154d838a70e96d888620c072e2d6ea8bdf044ca.  Before this patch, frame_info
debug output prints the host address of the used unwinder, which is not
easy to interpret.  This patch proposes to use the unwinder name
instead since we now have it.

Before the patch:

    {level=1,type=NORMAL_FRAME,unwind=0x2ac1763ec0,pc=0x3ff7fc3460,id={stack=0x3ff7ea79b0,code=0x0000003ff7fc33ac,!special},func=0x3ff7fc33ac}

With the patch:

    {level=1,type=NORMAL_FRAME,unwinder="riscv prologue",pc=0x3ff7fc3460,id={stack=0x3ff7ea79b0,code=0x0000003ff7fc33ac,!special},func=0x3ff7fc33ac}

Tested on riscv64-linux-gnu.

gdb/frame.c

index 2332418f347d38816c6656dc2739b5997b8c3304..4d7505f7ae3a8e043652a2034e6e42fb68f3c974 100644 (file)
@@ -467,9 +467,9 @@ frame_info::to_string () const
     res += "type=<unknown>,";
 
   if (fi->unwind != NULL)
-    res += string_printf ("unwind=%p,", host_address_to_string (fi->unwind));
+    res += string_printf ("unwinder=\"%s\",", fi->unwind->name);
   else
-    res += "unwind=<unknown>,";
+    res += "unwinder=<unknown>,";
 
   if (fi->next == NULL || fi->next->prev_pc.status == CC_UNKNOWN)
     res += "pc=<unknown>,";