| /* Signal trampoline unwinder, for GDB the GNU Debugger. |
| |
| Copyright 2004 Free Software Foundation, Inc. |
| |
| This file is part of GDB. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 59 Temple Place - Suite 330, |
| Boston, MA 02111-1307, USA. */ |
| |
| #ifndef TRAMP_FRAME_H |
| #define TRAMP_FRAME_H |
| |
| struct trad_frame; |
| struct frame_info; |
| struct trad_frame_cache; |
| |
| /* A trampoline consists of a small sequence of instructions placed at |
| an unspecified location in the inferior's address space. The only |
| identifying attribute of the trampoline's address is that it does |
| not fall inside an object file's section. |
| |
| 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 |
| operation. */ |
| |
| /* A trampoline descriptor. */ |
| |
| struct tramp_frame |
| { |
| /* The trampoline's entire instruction sequence. Search for this in |
| the inferior at or around the frame's PC. It is assumed that the |
| PC is INSN_SIZE aligned, and that each element of TRAMP contains |
| one INSN_SIZE instruction. It is also assumed that TRAMP[0] |
| contains the first instruction of the trampoline and hence the |
| address of the instruction matching TRAMP[0] is the trampoline's |
| "func" address. */ |
| int insn_size; |
| ULONGEST insn[8]; |
| /* 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 trad_frame_cache *this_cache, |
| CORE_ADDR func); |
| }; |
| |
| void tramp_frame_append (struct gdbarch *gdbarch, |
| const struct tramp_frame *tramp); |
| |
| #endif |