Index: defs.h =================================================================== RCS file: /cvs/src/src/gdb/defs.h,v retrieving revision 1.255 diff -u -p -u -r1.255 defs.h --- defs.h 22 Sep 2009 22:34:17 -0000 1.255 +++ defs.h 16 Oct 2009 22:37:36 -0000 @@ -608,6 +608,7 @@ extern int build_address_symbolic (CORE_ int *unmapped); extern void print_address (struct gdbarch *, CORE_ADDR, struct ui_file *); +extern const char *pc_prefix (CORE_ADDR); /* From source.c */ Index: disasm.c =================================================================== RCS file: /cvs/src/src/gdb/disasm.c,v retrieving revision 1.33 diff -u -p -u -r1.33 disasm.c --- disasm.c 11 Jul 2009 14:04:23 -0000 1.33 +++ disasm.c 16 Oct 2009 22:37:36 -0000 @@ -113,7 +113,7 @@ dump_insns (struct gdbarch *gdbarch, str num_displayed++; } ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); - ui_out_field_core_addr (uiout, "address", gdbarch, pc); + ui_out_field_core_addr (uiout, "pc_addr", gdbarch, pc); if (!build_address_symbolic (pc, 0, &name, &offset, &filename, &line, &unmapped)) Index: printcmd.c =================================================================== RCS file: /cvs/src/src/gdb/printcmd.c,v retrieving revision 1.164 diff -u -p -u -r1.164 printcmd.c --- printcmd.c 2 Jul 2009 17:25:58 -0000 1.164 +++ printcmd.c 16 Oct 2009 22:37:36 -0000 @@ -716,6 +716,32 @@ print_address (struct gdbarch *gdbarch, print_address_symbolic (addr, stream, asm_demangle, " "); } +/* Return a prefix for instruction address: + "* " for current instruction, else " ". */ + +const char * +pc_prefix (CORE_ADDR addr) +{ + if (has_stack_frames ()) + { + struct frame_info *frame; + CORE_ADDR pc; + + frame = get_selected_frame (NULL); + pc = get_frame_pc (frame); + + if (pc == addr) + return "* "; + } + return " "; +} + +static void +print_pc_prefix (CORE_ADDR addr, struct ui_file *stream) +{ + fputs_filtered (pc_prefix (addr), stream); +} + /* Print address ADDR symbolically on STREAM. Parameter DEMANGLE controls whether to print the symbolic name "raw" or demangled. Global setting "addressprint" controls whether to print hex address @@ -808,6 +834,8 @@ do_examine (struct format_data fmt, stru while (count > 0) { QUIT; + if (format == 'i') + print_pc_prefix (next_address, gdb_stdout); print_address (next_gdbarch, next_address, gdb_stdout); printf_filtered (":"); for (i = maxelts; Index: ui-out.c =================================================================== RCS file: /cvs/src/src/gdb/ui-out.c,v retrieving revision 1.43 diff -u -p -u -r1.43 ui-out.c --- ui-out.c 2 Jul 2009 17:21:07 -0000 1.43 +++ ui-out.c 16 Oct 2009 22:37:36 -0000 @@ -505,6 +505,9 @@ ui_out_field_core_addr (struct ui_out *u else strcpy (addstr, hex_string_custom (address, 16)); + if (strcmp (fldname, "pc_addr") == 0) + ui_out_text (uiout, pc_prefix (address)); + ui_out_field_string (uiout, fldname, addstr); }