GDB (xrefs)
/tmp/gdb-7.10/gdb/hppa-tdep.h
Go to the documentation of this file.
1 /* Target-dependent code for the HP PA-RISC architecture.
2 
3  Copyright (C) 2003-2015 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #ifndef HPPA_TDEP_H
21 #define HPPA_TDEP_H
22 
24 struct objfile;
25 struct so_list;
26 
27 /* Register numbers of various important registers. */
28 
30 {
31  HPPA_R0_REGNUM = 0, /* Doesn't actually exist, used as base for
32  other r registers. */
34  HPPA_FLAGS_REGNUM = 0, /* Various status flags */
35  HPPA_RP_REGNUM = 2, /* return pointer */
36  HPPA_FP_REGNUM = 3, /* The ABI's frame pointer, when used */
40  HPPA_SP_REGNUM = 30, /* Stack pointer. */
42  HPPA_SAR_REGNUM = 32, /* Shift Amount Register */
43  HPPA_IPSW_REGNUM = 41, /* Interrupt Processor Status Word */
44  HPPA_PCOQ_HEAD_REGNUM = 33, /* instruction offset queue head */
45  HPPA_PCSQ_HEAD_REGNUM = 34, /* instruction space queue head */
46  HPPA_PCOQ_TAIL_REGNUM = 35, /* instruction offset queue tail */
47  HPPA_PCSQ_TAIL_REGNUM = 36, /* instruction space queue tail */
48  HPPA_EIEM_REGNUM = 37, /* External Interrupt Enable Mask */
49  HPPA_IIR_REGNUM = 38, /* Interrupt Instruction Register */
50  HPPA_ISR_REGNUM = 39, /* Interrupt Space Register */
51  HPPA_IOR_REGNUM = 40, /* Interrupt Offset Register */
52  HPPA_SR4_REGNUM = 43, /* space register 4 */
53  HPPA_SR0_REGNUM = 44, /* space register 0 */
54  HPPA_SR1_REGNUM = 45, /* space register 1 */
55  HPPA_SR2_REGNUM = 46, /* space register 2 */
56  HPPA_SR3_REGNUM = 47, /* space register 3 */
57  HPPA_SR5_REGNUM = 48, /* space register 5 */
58  HPPA_SR6_REGNUM = 49, /* space register 6 */
59  HPPA_SR7_REGNUM = 50, /* space register 7 */
60  HPPA_RCR_REGNUM = 51, /* Recover Counter (also known as cr0) */
61  HPPA_PID0_REGNUM = 52, /* Protection ID */
62  HPPA_PID1_REGNUM = 53, /* Protection ID */
63  HPPA_PID2_REGNUM = 55, /* Protection ID */
64  HPPA_PID3_REGNUM = 56, /* Protection ID */
65  HPPA_CCR_REGNUM = 54, /* Coprocessor Configuration Register */
66  HPPA_TR0_REGNUM = 57, /* Temporary Registers (cr24 -> cr31) */
68  HPPA_CR27_REGNUM = 60, /* Base register for thread-local
69  storage, cr27 */
70  HPPA_FP0_REGNUM = 64, /* First floating-point. */
73  HPPA_FP31R_REGNUM = 127, /* Last floating-point. */
74 
75  HPPA_ARG0_REGNUM = 26, /* The first argument of a callee. */
76  HPPA_ARG1_REGNUM = 25, /* The second argument of a callee. */
77  HPPA_ARG2_REGNUM = 24, /* The third argument of a callee. */
78  HPPA_ARG3_REGNUM = 23 /* The fourth argument of a callee. */
79 };
80 
81 /* Instruction size. */
82 #define HPPA_INSN_SIZE 4
83 
84 /* Target-dependent structure in gdbarch. */
85 struct gdbarch_tdep
86 {
87  /* The number of bytes in an address. For now, this field is designed
88  to allow us to differentiate hppa32 from hppa64 targets. */
90 
91  /* Is this an ELF target? This can be 64-bit HP-UX, or a 32/64-bit GNU/Linux
92  system. */
93  int is_elf;
94 
95  /* Given a function address, try to find the global pointer for the
96  corresponding shared object. */
97  CORE_ADDR (*find_global_pointer) (struct gdbarch *, struct value *);
98 
99  /* For shared libraries, each call goes through a small piece of
100  trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE
101  evaluates to nonzero if we are currently stopped in one of these. */
103 
104  /* For targets that support multiple spaces, we may have additional stubs
105  in the return path. These stubs are internal to the ABI, and users are
106  not interested in them. If we detect that we are returning to a stub,
107  adjust the pc to the real caller. This improves the behavior of commands
108  that traverse frames such as "up" and "finish". */
109  void (*unwind_adjust_stub) (struct frame_info *this_frame, CORE_ADDR base,
110  struct trad_frame_saved_reg *saved_regs);
111 
112  /* These are solib-dependent methods. They are really HPUX only, but
113  we don't have a HPUX-specific tdep vector at the moment. */
118 };
119 
120 /*
121  * Unwind table and descriptor.
122  */
123 
125  {
128 
129  unsigned int Cannot_unwind:1; /* 0 */
130  unsigned int Millicode:1; /* 1 */
131  unsigned int Millicode_save_sr0:1; /* 2 */
132  unsigned int Region_description:2; /* 3..4 */
133  unsigned int reserved:1; /* 5 */
134  unsigned int Entry_SR:1; /* 6 */
135  unsigned int Entry_FR:4; /* number saved *//* 7..10 */
136  unsigned int Entry_GR:5; /* number saved *//* 11..15 */
137  unsigned int Args_stored:1; /* 16 */
138  unsigned int Variable_Frame:1; /* 17 */
139  unsigned int Separate_Package_Body:1; /* 18 */
140  unsigned int Frame_Extension_Millicode:1; /* 19 */
141  unsigned int Stack_Overflow_Check:1; /* 20 */
142  unsigned int Two_Instruction_SP_Increment:1; /* 21 */
143  unsigned int sr4export:1; /* 22 */
144  unsigned int cxx_info:1; /* 23 */
145  unsigned int cxx_try_catch:1; /* 24 */
146  unsigned int sched_entry_seq:1; /* 25 */
147  unsigned int reserved1:1; /* 26 */
148  unsigned int Save_SP:1; /* 27 */
149  unsigned int Save_RP:1; /* 28 */
150  unsigned int Save_MRP_in_frame:1; /* 29 */
151  unsigned int save_r19:1; /* 30 */
152  unsigned int Cleanup_defined:1; /* 31 */
153 
154  unsigned int MPE_XL_interrupt_marker:1; /* 0 */
155  unsigned int HP_UX_interrupt_marker:1; /* 1 */
156  unsigned int Large_frame:1; /* 2 */
157  unsigned int alloca_frame:1; /* 3 */
158  unsigned int reserved2:1; /* 4 */
159  unsigned int Total_frame_size:27; /* 5..31 */
160 
161  /* This is *NOT* part of an actual unwind_descriptor in an object
162  file. It is *ONLY* part of the "internalized" descriptors that
163  we create from those in a file. */
164 
165  struct
166  {
167  unsigned int stub_type:4; /* 0..3 */
168  unsigned int padding:28; /* 4..31 */
169  }
170  stub_unwind;
171  };
172 
173 /* HP linkers also generate unwinds for various linker-generated stubs.
174  GDB reads in the stubs from the $UNWIND_END$ subspace, then
175  "converts" them into normal unwind entries using some of the reserved
176  fields to store the stub type. */
177 
178 /* The gaps represent linker stubs used in MPE and space for future
179  expansion. */
181  {
184  EXPORT = 10,
185  IMPORT = 11,
187  };
188 
190 
191 int hppa_get_field (unsigned word, int from, int to);
192 int hppa_extract_5_load (unsigned int);
193 unsigned hppa_extract_5R_store (unsigned int);
194 unsigned hppa_extract_5r_store (unsigned int);
195 int hppa_extract_17 (unsigned int);
196 int hppa_extract_21 (unsigned);
197 int hppa_extract_14 (unsigned);
198 CORE_ADDR hppa_symbol_address(const char *sym);
199 
200 extern struct value *
201  hppa_frame_prev_register_helper (struct frame_info *this_frame,
202  struct trad_frame_saved_reg *saved_regs,
203  int regnum);
204 
205 extern CORE_ADDR hppa_read_pc (struct regcache *regcache);
206 extern void hppa_write_pc (struct regcache *regcache, CORE_ADDR pc);
207 extern CORE_ADDR hppa_unwind_pc (struct gdbarch *gdbarch,
208  struct frame_info *next_frame);
209 
210 extern struct bound_minimal_symbol
212  enum unwind_stub_types stub_type);
213 
214 extern int hppa_in_solib_call_trampoline (struct gdbarch *gdbarch,
215  CORE_ADDR pc);
217 
218 #endif /* hppa-tdep.h */
CORE_ADDR(* find_global_pointer)(struct gdbarch *, struct value *)
Definition: hppa-tdep.h:97
unsigned int padding
Definition: hppa-tdep.h:168
CORE_ADDR(* solib_get_solib_by_pc)(CORE_ADDR addr)
Definition: hppa-tdep.h:116
unsigned int sr4export
Definition: hppa-tdep.h:143
unsigned int reserved
Definition: hppa-tdep.h:133
unsigned int Entry_SR
Definition: hppa-tdep.h:134
unsigned int Save_MRP_in_frame
Definition: hppa-tdep.h:150
bfd_vma CORE_ADDR
Definition: common-types.h:41
unsigned int Large_frame
Definition: hppa-tdep.h:156
unsigned int Variable_Frame
Definition: hppa-tdep.h:138
unsigned int reserved1
Definition: hppa-tdep.h:147
unsigned int Two_Instruction_SP_Increment
Definition: hppa-tdep.h:142
unsigned int Cannot_unwind
Definition: hppa-tdep.h:129
int(* in_solib_call_trampoline)(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.h:102
struct type ** const(pascal_builtin_types[])
unsigned int save_r19
Definition: hppa-tdep.h:151
unsigned int Total_frame_size
Definition: hppa-tdep.h:159
struct m32c_reg * pc
Definition: m32c-tdep.c:111
CORE_ADDR hppa_read_pc(struct regcache *regcache)
Definition: hppa-tdep.c:1312
Definition: solist.h:30
struct unwind_table_entry * find_unwind_entry(CORE_ADDR)
Definition: hppa-tdep.c:485
void(* unwind_adjust_stub)(struct frame_info *this_frame, CORE_ADDR base, struct trad_frame_saved_reg *saved_regs)
Definition: hppa-tdep.h:109
unsigned int stub_type
Definition: hppa-tdep.h:167
unsigned int Save_SP
Definition: hppa-tdep.h:148
unsigned int cxx_try_catch
Definition: hppa-tdep.h:145
const char *const name
Definition: aarch64-tdep.c:68
int * from
Definition: varobj.h:282
unsigned int Cleanup_defined
Definition: hppa-tdep.h:152
void hppa_write_pc(struct regcache *regcache, CORE_ADDR pc)
Definition: hppa-tdep.c:1332
CORE_ADDR region_end
Definition: hppa-tdep.h:127
CORE_ADDR(* solib_get_got_by_pc)(CORE_ADDR addr)
Definition: hppa-tdep.h:115
int hppa_extract_17(unsigned int)
Definition: hppa-tdep.c:184
unsigned int MPE_XL_interrupt_marker
Definition: hppa-tdep.h:154
const char * word
Definition: symtab.h:1448
unsigned int Save_RP
Definition: hppa-tdep.h:149
unsigned int alloca_frame
Definition: hppa-tdep.h:157
unsigned int sched_entry_seq
Definition: hppa-tdep.h:146
hppa_regnum
Definition: hppa-tdep.h:29
int hppa_in_solib_call_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.c:2945
int regnum
Definition: aarch64-tdep.c:69
CORE_ADDR(* solib_thread_start_addr)(struct so_list *so)
Definition: hppa-tdep.h:114
CORE_ADDR region_start
Definition: hppa-tdep.h:126
unsigned int Separate_Package_Body
Definition: hppa-tdep.h:139
CORE_ADDR hppa_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
Definition: hppa-tdep.c:2546
unsigned int Millicode_save_sr0
Definition: hppa-tdep.h:131
unsigned int reserved2
Definition: hppa-tdep.h:158
Definition: value.c:172
int hppa_extract_14(unsigned)
Definition: hppa-tdep.c:154
struct bound_minimal_symbol hppa_lookup_stub_minimal_symbol(const char *name, enum unwind_stub_types stub_type)
Definition: hppa-tdep.c:2569
unsigned hppa_extract_5R_store(unsigned int)
Definition: hppa-tdep.c:146
const char const char int
Definition: command.h:229
unsigned int HP_UX_interrupt_marker
Definition: hppa-tdep.h:155
struct unwind_table_entry::@86 stub_unwind
unsigned int Entry_FR
Definition: hppa-tdep.h:135
struct value * hppa_frame_prev_register_helper(struct frame_info *this_frame, struct trad_frame_saved_reg *saved_regs, int regnum)
int hppa_extract_5_load(unsigned int)
Definition: hppa-tdep.c:130
int hppa_get_field(unsigned word, int from, int to)
Definition: hppa-tdep.c:122
unsigned int Millicode
Definition: hppa-tdep.h:130
unsigned hppa_extract_5r_store(unsigned int)
Definition: hppa-tdep.c:138
CORE_ADDR hppa_symbol_address(const char *sym)
Definition: hppa-tdep.c:193
CORE_ADDR(* solib_get_text_base)(struct objfile *objfile)
Definition: hppa-tdep.h:117
unsigned int Frame_Extension_Millicode
Definition: hppa-tdep.h:140
int bytes_per_address
Definition: hppa-tdep.h:89
const struct frame_base * base
Definition: frame.c:133
int hppa_extract_21(unsigned)
Definition: hppa-tdep.c:162
int int * to
Definition: varobj.h:282
unsigned int cxx_info
Definition: hppa-tdep.h:144
unsigned int Entry_GR
Definition: hppa-tdep.h:136
Definition: hppa-tdep.h:124
CORE_ADDR hppa_skip_trampoline_code(struct frame_info *, CORE_ADDR pc)
Definition: hppa-tdep.c:2973
unsigned int Stack_Overflow_Check
Definition: hppa-tdep.h:141
unwind_stub_types
Definition: hppa-tdep.h:180
unsigned int Region_description
Definition: hppa-tdep.h:132
unsigned int Args_stored
Definition: hppa-tdep.h:137