2007-06-13 Markus Deuling <deuling@de.ibm.com>
[deliverable/binutils-gdb.git] / gdb / gdbarch.c
CommitLineData
59233f88
AC
1/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
2
adf40b2e 3/* Dynamic architecture support for GDB, the GNU debugger.
79d45cd4 4
424163ea
DJ
5 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6 Free Software Foundation, Inc.
c906108c 7
96baa820
JM
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
c906108c 14
96baa820
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
96baa820
JM
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
197e01b6
EZ
22 Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 Boston, MA 02110-1301, USA. */
adf40b2e 24
104c1213
JM
25/* This file was created with the aid of ``gdbarch.sh''.
26
52204a0b 27 The Bourne shell script ``gdbarch.sh'' creates the files
104c1213
JM
28 ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them
29 against the existing ``gdbarch.[hc]''. Any differences found
30 being reported.
31
32 If editing this file, please also run gdbarch.sh and merge any
52204a0b 33 changes into that script. Conversely, when making sweeping changes
104c1213
JM
34 to this file, modifying gdbarch.sh and using its output may prove
35 easier. */
c906108c 36
c906108c
SS
37
38#include "defs.h"
1ad03bde 39#include "arch-utils.h"
c906108c 40
0f71a2f6 41#include "gdbcmd.h"
faaf634c 42#include "inferior.h"
7a292a7a 43#include "symcat.h"
c906108c 44
f0d4cc9e 45#include "floatformat.h"
c906108c 46
95160752 47#include "gdb_assert.h"
b66d6d2e 48#include "gdb_string.h"
67c2c32c 49#include "gdb-events.h"
b59ff9d5 50#include "reggroups.h"
4be87837 51#include "osabi.h"
aebd7893 52#include "gdb_obstack.h"
95160752 53
104c1213
JM
54/* Static function declarations */
55
b3cc3077 56static void alloc_gdbarch_data (struct gdbarch *);
104c1213 57
0f71a2f6
JM
58/* Non-zero if we want to trace architecture code. */
59
60#ifndef GDBARCH_DEBUG
61#define GDBARCH_DEBUG 0
62#endif
63int gdbarch_debug = GDBARCH_DEBUG;
920d2a44
AC
64static void
65show_gdbarch_debug (struct ui_file *file, int from_tty,
66 struct cmd_list_element *c, const char *value)
67{
68 fprintf_filtered (file, _("Architecture debugging is %s.\n"), value);
69}
0f71a2f6 70
456fcf94 71static const char *
8da61cc4 72pformat (const struct floatformat **format)
456fcf94
AC
73{
74 if (format == NULL)
75 return "(null)";
76 else
8da61cc4
DJ
77 /* Just print out one of them - this is only for diagnostics. */
78 return format[0]->name;
456fcf94
AC
79}
80
0f71a2f6
JM
81
82/* Maintain the struct gdbarch object */
83
84struct gdbarch
adf40b2e 85{
76860b5f
AC
86 /* Has this architecture been fully initialized? */
87 int initialized_p;
aebd7893
AC
88
89 /* An obstack bound to the lifetime of the architecture. */
90 struct obstack *obstack;
91
adf40b2e
JM
92 /* basic architectural information */
93 const struct bfd_arch_info * bfd_arch_info;
94 int byte_order;
4be87837 95 enum gdb_osabi osabi;
424163ea 96 const struct target_desc * target_desc;
0f71a2f6 97
adf40b2e
JM
98 /* target specific vector. */
99 struct gdbarch_tdep *tdep;
4b9b3959 100 gdbarch_dump_tdep_ftype *dump_tdep;
0f71a2f6 101
adf40b2e 102 /* per-architecture data-pointers */
95160752 103 unsigned nr_data;
adf40b2e 104 void **data;
0f71a2f6 105
adf40b2e
JM
106 /* per-architecture swap-regions */
107 struct gdbarch_swap *swap;
0f71a2f6 108
adf40b2e 109 /* Multi-arch values.
0f71a2f6 110
adf40b2e 111 When extending this structure you must:
0f71a2f6 112
adf40b2e 113 Add the field below.
0f71a2f6 114
adf40b2e
JM
115 Declare set/get functions and define the corresponding
116 macro in gdbarch.h.
0f71a2f6 117
adf40b2e
JM
118 gdbarch_alloc(): If zero/NULL is not a suitable default,
119 initialize the new field.
0f71a2f6 120
adf40b2e
JM
121 verify_gdbarch(): Confirm that the target updated the field
122 correctly.
0f71a2f6 123
7e73cedf 124 gdbarch_dump(): Add a fprintf_unfiltered call so that the new
adf40b2e 125 field is dumped out
0f71a2f6 126
c0e8c252 127 ``startup_gdbarch()'': Append an initial value to the static
adf40b2e 128 variable (base values on the host's c-type system).
0f71a2f6 129
adf40b2e
JM
130 get_gdbarch(): Implement the set/get functions (probably using
131 the macro's as shortcuts).
0f71a2f6
JM
132
133 */
134
adf40b2e
JM
135 int short_bit;
136 int int_bit;
137 int long_bit;
138 int long_long_bit;
139 int float_bit;
8da61cc4 140 const struct floatformat ** float_format;
adf40b2e 141 int double_bit;
8da61cc4 142 const struct floatformat ** double_format;
adf40b2e 143 int long_double_bit;
8da61cc4 144 const struct floatformat ** long_double_format;
66b43ecb 145 int ptr_bit;
52204a0b 146 int addr_bit;
66b43ecb 147 int bfd_vma_bit;
4e409299 148 int char_signed;
adf40b2e
JM
149 gdbarch_read_pc_ftype *read_pc;
150 gdbarch_write_pc_ftype *write_pc;
39d4ef09 151 gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer;
d8124050
AC
152 gdbarch_pseudo_register_read_ftype *pseudo_register_read;
153 gdbarch_pseudo_register_write_ftype *pseudo_register_write;
adf40b2e 154 int num_regs;
0aba1244 155 int num_pseudo_regs;
adf40b2e 156 int sp_regnum;
adf40b2e 157 int pc_regnum;
c2169756 158 int ps_regnum;
60054393 159 int fp0_regnum;
88c72b7d
AC
160 gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum;
161 gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum;
162 gdbarch_dwarf_reg_to_regnum_ftype *dwarf_reg_to_regnum;
163 gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum;
164 gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum;
adf40b2e 165 gdbarch_register_name_ftype *register_name;
9c04cab7 166 gdbarch_register_type_ftype *register_type;
f3be58bc 167 gdbarch_unwind_dummy_id_ftype *unwind_dummy_id;
f3be58bc 168 int deprecated_fp_regnum;
b8de8283 169 gdbarch_push_dummy_call_ftype *push_dummy_call;
b8de8283 170 int deprecated_register_size;
adf40b2e 171 int call_dummy_location;
7043d8dc 172 gdbarch_push_dummy_code_ftype *push_dummy_code;
b8de8283
AC
173 gdbarch_print_registers_info_ftype *print_registers_info;
174 gdbarch_print_float_info_ftype *print_float_info;
175 gdbarch_print_vector_info_ftype *print_vector_info;
176 gdbarch_register_sim_regno_ftype *register_sim_regno;
b8de8283
AC
177 gdbarch_cannot_fetch_register_ftype *cannot_fetch_register;
178 gdbarch_cannot_store_register_ftype *cannot_store_register;
179 gdbarch_get_longjmp_target_ftype *get_longjmp_target;
adf40b2e 180 int believe_pcc_promotion;
13d01224
AC
181 gdbarch_convert_register_p_ftype *convert_register_p;
182 gdbarch_register_to_value_ftype *register_to_value;
183 gdbarch_value_to_register_ftype *value_to_register;
9acbedc0 184 gdbarch_value_from_register_ftype *value_from_register;
4478b372
JB
185 gdbarch_pointer_to_address_ftype *pointer_to_address;
186 gdbarch_address_to_pointer_ftype *address_to_pointer;
fc0c74b1 187 gdbarch_integer_to_address_ftype *integer_to_address;
92ad9cd9 188 gdbarch_return_value_ftype *return_value;
ebba8386 189 gdbarch_extract_return_value_ftype *extract_return_value;
adf40b2e 190 gdbarch_store_return_value_ftype *store_return_value;
b5622e8d 191 gdbarch_deprecated_use_struct_convention_ftype *deprecated_use_struct_convention;
74055713 192 gdbarch_deprecated_extract_struct_value_address_ftype *deprecated_extract_struct_value_address;
adf40b2e
JM
193 gdbarch_skip_prologue_ftype *skip_prologue;
194 gdbarch_inner_than_ftype *inner_than;
195 gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc;
a1131521 196 gdbarch_adjust_breakpoint_address_ftype *adjust_breakpoint_address;
917317f4
JM
197 gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint;
198 gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint;
adf40b2e 199 CORE_ADDR decr_pc_after_break;
782263ab 200 CORE_ADDR deprecated_function_start_offset;
123dc839 201 gdbarch_remote_register_number_ftype *remote_register_number;
b2756930 202 gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address;
adf40b2e 203 CORE_ADDR frame_args_skip;
12cc2063 204 gdbarch_unwind_pc_ftype *unwind_pc;
a9e5fdc2 205 gdbarch_unwind_sp_ftype *unwind_sp;
adf40b2e 206 gdbarch_frame_num_args_ftype *frame_num_args;
dc604539 207 gdbarch_frame_align_ftype *frame_align;
88d89dbb 208 gdbarch_deprecated_reg_struct_has_addr_ftype *deprecated_reg_struct_has_addr;
192cb3d4 209 gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr;
8b148df9 210 int frame_red_zone_size;
f517ea4e 211 gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr;
875e1767 212 gdbarch_addr_bits_remove_ftype *addr_bits_remove;
181c1381 213 gdbarch_smash_text_address_ftype *smash_text_address;
64c4637f 214 gdbarch_software_single_step_ftype *software_single_step;
3352ef37 215 gdbarch_single_step_through_delay_ftype *single_step_through_delay;
2bf0cb65 216 gdbarch_print_insn_ftype *print_insn;
bdcd319a 217 gdbarch_skip_trampoline_code_ftype *skip_trampoline_code;
dea0c52f 218 gdbarch_skip_solib_resolver_ftype *skip_solib_resolver;
d50355b6 219 gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline;
c12260ac 220 gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p;
552c04a7 221 gdbarch_construct_inferior_arguments_ftype *construct_inferior_arguments;
a2cf933a
EZ
222 gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special;
223 gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special;
5720643c 224 const char * name_of_malloc;
c4ed33b9 225 int cannot_step_breakpoint;
f74fa174 226 int have_nonsteppable_watchpoint;
8b2dbe47
KB
227 gdbarch_address_class_type_flags_ftype *address_class_type_flags;
228 gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name;
229 gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags;
b59ff9d5 230 gdbarch_register_reggroup_p_ftype *register_reggroup_p;
143985b7 231 gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument;
6ce6d90f 232 gdbarch_regset_from_core_section_ftype *regset_from_core_section;
0d5de010
DJ
233 int vtable_function_descriptors;
234 int vbit_in_delta;
6d350bb5 235 gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint;
1c772458 236 gdbarch_overlay_update_ftype *overlay_update;
adf40b2e 237};
0f71a2f6
JM
238
239
240/* The default architecture uses host values (for want of a better
241 choice). */
242
243extern const struct bfd_arch_info bfd_default_arch_struct;
244
4b9b3959
AC
245struct gdbarch startup_gdbarch =
246{
76860b5f 247 1, /* Always initialized. */
aebd7893 248 NULL, /* The obstack. */
0f71a2f6 249 /* basic architecture information */
ec5cbaec
AC
250 &bfd_default_arch_struct, /* bfd_arch_info */
251 BFD_ENDIAN_BIG, /* byte_order */
252 GDB_OSABI_UNKNOWN, /* osabi */
424163ea 253 0, /* target_desc */
4b9b3959
AC
254 /* target specific vector and its dump routine */
255 NULL, NULL,
0f71a2f6
JM
256 /*per-architecture data-pointers and swap regions */
257 0, NULL, NULL,
258 /* Multi-arch values */
ec5cbaec
AC
259 8 * sizeof (short), /* short_bit */
260 8 * sizeof (int), /* int_bit */
261 8 * sizeof (long), /* long_bit */
262 8 * sizeof (LONGEST), /* long_long_bit */
263 8 * sizeof (float), /* float_bit */
456fcf94 264 0, /* float_format */
ec5cbaec 265 8 * sizeof (double), /* double_bit */
456fcf94 266 0, /* double_format */
ec5cbaec 267 8 * sizeof (long double), /* long_double_bit */
456fcf94 268 0, /* long_double_format */
ec5cbaec
AC
269 8 * sizeof (void*), /* ptr_bit */
270 8 * sizeof (void*), /* addr_bit */
271 8 * sizeof (void*), /* bfd_vma_bit */
272 1, /* char_signed */
273 0, /* read_pc */
274 0, /* write_pc */
ec5cbaec
AC
275 0, /* virtual_frame_pointer */
276 0, /* pseudo_register_read */
277 0, /* pseudo_register_write */
278 0, /* num_regs */
279 0, /* num_pseudo_regs */
280 -1, /* sp_regnum */
ec5cbaec
AC
281 -1, /* pc_regnum */
282 -1, /* ps_regnum */
283 0, /* fp0_regnum */
ec5cbaec
AC
284 0, /* stab_reg_to_regnum */
285 0, /* ecoff_reg_to_regnum */
286 0, /* dwarf_reg_to_regnum */
287 0, /* sdb_reg_to_regnum */
288 0, /* dwarf2_reg_to_regnum */
289 0, /* register_name */
9c04cab7 290 0, /* register_type */
f3be58bc 291 0, /* unwind_dummy_id */
f3be58bc 292 -1, /* deprecated_fp_regnum */
b8de8283 293 0, /* push_dummy_call */
b8de8283 294 0, /* deprecated_register_size */
ec5cbaec 295 0, /* call_dummy_location */
ec5cbaec 296 0, /* push_dummy_code */
b8de8283
AC
297 default_print_registers_info, /* print_registers_info */
298 0, /* print_float_info */
299 0, /* print_vector_info */
300 0, /* register_sim_regno */
b8de8283
AC
301 0, /* cannot_fetch_register */
302 0, /* cannot_store_register */
303 0, /* get_longjmp_target */
ec5cbaec 304 0, /* believe_pcc_promotion */
ec5cbaec
AC
305 0, /* convert_register_p */
306 0, /* register_to_value */
307 0, /* value_to_register */
9acbedc0 308 0, /* value_from_register */
ec5cbaec
AC
309 0, /* pointer_to_address */
310 0, /* address_to_pointer */
311 0, /* integer_to_address */
92ad9cd9 312 0, /* return_value */
ec5cbaec
AC
313 0, /* extract_return_value */
314 0, /* store_return_value */
b5622e8d 315 0, /* deprecated_use_struct_convention */
74055713 316 0, /* deprecated_extract_struct_value_address */
ec5cbaec 317 0, /* skip_prologue */
ec5cbaec
AC
318 0, /* inner_than */
319 0, /* breakpoint_from_pc */
a1131521 320 0, /* adjust_breakpoint_address */
ec5cbaec
AC
321 0, /* memory_insert_breakpoint */
322 0, /* memory_remove_breakpoint */
323 0, /* decr_pc_after_break */
782263ab 324 0, /* deprecated_function_start_offset */
123dc839 325 default_remote_register_number, /* remote_register_number */
b2756930 326 0, /* fetch_tls_load_module_address */
ec5cbaec 327 0, /* frame_args_skip */
ec5cbaec 328 0, /* unwind_pc */
a9e5fdc2 329 0, /* unwind_sp */
ec5cbaec 330 0, /* frame_num_args */
ec5cbaec 331 0, /* frame_align */
88d89dbb 332 0, /* deprecated_reg_struct_has_addr */
192cb3d4 333 default_stabs_argument_has_addr, /* stabs_argument_has_addr */
8b148df9 334 0, /* frame_red_zone_size */
e2d0e7eb 335 convert_from_func_ptr_addr_identity, /* convert_from_func_ptr_addr */
ec5cbaec
AC
336 0, /* addr_bits_remove */
337 0, /* smash_text_address */
338 0, /* software_single_step */
3352ef37 339 0, /* single_step_through_delay */
ec5cbaec
AC
340 0, /* print_insn */
341 0, /* skip_trampoline_code */
4c8c40e6 342 generic_skip_solib_resolver, /* skip_solib_resolver */
ec5cbaec 343 0, /* in_solib_return_trampoline */
ec5cbaec
AC
344 generic_in_function_epilogue_p, /* in_function_epilogue_p */
345 construct_inferior_arguments, /* construct_inferior_arguments */
ec5cbaec
AC
346 0, /* elf_make_msymbol_special */
347 0, /* coff_make_msymbol_special */
348 "malloc", /* name_of_malloc */
349 0, /* cannot_step_breakpoint */
350 0, /* have_nonsteppable_watchpoint */
351 0, /* address_class_type_flags */
352 0, /* address_class_type_flags_to_name */
353 0, /* address_class_name_to_type_flags */
354 default_register_reggroup_p, /* register_reggroup_p */
355 0, /* fetch_pointer_argument */
6ce6d90f 356 0, /* regset_from_core_section */
0d5de010
DJ
357 0, /* vtable_function_descriptors */
358 0, /* vbit_in_delta */
6d350bb5 359 0, /* skip_permanent_breakpoint */
1c772458 360 0, /* overlay_update */
c0e8c252 361 /* startup_gdbarch() */
0f71a2f6 362};
4b9b3959 363
c0e8c252 364struct gdbarch *current_gdbarch = &startup_gdbarch;
0f71a2f6 365
66b43ecb 366/* Create a new ``struct gdbarch'' based on information provided by
0f71a2f6
JM
367 ``struct gdbarch_info''. */
368
369struct gdbarch *
104c1213
JM
370gdbarch_alloc (const struct gdbarch_info *info,
371 struct gdbarch_tdep *tdep)
0f71a2f6 372{
85de9627 373 /* NOTE: The new architecture variable is named ``current_gdbarch''
ea06eb3d 374 so that macros such as TARGET_ARCHITECTURE, when expanded, refer to
85de9627
AC
375 the current local architecture and not the previous global
376 architecture. This ensures that the new architectures initial
377 values are not influenced by the previous architecture. Once
378 everything is parameterised with gdbarch, this will go away. */
aebd7893
AC
379 struct gdbarch *current_gdbarch;
380
381 /* Create an obstack for allocating all the per-architecture memory,
382 then use that to allocate the architecture vector. */
383 struct obstack *obstack = XMALLOC (struct obstack);
384 obstack_init (obstack);
385 current_gdbarch = obstack_alloc (obstack, sizeof (*current_gdbarch));
85de9627 386 memset (current_gdbarch, 0, sizeof (*current_gdbarch));
aebd7893 387 current_gdbarch->obstack = obstack;
0f71a2f6 388
85de9627 389 alloc_gdbarch_data (current_gdbarch);
b3cc3077 390
85de9627 391 current_gdbarch->tdep = tdep;
0f71a2f6 392
85de9627
AC
393 current_gdbarch->bfd_arch_info = info->bfd_arch_info;
394 current_gdbarch->byte_order = info->byte_order;
4be87837 395 current_gdbarch->osabi = info->osabi;
424163ea 396 current_gdbarch->target_desc = info->target_desc;
0f71a2f6
JM
397
398 /* Force the explicit initialization of these. */
85de9627
AC
399 current_gdbarch->short_bit = 2*TARGET_CHAR_BIT;
400 current_gdbarch->int_bit = 4*TARGET_CHAR_BIT;
401 current_gdbarch->long_bit = 4*TARGET_CHAR_BIT;
9a76efb6 402 current_gdbarch->long_long_bit = 2*current_gdbarch->long_bit;
85de9627
AC
403 current_gdbarch->float_bit = 4*TARGET_CHAR_BIT;
404 current_gdbarch->double_bit = 8*TARGET_CHAR_BIT;
17ef5d92 405 current_gdbarch->long_double_bit = 8*TARGET_CHAR_BIT;
9a76efb6 406 current_gdbarch->ptr_bit = current_gdbarch->int_bit;
1143fffb 407 current_gdbarch->bfd_vma_bit = gdbarch_bfd_arch_info (current_gdbarch)->bits_per_address;
4e409299 408 current_gdbarch->char_signed = -1;
85de9627 409 current_gdbarch->write_pc = generic_target_write_pc;
85de9627
AC
410 current_gdbarch->virtual_frame_pointer = legacy_virtual_frame_pointer;
411 current_gdbarch->num_regs = -1;
412 current_gdbarch->sp_regnum = -1;
85de9627 413 current_gdbarch->pc_regnum = -1;
c2169756 414 current_gdbarch->ps_regnum = -1;
85de9627 415 current_gdbarch->fp0_regnum = -1;
85de9627
AC
416 current_gdbarch->stab_reg_to_regnum = no_op_reg_to_regnum;
417 current_gdbarch->ecoff_reg_to_regnum = no_op_reg_to_regnum;
418 current_gdbarch->dwarf_reg_to_regnum = no_op_reg_to_regnum;
419 current_gdbarch->sdb_reg_to_regnum = no_op_reg_to_regnum;
420 current_gdbarch->dwarf2_reg_to_regnum = no_op_reg_to_regnum;
f3be58bc 421 current_gdbarch->deprecated_fp_regnum = -1;
b99fa2d2 422 current_gdbarch->call_dummy_location = AT_ENTRY_POINT;
b8de8283
AC
423 current_gdbarch->print_registers_info = default_print_registers_info;
424 current_gdbarch->register_sim_regno = legacy_register_sim_regno;
425 current_gdbarch->cannot_fetch_register = cannot_register_not;
426 current_gdbarch->cannot_store_register = cannot_register_not;
a1f4a1b6 427 current_gdbarch->convert_register_p = generic_convert_register_p;
9acbedc0 428 current_gdbarch->value_from_register = default_value_from_register;
85de9627
AC
429 current_gdbarch->pointer_to_address = unsigned_pointer_to_address;
430 current_gdbarch->address_to_pointer = unsigned_address_to_pointer;
750eb019 431 current_gdbarch->return_value = legacy_return_value;
b5622e8d 432 current_gdbarch->deprecated_use_struct_convention = generic_use_struct_convention;
85de9627
AC
433 current_gdbarch->memory_insert_breakpoint = default_memory_insert_breakpoint;
434 current_gdbarch->memory_remove_breakpoint = default_memory_remove_breakpoint;
123dc839 435 current_gdbarch->remote_register_number = default_remote_register_number;
192cb3d4 436 current_gdbarch->stabs_argument_has_addr = default_stabs_argument_has_addr;
e2d0e7eb 437 current_gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr_identity;
85de9627 438 current_gdbarch->addr_bits_remove = core_addr_identity;
181c1381 439 current_gdbarch->smash_text_address = core_addr_identity;
85de9627 440 current_gdbarch->skip_trampoline_code = generic_skip_trampoline_code;
dea0c52f 441 current_gdbarch->skip_solib_resolver = generic_skip_solib_resolver;
d50355b6 442 current_gdbarch->in_solib_return_trampoline = generic_in_solib_return_trampoline;
c12260ac 443 current_gdbarch->in_function_epilogue_p = generic_in_function_epilogue_p;
552c04a7 444 current_gdbarch->construct_inferior_arguments = construct_inferior_arguments;
a2cf933a
EZ
445 current_gdbarch->elf_make_msymbol_special = default_elf_make_msymbol_special;
446 current_gdbarch->coff_make_msymbol_special = default_coff_make_msymbol_special;
5720643c 447 current_gdbarch->name_of_malloc = "malloc";
b59ff9d5 448 current_gdbarch->register_reggroup_p = default_register_reggroup_p;
0f71a2f6
JM
449 /* gdbarch_alloc() */
450
85de9627 451 return current_gdbarch;
0f71a2f6
JM
452}
453
454
aebd7893
AC
455/* Allocate extra space using the per-architecture obstack. */
456
457void *
458gdbarch_obstack_zalloc (struct gdbarch *arch, long size)
459{
460 void *data = obstack_alloc (arch->obstack, size);
461 memset (data, 0, size);
462 return data;
463}
464
465
058f20d5
JB
466/* Free a gdbarch struct. This should never happen in normal
467 operation --- once you've created a gdbarch, you keep it around.
468 However, if an architecture's init function encounters an error
469 building the structure, it may need to clean up a partially
470 constructed gdbarch. */
4b9b3959 471
058f20d5
JB
472void
473gdbarch_free (struct gdbarch *arch)
474{
aebd7893 475 struct obstack *obstack;
95160752 476 gdb_assert (arch != NULL);
aebd7893
AC
477 gdb_assert (!arch->initialized_p);
478 obstack = arch->obstack;
479 obstack_free (obstack, 0); /* Includes the ARCH. */
480 xfree (obstack);
058f20d5
JB
481}
482
483
db446970
AC
484/* Ensure that all values in a GDBARCH are reasonable. */
485
486/* NOTE/WARNING: The parameter is called ``current_gdbarch'' so that it
487 just happens to match the global variable ``current_gdbarch''. That
488 way macros refering to that variable get the local and not the global
489 version - ulgh. Once everything is parameterised with gdbarch, this
490 will go away. */
0f71a2f6 491
0f71a2f6 492static void
db446970 493verify_gdbarch (struct gdbarch *current_gdbarch)
0f71a2f6 494{
f16a1923
AC
495 struct ui_file *log;
496 struct cleanup *cleanups;
497 long dummy;
498 char *buf;
f16a1923
AC
499 log = mem_fileopen ();
500 cleanups = make_cleanup_ui_file_delete (log);
0f71a2f6 501 /* fundamental */
db446970 502 if (current_gdbarch->byte_order == BFD_ENDIAN_UNKNOWN)
f16a1923 503 fprintf_unfiltered (log, "\n\tbyte-order");
db446970 504 if (current_gdbarch->bfd_arch_info == NULL)
f16a1923 505 fprintf_unfiltered (log, "\n\tbfd_arch_info");
0f71a2f6 506 /* Check those that need to be defined for the given multi-arch level. */
66b43ecb
AC
507 /* Skip verify of short_bit, invalid_p == 0 */
508 /* Skip verify of int_bit, invalid_p == 0 */
509 /* Skip verify of long_bit, invalid_p == 0 */
510 /* Skip verify of long_long_bit, invalid_p == 0 */
511 /* Skip verify of float_bit, invalid_p == 0 */
456fcf94 512 if (current_gdbarch->float_format == 0)
8da61cc4 513 current_gdbarch->float_format = floatformats_ieee_single;
66b43ecb 514 /* Skip verify of double_bit, invalid_p == 0 */
456fcf94 515 if (current_gdbarch->double_format == 0)
8da61cc4 516 current_gdbarch->double_format = floatformats_ieee_double;
66b43ecb 517 /* Skip verify of long_double_bit, invalid_p == 0 */
456fcf94 518 if (current_gdbarch->long_double_format == 0)
8da61cc4 519 current_gdbarch->long_double_format = floatformats_ieee_double;
66b43ecb 520 /* Skip verify of ptr_bit, invalid_p == 0 */
db446970 521 if (current_gdbarch->addr_bit == 0)
819844ad 522 current_gdbarch->addr_bit = gdbarch_ptr_bit (current_gdbarch);
c0e8c252 523 /* Skip verify of bfd_vma_bit, invalid_p == 0 */
db446970
AC
524 if (current_gdbarch->char_signed == -1)
525 current_gdbarch->char_signed = 1;
cde9ea48 526 /* Skip verify of read_pc, has predicate */
be8dfb87 527 /* Skip verify of write_pc, invalid_p == 0 */
39d4ef09 528 /* Skip verify of virtual_frame_pointer, invalid_p == 0 */
d8124050
AC
529 /* Skip verify of pseudo_register_read, has predicate */
530 /* Skip verify of pseudo_register_write, has predicate */
4d60522e 531 if (current_gdbarch->num_regs == -1)
f16a1923 532 fprintf_unfiltered (log, "\n\tnum_regs");
0aba1244 533 /* Skip verify of num_pseudo_regs, invalid_p == 0 */
1200cd6e 534 /* Skip verify of sp_regnum, invalid_p == 0 */
1200cd6e 535 /* Skip verify of pc_regnum, invalid_p == 0 */
c2169756 536 /* Skip verify of ps_regnum, invalid_p == 0 */
60054393 537 /* Skip verify of fp0_regnum, invalid_p == 0 */
88c72b7d
AC
538 /* Skip verify of stab_reg_to_regnum, invalid_p == 0 */
539 /* Skip verify of ecoff_reg_to_regnum, invalid_p == 0 */
540 /* Skip verify of dwarf_reg_to_regnum, invalid_p == 0 */
541 /* Skip verify of sdb_reg_to_regnum, invalid_p == 0 */
542 /* Skip verify of dwarf2_reg_to_regnum, invalid_p == 0 */
9c04cab7 543 /* Skip verify of register_type, has predicate */
f3be58bc 544 /* Skip verify of unwind_dummy_id, has predicate */
f3be58bc 545 /* Skip verify of deprecated_fp_regnum, invalid_p == 0 */
b8de8283 546 /* Skip verify of push_dummy_call, has predicate */
b8de8283 547 /* Skip verify of call_dummy_location, invalid_p == 0 */
b8de8283 548 /* Skip verify of push_dummy_code, has predicate */
0ab7a791 549 /* Skip verify of print_registers_info, invalid_p == 0 */
23e3a7ac 550 /* Skip verify of print_float_info, has predicate */
e76f1f2e 551 /* Skip verify of print_vector_info, has predicate */
7c7651b2 552 /* Skip verify of register_sim_regno, invalid_p == 0 */
01fb7433
AC
553 /* Skip verify of cannot_fetch_register, invalid_p == 0 */
554 /* Skip verify of cannot_store_register, invalid_p == 0 */
9df628e0 555 /* Skip verify of get_longjmp_target, has predicate */
13d01224 556 /* Skip verify of convert_register_p, invalid_p == 0 */
9acbedc0 557 /* Skip verify of value_from_register, invalid_p == 0 */
4478b372
JB
558 /* Skip verify of pointer_to_address, invalid_p == 0 */
559 /* Skip verify of address_to_pointer, invalid_p == 0 */
fc0c74b1 560 /* Skip verify of integer_to_address, has predicate */
92ad9cd9 561 /* Skip verify of return_value, has predicate */
b5622e8d 562 /* Skip verify of deprecated_use_struct_convention, invalid_p == 0 */
74055713 563 /* Skip verify of deprecated_extract_struct_value_address, has predicate */
4d60522e 564 if (current_gdbarch->skip_prologue == 0)
f16a1923 565 fprintf_unfiltered (log, "\n\tskip_prologue");
4d60522e 566 if (current_gdbarch->inner_than == 0)
f16a1923 567 fprintf_unfiltered (log, "\n\tinner_than");
4d60522e 568 if (current_gdbarch->breakpoint_from_pc == 0)
aaab4dba 569 fprintf_unfiltered (log, "\n\tbreakpoint_from_pc");
a1131521 570 /* Skip verify of adjust_breakpoint_address, has predicate */
c0e8c252
AC
571 /* Skip verify of memory_insert_breakpoint, invalid_p == 0 */
572 /* Skip verify of memory_remove_breakpoint, invalid_p == 0 */
71bd6bd4 573 /* Skip verify of decr_pc_after_break, invalid_p == 0 */
782263ab 574 /* Skip verify of deprecated_function_start_offset, invalid_p == 0 */
123dc839 575 /* Skip verify of remote_register_number, invalid_p == 0 */
b2756930 576 /* Skip verify of fetch_tls_load_module_address, has predicate */
5867a2fb 577 /* Skip verify of frame_args_skip, invalid_p == 0 */
12cc2063 578 /* Skip verify of unwind_pc, has predicate */
a9e5fdc2 579 /* Skip verify of unwind_sp, has predicate */
983a287a 580 /* Skip verify of frame_num_args, has predicate */
dc604539 581 /* Skip verify of frame_align, has predicate */
88d89dbb 582 /* Skip verify of deprecated_reg_struct_has_addr, has predicate */
192cb3d4 583 /* Skip verify of stabs_argument_has_addr, invalid_p == 0 */
f517ea4e 584 /* Skip verify of convert_from_func_ptr_addr, invalid_p == 0 */
875e1767 585 /* Skip verify of addr_bits_remove, invalid_p == 0 */
181c1381 586 /* Skip verify of smash_text_address, invalid_p == 0 */
64c4637f 587 /* Skip verify of software_single_step, has predicate */
3352ef37 588 /* Skip verify of single_step_through_delay, has predicate */
4d60522e 589 if (current_gdbarch->print_insn == 0)
f6c40618 590 fprintf_unfiltered (log, "\n\tprint_insn");
bdcd319a 591 /* Skip verify of skip_trampoline_code, invalid_p == 0 */
dea0c52f 592 /* Skip verify of skip_solib_resolver, invalid_p == 0 */
d50355b6 593 /* Skip verify of in_solib_return_trampoline, invalid_p == 0 */
c12260ac 594 /* Skip verify of in_function_epilogue_p, invalid_p == 0 */
552c04a7 595 /* Skip verify of construct_inferior_arguments, invalid_p == 0 */
a2cf933a
EZ
596 /* Skip verify of elf_make_msymbol_special, invalid_p == 0 */
597 /* Skip verify of coff_make_msymbol_special, invalid_p == 0 */
5720643c 598 /* Skip verify of name_of_malloc, invalid_p == 0 */
c4ed33b9 599 /* Skip verify of cannot_step_breakpoint, invalid_p == 0 */
f74fa174 600 /* Skip verify of have_nonsteppable_watchpoint, invalid_p == 0 */
8b2dbe47
KB
601 /* Skip verify of address_class_type_flags, has predicate */
602 /* Skip verify of address_class_type_flags_to_name, has predicate */
603 /* Skip verify of address_class_name_to_type_flags, has predicate */
7e20f3fb 604 /* Skip verify of register_reggroup_p, invalid_p == 0 */
143985b7 605 /* Skip verify of fetch_pointer_argument, has predicate */
6ce6d90f 606 /* Skip verify of regset_from_core_section, has predicate */
0d5de010
DJ
607 /* Skip verify of vtable_function_descriptors, invalid_p == 0 */
608 /* Skip verify of vbit_in_delta, invalid_p == 0 */
6d350bb5 609 /* Skip verify of skip_permanent_breakpoint, has predicate */
1c772458 610 /* Skip verify of overlay_update, has predicate */
f16a1923
AC
611 buf = ui_file_xstrdup (log, &dummy);
612 make_cleanup (xfree, buf);
613 if (strlen (buf) > 0)
614 internal_error (__FILE__, __LINE__,
e2e0b3e5 615 _("verify_gdbarch: the following are invalid ...%s"),
f16a1923
AC
616 buf);
617 do_cleanups (cleanups);
0f71a2f6
JM
618}
619
620
621/* Print out the details of the current architecture. */
622
4b9b3959
AC
623/* NOTE/WARNING: The parameter is called ``current_gdbarch'' so that it
624 just happens to match the global variable ``current_gdbarch''. That
625 way macros refering to that variable get the local and not the global
626 version - ulgh. Once everything is parameterised with gdbarch, this
627 will go away. */
628
0f71a2f6 629void
db446970 630gdbarch_dump (struct gdbarch *current_gdbarch, struct ui_file *file)
0f71a2f6 631{
b78960be
AC
632 const char *gdb_xm_file = "<not-defined>";
633 const char *gdb_nm_file = "<not-defined>";
634 const char *gdb_tm_file = "<not-defined>";
635#if defined (GDB_XM_FILE)
636 gdb_xm_file = GDB_XM_FILE;
637#endif
638 fprintf_unfiltered (file,
639 "gdbarch_dump: GDB_XM_FILE = %s\n",
640 gdb_xm_file);
641#if defined (GDB_NM_FILE)
642 gdb_nm_file = GDB_NM_FILE;
643#endif
644 fprintf_unfiltered (file,
645 "gdbarch_dump: GDB_NM_FILE = %s\n",
646 gdb_nm_file);
647#if defined (GDB_TM_FILE)
648 gdb_tm_file = GDB_TM_FILE;
649#endif
4b9b3959 650 fprintf_unfiltered (file,
b78960be
AC
651 "gdbarch_dump: GDB_TM_FILE = %s\n",
652 gdb_tm_file);
a2428dbe 653#ifdef TARGET_ADDR_BIT
e2d0e7eb 654 fprintf_unfiltered (file,
a2428dbe
AC
655 "gdbarch_dump: TARGET_ADDR_BIT # %s\n",
656 XSTRING (TARGET_ADDR_BIT));
a2428dbe 657#endif
48f7351b
AC
658 fprintf_unfiltered (file,
659 "gdbarch_dump: addr_bit = %s\n",
660 paddr_d (current_gdbarch->addr_bit));
48f7351b
AC
661 fprintf_unfiltered (file,
662 "gdbarch_dump: addr_bits_remove = <0x%lx>\n",
663 (long) current_gdbarch->addr_bits_remove);
7996bcec
AC
664 fprintf_unfiltered (file,
665 "gdbarch_dump: gdbarch_address_class_name_to_type_flags_p() = %d\n",
666 gdbarch_address_class_name_to_type_flags_p (current_gdbarch));
667 fprintf_unfiltered (file,
48f7351b 668 "gdbarch_dump: address_class_name_to_type_flags = <0x%lx>\n",
7996bcec 669 (long) current_gdbarch->address_class_name_to_type_flags);
48f7351b
AC
670 fprintf_unfiltered (file,
671 "gdbarch_dump: gdbarch_address_class_type_flags_p() = %d\n",
672 gdbarch_address_class_type_flags_p (current_gdbarch));
48f7351b
AC
673 fprintf_unfiltered (file,
674 "gdbarch_dump: address_class_type_flags = <0x%lx>\n",
675 (long) current_gdbarch->address_class_type_flags);
7996bcec
AC
676 fprintf_unfiltered (file,
677 "gdbarch_dump: gdbarch_address_class_type_flags_to_name_p() = %d\n",
678 gdbarch_address_class_type_flags_to_name_p (current_gdbarch));
679 fprintf_unfiltered (file,
48f7351b 680 "gdbarch_dump: address_class_type_flags_to_name = <0x%lx>\n",
7996bcec 681 (long) current_gdbarch->address_class_type_flags_to_name);
48f7351b
AC
682 fprintf_unfiltered (file,
683 "gdbarch_dump: address_to_pointer = <0x%lx>\n",
684 (long) current_gdbarch->address_to_pointer);
a1131521
KB
685 fprintf_unfiltered (file,
686 "gdbarch_dump: gdbarch_adjust_breakpoint_address_p() = %d\n",
687 gdbarch_adjust_breakpoint_address_p (current_gdbarch));
688 fprintf_unfiltered (file,
48f7351b 689 "gdbarch_dump: adjust_breakpoint_address = <0x%lx>\n",
a1131521 690 (long) current_gdbarch->adjust_breakpoint_address);
08e45a40 691#ifdef BELIEVE_PCC_PROMOTION
4b9b3959 692 fprintf_unfiltered (file,
08e45a40
AC
693 "gdbarch_dump: BELIEVE_PCC_PROMOTION # %s\n",
694 XSTRING (BELIEVE_PCC_PROMOTION));
4b9b3959 695#endif
48f7351b
AC
696 fprintf_unfiltered (file,
697 "gdbarch_dump: believe_pcc_promotion = %s\n",
698 paddr_d (current_gdbarch->believe_pcc_promotion));
283354d8 699 fprintf_unfiltered (file,
48f7351b 700 "gdbarch_dump: bfd_arch_info = %s\n",
1143fffb 701 gdbarch_bfd_arch_info (current_gdbarch)->printable_name);
48f7351b
AC
702 fprintf_unfiltered (file,
703 "gdbarch_dump: bfd_vma_bit = %s\n",
704 paddr_d (current_gdbarch->bfd_vma_bit));
48f7351b
AC
705 fprintf_unfiltered (file,
706 "gdbarch_dump: breakpoint_from_pc = <0x%lx>\n",
707 (long) current_gdbarch->breakpoint_from_pc);
48f7351b
AC
708 fprintf_unfiltered (file,
709 "gdbarch_dump: byte_order = %s\n",
710 paddr_d (current_gdbarch->byte_order));
48f7351b
AC
711 fprintf_unfiltered (file,
712 "gdbarch_dump: call_dummy_location = %s\n",
713 paddr_d (current_gdbarch->call_dummy_location));
48f7351b
AC
714 fprintf_unfiltered (file,
715 "gdbarch_dump: cannot_fetch_register = <0x%lx>\n",
716 (long) current_gdbarch->cannot_fetch_register);
48f7351b
AC
717 fprintf_unfiltered (file,
718 "gdbarch_dump: cannot_step_breakpoint = %s\n",
719 paddr_d (current_gdbarch->cannot_step_breakpoint));
48f7351b
AC
720 fprintf_unfiltered (file,
721 "gdbarch_dump: cannot_store_register = <0x%lx>\n",
722 (long) current_gdbarch->cannot_store_register);
48f7351b
AC
723 fprintf_unfiltered (file,
724 "gdbarch_dump: char_signed = %s\n",
725 paddr_d (current_gdbarch->char_signed));
7996bcec 726 fprintf_unfiltered (file,
48f7351b
AC
727 "gdbarch_dump: coff_make_msymbol_special = <0x%lx>\n",
728 (long) current_gdbarch->coff_make_msymbol_special);
729 fprintf_unfiltered (file,
730 "gdbarch_dump: construct_inferior_arguments = <0x%lx>\n",
7996bcec 731 (long) current_gdbarch->construct_inferior_arguments);
a2428dbe 732 fprintf_unfiltered (file,
48f7351b 733 "gdbarch_dump: convert_from_func_ptr_addr = <0x%lx>\n",
a2428dbe 734 (long) current_gdbarch->convert_from_func_ptr_addr);
48f7351b
AC
735 fprintf_unfiltered (file,
736 "gdbarch_dump: convert_register_p = <0x%lx>\n",
737 (long) current_gdbarch->convert_register_p);
48f7351b
AC
738 fprintf_unfiltered (file,
739 "gdbarch_dump: decr_pc_after_break = 0x%s\n",
740 paddr_nz (current_gdbarch->decr_pc_after_break));
74055713
AC
741#ifdef DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P
742 fprintf_unfiltered (file,
743 "gdbarch_dump: %s # %s\n",
744 "DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P()",
745 XSTRING (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P ()));
74055713 746#endif
48f7351b
AC
747 fprintf_unfiltered (file,
748 "gdbarch_dump: gdbarch_deprecated_extract_struct_value_address_p() = %d\n",
749 gdbarch_deprecated_extract_struct_value_address_p (current_gdbarch));
74055713
AC
750#ifdef DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS
751 fprintf_unfiltered (file,
752 "gdbarch_dump: %s # %s\n",
753 "DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(regcache)",
754 XSTRING (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS (regcache)));
74055713 755#endif
48f7351b
AC
756 fprintf_unfiltered (file,
757 "gdbarch_dump: deprecated_extract_struct_value_address = <0x%lx>\n",
758 (long) current_gdbarch->deprecated_extract_struct_value_address);
0ba6dca9
AC
759#ifdef DEPRECATED_FP_REGNUM
760 fprintf_unfiltered (file,
761 "gdbarch_dump: DEPRECATED_FP_REGNUM # %s\n",
762 XSTRING (DEPRECATED_FP_REGNUM));
0ba6dca9 763#endif
48f7351b
AC
764 fprintf_unfiltered (file,
765 "gdbarch_dump: deprecated_fp_regnum = %s\n",
766 paddr_d (current_gdbarch->deprecated_fp_regnum));
782263ab
AC
767#ifdef DEPRECATED_FUNCTION_START_OFFSET
768 fprintf_unfiltered (file,
769 "gdbarch_dump: DEPRECATED_FUNCTION_START_OFFSET # %s\n",
770 XSTRING (DEPRECATED_FUNCTION_START_OFFSET));
782263ab 771#endif
48f7351b
AC
772 fprintf_unfiltered (file,
773 "gdbarch_dump: deprecated_function_start_offset = 0x%s\n",
774 paddr_nz (current_gdbarch->deprecated_function_start_offset));
a2428dbe
AC
775#ifdef DEPRECATED_REG_STRUCT_HAS_ADDR_P
776 fprintf_unfiltered (file,
777 "gdbarch_dump: %s # %s\n",
778 "DEPRECATED_REG_STRUCT_HAS_ADDR_P()",
779 XSTRING (DEPRECATED_REG_STRUCT_HAS_ADDR_P ()));
a2428dbe 780#endif
48f7351b
AC
781 fprintf_unfiltered (file,
782 "gdbarch_dump: gdbarch_deprecated_reg_struct_has_addr_p() = %d\n",
783 gdbarch_deprecated_reg_struct_has_addr_p (current_gdbarch));
a2428dbe
AC
784#ifdef DEPRECATED_REG_STRUCT_HAS_ADDR
785 fprintf_unfiltered (file,
786 "gdbarch_dump: %s # %s\n",
787 "DEPRECATED_REG_STRUCT_HAS_ADDR(gcc_p, type)",
788 XSTRING (DEPRECATED_REG_STRUCT_HAS_ADDR (gcc_p, type)));
a2428dbe 789#endif
48f7351b
AC
790 fprintf_unfiltered (file,
791 "gdbarch_dump: deprecated_reg_struct_has_addr = <0x%lx>\n",
792 (long) current_gdbarch->deprecated_reg_struct_has_addr);
b1e29e33
AC
793#ifdef DEPRECATED_REGISTER_SIZE
794 fprintf_unfiltered (file,
795 "gdbarch_dump: DEPRECATED_REGISTER_SIZE # %s\n",
796 XSTRING (DEPRECATED_REGISTER_SIZE));
b1e29e33 797#endif
48f7351b
AC
798 fprintf_unfiltered (file,
799 "gdbarch_dump: deprecated_register_size = %s\n",
800 paddr_d (current_gdbarch->deprecated_register_size));
b5622e8d
AC
801#ifdef DEPRECATED_USE_STRUCT_CONVENTION
802 fprintf_unfiltered (file,
803 "gdbarch_dump: %s # %s\n",
804 "DEPRECATED_USE_STRUCT_CONVENTION(gcc_p, value_type)",
805 XSTRING (DEPRECATED_USE_STRUCT_CONVENTION (gcc_p, value_type)));
b5622e8d 806#endif
48f7351b
AC
807 fprintf_unfiltered (file,
808 "gdbarch_dump: deprecated_use_struct_convention = <0x%lx>\n",
809 (long) current_gdbarch->deprecated_use_struct_convention);
48f7351b
AC
810 fprintf_unfiltered (file,
811 "gdbarch_dump: double_bit = %s\n",
812 paddr_d (current_gdbarch->double_bit));
a2428dbe 813 fprintf_unfiltered (file,
48f7351b 814 "gdbarch_dump: double_format = %s\n",
456fcf94 815 pformat (current_gdbarch->double_format));
48f7351b
AC
816 fprintf_unfiltered (file,
817 "gdbarch_dump: dwarf2_reg_to_regnum = <0x%lx>\n",
818 (long) current_gdbarch->dwarf2_reg_to_regnum);
48f7351b
AC
819 fprintf_unfiltered (file,
820 "gdbarch_dump: dwarf_reg_to_regnum = <0x%lx>\n",
821 (long) current_gdbarch->dwarf_reg_to_regnum);
48f7351b
AC
822 fprintf_unfiltered (file,
823 "gdbarch_dump: ecoff_reg_to_regnum = <0x%lx>\n",
824 (long) current_gdbarch->ecoff_reg_to_regnum);
48f7351b
AC
825 fprintf_unfiltered (file,
826 "gdbarch_dump: elf_make_msymbol_special = <0x%lx>\n",
827 (long) current_gdbarch->elf_make_msymbol_special);
049ee0e4 828#ifdef EXTRACT_RETURN_VALUE
049ee0e4
AC
829 fprintf_unfiltered (file,
830 "gdbarch_dump: %s # %s\n",
831 "EXTRACT_RETURN_VALUE(type, regcache, valbuf)",
832 XSTRING (EXTRACT_RETURN_VALUE (type, regcache, valbuf)));
049ee0e4 833#endif
48f7351b
AC
834 fprintf_unfiltered (file,
835 "gdbarch_dump: extract_return_value = <0x%lx>\n",
836 (long) current_gdbarch->extract_return_value);
48f7351b
AC
837 fprintf_unfiltered (file,
838 "gdbarch_dump: gdbarch_fetch_pointer_argument_p() = %d\n",
839 gdbarch_fetch_pointer_argument_p (current_gdbarch));
48f7351b
AC
840 fprintf_unfiltered (file,
841 "gdbarch_dump: fetch_pointer_argument = <0x%lx>\n",
842 (long) current_gdbarch->fetch_pointer_argument);
b2756930
KB
843 fprintf_unfiltered (file,
844 "gdbarch_dump: gdbarch_fetch_tls_load_module_address_p() = %d\n",
845 gdbarch_fetch_tls_load_module_address_p (current_gdbarch));
b2756930
KB
846 fprintf_unfiltered (file,
847 "gdbarch_dump: fetch_tls_load_module_address = <0x%lx>\n",
848 (long) current_gdbarch->fetch_tls_load_module_address);
48f7351b
AC
849 fprintf_unfiltered (file,
850 "gdbarch_dump: float_bit = %s\n",
851 paddr_d (current_gdbarch->float_bit));
a2428dbe 852 fprintf_unfiltered (file,
48f7351b 853 "gdbarch_dump: float_format = %s\n",
456fcf94 854 pformat (current_gdbarch->float_format));
08e45a40 855#ifdef FP0_REGNUM
4b9b3959 856 fprintf_unfiltered (file,
08e45a40
AC
857 "gdbarch_dump: FP0_REGNUM # %s\n",
858 XSTRING (FP0_REGNUM));
4b9b3959 859#endif
48f7351b
AC
860 fprintf_unfiltered (file,
861 "gdbarch_dump: fp0_regnum = %s\n",
862 paddr_d (current_gdbarch->fp0_regnum));
a2428dbe
AC
863 fprintf_unfiltered (file,
864 "gdbarch_dump: gdbarch_frame_align_p() = %d\n",
865 gdbarch_frame_align_p (current_gdbarch));
866 fprintf_unfiltered (file,
48f7351b 867 "gdbarch_dump: frame_align = <0x%lx>\n",
a2428dbe 868 (long) current_gdbarch->frame_align);
48f7351b
AC
869 fprintf_unfiltered (file,
870 "gdbarch_dump: frame_args_skip = 0x%s\n",
871 paddr_nz (current_gdbarch->frame_args_skip));
48f7351b
AC
872 fprintf_unfiltered (file,
873 "gdbarch_dump: gdbarch_frame_num_args_p() = %d\n",
874 gdbarch_frame_num_args_p (current_gdbarch));
48f7351b
AC
875 fprintf_unfiltered (file,
876 "gdbarch_dump: frame_num_args = <0x%lx>\n",
877 (long) current_gdbarch->frame_num_args);
48f7351b
AC
878 fprintf_unfiltered (file,
879 "gdbarch_dump: frame_red_zone_size = %s\n",
880 paddr_d (current_gdbarch->frame_red_zone_size));
48f7351b
AC
881 fprintf_unfiltered (file,
882 "gdbarch_dump: gdbarch_get_longjmp_target_p() = %d\n",
883 gdbarch_get_longjmp_target_p (current_gdbarch));
48f7351b
AC
884 fprintf_unfiltered (file,
885 "gdbarch_dump: get_longjmp_target = <0x%lx>\n",
886 (long) current_gdbarch->get_longjmp_target);
a2428dbe 887 fprintf_unfiltered (file,
48f7351b
AC
888 "gdbarch_dump: have_nonsteppable_watchpoint = %s\n",
889 paddr_d (current_gdbarch->have_nonsteppable_watchpoint));
890 fprintf_unfiltered (file,
891 "gdbarch_dump: in_function_epilogue_p = <0x%lx>\n",
a2428dbe 892 (long) current_gdbarch->in_function_epilogue_p);
48f7351b
AC
893 fprintf_unfiltered (file,
894 "gdbarch_dump: in_solib_return_trampoline = <0x%lx>\n",
895 (long) current_gdbarch->in_solib_return_trampoline);
48f7351b
AC
896 fprintf_unfiltered (file,
897 "gdbarch_dump: inner_than = <0x%lx>\n",
898 (long) current_gdbarch->inner_than);
48f7351b
AC
899 fprintf_unfiltered (file,
900 "gdbarch_dump: int_bit = %s\n",
901 paddr_d (current_gdbarch->int_bit));
48f7351b
AC
902 fprintf_unfiltered (file,
903 "gdbarch_dump: gdbarch_integer_to_address_p() = %d\n",
904 gdbarch_integer_to_address_p (current_gdbarch));
48f7351b
AC
905 fprintf_unfiltered (file,
906 "gdbarch_dump: integer_to_address = <0x%lx>\n",
907 (long) current_gdbarch->integer_to_address);
48f7351b
AC
908 fprintf_unfiltered (file,
909 "gdbarch_dump: long_bit = %s\n",
910 paddr_d (current_gdbarch->long_bit));
48f7351b
AC
911 fprintf_unfiltered (file,
912 "gdbarch_dump: long_double_bit = %s\n",
913 paddr_d (current_gdbarch->long_double_bit));
a2428dbe 914 fprintf_unfiltered (file,
48f7351b 915 "gdbarch_dump: long_double_format = %s\n",
456fcf94 916 pformat (current_gdbarch->long_double_format));
48f7351b
AC
917 fprintf_unfiltered (file,
918 "gdbarch_dump: long_long_bit = %s\n",
919 paddr_d (current_gdbarch->long_long_bit));
48f7351b
AC
920 fprintf_unfiltered (file,
921 "gdbarch_dump: memory_insert_breakpoint = <0x%lx>\n",
922 (long) current_gdbarch->memory_insert_breakpoint);
48f7351b
AC
923 fprintf_unfiltered (file,
924 "gdbarch_dump: memory_remove_breakpoint = <0x%lx>\n",
925 (long) current_gdbarch->memory_remove_breakpoint);
5720643c 926 fprintf_unfiltered (file,
48f7351b 927 "gdbarch_dump: name_of_malloc = %s\n",
aea8766f 928 current_gdbarch->name_of_malloc);
48f7351b
AC
929 fprintf_unfiltered (file,
930 "gdbarch_dump: num_pseudo_regs = %s\n",
931 paddr_d (current_gdbarch->num_pseudo_regs));
48f7351b
AC
932 fprintf_unfiltered (file,
933 "gdbarch_dump: num_regs = %s\n",
934 paddr_d (current_gdbarch->num_regs));
48f7351b
AC
935 fprintf_unfiltered (file,
936 "gdbarch_dump: osabi = %s\n",
937 paddr_d (current_gdbarch->osabi));
1c772458
UW
938 fprintf_unfiltered (file,
939 "gdbarch_dump: gdbarch_overlay_update_p() = %d\n",
940 gdbarch_overlay_update_p (current_gdbarch));
941 fprintf_unfiltered (file,
942 "gdbarch_dump: overlay_update = <0x%lx>\n",
943 (long) current_gdbarch->overlay_update);
08e45a40
AC
944#ifdef PC_REGNUM
945 fprintf_unfiltered (file,
946 "gdbarch_dump: PC_REGNUM # %s\n",
947 XSTRING (PC_REGNUM));
7f1b2585 948#endif
48f7351b
AC
949 fprintf_unfiltered (file,
950 "gdbarch_dump: pc_regnum = %s\n",
951 paddr_d (current_gdbarch->pc_regnum));
48f7351b
AC
952 fprintf_unfiltered (file,
953 "gdbarch_dump: pointer_to_address = <0x%lx>\n",
954 (long) current_gdbarch->pointer_to_address);
7996bcec
AC
955 fprintf_unfiltered (file,
956 "gdbarch_dump: gdbarch_print_float_info_p() = %d\n",
957 gdbarch_print_float_info_p (current_gdbarch));
958 fprintf_unfiltered (file,
48f7351b 959 "gdbarch_dump: print_float_info = <0x%lx>\n",
7996bcec 960 (long) current_gdbarch->print_float_info);
a2428dbe
AC
961#ifdef TARGET_PRINT_INSN
962 fprintf_unfiltered (file,
963 "gdbarch_dump: %s # %s\n",
964 "TARGET_PRINT_INSN(vma, info)",
965 XSTRING (TARGET_PRINT_INSN (vma, info)));
a2428dbe 966#endif
7996bcec 967 fprintf_unfiltered (file,
48f7351b
AC
968 "gdbarch_dump: print_insn = <0x%lx>\n",
969 (long) current_gdbarch->print_insn);
970 fprintf_unfiltered (file,
971 "gdbarch_dump: print_registers_info = <0x%lx>\n",
7996bcec
AC
972 (long) current_gdbarch->print_registers_info);
973 fprintf_unfiltered (file,
974 "gdbarch_dump: gdbarch_print_vector_info_p() = %d\n",
975 gdbarch_print_vector_info_p (current_gdbarch));
976 fprintf_unfiltered (file,
48f7351b 977 "gdbarch_dump: print_vector_info = <0x%lx>\n",
7996bcec 978 (long) current_gdbarch->print_vector_info);
c2169756
AC
979#ifdef PS_REGNUM
980 fprintf_unfiltered (file,
981 "gdbarch_dump: PS_REGNUM # %s\n",
982 XSTRING (PS_REGNUM));
a2428dbe 983#endif
48f7351b
AC
984 fprintf_unfiltered (file,
985 "gdbarch_dump: ps_regnum = %s\n",
986 paddr_d (current_gdbarch->ps_regnum));
a2428dbe
AC
987 fprintf_unfiltered (file,
988 "gdbarch_dump: gdbarch_pseudo_register_read_p() = %d\n",
989 gdbarch_pseudo_register_read_p (current_gdbarch));
990 fprintf_unfiltered (file,
48f7351b 991 "gdbarch_dump: pseudo_register_read = <0x%lx>\n",
a2428dbe
AC
992 (long) current_gdbarch->pseudo_register_read);
993 fprintf_unfiltered (file,
994 "gdbarch_dump: gdbarch_pseudo_register_write_p() = %d\n",
995 gdbarch_pseudo_register_write_p (current_gdbarch));
996 fprintf_unfiltered (file,
48f7351b 997 "gdbarch_dump: pseudo_register_write = <0x%lx>\n",
a2428dbe 998 (long) current_gdbarch->pseudo_register_write);
48f7351b
AC
999 fprintf_unfiltered (file,
1000 "gdbarch_dump: ptr_bit = %s\n",
1001 paddr_d (current_gdbarch->ptr_bit));
7996bcec
AC
1002 fprintf_unfiltered (file,
1003 "gdbarch_dump: gdbarch_push_dummy_call_p() = %d\n",
1004 gdbarch_push_dummy_call_p (current_gdbarch));
1005 fprintf_unfiltered (file,
48f7351b 1006 "gdbarch_dump: push_dummy_call = <0x%lx>\n",
7996bcec
AC
1007 (long) current_gdbarch->push_dummy_call);
1008 fprintf_unfiltered (file,
1009 "gdbarch_dump: gdbarch_push_dummy_code_p() = %d\n",
1010 gdbarch_push_dummy_code_p (current_gdbarch));
1011 fprintf_unfiltered (file,
48f7351b 1012 "gdbarch_dump: push_dummy_code = <0x%lx>\n",
7996bcec 1013 (long) current_gdbarch->push_dummy_code);
a2428dbe
AC
1014#ifdef TARGET_READ_PC_P
1015 fprintf_unfiltered (file,
1016 "gdbarch_dump: %s # %s\n",
1017 "TARGET_READ_PC_P()",
1018 XSTRING (TARGET_READ_PC_P ()));
a2428dbe 1019#endif
48f7351b
AC
1020 fprintf_unfiltered (file,
1021 "gdbarch_dump: gdbarch_read_pc_p() = %d\n",
1022 gdbarch_read_pc_p (current_gdbarch));
a2428dbe
AC
1023#ifdef TARGET_READ_PC
1024 fprintf_unfiltered (file,
1025 "gdbarch_dump: %s # %s\n",
1026 "TARGET_READ_PC(ptid)",
1027 XSTRING (TARGET_READ_PC (ptid)));
a2428dbe 1028#endif
48f7351b
AC
1029 fprintf_unfiltered (file,
1030 "gdbarch_dump: read_pc = <0x%lx>\n",
1031 (long) current_gdbarch->read_pc);
a2428dbe 1032 fprintf_unfiltered (file,
48f7351b
AC
1033 "gdbarch_dump: register_name = <0x%lx>\n",
1034 (long) current_gdbarch->register_name);
1035 fprintf_unfiltered (file,
1036 "gdbarch_dump: register_reggroup_p = <0x%lx>\n",
a2428dbe 1037 (long) current_gdbarch->register_reggroup_p);
48f7351b
AC
1038 fprintf_unfiltered (file,
1039 "gdbarch_dump: register_sim_regno = <0x%lx>\n",
1040 (long) current_gdbarch->register_sim_regno);
48f7351b
AC
1041 fprintf_unfiltered (file,
1042 "gdbarch_dump: register_to_value = <0x%lx>\n",
1043 (long) current_gdbarch->register_to_value);
7996bcec
AC
1044 fprintf_unfiltered (file,
1045 "gdbarch_dump: gdbarch_register_type_p() = %d\n",
1046 gdbarch_register_type_p (current_gdbarch));
1047 fprintf_unfiltered (file,
48f7351b 1048 "gdbarch_dump: register_type = <0x%lx>\n",
7996bcec 1049 (long) current_gdbarch->register_type);
a2428dbe
AC
1050 fprintf_unfiltered (file,
1051 "gdbarch_dump: gdbarch_regset_from_core_section_p() = %d\n",
1052 gdbarch_regset_from_core_section_p (current_gdbarch));
1053 fprintf_unfiltered (file,
48f7351b 1054 "gdbarch_dump: regset_from_core_section = <0x%lx>\n",
a2428dbe 1055 (long) current_gdbarch->regset_from_core_section);
123dc839
DJ
1056 fprintf_unfiltered (file,
1057 "gdbarch_dump: remote_register_number = <0x%lx>\n",
1058 (long) current_gdbarch->remote_register_number);
a2428dbe
AC
1059 fprintf_unfiltered (file,
1060 "gdbarch_dump: gdbarch_return_value_p() = %d\n",
1061 gdbarch_return_value_p (current_gdbarch));
1062 fprintf_unfiltered (file,
48f7351b 1063 "gdbarch_dump: return_value = <0x%lx>\n",
a2428dbe 1064 (long) current_gdbarch->return_value);
48f7351b
AC
1065 fprintf_unfiltered (file,
1066 "gdbarch_dump: sdb_reg_to_regnum = <0x%lx>\n",
1067 (long) current_gdbarch->sdb_reg_to_regnum);
48f7351b
AC
1068 fprintf_unfiltered (file,
1069 "gdbarch_dump: short_bit = %s\n",
1070 paddr_d (current_gdbarch->short_bit));
3352ef37
AC
1071 fprintf_unfiltered (file,
1072 "gdbarch_dump: gdbarch_single_step_through_delay_p() = %d\n",
1073 gdbarch_single_step_through_delay_p (current_gdbarch));
1074 fprintf_unfiltered (file,
1075 "gdbarch_dump: single_step_through_delay = <0x%lx>\n",
1076 (long) current_gdbarch->single_step_through_delay);
6d350bb5
UW
1077 fprintf_unfiltered (file,
1078 "gdbarch_dump: gdbarch_skip_permanent_breakpoint_p() = %d\n",
1079 gdbarch_skip_permanent_breakpoint_p (current_gdbarch));
1080 fprintf_unfiltered (file,
1081 "gdbarch_dump: skip_permanent_breakpoint = <0x%lx>\n",
1082 (long) current_gdbarch->skip_permanent_breakpoint);
dea0c52f 1083 fprintf_unfiltered (file,
48f7351b
AC
1084 "gdbarch_dump: skip_prologue = <0x%lx>\n",
1085 (long) current_gdbarch->skip_prologue);
1086 fprintf_unfiltered (file,
1087 "gdbarch_dump: skip_solib_resolver = <0x%lx>\n",
4c8c40e6 1088 (long) current_gdbarch->skip_solib_resolver);
48f7351b
AC
1089 fprintf_unfiltered (file,
1090 "gdbarch_dump: skip_trampoline_code = <0x%lx>\n",
1091 (long) current_gdbarch->skip_trampoline_code);
48f7351b
AC
1092 fprintf_unfiltered (file,
1093 "gdbarch_dump: smash_text_address = <0x%lx>\n",
1094 (long) current_gdbarch->smash_text_address);
1e9f55d0
AC
1095#ifdef SOFTWARE_SINGLE_STEP_P
1096 fprintf_unfiltered (file,
1097 "gdbarch_dump: %s # %s\n",
1098 "SOFTWARE_SINGLE_STEP_P()",
1099 XSTRING (SOFTWARE_SINGLE_STEP_P ()));
1e9f55d0 1100#endif
48f7351b
AC
1101 fprintf_unfiltered (file,
1102 "gdbarch_dump: gdbarch_software_single_step_p() = %d\n",
1103 gdbarch_software_single_step_p (current_gdbarch));
08e45a40 1104#ifdef SOFTWARE_SINGLE_STEP
4b9b3959
AC
1105 fprintf_unfiltered (file,
1106 "gdbarch_dump: %s # %s\n",
e0cd558a
UW
1107 "SOFTWARE_SINGLE_STEP(regcache)",
1108 XSTRING (SOFTWARE_SINGLE_STEP (regcache)));
08e45a40 1109#endif
48f7351b
AC
1110 fprintf_unfiltered (file,
1111 "gdbarch_dump: software_single_step = <0x%lx>\n",
1112 (long) current_gdbarch->software_single_step);
08e45a40 1113#ifdef SP_REGNUM
1dd4193b 1114 fprintf_unfiltered (file,
08e45a40
AC
1115 "gdbarch_dump: SP_REGNUM # %s\n",
1116 XSTRING (SP_REGNUM));
1dd4193b 1117#endif
48f7351b
AC
1118 fprintf_unfiltered (file,
1119 "gdbarch_dump: sp_regnum = %s\n",
1120 paddr_d (current_gdbarch->sp_regnum));
a2428dbe 1121 fprintf_unfiltered (file,
48f7351b
AC
1122 "gdbarch_dump: stab_reg_to_regnum = <0x%lx>\n",
1123 (long) current_gdbarch->stab_reg_to_regnum);
1124 fprintf_unfiltered (file,
1125 "gdbarch_dump: stabs_argument_has_addr = <0x%lx>\n",
a2428dbe 1126 (long) current_gdbarch->stabs_argument_has_addr);
08e45a40 1127#ifdef STORE_RETURN_VALUE
f517ea4e
PS
1128 fprintf_unfiltered (file,
1129 "gdbarch_dump: %s # %s\n",
ebba8386
AC
1130 "STORE_RETURN_VALUE(type, regcache, valbuf)",
1131 XSTRING (STORE_RETURN_VALUE (type, regcache, valbuf)));
875e1767 1132#endif
48f7351b
AC
1133 fprintf_unfiltered (file,
1134 "gdbarch_dump: store_return_value = <0x%lx>\n",
1135 (long) current_gdbarch->store_return_value);
424163ea
DJ
1136 fprintf_unfiltered (file,
1137 "gdbarch_dump: target_desc = %s\n",
1138 paddr_d ((long) current_gdbarch->target_desc));
7996bcec 1139 fprintf_unfiltered (file,
a2428dbe
AC
1140 "gdbarch_dump: gdbarch_unwind_dummy_id_p() = %d\n",
1141 gdbarch_unwind_dummy_id_p (current_gdbarch));
cde9ea48 1142 fprintf_unfiltered (file,
48f7351b 1143 "gdbarch_dump: unwind_dummy_id = <0x%lx>\n",
a2428dbe 1144 (long) current_gdbarch->unwind_dummy_id);
08e45a40 1145 fprintf_unfiltered (file,
a2428dbe
AC
1146 "gdbarch_dump: gdbarch_unwind_pc_p() = %d\n",
1147 gdbarch_unwind_pc_p (current_gdbarch));
7996bcec 1148 fprintf_unfiltered (file,
48f7351b 1149 "gdbarch_dump: unwind_pc = <0x%lx>\n",
a2428dbe 1150 (long) current_gdbarch->unwind_pc);
bd1ce8ba 1151 fprintf_unfiltered (file,
a2428dbe
AC
1152 "gdbarch_dump: gdbarch_unwind_sp_p() = %d\n",
1153 gdbarch_unwind_sp_p (current_gdbarch));
bd1ce8ba 1154 fprintf_unfiltered (file,
48f7351b 1155 "gdbarch_dump: unwind_sp = <0x%lx>\n",
a2428dbe 1156 (long) current_gdbarch->unwind_sp);
9acbedc0
UW
1157 fprintf_unfiltered (file,
1158 "gdbarch_dump: value_from_register = <0x%lx>\n",
1159 (long) current_gdbarch->value_from_register);
48f7351b
AC
1160 fprintf_unfiltered (file,
1161 "gdbarch_dump: value_to_register = <0x%lx>\n",
1162 (long) current_gdbarch->value_to_register);
0d5de010
DJ
1163 fprintf_unfiltered (file,
1164 "gdbarch_dump: vbit_in_delta = %s\n",
1165 paddr_d (current_gdbarch->vbit_in_delta));
48f7351b
AC
1166 fprintf_unfiltered (file,
1167 "gdbarch_dump: virtual_frame_pointer = <0x%lx>\n",
1168 (long) current_gdbarch->virtual_frame_pointer);
0d5de010
DJ
1169 fprintf_unfiltered (file,
1170 "gdbarch_dump: vtable_function_descriptors = %s\n",
1171 paddr_d (current_gdbarch->vtable_function_descriptors));
08e45a40 1172#ifdef TARGET_WRITE_PC
4b9b3959 1173 fprintf_unfiltered (file,
08e45a40
AC
1174 "gdbarch_dump: %s # %s\n",
1175 "TARGET_WRITE_PC(val, ptid)",
1176 XSTRING (TARGET_WRITE_PC (val, ptid)));
381323f4 1177#endif
48f7351b
AC
1178 fprintf_unfiltered (file,
1179 "gdbarch_dump: write_pc = <0x%lx>\n",
1180 (long) current_gdbarch->write_pc);
4b9b3959
AC
1181 if (current_gdbarch->dump_tdep != NULL)
1182 current_gdbarch->dump_tdep (current_gdbarch, file);
0f71a2f6
JM
1183}
1184
1185struct gdbarch_tdep *
104c1213 1186gdbarch_tdep (struct gdbarch *gdbarch)
0f71a2f6
JM
1187{
1188 if (gdbarch_debug >= 2)
0f71a2f6
JM
1189 fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\n");
1190 return gdbarch->tdep;
1191}
1192
1193
1194const struct bfd_arch_info *
104c1213 1195gdbarch_bfd_arch_info (struct gdbarch *gdbarch)
0f71a2f6 1196{
8de9bdc4 1197 gdb_assert (gdbarch != NULL);
0f71a2f6 1198 if (gdbarch_debug >= 2)
0f71a2f6
JM
1199 fprintf_unfiltered (gdb_stdlog, "gdbarch_bfd_arch_info called\n");
1200 return gdbarch->bfd_arch_info;
1201}
1202
1203int
104c1213 1204gdbarch_byte_order (struct gdbarch *gdbarch)
0f71a2f6 1205{
8de9bdc4 1206 gdb_assert (gdbarch != NULL);
0f71a2f6 1207 if (gdbarch_debug >= 2)
0f71a2f6
JM
1208 fprintf_unfiltered (gdb_stdlog, "gdbarch_byte_order called\n");
1209 return gdbarch->byte_order;
1210}
1211
4be87837
DJ
1212enum gdb_osabi
1213gdbarch_osabi (struct gdbarch *gdbarch)
1214{
1215 gdb_assert (gdbarch != NULL);
1216 if (gdbarch_debug >= 2)
1217 fprintf_unfiltered (gdb_stdlog, "gdbarch_osabi called\n");
1218 return gdbarch->osabi;
1219}
1220
424163ea
DJ
1221const struct target_desc *
1222gdbarch_target_desc (struct gdbarch *gdbarch)
1223{
1224 gdb_assert (gdbarch != NULL);
1225 if (gdbarch_debug >= 2)
1226 fprintf_unfiltered (gdb_stdlog, "gdbarch_target_desc called\n");
1227 return gdbarch->target_desc;
1228}
1229
0f71a2f6 1230int
104c1213 1231gdbarch_short_bit (struct gdbarch *gdbarch)
0f71a2f6 1232{
8de9bdc4 1233 gdb_assert (gdbarch != NULL);
66b43ecb 1234 /* Skip verify of short_bit, invalid_p == 0 */
0f71a2f6 1235 if (gdbarch_debug >= 2)
0f71a2f6
JM
1236 fprintf_unfiltered (gdb_stdlog, "gdbarch_short_bit called\n");
1237 return gdbarch->short_bit;
1238}
1239
1240void
104c1213
JM
1241set_gdbarch_short_bit (struct gdbarch *gdbarch,
1242 int short_bit)
0f71a2f6
JM
1243{
1244 gdbarch->short_bit = short_bit;
1245}
1246
1247int
104c1213 1248gdbarch_int_bit (struct gdbarch *gdbarch)
0f71a2f6 1249{
8de9bdc4 1250 gdb_assert (gdbarch != NULL);
66b43ecb 1251 /* Skip verify of int_bit, invalid_p == 0 */
0f71a2f6 1252 if (gdbarch_debug >= 2)
0f71a2f6
JM
1253 fprintf_unfiltered (gdb_stdlog, "gdbarch_int_bit called\n");
1254 return gdbarch->int_bit;
1255}
1256
1257void
104c1213
JM
1258set_gdbarch_int_bit (struct gdbarch *gdbarch,
1259 int int_bit)
0f71a2f6
JM
1260{
1261 gdbarch->int_bit = int_bit;
1262}
1263
1264int
104c1213 1265gdbarch_long_bit (struct gdbarch *gdbarch)
0f71a2f6 1266{
8de9bdc4 1267 gdb_assert (gdbarch != NULL);
66b43ecb 1268 /* Skip verify of long_bit, invalid_p == 0 */
0f71a2f6 1269 if (gdbarch_debug >= 2)
0f71a2f6
JM
1270 fprintf_unfiltered (gdb_stdlog, "gdbarch_long_bit called\n");
1271 return gdbarch->long_bit;
1272}
1273
1274void
104c1213
JM
1275set_gdbarch_long_bit (struct gdbarch *gdbarch,
1276 int long_bit)
0f71a2f6
JM
1277{
1278 gdbarch->long_bit = long_bit;
1279}
1280
1281int
104c1213 1282gdbarch_long_long_bit (struct gdbarch *gdbarch)
0f71a2f6 1283{
8de9bdc4 1284 gdb_assert (gdbarch != NULL);
66b43ecb 1285 /* Skip verify of long_long_bit, invalid_p == 0 */
0f71a2f6 1286 if (gdbarch_debug >= 2)
0f71a2f6
JM
1287 fprintf_unfiltered (gdb_stdlog, "gdbarch_long_long_bit called\n");
1288 return gdbarch->long_long_bit;
1289}
1290
1291void
104c1213
JM
1292set_gdbarch_long_long_bit (struct gdbarch *gdbarch,
1293 int long_long_bit)
0f71a2f6
JM
1294{
1295 gdbarch->long_long_bit = long_long_bit;
1296}
1297
1298int
104c1213 1299gdbarch_float_bit (struct gdbarch *gdbarch)
0f71a2f6 1300{
8de9bdc4 1301 gdb_assert (gdbarch != NULL);
66b43ecb 1302 /* Skip verify of float_bit, invalid_p == 0 */
0f71a2f6 1303 if (gdbarch_debug >= 2)
0f71a2f6
JM
1304 fprintf_unfiltered (gdb_stdlog, "gdbarch_float_bit called\n");
1305 return gdbarch->float_bit;
1306}
1307
1308void
104c1213
JM
1309set_gdbarch_float_bit (struct gdbarch *gdbarch,
1310 int float_bit)
0f71a2f6
JM
1311{
1312 gdbarch->float_bit = float_bit;
1313}
1314
8da61cc4 1315const struct floatformat **
456fcf94
AC
1316gdbarch_float_format (struct gdbarch *gdbarch)
1317{
1318 gdb_assert (gdbarch != NULL);
1319 if (gdbarch_debug >= 2)
1320 fprintf_unfiltered (gdb_stdlog, "gdbarch_float_format called\n");
1321 return gdbarch->float_format;
1322}
1323
1324void
1325set_gdbarch_float_format (struct gdbarch *gdbarch,
8da61cc4 1326 const struct floatformat ** float_format)
456fcf94
AC
1327{
1328 gdbarch->float_format = float_format;
1329}
1330
0f71a2f6 1331int
104c1213 1332gdbarch_double_bit (struct gdbarch *gdbarch)
0f71a2f6 1333{
8de9bdc4 1334 gdb_assert (gdbarch != NULL);
66b43ecb 1335 /* Skip verify of double_bit, invalid_p == 0 */
0f71a2f6 1336 if (gdbarch_debug >= 2)
0f71a2f6
JM
1337 fprintf_unfiltered (gdb_stdlog, "gdbarch_double_bit called\n");
1338 return gdbarch->double_bit;
1339}
1340
1341void
104c1213
JM
1342set_gdbarch_double_bit (struct gdbarch *gdbarch,
1343 int double_bit)
0f71a2f6
JM
1344{
1345 gdbarch->double_bit = double_bit;
1346}
1347
8da61cc4 1348const struct floatformat **
456fcf94
AC
1349gdbarch_double_format (struct gdbarch *gdbarch)
1350{
1351 gdb_assert (gdbarch != NULL);
1352 if (gdbarch_debug >= 2)
1353 fprintf_unfiltered (gdb_stdlog, "gdbarch_double_format called\n");
1354 return gdbarch->double_format;
1355}
1356
1357void
1358set_gdbarch_double_format (struct gdbarch *gdbarch,
8da61cc4 1359 const struct floatformat ** double_format)
456fcf94
AC
1360{
1361 gdbarch->double_format = double_format;
1362}
1363
0f71a2f6 1364int
104c1213 1365gdbarch_long_double_bit (struct gdbarch *gdbarch)
0f71a2f6 1366{
8de9bdc4 1367 gdb_assert (gdbarch != NULL);
66b43ecb 1368 /* Skip verify of long_double_bit, invalid_p == 0 */
0f71a2f6 1369 if (gdbarch_debug >= 2)
0f71a2f6
JM
1370 fprintf_unfiltered (gdb_stdlog, "gdbarch_long_double_bit called\n");
1371 return gdbarch->long_double_bit;
1372}
1373
1374void
104c1213
JM
1375set_gdbarch_long_double_bit (struct gdbarch *gdbarch,
1376 int long_double_bit)
0f71a2f6
JM
1377{
1378 gdbarch->long_double_bit = long_double_bit;
1379}
1380
8da61cc4 1381const struct floatformat **
456fcf94
AC
1382gdbarch_long_double_format (struct gdbarch *gdbarch)
1383{
1384 gdb_assert (gdbarch != NULL);
1385 if (gdbarch_debug >= 2)
1386 fprintf_unfiltered (gdb_stdlog, "gdbarch_long_double_format called\n");
1387 return gdbarch->long_double_format;
1388}
1389
1390void
1391set_gdbarch_long_double_format (struct gdbarch *gdbarch,
8da61cc4 1392 const struct floatformat ** long_double_format)
456fcf94
AC
1393{
1394 gdbarch->long_double_format = long_double_format;
1395}
1396
66b43ecb
AC
1397int
1398gdbarch_ptr_bit (struct gdbarch *gdbarch)
1399{
8de9bdc4 1400 gdb_assert (gdbarch != NULL);
66b43ecb
AC
1401 /* Skip verify of ptr_bit, invalid_p == 0 */
1402 if (gdbarch_debug >= 2)
1403 fprintf_unfiltered (gdb_stdlog, "gdbarch_ptr_bit called\n");
1404 return gdbarch->ptr_bit;
1405}
1406
1407void
1408set_gdbarch_ptr_bit (struct gdbarch *gdbarch,
1409 int ptr_bit)
1410{
1411 gdbarch->ptr_bit = ptr_bit;
1412}
1413
52204a0b
DT
1414int
1415gdbarch_addr_bit (struct gdbarch *gdbarch)
1416{
8de9bdc4 1417 gdb_assert (gdbarch != NULL);
956ac328
AC
1418 /* Check variable changed from pre-default. */
1419 gdb_assert (gdbarch->addr_bit != 0);
52204a0b
DT
1420 if (gdbarch_debug >= 2)
1421 fprintf_unfiltered (gdb_stdlog, "gdbarch_addr_bit called\n");
1422 return gdbarch->addr_bit;
1423}
1424
1425void
1426set_gdbarch_addr_bit (struct gdbarch *gdbarch,
1427 int addr_bit)
1428{
1429 gdbarch->addr_bit = addr_bit;
1430}
1431
66b43ecb
AC
1432int
1433gdbarch_bfd_vma_bit (struct gdbarch *gdbarch)
1434{
8de9bdc4 1435 gdb_assert (gdbarch != NULL);
66b43ecb
AC
1436 /* Skip verify of bfd_vma_bit, invalid_p == 0 */
1437 if (gdbarch_debug >= 2)
1438 fprintf_unfiltered (gdb_stdlog, "gdbarch_bfd_vma_bit called\n");
1439 return gdbarch->bfd_vma_bit;
1440}
1441
1442void
1443set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch,
1444 int bfd_vma_bit)
1445{
1446 gdbarch->bfd_vma_bit = bfd_vma_bit;
1447}
1448
4e409299
JB
1449int
1450gdbarch_char_signed (struct gdbarch *gdbarch)
1451{
8de9bdc4 1452 gdb_assert (gdbarch != NULL);
956ac328
AC
1453 /* Check variable changed from pre-default. */
1454 gdb_assert (gdbarch->char_signed != -1);
4e409299
JB
1455 if (gdbarch_debug >= 2)
1456 fprintf_unfiltered (gdb_stdlog, "gdbarch_char_signed called\n");
1457 return gdbarch->char_signed;
1458}
1459
1460void
1461set_gdbarch_char_signed (struct gdbarch *gdbarch,
1462 int char_signed)
1463{
1464 gdbarch->char_signed = char_signed;
1465}
1466
cde9ea48
AC
1467int
1468gdbarch_read_pc_p (struct gdbarch *gdbarch)
1469{
1470 gdb_assert (gdbarch != NULL);
956ac328 1471 return gdbarch->read_pc != NULL;
cde9ea48
AC
1472}
1473
0f71a2f6 1474CORE_ADDR
39f77062 1475gdbarch_read_pc (struct gdbarch *gdbarch, ptid_t ptid)
0f71a2f6 1476{
8de9bdc4 1477 gdb_assert (gdbarch != NULL);
956ac328 1478 gdb_assert (gdbarch->read_pc != NULL);
0f71a2f6 1479 if (gdbarch_debug >= 2)
0f71a2f6 1480 fprintf_unfiltered (gdb_stdlog, "gdbarch_read_pc called\n");
39f77062 1481 return gdbarch->read_pc (ptid);
0f71a2f6
JM
1482}
1483
1484void
104c1213
JM
1485set_gdbarch_read_pc (struct gdbarch *gdbarch,
1486 gdbarch_read_pc_ftype read_pc)
0f71a2f6
JM
1487{
1488 gdbarch->read_pc = read_pc;
1489}
1490
1491void
39f77062 1492gdbarch_write_pc (struct gdbarch *gdbarch, CORE_ADDR val, ptid_t ptid)
0f71a2f6 1493{
8de9bdc4 1494 gdb_assert (gdbarch != NULL);
956ac328 1495 gdb_assert (gdbarch->write_pc != NULL);
0f71a2f6 1496 if (gdbarch_debug >= 2)
0f71a2f6 1497 fprintf_unfiltered (gdb_stdlog, "gdbarch_write_pc called\n");
39f77062 1498 gdbarch->write_pc (val, ptid);
0f71a2f6
JM
1499}
1500
1501void
104c1213
JM
1502set_gdbarch_write_pc (struct gdbarch *gdbarch,
1503 gdbarch_write_pc_ftype write_pc)
0f71a2f6
JM
1504{
1505 gdbarch->write_pc = write_pc;
1506}
1507
39d4ef09
AC
1508void
1509gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset)
1510{
8de9bdc4 1511 gdb_assert (gdbarch != NULL);
956ac328 1512 gdb_assert (gdbarch->virtual_frame_pointer != NULL);
39d4ef09
AC
1513 if (gdbarch_debug >= 2)
1514 fprintf_unfiltered (gdb_stdlog, "gdbarch_virtual_frame_pointer called\n");
1515 gdbarch->virtual_frame_pointer (pc, frame_regnum, frame_offset);
1516}
1517
1518void
1519set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch,
1520 gdbarch_virtual_frame_pointer_ftype virtual_frame_pointer)
1521{
1522 gdbarch->virtual_frame_pointer = virtual_frame_pointer;
1523}
1524
61a0eb5b 1525int
d8124050 1526gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch)
61a0eb5b 1527{
8de9bdc4 1528 gdb_assert (gdbarch != NULL);
956ac328 1529 return gdbarch->pseudo_register_read != NULL;
61a0eb5b
AC
1530}
1531
1532void
b60c417a 1533gdbarch_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, gdb_byte *buf)
61a0eb5b 1534{
8de9bdc4 1535 gdb_assert (gdbarch != NULL);
956ac328 1536 gdb_assert (gdbarch->pseudo_register_read != NULL);
61a0eb5b 1537 if (gdbarch_debug >= 2)
d8124050
AC
1538 fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_read called\n");
1539 gdbarch->pseudo_register_read (gdbarch, regcache, cookednum, buf);
61a0eb5b
AC
1540}
1541
1542void
d8124050
AC
1543set_gdbarch_pseudo_register_read (struct gdbarch *gdbarch,
1544 gdbarch_pseudo_register_read_ftype pseudo_register_read)
61a0eb5b 1545{
d8124050 1546 gdbarch->pseudo_register_read = pseudo_register_read;
61a0eb5b
AC
1547}
1548
1549int
d8124050 1550gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch)
61a0eb5b 1551{
8de9bdc4 1552 gdb_assert (gdbarch != NULL);
956ac328 1553 return gdbarch->pseudo_register_write != NULL;
61a0eb5b
AC
1554}
1555
1556void
b60c417a 1557gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const gdb_byte *buf)
61a0eb5b 1558{
8de9bdc4 1559 gdb_assert (gdbarch != NULL);
956ac328 1560 gdb_assert (gdbarch->pseudo_register_write != NULL);
61a0eb5b 1561 if (gdbarch_debug >= 2)
d8124050
AC
1562 fprintf_unfiltered (gdb_stdlog, "gdbarch_pseudo_register_write called\n");
1563 gdbarch->pseudo_register_write (gdbarch, regcache, cookednum, buf);
61a0eb5b
AC
1564}
1565
1566void
d8124050
AC
1567set_gdbarch_pseudo_register_write (struct gdbarch *gdbarch,
1568 gdbarch_pseudo_register_write_ftype pseudo_register_write)
61a0eb5b 1569{
d8124050 1570 gdbarch->pseudo_register_write = pseudo_register_write;
61a0eb5b
AC
1571}
1572
0f71a2f6 1573int
104c1213 1574gdbarch_num_regs (struct gdbarch *gdbarch)
0f71a2f6 1575{
8de9bdc4 1576 gdb_assert (gdbarch != NULL);
956ac328
AC
1577 /* Check variable changed from pre-default. */
1578 gdb_assert (gdbarch->num_regs != -1);
0f71a2f6 1579 if (gdbarch_debug >= 2)
0f71a2f6
JM
1580 fprintf_unfiltered (gdb_stdlog, "gdbarch_num_regs called\n");
1581 return gdbarch->num_regs;
1582}
1583
1584void
104c1213
JM
1585set_gdbarch_num_regs (struct gdbarch *gdbarch,
1586 int num_regs)
0f71a2f6
JM
1587{
1588 gdbarch->num_regs = num_regs;
1589}
1590
0aba1244
EZ
1591int
1592gdbarch_num_pseudo_regs (struct gdbarch *gdbarch)
1593{
8de9bdc4 1594 gdb_assert (gdbarch != NULL);
0aba1244
EZ
1595 /* Skip verify of num_pseudo_regs, invalid_p == 0 */
1596 if (gdbarch_debug >= 2)
1597 fprintf_unfiltered (gdb_stdlog, "gdbarch_num_pseudo_regs called\n");
1598 return gdbarch->num_pseudo_regs;
1599}
1600
1601void
1602set_gdbarch_num_pseudo_regs (struct gdbarch *gdbarch,
1603 int num_pseudo_regs)
1604{
1605 gdbarch->num_pseudo_regs = num_pseudo_regs;
1606}
1607
0f71a2f6 1608int
104c1213 1609gdbarch_sp_regnum (struct gdbarch *gdbarch)
0f71a2f6 1610{
8de9bdc4 1611 gdb_assert (gdbarch != NULL);
1200cd6e 1612 /* Skip verify of sp_regnum, invalid_p == 0 */
0f71a2f6 1613 if (gdbarch_debug >= 2)
0f71a2f6
JM
1614 fprintf_unfiltered (gdb_stdlog, "gdbarch_sp_regnum called\n");
1615 return gdbarch->sp_regnum;
1616}
1617
1618void
104c1213
JM
1619set_gdbarch_sp_regnum (struct gdbarch *gdbarch,
1620 int sp_regnum)
0f71a2f6
JM
1621{
1622 gdbarch->sp_regnum = sp_regnum;
1623}
1624
0f71a2f6 1625int
104c1213 1626gdbarch_pc_regnum (struct gdbarch *gdbarch)
0f71a2f6 1627{
8de9bdc4 1628 gdb_assert (gdbarch != NULL);
1200cd6e 1629 /* Skip verify of pc_regnum, invalid_p == 0 */
0f71a2f6 1630 if (gdbarch_debug >= 2)
0f71a2f6
JM
1631 fprintf_unfiltered (gdb_stdlog, "gdbarch_pc_regnum called\n");
1632 return gdbarch->pc_regnum;
1633}
1634
1635void
104c1213
JM
1636set_gdbarch_pc_regnum (struct gdbarch *gdbarch,
1637 int pc_regnum)
0f71a2f6
JM
1638{
1639 gdbarch->pc_regnum = pc_regnum;
1640}
1641
c2169756
AC
1642int
1643gdbarch_ps_regnum (struct gdbarch *gdbarch)
1644{
8de9bdc4 1645 gdb_assert (gdbarch != NULL);
c2169756
AC
1646 /* Skip verify of ps_regnum, invalid_p == 0 */
1647 if (gdbarch_debug >= 2)
1648 fprintf_unfiltered (gdb_stdlog, "gdbarch_ps_regnum called\n");
1649 return gdbarch->ps_regnum;
1650}
1651
1652void
1653set_gdbarch_ps_regnum (struct gdbarch *gdbarch,
1654 int ps_regnum)
1655{
1656 gdbarch->ps_regnum = ps_regnum;
1657}
1658
60054393
MS
1659int
1660gdbarch_fp0_regnum (struct gdbarch *gdbarch)
1661{
8de9bdc4 1662 gdb_assert (gdbarch != NULL);
60054393
MS
1663 /* Skip verify of fp0_regnum, invalid_p == 0 */
1664 if (gdbarch_debug >= 2)
1665 fprintf_unfiltered (gdb_stdlog, "gdbarch_fp0_regnum called\n");
1666 return gdbarch->fp0_regnum;
1667}
1668
1669void
1670set_gdbarch_fp0_regnum (struct gdbarch *gdbarch,
1671 int fp0_regnum)
1672{
1673 gdbarch->fp0_regnum = fp0_regnum;
1674}
1675
88c72b7d
AC
1676int
1677gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr)
1678{
8de9bdc4 1679 gdb_assert (gdbarch != NULL);
956ac328 1680 gdb_assert (gdbarch->stab_reg_to_regnum != NULL);
88c72b7d
AC
1681 if (gdbarch_debug >= 2)
1682 fprintf_unfiltered (gdb_stdlog, "gdbarch_stab_reg_to_regnum called\n");
1683 return gdbarch->stab_reg_to_regnum (stab_regnr);
1684}
1685
1686void
1687set_gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch,
1688 gdbarch_stab_reg_to_regnum_ftype stab_reg_to_regnum)
1689{
1690 gdbarch->stab_reg_to_regnum = stab_reg_to_regnum;
1691}
1692
1693int
1694gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int ecoff_regnr)
1695{
8de9bdc4 1696 gdb_assert (gdbarch != NULL);
956ac328 1697 gdb_assert (gdbarch->ecoff_reg_to_regnum != NULL);
88c72b7d
AC
1698 if (gdbarch_debug >= 2)
1699 fprintf_unfiltered (gdb_stdlog, "gdbarch_ecoff_reg_to_regnum called\n");
1700 return gdbarch->ecoff_reg_to_regnum (ecoff_regnr);
1701}
1702
1703void
1704set_gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch,
1705 gdbarch_ecoff_reg_to_regnum_ftype ecoff_reg_to_regnum)
1706{
1707 gdbarch->ecoff_reg_to_regnum = ecoff_reg_to_regnum;
1708}
1709
1710int
1711gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dwarf_regnr)
1712{
8de9bdc4 1713 gdb_assert (gdbarch != NULL);
956ac328 1714 gdb_assert (gdbarch->dwarf_reg_to_regnum != NULL);
88c72b7d
AC
1715 if (gdbarch_debug >= 2)
1716 fprintf_unfiltered (gdb_stdlog, "gdbarch_dwarf_reg_to_regnum called\n");
1717 return gdbarch->dwarf_reg_to_regnum (dwarf_regnr);
1718}
1719
1720void
1721set_gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch,
1722 gdbarch_dwarf_reg_to_regnum_ftype dwarf_reg_to_regnum)
1723{
1724 gdbarch->dwarf_reg_to_regnum = dwarf_reg_to_regnum;
1725}
1726
1727int
1728gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int sdb_regnr)
1729{
8de9bdc4 1730 gdb_assert (gdbarch != NULL);
956ac328 1731 gdb_assert (gdbarch->sdb_reg_to_regnum != NULL);
88c72b7d
AC
1732 if (gdbarch_debug >= 2)
1733 fprintf_unfiltered (gdb_stdlog, "gdbarch_sdb_reg_to_regnum called\n");
1734 return gdbarch->sdb_reg_to_regnum (sdb_regnr);
1735}
1736
1737void
1738set_gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch,
1739 gdbarch_sdb_reg_to_regnum_ftype sdb_reg_to_regnum)
1740{
1741 gdbarch->sdb_reg_to_regnum = sdb_reg_to_regnum;
1742}
1743
1744int
1745gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2_regnr)
1746{
8de9bdc4 1747 gdb_assert (gdbarch != NULL);
956ac328 1748 gdb_assert (gdbarch->dwarf2_reg_to_regnum != NULL);
88c72b7d
AC
1749 if (gdbarch_debug >= 2)
1750 fprintf_unfiltered (gdb_stdlog, "gdbarch_dwarf2_reg_to_regnum called\n");
1751 return gdbarch->dwarf2_reg_to_regnum (dwarf2_regnr);
1752}
1753
1754void
1755set_gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch,
1756 gdbarch_dwarf2_reg_to_regnum_ftype dwarf2_reg_to_regnum)
1757{
1758 gdbarch->dwarf2_reg_to_regnum = dwarf2_reg_to_regnum;
1759}
1760
fa88f677 1761const char *
0f71a2f6
JM
1762gdbarch_register_name (struct gdbarch *gdbarch, int regnr)
1763{
8de9bdc4 1764 gdb_assert (gdbarch != NULL);
956ac328 1765 gdb_assert (gdbarch->register_name != NULL);
0f71a2f6 1766 if (gdbarch_debug >= 2)
0f71a2f6
JM
1767 fprintf_unfiltered (gdb_stdlog, "gdbarch_register_name called\n");
1768 return gdbarch->register_name (regnr);
1769}
1770
1771void
104c1213
JM
1772set_gdbarch_register_name (struct gdbarch *gdbarch,
1773 gdbarch_register_name_ftype register_name)
0f71a2f6
JM
1774{
1775 gdbarch->register_name = register_name;
1776}
1777
0f71a2f6 1778int
9c04cab7 1779gdbarch_register_type_p (struct gdbarch *gdbarch)
0f71a2f6 1780{
8de9bdc4 1781 gdb_assert (gdbarch != NULL);
956ac328 1782 return gdbarch->register_type != NULL;
9c04cab7
AC
1783}
1784
1785struct type *
1786gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr)
1787{
1788 gdb_assert (gdbarch != NULL);
956ac328 1789 gdb_assert (gdbarch->register_type != NULL);
0f71a2f6 1790 if (gdbarch_debug >= 2)
9c04cab7
AC
1791 fprintf_unfiltered (gdb_stdlog, "gdbarch_register_type called\n");
1792 return gdbarch->register_type (gdbarch, reg_nr);
0f71a2f6
JM
1793}
1794
1795void
9c04cab7
AC
1796set_gdbarch_register_type (struct gdbarch *gdbarch,
1797 gdbarch_register_type_ftype register_type)
0f71a2f6 1798{
9c04cab7 1799 gdbarch->register_type = register_type;
0f71a2f6
JM
1800}
1801
f3be58bc
AC
1802int
1803gdbarch_unwind_dummy_id_p (struct gdbarch *gdbarch)
1804{
1805 gdb_assert (gdbarch != NULL);
956ac328 1806 return gdbarch->unwind_dummy_id != NULL;
f3be58bc
AC
1807}
1808
1809struct frame_id
1810gdbarch_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *info)
1811{
1812 gdb_assert (gdbarch != NULL);
956ac328 1813 gdb_assert (gdbarch->unwind_dummy_id != NULL);
f3be58bc
AC
1814 if (gdbarch_debug >= 2)
1815 fprintf_unfiltered (gdb_stdlog, "gdbarch_unwind_dummy_id called\n");
1816 return gdbarch->unwind_dummy_id (gdbarch, info);
1817}
1818
1819void
1820set_gdbarch_unwind_dummy_id (struct gdbarch *gdbarch,
1821 gdbarch_unwind_dummy_id_ftype unwind_dummy_id)
1822{
1823 gdbarch->unwind_dummy_id = unwind_dummy_id;
1824}
1825
f3be58bc
AC
1826int
1827gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch)
1828{
1829 gdb_assert (gdbarch != NULL);
1830 /* Skip verify of deprecated_fp_regnum, invalid_p == 0 */
1831 if (gdbarch_debug >= 2)
1832 fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_fp_regnum called\n");
1833 return gdbarch->deprecated_fp_regnum;
1834}
1835
1836void
1837set_gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch,
1838 int deprecated_fp_regnum)
1839{
1840 gdbarch->deprecated_fp_regnum = deprecated_fp_regnum;
1841}
1842
0ab7a791 1843int
b8de8283 1844gdbarch_push_dummy_call_p (struct gdbarch *gdbarch)
0ab7a791
AC
1845{
1846 gdb_assert (gdbarch != NULL);
956ac328 1847 return gdbarch->push_dummy_call != NULL;
0ab7a791
AC
1848}
1849
b8de8283 1850CORE_ADDR
7d9b040b 1851gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
666e11c5 1852{
8de9bdc4 1853 gdb_assert (gdbarch != NULL);
956ac328 1854 gdb_assert (gdbarch->push_dummy_call != NULL);
666e11c5 1855 if (gdbarch_debug >= 2)
b8de8283 1856 fprintf_unfiltered (gdb_stdlog, "gdbarch_push_dummy_call called\n");
7d9b040b 1857 return gdbarch->push_dummy_call (gdbarch, function, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr);
666e11c5
EZ
1858}
1859
1860void
b8de8283
AC
1861set_gdbarch_push_dummy_call (struct gdbarch *gdbarch,
1862 gdbarch_push_dummy_call_ftype push_dummy_call)
666e11c5 1863{
b8de8283 1864 gdbarch->push_dummy_call = push_dummy_call;
666e11c5
EZ
1865}
1866
7c7651b2 1867int
b8de8283 1868gdbarch_deprecated_register_size (struct gdbarch *gdbarch)
7c7651b2 1869{
8de9bdc4 1870 gdb_assert (gdbarch != NULL);
7c7651b2 1871 if (gdbarch_debug >= 2)
b8de8283
AC
1872 fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_register_size called\n");
1873 return gdbarch->deprecated_register_size;
7c7651b2
AC
1874}
1875
1876void
b8de8283
AC
1877set_gdbarch_deprecated_register_size (struct gdbarch *gdbarch,
1878 int deprecated_register_size)
7c7651b2 1879{
b8de8283 1880 gdbarch->deprecated_register_size = deprecated_register_size;
7c7651b2
AC
1881}
1882
2649061d 1883int
b8de8283 1884gdbarch_call_dummy_location (struct gdbarch *gdbarch)
2649061d 1885{
8de9bdc4 1886 gdb_assert (gdbarch != NULL);
b8de8283
AC
1887 /* Skip verify of call_dummy_location, invalid_p == 0 */
1888 if (gdbarch_debug >= 2)
1889 fprintf_unfiltered (gdb_stdlog, "gdbarch_call_dummy_location called\n");
1890 return gdbarch->call_dummy_location;
2649061d
AC
1891}
1892
b8de8283
AC
1893void
1894set_gdbarch_call_dummy_location (struct gdbarch *gdbarch,
1895 int call_dummy_location)
1896{
1897 gdbarch->call_dummy_location = call_dummy_location;
1898}
1899
0f71a2f6 1900int
b8de8283 1901gdbarch_push_dummy_code_p (struct gdbarch *gdbarch)
0f71a2f6 1902{
8de9bdc4 1903 gdb_assert (gdbarch != NULL);
956ac328 1904 return gdbarch->push_dummy_code != NULL;
b8de8283
AC
1905}
1906
1907CORE_ADDR
1908gdbarch_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr)
1909{
1910 gdb_assert (gdbarch != NULL);
956ac328 1911 gdb_assert (gdbarch->push_dummy_code != NULL);
0f71a2f6 1912 if (gdbarch_debug >= 2)
b8de8283
AC
1913 fprintf_unfiltered (gdb_stdlog, "gdbarch_push_dummy_code called\n");
1914 return gdbarch->push_dummy_code (gdbarch, sp, funaddr, using_gcc, args, nargs, value_type, real_pc, bp_addr);
0f71a2f6
JM
1915}
1916
1917void
b8de8283
AC
1918set_gdbarch_push_dummy_code (struct gdbarch *gdbarch,
1919 gdbarch_push_dummy_code_ftype push_dummy_code)
0f71a2f6 1920{
b8de8283 1921 gdbarch->push_dummy_code = push_dummy_code;
0f71a2f6
JM
1922}
1923
b8de8283
AC
1924void
1925gdbarch_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all)
1926{
1927 gdb_assert (gdbarch != NULL);
956ac328 1928 gdb_assert (gdbarch->print_registers_info != NULL);
b8de8283
AC
1929 if (gdbarch_debug >= 2)
1930 fprintf_unfiltered (gdb_stdlog, "gdbarch_print_registers_info called\n");
1931 gdbarch->print_registers_info (gdbarch, file, frame, regnum, all);
1932}
1933
1934void
1935set_gdbarch_print_registers_info (struct gdbarch *gdbarch,
1936 gdbarch_print_registers_info_ftype print_registers_info)
1937{
1938 gdbarch->print_registers_info = print_registers_info;
0f71a2f6
JM
1939}
1940
0f71a2f6 1941int
b8de8283
AC
1942gdbarch_print_float_info_p (struct gdbarch *gdbarch)
1943{
1944 gdb_assert (gdbarch != NULL);
956ac328 1945 return gdbarch->print_float_info != NULL;
b8de8283
AC
1946}
1947
1948void
1949gdbarch_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args)
0f71a2f6 1950{
8de9bdc4 1951 gdb_assert (gdbarch != NULL);
956ac328 1952 gdb_assert (gdbarch->print_float_info != NULL);
0f71a2f6 1953 if (gdbarch_debug >= 2)
b8de8283
AC
1954 fprintf_unfiltered (gdb_stdlog, "gdbarch_print_float_info called\n");
1955 gdbarch->print_float_info (gdbarch, file, frame, args);
0f71a2f6
JM
1956}
1957
1958void
b8de8283
AC
1959set_gdbarch_print_float_info (struct gdbarch *gdbarch,
1960 gdbarch_print_float_info_ftype print_float_info)
0f71a2f6 1961{
b8de8283
AC
1962 gdbarch->print_float_info = print_float_info;
1963}
1964
1965int
1966gdbarch_print_vector_info_p (struct gdbarch *gdbarch)
1967{
1968 gdb_assert (gdbarch != NULL);
956ac328 1969 return gdbarch->print_vector_info != NULL;
b8de8283
AC
1970}
1971
1972void
1973gdbarch_print_vector_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args)
1974{
1975 gdb_assert (gdbarch != NULL);
956ac328 1976 gdb_assert (gdbarch->print_vector_info != NULL);
b8de8283
AC
1977 if (gdbarch_debug >= 2)
1978 fprintf_unfiltered (gdb_stdlog, "gdbarch_print_vector_info called\n");
1979 gdbarch->print_vector_info (gdbarch, file, frame, args);
0f71a2f6
JM
1980}
1981
b8de8283
AC
1982void
1983set_gdbarch_print_vector_info (struct gdbarch *gdbarch,
1984 gdbarch_print_vector_info_ftype print_vector_info)
ae45cd16 1985{
b8de8283 1986 gdbarch->print_vector_info = print_vector_info;
ae45cd16
AC
1987}
1988
1989int
b8de8283 1990gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr)
0f71a2f6 1991{
8de9bdc4 1992 gdb_assert (gdbarch != NULL);
956ac328 1993 gdb_assert (gdbarch->register_sim_regno != NULL);
0f71a2f6 1994 if (gdbarch_debug >= 2)
b8de8283
AC
1995 fprintf_unfiltered (gdb_stdlog, "gdbarch_register_sim_regno called\n");
1996 return gdbarch->register_sim_regno (reg_nr);
0f71a2f6
JM
1997}
1998
1999void
b8de8283
AC
2000set_gdbarch_register_sim_regno (struct gdbarch *gdbarch,
2001 gdbarch_register_sim_regno_ftype register_sim_regno)
0f71a2f6 2002{
b8de8283 2003 gdbarch->register_sim_regno = register_sim_regno;
0f71a2f6
JM
2004}
2005
0f71a2f6 2006int
b8de8283 2007gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int regnum)
0f71a2f6 2008{
8de9bdc4 2009 gdb_assert (gdbarch != NULL);
956ac328 2010 gdb_assert (gdbarch->cannot_fetch_register != NULL);
b8de8283
AC
2011 if (gdbarch_debug >= 2)
2012 fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_fetch_register called\n");
2013 return gdbarch->cannot_fetch_register (regnum);
2014}
2015
2016void
2017set_gdbarch_cannot_fetch_register (struct gdbarch *gdbarch,
2018 gdbarch_cannot_fetch_register_ftype cannot_fetch_register)
2019{
2020 gdbarch->cannot_fetch_register = cannot_fetch_register;
0f71a2f6
JM
2021}
2022
2023int
b8de8283 2024gdbarch_cannot_store_register (struct gdbarch *gdbarch, int regnum)
0f71a2f6 2025{
8de9bdc4 2026 gdb_assert (gdbarch != NULL);
956ac328 2027 gdb_assert (gdbarch->cannot_store_register != NULL);
0f71a2f6 2028 if (gdbarch_debug >= 2)
b8de8283
AC
2029 fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_store_register called\n");
2030 return gdbarch->cannot_store_register (regnum);
0f71a2f6
JM
2031}
2032
2033void
b8de8283
AC
2034set_gdbarch_cannot_store_register (struct gdbarch *gdbarch,
2035 gdbarch_cannot_store_register_ftype cannot_store_register)
0f71a2f6 2036{
b8de8283 2037 gdbarch->cannot_store_register = cannot_store_register;
0f71a2f6
JM
2038}
2039
e8ab51f7 2040int
b8de8283 2041gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch)
e8ab51f7
AC
2042{
2043 gdb_assert (gdbarch != NULL);
956ac328 2044 return gdbarch->get_longjmp_target != NULL;
e8ab51f7
AC
2045}
2046
b8de8283
AC
2047int
2048gdbarch_get_longjmp_target (struct gdbarch *gdbarch, CORE_ADDR *pc)
0f71a2f6 2049{
8de9bdc4 2050 gdb_assert (gdbarch != NULL);
956ac328 2051 gdb_assert (gdbarch->get_longjmp_target != NULL);
0f71a2f6 2052 if (gdbarch_debug >= 2)
b8de8283
AC
2053 fprintf_unfiltered (gdb_stdlog, "gdbarch_get_longjmp_target called\n");
2054 return gdbarch->get_longjmp_target (pc);
0f71a2f6
JM
2055}
2056
2057void
b8de8283
AC
2058set_gdbarch_get_longjmp_target (struct gdbarch *gdbarch,
2059 gdbarch_get_longjmp_target_ftype get_longjmp_target)
0f71a2f6 2060{
b8de8283 2061 gdbarch->get_longjmp_target = get_longjmp_target;
0f71a2f6
JM
2062}
2063
2064int
104c1213 2065gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch)
0f71a2f6 2066{
8de9bdc4 2067 gdb_assert (gdbarch != NULL);
0f71a2f6 2068 if (gdbarch_debug >= 2)
0f71a2f6
JM
2069 fprintf_unfiltered (gdb_stdlog, "gdbarch_believe_pcc_promotion called\n");
2070 return gdbarch->believe_pcc_promotion;
2071}
2072
2073void
104c1213
JM
2074set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch,
2075 int believe_pcc_promotion)
0f71a2f6
JM
2076{
2077 gdbarch->believe_pcc_promotion = believe_pcc_promotion;
2078}
2079
13d01224 2080int
ff2e87ac 2081gdbarch_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type)
13d01224
AC
2082{
2083 gdb_assert (gdbarch != NULL);
956ac328 2084 gdb_assert (gdbarch->convert_register_p != NULL);
13d01224
AC
2085 if (gdbarch_debug >= 2)
2086 fprintf_unfiltered (gdb_stdlog, "gdbarch_convert_register_p called\n");
ff2e87ac 2087 return gdbarch->convert_register_p (regnum, type);
13d01224
AC
2088}
2089
2090void
2091set_gdbarch_convert_register_p (struct gdbarch *gdbarch,
2092 gdbarch_convert_register_p_ftype convert_register_p)
2093{
2094 gdbarch->convert_register_p = convert_register_p;
2095}
2096
2097void
b60c417a 2098gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf)
13d01224
AC
2099{
2100 gdb_assert (gdbarch != NULL);
956ac328 2101 gdb_assert (gdbarch->register_to_value != NULL);
13d01224
AC
2102 if (gdbarch_debug >= 2)
2103 fprintf_unfiltered (gdb_stdlog, "gdbarch_register_to_value called\n");
ff2e87ac 2104 gdbarch->register_to_value (frame, regnum, type, buf);
13d01224
AC
2105}
2106
2107void
2108set_gdbarch_register_to_value (struct gdbarch *gdbarch,
2109 gdbarch_register_to_value_ftype register_to_value)
2110{
2111 gdbarch->register_to_value = register_to_value;
2112}
2113
2114void
b60c417a 2115gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf)
13d01224
AC
2116{
2117 gdb_assert (gdbarch != NULL);
956ac328 2118 gdb_assert (gdbarch->value_to_register != NULL);
13d01224
AC
2119 if (gdbarch_debug >= 2)
2120 fprintf_unfiltered (gdb_stdlog, "gdbarch_value_to_register called\n");
ff2e87ac 2121 gdbarch->value_to_register (frame, regnum, type, buf);
13d01224
AC
2122}
2123
2124void
2125set_gdbarch_value_to_register (struct gdbarch *gdbarch,
2126 gdbarch_value_to_register_ftype value_to_register)
2127{
2128 gdbarch->value_to_register = value_to_register;
2129}
2130
9acbedc0
UW
2131struct value *
2132gdbarch_value_from_register (struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_info *frame)
2133{
2134 gdb_assert (gdbarch != NULL);
2135 gdb_assert (gdbarch->value_from_register != NULL);
2136 if (gdbarch_debug >= 2)
2137 fprintf_unfiltered (gdb_stdlog, "gdbarch_value_from_register called\n");
2138 return gdbarch->value_from_register (type, regnum, frame);
2139}
2140
2141void
2142set_gdbarch_value_from_register (struct gdbarch *gdbarch,
2143 gdbarch_value_from_register_ftype value_from_register)
2144{
2145 gdbarch->value_from_register = value_from_register;
2146}
2147
4478b372 2148CORE_ADDR
b60c417a 2149gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
4478b372 2150{
8de9bdc4 2151 gdb_assert (gdbarch != NULL);
956ac328 2152 gdb_assert (gdbarch->pointer_to_address != NULL);
4478b372
JB
2153 if (gdbarch_debug >= 2)
2154 fprintf_unfiltered (gdb_stdlog, "gdbarch_pointer_to_address called\n");
2155 return gdbarch->pointer_to_address (type, buf);
2156}
2157
2158void
2159set_gdbarch_pointer_to_address (struct gdbarch *gdbarch,
2160 gdbarch_pointer_to_address_ftype pointer_to_address)
2161{
2162 gdbarch->pointer_to_address = pointer_to_address;
2163}
2164
2165void
b60c417a 2166gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
4478b372 2167{
8de9bdc4 2168 gdb_assert (gdbarch != NULL);
956ac328 2169 gdb_assert (gdbarch->address_to_pointer != NULL);
4478b372
JB
2170 if (gdbarch_debug >= 2)
2171 fprintf_unfiltered (gdb_stdlog, "gdbarch_address_to_pointer called\n");
2172 gdbarch->address_to_pointer (type, buf, addr);
2173}
2174
2175void
2176set_gdbarch_address_to_pointer (struct gdbarch *gdbarch,
2177 gdbarch_address_to_pointer_ftype address_to_pointer)
2178{
2179 gdbarch->address_to_pointer = address_to_pointer;
2180}
2181
fc0c74b1
AC
2182int
2183gdbarch_integer_to_address_p (struct gdbarch *gdbarch)
2184{
8de9bdc4 2185 gdb_assert (gdbarch != NULL);
956ac328 2186 return gdbarch->integer_to_address != NULL;
fc0c74b1
AC
2187}
2188
2189CORE_ADDR
fc1a4b47 2190gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
fc0c74b1 2191{
8de9bdc4 2192 gdb_assert (gdbarch != NULL);
956ac328 2193 gdb_assert (gdbarch->integer_to_address != NULL);
fc0c74b1
AC
2194 if (gdbarch_debug >= 2)
2195 fprintf_unfiltered (gdb_stdlog, "gdbarch_integer_to_address called\n");
79dd2d24 2196 return gdbarch->integer_to_address (gdbarch, type, buf);
fc0c74b1
AC
2197}
2198
2199void
2200set_gdbarch_integer_to_address (struct gdbarch *gdbarch,
2201 gdbarch_integer_to_address_ftype integer_to_address)
2202{
2203 gdbarch->integer_to_address = integer_to_address;
2204}
2205
92ad9cd9
AC
2206int
2207gdbarch_return_value_p (struct gdbarch *gdbarch)
2208{
2209 gdb_assert (gdbarch != NULL);
750eb019 2210 return gdbarch->return_value != legacy_return_value;
92ad9cd9
AC
2211}
2212
2213enum return_value_convention
b60c417a 2214gdbarch_return_value (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
92ad9cd9
AC
2215{
2216 gdb_assert (gdbarch != NULL);
2217 gdb_assert (gdbarch->return_value != NULL);
750eb019 2218 /* Do not check predicate: gdbarch->return_value != legacy_return_value, allow call. */
92ad9cd9
AC
2219 if (gdbarch_debug >= 2)
2220 fprintf_unfiltered (gdb_stdlog, "gdbarch_return_value called\n");
963e2bb7 2221 return gdbarch->return_value (gdbarch, valtype, regcache, readbuf, writebuf);
92ad9cd9
AC
2222}
2223
2224void
2225set_gdbarch_return_value (struct gdbarch *gdbarch,
2226 gdbarch_return_value_ftype return_value)
2227{
2228 gdbarch->return_value = return_value;
2229}
2230
0f71a2f6 2231void
b60c417a 2232gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, gdb_byte *valbuf)
ebba8386
AC
2233{
2234 gdb_assert (gdbarch != NULL);
956ac328 2235 gdb_assert (gdbarch->extract_return_value != NULL);
ebba8386
AC
2236 if (gdbarch_debug >= 2)
2237 fprintf_unfiltered (gdb_stdlog, "gdbarch_extract_return_value called\n");
2238 gdbarch->extract_return_value (type, regcache, valbuf);
2239}
2240
2241void
2242set_gdbarch_extract_return_value (struct gdbarch *gdbarch,
2243 gdbarch_extract_return_value_ftype extract_return_value)
2244{
2245 gdbarch->extract_return_value = extract_return_value;
2246}
2247
2248void
b60c417a 2249gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const gdb_byte *valbuf)
0f71a2f6 2250{
8de9bdc4 2251 gdb_assert (gdbarch != NULL);
956ac328 2252 gdb_assert (gdbarch->store_return_value != NULL);
0f71a2f6 2253 if (gdbarch_debug >= 2)
0f71a2f6 2254 fprintf_unfiltered (gdb_stdlog, "gdbarch_store_return_value called\n");
ebba8386 2255 gdbarch->store_return_value (type, regcache, valbuf);
0f71a2f6
JM
2256}
2257
2258void
104c1213
JM
2259set_gdbarch_store_return_value (struct gdbarch *gdbarch,
2260 gdbarch_store_return_value_ftype store_return_value)
0f71a2f6
JM
2261{
2262 gdbarch->store_return_value = store_return_value;
2263}
2264
92ad9cd9 2265int
b5622e8d 2266gdbarch_deprecated_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type)
92ad9cd9
AC
2267{
2268 gdb_assert (gdbarch != NULL);
b5622e8d 2269 gdb_assert (gdbarch->deprecated_use_struct_convention != NULL);
92ad9cd9 2270 if (gdbarch_debug >= 2)
b5622e8d
AC
2271 fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_use_struct_convention called\n");
2272 return gdbarch->deprecated_use_struct_convention (gcc_p, value_type);
92ad9cd9
AC
2273}
2274
2275void
b5622e8d
AC
2276set_gdbarch_deprecated_use_struct_convention (struct gdbarch *gdbarch,
2277 gdbarch_deprecated_use_struct_convention_ftype deprecated_use_struct_convention)
92ad9cd9 2278{
b5622e8d 2279 gdbarch->deprecated_use_struct_convention = deprecated_use_struct_convention;
92ad9cd9
AC
2280}
2281
049ee0e4 2282int
74055713 2283gdbarch_deprecated_extract_struct_value_address_p (struct gdbarch *gdbarch)
049ee0e4
AC
2284{
2285 gdb_assert (gdbarch != NULL);
74055713 2286 return gdbarch->deprecated_extract_struct_value_address != NULL;
049ee0e4
AC
2287}
2288
2289CORE_ADDR
74055713 2290gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, struct regcache *regcache)
049ee0e4
AC
2291{
2292 gdb_assert (gdbarch != NULL);
74055713 2293 gdb_assert (gdbarch->deprecated_extract_struct_value_address != NULL);
049ee0e4 2294 if (gdbarch_debug >= 2)
74055713
AC
2295 fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_extract_struct_value_address called\n");
2296 return gdbarch->deprecated_extract_struct_value_address (regcache);
049ee0e4
AC
2297}
2298
2299void
74055713
AC
2300set_gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch,
2301 gdbarch_deprecated_extract_struct_value_address_ftype deprecated_extract_struct_value_address)
049ee0e4 2302{
74055713 2303 gdbarch->deprecated_extract_struct_value_address = deprecated_extract_struct_value_address;
049ee0e4
AC
2304}
2305
0f71a2f6
JM
2306CORE_ADDR
2307gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip)
2308{
8de9bdc4 2309 gdb_assert (gdbarch != NULL);
956ac328 2310 gdb_assert (gdbarch->skip_prologue != NULL);
0f71a2f6 2311 if (gdbarch_debug >= 2)
0f71a2f6
JM
2312 fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_prologue called\n");
2313 return gdbarch->skip_prologue (ip);
2314}
2315
2316void
104c1213
JM
2317set_gdbarch_skip_prologue (struct gdbarch *gdbarch,
2318 gdbarch_skip_prologue_ftype skip_prologue)
0f71a2f6
JM
2319{
2320 gdbarch->skip_prologue = skip_prologue;
2321}
2322
2323int
2324gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs)
2325{
8de9bdc4 2326 gdb_assert (gdbarch != NULL);
956ac328 2327 gdb_assert (gdbarch->inner_than != NULL);
0f71a2f6 2328 if (gdbarch_debug >= 2)
0f71a2f6
JM
2329 fprintf_unfiltered (gdb_stdlog, "gdbarch_inner_than called\n");
2330 return gdbarch->inner_than (lhs, rhs);
2331}
2332
2333void
104c1213
JM
2334set_gdbarch_inner_than (struct gdbarch *gdbarch,
2335 gdbarch_inner_than_ftype inner_than)
0f71a2f6
JM
2336{
2337 gdbarch->inner_than = inner_than;
2338}
2339
fc1a4b47 2340const gdb_byte *
adf40b2e 2341gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
0f71a2f6 2342{
8de9bdc4 2343 gdb_assert (gdbarch != NULL);
956ac328 2344 gdb_assert (gdbarch->breakpoint_from_pc != NULL);
0f71a2f6 2345 if (gdbarch_debug >= 2)
0f71a2f6
JM
2346 fprintf_unfiltered (gdb_stdlog, "gdbarch_breakpoint_from_pc called\n");
2347 return gdbarch->breakpoint_from_pc (pcptr, lenptr);
2348}
2349
2350void
104c1213
JM
2351set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch,
2352 gdbarch_breakpoint_from_pc_ftype breakpoint_from_pc)
0f71a2f6
JM
2353{
2354 gdbarch->breakpoint_from_pc = breakpoint_from_pc;
2355}
2356
a1131521
KB
2357int
2358gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch)
2359{
2360 gdb_assert (gdbarch != NULL);
2361 return gdbarch->adjust_breakpoint_address != NULL;
2362}
2363
2364CORE_ADDR
2365gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
2366{
2367 gdb_assert (gdbarch != NULL);
2368 gdb_assert (gdbarch->adjust_breakpoint_address != NULL);
2369 if (gdbarch_debug >= 2)
2370 fprintf_unfiltered (gdb_stdlog, "gdbarch_adjust_breakpoint_address called\n");
2371 return gdbarch->adjust_breakpoint_address (gdbarch, bpaddr);
2372}
2373
2374void
2375set_gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch,
2376 gdbarch_adjust_breakpoint_address_ftype adjust_breakpoint_address)
2377{
2378 gdbarch->adjust_breakpoint_address = adjust_breakpoint_address;
2379}
2380
917317f4 2381int
8181d85f 2382gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
917317f4 2383{
8de9bdc4 2384 gdb_assert (gdbarch != NULL);
956ac328 2385 gdb_assert (gdbarch->memory_insert_breakpoint != NULL);
917317f4 2386 if (gdbarch_debug >= 2)
917317f4 2387 fprintf_unfiltered (gdb_stdlog, "gdbarch_memory_insert_breakpoint called\n");
8181d85f 2388 return gdbarch->memory_insert_breakpoint (bp_tgt);
917317f4
JM
2389}
2390
2391void
2392set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch,
2393 gdbarch_memory_insert_breakpoint_ftype memory_insert_breakpoint)
2394{
2395 gdbarch->memory_insert_breakpoint = memory_insert_breakpoint;
2396}
2397
2398int
8181d85f 2399gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
917317f4 2400{
8de9bdc4 2401 gdb_assert (gdbarch != NULL);
956ac328 2402 gdb_assert (gdbarch->memory_remove_breakpoint != NULL);
917317f4 2403 if (gdbarch_debug >= 2)
917317f4 2404 fprintf_unfiltered (gdb_stdlog, "gdbarch_memory_remove_breakpoint called\n");
8181d85f 2405 return gdbarch->memory_remove_breakpoint (bp_tgt);
917317f4
JM
2406}
2407
2408void
2409set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch,
2410 gdbarch_memory_remove_breakpoint_ftype memory_remove_breakpoint)
2411{
2412 gdbarch->memory_remove_breakpoint = memory_remove_breakpoint;
2413}
2414
0f71a2f6 2415CORE_ADDR
104c1213 2416gdbarch_decr_pc_after_break (struct gdbarch *gdbarch)
0f71a2f6 2417{
8de9bdc4 2418 gdb_assert (gdbarch != NULL);
71bd6bd4 2419 /* Skip verify of decr_pc_after_break, invalid_p == 0 */
0f71a2f6 2420 if (gdbarch_debug >= 2)
0f71a2f6
JM
2421 fprintf_unfiltered (gdb_stdlog, "gdbarch_decr_pc_after_break called\n");
2422 return gdbarch->decr_pc_after_break;
2423}
2424
2425void
104c1213
JM
2426set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch,
2427 CORE_ADDR decr_pc_after_break)
0f71a2f6
JM
2428{
2429 gdbarch->decr_pc_after_break = decr_pc_after_break;
2430}
2431
2432CORE_ADDR
782263ab 2433gdbarch_deprecated_function_start_offset (struct gdbarch *gdbarch)
0f71a2f6 2434{
8de9bdc4 2435 gdb_assert (gdbarch != NULL);
782263ab 2436 /* Skip verify of deprecated_function_start_offset, invalid_p == 0 */
0f71a2f6 2437 if (gdbarch_debug >= 2)
782263ab
AC
2438 fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_function_start_offset called\n");
2439 return gdbarch->deprecated_function_start_offset;
0f71a2f6
JM
2440}
2441
2442void
782263ab
AC
2443set_gdbarch_deprecated_function_start_offset (struct gdbarch *gdbarch,
2444 CORE_ADDR deprecated_function_start_offset)
0f71a2f6 2445{
782263ab 2446 gdbarch->deprecated_function_start_offset = deprecated_function_start_offset;
0f71a2f6
JM
2447}
2448
123dc839
DJ
2449int
2450gdbarch_remote_register_number (struct gdbarch *gdbarch, int regno)
2451{
2452 gdb_assert (gdbarch != NULL);
2453 gdb_assert (gdbarch->remote_register_number != NULL);
2454 if (gdbarch_debug >= 2)
2455 fprintf_unfiltered (gdb_stdlog, "gdbarch_remote_register_number called\n");
2456 return gdbarch->remote_register_number (gdbarch, regno);
2457}
2458
2459void
2460set_gdbarch_remote_register_number (struct gdbarch *gdbarch,
2461 gdbarch_remote_register_number_ftype remote_register_number)
2462{
2463 gdbarch->remote_register_number = remote_register_number;
2464}
2465
b2756930
KB
2466int
2467gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch)
2468{
2469 gdb_assert (gdbarch != NULL);
2470 return gdbarch->fetch_tls_load_module_address != NULL;
2471}
2472
2473CORE_ADDR
2474gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *objfile)
2475{
2476 gdb_assert (gdbarch != NULL);
2477 gdb_assert (gdbarch->fetch_tls_load_module_address != NULL);
2478 if (gdbarch_debug >= 2)
2479 fprintf_unfiltered (gdb_stdlog, "gdbarch_fetch_tls_load_module_address called\n");
2480 return gdbarch->fetch_tls_load_module_address (objfile);
2481}
2482
2483void
2484set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch,
2485 gdbarch_fetch_tls_load_module_address_ftype fetch_tls_load_module_address)
2486{
2487 gdbarch->fetch_tls_load_module_address = fetch_tls_load_module_address;
2488}
2489
0f71a2f6 2490CORE_ADDR
104c1213 2491gdbarch_frame_args_skip (struct gdbarch *gdbarch)
0f71a2f6 2492{
8de9bdc4 2493 gdb_assert (gdbarch != NULL);
5867a2fb 2494 /* Skip verify of frame_args_skip, invalid_p == 0 */
0f71a2f6 2495 if (gdbarch_debug >= 2)
0f71a2f6
JM
2496 fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_args_skip called\n");
2497 return gdbarch->frame_args_skip;
2498}
2499
2500void
104c1213
JM
2501set_gdbarch_frame_args_skip (struct gdbarch *gdbarch,
2502 CORE_ADDR frame_args_skip)
0f71a2f6
JM
2503{
2504 gdbarch->frame_args_skip = frame_args_skip;
2505}
2506
12cc2063
AC
2507int
2508gdbarch_unwind_pc_p (struct gdbarch *gdbarch)
2509{
2510 gdb_assert (gdbarch != NULL);
956ac328 2511 return gdbarch->unwind_pc != NULL;
12cc2063
AC
2512}
2513
2514CORE_ADDR
2515gdbarch_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2516{
2517 gdb_assert (gdbarch != NULL);
956ac328 2518 gdb_assert (gdbarch->unwind_pc != NULL);
12cc2063
AC
2519 if (gdbarch_debug >= 2)
2520 fprintf_unfiltered (gdb_stdlog, "gdbarch_unwind_pc called\n");
2521 return gdbarch->unwind_pc (gdbarch, next_frame);
2522}
2523
2524void
2525set_gdbarch_unwind_pc (struct gdbarch *gdbarch,
2526 gdbarch_unwind_pc_ftype unwind_pc)
2527{
2528 gdbarch->unwind_pc = unwind_pc;
2529}
2530
a9e5fdc2
AC
2531int
2532gdbarch_unwind_sp_p (struct gdbarch *gdbarch)
2533{
2534 gdb_assert (gdbarch != NULL);
956ac328 2535 return gdbarch->unwind_sp != NULL;
a9e5fdc2
AC
2536}
2537
2538CORE_ADDR
2539gdbarch_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
2540{
2541 gdb_assert (gdbarch != NULL);
956ac328 2542 gdb_assert (gdbarch->unwind_sp != NULL);
a9e5fdc2
AC
2543 if (gdbarch_debug >= 2)
2544 fprintf_unfiltered (gdb_stdlog, "gdbarch_unwind_sp called\n");
2545 return gdbarch->unwind_sp (gdbarch, next_frame);
2546}
2547
2548void
2549set_gdbarch_unwind_sp (struct gdbarch *gdbarch,
2550 gdbarch_unwind_sp_ftype unwind_sp)
2551{
2552 gdbarch->unwind_sp = unwind_sp;
2553}
2554
983a287a
AC
2555int
2556gdbarch_frame_num_args_p (struct gdbarch *gdbarch)
2557{
2558 gdb_assert (gdbarch != NULL);
956ac328 2559 return gdbarch->frame_num_args != NULL;
983a287a
AC
2560}
2561
0f71a2f6
JM
2562int
2563gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame)
2564{
8de9bdc4 2565 gdb_assert (gdbarch != NULL);
956ac328 2566 gdb_assert (gdbarch->frame_num_args != NULL);
0f71a2f6 2567 if (gdbarch_debug >= 2)
0f71a2f6
JM
2568 fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_num_args called\n");
2569 return gdbarch->frame_num_args (frame);
2570}
2571
2572void
104c1213
JM
2573set_gdbarch_frame_num_args (struct gdbarch *gdbarch,
2574 gdbarch_frame_num_args_ftype frame_num_args)
0f71a2f6
JM
2575{
2576 gdbarch->frame_num_args = frame_num_args;
2577}
2578
dc604539
AC
2579int
2580gdbarch_frame_align_p (struct gdbarch *gdbarch)
2581{
2582 gdb_assert (gdbarch != NULL);
956ac328 2583 return gdbarch->frame_align != NULL;
dc604539
AC
2584}
2585
2586CORE_ADDR
2587gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
2588{
2589 gdb_assert (gdbarch != NULL);
956ac328 2590 gdb_assert (gdbarch->frame_align != NULL);
dc604539
AC
2591 if (gdbarch_debug >= 2)
2592 fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_align called\n");
2593 return gdbarch->frame_align (gdbarch, address);
2594}
2595
2596void
2597set_gdbarch_frame_align (struct gdbarch *gdbarch,
2598 gdbarch_frame_align_ftype frame_align)
2599{
2600 gdbarch->frame_align = frame_align;
2601}
2602
d03e67c9 2603int
88d89dbb 2604gdbarch_deprecated_reg_struct_has_addr_p (struct gdbarch *gdbarch)
d03e67c9 2605{
8de9bdc4 2606 gdb_assert (gdbarch != NULL);
88d89dbb 2607 return gdbarch->deprecated_reg_struct_has_addr != NULL;
d03e67c9
AC
2608}
2609
2610int
88d89dbb 2611gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type)
d03e67c9 2612{
8de9bdc4 2613 gdb_assert (gdbarch != NULL);
88d89dbb 2614 gdb_assert (gdbarch->deprecated_reg_struct_has_addr != NULL);
d03e67c9 2615 if (gdbarch_debug >= 2)
88d89dbb
MK
2616 fprintf_unfiltered (gdb_stdlog, "gdbarch_deprecated_reg_struct_has_addr called\n");
2617 return gdbarch->deprecated_reg_struct_has_addr (gcc_p, type);
d03e67c9
AC
2618}
2619
2620void
88d89dbb
MK
2621set_gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch,
2622 gdbarch_deprecated_reg_struct_has_addr_ftype deprecated_reg_struct_has_addr)
d03e67c9 2623{
88d89dbb 2624 gdbarch->deprecated_reg_struct_has_addr = deprecated_reg_struct_has_addr;
d03e67c9
AC
2625}
2626
192cb3d4
MK
2627int
2628gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
2629{
2630 gdb_assert (gdbarch != NULL);
2631 gdb_assert (gdbarch->stabs_argument_has_addr != NULL);
2632 if (gdbarch_debug >= 2)
2633 fprintf_unfiltered (gdb_stdlog, "gdbarch_stabs_argument_has_addr called\n");
2634 return gdbarch->stabs_argument_has_addr (gdbarch, type);
2635}
2636
2637void
2638set_gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch,
2639 gdbarch_stabs_argument_has_addr_ftype stabs_argument_has_addr)
2640{
2641 gdbarch->stabs_argument_has_addr = stabs_argument_has_addr;
2642}
2643
8b148df9
AC
2644int
2645gdbarch_frame_red_zone_size (struct gdbarch *gdbarch)
2646{
2647 gdb_assert (gdbarch != NULL);
2648 if (gdbarch_debug >= 2)
2649 fprintf_unfiltered (gdb_stdlog, "gdbarch_frame_red_zone_size called\n");
2650 return gdbarch->frame_red_zone_size;
2651}
2652
2653void
2654set_gdbarch_frame_red_zone_size (struct gdbarch *gdbarch,
2655 int frame_red_zone_size)
2656{
2657 gdbarch->frame_red_zone_size = frame_red_zone_size;
2658}
2659
f517ea4e 2660CORE_ADDR
e2d0e7eb 2661gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
f517ea4e 2662{
8de9bdc4 2663 gdb_assert (gdbarch != NULL);
956ac328 2664 gdb_assert (gdbarch->convert_from_func_ptr_addr != NULL);
f517ea4e
PS
2665 if (gdbarch_debug >= 2)
2666 fprintf_unfiltered (gdb_stdlog, "gdbarch_convert_from_func_ptr_addr called\n");
e2d0e7eb 2667 return gdbarch->convert_from_func_ptr_addr (gdbarch, addr, targ);
f517ea4e
PS
2668}
2669
2670void
2671set_gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
2672 gdbarch_convert_from_func_ptr_addr_ftype convert_from_func_ptr_addr)
2673{
2674 gdbarch->convert_from_func_ptr_addr = convert_from_func_ptr_addr;
2675}
2676
875e1767
AC
2677CORE_ADDR
2678gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
2679{
8de9bdc4 2680 gdb_assert (gdbarch != NULL);
956ac328 2681 gdb_assert (gdbarch->addr_bits_remove != NULL);
875e1767
AC
2682 if (gdbarch_debug >= 2)
2683 fprintf_unfiltered (gdb_stdlog, "gdbarch_addr_bits_remove called\n");
2684 return gdbarch->addr_bits_remove (addr);
2685}
2686
2687void
2688set_gdbarch_addr_bits_remove (struct gdbarch *gdbarch,
2689 gdbarch_addr_bits_remove_ftype addr_bits_remove)
2690{
2691 gdbarch->addr_bits_remove = addr_bits_remove;
2692}
2693
181c1381
RE
2694CORE_ADDR
2695gdbarch_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR addr)
2696{
8de9bdc4 2697 gdb_assert (gdbarch != NULL);
956ac328 2698 gdb_assert (gdbarch->smash_text_address != NULL);
181c1381
RE
2699 if (gdbarch_debug >= 2)
2700 fprintf_unfiltered (gdb_stdlog, "gdbarch_smash_text_address called\n");
2701 return gdbarch->smash_text_address (addr);
2702}
2703
2704void
2705set_gdbarch_smash_text_address (struct gdbarch *gdbarch,
2706 gdbarch_smash_text_address_ftype smash_text_address)
2707{
2708 gdbarch->smash_text_address = smash_text_address;
2709}
2710
64c4637f
AC
2711int
2712gdbarch_software_single_step_p (struct gdbarch *gdbarch)
2713{
8de9bdc4 2714 gdb_assert (gdbarch != NULL);
956ac328 2715 return gdbarch->software_single_step != NULL;
64c4637f
AC
2716}
2717
e6590a1b 2718int
e0cd558a 2719gdbarch_software_single_step (struct gdbarch *gdbarch, struct regcache *regcache)
64c4637f 2720{
8de9bdc4 2721 gdb_assert (gdbarch != NULL);
956ac328 2722 gdb_assert (gdbarch->software_single_step != NULL);
64c4637f
AC
2723 if (gdbarch_debug >= 2)
2724 fprintf_unfiltered (gdb_stdlog, "gdbarch_software_single_step called\n");
e0cd558a 2725 return gdbarch->software_single_step (regcache);
64c4637f
AC
2726}
2727
2728void
2729set_gdbarch_software_single_step (struct gdbarch *gdbarch,
2730 gdbarch_software_single_step_ftype software_single_step)
2731{
2732 gdbarch->software_single_step = software_single_step;
2733}
2734
3352ef37
AC
2735int
2736gdbarch_single_step_through_delay_p (struct gdbarch *gdbarch)
2737{
2738 gdb_assert (gdbarch != NULL);
2739 return gdbarch->single_step_through_delay != NULL;
2740}
2741
2742int
2743gdbarch_single_step_through_delay (struct gdbarch *gdbarch, struct frame_info *frame)
2744{
2745 gdb_assert (gdbarch != NULL);
2746 gdb_assert (gdbarch->single_step_through_delay != NULL);
2747 if (gdbarch_debug >= 2)
2748 fprintf_unfiltered (gdb_stdlog, "gdbarch_single_step_through_delay called\n");
2749 return gdbarch->single_step_through_delay (gdbarch, frame);
2750}
2751
2752void
2753set_gdbarch_single_step_through_delay (struct gdbarch *gdbarch,
2754 gdbarch_single_step_through_delay_ftype single_step_through_delay)
2755{
2756 gdbarch->single_step_through_delay = single_step_through_delay;
2757}
2758
2bf0cb65 2759int
a89aa300 2760gdbarch_print_insn (struct gdbarch *gdbarch, bfd_vma vma, struct disassemble_info *info)
2bf0cb65 2761{
8de9bdc4 2762 gdb_assert (gdbarch != NULL);
956ac328 2763 gdb_assert (gdbarch->print_insn != NULL);
2bf0cb65
EZ
2764 if (gdbarch_debug >= 2)
2765 fprintf_unfiltered (gdb_stdlog, "gdbarch_print_insn called\n");
2766 return gdbarch->print_insn (vma, info);
2767}
2768
2769void
2770set_gdbarch_print_insn (struct gdbarch *gdbarch,
2771 gdbarch_print_insn_ftype print_insn)
2772{
2773 gdbarch->print_insn = print_insn;
2774}
2775
bdcd319a
CV
2776CORE_ADDR
2777gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, CORE_ADDR pc)
2778{
8de9bdc4 2779 gdb_assert (gdbarch != NULL);
956ac328 2780 gdb_assert (gdbarch->skip_trampoline_code != NULL);
bdcd319a
CV
2781 if (gdbarch_debug >= 2)
2782 fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_trampoline_code called\n");
2783 return gdbarch->skip_trampoline_code (pc);
2784}
2785
2786void
2787set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch,
2788 gdbarch_skip_trampoline_code_ftype skip_trampoline_code)
2789{
2790 gdbarch->skip_trampoline_code = skip_trampoline_code;
2791}
2792
dea0c52f
MK
2793CORE_ADDR
2794gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
2795{
2796 gdb_assert (gdbarch != NULL);
2797 gdb_assert (gdbarch->skip_solib_resolver != NULL);
2798 if (gdbarch_debug >= 2)
2799 fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_solib_resolver called\n");
4c8c40e6 2800 return gdbarch->skip_solib_resolver (gdbarch, pc);
dea0c52f
MK
2801}
2802
2803void
2804set_gdbarch_skip_solib_resolver (struct gdbarch *gdbarch,
2805 gdbarch_skip_solib_resolver_ftype skip_solib_resolver)
2806{
2807 gdbarch->skip_solib_resolver = skip_solib_resolver;
2808}
2809
d50355b6
MS
2810int
2811gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name)
2812{
2813 gdb_assert (gdbarch != NULL);
956ac328 2814 gdb_assert (gdbarch->in_solib_return_trampoline != NULL);
d50355b6
MS
2815 if (gdbarch_debug >= 2)
2816 fprintf_unfiltered (gdb_stdlog, "gdbarch_in_solib_return_trampoline called\n");
2817 return gdbarch->in_solib_return_trampoline (pc, name);
2818}
2819
2820void
2821set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch,
2822 gdbarch_in_solib_return_trampoline_ftype in_solib_return_trampoline)
2823{
2824 gdbarch->in_solib_return_trampoline = in_solib_return_trampoline;
2825}
2826
c12260ac
CV
2827int
2828gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR addr)
2829{
8de9bdc4 2830 gdb_assert (gdbarch != NULL);
956ac328 2831 gdb_assert (gdbarch->in_function_epilogue_p != NULL);
c12260ac
CV
2832 if (gdbarch_debug >= 2)
2833 fprintf_unfiltered (gdb_stdlog, "gdbarch_in_function_epilogue_p called\n");
2834 return gdbarch->in_function_epilogue_p (gdbarch, addr);
2835}
2836
2837void
2838set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch,
2839 gdbarch_in_function_epilogue_p_ftype in_function_epilogue_p)
2840{
2841 gdbarch->in_function_epilogue_p = in_function_epilogue_p;
2842}
2843
552c04a7
TT
2844char *
2845gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv)
2846{
8de9bdc4 2847 gdb_assert (gdbarch != NULL);
956ac328 2848 gdb_assert (gdbarch->construct_inferior_arguments != NULL);
552c04a7
TT
2849 if (gdbarch_debug >= 2)
2850 fprintf_unfiltered (gdb_stdlog, "gdbarch_construct_inferior_arguments called\n");
2851 return gdbarch->construct_inferior_arguments (gdbarch, argc, argv);
2852}
2853
2854void
2855set_gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch,
2856 gdbarch_construct_inferior_arguments_ftype construct_inferior_arguments)
2857{
2858 gdbarch->construct_inferior_arguments = construct_inferior_arguments;
2859}
2860
a2cf933a
EZ
2861void
2862gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym)
2863{
8de9bdc4 2864 gdb_assert (gdbarch != NULL);
956ac328 2865 gdb_assert (gdbarch->elf_make_msymbol_special != NULL);
a2cf933a
EZ
2866 if (gdbarch_debug >= 2)
2867 fprintf_unfiltered (gdb_stdlog, "gdbarch_elf_make_msymbol_special called\n");
2868 gdbarch->elf_make_msymbol_special (sym, msym);
2869}
2870
2871void
2872set_gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch,
2873 gdbarch_elf_make_msymbol_special_ftype elf_make_msymbol_special)
2874{
2875 gdbarch->elf_make_msymbol_special = elf_make_msymbol_special;
2876}
2877
2878void
2879gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, int val, struct minimal_symbol *msym)
2880{
8de9bdc4 2881 gdb_assert (gdbarch != NULL);
956ac328 2882 gdb_assert (gdbarch->coff_make_msymbol_special != NULL);
a2cf933a
EZ
2883 if (gdbarch_debug >= 2)
2884 fprintf_unfiltered (gdb_stdlog, "gdbarch_coff_make_msymbol_special called\n");
2885 gdbarch->coff_make_msymbol_special (val, msym);
2886}
2887
2888void
2889set_gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch,
2890 gdbarch_coff_make_msymbol_special_ftype coff_make_msymbol_special)
2891{
2892 gdbarch->coff_make_msymbol_special = coff_make_msymbol_special;
2893}
2894
5720643c
JB
2895const char *
2896gdbarch_name_of_malloc (struct gdbarch *gdbarch)
2897{
2898 gdb_assert (gdbarch != NULL);
2899 /* Skip verify of name_of_malloc, invalid_p == 0 */
2900 if (gdbarch_debug >= 2)
2901 fprintf_unfiltered (gdb_stdlog, "gdbarch_name_of_malloc called\n");
2902 return gdbarch->name_of_malloc;
2903}
2904
2905void
2906set_gdbarch_name_of_malloc (struct gdbarch *gdbarch,
2907 const char * name_of_malloc)
2908{
2909 gdbarch->name_of_malloc = name_of_malloc;
2910}
2911
c4ed33b9
AC
2912int
2913gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch)
2914{
2915 gdb_assert (gdbarch != NULL);
2916 /* Skip verify of cannot_step_breakpoint, invalid_p == 0 */
2917 if (gdbarch_debug >= 2)
2918 fprintf_unfiltered (gdb_stdlog, "gdbarch_cannot_step_breakpoint called\n");
2919 return gdbarch->cannot_step_breakpoint;
2920}
2921
2922void
2923set_gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch,
2924 int cannot_step_breakpoint)
2925{
2926 gdbarch->cannot_step_breakpoint = cannot_step_breakpoint;
2927}
2928
f74fa174
MM
2929int
2930gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch)
2931{
2932 gdb_assert (gdbarch != NULL);
2933 /* Skip verify of have_nonsteppable_watchpoint, invalid_p == 0 */
2934 if (gdbarch_debug >= 2)
2935 fprintf_unfiltered (gdb_stdlog, "gdbarch_have_nonsteppable_watchpoint called\n");
2936 return gdbarch->have_nonsteppable_watchpoint;
2937}
2938
2939void
2940set_gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch,
967c0d83 2941 int have_nonsteppable_watchpoint)
f74fa174
MM
2942{
2943 gdbarch->have_nonsteppable_watchpoint = have_nonsteppable_watchpoint;
2944}
2945
8b2dbe47
KB
2946int
2947gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch)
2948{
2949 gdb_assert (gdbarch != NULL);
956ac328 2950 return gdbarch->address_class_type_flags != NULL;
8b2dbe47
KB
2951}
2952
2953int
2954gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class)
2955{
2956 gdb_assert (gdbarch != NULL);
956ac328 2957 gdb_assert (gdbarch->address_class_type_flags != NULL);
8b2dbe47
KB
2958 if (gdbarch_debug >= 2)
2959 fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_type_flags called\n");
2960 return gdbarch->address_class_type_flags (byte_size, dwarf2_addr_class);
2961}
2962
2963void
2964set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch,
2965 gdbarch_address_class_type_flags_ftype address_class_type_flags)
2966{
2967 gdbarch->address_class_type_flags = address_class_type_flags;
2968}
2969
2970int
2971gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch)
2972{
2973 gdb_assert (gdbarch != NULL);
956ac328 2974 return gdbarch->address_class_type_flags_to_name != NULL;
8b2dbe47
KB
2975}
2976
321432c0 2977const char *
8b2dbe47
KB
2978gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags)
2979{
2980 gdb_assert (gdbarch != NULL);
956ac328 2981 gdb_assert (gdbarch->address_class_type_flags_to_name != NULL);
8b2dbe47
KB
2982 if (gdbarch_debug >= 2)
2983 fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_type_flags_to_name called\n");
5f11f355 2984 return gdbarch->address_class_type_flags_to_name (gdbarch, type_flags);
8b2dbe47
KB
2985}
2986
2987void
2988set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch,
2989 gdbarch_address_class_type_flags_to_name_ftype address_class_type_flags_to_name)
2990{
2991 gdbarch->address_class_type_flags_to_name = address_class_type_flags_to_name;
2992}
2993
2994int
2995gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch)
2996{
2997 gdb_assert (gdbarch != NULL);
956ac328 2998 return gdbarch->address_class_name_to_type_flags != NULL;
8b2dbe47
KB
2999}
3000
3001int
321432c0 3002gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr)
8b2dbe47
KB
3003{
3004 gdb_assert (gdbarch != NULL);
956ac328 3005 gdb_assert (gdbarch->address_class_name_to_type_flags != NULL);
8b2dbe47
KB
3006 if (gdbarch_debug >= 2)
3007 fprintf_unfiltered (gdb_stdlog, "gdbarch_address_class_name_to_type_flags called\n");
5f11f355 3008 return gdbarch->address_class_name_to_type_flags (gdbarch, name, type_flags_ptr);
8b2dbe47
KB
3009}
3010
3011void
3012set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch,
3013 gdbarch_address_class_name_to_type_flags_ftype address_class_name_to_type_flags)
3014{
3015 gdbarch->address_class_name_to_type_flags = address_class_name_to_type_flags;
3016}
3017
b59ff9d5
AC
3018int
3019gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup)
3020{
3021 gdb_assert (gdbarch != NULL);
956ac328 3022 gdb_assert (gdbarch->register_reggroup_p != NULL);
b59ff9d5
AC
3023 if (gdbarch_debug >= 2)
3024 fprintf_unfiltered (gdb_stdlog, "gdbarch_register_reggroup_p called\n");
3025 return gdbarch->register_reggroup_p (gdbarch, regnum, reggroup);
3026}
3027
3028void
3029set_gdbarch_register_reggroup_p (struct gdbarch *gdbarch,
3030 gdbarch_register_reggroup_p_ftype register_reggroup_p)
3031{
3032 gdbarch->register_reggroup_p = register_reggroup_p;
3033}
3034
143985b7
AF
3035int
3036gdbarch_fetch_pointer_argument_p (struct gdbarch *gdbarch)
3037{
3038 gdb_assert (gdbarch != NULL);
956ac328 3039 return gdbarch->fetch_pointer_argument != NULL;
143985b7
AF
3040}
3041
3042CORE_ADDR
3043gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, struct frame_info *frame, int argi, struct type *type)
3044{
3045 gdb_assert (gdbarch != NULL);
956ac328 3046 gdb_assert (gdbarch->fetch_pointer_argument != NULL);
143985b7
AF
3047 if (gdbarch_debug >= 2)
3048 fprintf_unfiltered (gdb_stdlog, "gdbarch_fetch_pointer_argument called\n");
3049 return gdbarch->fetch_pointer_argument (frame, argi, type);
3050}
3051
3052void
3053set_gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch,
3054 gdbarch_fetch_pointer_argument_ftype fetch_pointer_argument)
3055{
3056 gdbarch->fetch_pointer_argument = fetch_pointer_argument;
3057}
3058
6ce6d90f
MK
3059int
3060gdbarch_regset_from_core_section_p (struct gdbarch *gdbarch)
3061{
3062 gdb_assert (gdbarch != NULL);
3063 return gdbarch->regset_from_core_section != NULL;
3064}
3065
3066const struct regset *
3067gdbarch_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size)
3068{
3069 gdb_assert (gdbarch != NULL);
3070 gdb_assert (gdbarch->regset_from_core_section != NULL);
3071 if (gdbarch_debug >= 2)
3072 fprintf_unfiltered (gdb_stdlog, "gdbarch_regset_from_core_section called\n");
3073 return gdbarch->regset_from_core_section (gdbarch, sect_name, sect_size);
3074}
3075
3076void
3077set_gdbarch_regset_from_core_section (struct gdbarch *gdbarch,
3078 gdbarch_regset_from_core_section_ftype regset_from_core_section)
3079{
3080 gdbarch->regset_from_core_section = regset_from_core_section;
3081}
3082
0d5de010
DJ
3083int
3084gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch)
3085{
3086 gdb_assert (gdbarch != NULL);
3087 /* Skip verify of vtable_function_descriptors, invalid_p == 0 */
3088 if (gdbarch_debug >= 2)
3089 fprintf_unfiltered (gdb_stdlog, "gdbarch_vtable_function_descriptors called\n");
3090 return gdbarch->vtable_function_descriptors;
3091}
3092
3093void
3094set_gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch,
3095 int vtable_function_descriptors)
3096{
3097 gdbarch->vtable_function_descriptors = vtable_function_descriptors;
3098}
3099
3100int
3101gdbarch_vbit_in_delta (struct gdbarch *gdbarch)
3102{
3103 gdb_assert (gdbarch != NULL);
3104 /* Skip verify of vbit_in_delta, invalid_p == 0 */
3105 if (gdbarch_debug >= 2)
3106 fprintf_unfiltered (gdb_stdlog, "gdbarch_vbit_in_delta called\n");
3107 return gdbarch->vbit_in_delta;
3108}
3109
3110void
3111set_gdbarch_vbit_in_delta (struct gdbarch *gdbarch,
3112 int vbit_in_delta)
3113{
3114 gdbarch->vbit_in_delta = vbit_in_delta;
3115}
3116
6d350bb5
UW
3117int
3118gdbarch_skip_permanent_breakpoint_p (struct gdbarch *gdbarch)
3119{
3120 gdb_assert (gdbarch != NULL);
3121 return gdbarch->skip_permanent_breakpoint != NULL;
3122}
3123
3124void
3125gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, struct regcache *regcache)
3126{
3127 gdb_assert (gdbarch != NULL);
3128 gdb_assert (gdbarch->skip_permanent_breakpoint != NULL);
3129 if (gdbarch_debug >= 2)
3130 fprintf_unfiltered (gdb_stdlog, "gdbarch_skip_permanent_breakpoint called\n");
3131 gdbarch->skip_permanent_breakpoint (regcache);
3132}
3133
3134void
3135set_gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch,
3136 gdbarch_skip_permanent_breakpoint_ftype skip_permanent_breakpoint)
3137{
3138 gdbarch->skip_permanent_breakpoint = skip_permanent_breakpoint;
3139}
3140
1c772458
UW
3141int
3142gdbarch_overlay_update_p (struct gdbarch *gdbarch)
3143{
3144 gdb_assert (gdbarch != NULL);
3145 return gdbarch->overlay_update != NULL;
3146}
3147
3148void
3149gdbarch_overlay_update (struct gdbarch *gdbarch, struct obj_section *osect)
3150{
3151 gdb_assert (gdbarch != NULL);
3152 gdb_assert (gdbarch->overlay_update != NULL);
3153 if (gdbarch_debug >= 2)
3154 fprintf_unfiltered (gdb_stdlog, "gdbarch_overlay_update called\n");
3155 gdbarch->overlay_update (osect);
3156}
3157
3158void
3159set_gdbarch_overlay_update (struct gdbarch *gdbarch,
3160 gdbarch_overlay_update_ftype overlay_update)
3161{
3162 gdbarch->overlay_update = overlay_update;
3163}
3164
0f71a2f6 3165
be5a57e1 3166/* Keep a registry of per-architecture data-pointers required by GDB
0f71a2f6
JM
3167 modules. */
3168
3169struct gdbarch_data
3170{
95160752 3171 unsigned index;
76860b5f 3172 int init_p;
030f20e1
AC
3173 gdbarch_data_pre_init_ftype *pre_init;
3174 gdbarch_data_post_init_ftype *post_init;
0f71a2f6
JM
3175};
3176
3177struct gdbarch_data_registration
adf40b2e 3178{
adf40b2e
JM
3179 struct gdbarch_data *data;
3180 struct gdbarch_data_registration *next;
3181};
0f71a2f6 3182
be5a57e1 3183struct gdbarch_data_registry
adf40b2e 3184{
95160752 3185 unsigned nr;
adf40b2e
JM
3186 struct gdbarch_data_registration *registrations;
3187};
0f71a2f6 3188
be5a57e1 3189struct gdbarch_data_registry gdbarch_data_registry =
0f71a2f6
JM
3190{
3191 0, NULL,
3192};
3193
030f20e1
AC
3194static struct gdbarch_data *
3195gdbarch_data_register (gdbarch_data_pre_init_ftype *pre_init,
3196 gdbarch_data_post_init_ftype *post_init)
0f71a2f6
JM
3197{
3198 struct gdbarch_data_registration **curr;
76860b5f 3199 /* Append the new registraration. */
be5a57e1 3200 for (curr = &gdbarch_data_registry.registrations;
0f71a2f6
JM
3201 (*curr) != NULL;
3202 curr = &(*curr)->next);
3203 (*curr) = XMALLOC (struct gdbarch_data_registration);
3204 (*curr)->next = NULL;
0f71a2f6 3205 (*curr)->data = XMALLOC (struct gdbarch_data);
be5a57e1 3206 (*curr)->data->index = gdbarch_data_registry.nr++;
030f20e1
AC
3207 (*curr)->data->pre_init = pre_init;
3208 (*curr)->data->post_init = post_init;
76860b5f 3209 (*curr)->data->init_p = 1;
0f71a2f6
JM
3210 return (*curr)->data;
3211}
3212
030f20e1
AC
3213struct gdbarch_data *
3214gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *pre_init)
3215{
3216 return gdbarch_data_register (pre_init, NULL);
3217}
3218
3219struct gdbarch_data *
3220gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *post_init)
3221{
3222 return gdbarch_data_register (NULL, post_init);
3223}
0f71a2f6 3224
b3cc3077 3225/* Create/delete the gdbarch data vector. */
95160752
AC
3226
3227static void
b3cc3077 3228alloc_gdbarch_data (struct gdbarch *gdbarch)
95160752 3229{
b3cc3077
JB
3230 gdb_assert (gdbarch->data == NULL);
3231 gdbarch->nr_data = gdbarch_data_registry.nr;
aebd7893 3232 gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
0f71a2f6
JM
3233}
3234
76860b5f 3235/* Initialize the current value of the specified per-architecture
b3cc3077
JB
3236 data-pointer. */
3237
95160752 3238void
030f20e1
AC
3239deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
3240 struct gdbarch_data *data,
3241 void *pointer)
95160752
AC
3242{
3243 gdb_assert (data->index < gdbarch->nr_data);
aebd7893 3244 gdb_assert (gdbarch->data[data->index] == NULL);
030f20e1 3245 gdb_assert (data->pre_init == NULL);
95160752
AC
3246 gdbarch->data[data->index] = pointer;
3247}
3248
0f71a2f6
JM
3249/* Return the current value of the specified per-architecture
3250 data-pointer. */
3251
3252void *
451fbdda 3253gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
0f71a2f6 3254{
451fbdda 3255 gdb_assert (data->index < gdbarch->nr_data);
030f20e1 3256 if (gdbarch->data[data->index] == NULL)
76860b5f 3257 {
030f20e1
AC
3258 /* The data-pointer isn't initialized, call init() to get a
3259 value. */
3260 if (data->pre_init != NULL)
3261 /* Mid architecture creation: pass just the obstack, and not
3262 the entire architecture, as that way it isn't possible for
3263 pre-init code to refer to undefined architecture
3264 fields. */
3265 gdbarch->data[data->index] = data->pre_init (gdbarch->obstack);
3266 else if (gdbarch->initialized_p
3267 && data->post_init != NULL)
3268 /* Post architecture creation: pass the entire architecture
3269 (as all fields are valid), but be careful to also detect
3270 recursive references. */
3271 {
3272 gdb_assert (data->init_p);
3273 data->init_p = 0;
3274 gdbarch->data[data->index] = data->post_init (gdbarch);
3275 data->init_p = 1;
3276 }
3277 else
3278 /* The architecture initialization hasn't completed - punt -
3279 hope that the caller knows what they are doing. Once
3280 deprecated_set_gdbarch_data has been initialized, this can be
3281 changed to an internal error. */
3282 return NULL;
76860b5f
AC
3283 gdb_assert (gdbarch->data[data->index] != NULL);
3284 }
451fbdda 3285 return gdbarch->data[data->index];
0f71a2f6
JM
3286}
3287
3288
3289
be5a57e1 3290/* Keep a registry of swapped data required by GDB modules. */
0f71a2f6
JM
3291
3292struct gdbarch_swap
3293{
3294 void *swap;
3295 struct gdbarch_swap_registration *source;
3296 struct gdbarch_swap *next;
3297};
3298
3299struct gdbarch_swap_registration
adf40b2e
JM
3300{
3301 void *data;
3302 unsigned long sizeof_data;
3303 gdbarch_swap_ftype *init;
3304 struct gdbarch_swap_registration *next;
3305};
0f71a2f6 3306
be5a57e1 3307struct gdbarch_swap_registry
adf40b2e
JM
3308{
3309 int nr;
3310 struct gdbarch_swap_registration *registrations;
3311};
0f71a2f6 3312
be5a57e1 3313struct gdbarch_swap_registry gdbarch_swap_registry =
0f71a2f6
JM
3314{
3315 0, NULL,
3316};
3317
3318void
046a4708
AC
3319deprecated_register_gdbarch_swap (void *data,
3320 unsigned long sizeof_data,
3321 gdbarch_swap_ftype *init)
0f71a2f6
JM
3322{
3323 struct gdbarch_swap_registration **rego;
be5a57e1 3324 for (rego = &gdbarch_swap_registry.registrations;
0f71a2f6
JM
3325 (*rego) != NULL;
3326 rego = &(*rego)->next);
3327 (*rego) = XMALLOC (struct gdbarch_swap_registration);
3328 (*rego)->next = NULL;
3329 (*rego)->init = init;
3330 (*rego)->data = data;
3331 (*rego)->sizeof_data = sizeof_data;
3332}
3333
40af4b0c 3334static void
7de2341d 3335current_gdbarch_swap_init_hack (void)
0f71a2f6
JM
3336{
3337 struct gdbarch_swap_registration *rego;
7de2341d 3338 struct gdbarch_swap **curr = &current_gdbarch->swap;
be5a57e1 3339 for (rego = gdbarch_swap_registry.registrations;
0f71a2f6
JM
3340 rego != NULL;
3341 rego = rego->next)
3342 {
3343 if (rego->data != NULL)
3344 {
7de2341d
AC
3345 (*curr) = GDBARCH_OBSTACK_ZALLOC (current_gdbarch,
3346 struct gdbarch_swap);
0f71a2f6 3347 (*curr)->source = rego;
7de2341d
AC
3348 (*curr)->swap = gdbarch_obstack_zalloc (current_gdbarch,
3349 rego->sizeof_data);
0f71a2f6 3350 (*curr)->next = NULL;
0f71a2f6
JM
3351 curr = &(*curr)->next;
3352 }
3353 if (rego->init != NULL)
3354 rego->init ();
3355 }
3356}
3357
7de2341d
AC
3358static struct gdbarch *
3359current_gdbarch_swap_out_hack (void)
0f71a2f6 3360{
7de2341d 3361 struct gdbarch *old_gdbarch = current_gdbarch;
0f71a2f6 3362 struct gdbarch_swap *curr;
7de2341d
AC
3363
3364 gdb_assert (old_gdbarch != NULL);
3365 for (curr = old_gdbarch->swap;
0f71a2f6
JM
3366 curr != NULL;
3367 curr = curr->next)
7de2341d
AC
3368 {
3369 memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
3370 memset (curr->source->data, 0, curr->source->sizeof_data);
3371 }
3372 current_gdbarch = NULL;
3373 return old_gdbarch;
0f71a2f6
JM
3374}
3375
0f71a2f6 3376static void
7de2341d 3377current_gdbarch_swap_in_hack (struct gdbarch *new_gdbarch)
0f71a2f6
JM
3378{
3379 struct gdbarch_swap *curr;
7de2341d
AC
3380
3381 gdb_assert (current_gdbarch == NULL);
3382 for (curr = new_gdbarch->swap;
0f71a2f6
JM
3383 curr != NULL;
3384 curr = curr->next)
3385 memcpy (curr->source->data, curr->swap, curr->source->sizeof_data);
7de2341d 3386 current_gdbarch = new_gdbarch;
0f71a2f6
JM
3387}
3388
3389
be5a57e1 3390/* Keep a registry of the architectures known by GDB. */
0f71a2f6 3391
4b9b3959 3392struct gdbarch_registration
0f71a2f6
JM
3393{
3394 enum bfd_architecture bfd_architecture;
3395 gdbarch_init_ftype *init;
4b9b3959 3396 gdbarch_dump_tdep_ftype *dump_tdep;
0f71a2f6 3397 struct gdbarch_list *arches;
4b9b3959 3398 struct gdbarch_registration *next;
0f71a2f6
JM
3399};
3400
be5a57e1 3401static struct gdbarch_registration *gdbarch_registry = NULL;
0f71a2f6 3402
b4a20239
AC
3403static void
3404append_name (const char ***buf, int *nr, const char *name)
3405{
3406 *buf = xrealloc (*buf, sizeof (char**) * (*nr + 1));
3407 (*buf)[*nr] = name;
3408 *nr += 1;
3409}
3410
3411const char **
3412gdbarch_printable_names (void)
3413{
7996bcec
AC
3414 /* Accumulate a list of names based on the registed list of
3415 architectures. */
3416 enum bfd_architecture a;
3417 int nr_arches = 0;
3418 const char **arches = NULL;
3419 struct gdbarch_registration *rego;
3420 for (rego = gdbarch_registry;
3421 rego != NULL;
3422 rego = rego->next)
b4a20239 3423 {
7996bcec
AC
3424 const struct bfd_arch_info *ap;
3425 ap = bfd_lookup_arch (rego->bfd_architecture, 0);
3426 if (ap == NULL)
3427 internal_error (__FILE__, __LINE__,
e2e0b3e5 3428 _("gdbarch_architecture_names: multi-arch unknown"));
7996bcec
AC
3429 do
3430 {
3431 append_name (&arches, &nr_arches, ap->printable_name);
3432 ap = ap->next;
3433 }
3434 while (ap != NULL);
b4a20239 3435 }
7996bcec
AC
3436 append_name (&arches, &nr_arches, NULL);
3437 return arches;
b4a20239
AC
3438}
3439
3440
0f71a2f6 3441void
4b9b3959
AC
3442gdbarch_register (enum bfd_architecture bfd_architecture,
3443 gdbarch_init_ftype *init,
3444 gdbarch_dump_tdep_ftype *dump_tdep)
0f71a2f6 3445{
4b9b3959 3446 struct gdbarch_registration **curr;
0f71a2f6 3447 const struct bfd_arch_info *bfd_arch_info;
ec3d358c 3448 /* Check that BFD recognizes this architecture */
0f71a2f6
JM
3449 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
3450 if (bfd_arch_info == NULL)
3451 {
8e65ff28 3452 internal_error (__FILE__, __LINE__,
85c07804 3453 _("gdbarch: Attempt to register unknown architecture (%d)"),
8e65ff28 3454 bfd_architecture);
0f71a2f6
JM
3455 }
3456 /* Check that we haven't seen this architecture before */
be5a57e1 3457 for (curr = &gdbarch_registry;
0f71a2f6
JM
3458 (*curr) != NULL;
3459 curr = &(*curr)->next)
3460 {
3461 if (bfd_architecture == (*curr)->bfd_architecture)
8e65ff28 3462 internal_error (__FILE__, __LINE__,
85c07804 3463 _("gdbarch: Duplicate registraration of architecture (%s)"),
8e65ff28 3464 bfd_arch_info->printable_name);
0f71a2f6
JM
3465 }
3466 /* log it */
3467 if (gdbarch_debug)
3468 fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
3469 bfd_arch_info->printable_name,
3470 (long) init);
3471 /* Append it */
4b9b3959 3472 (*curr) = XMALLOC (struct gdbarch_registration);
0f71a2f6
JM
3473 (*curr)->bfd_architecture = bfd_architecture;
3474 (*curr)->init = init;
4b9b3959 3475 (*curr)->dump_tdep = dump_tdep;
0f71a2f6
JM
3476 (*curr)->arches = NULL;
3477 (*curr)->next = NULL;
4b9b3959
AC
3478}
3479
3480void
3481register_gdbarch_init (enum bfd_architecture bfd_architecture,
3482 gdbarch_init_ftype *init)
3483{
3484 gdbarch_register (bfd_architecture, init, NULL);
0f71a2f6 3485}
0f71a2f6
JM
3486
3487
424163ea 3488/* Look for an architecture using gdbarch_info. */
0f71a2f6
JM
3489
3490struct gdbarch_list *
104c1213
JM
3491gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
3492 const struct gdbarch_info *info)
0f71a2f6
JM
3493{
3494 for (; arches != NULL; arches = arches->next)
3495 {
3496 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
3497 continue;
3498 if (info->byte_order != arches->gdbarch->byte_order)
3499 continue;
4be87837
DJ
3500 if (info->osabi != arches->gdbarch->osabi)
3501 continue;
424163ea
DJ
3502 if (info->target_desc != arches->gdbarch->target_desc)
3503 continue;
0f71a2f6
JM
3504 return arches;
3505 }
3506 return NULL;
3507}
3508
3509
ebdba546
AC
3510/* Find an architecture that matches the specified INFO. Create a new
3511 architecture if needed. Return that new architecture. Assumes
3512 that there is no current architecture. */
0f71a2f6 3513
ebdba546 3514static struct gdbarch *
7a107747 3515find_arch_by_info (struct gdbarch_info info)
0f71a2f6
JM
3516{
3517 struct gdbarch *new_gdbarch;
4b9b3959 3518 struct gdbarch_registration *rego;
0f71a2f6 3519
ebdba546
AC
3520 /* The existing architecture has been swapped out - all this code
3521 works from a clean slate. */
3522 gdb_assert (current_gdbarch == NULL);
3523
b732d07d 3524 /* Fill in missing parts of the INFO struct using a number of
7a107747
DJ
3525 sources: "set ..."; INFOabfd supplied; and the global
3526 defaults. */
3527 gdbarch_info_fill (&info);
4be87837 3528
b732d07d
AC
3529 /* Must have found some sort of architecture. */
3530 gdb_assert (info.bfd_arch_info != NULL);
0f71a2f6
JM
3531
3532 if (gdbarch_debug)
3533 {
0f71a2f6 3534 fprintf_unfiltered (gdb_stdlog,
ebdba546 3535 "find_arch_by_info: info.bfd_arch_info %s\n",
0f71a2f6
JM
3536 (info.bfd_arch_info != NULL
3537 ? info.bfd_arch_info->printable_name
3538 : "(null)"));
3539 fprintf_unfiltered (gdb_stdlog,
ebdba546 3540 "find_arch_by_info: info.byte_order %d (%s)\n",
0f71a2f6 3541 info.byte_order,
d7449b42 3542 (info.byte_order == BFD_ENDIAN_BIG ? "big"
778eb05e 3543 : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
0f71a2f6 3544 : "default"));
4be87837 3545 fprintf_unfiltered (gdb_stdlog,
ebdba546 3546 "find_arch_by_info: info.osabi %d (%s)\n",
4be87837 3547 info.osabi, gdbarch_osabi_name (info.osabi));
0f71a2f6 3548 fprintf_unfiltered (gdb_stdlog,
ebdba546 3549 "find_arch_by_info: info.abfd 0x%lx\n",
0f71a2f6
JM
3550 (long) info.abfd);
3551 fprintf_unfiltered (gdb_stdlog,
ebdba546 3552 "find_arch_by_info: info.tdep_info 0x%lx\n",
0f71a2f6
JM
3553 (long) info.tdep_info);
3554 }
3555
ebdba546 3556 /* Find the tdep code that knows about this architecture. */
b732d07d
AC
3557 for (rego = gdbarch_registry;
3558 rego != NULL;
3559 rego = rego->next)
3560 if (rego->bfd_architecture == info.bfd_arch_info->arch)
3561 break;
3562 if (rego == NULL)
3563 {
3564 if (gdbarch_debug)
ebdba546
AC
3565 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
3566 "No matching architecture\n");
b732d07d
AC
3567 return 0;
3568 }
3569
ebdba546 3570 /* Ask the tdep code for an architecture that matches "info". */
0f71a2f6
JM
3571 new_gdbarch = rego->init (info, rego->arches);
3572
ebdba546
AC
3573 /* Did the tdep code like it? No. Reject the change and revert to
3574 the old architecture. */
0f71a2f6
JM
3575 if (new_gdbarch == NULL)
3576 {
3577 if (gdbarch_debug)
ebdba546
AC
3578 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
3579 "Target rejected architecture\n");
3580 return NULL;
0f71a2f6
JM
3581 }
3582
ebdba546
AC
3583 /* Is this a pre-existing architecture (as determined by already
3584 being initialized)? Move it to the front of the architecture
3585 list (keeping the list sorted Most Recently Used). */
3586 if (new_gdbarch->initialized_p)
0f71a2f6 3587 {
ebdba546
AC
3588 struct gdbarch_list **list;
3589 struct gdbarch_list *this;
0f71a2f6 3590 if (gdbarch_debug)
ebdba546
AC
3591 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
3592 "Previous architecture 0x%08lx (%s) selected\n",
0f71a2f6
JM
3593 (long) new_gdbarch,
3594 new_gdbarch->bfd_arch_info->printable_name);
ebdba546
AC
3595 /* Find the existing arch in the list. */
3596 for (list = &rego->arches;
3597 (*list) != NULL && (*list)->gdbarch != new_gdbarch;
3598 list = &(*list)->next);
3599 /* It had better be in the list of architectures. */
3600 gdb_assert ((*list) != NULL && (*list)->gdbarch == new_gdbarch);
3601 /* Unlink THIS. */
3602 this = (*list);
3603 (*list) = this->next;
3604 /* Insert THIS at the front. */
3605 this->next = rego->arches;
3606 rego->arches = this;
3607 /* Return it. */
3608 return new_gdbarch;
0f71a2f6
JM
3609 }
3610
ebdba546
AC
3611 /* It's a new architecture. */
3612 if (gdbarch_debug)
3613 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
3614 "New architecture 0x%08lx (%s) selected\n",
3615 (long) new_gdbarch,
3616 new_gdbarch->bfd_arch_info->printable_name);
3617
3618 /* Insert the new architecture into the front of the architecture
3619 list (keep the list sorted Most Recently Used). */
0f79675b
AC
3620 {
3621 struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
3622 this->next = rego->arches;
3623 this->gdbarch = new_gdbarch;
3624 rego->arches = this;
3625 }
0f71a2f6 3626
4b9b3959
AC
3627 /* Check that the newly installed architecture is valid. Plug in
3628 any post init values. */
3629 new_gdbarch->dump_tdep = rego->dump_tdep;
0f71a2f6 3630 verify_gdbarch (new_gdbarch);
ebdba546 3631 new_gdbarch->initialized_p = 1;
0f71a2f6 3632
ebdba546
AC
3633 /* Initialize any per-architecture swap areas. This phase requires
3634 a valid global CURRENT_GDBARCH. Set it momentarially, and then
3635 swap the entire architecture out. */
3636 current_gdbarch = new_gdbarch;
7de2341d 3637 current_gdbarch_swap_init_hack ();
ebdba546 3638 current_gdbarch_swap_out_hack ();
67c2c32c 3639
4b9b3959 3640 if (gdbarch_debug)
ebdba546 3641 gdbarch_dump (new_gdbarch, gdb_stdlog);
4b9b3959 3642
ebdba546 3643 return new_gdbarch;
0f71a2f6 3644}
c906108c 3645
ebdba546
AC
3646struct gdbarch *
3647gdbarch_find_by_info (struct gdbarch_info info)
3648{
3649 /* Save the previously selected architecture, setting the global to
3650 NULL. This stops things like gdbarch->init() trying to use the
3651 previous architecture's configuration. The previous architecture
3652 may not even be of the same architecture family. The most recent
3653 architecture of the same family is found at the head of the
3654 rego->arches list. */
3655 struct gdbarch *old_gdbarch = current_gdbarch_swap_out_hack ();
3656
3657 /* Find the specified architecture. */
7a107747 3658 struct gdbarch *new_gdbarch = find_arch_by_info (info);
ebdba546
AC
3659
3660 /* Restore the existing architecture. */
3661 gdb_assert (current_gdbarch == NULL);
3662 current_gdbarch_swap_in_hack (old_gdbarch);
3663
3664 return new_gdbarch;
3665}
3666
3667/* Make the specified architecture current, swapping the existing one
3668 out. */
3669
3670void
3671deprecated_current_gdbarch_select_hack (struct gdbarch *new_gdbarch)
3672{
3673 gdb_assert (new_gdbarch != NULL);
3674 gdb_assert (current_gdbarch != NULL);
3675 gdb_assert (new_gdbarch->initialized_p);
3676 current_gdbarch_swap_out_hack ();
3677 current_gdbarch_swap_in_hack (new_gdbarch);
3678 architecture_changed_event ();
35f196d9 3679 reinit_frame_cache ();
ebdba546 3680}
c906108c 3681
104c1213 3682extern void _initialize_gdbarch (void);
b4a20239 3683
c906108c 3684void
7c7651b2 3685_initialize_gdbarch (void)
c906108c 3686{
5d161b24
DB
3687 struct cmd_list_element *c;
3688
85c07804
AC
3689 add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\
3690Set architecture debugging."), _("\
3691Show architecture debugging."), _("\
3692When non-zero, architecture debugging is enabled."),
3693 NULL,
920d2a44 3694 show_gdbarch_debug,
85c07804 3695 &setdebuglist, &showdebuglist);
c906108c 3696}
This page took 0.845539 seconds and 4 git commands to generate.