2007-06-09 Markus Deuling <deuling@de.ibm.com>

* gdbarch.sh (SKIP_TRAMPOLINE_CODE): Replace by
	gdbarch_skip_trampoline_code.
	* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise (comment).
	* objc-lang.c (objc_skip_trampoline)
	(objc_submethod_helper_data): Likewise.
	* m32c-lang.c (m32c_skip_trampoline_code): Likewise (comment).
	* infrun.c (handle_inferior_event): Likewise.
	* gnu-v3-abi.c (gnuv3_skip_trampoline): Likewise.
	* gdbarch.sh (IN_SOLIB_RETURN_TRAMPOLINE): Replace by
	gdbarch_in_solib_return_trampoline.
	* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise (comment).
	* infrun.c (handle_inferior_event): Likewise.
	* hppa-tdep.c (hppa_stub_unwind_sniffer): Likewise.
	* gdbarch.c, gdbarch.h: Regenerate.
This commit is contained in:
Ulrich Weigand 2007-06-09 14:20:24 +00:00
parent a433963dd5
commit e76f05face
10 changed files with 36 additions and 39 deletions

View file

@ -1,3 +1,20 @@
2007-06-09 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (SKIP_TRAMPOLINE_CODE): Replace by
gdbarch_skip_trampoline_code.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise (comment).
* objc-lang.c (objc_skip_trampoline)
(objc_submethod_helper_data): Likewise.
* m32c-lang.c (m32c_skip_trampoline_code): Likewise (comment).
* infrun.c (handle_inferior_event): Likewise.
* gnu-v3-abi.c (gnuv3_skip_trampoline): Likewise.
* gdbarch.sh (IN_SOLIB_RETURN_TRAMPOLINE): Replace by
gdbarch_in_solib_return_trampoline.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise (comment).
* infrun.c (handle_inferior_event): Likewise.
* hppa-tdep.c (hppa_stub_unwind_sniffer): Likewise.
* gdbarch.c, gdbarch.h: Regenerate.
2007-06-09 Markus Deuling <deuling@de.ibm.com> 2007-06-09 Markus Deuling <deuling@de.ibm.com>
* gdbarch.sh (SKIP_PROLOGUE): Replace by gdbarch_skip_prologue. * gdbarch.sh (SKIP_PROLOGUE): Replace by gdbarch_skip_prologue.

View file

@ -971,12 +971,6 @@ gdbarch_dump (struct gdbarch *current_gdbarch, struct ui_file *file)
fprintf_unfiltered (file, fprintf_unfiltered (file,
"gdbarch_dump: in_function_epilogue_p = <0x%lx>\n", "gdbarch_dump: in_function_epilogue_p = <0x%lx>\n",
(long) current_gdbarch->in_function_epilogue_p); (long) current_gdbarch->in_function_epilogue_p);
#ifdef IN_SOLIB_RETURN_TRAMPOLINE
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
"IN_SOLIB_RETURN_TRAMPOLINE(pc, name)",
XSTRING (IN_SOLIB_RETURN_TRAMPOLINE (pc, name)));
#endif
fprintf_unfiltered (file, fprintf_unfiltered (file,
"gdbarch_dump: in_solib_return_trampoline = <0x%lx>\n", "gdbarch_dump: in_solib_return_trampoline = <0x%lx>\n",
(long) current_gdbarch->in_solib_return_trampoline); (long) current_gdbarch->in_solib_return_trampoline);
@ -1226,12 +1220,6 @@ gdbarch_dump (struct gdbarch *current_gdbarch, struct ui_file *file)
fprintf_unfiltered (file, fprintf_unfiltered (file,
"gdbarch_dump: skip_solib_resolver = <0x%lx>\n", "gdbarch_dump: skip_solib_resolver = <0x%lx>\n",
(long) current_gdbarch->skip_solib_resolver); (long) current_gdbarch->skip_solib_resolver);
#ifdef SKIP_TRAMPOLINE_CODE
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
"SKIP_TRAMPOLINE_CODE(pc)",
XSTRING (SKIP_TRAMPOLINE_CODE (pc)));
#endif
fprintf_unfiltered (file, fprintf_unfiltered (file,
"gdbarch_dump: skip_trampoline_code = <0x%lx>\n", "gdbarch_dump: skip_trampoline_code = <0x%lx>\n",
(long) current_gdbarch->skip_trampoline_code); (long) current_gdbarch->skip_trampoline_code);

View file

