Make "set disassemble-next-line on" can work with DUMMY_FRAME, SIGTRAMP_FRAME and...
authorHui Zhu <teawater@gmail.com>
Sun, 27 Apr 2014 14:23:43 +0000 (22:23 +0800)
committerHui Zhu <teawater@gmail.com>
Sun, 27 Apr 2014 14:23:43 +0000 (22:23 +0800)
When GDB debug DUMMY_FRAME, SIGTRAMP_FRAME and ARCH_FRAME, even if
"set disassemble-next-line on", it will not output the asm code:
(gdb) set disassemble-next-line on
(gdb) si
<signal handler called>
(gdb)
<signal handler called>
(gdb)
<signal handler called>

So make this patch make they can work together, it will become:
(gdb) si
<signal handler called>
=> 0xffffffff816bfb09 <int_with_check+0>: 65 48 8b 0c 25 c8 c7 00 00 mov    %gs:0xc7c8,%rcx
(gdb)
<signal handler called>
=> 0xffffffff816bfb12 <int_with_check+9>: 48 81 e9 d8 1f 00 00 sub    $0x1fd8,%rcx
(gdb)
<signal handler called>
=> 0xffffffff816bfb19 <int_with_check+16>: 8b 51 10 mov    0x10(%rcx),%edx

2014-04-27  Hui Zhu  <hui@codesourcery.com>

* stack.c (print_frame_info): Call do_gdb_disassembly with
DUMMY_FRAME, SIGTRAMP_FRAME and ARCH_FRAME.

gdb/ChangeLog
gdb/stack.c

index b333606f4b83086833d657f46e9747037f146d76..e1093cf36b55bd3734e3bf363dc5a745e0da6f80 100644 (file)
@@ -1,3 +1,8 @@
+2014-04-27  Hui Zhu  <hui@codesourcery.com>
+
+       * stack.c (print_frame_info): Call do_gdb_disassembly with
+       DUMMY_FRAME, SIGTRAMP_FRAME and ARCH_FRAME.
+
 2014-04-26  Doug Evans  <xdje42@gmail.com>
 
        * guile/scm-safe-call.c (scscm_eval_scheme_string): Fix comment.
index da7d977510148acb7cd9ccdb24b3c8e77eec888b..6f08aaec07d14b312a7622303cda2cda241756dc 100644 (file)
@@ -836,6 +836,13 @@ print_frame_info (struct frame_info *frame, int print_level,
       ui_out_text (uiout, "\n");
       annotate_frame_end ();
 
+      /* If disassemble-next-line is set to auto or on output the next
+        instruction.  */
+      if (disassemble_next_line == AUTO_BOOLEAN_AUTO
+         || disassemble_next_line == AUTO_BOOLEAN_TRUE)
+       do_gdb_disassembly (get_frame_arch (frame), 1,
+                           get_frame_pc (frame), get_frame_pc (frame) + 1);
+
       do_cleanups (uiout_cleanup);
       return;
     }