GDB (xrefs)
Loading...
Searching...
No Matches
/tmp/gdb-13.1/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-2023 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
23#include "gdbarch.h"
24
26struct objfile;
27struct so_list;
28
29/* Register numbers of various important registers. */
30
32{
33 HPPA_R0_REGNUM = 0, /* Doesn't actually exist, used as base for
34 other r registers. */
36 HPPA_FLAGS_REGNUM = 0, /* Various status flags */
37 HPPA_RP_REGNUM = 2, /* return pointer */
38 HPPA_FP_REGNUM = 3, /* The ABI's frame pointer, when used */
42 HPPA_SP_REGNUM = 30, /* Stack pointer. */
44 HPPA_SAR_REGNUM = 32, /* Shift Amount Register */
45 HPPA_IPSW_REGNUM = 41, /* Interrupt Processor Status Word */
46 HPPA_PCOQ_HEAD_REGNUM = 33, /* instruction offset queue head */
47 HPPA_PCSQ_HEAD_REGNUM = 34, /* instruction space queue head */
48 HPPA_PCOQ_TAIL_REGNUM = 35, /* instruction offset queue tail */
49 HPPA_PCSQ_TAIL_REGNUM = 36, /* instruction space queue tail */
50 HPPA_EIEM_REGNUM = 37, /* External Interrupt Enable Mask */
51 HPPA_IIR_REGNUM = 38, /* Interrupt Instruction Register */
52 HPPA_ISR_REGNUM = 39, /* Interrupt Space Register */
53 HPPA_IOR_REGNUM = 40, /* Interrupt Offset Register */
54 HPPA_SR4_REGNUM = 43, /* space register 4 */
55 HPPA_SR0_REGNUM = 44, /* space register 0 */
56 HPPA_SR1_REGNUM = 45, /* space register 1 */
57 HPPA_SR2_REGNUM = 46, /* space register 2 */
58 HPPA_SR3_REGNUM = 47, /* space register 3 */
59 HPPA_SR5_REGNUM = 48, /* space register 5 */
60 HPPA_SR6_REGNUM = 49, /* space register 6 */
61 HPPA_SR7_REGNUM = 50, /* space register 7 */
62 HPPA_RCR_REGNUM = 51, /* Recover Counter (also known as cr0) */
63 HPPA_PID0_REGNUM = 52, /* Protection ID */
64 HPPA_PID1_REGNUM = 53, /* Protection ID */
65 HPPA_PID2_REGNUM = 55, /* Protection ID */
66 HPPA_PID3_REGNUM = 56, /* Protection ID */
67 HPPA_CCR_REGNUM = 54, /* Coprocessor Configuration Register */
68 HPPA_TR0_REGNUM = 57, /* Temporary Registers (cr24 -> cr31) */
70 HPPA_CR27_REGNUM = 60, /* Base register for thread-local
71 storage, cr27 */
72 HPPA_FP0_REGNUM = 64, /* First floating-point. */
75 HPPA_FP31R_REGNUM = 127, /* Last floating-point. */
76
77 HPPA_ARG0_REGNUM = 26, /* The first argument of a callee. */
78 HPPA_ARG1_REGNUM = 25, /* The second argument of a callee. */
79 HPPA_ARG2_REGNUM = 24, /* The third argument of a callee. */
80 HPPA_ARG3_REGNUM = 23 /* The fourth argument of a callee. */
81};
82
83/* Instruction size. */
84#define HPPA_INSN_SIZE 4
85
86/* Target-dependent structure in gdbarch. */
88{
89 /* The number of bytes in an address. For now, this field is designed
90 to allow us to differentiate hppa32 from hppa64 targets. */
92
93 /* Is this an ELF target? This can be 64-bit HP-UX, or a 32/64-bit GNU/Linux
94 system. */
95 int is_elf = 0;
96
97 /* Given a function address, try to find the global pointer for the
98 corresponding shared object. */
99 CORE_ADDR (*find_global_pointer) (struct gdbarch *, struct value *) = nullptr;
100
101 /* For shared libraries, each call goes through a small piece of
102 trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE
103 evaluates to nonzero if we are currently stopped in one of these. */
105 CORE_ADDR pc) = nullptr;
106
107 /* For targets that support multiple spaces, we may have additional stubs
108 in the return path. These stubs are internal to the ABI, and users are
109 not interested in them. If we detect that we are returning to a stub,
110 adjust the pc to the real caller. This improves the behavior of commands
111 that traverse frames such as "up" and "finish". */
112 void (*unwind_adjust_stub) (frame_info_ptr this_frame, CORE_ADDR base,
113 trad_frame_saved_reg *saved_regs) = nullptr;
114
115 /* These are solib-dependent methods. They are really HPUX only, but
116 we don't have a HPUX-specific tdep vector at the moment. */
117 CORE_ADDR (*solib_thread_start_addr) (struct so_list *so) = nullptr;
118 CORE_ADDR (*solib_get_got_by_pc) (CORE_ADDR addr) = nullptr;
119 CORE_ADDR (*solib_get_solib_by_pc) (CORE_ADDR addr) = nullptr;
120 CORE_ADDR (*solib_get_text_base) (struct objfile *objfile) = nullptr;
121};
122
123/*
124 * Unwind table and descriptor.
125 */
126
128 {
129 CORE_ADDR region_start;
130 CORE_ADDR region_end;
131
132 unsigned int Cannot_unwind:1; /* 0 */
133 unsigned int Millicode:1; /* 1 */
134 unsigned int Millicode_save_sr0:1; /* 2 */
135 unsigned int Region_description:2; /* 3..4 */
136 unsigned int reserved:1; /* 5 */
137 unsigned int Entry_SR:1; /* 6 */
138 unsigned int Entry_FR:4; /* number saved *//* 7..10 */
139 unsigned int Entry_GR:5; /* number saved *//* 11..15 */
140 unsigned int Args_stored:1; /* 16 */
141 unsigned int Variable_Frame:1; /* 17 */
142 unsigned int Separate_Package_Body:1; /* 18 */
143 unsigned int Frame_Extension_Millicode:1; /* 19 */
144 unsigned int Stack_Overflow_Check:1; /* 20 */
145 unsigned int Two_Instruction_SP_Increment:1; /* 21 */
146 unsigned int sr4export:1; /* 22 */
147 unsigned int cxx_info:1; /* 23 */
148 unsigned int cxx_try_catch:1; /* 24 */
149 unsigned int sched_entry_seq:1; /* 25 */
150 unsigned int reserved1:1; /* 26 */
151 unsigned int Save_SP:1; /* 27 */
152 unsigned int Save_RP:1; /* 28 */
153 unsigned int Save_MRP_in_frame:1; /* 29 */
154 unsigned int save_r19:1; /* 30 */
155 unsigned int Cleanup_defined:1; /* 31 */
156
157 unsigned int MPE_XL_interrupt_marker:1; /* 0 */
158 unsigned int HP_UX_interrupt_marker:1; /* 1 */
159 unsigned int Large_frame:1; /* 2 */
160 unsigned int alloca_frame:1; /* 3 */
161 unsigned int reserved2:1; /* 4 */
162 unsigned int Total_frame_size:27; /* 5..31 */
163
164 /* This is *NOT* part of an actual unwind_descriptor in an object
165 file. It is *ONLY* part of the "internalized" descriptors that
166 we create from those in a file. */
167
168 struct
169 {
170 unsigned int stub_type:4; /* 0..3 */
171 unsigned int padding:28; /* 4..31 */
172 }
174 };
175
176/* HP linkers also generate unwinds for various linker-generated stubs.
177 GDB reads in the stubs from the $UNWIND_END$ subspace, then
178 "converts" them into normal unwind entries using some of the reserved
179 fields to store the stub type. */
180
181/* The gaps represent linker stubs used in MPE and space for future
182 expansion. */
184 {
187 EXPORT = 10,
188 IMPORT = 11,
190 };
191
192struct unwind_table_entry *find_unwind_entry (CORE_ADDR);
193
194int hppa_get_field (unsigned word, int from, int to);
195int hppa_extract_5_load (unsigned int);
196unsigned hppa_extract_5R_store (unsigned int);
197unsigned hppa_extract_5r_store (unsigned int);
198int hppa_extract_17 (unsigned int);
199int hppa_extract_21 (unsigned);
200int hppa_extract_14 (unsigned);
201CORE_ADDR hppa_symbol_address(const char *sym);
202
203extern struct value *
205 trad_frame_saved_reg *saved_regs,
206 int regnum);
207
208extern CORE_ADDR hppa_read_pc (struct regcache *regcache);
209extern void hppa_write_pc (struct regcache *regcache, CORE_ADDR pc);
210extern CORE_ADDR hppa_unwind_pc (struct gdbarch *gdbarch,
211 frame_info_ptr next_frame);
212
214 CORE_ADDR pc);
215extern CORE_ADDR hppa_skip_trampoline_code (frame_info_ptr, CORE_ADDR pc);
216
217#endif /* hppa-tdep.h */
int regnum
Definition: aarch64-tdep.c:68
CORE_ADDR hppa_unwind_pc(struct gdbarch *gdbarch, frame_info_ptr next_frame)
Definition: hppa-tdep.c:2493
struct value * hppa_frame_prev_register_helper(frame_info_ptr this_frame, trad_frame_saved_reg *saved_regs, int regnum)
int hppa_extract_14(unsigned)
Definition: hppa-tdep.c:156
CORE_ADDR hppa_read_pc(struct regcache *regcache)
hppa_regnum
Definition: hppa-tdep.h:32
@ HPPA_R31_REGNUM
Definition: hppa-tdep.h:43
@ HPPA_R1_REGNUM
Definition: hppa-tdep.h:35
@ HPPA_CCR_REGNUM
Definition: hppa-tdep.h:67
@ HPPA_FLAGS_REGNUM
Definition: hppa-tdep.h:36
@ HPPA_PCSQ_HEAD_REGNUM
Definition: hppa-tdep.h:47
@ HPPA_IOR_REGNUM
Definition: hppa-tdep.h:53
@ HPPA_PID3_REGNUM
Definition: hppa-tdep.h:66
@ HPPA_RET1_REGNUM
Definition: hppa-tdep.h:41
@ HPPA_SR2_REGNUM
Definition: hppa-tdep.h:57
@ HPPA_ARG2_REGNUM
Definition: hppa-tdep.h:79
@ HPPA_SAR_REGNUM
Definition: hppa-tdep.h:44
@ HPPA_TR0_REGNUM
Definition: hppa-tdep.h:68
@ HPPA_ARG1_REGNUM
Definition: hppa-tdep.h:78
@ HPPA_IPSW_REGNUM
Definition: hppa-tdep.h:45
@ HPPA_SR5_REGNUM
Definition: hppa-tdep.h:59
@ HPPA_RP_REGNUM
Definition: hppa-tdep.h:37
@ HPPA_ISR_REGNUM
Definition: hppa-tdep.h:52
@ HPPA_PID1_REGNUM
Definition: hppa-tdep.h:64
@ HPPA_SP_REGNUM
Definition: hppa-tdep.h:42
@ HPPA_SR1_REGNUM
Definition: hppa-tdep.h:56
@ HPPA_FP31R_REGNUM
Definition: hppa-tdep.h:75
@ HPPA_FP_REGNUM
Definition: hppa-tdep.h:38
@ HPPA_PID0_REGNUM
Definition: hppa-tdep.h:63
@ HPPA_CR26_REGNUM
Definition: hppa-tdep.h:69
@ HPPA_SR7_REGNUM
Definition: hppa-tdep.h:61
@ HPPA_PCOQ_HEAD_REGNUM
Definition: hppa-tdep.h:46
@ HPPA_SR6_REGNUM
Definition: hppa-tdep.h:60
@ HPPA_FP4_REGNUM
Definition: hppa-tdep.h:73
@ HPPA64_FP4_REGNUM
Definition: hppa-tdep.h:74
@ HPPA_DP_REGNUM
Definition: hppa-tdep.h:39
@ HPPA_PID2_REGNUM
Definition: hppa-tdep.h:65
@ HPPA_ARG3_REGNUM
Definition: hppa-tdep.h:80
@ HPPA_PCSQ_TAIL_REGNUM
Definition: hppa-tdep.h:49
@ HPPA_PCOQ_TAIL_REGNUM
Definition: hppa-tdep.h:48
@ HPPA_CR27_REGNUM
Definition: hppa-tdep.h:70
@ HPPA_FP0_REGNUM
Definition: hppa-tdep.h:72
@ HPPA_RCR_REGNUM
Definition: hppa-tdep.h:62
@ HPPA_RET0_REGNUM
Definition: hppa-tdep.h:40
@ HPPA_ARG0_REGNUM
Definition: hppa-tdep.h:77
@ HPPA_SR0_REGNUM
Definition: hppa-tdep.h:55
@ HPPA_EIEM_REGNUM
Definition: hppa-tdep.h:50
@ HPPA_SR4_REGNUM
Definition: hppa-tdep.h:54
@ HPPA_SR3_REGNUM
Definition: hppa-tdep.h:58
@ HPPA_IIR_REGNUM
Definition: hppa-tdep.h:51
@ HPPA_R0_REGNUM
Definition: hppa-tdep.h:33
int hppa_extract_21(unsigned)
Definition: hppa-tdep.c:164
unwind_stub_types
Definition: hppa-tdep.h:184
@ LONG_BRANCH
Definition: hppa-tdep.h:185
@ EXPORT
Definition: hppa-tdep.h:187
@ PARAMETER_RELOCATION
Definition: hppa-tdep.h:186
@ IMPORT
Definition: hppa-tdep.h:188
@ IMPORT_SHLIB
Definition: hppa-tdep.h:189
int hppa_get_field(unsigned word, int from, int to)
Definition: hppa-tdep.c:124
CORE_ADDR hppa_skip_trampoline_code(frame_info_ptr, CORE_ADDR pc)
Definition: hppa-tdep.c:2888
int hppa_extract_17(unsigned int)
int hppa_extract_5_load(unsigned int)
unsigned hppa_extract_5R_store(unsigned int)
void hppa_write_pc(struct regcache *regcache, CORE_ADDR pc)
Definition: hppa-tdep.c:1302
CORE_ADDR hppa_symbol_address(const char *sym)
Definition: hppa-tdep.c:195
int hppa_in_solib_call_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.c:2860
unsigned hppa_extract_5r_store(unsigned int)
struct unwind_table_entry * find_unwind_entry(CORE_ADDR)
Definition: hppa-tdep.c:475
CORE_ADDR(* find_global_pointer)(struct gdbarch *, struct value *)
Definition: hppa-tdep.h:99
CORE_ADDR(* solib_get_solib_by_pc)(CORE_ADDR addr)
Definition: hppa-tdep.h:119
CORE_ADDR(* solib_get_got_by_pc)(CORE_ADDR addr)
Definition: hppa-tdep.h:118
CORE_ADDR(* solib_get_text_base)(struct objfile *objfile)
Definition: hppa-tdep.h:120
void(* unwind_adjust_stub)(frame_info_ptr this_frame, CORE_ADDR base, trad_frame_saved_reg *saved_regs)
Definition: hppa-tdep.h:112
int(* in_solib_call_trampoline)(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: hppa-tdep.h:104
CORE_ADDR(* solib_thread_start_addr)(struct so_list *so)
Definition: hppa-tdep.h:117
Definition: solist.h:35
Definition: hppa-tdep.h:128
unsigned int Frame_Extension_Millicode
Definition: hppa-tdep.h:143
unsigned int reserved2
Definition: hppa-tdep.h:161
unsigned int stub_type
Definition: hppa-tdep.h:170
unsigned int cxx_info
Definition: hppa-tdep.h:147
unsigned int Millicode_save_sr0
Definition: hppa-tdep.h:134
unsigned int sr4export
Definition: hppa-tdep.h:146
struct unwind_table_entry::@75 stub_unwind
unsigned int Args_stored
Definition: hppa-tdep.h:140
unsigned int Save_MRP_in_frame
Definition: hppa-tdep.h:153
unsigned int Millicode
Definition: hppa-tdep.h:133
unsigned int padding
Definition: hppa-tdep.h:171
unsigned int save_r19
Definition: hppa-tdep.h:154
unsigned int Total_frame_size
Definition: hppa-tdep.h:162
unsigned int Save_SP
Definition: hppa-tdep.h:151
unsigned int cxx_try_catch
Definition: hppa-tdep.h:148
unsigned int sched_entry_seq
Definition: hppa-tdep.h:149
unsigned int Separate_Package_Body
Definition: hppa-tdep.h:142
unsigned int HP_UX_interrupt_marker
Definition: hppa-tdep.h:158
unsigned int Stack_Overflow_Check
Definition: hppa-tdep.h:144
unsigned int Large_frame
Definition: hppa-tdep.h:159
unsigned int reserved1
Definition: hppa-tdep.h:150
unsigned int Save_RP
Definition: hppa-tdep.h:152
unsigned int Entry_FR
Definition: hppa-tdep.h:138
CORE_ADDR region_start
Definition: hppa-tdep.h:129
unsigned int alloca_frame
Definition: hppa-tdep.h:160
unsigned int Two_Instruction_SP_Increment
Definition: hppa-tdep.h:145
unsigned int Variable_Frame
Definition: hppa-tdep.h:141
unsigned int Region_description
Definition: hppa-tdep.h:135
unsigned int Entry_SR
Definition: hppa-tdep.h:137
unsigned int MPE_XL_interrupt_marker
Definition: hppa-tdep.h:157
unsigned int Entry_GR
Definition: hppa-tdep.h:139
unsigned int Cannot_unwind
Definition: hppa-tdep.h:132
CORE_ADDR region_end
Definition: hppa-tdep.h:130
unsigned int reserved
Definition: hppa-tdep.h:136
unsigned int Cleanup_defined
Definition: hppa-tdep.h:155
Definition: value.c:181