keiths / rpms / gdb

Forked from rpms/gdb 6 days ago
Clone
Jan Kratochvil c693444
http://sourceware.org/ml/gdb-patches/2011-08/msg00283.html
Jan Kratochvil c693444
Subject: [patch] TUI: Permit stepi on stripped code
Jan Kratochvil c693444
Jan Kratochvil c693444
Hi,
Jan Kratochvil c693444
Jan Kratochvil c693444
nick <cinolt> on #gdb@freenode complained one cannot stepi on stripped binary.
Jan Kratochvil c693444
Jan Kratochvil c693444
echo -e '#include<unistd.h>\nint main(void){return alarm(0);}'|gcc -Wall -s -x c -;./gdbtui ./a.out -nx -ex 'layout asm' -ex 'b alarm' -ex r -ex fini
Jan Kratochvil c693444
will:
Jan Kratochvil c693444
	0x7ffff7ae25c0 <alarm>          mov    $0x25,%eax
Jan Kratochvil c693444
	-------------------------------------------------
Jan Kratochvil c693444
	(gdb) p/x $pc
Jan Kratochvil c693444
	$1 = 0x4004d2
Jan Kratochvil c693444
	(gdb) stepi
Jan Kratochvil c693444
	No function contains program counter for selected frame.
Jan Kratochvil c693444
	(gdb) p/x $pc
Jan Kratochvil c693444
	$2 = 0x4004d2
Jan Kratochvil c693444
Jan Kratochvil c693444
That is the window still displays stale content, stepi does not work at all.
Jan Kratochvil c693444
Jan Kratochvil c693444
#0  throw_verror (error=GENERIC_ERROR, fmt=0xe73d20 "No function contains program counter for selected frame.", ap=0x7fffdbd3b0a8) at exceptions.c:400
Jan Kratochvil c693444
#1  in error (string=0xe73d20 "No function contains program counter for selected frame.") at utils.c:780
Jan Kratochvil c693444
#2  in tui_show_frame_info (fi=0x3eca1e0) at ./tui/tui-stack.c:383
Jan Kratochvil c693444
#3  in tui_selected_frame_level_changed_hook (level=0) at ./tui/tui-hooks.c:218
Jan Kratochvil c693444
#4  in select_frame (fi=0x3eca1e0) at frame.c:1396
Jan Kratochvil c693444
#5  in restore_selected_frame (a_frame_id=..., frame_level=0) at thread.c:1049
Jan Kratochvil c693444
#6  in do_restore_current_thread_cleanup (arg=0x456dca0) at thread.c:1116
Jan Kratochvil c693444
#7  in do_my_cleanups (pmy_chain=0x1c865f0, old_chain=0x456de90) at utils.c:515
Jan Kratochvil c693444
#8  in do_cleanups (old_chain=0x456de90) at utils.c:497
Jan Kratochvil c693444
#9  in insert_breakpoint_locations () at breakpoint.c:2021
Jan Kratochvil c693444
#10 in insert_breakpoints () at breakpoint.c:1919
Jan Kratochvil c693444
#11 in proceed (addr=18446744073709551615, siggnal=TARGET_SIGNAL_DEFAULT, step=1) at infrun.c:2156
Jan Kratochvil c693444
#12 in step_once (skip_subroutines=0, single_inst=1, count=1, thread=-1) at infcmd.c:1068
Jan Kratochvil c693444
#13 in step_1 (skip_subroutines=0, single_inst=1, count_string=0x0) at infcmd.c:903
Jan Kratochvil c693444
#14 in stepi_command (count_string=0x0, from_tty=1) at infcmd.c:839
Jan Kratochvil c693444
Jan Kratochvil c693444
With the fix stepi works and the window correctly displays:
Jan Kratochvil c693444
	0x4004d2        pop    %rbp                
Jan Kratochvil c693444
	-------------------------------------------------
Jan Kratochvil c693444
Jan Kratochvil c693444
I haven't found any TUI testsuite.
Jan Kratochvil c693444
Jan Kratochvil c693444
I will check it in (after regression testing(?)) in some time.
Jan Kratochvil c693444
Jan Kratochvil c693444
Jan Kratochvil c693444
Thanks,
Jan Kratochvil c693444
Jan
Jan Kratochvil c693444
Jan Kratochvil c693444
Jan Kratochvil c693444
gdb/
Jan Kratochvil c693444
2011-08-14  Jan Kratochvil  <jan.kratochvil@redhat.com>
Jan Kratochvil c693444
Jan Kratochvil c693444
	Fix TUI stepi on code without symbols.
Jan Kratochvil c693444
	* tui/tui-stack.c (tui_show_frame_info): Remove error, set LOW for
Jan Kratochvil c693444
	current PC instead.
Jan Kratochvil c693444
Jan Kratochvil c693444
--- a/gdb/tui/tui-stack.c
Jan Kratochvil c693444
+++ b/gdb/tui/tui-stack.c
Jan Kratochvil c693444
@@ -380,8 +380,11 @@ tui_show_frame_info (struct frame_info *fi)
Jan Kratochvil c693444
 	    {
Jan Kratochvil c693444
 	      if (find_pc_partial_function (get_frame_pc (fi), (char **) NULL,
Jan Kratochvil c693444
 					    &low, (CORE_ADDR) 0) == 0)
Jan Kratochvil c693444
-		error (_("No function contains program "
Jan Kratochvil c693444
-			 "counter for selected frame."));
Jan Kratochvil c693444
+		{
Jan Kratochvil c693444
+		  /* There is no symbol available for current PC.  There is no
Jan Kratochvil c693444
+		     safe way how to "disassemble backwards".  */
Jan Kratochvil c693444
+		  low = get_frame_pc (fi);
Jan Kratochvil c693444
+		}
Jan Kratochvil c693444
 	      else
Jan Kratochvil c693444
 		low = tui_get_low_disassembly_address (get_frame_arch (fi),
Jan Kratochvil c693444
 						       low, get_frame_pc (fi));
Jan Kratochvil c693444