@ -923,12 +923,6 @@ extern void set_gdbarch_print_insn (struct gdbarch *gdbarch, gdbarch_print_insn_
typedef CORE_ADDR (gdbarch_skip_trampoline_code_ftype) (CORE_ADDR pc); typedef CORE_ADDR (gdbarch_skip_trampoline_code_ftype) (CORE_ADDR pc);
extern CORE_ADDR gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, CORE_ADDR pc); extern CORE_ADDR gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, CORE_ADDR pc);
extern void set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code); extern void set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code);
#if !defined (GDB_TM_FILE) && defined (SKIP_TRAMPOLINE_CODE)
#error "Non multi-arch definition of SKIP_TRAMPOLINE_CODE"
#endif
#if !defined (SKIP_TRAMPOLINE_CODE)
#define SKIP_TRAMPOLINE_CODE(pc) (gdbarch_skip_trampoline_code (current_gdbarch, pc))
#endif
/* If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER /* If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER
evaluates non-zero, this is the address where the debugger will place evaluates non-zero, this is the address where the debugger will place
@ -943,12 +937,6 @@ extern void set_gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, gdbarch_sk
typedef int (gdbarch_in_solib_return_trampoline_ftype) (CORE_ADDR pc, char *name); typedef int (gdbarch_in_solib_return_trampoline_ftype) (CORE_ADDR pc, char *name);
extern int gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name); extern int gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
extern void set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline); extern void set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline);
#if !defined (GDB_TM_FILE) && defined (IN_SOLIB_RETURN_TRAMPOLINE)
#error "Non multi-arch definition of IN_SOLIB_RETURN_TRAMPOLINE"
#endif
#if !defined (IN_SOLIB_RETURN_TRAMPOLINE)
#define IN_SOLIB_RETURN_TRAMPOLINE(pc, name) (gdbarch_in_solib_return_trampoline (current_gdbarch, pc, name))
#endif
/* A target might have problems with watchpoints as soon as the stack /* A target might have problems with watchpoints as soon as the stack
frame of the current function has been destroyed. This mostly happens frame of the current function has been destroyed. This mostly happens

View file

@ -621,7 +621,7 @@ M::int:single_step_through_delay:struct frame_info *frame:frame
# FIXME: cagney/2003-08-28: Need to find a better way of selecting the # FIXME: cagney/2003-08-28: Need to find a better way of selecting the
# disassembler. Perhaps objdump can handle it? # disassembler. Perhaps objdump can handle it?
f:TARGET_PRINT_INSN:int:print_insn:bfd_vma vma, struct disassemble_info *info:vma, info::0: f:TARGET_PRINT_INSN:int:print_insn:bfd_vma vma, struct disassemble_info *info:vma, info::0:
f:=:CORE_ADDR:skip_trampoline_code:CORE_ADDR pc:pc::generic_skip_trampoline_code::0 f::CORE_ADDR:skip_trampoline_code:CORE_ADDR pc:pc::generic_skip_trampoline_code::0
# If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER # If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER
@ -629,7 +629,7 @@ f:=:CORE_ADDR:skip_trampoline_code:CORE_ADDR pc:pc::generic_skip_trampoline_code
# a step-resume breakpoint to get us past the dynamic linker. # a step-resume breakpoint to get us past the dynamic linker.
m::CORE_ADDR:skip_solib_resolver:CORE_ADDR pc:pc::generic_skip_solib_resolver::0 m::CORE_ADDR:skip_solib_resolver:CORE_ADDR pc:pc::generic_skip_solib_resolver::0
# Some systems also have trampoline code for returning from shared libs. # Some systems also have trampoline code for returning from shared libs.
f:=:int:in_solib_return_trampoline:CORE_ADDR pc, char *name:pc, name::generic_in_solib_return_trampoline::0 f::int:in_solib_return_trampoline:CORE_ADDR pc, char *name:pc, name::generic_in_solib_return_trampoline::0
# A target might have problems with watchpoints as soon as the stack # A target might have problems with watchpoints as soon as the stack
# frame of the current function has been destroyed. This mostly happens # frame of the current function has been destroyed. This mostly happens

View file

@ -685,7 +685,7 @@ gnuv3_skip_trampoline (CORE_ADDR stop_pc)
struct obj_section *section; struct obj_section *section;
char *thunk_name, *fn_name; char *thunk_name, *fn_name;
real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc); real_stop_pc = gdbarch_skip_trampoline_code (current_gdbarch, stop_pc);
if (real_stop_pc == 0) if (real_stop_pc == 0)
real_stop_pc = stop_pc; real_stop_pc = stop_pc;
@ -708,7 +708,8 @@ gnuv3_skip_trampoline (CORE_ADDR stop_pc)
return 0; return 0;
method_stop_pc = SYMBOL_VALUE_ADDRESS (fn_sym); method_stop_pc = SYMBOL_VALUE_ADDRESS (fn_sym);
real_stop_pc = SKIP_TRAMPOLINE_CODE (method_stop_pc); real_stop_pc = gdbarch_skip_trampoline_code
(current_gdbarch, method_stop_pc);
if (real_stop_pc == 0) if (real_stop_pc == 0)
real_stop_pc = method_stop_pc; real_stop_pc = method_stop_pc;

View file

@ -2456,7 +2456,7 @@ hppa_stub_unwind_sniffer (struct frame_info *next_frame)
if (pc == 0 if (pc == 0
|| (tdep->in_solib_call_trampoline != NULL || (tdep->in_solib_call_trampoline != NULL
&& tdep->in_solib_call_trampoline (pc, NULL)) && tdep->in_solib_call_trampoline (pc, NULL))
|| IN_SOLIB_RETURN_TRAMPOLINE (pc, NULL)) || gdbarch_in_solib_return_trampoline (current_gdbarch, pc, NULL))
return &hppa_stub_frame_unwind; return &hppa_stub_frame_unwind;
return NULL; return NULL;
} }

View file

@ -2458,7 +2458,7 @@ process_event_stop_test:
end of, if we do step into it. */ end of, if we do step into it. */
real_stop_pc = skip_language_trampoline (stop_pc); real_stop_pc = skip_language_trampoline (stop_pc);
if (real_stop_pc == 0) if (real_stop_pc == 0)
real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc); real_stop_pc = gdbarch_skip_trampoline_code (current_gdbarch, stop_pc);
if (real_stop_pc != 0) if (real_stop_pc != 0)
ecs->stop_func_start = real_stop_pc; ecs->stop_func_start = real_stop_pc;
@ -2516,10 +2516,12 @@ process_event_stop_test:
/* If we're in the return path from a shared library trampoline, /* If we're in the return path from a shared library trampoline,
we want to proceed through the trampoline when stepping. */ we want to proceed through the trampoline when stepping. */
if (IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, ecs->stop_func_name)) if (gdbarch_in_solib_return_trampoline (current_gdbarch,
stop_pc, ecs->stop_func_name))
{ {
/* Determine where this trampoline returns. */ /* Determine where this trampoline returns. */
CORE_ADDR real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc); CORE_ADDR real_stop_pc = gdbarch_skip_trampoline_code
(current_gdbarch, stop_pc);
if (debug_infrun) if (debug_infrun)
fprintf_unfiltered (gdb_stdlog, "infrun: stepped into solib return tramp\n"); fprintf_unfiltered (gdb_stdlog, "infrun: stepped into solib return tramp\n");

View file

@ -2319,10 +2319,10 @@ m32c_return_value (struct gdbarch *gdbarch,
their program is calling, not in some trampoline code they've never their program is calling, not in some trampoline code they've never
seen before.) seen before.)
The SKIP_TRAMPOLINE_CODE gdbarch method tells GDB how to step The gdbarch_skip_trampoline_code method tells GDB how to step
through such trampoline functions transparently to the user. When through such trampoline functions transparently to the user. When
given the address of a trampoline function's first instruction, given the address of a trampoline function's first instruction,
SKIP_TRAMPOLINE_CODE should return the address of the first gdbarch_skip_trampoline_code should return the address of the first
instruction of the function really being called. If GDB decides it instruction of the function really being called. If GDB decides it
wants to step into that function, it will set a breakpoint there wants to step into that function, it will set a breakpoint there
and silently continue to it. and silently continue to it.

