/* Signal trampoline unwinder.
- Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2004-2019 Free Software Foundation, Inc.
This file is part of GDB.
The only way to identify a trampoline is to perform a brute force
examination of the instructions at and around the PC.
- This module provides a convent interface for performing that
+ This module provides a convenient interface for performing that
operation. */
/* A trampoline descriptor. */
/* Magic instruction that to mark the end of the signal trampoline
instruction sequence. */
-#define TRAMP_SENTINEL_INSN ((LONGEST) -1)
+#define TRAMP_SENTINEL_INSN ULONGEST_MAX
struct tramp_frame
{
{
ULONGEST bytes;
ULONGEST mask;
- } insn[16];
+ } insn[48];
/* Initialize a trad-frame cache corresponding to the tramp-frame.
FUNC is the address of the instruction TRAMP[0] in memory. */
void (*init) (const struct tramp_frame *self,
- struct frame_info *next_frame,
+ struct frame_info *this_frame,
struct trad_frame_cache *this_cache,
CORE_ADDR func);
+ /* Return non-zero if the tramp-frame is valid for the PC requested.
+ Adjust the PC to point to the address to check the instruction
+ sequence against if required. If this is NULL, then the tramp-frame
+ is valid for any PC. */
+ int (*validate) (const struct tramp_frame *self,
+ struct frame_info *this_frame,
+ CORE_ADDR *pc);
};
void tramp_frame_prepend_unwinder (struct gdbarch *gdbarch,