]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/arch-utils.c
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / arch-utils.c
CommitLineData
c0e8c252 1/* Dynamic architecture support for GDB, the GNU debugger.
f4f9705a 2
213516ef 3 Copyright (C) 1998-2023 Free Software Foundation, Inc.
c0e8c252
AC
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c0e8c252
AC
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c0e8c252
AC
19
20#include "defs.h"
21
fb6ecb0f 22#include "arch-utils.h"
c0e8c252 23#include "gdbcmd.h"
4de283e4 24#include "inferior.h" /* enum CALL_DUMMY_LOCATION et al. */
45741a9c 25#include "infrun.h"
fbec36e2 26#include "regcache.h"
4182591f 27#include "sim-regno.h"
4de283e4
TT
28#include "gdbcore.h"
29#include "osabi.h"
d55e5aa6 30#include "target-descriptions.h"
4de283e4
TT
31#include "objfiles.h"
32#include "language.h"
33#include "symtab.h"
74fcd19c
TT
34#include "dummy-frame.h"
35#include "frame-unwind.h"
36#include "reggroups.h"
37#include "auxv.h"
38#include "observable.h"
9e468e95 39#include "solib-target.h"
4de283e4 40
268a13a5 41#include "gdbsupport/version.h"
4de283e4
TT
42
43#include "floatformat.h"
44
45#include "dis-asm.h"
1fd35568 46
07fbbd01 47bool
40a53766 48default_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
99e40580
UW
49{
50 return !gdbarch_software_single_step_p (gdbarch);
51}
237fc4c9
PA
52
53CORE_ADDR
54displaced_step_at_entry_point (struct gdbarch *gdbarch)
55{
56 CORE_ADDR addr;
57 int bp_len;
58
59 addr = entry_point_address ();
60
237fc4c9
PA
61 /* Inferior calls also use the entry point as a breakpoint location.
62 We don't want displaced stepping to interfere with those
63 breakpoints, so leave space. */
64 gdbarch_breakpoint_from_pc (gdbarch, &addr, &bp_len);
5931a2fa 65 addr += bp_len * 2;
237fc4c9
PA
66
67 return addr;
68}
69
4182591f 70int
e7faf938 71legacy_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4182591f
AC
72{
73 /* Only makes sense to supply raw registers. */
e7faf938 74 gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
4182591f
AC
75 /* NOTE: cagney/2002-05-13: The old code did it this way and it is
76 suspected that some GDB/SIM combinations may rely on this
85102364 77 behaviour. The default should be one2one_register_sim_regno
4182591f 78 (below). */
637b2f86 79 if (gdbarch_register_name (gdbarch, regnum)[0] != '\0')
4182591f
AC
80 return regnum;
81 else
82 return LEGACY_SIM_REGNO_IGNORE;
83}
84
d88cb738
LM
85/* See arch-utils.h */
86
87CORE_ADDR
88default_remove_non_address_bits (struct gdbarch *gdbarch, CORE_ADDR pointer)
89{
90 /* By default, just return the pointer value. */
91 return pointer;
92}
c193949e
LM
93
94/* See arch-utils.h */
95
96std::string
97default_memtag_to_string (struct gdbarch *gdbarch, struct value *tag)
98{
99 error (_("This architecture has no method to convert a memory tag to"
100 " a string."));
101}
102
103/* See arch-utils.h */
104
105bool
106default_tagged_address_p (struct gdbarch *gdbarch, struct value *address)
107{
108 /* By default, assume the address is untagged. */
109 return false;
110}
111
112/* See arch-utils.h */
113
114bool
115default_memtag_matches_p (struct gdbarch *gdbarch, struct value *address)
116{
117 /* By default, assume the tags match. */
118 return true;
119}
120
121/* See arch-utils.h */
122
123bool
124default_set_memtags (struct gdbarch *gdbarch, struct value *address,
125 size_t length, const gdb::byte_vector &tags,
126 memtag_type tag_type)
127{
128 /* By default, return true (successful); */
129 return true;
130}
131
132/* See arch-utils.h */
133
134struct value *
135default_get_memtag (struct gdbarch *gdbarch, struct value *address,
136 memtag_type tag_type)
137{
138 /* By default, return no tag. */
139 return nullptr;
140}
141
bdcd319a 142CORE_ADDR
bd2b40ac 143generic_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
bdcd319a
CV
144{
145 return 0;
146}
147
dea0c52f 148CORE_ADDR
4c8c40e6 149generic_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
dea0c52f
MK
150{
151 return 0;
152}
153
d50355b6 154int
e17a4113 155generic_in_solib_return_trampoline (struct gdbarch *gdbarch,
2c02bd72 156 CORE_ADDR pc, const char *name)
d50355b6
MS
157{
158 return 0;
159}
160
c12260ac 161int
c9cf6e20 162generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
c12260ac
CV
163{
164 return 0;
165}
166
7eb89530
YQ
167int
168default_code_of_frame_writable (struct gdbarch *gdbarch,
bd2b40ac 169 frame_info_ptr frame)
7eb89530
YQ
170{
171 return 1;
172}
173
4d1e7dd1 174/* Helper functions for gdbarch_inner_than */
3339cf8b
AC
175
176int
fba45db2 177core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs)
3339cf8b
AC
178{
179 return (lhs < rhs);
180}
181
182int
fba45db2 183core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs)
3339cf8b
AC
184{
185 return (lhs > rhs);
186}
187
0e2de366 188/* Misc helper functions for targets. */
193e3b1a 189
f517ea4e 190CORE_ADDR
24568a2c 191core_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr)
f517ea4e
PS
192{
193 return addr;
194}
195
e2d0e7eb
AC
196CORE_ADDR
197convert_from_func_ptr_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr,
198 struct target_ops *targ)
199{
200 return addr;
201}
202
88c72b7d 203int
d3f73121 204no_op_reg_to_regnum (struct gdbarch *gdbarch, int reg)
88c72b7d
AC
205{
206 return reg;
207}
208
a2cf933a 209void
3e29f34a 210default_coff_make_msymbol_special (int val, struct minimal_symbol *msym)
a2cf933a
EZ
211{
212 return;
213}
214
3e29f34a
MR
215/* See arch-utils.h. */
216
a2cf933a 217void
3e29f34a 218default_make_symbol_special (struct symbol *sym, struct objfile *objfile)
a2cf933a
EZ
219{
220 return;
221}
222
3e29f34a
MR
223/* See arch-utils.h. */
224
225CORE_ADDR
226default_adjust_dwarf2_addr (CORE_ADDR pc)
227{
228 return pc;
229}
230
231/* See arch-utils.h. */
232
233CORE_ADDR
234default_adjust_dwarf2_line (CORE_ADDR addr, int rel)
235{
236 return addr;
237}
238
b41c5a85
JW
239/* See arch-utils.h. */
240
241bool
242default_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
243 struct dwarf2_frame_state *fs)
244{
245 return false;
246}
247
01fb7433 248int
64a3914f 249cannot_register_not (struct gdbarch *gdbarch, int regnum)
01fb7433
AC
250{
251 return 0;
252}
39d4ef09
AC
253
254/* Legacy version of target_virtual_frame_pointer(). Assumes that
0e2de366
MS
255 there is an gdbarch_deprecated_fp_regnum and that it is the same,
256 cooked or raw. */
39d4ef09
AC
257
258void
a54fba4c
MD
259legacy_virtual_frame_pointer (struct gdbarch *gdbarch,
260 CORE_ADDR pc,
39d4ef09
AC
261 int *frame_regnum,
262 LONGEST *frame_offset)
263{
20bcf01c
AC
264 /* FIXME: cagney/2002-09-13: This code is used when identifying the
265 frame pointer of the current PC. It is assuming that a single
266 register and an offset can determine this. I think it should
267 instead generate a byte code expression as that would work better
268 with things like Dwarf2's CFI. */
a54fba4c
MD
269 if (gdbarch_deprecated_fp_regnum (gdbarch) >= 0
270 && gdbarch_deprecated_fp_regnum (gdbarch)
271 < gdbarch_num_regs (gdbarch))
272 *frame_regnum = gdbarch_deprecated_fp_regnum (gdbarch);
273 else if (gdbarch_sp_regnum (gdbarch) >= 0
274 && gdbarch_sp_regnum (gdbarch)
dda83cd7 275 < gdbarch_num_regs (gdbarch))
a54fba4c 276 *frame_regnum = gdbarch_sp_regnum (gdbarch);
20bcf01c
AC
277 else
278 /* Should this be an internal error? I guess so, it is reflecting
279 an architectural limitation in the current design. */
f34652de 280 internal_error (_("No virtual frame pointer available"));
39d4ef09
AC
281 *frame_offset = 0;
282}
46cd78fb 283
9b790ce7
UW
284/* Return a floating-point format for a floating-point variable of
285 length LEN in bits. If non-NULL, NAME is the name of its type.
286 If no suitable type is found, return NULL. */
287
288const struct floatformat **
289default_floatformat_for_type (struct gdbarch *gdbarch,
290 const char *name, int len)
291{
292 const struct floatformat **format = NULL;
293
1b6b755e
LM
294 /* Check if this is a bfloat16 type. It has the same size as the
295 IEEE half float type, so we use the base type name to tell them
296 apart. */
297 if (name != nullptr && strcmp (name, "__bf16") == 0
298 && len == gdbarch_bfloat16_bit (gdbarch))
299 format = gdbarch_bfloat16_format (gdbarch);
300 else if (len == gdbarch_half_bit (gdbarch))
9b790ce7
UW
301 format = gdbarch_half_format (gdbarch);
302 else if (len == gdbarch_float_bit (gdbarch))
303 format = gdbarch_float_format (gdbarch);
304 else if (len == gdbarch_double_bit (gdbarch))
305 format = gdbarch_double_format (gdbarch);
306 else if (len == gdbarch_long_double_bit (gdbarch))
307 format = gdbarch_long_double_format (gdbarch);
308 /* On i386 the 'long double' type takes 96 bits,
309 while the real number of used bits is only 80,
310 both in processor and in memory.
311 The code below accepts the real bit size. */
312 else if (gdbarch_long_double_format (gdbarch) != NULL
313 && len == gdbarch_long_double_format (gdbarch)[0]->totalsize)
314 format = gdbarch_long_double_format (gdbarch);
315
316 return format;
317}
d7bd68ca 318\f
13d01224 319int
76a8ddb9
UW
320generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
321 struct type *type)
13d01224 322{
9730f241 323 return 0;
13d01224
AC
324}
325
192cb3d4
MK
326int
327default_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
328{
192cb3d4
MK
329 return 0;
330}
331
3ca64954
RC
332int
333generic_instruction_nullified (struct gdbarch *gdbarch,
334 struct regcache *regcache)
335{
336 return 0;
337}
338
123dc839
DJ
339int
340default_remote_register_number (struct gdbarch *gdbarch,
341 int regno)
342{
343 return regno;
344}
345
3437254d
PA
346/* See arch-utils.h. */
347
348int
349default_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
350{
351 return 0;
352}
353
01fb7433 354\f
b4a20239
AC
355/* Functions to manipulate the endianness of the target. */
356
f486487f 357static enum bfd_endian target_byte_order_user = BFD_ENDIAN_UNKNOWN;
b4a20239 358
53904c9e
AC
359static const char endian_big[] = "big";
360static const char endian_little[] = "little";
361static const char endian_auto[] = "auto";
40478521 362static const char *const endian_enum[] =
b4a20239
AC
363{
364 endian_big,
365 endian_little,
366 endian_auto,
367 NULL,
368};
dedb7102 369static const char *set_endian_string = endian_auto;
b4a20239 370
b6d373df
DJ
371enum bfd_endian
372selected_byte_order (void)
373{
e17c207e 374 return target_byte_order_user;
b6d373df
DJ
375}
376
b4a20239
AC
377/* Called by ``show endian''. */
378
379static void
7ab04401
AC
380show_endian (struct ui_file *file, int from_tty, struct cmd_list_element *c,
381 const char *value)
b4a20239 382{
7b6b9e83 383 if (target_byte_order_user == BFD_ENDIAN_UNKNOWN)
e17c207e 384 if (gdbarch_byte_order (get_current_arch ()) == BFD_ENDIAN_BIG)
6cb06a8c
TT
385 gdb_printf (file, _("The target endianness is set automatically "
386 "(currently big endian).\n"));
edefbb7c 387 else
6cb06a8c
TT
388 gdb_printf (file, _("The target endianness is set automatically "
389 "(currently little endian).\n"));
b4a20239 390 else
e17c207e 391 if (target_byte_order_user == BFD_ENDIAN_BIG)
6cb06a8c
TT
392 gdb_printf (file,
393 _("The target is set to big endian.\n"));
7ab04401 394 else
6cb06a8c
TT
395 gdb_printf (file,
396 _("The target is set to little endian.\n"));
b4a20239
AC
397}
398
399static void
eb4c3f4a 400set_endian (const char *ignore_args, int from_tty, struct cmd_list_element *c)
b4a20239 401{
7a107747
DJ
402 struct gdbarch_info info;
403
3fd3d7d2 404 if (set_endian_string == endian_auto)
b4a20239 405 {
7a107747
DJ
406 target_byte_order_user = BFD_ENDIAN_UNKNOWN;
407 if (! gdbarch_update_p (info))
f34652de 408 internal_error (_("set_endian: architecture update failed"));
b4a20239
AC
409 }
410 else if (set_endian_string == endian_little)
411 {
d90cf509
AC
412 info.byte_order = BFD_ENDIAN_LITTLE;
413 if (! gdbarch_update_p (info))
6cb06a8c
TT
414 gdb_printf (gdb_stderr,
415 _("Little endian target not supported by GDB\n"));
7a107747
DJ
416 else
417 target_byte_order_user = BFD_ENDIAN_LITTLE;
b4a20239
AC
418 }
419 else if (set_endian_string == endian_big)
420 {
d90cf509
AC
421 info.byte_order = BFD_ENDIAN_BIG;
422 if (! gdbarch_update_p (info))
6cb06a8c
TT
423 gdb_printf (gdb_stderr,
424 _("Big endian target not supported by GDB\n"));
7a107747
DJ
425 else
426 target_byte_order_user = BFD_ENDIAN_BIG;
b4a20239
AC
427 }
428 else
f34652de 429 internal_error (_("set_endian: bad value"));
7a107747 430
7ab04401 431 show_endian (gdb_stdout, from_tty, NULL, NULL);
b4a20239
AC
432}
433
23181151 434/* Given SELECTED, a currently selected BFD architecture, and
e35359c5
UW
435 TARGET_DESC, the current target description, return what
436 architecture to use.
437
438 SELECTED may be NULL, in which case we return the architecture
439 associated with TARGET_DESC. If SELECTED specifies a variant
85102364 440 of the architecture associated with TARGET_DESC, return the
e35359c5
UW
441 more specific of the two.
442
443 If SELECTED is a different architecture, but it is accepted as
444 compatible by the target, we can use the target architecture.
445
446 If SELECTED is obviously incompatible, warn the user. */
23181151
DJ
447
448static const struct bfd_arch_info *
e35359c5
UW
449choose_architecture_for_target (const struct target_desc *target_desc,
450 const struct bfd_arch_info *selected)
23181151 451{
e35359c5 452 const struct bfd_arch_info *from_target = tdesc_architecture (target_desc);
23181151
DJ
453 const struct bfd_arch_info *compat1, *compat2;
454
455 if (selected == NULL)
456 return from_target;
457
458 if (from_target == NULL)
459 return selected;
460
461 /* struct bfd_arch_info objects are singletons: that is, there's
462 supposed to be exactly one instance for a given machine. So you
463 can tell whether two are equivalent by comparing pointers. */
464 if (from_target == selected)
465 return selected;
466
467 /* BFD's 'A->compatible (A, B)' functions return zero if A and B are
468 incompatible. But if they are compatible, it returns the 'more
469 featureful' of the two arches. That is, if A can run code
470 written for B, but B can't run code written for A, then it'll
471 return A.
472
473 Some targets (e.g. MIPS as of 2006-12-04) don't fully
474 implement this, instead always returning NULL or the first
475 argument. We detect that case by checking both directions. */
476
477 compat1 = selected->compatible (selected, from_target);
478 compat2 = from_target->compatible (from_target, selected);
479
480 if (compat1 == NULL && compat2 == NULL)
481 {
0e2de366
MS
482 /* BFD considers the architectures incompatible. Check our
483 target description whether it accepts SELECTED as compatible
484 anyway. */
e35359c5
UW
485 if (tdesc_compatible_p (target_desc, selected))
486 return from_target;
487
23181151
DJ
488 warning (_("Selected architecture %s is not compatible "
489 "with reported target architecture %s"),
490 selected->printable_name, from_target->printable_name);
491 return selected;
492 }
493
494 if (compat1 == NULL)
495 return compat2;
496 if (compat2 == NULL)
497 return compat1;
498 if (compat1 == compat2)
499 return compat1;
500
0e2de366
MS
501 /* If the two didn't match, but one of them was a default
502 architecture, assume the more specific one is correct. This
503 handles the case where an executable or target description just
504 says "mips", but the other knows which MIPS variant. */
23181151
DJ
505 if (compat1->the_default)
506 return compat2;
507 if (compat2->the_default)
508 return compat1;
509
510 /* We have no idea which one is better. This is a bug, but not
511 a critical problem; warn the user. */
512 warning (_("Selected architecture %s is ambiguous with "
513 "reported target architecture %s"),
514 selected->printable_name, from_target->printable_name);
515 return selected;
516}
517
0e2de366 518/* Functions to manipulate the architecture of the target. */
b4a20239
AC
519
520enum set_arch { set_arch_auto, set_arch_manual };
521
7a107747 522static const struct bfd_arch_info *target_architecture_user;
b4a20239 523
a8cf2722
AC
524static const char *set_architecture_string;
525
526const char *
527selected_architecture_name (void)
528{
7a107747 529 if (target_architecture_user == NULL)
a8cf2722
AC
530 return NULL;
531 else
532 return set_architecture_string;
533}
b4a20239 534
b4a20239 535/* Called if the user enters ``show architecture'' without an
0e2de366 536 argument. */
b4a20239
AC
537
538static void
7ab04401
AC
539show_architecture (struct ui_file *file, int from_tty,
540 struct cmd_list_element *c, const char *value)
b4a20239 541{
7a107747 542 if (target_architecture_user == NULL)
6cb06a8c
TT
543 gdb_printf (file, _("The target architecture is set to "
544 "\"auto\" (currently \"%s\").\n"),
545 gdbarch_bfd_arch_info (get_current_arch ())->printable_name);
b4a20239 546 else
6cb06a8c
TT
547 gdb_printf (file, _("The target architecture is set to \"%s\".\n"),
548 set_architecture_string);
b4a20239
AC
549}
550
551
552/* Called if the user enters ``set architecture'' with or without an
0e2de366 553 argument. */
b4a20239
AC
554
555static void
eb4c3f4a
TT
556set_architecture (const char *ignore_args,
557 int from_tty, struct cmd_list_element *c)
b4a20239 558{
7a107747
DJ
559 struct gdbarch_info info;
560
b4a20239
AC
561 if (strcmp (set_architecture_string, "auto") == 0)
562 {
7a107747
DJ
563 target_architecture_user = NULL;
564 if (!gdbarch_update_p (info))
f34652de 565 internal_error (_("could not select an architecture automatically"));
b4a20239 566 }
d90cf509 567 else
b4a20239 568 {
b4a20239
AC
569 info.bfd_arch_info = bfd_scan_arch (set_architecture_string);
570 if (info.bfd_arch_info == NULL)
f34652de 571 internal_error (_("set_architecture: bfd_scan_arch failed"));
16f33e29 572 if (gdbarch_update_p (info))
7a107747 573 target_architecture_user = info.bfd_arch_info;
b4a20239 574 else
6cb06a8c
TT
575 gdb_printf (gdb_stderr,
576 _("Architecture `%s' not recognized.\n"),
577 set_architecture_string);
b4a20239 578 }
7ab04401 579 show_architecture (gdb_stdout, from_tty, NULL, NULL);
b4a20239
AC
580}
581
ebdba546 582/* Try to select a global architecture that matches "info". Return
0f9741f2 583 non-zero if the attempt succeeds. */
ebdba546
AC
584int
585gdbarch_update_p (struct gdbarch_info info)
586{
a7f1256d
UW
587 struct gdbarch *new_gdbarch;
588
589 /* Check for the current file. */
590 if (info.abfd == NULL)
7e10abd1 591 info.abfd = current_program_space->exec_bfd ();
a7f1256d
UW
592 if (info.abfd == NULL)
593 info.abfd = core_bfd;
594
595 /* Check for the current target description. */
596 if (info.target_desc == NULL)
597 info.target_desc = target_current_description ();
598
599 new_gdbarch = gdbarch_find_by_info (info);
ebdba546
AC
600
601 /* If there no architecture by that name, reject the request. */
602 if (new_gdbarch == NULL)
603 {
604 if (gdbarch_debug)
6cb06a8c
TT
605 gdb_printf (gdb_stdlog, "gdbarch_update_p: "
606 "Architecture not found\n");
ebdba546
AC
607 return 0;
608 }
609
610 /* If it is the same old architecture, accept the request (but don't
611 swap anything). */
f5656ead 612 if (new_gdbarch == target_gdbarch ())
ebdba546
AC
613 {
614 if (gdbarch_debug)
6cb06a8c
TT
615 gdb_printf (gdb_stdlog, "gdbarch_update_p: "
616 "Architecture %s (%s) unchanged\n",
617 host_address_to_string (new_gdbarch),
618 gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
ebdba546
AC
619 return 1;
620 }
621
622 /* It's a new architecture, swap it in. */
623 if (gdbarch_debug)
6cb06a8c
TT
624 gdb_printf (gdb_stdlog, "gdbarch_update_p: "
625 "New architecture %s (%s) selected\n",
626 host_address_to_string (new_gdbarch),
627 gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
aff68abb 628 set_target_gdbarch (new_gdbarch);
ebdba546
AC
629
630 return 1;
631}
632
2b026650
MK
633/* Return the architecture for ABFD. If no suitable architecture
634 could be find, return NULL. */
635
636struct gdbarch *
637gdbarch_from_bfd (bfd *abfd)
b4a20239 638{
d90cf509 639 struct gdbarch_info info;
05c547f6 640
d90cf509 641 info.abfd = abfd;
b60eb90d 642 return gdbarch_find_by_info (info);
2b026650
MK
643}
644
645/* Set the dynamic target-system-dependent parameters (architecture,
646 byte-order) using information found in the BFD */
647
648void
649set_gdbarch_from_file (bfd *abfd)
650{
a7f1256d 651 struct gdbarch_info info;
2b026650
MK
652 struct gdbarch *gdbarch;
653
a7f1256d
UW
654 info.abfd = abfd;
655 info.target_desc = target_current_description ();
656 gdbarch = gdbarch_find_by_info (info);
657
2b026650 658 if (gdbarch == NULL)
8a3fe4f8 659 error (_("Architecture of file not recognized."));
aff68abb 660 set_target_gdbarch (gdbarch);
b4a20239
AC
661}
662
663/* Initialize the current architecture. Update the ``set
664 architecture'' command so that it specifies a list of valid
665 architectures. */
666
1ba607ad
AC
667#ifdef DEFAULT_BFD_ARCH
668extern const bfd_arch_info_type DEFAULT_BFD_ARCH;
669static const bfd_arch_info_type *default_bfd_arch = &DEFAULT_BFD_ARCH;
670#else
4b9b3959 671static const bfd_arch_info_type *default_bfd_arch;
1ba607ad
AC
672#endif
673
674#ifdef DEFAULT_BFD_VEC
675extern const bfd_target DEFAULT_BFD_VEC;
676static const bfd_target *default_bfd_vec = &DEFAULT_BFD_VEC;
677#else
678static const bfd_target *default_bfd_vec;
679#endif
680
f486487f 681static enum bfd_endian default_byte_order = BFD_ENDIAN_UNKNOWN;
7a107747 682
9b1f59fc
SM
683/* Printable names of architectures. Used as the enum list of the
684 "set arch" command. */
685static std::vector<const char *> arches;
686
b4a20239
AC
687void
688initialize_current_architecture (void)
689{
9b1f59fc 690 arches = gdbarch_printable_names ();
1ba607ad 691
0e2de366 692 /* Find a default architecture. */
7a107747 693 if (default_bfd_arch == NULL)
b4a20239 694 {
1ba607ad 695 /* Choose the architecture by taking the first one
0e2de366 696 alphabetically. */
1ba607ad 697 const char *chosen = arches[0];
9b1f59fc
SM
698
699 for (const char *arch : arches)
b4a20239 700 {
9b1f59fc
SM
701 if (strcmp (arch, chosen) < 0)
702 chosen = arch;
b4a20239 703 }
9b1f59fc 704
b4a20239 705 if (chosen == NULL)
f34652de 706 internal_error (_("initialize_current_architecture: No arch"));
9b1f59fc 707
7a107747
DJ
708 default_bfd_arch = bfd_scan_arch (chosen);
709 if (default_bfd_arch == NULL)
f34652de 710 internal_error (_("initialize_current_architecture: Arch not found"));
1ba607ad
AC
711 }
712
b447dd03 713 gdbarch_info info;
7a107747
DJ
714 info.bfd_arch_info = default_bfd_arch;
715
afe64c1a 716 /* Take several guesses at a byte order. */
7a107747 717 if (default_byte_order == BFD_ENDIAN_UNKNOWN
1ba607ad
AC
718 && default_bfd_vec != NULL)
719 {
0e2de366 720 /* Extract BFD's default vector's byte order. */
1ba607ad
AC
721 switch (default_bfd_vec->byteorder)
722 {
723 case BFD_ENDIAN_BIG:
7a107747 724 default_byte_order = BFD_ENDIAN_BIG;
1ba607ad
AC
725 break;
726 case BFD_ENDIAN_LITTLE:
7a107747 727 default_byte_order = BFD_ENDIAN_LITTLE;
1ba607ad
AC
728 break;
729 default:
730 break;
731 }
732 }
7a107747 733 if (default_byte_order == BFD_ENDIAN_UNKNOWN)
1ba607ad 734 {
0e2de366 735 /* look for ``*el-*'' in the target name. */
1ba607ad
AC
736 const char *chp;
737 chp = strchr (target_name, '-');
738 if (chp != NULL
739 && chp - 2 >= target_name
61012eef 740 && startswith (chp - 2, "el"))
7a107747 741 default_byte_order = BFD_ENDIAN_LITTLE;
1ba607ad 742 }
7a107747 743 if (default_byte_order == BFD_ENDIAN_UNKNOWN)
1ba607ad
AC
744 {
745 /* Wire it to big-endian!!! */
7a107747 746 default_byte_order = BFD_ENDIAN_BIG;
1ba607ad
AC
747 }
748
7a107747 749 info.byte_order = default_byte_order;
9d4fde75 750 info.byte_order_for_code = info.byte_order;
7a107747 751
d90cf509 752 if (! gdbarch_update_p (info))
f34652de 753 internal_error (_("initialize_current_architecture: Selection of "
edefbb7c 754 "initial architecture failed"));
b4a20239 755
1ba607ad 756 /* Create the ``set architecture'' command appending ``auto'' to the
0e2de366 757 list of architectures. */
b4a20239 758 {
0e2de366 759 /* Append ``auto''. */
dedb7102
TT
760 set_architecture_string = "auto";
761 arches.push_back (set_architecture_string);
9b1f59fc 762 arches.push_back (nullptr);
5e84b7ee
SM
763 set_show_commands architecture_cmds
764 = add_setshow_enum_cmd ("architecture", class_support,
9b1f59fc 765 arches.data (), &set_architecture_string,
5e84b7ee
SM
766 _("Set architecture of target."),
767 _("Show architecture of target."), NULL,
768 set_architecture, show_architecture,
769 &setlist, &showlist);
770 add_alias_cmd ("processor", architecture_cmds.set, class_support, 1,
771 &setlist);
b4a20239
AC
772 }
773}
774
100bcc3f 775/* Similar to init, but this time fill in the blanks. Information is
7a107747
DJ
776 obtained from the global "set ..." options and explicitly
777 initialized INFO fields. */
bf922ad9
AC
778
779void
7a107747 780gdbarch_info_fill (struct gdbarch_info *info)
bf922ad9
AC
781{
782 /* "(gdb) set architecture ...". */
783 if (info->bfd_arch_info == NULL
7a107747
DJ
784 && target_architecture_user)
785 info->bfd_arch_info = target_architecture_user;
424163ea 786 /* From the file. */
bf922ad9
AC
787 if (info->bfd_arch_info == NULL
788 && info->abfd != NULL
789 && bfd_get_arch (info->abfd) != bfd_arch_unknown
790 && bfd_get_arch (info->abfd) != bfd_arch_obscure)
791 info->bfd_arch_info = bfd_get_arch_info (info->abfd);
23181151
DJ
792 /* From the target. */
793 if (info->target_desc != NULL)
794 info->bfd_arch_info = choose_architecture_for_target
e35359c5 795 (info->target_desc, info->bfd_arch_info);
7a107747
DJ
796 /* From the default. */
797 if (info->bfd_arch_info == NULL)
798 info->bfd_arch_info = default_bfd_arch;
bf922ad9
AC
799
800 /* "(gdb) set byte-order ...". */
801 if (info->byte_order == BFD_ENDIAN_UNKNOWN
7a107747
DJ
802 && target_byte_order_user != BFD_ENDIAN_UNKNOWN)
803 info->byte_order = target_byte_order_user;
bf922ad9
AC
804 /* From the INFO struct. */
805 if (info->byte_order == BFD_ENDIAN_UNKNOWN
806 && info->abfd != NULL)
807 info->byte_order = (bfd_big_endian (info->abfd) ? BFD_ENDIAN_BIG
7a107747
DJ
808 : bfd_little_endian (info->abfd) ? BFD_ENDIAN_LITTLE
809 : BFD_ENDIAN_UNKNOWN);
810 /* From the default. */
811 if (info->byte_order == BFD_ENDIAN_UNKNOWN)
812 info->byte_order = default_byte_order;
9d4fde75 813 info->byte_order_for_code = info->byte_order;
4b2dfa9d
MR
814 /* Wire the default to the last selected byte order. */
815 default_byte_order = info->byte_order;
bf922ad9
AC
816
817 /* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */
08d16641 818 /* From the manual override, or from file. */
26540402 819 if (info->osabi == GDB_OSABI_UNKNOWN)
bf922ad9 820 info->osabi = gdbarch_lookup_osabi (info->abfd);
08d16641 821 /* From the target. */
26540402 822
08d16641
PA
823 if (info->osabi == GDB_OSABI_UNKNOWN && info->target_desc != NULL)
824 info->osabi = tdesc_osabi (info->target_desc);
825 /* From the configured default. */
f4290e2a 826#ifdef GDB_OSABI_DEFAULT
08d16641
PA
827 if (info->osabi == GDB_OSABI_UNKNOWN)
828 info->osabi = GDB_OSABI_DEFAULT;
f4290e2a 829#endif
26540402
SM
830 /* If we still don't know which osabi to pick, pick none. */
831 if (info->osabi == GDB_OSABI_UNKNOWN)
832 info->osabi = GDB_OSABI_NONE;
bf922ad9
AC
833
834 /* Must have at least filled in the architecture. */
835 gdb_assert (info->bfd_arch_info != NULL);
836}
837
0e2de366
MS
838/* Return "current" architecture. If the target is running, this is
839 the architecture of the selected frame. Otherwise, the "current"
840 architecture defaults to the target architecture.
e17c207e 841
0e2de366
MS
842 This function should normally be called solely by the command
843 interpreter routines to determine the architecture to execute a
844 command in. */
e17c207e
UW
845struct gdbarch *
846get_current_arch (void)
847{
848 if (has_stack_frames ())
849 return get_frame_arch (get_selected_frame (NULL));
850 else
f5656ead 851 return target_gdbarch ();
e17c207e
UW
852}
853
6c95b8df
PA
854int
855default_has_shared_address_space (struct gdbarch *gdbarch)
856{
857 /* Simply say no. In most unix-like targets each inferior/process
858 has its own address space. */
859 return 0;
860}
861
7a697b8d 862int
6b940e6a 863default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
281d762b 864 std::string *msg)
7a697b8d
SS
865{
866 /* We don't know if maybe the target has some way to do fast
867 tracepoints that doesn't need gdbarch, so always say yes. */
868 if (msg)
281d762b 869 msg->clear ();
7a697b8d
SS
870 return 1;
871}
872
22f13eb8
YQ
873const gdb_byte *
874default_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
875 int *lenptr)
876{
877 int kind = gdbarch_breakpoint_kind_from_pc (gdbarch, pcptr);
878
879 return gdbarch_sw_breakpoint_from_kind (gdbarch, kind, lenptr);
880}
833b7ab5
YQ
881int
882default_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
883 struct regcache *regcache,
884 CORE_ADDR *pcptr)
885{
886 return gdbarch_breakpoint_kind_from_pc (gdbarch, pcptr);
887}
888
22f13eb8 889
6710bf39
SS
890void
891default_gen_return_address (struct gdbarch *gdbarch,
892 struct agent_expr *ax, struct axs_value *value,
893 CORE_ADDR scope)
894{
895 error (_("This architecture has no method to collect a return address."));
896}
897
18648a37
YQ
898int
899default_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
900 struct type *type)
901{
902 /* Usually, the return value's address is stored the in the "first hidden"
903 parameter if the return value should be passed by reference, as
904 specified in ABI. */
9d084466 905 return !(language_pass_by_reference (type).trivially_copyable);
18648a37
YQ
906}
907
c2170eef
MM
908int default_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
909{
910 return 0;
911}
912
913int default_insn_is_ret (struct gdbarch *gdbarch, CORE_ADDR addr)
914{
915 return 0;
916}
917
918int default_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr)
919{
920 return 0;
921}
922
5133a315
LM
923/* See arch-utils.h. */
924
925bool
926default_program_breakpoint_here_p (struct gdbarch *gdbarch,
927 CORE_ADDR address)
928{
929 int len;
930 const gdb_byte *bpoint = gdbarch_breakpoint_from_pc (gdbarch, &address, &len);
931
932 /* Software breakpoints unsupported? */
933 if (bpoint == nullptr)
934 return false;
935
936 gdb_byte *target_mem = (gdb_byte *) alloca (len);
937
938 /* Enable the automatic memory restoration from breakpoints while
939 we read the memory. Otherwise we may find temporary breakpoints, ones
940 inserted by GDB, and flag them as permanent breakpoints. */
941 scoped_restore restore_memory
942 = make_scoped_restore_show_memory_breakpoints (0);
943
944 if (target_read_memory (address, target_mem, len) == 0)
945 {
946 /* Check if this is a breakpoint instruction for this architecture,
947 including ones used by GDB. */
948 if (memcmp (target_mem, bpoint, len) == 0)
949 return true;
950 }
951
952 return false;
953}
954
ae9bb220
PA
955void
956default_skip_permanent_breakpoint (struct regcache *regcache)
957{
ac7936df 958 struct gdbarch *gdbarch = regcache->arch ();
ae9bb220 959 CORE_ADDR current_pc = regcache_read_pc (regcache);
ae9bb220
PA
960 int bp_len;
961
ac298888 962 gdbarch_breakpoint_from_pc (gdbarch, &current_pc, &bp_len);
ae9bb220
PA
963 current_pc += bp_len;
964 regcache_write_pc (regcache, current_pc);
965}
c0e8c252 966
f208eee0
JK
967CORE_ADDR
968default_infcall_mmap (CORE_ADDR size, unsigned prot)
969{
970 error (_("This target does not support inferior memory allocation by mmap."));
971}
972
7f361056
JK
973void
974default_infcall_munmap (CORE_ADDR addr, CORE_ADDR size)
975{
976 /* Memory reserved by inferior mmap is kept leaked. */
977}
978
f208eee0
JK
979/* -mcmodel=large is used so that no GOT (Global Offset Table) is needed to be
980 created in inferior memory by GDB (normally it is set by ld.so). */
981
953cff56 982std::string
f208eee0
JK
983default_gcc_target_options (struct gdbarch *gdbarch)
984{
953cff56
TT
985 return string_printf ("-m%d%s", gdbarch_ptr_bit (gdbarch),
986 (gdbarch_ptr_bit (gdbarch) == 64
987 ? " -mcmodel=large" : ""));
f208eee0
JK
988}
989
ac04f72b
TT
990/* gdbarch gnu_triplet_regexp method. */
991
992const char *
993default_gnu_triplet_regexp (struct gdbarch *gdbarch)
994{
995 return gdbarch_bfd_arch_info (gdbarch)->arch_name;
996}
997
05f3c0f0
AB
998/* Default method for gdbarch_addressable_memory_unit_size. The default is
999 based on the bits_per_byte defined in the bfd library for the current
1000 architecture, this is usually 8-bits, and so this function will usually
1001 return 1 indicating 1 byte is 1 octet. */
3374165f
SM
1002
1003int
1004default_addressable_memory_unit_size (struct gdbarch *gdbarch)
1005{
05f3c0f0 1006 return gdbarch_bfd_arch_info (gdbarch)->bits_per_byte / 8;
3374165f
SM
1007}
1008
5f034a78
MK
1009void
1010default_guess_tracepoint_registers (struct gdbarch *gdbarch,
1011 struct regcache *regcache,
1012 CORE_ADDR addr)
1013{
1014 int pc_regno = gdbarch_pc_regnum (gdbarch);
1015 gdb_byte *regs;
1016
1017 /* This guessing code below only works if the PC register isn't
1018 a pseudo-register. The value of a pseudo-register isn't stored
1019 in the (non-readonly) regcache -- instead it's recomputed
1020 (probably from some other cached raw register) whenever the
1021 register is read. In this case, a custom method implementation
1022 should be used by the architecture. */
1023 if (pc_regno < 0 || pc_regno >= gdbarch_num_regs (gdbarch))
1024 return;
1025
1026 regs = (gdb_byte *) alloca (register_size (gdbarch, pc_regno));
1027 store_unsigned_integer (regs, register_size (gdbarch, pc_regno),
1028 gdbarch_byte_order (gdbarch), addr);
73e1c03f 1029 regcache->raw_supply (pc_regno, regs);
5f034a78
MK
1030}
1031
39503f82
YQ
1032int
1033default_print_insn (bfd_vma memaddr, disassemble_info *info)
1034{
1035 disassembler_ftype disassemble_fn;
1036
39503f82 1037 disassemble_fn = disassembler (info->arch, info->endian == BFD_ENDIAN_BIG,
7e10abd1 1038 info->mach, current_program_space->exec_bfd ());
39503f82
YQ
1039
1040 gdb_assert (disassemble_fn != NULL);
1041 return (*disassemble_fn) (memaddr, info);
1042}
1043
46a62268
YQ
1044/* See arch-utils.h. */
1045
1046CORE_ADDR
1047gdbarch_skip_prologue_noexcept (gdbarch *gdbarch, CORE_ADDR pc) noexcept
1048{
1049 CORE_ADDR new_pc = pc;
1050
a70b8144 1051 try
46a62268
YQ
1052 {
1053 new_pc = gdbarch_skip_prologue (gdbarch, pc);
1054 }
230d2906 1055 catch (const gdb_exception &ex)
46a62268 1056 {}
46a62268
YQ
1057
1058 return new_pc;
1059}
1060
1d509aa6
MM
1061/* See arch-utils.h. */
1062
1063bool
1064default_in_indirect_branch_thunk (gdbarch *gdbarch, CORE_ADDR pc)
1065{
1066 return false;
1067}
1068
2b4424c3
TT
1069/* See arch-utils.h. */
1070
1071ULONGEST
1072default_type_align (struct gdbarch *gdbarch, struct type *type)
1073{
5561fc30 1074 return 0;
2b4424c3
TT
1075}
1076
aa7ca1bb
AH
1077/* See arch-utils.h. */
1078
1079std::string
bd2b40ac 1080default_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
aa7ca1bb
AH
1081{
1082 return "";
1083}
1084
7e183d27
KB
1085/* See arch-utils.h. */
1086void
aa95b2d4
AM
1087default_read_core_file_mappings
1088 (struct gdbarch *gdbarch,
1089 struct bfd *cbfd,
1090 read_core_file_mappings_pre_loop_ftype pre_loop_cb,
1091 read_core_file_mappings_loop_ftype loop_cb)
7e183d27
KB
1092{
1093}
1094
a0eda3df
CL
1095CORE_ADDR
1096default_get_return_buf_addr (struct type *val_type, frame_info_ptr cur_frame)
1097{
1098 return 0;
1099}
1100
74fcd19c
TT
1101/* Non-zero if we want to trace architecture code. */
1102
1103#ifndef GDBARCH_DEBUG
1104#define GDBARCH_DEBUG 0
1105#endif
1106unsigned int gdbarch_debug = GDBARCH_DEBUG;
1107static void
1108show_gdbarch_debug (struct ui_file *file, int from_tty,
1109 struct cmd_list_element *c, const char *value)
1110{
6cb06a8c 1111 gdb_printf (file, _("Architecture debugging is %s.\n"), value);
74fcd19c
TT
1112}
1113
1114static const char *
aaa79cd6 1115pformat (struct gdbarch *gdbarch, const struct floatformat **format)
74fcd19c
TT
1116{
1117 if (format == NULL)
1118 return "(null)";
aaa79cd6
TV
1119
1120 int format_index = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE ? 1 : 0;
1121 return format[format_index]->name;
74fcd19c
TT
1122}
1123
1124static const char *
1125pstring (const char *string)
1126{
1127 if (string == NULL)
1128 return "(null)";
1129 return string;
1130}
1131
1132static const char *
1133pstring_ptr (char **string)
1134{
1135 if (string == NULL || *string == NULL)
1136 return "(null)";
1137 return *string;
1138}
1139
1140/* Helper function to print a list of strings, represented as "const
1141 char *const *". The list is printed comma-separated. */
1142
1143static const char *
1144pstring_list (const char *const *list)
1145{
1146 static char ret[100];
1147 const char *const *p;
1148 size_t offset = 0;
1149
1150 if (list == NULL)
1151 return "(null)";
1152
1153 ret[0] = '\0';
1154 for (p = list; *p != NULL && offset < sizeof (ret); ++p)
1155 {
1156 size_t s = xsnprintf (ret + offset, sizeof (ret) - offset, "%s, ", *p);
1157 offset += 2 + s;
1158 }
1159
1160 if (offset > 0)
1161 {
1162 gdb_assert (offset - 2 < sizeof (ret));
1163 ret[offset - 2] = '\0';
1164 }
1165
1166 return ret;
1167}
1168
1169#include "gdbarch.c"
1170
1171obstack *gdbarch_obstack (gdbarch *arch)
1172{
b987c79a 1173 return &arch->obstack;
74fcd19c
TT
1174}
1175
1176/* See gdbarch.h. */
1177
1178char *
1179gdbarch_obstack_strdup (struct gdbarch *arch, const char *string)
1180{
b987c79a 1181 return obstack_strdup (&arch->obstack, string);
74fcd19c
TT
1182}
1183
1184
1185/* Free a gdbarch struct. This should never happen in normal
1186 operation --- once you've created a gdbarch, you keep it around.
1187 However, if an architecture's init function encounters an error
1188 building the structure, it may need to clean up a partially
1189 constructed gdbarch. */
1190
1191void
1192gdbarch_free (struct gdbarch *arch)
1193{
74fcd19c
TT
1194 gdb_assert (arch != NULL);
1195 gdb_assert (!arch->initialized_p);
b987c79a 1196 delete arch;
74fcd19c
TT
1197}
1198
08106042
AB
1199/* See gdbarch.h. */
1200
ab25d9bb 1201struct gdbarch_tdep_base *
08106042 1202gdbarch_tdep_1 (struct gdbarch *gdbarch)
74fcd19c
TT
1203{
1204 if (gdbarch_debug >= 2)
08106042 1205 gdb_printf (gdb_stdlog, "gdbarch_tdep_1 called\n");
74fcd19c
TT
1206 return gdbarch->tdep;
1207}
1208
cb275538
TT
1209registry<gdbarch> *
1210registry_accessor<gdbarch>::get (gdbarch *arch)
74fcd19c 1211{
cb275538 1212 return &arch->registry_fields;
74fcd19c
TT
1213}
1214
74fcd19c
TT
1215/* Keep a registry of the architectures known by GDB. */
1216
1217struct gdbarch_registration
1218{
1219 enum bfd_architecture bfd_architecture;
1220 gdbarch_init_ftype *init;
1221 gdbarch_dump_tdep_ftype *dump_tdep;
1222 struct gdbarch_list *arches;
1223 struct gdbarch_registration *next;
1224};
1225
1226static struct gdbarch_registration *gdbarch_registry = NULL;
1227
1228std::vector<const char *>
1229gdbarch_printable_names ()
1230{
1231 /* Accumulate a list of names based on the registed list of
1232 architectures. */
1233 std::vector<const char *> arches;
1234
1235 for (gdbarch_registration *rego = gdbarch_registry;
1236 rego != nullptr;
1237 rego = rego->next)
1238 {
1239 const struct bfd_arch_info *ap
1240 = bfd_lookup_arch (rego->bfd_architecture, 0);
1241 if (ap == nullptr)
f34652de 1242 internal_error (_("gdbarch_architecture_names: multi-arch unknown"));
74fcd19c
TT
1243 do
1244 {
1245 arches.push_back (ap->printable_name);
1246 ap = ap->next;
1247 }
1248 while (ap != NULL);
1249 }
1250
1251 return arches;
1252}
1253
1254
1255void
1256gdbarch_register (enum bfd_architecture bfd_architecture,
1257 gdbarch_init_ftype *init,
1258 gdbarch_dump_tdep_ftype *dump_tdep)
1259{
1260 struct gdbarch_registration **curr;
1261 const struct bfd_arch_info *bfd_arch_info;
1262
1263 /* Check that BFD recognizes this architecture */
1264 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1265 if (bfd_arch_info == NULL)
1266 {
f34652de 1267 internal_error (_("gdbarch: Attempt to register "
74fcd19c
TT
1268 "unknown architecture (%d)"),
1269 bfd_architecture);
1270 }
1271 /* Check that we haven't seen this architecture before. */
1272 for (curr = &gdbarch_registry;
1273 (*curr) != NULL;
1274 curr = &(*curr)->next)
1275 {
1276 if (bfd_architecture == (*curr)->bfd_architecture)
f34652de 1277 internal_error (_("gdbarch: Duplicate registration "
74fcd19c
TT
1278 "of architecture (%s)"),
1279 bfd_arch_info->printable_name);
1280 }
1281 /* log it */
1282 if (gdbarch_debug)
ec29a63c 1283 gdb_printf (gdb_stdlog, "gdbarch_register (%s, %s)\n",
6cb06a8c
TT
1284 bfd_arch_info->printable_name,
1285 host_address_to_string (init));
74fcd19c
TT
1286 /* Append it */
1287 (*curr) = XNEW (struct gdbarch_registration);
1288 (*curr)->bfd_architecture = bfd_architecture;
1289 (*curr)->init = init;
1290 (*curr)->dump_tdep = dump_tdep;
1291 (*curr)->arches = NULL;
1292 (*curr)->next = NULL;
1293}
1294
74fcd19c
TT
1295/* Look for an architecture using gdbarch_info. */
1296
1297struct gdbarch_list *
1298gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1299 const struct gdbarch_info *info)
1300{
1301 for (; arches != NULL; arches = arches->next)
1302 {
1303 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1304 continue;
1305 if (info->byte_order != arches->gdbarch->byte_order)
1306 continue;
1307 if (info->osabi != arches->gdbarch->osabi)
1308 continue;
1309 if (info->target_desc != arches->gdbarch->target_desc)
1310 continue;
1311 return arches;
1312 }
1313 return NULL;
1314}
1315
1316
1317/* Find an architecture that matches the specified INFO. Create a new
1318 architecture if needed. Return that new architecture. */
1319
1320struct gdbarch *
1321gdbarch_find_by_info (struct gdbarch_info info)
1322{
1323 struct gdbarch *new_gdbarch;
1324 struct gdbarch_registration *rego;
1325
1326 /* Fill in missing parts of the INFO struct using a number of
1327 sources: "set ..."; INFOabfd supplied; and the global
1328 defaults. */
1329 gdbarch_info_fill (&info);
1330
1331 /* Must have found some sort of architecture. */
c7f83b0d 1332 gdb_assert (info.bfd_arch_info != nullptr);
74fcd19c
TT
1333
1334 if (gdbarch_debug)
1335 {
6cb06a8c
TT
1336 gdb_printf (gdb_stdlog,
1337 "gdbarch_find_by_info: info.bfd_arch_info %s\n",
c7f83b0d 1338 (info.bfd_arch_info != nullptr
6cb06a8c
TT
1339 ? info.bfd_arch_info->printable_name
1340 : "(null)"));
1341 gdb_printf (gdb_stdlog,
1342 "gdbarch_find_by_info: info.byte_order %d (%s)\n",
1343 info.byte_order,
1344 (info.byte_order == BFD_ENDIAN_BIG ? "big"
1345 : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
1346 : "default"));
1347 gdb_printf (gdb_stdlog,
1348 "gdbarch_find_by_info: info.osabi %d (%s)\n",
1349 info.osabi, gdbarch_osabi_name (info.osabi));
1350 gdb_printf (gdb_stdlog,
1351 "gdbarch_find_by_info: info.abfd %s\n",
1352 host_address_to_string (info.abfd));
74fcd19c
TT
1353 }
1354
1355 /* Find the tdep code that knows about this architecture. */
1356 for (rego = gdbarch_registry;
c7f83b0d 1357 rego != nullptr;
74fcd19c
TT
1358 rego = rego->next)
1359 if (rego->bfd_architecture == info.bfd_arch_info->arch)
1360 break;
c7f83b0d 1361 if (rego == nullptr)
74fcd19c
TT
1362 {
1363 if (gdbarch_debug)
6cb06a8c
TT
1364 gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1365 "No matching architecture\n");
c7f83b0d 1366 return nullptr;
74fcd19c
TT
1367 }
1368
1369 /* Ask the tdep code for an architecture that matches "info". */
1370 new_gdbarch = rego->init (info, rego->arches);
1371
1372 /* Did the tdep code like it? No. Reject the change and revert to
1373 the old architecture. */
c7f83b0d 1374 if (new_gdbarch == nullptr)
74fcd19c
TT
1375 {
1376 if (gdbarch_debug)
6cb06a8c
TT
1377 gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1378 "Target rejected architecture\n");
c7f83b0d 1379 return nullptr;
74fcd19c
TT
1380 }
1381
1382 /* Is this a pre-existing architecture (as determined by already
1383 being initialized)? Move it to the front of the architecture
1384 list (keeping the list sorted Most Recently Used). */
1385 if (new_gdbarch->initialized_p)
1386 {
1387 struct gdbarch_list **list;
1388 struct gdbarch_list *self;
1389 if (gdbarch_debug)
6cb06a8c
TT
1390 gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1391 "Previous architecture %s (%s) selected\n",
1392 host_address_to_string (new_gdbarch),
1393 new_gdbarch->bfd_arch_info->printable_name);
74fcd19c
TT
1394 /* Find the existing arch in the list. */
1395 for (list = &rego->arches;
c7f83b0d 1396 (*list) != nullptr && (*list)->gdbarch != new_gdbarch;
74fcd19c
TT
1397 list = &(*list)->next);
1398 /* It had better be in the list of architectures. */
c7f83b0d 1399 gdb_assert ((*list) != nullptr && (*list)->gdbarch == new_gdbarch);
74fcd19c
TT
1400 /* Unlink SELF. */
1401 self = (*list);
1402 (*list) = self->next;
1403 /* Insert SELF at the front. */
1404 self->next = rego->arches;
1405 rego->arches = self;
1406 /* Return it. */
1407 return new_gdbarch;
1408 }
1409
1410 /* It's a new architecture. */
1411 if (gdbarch_debug)
6cb06a8c
TT
1412 gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1413 "New architecture %s (%s) selected\n",
1414 host_address_to_string (new_gdbarch),
1415 new_gdbarch->bfd_arch_info->printable_name);
74fcd19c
TT
1416
1417 /* Insert the new architecture into the front of the architecture
1418 list (keep the list sorted Most Recently Used). */
1419 {
1420 struct gdbarch_list *self = XNEW (struct gdbarch_list);
1421 self->next = rego->arches;
1422 self->gdbarch = new_gdbarch;
1423 rego->arches = self;
1424 }
1425
1426 /* Check that the newly installed architecture is valid. Plug in
1427 any post init values. */
1428 new_gdbarch->dump_tdep = rego->dump_tdep;
1429 verify_gdbarch (new_gdbarch);
0655397b 1430 new_gdbarch->initialized_p = true;
74fcd19c
TT
1431
1432 if (gdbarch_debug)
1433 gdbarch_dump (new_gdbarch, gdb_stdlog);
1434
1435 return new_gdbarch;
1436}
1437
1438/* Make the specified architecture current. */
1439
1440void
1441set_target_gdbarch (struct gdbarch *new_gdbarch)
1442{
1443 gdb_assert (new_gdbarch != NULL);
1444 gdb_assert (new_gdbarch->initialized_p);
1445 current_inferior ()->gdbarch = new_gdbarch;
1446 gdb::observers::architecture_changed.notify (new_gdbarch);
1447 registers_changed ();
1448}
1449
1450/* Return the current inferior's arch. */
1451
1452struct gdbarch *
1453target_gdbarch (void)
1454{
1455 return current_inferior ()->gdbarch;
1456}
1457
6c265988 1458void _initialize_gdbarch_utils ();
c0e8c252 1459void
6c265988 1460_initialize_gdbarch_utils ()
c0e8c252 1461{
7ab04401 1462 add_setshow_enum_cmd ("endian", class_support,
3e43a32a
MS
1463 endian_enum, &set_endian_string,
1464 _("Set endianness of target."),
1465 _("Show endianness of target."),
1466 NULL, set_endian, show_endian,
7ab04401 1467 &setlist, &showlist);
74fcd19c
TT
1468 add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\
1469Set architecture debugging."), _("\
1470Show architecture debugging."), _("\
1471When non-zero, architecture debugging is enabled."),
1472 NULL,
1473 show_gdbarch_debug,
1474 &setdebuglist, &showdebuglist);
c0e8c252 1475}