View file

@ -576,7 +576,7 @@ objc_skip_trampoline (CORE_ADDR stop_pc)
CORE_ADDR real_stop_pc; CORE_ADDR real_stop_pc;
CORE_ADDR method_stop_pc; CORE_ADDR method_stop_pc;
real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc); real_stop_pc = gdbarch_skip_trampoline_code (current_gdbarch, stop_pc);
if (real_stop_pc != 0) if (real_stop_pc != 0)
find_objc_msgcall (real_stop_pc, &method_stop_pc); find_objc_msgcall (real_stop_pc, &method_stop_pc);
@ -585,7 +585,8 @@ objc_skip_trampoline (CORE_ADDR stop_pc)
if (method_stop_pc) if (method_stop_pc)
{ {
real_stop_pc = SKIP_TRAMPOLINE_CODE (method_stop_pc); real_stop_pc = gdbarch_skip_trampoline_code
(current_gdbarch, method_stop_pc);
if (real_stop_pc == 0) if (real_stop_pc == 0)
real_stop_pc = method_stop_pc; real_stop_pc = method_stop_pc;
} }
@ -1647,7 +1648,7 @@ find_objc_msgsend (void)
* The old function "pc_off_limits" used to do a lot of other things * The old function "pc_off_limits" used to do a lot of other things
* in addition, such as detecting shared library jump stubs and * in addition, such as detecting shared library jump stubs and
* returning the address of the shlib function that would be called. * returning the address of the shlib function that would be called.
* That functionality has been moved into the SKIP_TRAMPOLINE_CODE and * That functionality has been moved into the gdbarch_skip_trampoline_code and
* IN_SOLIB_TRAMPOLINE macros, which are resolved in the target- * IN_SOLIB_TRAMPOLINE macros, which are resolved in the target-
* dependent modules. * dependent modules.
*/ */

View file

@ -1946,8 +1946,8 @@ rs6000_return_value (struct gdbarch *gdbarch, struct type *valtype,
branches, meaning that the link register doesn't get set. branches, meaning that the link register doesn't get set.
Therefore, GDB's usual step_over_function () mechanism won't work. Therefore, GDB's usual step_over_function () mechanism won't work.
Instead, use the IN_SOLIB_RETURN_TRAMPOLINE and Instead, use the gdbarch_skip_trampoline_code and
SKIP_TRAMPOLINE_CODE hooks in handle_inferior_event() to skip past gdbarch_skip_trampoline_code hooks in handle_inferior_event() to skip past
@FIX code. */ @FIX code. */
int int