diff options
author | Jeff Law <law@redhat.com> | 1994-03-29 18:36:48 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1994-03-29 18:36:48 +0000 |
commit | a87c93b7166a62849b57bbfa35beda45c98edef4 (patch) | |
tree | 9898ce6af2b5952529d6c540b56d7b6721e84d59 /gdb/config/pa | |
parent | 8d59d6db8d1fb84796259d3063f94a13b728207d (diff) | |
download | gdb-a87c93b7166a62849b57bbfa35beda45c98edef4.zip gdb-a87c93b7166a62849b57bbfa35beda45c98edef4.tar.gz gdb-a87c93b7166a62849b57bbfa35beda45c98edef4.tar.bz2 |
Put back include to tm-hppa.h mistakenly taken out during a recent checkin.
Diffstat (limited to 'gdb/config/pa')
-rw-r--r-- | gdb/config/pa/tm-hppah.h | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/gdb/config/pa/tm-hppah.h b/gdb/config/pa/tm-hppah.h index a5177db..5c35f7d 100644 --- a/gdb/config/pa/tm-hppah.h +++ b/gdb/config/pa/tm-hppah.h @@ -20,14 +20,56 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* Mostly it's common to all HPPA's. */ -#include "pa/tm-hppa.h" -/* Saved PC's are different, since there is millicode. */ -extern CORE_ADDR millicode_start, millicode_end; +/* Actually, for a PA running HPUX the kernel calls the signal handler + without an intermediate trampoline. Luckily the kernel always sets + the return pointer for the signal handler to point to _sigreturn. */ +#define IN_SIGTRAMP(pc, name) (name && STREQ ("_sigreturn", name)) + +/* For HPUX: + + The signal context structure pointer is always saved at the base + of the frame which "calls" the signal handler. We only want to find + the hardware save state structure, which lives 10 32bit words into + sigcontext structure. + + Within the hardware save state structure, registers are found in the + same order as the register numbers in GDB. + + The kernel apparently sets %r31 in the saved state structure to point + to the active instruction when the signal was taken. Everything + else looks fairly reasonable. (I assume the kernel fixes %r31 from + within _sigreturn?. */ + +#define FRAME_SAVED_PC_IN_SIGTRAMP(FRAME, TMP) \ +{ \ + *(TMP) = read_memory_integer ((FRAME)->frame + (41 * 4) , 4); \ +} + +#define FRAME_BASE_BEFORE_SIGTRAMP(FRAME, TMP) \ +{ \ + *(TMP) = read_memory_integer ((FRAME)->frame + (40 * 4), 4); \ +} + +#define FRAME_FIND_SAVED_REGS_IN_SIGTRAMP(FRAME, FSR) \ +{ \ + int i; \ + CORE_ADDR TMP; \ + TMP = (FRAME)->frame + (10 * 4); \ + for (i = 0; i < NUM_REGS; i++) \ + { \ + if (i == SP_REGNUM) \ + (FSR)->regs[SP_REGNUM] = read_memory_integer (TMP + SP_REGNUM * 4, 4); \ + else \ + (FSR)->regs[i] = TMP + i * 4; \ + } \ +} /* We need to figure out where the text region is so that we use the appropriate ptrace operator to manipulate text. Simply reading/writing user space will crap out HPUX. */ #define NEED_TEXT_START_END + +/* Mostly it's common to all HPPA's. */ +#include "pa/tm-hppa.h" |