]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/config/pa/tm-hppa.h
2004-04-06 Andrew Cagney <cagney@redhat.com>
[thirdparty/binutils-gdb.git] / gdb / config / pa / tm-hppa.h
CommitLineData
c906108c 1/* Parameters for execution on any Hewlett-Packard PA-RISC machine.
343af405
AC
2
3 Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
5 Foundation, Inc.
c906108c
SS
6
7 Contributed by the Center for Software Science at the
8 University of Utah (pa-gdb-bugs@cs.utah.edu).
9
c5aa993b 10 This file is part of GDB.
c906108c 11
c5aa993b
JM
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
c906108c 16
c5aa993b
JM
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
c906108c 21
c5aa993b
JM
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. */
c906108c 26
f88e2c52
AC
27#include "regcache.h"
28
61995b3b 29#define GDB_MULTI_ARCH 1
e6e68f1f 30
222e5d1d
AC
31/* Hack, get around problem with including "arch-utils.h". */
32struct frame_info;
e92b0cc9 33
c906108c
SS
34/* Forward declarations of some types we use in prototypes */
35
c906108c
SS
36struct frame_info;
37struct frame_saved_regs;
38struct value;
39struct type;
40struct inferior_status;
c906108c 41
d709c020
JB
42extern int hppa_pc_requires_run_before_use (CORE_ADDR pc);
43#define PC_REQUIRES_RUN_BEFORE_USE(pc) hppa_pc_requires_run_before_use (pc)
c906108c 44
c906108c
SS
45/* Register numbers of various important registers.
46 Note that some of these values are "real" register numbers,
47 and correspond to the general registers of the machine,
48 and some are "phony" register numbers which are too large
49 to be actual register numbers as far as the user is concerned
50 but do serve to get the desired values when passed to read_register. */
51
52#define R0_REGNUM 0 /* Doesn't actually exist, used as base for
53 other r registers. */
54#define FLAGS_REGNUM 0 /* Various status flags */
55#define RP_REGNUM 2 /* return pointer */
eded0a31
AC
56#define HPPA_FP_REGNUM 3 /* The ABI's frame pointer, when used */
57#define HPPA_SP_REGNUM 30 /* Stack pointer. */
c906108c
SS
58#define SAR_REGNUM 32 /* Shift Amount Register */
59#define IPSW_REGNUM 41 /* Interrupt Processor Status Word */
60#define PCOQ_HEAD_REGNUM 33 /* instruction offset queue head */
61#define PCSQ_HEAD_REGNUM 34 /* instruction space queue head */
62#define PCOQ_TAIL_REGNUM 35 /* instruction offset queue tail */
63#define PCSQ_TAIL_REGNUM 36 /* instruction space queue tail */
64#define EIEM_REGNUM 37 /* External Interrupt Enable Mask */
65#define IIR_REGNUM 38 /* Interrupt Instruction Register */
66#define IOR_REGNUM 40 /* Interrupt Offset Register */
67#define SR4_REGNUM 43 /* space register 4 */
68#define RCR_REGNUM 51 /* Recover Counter (also known as cr0) */
69#define CCR_REGNUM 54 /* Coprocessor Configuration Register */
70#define TR0_REGNUM 57 /* Temporary Registers (cr24 -> cr31) */
c5aa993b 71#define CR27_REGNUM 60 /* Base register for thread-local storage, cr27 */
eded0a31 72#define HPPA_FP0_REGNUM 64 /* First floating-point. */
c906108c
SS
73#define FP4_REGNUM 72
74
c5aa993b
JM
75#define ARG0_REGNUM 26 /* The first argument of a callee. */
76#define ARG1_REGNUM 25 /* The second argument of a callee. */
77#define ARG2_REGNUM 24 /* The third argument of a callee. */
78#define ARG3_REGNUM 23 /* The fourth argument of a callee. */
c906108c 79
c906108c
SS
80/* When fetching register values from an inferior or a core file,
81 clean them up using this macro. BUF is a char pointer to
82 the raw value of the register in the registers[] array. */
83
4ee3352d 84#define DEPRECATED_CLEAN_UP_REGISTER_VALUE(regno, buf) \
c906108c
SS
85 do { \
86 if ((regno) == PCOQ_HEAD_REGNUM || (regno) == PCOQ_TAIL_REGNUM) \
7be570e7 87 (buf)[sizeof(CORE_ADDR) -1] &= ~0x3; \
c906108c
SS
88 } while (0)
89
c906108c
SS
90/* PA specific macro to see if the current instruction is nullified. */
91#ifndef INSTRUCTION_NULLIFIED
d709c020
JB
92extern int hppa_instruction_nullified (void);
93#define INSTRUCTION_NULLIFIED hppa_instruction_nullified ()
c906108c
SS
94#endif
95
c906108c
SS
96#define INSTRUCTION_SIZE 4
97
c906108c
SS
98/*
99 * Unwind table and descriptor.
100 */
101
c5aa993b
JM
102struct unwind_table_entry
103 {
7be570e7
JM
104 CORE_ADDR region_start;
105 CORE_ADDR region_end;
c5aa993b
JM
106
107 unsigned int Cannot_unwind:1; /* 0 */
108 unsigned int Millicode:1; /* 1 */
109 unsigned int Millicode_save_sr0:1; /* 2 */
110 unsigned int Region_description:2; /* 3..4 */
111 unsigned int reserved1:1; /* 5 */
112 unsigned int Entry_SR:1; /* 6 */
113 unsigned int Entry_FR:4; /* number saved *//* 7..10 */
114 unsigned int Entry_GR:5; /* number saved *//* 11..15 */
115 unsigned int Args_stored:1; /* 16 */
116 unsigned int Variable_Frame:1; /* 17 */
117 unsigned int Separate_Package_Body:1; /* 18 */
118 unsigned int Frame_Extension_Millicode:1; /* 19 */
119 unsigned int Stack_Overflow_Check:1; /* 20 */
120 unsigned int Two_Instruction_SP_Increment:1; /* 21 */
121 unsigned int Ada_Region:1; /* 22 */
122 unsigned int cxx_info:1; /* 23 */
123 unsigned int cxx_try_catch:1; /* 24 */
124 unsigned int sched_entry_seq:1; /* 25 */
125 unsigned int reserved2:1; /* 26 */
126 unsigned int Save_SP:1; /* 27 */
127 unsigned int Save_RP:1; /* 28 */
128 unsigned int Save_MRP_in_frame:1; /* 29 */
129 unsigned int extn_ptr_defined:1; /* 30 */
130 unsigned int Cleanup_defined:1; /* 31 */
131
132 unsigned int MPE_XL_interrupt_marker:1; /* 0 */
133 unsigned int HP_UX_interrupt_marker:1; /* 1 */
134 unsigned int Large_frame:1; /* 2 */
135 unsigned int Pseudo_SP_Set:1; /* 3 */
136 unsigned int reserved4:1; /* 4 */
137 unsigned int Total_frame_size:27; /* 5..31 */
138
139 /* This is *NOT* part of an actual unwind_descriptor in an object
140 file. It is *ONLY* part of the "internalized" descriptors that
141 we create from those in a file.
c906108c 142 */
c5aa993b
JM
143 struct
144 {
145 unsigned int stub_type:4; /* 0..3 */
146 unsigned int padding:28; /* 4..31 */
147 }
148 stub_unwind;
149 };
c906108c
SS
150
151/* HP linkers also generate unwinds for various linker-generated stubs.
152 GDB reads in the stubs from the $UNWIND_END$ subspace, then
153 "converts" them into normal unwind entries using some of the reserved
154 fields to store the stub type. */
155
c906108c
SS
156/* The gaps represent linker stubs used in MPE and space for future
157 expansion. */
158enum unwind_stub_types
c5aa993b
JM
159 {
160 LONG_BRANCH = 1,
161 PARAMETER_RELOCATION = 2,
162 EXPORT = 10,
163 IMPORT = 11,
164 IMPORT_SHLIB = 12,
165 };
c906108c
SS
166
167/* We use the objfile->obj_private pointer for two things:
c5aa993b 168
c906108c
SS
169 * 1. An unwind table;
170 *
171 * 2. A pointer to any associated shared library object.
172 *
173 * #defines are used to help refer to these objects.
174 */
c5aa993b 175
c906108c 176/* Info about the unwind table associated with an object file.
c5aa993b 177
c906108c
SS
178 * This is hung off of the "objfile->obj_private" pointer, and
179 * is allocated in the objfile's psymbol obstack. This allows
180 * us to have unique unwind info for each executable and shared
181 * library that we are debugging.
182 */
c5aa993b
JM
183struct obj_unwind_info
184 {
185 struct unwind_table_entry *table; /* Pointer to unwind info */
186 struct unwind_table_entry *cache; /* Pointer to last entry we found */
187 int last; /* Index of last entry */
188 };
189
190typedef struct obj_private_struct
191 {
192 struct obj_unwind_info *unwind_info; /* a pointer */
193 struct so_list *so_info; /* a pointer */
53a5351d 194 CORE_ADDR dp;
c5aa993b
JM
195 }
196obj_private_data_t;
c906108c 197
c906108c
SS
198/* For a number of horrible reasons we may have to adjust the location
199 of variables on the stack. Ugh. */
200#define HPREAD_ADJUST_STACK_ADDRESS(ADDR) hpread_adjust_stack_address(ADDR)
a14ed312 201extern int hpread_adjust_stack_address (CORE_ADDR);
c906108c 202
c2c6d25f
JM
203/* Here's how to step off a permanent breakpoint. */
204#define SKIP_PERMANENT_BREAKPOINT (hppa_skip_permanent_breakpoint)
205extern void hppa_skip_permanent_breakpoint (void);
2df3850c
JM
206
207/* On HP-UX, certain system routines (millicode) have names beginning
208 with $ or $$, e.g. $$dyncall, which handles inter-space procedure
209 calls on PA-RISC. Tell the expression parser to check for those
210 when parsing tokens that begin with "$". */
211#define SYMBOLS_CAN_START_WITH_DOLLAR (1)