Make "set disassemble-next-line on" can work with DUMMY_FRAME, SIGTRAMP_FRAME and ARCH_FRAME

Message ID 5359EAB3.7060808@mentor.com
State Committed
Headers

Commit Message

Hui Zhu April 25, 2014, 4:55 a.m. UTC
  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

Thanks,
Hui

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

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

Comments

Pedro Alves April 25, 2014, 7:46 p.m. UTC | #1
On 04/25/2014 05:55 AM, Hui Zhu wrote:

> 2014-04-25  Hui Zhu  <hui@codesourcery.com>
> 
>      * stack.c (print_frame_info): Call do_gdb_disassembly with
>      DUMMY_FRAME, SIGTRAMP_FRAME and ARCH_FRAME.

OK, thanks.
  
Hui Zhu April 27, 2014, 2:26 p.m. UTC | #2
On Sat, Apr 26, 2014 at 3:46 AM, Pedro Alves <palves@redhat.com> wrote:
> On 04/25/2014 05:55 AM, Hui Zhu wrote:
>
>> 2014-04-25  Hui Zhu  <hui@codesourcery.com>
>>
>>      * stack.c (print_frame_info): Call do_gdb_disassembly with
>>      DUMMY_FRAME, SIGTRAMP_FRAME and ARCH_FRAME.
>
> OK, thanks.

Commited as https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=433e77fad1fda55408db072de18dcd4f9116289e

Thanks,
Hui

>
> --
> Pedro Alves
  

Patch

--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -836,6 +836,13 @@  print_frame_info (struct frame_info *fra
        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;
      }