* Makefile.in (ALLDEPFILES): Add alpha-osf1-tdep.c.
(alpha-osf1-tdep.o): New dependency list. * alpha-tdep.h (gdbarch_tdep): Add dynamic_sigtramp_offset and skip_sigtramp_frame members. * alpha-linux-tdep.c: Include gdbcore.h. (alpha_linux_sigtramp_offset): Change return type to LONGEST. (alpha_linux_init_abi): Initialize tdep->dynamic_sigtramp_offset. * alpha-osf1-tdep.c: New file. * alpha-tdep.c (alpha_osf_skip_sigtramp_frame): Moved to alpha-osf1-dep.c. (alpha_frame_past_sigtramp_frame): New function. (alpha_dynamic_sigtramp_offset): Ditto. (alpha_proc_desc_is_dyn_sigtramp): Ditto. (alpha_set_proc_desc_is_dyn_sigtramp): Ditto. (ALPHA_PROC_SIGTRAMP_MAGIC): Define. (push_sigtramp_desc): Use alpha_set_proc_desc_is_dyn_sigtramp. (after_prologue): Use alpha_proc_desc_is_dyn_sigtramp. (find_proc_desc): Use alpha_dynamic_sigtramp_offset. (alpha_frame_chain): Use alpha_frame_past_sigtramp_frame. (alpha_init_extra_frame_info): Use alpha_proc_desc_is_dyn_sigtramp. (alpha_pop_frame): Use alpha_proc_desc_is_dyn_sigtramp. (alpha_gdbarch_init): Initialize tdep->dynamic_sigtramp_offset and tdep->skip_sigtramp_frame. Set gdbarch_skip_trampoline_code to find_solib_trampoline_target. * config/alpha/alpha-osf1.mt (TDEPFILES): Add alpha-osf1-tdep.o. * config/alpha/tm-alpha.h: Remove inclusion of regcache.h. (SKIP_TRAMPOLINE_CODE): Remove. (PROC_DESC_IS_DYN_SIGTRAMP): Ditto. (SET_PROC_DESC_IS_DYN_SIGTRAMP): Ditto. (DYNAMIC_SIGTRAMP_OFFSET): Ditto. (FRAME_PAST_SIGTRAMP_FRAME): Ditto. * config/alpha/tm-alphalinux.h (PROC_DESC_IS_DYN_SIGTRAMP): Remove. (PROC_SIGTRAMP_MAGIC): Ditto. (PROC_DESC_IS_DYN_SIGTRAMP): Ditto. (SET_PROC_DESC_IS_DYN_SIGTRAMP): Ditto. (SET_PROC_DESC_IS_DYN_SIGTRAMP): Ditto. (DYNAMIC_SIGTRAMP_OFFSET): Ditto. (FRAME_PAST_SIGTRAMP_FRAME): Ditto.
This commit is contained in:
parent
2f4bc57b95
commit
36a6271d5e
9 changed files with 172 additions and 87 deletions
|
@ -29,7 +29,7 @@
|
|||
|
||||
/* Are we currently handling a signal ? */
|
||||
|
||||
extern long alpha_linux_sigtramp_offset (CORE_ADDR);
|
||||
extern LONGEST alpha_linux_sigtramp_offset (CORE_ADDR);
|
||||
#undef IN_SIGTRAMP
|
||||
#define IN_SIGTRAMP(pc, name) (alpha_linux_sigtramp_offset (pc) >= 0)
|
||||
|
||||
|
@ -42,42 +42,15 @@ extern long alpha_linux_sigtramp_offset (CORE_ADDR);
|
|||
/* Number of traps that happen between exec'ing the shell to run an
|
||||
inferior, and when we finally get to the inferior code. This is 2
|
||||
on GNU/Linux and most implementations. */
|
||||
|
||||
#undef START_INFERIOR_TRAPS_EXPECTED
|
||||
#define START_INFERIOR_TRAPS_EXPECTED 2
|
||||
|
||||
/* Return TRUE if procedure descriptor PROC is a procedure descriptor
|
||||
that refers to a dynamically generated sigtramp function. */
|
||||
|
||||
#undef PROC_DESC_IS_DYN_SIGTRAMP
|
||||
#define PROC_SIGTRAMP_MAGIC 0x0e0f0f0f
|
||||
#define PROC_DESC_IS_DYN_SIGTRAMP(proc) ((proc)->pdr.isym \
|
||||
== PROC_SIGTRAMP_MAGIC)
|
||||
#undef SET_PROC_DESC_IS_DYN_SIGTRAMP
|
||||
#define SET_PROC_DESC_IS_DYN_SIGTRAMP(proc) ((proc)->pdr.isym \
|
||||
= PROC_SIGTRAMP_MAGIC)
|
||||
|
||||
/* If PC is inside a dynamically generated sigtramp function, return
|
||||
how many bytes the program counter is beyond the start of that
|
||||
function. Otherwise, return a negative value. */
|
||||
|
||||
#undef DYNAMIC_SIGTRAMP_OFFSET
|
||||
#define DYNAMIC_SIGTRAMP_OFFSET(pc) (alpha_linux_sigtramp_offset (pc))
|
||||
|
||||
/* Translate a signal handler frame into the address of the sigcontext
|
||||
structure. */
|
||||
|
||||
#undef SIGCONTEXT_ADDR
|
||||
#define SIGCONTEXT_ADDR(frame) ((frame)->frame - 0x298)
|
||||
|
||||
/* If FRAME refers to a sigtramp frame, return the address of the next frame.
|
||||
|
||||
Under GNU/Linux, sigtramp handlers have dynamically generated
|
||||
procedure descriptors that make this hack unnecessary. */
|
||||
|
||||
#undef FRAME_PAST_SIGTRAMP_FRAME
|
||||
#define FRAME_PAST_SIGTRAMP_FRAME(frame, pc) (0)
|
||||
|
||||
#include "tm-linux.h"
|
||||
|
||||
#endif /* TM_LINUXALPHA_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue