1 /* Dynamic architecture support for GDB, the GNU debugger.
2 
3    Copyright (C) 1998-2024 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 
21 #include "arch-utils.h"
22 #include "extract-store-integer.h"
23 #include "cli/cli-cmds.h"
24 #include "inferior.h"
25 #include "infrun.h"
26 #include "regcache.h"
27 #include "sim-regno.h"
28 #include "gdbcore.h"
29 #include "osabi.h"
30 #include "target-descriptions.h"
31 #include "objfiles.h"
32 #include "language.h"
33 #include "symtab.h"
34 #include "dummy-frame.h"
35 #include "frame-unwind.h"
36 #include "reggroups.h"
37 #include "auxv.h"
38 #include "observable.h"
39 #include "solib-target.h"
40 
41 #include "gdbsupport/version.h"
42 
43 #include "floatformat.h"
44 
45 #include "dis-asm.h"
46 
47 bool
default_displaced_step_hw_singlestep(struct gdbarch * gdbarch)48 default_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
49 {
50   return !gdbarch_software_single_step_p (gdbarch);
51 }
52 
53 CORE_ADDR
displaced_step_at_entry_point(struct gdbarch * gdbarch)54 displaced_step_at_entry_point (struct gdbarch *gdbarch)
55 {
56   CORE_ADDR addr;
57   int bp_len;
58 
59   addr = entry_point_address ();
60 
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);
65   addr += bp_len * 2;
66 
67   return addr;
68 }
69 
70 int
legacy_register_sim_regno(struct gdbarch * gdbarch,int regnum)71 legacy_register_sim_regno (struct gdbarch *gdbarch, int regnum)
72 {
73   /* Only makes sense to supply raw registers.  */
74   gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
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
77      behaviour.  The default should be one2one_register_sim_regno
78      (below).  */
79   if (gdbarch_register_name (gdbarch, regnum)[0] != '\0')
80     return regnum;
81   else
82     return LEGACY_SIM_REGNO_IGNORE;
83 }
84 
85 /* See arch-utils.h */
86 
87 CORE_ADDR
default_remove_non_address_bits(struct gdbarch * gdbarch,CORE_ADDR pointer)88 default_remove_non_address_bits (struct gdbarch *gdbarch, CORE_ADDR pointer)
89 {
90   /* By default, just return the pointer value.  */
91   return pointer;
92 }
93 
94 /* See arch-utils.h */
95 
96 std::string
default_memtag_to_string(struct gdbarch * gdbarch,struct value * tag)97 default_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 
105 bool
default_tagged_address_p(struct gdbarch * gdbarch,CORE_ADDR address)106 default_tagged_address_p (struct gdbarch *gdbarch, CORE_ADDR address)
107 {
108   /* By default, assume the address is untagged.  */
109   return false;
110 }
111 
112 /* See arch-utils.h */
113 
114 bool
default_memtag_matches_p(struct gdbarch * gdbarch,struct value * address)115 default_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 
123 bool
default_set_memtags(struct gdbarch * gdbarch,struct value * address,size_t length,const gdb::byte_vector & tags,memtag_type tag_type)124 default_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 
134 struct value *
default_get_memtag(struct gdbarch * gdbarch,struct value * address,memtag_type tag_type)135 default_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 
142 CORE_ADDR
generic_skip_trampoline_code(const frame_info_ptr & frame,CORE_ADDR pc)143 generic_skip_trampoline_code (const frame_info_ptr &frame, CORE_ADDR pc)
144 {
145   return 0;
146 }
147 
148 CORE_ADDR
generic_skip_solib_resolver(struct gdbarch * gdbarch,CORE_ADDR pc)149 generic_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
150 {
151   return 0;
152 }
153 
154 int
generic_in_solib_return_trampoline(struct gdbarch * gdbarch,CORE_ADDR pc,const char * name)155 generic_in_solib_return_trampoline (struct gdbarch *gdbarch,
156                                             CORE_ADDR pc, const char *name)
157 {
158   return 0;
159 }
160 
161 int
generic_stack_frame_destroyed_p(struct gdbarch * gdbarch,CORE_ADDR pc)162 generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
163 {
164   return 0;
165 }
166 
167 int
default_code_of_frame_writable(struct gdbarch * gdbarch,const frame_info_ptr & frame)168 default_code_of_frame_writable (struct gdbarch *gdbarch,
169                                         const frame_info_ptr &frame)
170 {
171   return 1;
172 }
173 
174 /* Helper functions for gdbarch_inner_than */
175 
176 bool
core_addr_lessthan(CORE_ADDR lhs,CORE_ADDR rhs)177 core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs)
178 {
179   return lhs < rhs;
180 }
181 
182 bool
core_addr_greaterthan(CORE_ADDR lhs,CORE_ADDR rhs)183 core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs)
184 {
185   return lhs > rhs;
186 }
187 
188 /* Misc helper functions for targets.  */
189 
190 CORE_ADDR
core_addr_identity(struct gdbarch * gdbarch,CORE_ADDR addr)191 core_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr)
192 {
193   return addr;
194 }
195 
196 CORE_ADDR
convert_from_func_ptr_addr_identity(struct gdbarch * gdbarch,CORE_ADDR addr,struct target_ops * targ)197 convert_from_func_ptr_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr,
198                                              struct target_ops *targ)
199 {
200   return addr;
201 }
202 
203 int
no_op_reg_to_regnum(struct gdbarch * gdbarch,int reg)204 no_op_reg_to_regnum (struct gdbarch *gdbarch, int reg)
205 {
206   return reg;
207 }
208 
209 void
default_coff_make_msymbol_special(int val,struct minimal_symbol * msym)210 default_coff_make_msymbol_special (int val, struct minimal_symbol *msym)
211 {
212   return;
213 }
214 
215 /* See arch-utils.h.  */
216 
217 void
default_make_symbol_special(struct symbol * sym,struct objfile * objfile)218 default_make_symbol_special (struct symbol *sym, struct objfile *objfile)
219 {
220   return;
221 }
222 
223 /* See arch-utils.h.  */
224 
225 CORE_ADDR
default_adjust_dwarf2_addr(CORE_ADDR pc)226 default_adjust_dwarf2_addr (CORE_ADDR pc)
227 {
228   return pc;
229 }
230 
231 /* See arch-utils.h.  */
232 
233 CORE_ADDR
default_adjust_dwarf2_line(CORE_ADDR addr,int rel)234 default_adjust_dwarf2_line (CORE_ADDR addr, int rel)
235 {
236   return addr;
237 }
238 
239 /* See arch-utils.h.  */
240 
241 bool
default_execute_dwarf_cfa_vendor_op(struct gdbarch * gdbarch,gdb_byte op,struct dwarf2_frame_state * fs)242 default_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
243                                              struct dwarf2_frame_state *fs)
244 {
245   return false;
246 }
247 
248 int
cannot_register_not(struct gdbarch * gdbarch,int regnum)249 cannot_register_not (struct gdbarch *gdbarch, int regnum)
250 {
251   return 0;
252 }
253 
254 /* Legacy version of target_virtual_frame_pointer().  Assumes that
255    there is an gdbarch_deprecated_fp_regnum and that it is the same,
256    cooked or raw.  */
257 
258 void
legacy_virtual_frame_pointer(struct gdbarch * gdbarch,CORE_ADDR pc,int * frame_regnum,LONGEST * frame_offset)259 legacy_virtual_frame_pointer (struct gdbarch *gdbarch,
260                                     CORE_ADDR pc,
261                                     int *frame_regnum,
262                                     LONGEST *frame_offset)
263 {
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.  */
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)
275                     < gdbarch_num_regs (gdbarch))
276     *frame_regnum = gdbarch_sp_regnum (gdbarch);
277   else
278     /* Should this be an internal error?  I guess so, it is reflecting
279        an architectural limitation in the current design.  */
280     internal_error (_("No virtual frame pointer available"));
281   *frame_offset = 0;
282 }
283 
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 
288 const struct floatformat **
default_floatformat_for_type(struct gdbarch * gdbarch,const char * name,int len)289 default_floatformat_for_type (struct gdbarch *gdbarch,
290                                     const char *name, int len)
291 {
292   const struct floatformat **format = NULL;
293 
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))
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 }
318 
319 int
generic_convert_register_p(struct gdbarch * gdbarch,int regnum,struct type * type)320 generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
321                                   struct type *type)
322 {
323   return 0;
324 }
325 
326 int
default_stabs_argument_has_addr(struct gdbarch * gdbarch,struct type * type)327 default_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
328 {
329   return 0;
330 }
331 
332 int
generic_instruction_nullified(struct gdbarch * gdbarch,struct regcache * regcache)333 generic_instruction_nullified (struct gdbarch *gdbarch,
334                                      struct regcache *regcache)
335 {
336   return 0;
337 }
338 
339 int
default_remote_register_number(struct gdbarch * gdbarch,int regno)340 default_remote_register_number (struct gdbarch *gdbarch,
341                                         int regno)
342 {
343   return regno;
344 }
345 
346 /* See arch-utils.h.  */
347 
348 int
default_vsyscall_range(struct gdbarch * gdbarch,struct mem_range * range)349 default_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
350 {
351   return 0;
352 }
353 
354 
355 /* Functions to manipulate the endianness of the target.  */
356 
357 static enum bfd_endian target_byte_order_user = BFD_ENDIAN_UNKNOWN;
358 
359 static const char endian_big[] = "big";
360 static const char endian_little[] = "little";
361 static const char endian_auto[] = "auto";
362 static const char *const endian_enum[] =
363 {
364   endian_big,
365   endian_little,
366   endian_auto,
367   NULL,
368 };
369 static const char *set_endian_string = endian_auto;
370 
371 enum bfd_endian
selected_byte_order(void)372 selected_byte_order (void)
373 {
374   return target_byte_order_user;
375 }
376 
377 /* Called by ``show endian''.  */
378 
379 static void
show_endian(struct ui_file * file,int from_tty,struct cmd_list_element * c,const char * value)380 show_endian (struct ui_file *file, int from_tty, struct cmd_list_element *c,
381                const char *value)
382 {
383   if (target_byte_order_user == BFD_ENDIAN_UNKNOWN)
384     if (gdbarch_byte_order (get_current_arch ()) == BFD_ENDIAN_BIG)
385       gdb_printf (file, _("The target endianness is set automatically "
386                                 "(currently big endian).\n"));
387     else
388       gdb_printf (file, _("The target endianness is set automatically "
389                                 "(currently little endian).\n"));
390   else
391     if (target_byte_order_user == BFD_ENDIAN_BIG)
392       gdb_printf (file,
393                       _("The target is set to big endian.\n"));
394     else
395       gdb_printf (file,
396                       _("The target is set to little endian.\n"));
397 }
398 
399 static void
set_endian(const char * ignore_args,int from_tty,struct cmd_list_element * c)400 set_endian (const char *ignore_args, int from_tty, struct cmd_list_element *c)
401 {
402   struct gdbarch_info info;
403 
404   if (set_endian_string == endian_auto)
405     {
406       target_byte_order_user = BFD_ENDIAN_UNKNOWN;
407       if (! gdbarch_update_p (info))
408           internal_error (_("set_endian: architecture update failed"));
409     }
410   else if (set_endian_string == endian_little)
411     {
412       info.byte_order = BFD_ENDIAN_LITTLE;
413       if (! gdbarch_update_p (info))
414           gdb_printf (gdb_stderr,
415                         _("Little endian target not supported by GDB\n"));
416       else
417           target_byte_order_user = BFD_ENDIAN_LITTLE;
418     }
419   else if (set_endian_string == endian_big)
420     {
421       info.byte_order = BFD_ENDIAN_BIG;
422       if (! gdbarch_update_p (info))
423           gdb_printf (gdb_stderr,
424                         _("Big endian target not supported by GDB\n"));
425       else
426           target_byte_order_user = BFD_ENDIAN_BIG;
427     }
428   else
429     internal_error (_("set_endian: bad value"));
430 
431   show_endian (gdb_stdout, from_tty, NULL, NULL);
432 }
433 
434 /* Given SELECTED, a currently selected BFD architecture, and
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
440    of the architecture associated with TARGET_DESC, return the
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.  */
447 
448 static const struct bfd_arch_info *
choose_architecture_for_target(const struct target_desc * target_desc,const struct bfd_arch_info * selected)449 choose_architecture_for_target (const struct target_desc *target_desc,
450                                         const struct bfd_arch_info *selected)
451 {
452   const struct bfd_arch_info *from_target = tdesc_architecture (target_desc);
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     {
482       /* BFD considers the architectures incompatible.  Check our
483            target description whether it accepts SELECTED as compatible
484            anyway.  */
485       if (tdesc_compatible_p (target_desc, selected))
486           return from_target;
487 
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 
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.  */
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 
518 /* Functions to manipulate the architecture of the target.  */
519 
520 enum set_arch { set_arch_auto, set_arch_manual };
521 
522 static const struct bfd_arch_info *target_architecture_user;
523 
524 static const char *set_architecture_string;
525 
526 const char *
selected_architecture_name(void)527 selected_architecture_name (void)
528 {
529   if (target_architecture_user == NULL)
530     return NULL;
531   else
532     return set_architecture_string;
533 }
534 
535 /* Called if the user enters ``show architecture'' without an
536    argument.  */
537 
538 static void
show_architecture(struct ui_file * file,int from_tty,struct cmd_list_element * c,const char * value)539 show_architecture (struct ui_file *file, int from_tty,
540                        struct cmd_list_element *c, const char *value)
541 {
542   if (target_architecture_user == NULL)
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);
546   else
547     gdb_printf (file, _("The target architecture is set to \"%s\".\n"),
548                     set_architecture_string);
549 }
550 
551 
552 /* Called if the user enters ``set architecture'' with or without an
553    argument.  */
554 
555 static void
set_architecture(const char * ignore_args,int from_tty,struct cmd_list_element * c)556 set_architecture (const char *ignore_args,
557                       int from_tty, struct cmd_list_element *c)
558 {
559   struct gdbarch_info info;
560 
561   if (strcmp (set_architecture_string, "auto") == 0)
562     {
563       target_architecture_user = NULL;
564       if (!gdbarch_update_p (info))
565           internal_error (_("could not select an architecture automatically"));
566     }
567   else
568     {
569       info.bfd_arch_info = bfd_scan_arch (set_architecture_string);
570       if (info.bfd_arch_info == NULL)
571           internal_error (_("set_architecture: bfd_scan_arch failed"));
572       if (gdbarch_update_p (info))
573           target_architecture_user = info.bfd_arch_info;
574       else
575           gdb_printf (gdb_stderr,
576                         _("Architecture `%s' not recognized.\n"),
577                         set_architecture_string);
578     }
579   show_architecture (gdb_stdout, from_tty, NULL, NULL);
580 }
581 
582 /* Try to select a global architecture that matches "info".  Return
583    non-zero if the attempt succeeds.  */
584 int
gdbarch_update_p(struct gdbarch_info info)585 gdbarch_update_p (struct gdbarch_info info)
586 {
587   struct gdbarch *new_gdbarch;
588 
589   /* Check for the current file.  */
590   if (info.abfd == NULL)
591     info.abfd = current_program_space->exec_bfd ();
592   if (info.abfd == NULL)
593     info.abfd = current_program_space->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);
600 
601   /* If there no architecture by that name, reject the request.  */
602   if (new_gdbarch == NULL)
603     {
604       if (gdbarch_debug)
605           gdb_printf (gdb_stdlog, "gdbarch_update_p: "
606                         "Architecture not found\n");
607       return 0;
608     }
609 
610   /* If it is the same old architecture, accept the request (but don't
611      swap anything).  */
612   if (new_gdbarch == current_inferior ()->arch ())
613     {
614       if (gdbarch_debug)
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);
619       return 1;
620     }
621 
622   /* It's a new architecture, swap it in.  */
623   if (gdbarch_debug)
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);
628 
629   current_inferior ()->set_arch (new_gdbarch);
630 
631   return 1;
632 }
633 
634 /* Return the architecture for ABFD.  If no suitable architecture
635    could be find, return NULL.  */
636 
637 struct gdbarch *
gdbarch_from_bfd(bfd * abfd)638 gdbarch_from_bfd (bfd *abfd)
639 {
640   struct gdbarch_info info;
641 
642   info.abfd = abfd;
643   return gdbarch_find_by_info (info);
644 }
645 
646 /* Set the dynamic target-system-dependent parameters (architecture,
647    byte-order) using information found in the BFD */
648 
649 void
set_gdbarch_from_file(bfd * abfd)650 set_gdbarch_from_file (bfd *abfd)
651 {
652   struct gdbarch_info info;
653   struct gdbarch *gdbarch;
654 
655   info.abfd = abfd;
656   info.target_desc = target_current_description ();
657   gdbarch = gdbarch_find_by_info (info);
658 
659   if (gdbarch == NULL)
660     error (_("Architecture of file not recognized."));
661 
662   current_inferior ()->set_arch (gdbarch);
663 }
664 
665 /* Initialize the current architecture.  Update the ``set
666    architecture'' command so that it specifies a list of valid
667    architectures.  */
668 
669 #ifdef DEFAULT_BFD_ARCH
670 extern const bfd_arch_info_type DEFAULT_BFD_ARCH;
671 static const bfd_arch_info_type *default_bfd_arch = &DEFAULT_BFD_ARCH;
672 #else
673 static const bfd_arch_info_type *default_bfd_arch;
674 #endif
675 
676 #ifdef DEFAULT_BFD_VEC
677 extern const bfd_target DEFAULT_BFD_VEC;
678 static const bfd_target *default_bfd_vec = &DEFAULT_BFD_VEC;
679 #else
680 static const bfd_target *default_bfd_vec;
681 #endif
682 
683 static enum bfd_endian default_byte_order = BFD_ENDIAN_UNKNOWN;
684 
685 /* Printable names of architectures.  Used as the enum list of the
686    "set arch" command.  */
687 static std::vector<const char *> arches;
688 
689 void
initialize_current_architecture(void)690 initialize_current_architecture (void)
691 {
692   arches = gdbarch_printable_names ();
693 
694   /* Find a default architecture.  */
695   if (default_bfd_arch == NULL)
696     {
697       /* Choose the architecture by taking the first one
698            alphabetically.  */
699       const char *chosen = arches[0];
700 
701       for (const char *arch : arches)
702           {
703             if (strcmp (arch, chosen) < 0)
704               chosen = arch;
705           }
706 
707       if (chosen == NULL)
708           internal_error (_("initialize_current_architecture: No arch"));
709 
710       default_bfd_arch = bfd_scan_arch (chosen);
711       if (default_bfd_arch == NULL)
712           internal_error (_("initialize_current_architecture: Arch not found"));
713     }
714 
715   gdbarch_info info;
716   info.bfd_arch_info = default_bfd_arch;
717 
718   /* Take several guesses at a byte order.  */
719   if (default_byte_order == BFD_ENDIAN_UNKNOWN
720       && default_bfd_vec != NULL)
721     {
722       /* Extract BFD's default vector's byte order.  */
723       switch (default_bfd_vec->byteorder)
724           {
725           case BFD_ENDIAN_BIG:
726             default_byte_order = BFD_ENDIAN_BIG;
727             break;
728           case BFD_ENDIAN_LITTLE:
729             default_byte_order = BFD_ENDIAN_LITTLE;
730             break;
731           default:
732             break;
733           }
734     }
735   if (default_byte_order == BFD_ENDIAN_UNKNOWN)
736     {
737       /* look for ``*el-*'' in the target name.  */
738       const char *chp;
739       chp = strchr (target_name, '-');
740       if (chp != NULL
741             && chp - 2 >= target_name
742             && startswith (chp - 2, "el"))
743           default_byte_order = BFD_ENDIAN_LITTLE;
744     }
745   if (default_byte_order == BFD_ENDIAN_UNKNOWN)
746     {
747       /* Wire it to big-endian!!! */
748       default_byte_order = BFD_ENDIAN_BIG;
749     }
750 
751   info.byte_order = default_byte_order;
752   info.byte_order_for_code = info.byte_order;
753 
754   if (! gdbarch_update_p (info))
755     internal_error (_("initialize_current_architecture: Selection of "
756                           "initial architecture failed"));
757 
758   /* Create the ``set architecture'' command appending ``auto'' to the
759      list of architectures.  */
760   {
761     /* Append ``auto''.  */
762     set_architecture_string = "auto";
763     arches.push_back (set_architecture_string);
764     arches.push_back (nullptr);
765     set_show_commands architecture_cmds
766       = add_setshow_enum_cmd ("architecture", class_support,
767                                     arches.data (), &set_architecture_string,
768                                     _("Set architecture of target."),
769                                     _("Show architecture of target."), NULL,
770                                     set_architecture, show_architecture,
771                                     &setlist, &showlist);
772     add_alias_cmd ("processor", architecture_cmds.set, class_support, 1,
773                        &setlist);
774   }
775 }
776 
777 /* Similar to init, but this time fill in the blanks.  Information is
778    obtained from the global "set ..." options and explicitly
779    initialized INFO fields.  */
780 
781 void
gdbarch_info_fill(struct gdbarch_info * info)782 gdbarch_info_fill (struct gdbarch_info *info)
783 {
784   /* "(gdb) set architecture ...".  */
785   if (info->bfd_arch_info == NULL
786       && target_architecture_user)
787     info->bfd_arch_info = target_architecture_user;
788   /* From the file.  */
789   if (info->bfd_arch_info == NULL
790       && info->abfd != NULL
791       && bfd_get_arch (info->abfd) != bfd_arch_unknown
792       && bfd_get_arch (info->abfd) != bfd_arch_obscure)
793     info->bfd_arch_info = bfd_get_arch_info (info->abfd);
794   /* From the target.  */
795   if (info->target_desc != NULL)
796     info->bfd_arch_info = choose_architecture_for_target
797                                  (info->target_desc, info->bfd_arch_info);
798   /* From the default.  */
799   if (info->bfd_arch_info == NULL)
800     info->bfd_arch_info = default_bfd_arch;
801 
802   /* "(gdb) set byte-order ...".  */
803   if (info->byte_order == BFD_ENDIAN_UNKNOWN
804       && target_byte_order_user != BFD_ENDIAN_UNKNOWN)
805     info->byte_order = target_byte_order_user;
806   /* From the INFO struct.  */
807   if (info->byte_order == BFD_ENDIAN_UNKNOWN
808       && info->abfd != NULL)
809     info->byte_order = (bfd_big_endian (info->abfd) ? BFD_ENDIAN_BIG
810                               : bfd_little_endian (info->abfd) ? BFD_ENDIAN_LITTLE
811                               : BFD_ENDIAN_UNKNOWN);
812   /* From the default.  */
813   if (info->byte_order == BFD_ENDIAN_UNKNOWN)
814     info->byte_order = default_byte_order;
815   info->byte_order_for_code = info->byte_order;
816   /* Wire the default to the last selected byte order.  */
817   default_byte_order = info->byte_order;
818 
819   /* "(gdb) set osabi ...".  Handled by gdbarch_lookup_osabi.  */
820   /* From the manual override, or from file.  */
821   if (info->osabi == GDB_OSABI_UNKNOWN)
822     info->osabi = gdbarch_lookup_osabi (info->abfd);
823   /* From the target.  */
824 
825   if (info->osabi == GDB_OSABI_UNKNOWN && info->target_desc != NULL)
826     info->osabi = tdesc_osabi (info->target_desc);
827   /* From the configured default.  */
828 #ifdef GDB_OSABI_DEFAULT
829   if (info->osabi == GDB_OSABI_UNKNOWN)
830     info->osabi = GDB_OSABI_DEFAULT;
831 #endif
832   /* If we still don't know which osabi to pick, pick none.  */
833   if (info->osabi == GDB_OSABI_UNKNOWN)
834     info->osabi = GDB_OSABI_NONE;
835 
836   /* Must have at least filled in the architecture.  */
837   gdb_assert (info->bfd_arch_info != NULL);
838 }
839 
840 /* Return "current" architecture.  If the target is running, this is
841    the architecture of the selected frame.  Otherwise, the "current"
842    architecture defaults to the target architecture.
843 
844    This function should normally be called solely by the command
845    interpreter routines to determine the architecture to execute a
846    command in.  */
847 struct gdbarch *
get_current_arch(void)848 get_current_arch (void)
849 {
850   if (has_stack_frames ())
851     return get_frame_arch (get_selected_frame (NULL));
852   else
853     return current_inferior ()->arch ();
854 }
855 
856 int
default_has_shared_address_space(struct gdbarch * gdbarch)857 default_has_shared_address_space (struct gdbarch *gdbarch)
858 {
859   /* Simply say no.  In most unix-like targets each inferior/process
860      has its own address space.  */
861   return 0;
862 }
863 
864 int
default_fast_tracepoint_valid_at(struct gdbarch * gdbarch,CORE_ADDR addr,std::string * msg)865 default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
866                                           std::string *msg)
867 {
868   /* We don't know if maybe the target has some way to do fast
869      tracepoints that doesn't need gdbarch, so always say yes.  */
870   if (msg)
871     msg->clear ();
872   return 1;
873 }
874 
875 const gdb_byte *
default_breakpoint_from_pc(struct gdbarch * gdbarch,CORE_ADDR * pcptr,int * lenptr)876 default_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
877                                   int *lenptr)
878 {
879   int kind = gdbarch_breakpoint_kind_from_pc (gdbarch, pcptr);
880 
881   return gdbarch_sw_breakpoint_from_kind (gdbarch, kind, lenptr);
882 }
883 int
default_breakpoint_kind_from_current_state(struct gdbarch * gdbarch,struct regcache * regcache,CORE_ADDR * pcptr)884 default_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
885                                                       struct regcache *regcache,
886                                                       CORE_ADDR *pcptr)
887 {
888   return gdbarch_breakpoint_kind_from_pc (gdbarch, pcptr);
889 }
890 
891 
892 void
default_gen_return_address(struct gdbarch * gdbarch,struct agent_expr * ax,struct axs_value * value,CORE_ADDR scope)893 default_gen_return_address (struct gdbarch *gdbarch,
894                                   struct agent_expr *ax, struct axs_value *value,
895                                   CORE_ADDR scope)
896 {
897   error (_("This architecture has no method to collect a return address."));
898 }
899 
900 int
default_return_in_first_hidden_param_p(struct gdbarch * gdbarch,struct type * type)901 default_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
902                                                   struct type *type)
903 {
904   /* Usually, the return value's address is stored the in the "first hidden"
905      parameter if the return value should be passed by reference, as
906      specified in ABI.  */
907   return !(language_pass_by_reference (type).trivially_copyable);
908 }
909 
default_insn_is_call(struct gdbarch * gdbarch,CORE_ADDR addr)910 int default_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
911 {
912   return 0;
913 }
914 
default_insn_is_ret(struct gdbarch * gdbarch,CORE_ADDR addr)915 int default_insn_is_ret (struct gdbarch *gdbarch, CORE_ADDR addr)
916 {
917   return 0;
918 }
919 
default_insn_is_jump(struct gdbarch * gdbarch,CORE_ADDR addr)920 int default_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr)
921 {
922   return 0;
923 }
924 
925 /*  See arch-utils.h.  */
926 
927 bool
default_program_breakpoint_here_p(struct gdbarch * gdbarch,CORE_ADDR address)928 default_program_breakpoint_here_p (struct gdbarch *gdbarch,
929                                            CORE_ADDR address)
930 {
931   int len;
932   const gdb_byte *bpoint = gdbarch_breakpoint_from_pc (gdbarch, &address, &len);
933 
934   /* Software breakpoints unsupported?  */
935   if (bpoint == nullptr)
936     return false;
937 
938   gdb_byte *target_mem = (gdb_byte *) alloca (len);
939 
940   /* Enable the automatic memory restoration from breakpoints while
941      we read the memory.  Otherwise we may find temporary breakpoints, ones
942      inserted by GDB, and flag them as permanent breakpoints.  */
943   scoped_restore restore_memory
944     = make_scoped_restore_show_memory_breakpoints (0);
945 
946   if (target_read_memory (address, target_mem, len) == 0)
947     {
948       /* Check if this is a breakpoint instruction for this architecture,
949            including ones used by GDB.  */
950       if (memcmp (target_mem, bpoint, len) == 0)
951           return true;
952     }
953 
954   return false;
955 }
956 
957 void
default_skip_permanent_breakpoint(struct regcache * regcache)958 default_skip_permanent_breakpoint (struct regcache *regcache)
959 {
960   struct gdbarch *gdbarch = regcache->arch ();
961   CORE_ADDR current_pc = regcache_read_pc (regcache);
962   int bp_len;
963 
964   gdbarch_breakpoint_from_pc (gdbarch, &current_pc, &bp_len);
965   current_pc += bp_len;
966   regcache_write_pc (regcache, current_pc);
967 }
968 
969 CORE_ADDR
default_infcall_mmap(CORE_ADDR size,unsigned prot)970 default_infcall_mmap (CORE_ADDR size, unsigned prot)
971 {
972   error (_("This target does not support inferior memory allocation by mmap."));
973 }
974 
975 void
default_infcall_munmap(CORE_ADDR addr,CORE_ADDR size)976 default_infcall_munmap (CORE_ADDR addr, CORE_ADDR size)
977 {
978   /* Memory reserved by inferior mmap is kept leaked.  */
979 }
980 
981 /* -mcmodel=large is used so that no GOT (Global Offset Table) is needed to be
982    created in inferior memory by GDB (normally it is set by ld.so).  */
983 
984 std::string
default_gcc_target_options(struct gdbarch * gdbarch)985 default_gcc_target_options (struct gdbarch *gdbarch)
986 {
987   return string_printf ("-m%d%s", gdbarch_ptr_bit (gdbarch),
988                               (gdbarch_ptr_bit (gdbarch) == 64
989                                ? " -mcmodel=large" : ""));
990 }
991 
992 /* gdbarch gnu_triplet_regexp method.  */
993 
994 const char *
default_gnu_triplet_regexp(struct gdbarch * gdbarch)995 default_gnu_triplet_regexp (struct gdbarch *gdbarch)
996 {
997   return gdbarch_bfd_arch_info (gdbarch)->arch_name;
998 }
999 
1000 /* Default method for gdbarch_addressable_memory_unit_size.  The default is
1001    based on the bits_per_byte defined in the bfd library for the current
1002    architecture, this is usually 8-bits, and so this function will usually
1003    return 1 indicating 1 byte is 1 octet.  */
1004 
1005 int
default_addressable_memory_unit_size(struct gdbarch * gdbarch)1006 default_addressable_memory_unit_size (struct gdbarch *gdbarch)
1007 {
1008   return gdbarch_bfd_arch_info (gdbarch)->bits_per_byte / 8;
1009 }
1010 
1011 void
default_guess_tracepoint_registers(struct gdbarch * gdbarch,struct regcache * regcache,CORE_ADDR addr)1012 default_guess_tracepoint_registers (struct gdbarch *gdbarch,
1013                                             struct regcache *regcache,
1014                                             CORE_ADDR addr)
1015 {
1016   int pc_regno = gdbarch_pc_regnum (gdbarch);
1017   gdb_byte *regs;
1018 
1019   /* This guessing code below only works if the PC register isn't
1020      a pseudo-register.  The value of a pseudo-register isn't stored
1021      in the (non-readonly) regcache -- instead it's recomputed
1022      (probably from some other cached raw register) whenever the
1023      register is read.  In this case, a custom method implementation
1024      should be used by the architecture.  */
1025   if (pc_regno < 0 || pc_regno >= gdbarch_num_regs (gdbarch))
1026     return;
1027 
1028   regs = (gdb_byte *) alloca (register_size (gdbarch, pc_regno));
1029   store_unsigned_integer (regs, register_size (gdbarch, pc_regno),
1030                                 gdbarch_byte_order (gdbarch), addr);
1031   regcache->raw_supply (pc_regno, regs);
1032 }
1033 
1034 int
default_print_insn(bfd_vma memaddr,disassemble_info * info)1035 default_print_insn (bfd_vma memaddr, disassemble_info *info)
1036 {
1037   disassembler_ftype disassemble_fn;
1038 
1039   disassemble_fn = disassembler (info->arch, info->endian == BFD_ENDIAN_BIG,
1040                                          info->mach, current_program_space->exec_bfd ());
1041 
1042   gdb_assert (disassemble_fn != NULL);
1043   return (*disassemble_fn) (memaddr, info);
1044 }
1045 
1046 /* See arch-utils.h.  */
1047 
1048 CORE_ADDR
gdbarch_skip_prologue_noexcept(gdbarch * gdbarch,CORE_ADDR pc)1049 gdbarch_skip_prologue_noexcept (gdbarch *gdbarch, CORE_ADDR pc) noexcept
1050 {
1051   CORE_ADDR new_pc = pc;
1052 
1053   try
1054     {
1055       new_pc = gdbarch_skip_prologue (gdbarch, pc);
1056     }
1057   catch (const gdb_exception &ex)
1058     {}
1059 
1060   return new_pc;
1061 }
1062 
1063 /* See arch-utils.h.  */
1064 
1065 bool
default_in_indirect_branch_thunk(gdbarch * gdbarch,CORE_ADDR pc)1066 default_in_indirect_branch_thunk (gdbarch *gdbarch, CORE_ADDR pc)
1067 {
1068   return false;
1069 }
1070 
1071 /* See arch-utils.h.  */
1072 
1073 ULONGEST
default_type_align(struct gdbarch * gdbarch,struct type * type)1074 default_type_align (struct gdbarch *gdbarch, struct type *type)
1075 {
1076   return 0;
1077 }
1078 
1079 /* See arch-utils.h.  */
1080 
1081 std::string
default_get_pc_address_flags(const frame_info_ptr & frame,CORE_ADDR pc)1082 default_get_pc_address_flags (const frame_info_ptr &frame, CORE_ADDR pc)
1083 {
1084   return "";
1085 }
1086 
1087 /* See arch-utils.h.  */
1088 void
default_read_core_file_mappings(struct gdbarch * gdbarch,struct bfd * cbfd,read_core_file_mappings_pre_loop_ftype pre_loop_cb,read_core_file_mappings_loop_ftype loop_cb)1089 default_read_core_file_mappings
1090   (struct gdbarch *gdbarch,
1091    struct bfd *cbfd,
1092    read_core_file_mappings_pre_loop_ftype pre_loop_cb,
1093    read_core_file_mappings_loop_ftype loop_cb)
1094 {
1095 }
1096 
1097 /* See arch-utils.h.  */
1098 bool
default_use_target_description_from_corefile_notes(struct gdbarch * gdbarch,struct bfd * corefile_bfd)1099 default_use_target_description_from_corefile_notes (struct gdbarch *gdbarch,
1100                                                                 struct bfd *corefile_bfd)
1101 {
1102   /* Always trust the corefile target description contained in the target
1103      description note.  */
1104   return true;
1105 }
1106 
1107 CORE_ADDR
default_get_return_buf_addr(struct type * val_type,const frame_info_ptr & cur_frame)1108 default_get_return_buf_addr (struct type *val_type,
1109                                    const frame_info_ptr &cur_frame)
1110 {
1111   return 0;
1112 }
1113 
1114 bool
default_dwarf2_omit_typedef_p(struct type * target_type,const char * producer,const char * name)1115 default_dwarf2_omit_typedef_p (struct type *target_type, const char *producer,
1116                                      const char *name)
1117 {
1118   return false;
1119 }
1120 
1121 static CORE_ADDR
default_update_call_site_pc(struct gdbarch * gdbarch,CORE_ADDR pc)1122 default_update_call_site_pc (struct gdbarch *gdbarch, CORE_ADDR pc)
1123 {
1124   return pc;
1125 }
1126 
1127 /* Non-zero if we want to trace architecture code.  */
1128 
1129 #ifndef GDBARCH_DEBUG
1130 #define GDBARCH_DEBUG 0
1131 #endif
1132 unsigned int gdbarch_debug = GDBARCH_DEBUG;
1133 static void
show_gdbarch_debug(struct ui_file * file,int from_tty,struct cmd_list_element * c,const char * value)1134 show_gdbarch_debug (struct ui_file *file, int from_tty,
1135                         struct cmd_list_element *c, const char *value)
1136 {
1137   gdb_printf (file, _("Architecture debugging is %s.\n"), value);
1138 }
1139 
1140 static const char *
pformat(struct gdbarch * gdbarch,const struct floatformat ** format)1141 pformat (struct gdbarch *gdbarch, const struct floatformat **format)
1142 {
1143   if (format == NULL)
1144     return "(null)";
1145 
1146   int format_index = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE ? 1 : 0;
1147   return format[format_index]->name;
1148 }
1149 
1150 static const char *
pstring(const char * string)1151 pstring (const char *string)
1152 {
1153   if (string == NULL)
1154     return "(null)";
1155   return string;
1156 }
1157 
1158 static const char *
pstring_ptr(std::string * string)1159 pstring_ptr (std::string *string)
1160 {
1161   if (string == nullptr)
1162     return "(null)";
1163   return string->c_str ();
1164 }
1165 
1166 /* Helper function to print a list of strings, represented as "const
1167    char *const *".  The list is printed comma-separated.  */
1168 
1169 static const char *
pstring_list(const char * const * list)1170 pstring_list (const char *const *list)
1171 {
1172   static char ret[100];
1173   const char *const *p;
1174   size_t offset = 0;
1175 
1176   if (list == NULL)
1177     return "(null)";
1178 
1179   ret[0] = '\0';
1180   for (p = list; *p != NULL && offset < sizeof (ret); ++p)
1181     {
1182       size_t s = xsnprintf (ret + offset, sizeof (ret) - offset, "%s, ", *p);
1183       offset += 2 + s;
1184     }
1185 
1186   if (offset > 0)
1187     {
1188       gdb_assert (offset - 2 < sizeof (ret));
1189       ret[offset - 2] = '\0';
1190     }
1191 
1192   return ret;
1193 }
1194 
1195 #include "gdbarch.c"
1196 
1197 enum return_value_convention
default_gdbarch_return_value(struct gdbarch * gdbarch,struct value * function,struct type * valtype,struct regcache * regcache,struct value ** read_value,const gdb_byte * writebuf)1198 default_gdbarch_return_value
1199      (struct gdbarch *gdbarch, struct value *function, struct type *valtype,
1200       struct regcache *regcache, struct value **read_value,
1201       const gdb_byte *writebuf)
1202 {
1203   gdb_byte *readbuf = nullptr;
1204 
1205   if (read_value != nullptr)
1206     {
1207       *read_value = value::allocate (valtype);
1208       readbuf = (*read_value)->contents_raw ().data ();
1209     }
1210 
1211   return gdbarch->return_value (gdbarch, function, valtype, regcache,
1212                                         readbuf, writebuf);
1213 }
1214 
gdbarch_obstack(gdbarch * arch)1215 obstack *gdbarch_obstack (gdbarch *arch)
1216 {
1217   return &arch->obstack;
1218 }
1219 
1220 /* See gdbarch.h.  */
1221 
1222 char *
gdbarch_obstack_strdup(struct gdbarch * arch,const char * string)1223 gdbarch_obstack_strdup (struct gdbarch *arch, const char *string)
1224 {
1225   return obstack_strdup (&arch->obstack, string);
1226 }
1227 
1228 /* Free a gdbarch struct.  This should never happen in normal
1229    operation --- once you've created a gdbarch, you keep it around.
1230    However, if an architecture's init function encounters an error
1231    building the structure, it may need to clean up a partially
1232    constructed gdbarch.  */
1233 
1234 void
gdbarch_free(struct gdbarch * arch)1235 gdbarch_free (struct gdbarch *arch)
1236 {
1237   gdb_assert (arch != NULL);
1238   gdb_assert (!arch->initialized_p);
1239   delete arch;
1240 }
1241 
1242 /* See gdbarch.h.  */
1243 
1244 struct gdbarch_tdep_base *
gdbarch_tdep_1(struct gdbarch * gdbarch)1245 gdbarch_tdep_1 (struct gdbarch *gdbarch)
1246 {
1247   if (gdbarch_debug >= 2)
1248     gdb_printf (gdb_stdlog, "gdbarch_tdep_1 called\n");
1249   return gdbarch->tdep.get ();
1250 }
1251 
1252 registry<gdbarch> *
get(gdbarch * arch)1253 registry_accessor<gdbarch>::get (gdbarch *arch)
1254 {
1255   return &arch->registry_fields;
1256 }
1257 
1258 /* Keep a registry of the architectures known by GDB.  */
1259 
1260 struct gdbarch_registration
1261 {
1262   enum bfd_architecture bfd_architecture;
1263   gdbarch_init_ftype *init;
1264   gdbarch_dump_tdep_ftype *dump_tdep;
1265   gdbarch_supports_arch_info_ftype *supports_arch_info;
1266   struct gdbarch_list *arches;
1267   struct gdbarch_registration *next;
1268 };
1269 
1270 static struct gdbarch_registration *gdbarch_registry = NULL;
1271 
1272 std::vector<const char *>
gdbarch_printable_names()1273 gdbarch_printable_names ()
1274 {
1275   /* Accumulate a list of names based on the registered list of
1276      architectures.  */
1277   std::vector<const char *> arches;
1278 
1279   for (gdbarch_registration *rego = gdbarch_registry;
1280        rego != nullptr;
1281        rego = rego->next)
1282     {
1283       const struct bfd_arch_info *ap
1284           = bfd_lookup_arch (rego->bfd_architecture, 0);
1285       if (ap == nullptr)
1286           internal_error (_("gdbarch_architecture_names: multi-arch unknown"));
1287       do
1288           {
1289             if (rego->supports_arch_info == nullptr
1290                 || rego->supports_arch_info (ap))
1291               arches.push_back (ap->printable_name);
1292             ap = ap->next;
1293           }
1294       while (ap != NULL);
1295     }
1296 
1297   return arches;
1298 }
1299 
1300 
1301 void
gdbarch_register(enum bfd_architecture bfd_architecture,gdbarch_init_ftype * init,gdbarch_dump_tdep_ftype * dump_tdep,gdbarch_supports_arch_info_ftype * supports_arch_info)1302 gdbarch_register (enum bfd_architecture bfd_architecture,
1303                       gdbarch_init_ftype *init,
1304                       gdbarch_dump_tdep_ftype *dump_tdep,
1305                       gdbarch_supports_arch_info_ftype *supports_arch_info)
1306 {
1307   struct gdbarch_registration **curr;
1308   const struct bfd_arch_info *bfd_arch_info;
1309 
1310   /* Check that BFD recognizes this architecture */
1311   bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1312   if (bfd_arch_info == NULL)
1313     {
1314       internal_error (_("gdbarch: Attempt to register "
1315                               "unknown architecture (%d)"),
1316                           bfd_architecture);
1317     }
1318   /* Check that we haven't seen this architecture before.  */
1319   for (curr = &gdbarch_registry;
1320        (*curr) != NULL;
1321        curr = &(*curr)->next)
1322     {
1323       if (bfd_architecture == (*curr)->bfd_architecture)
1324           internal_error (_("gdbarch: Duplicate registration "
1325                                 "of architecture (%s)"),
1326                               bfd_arch_info->printable_name);
1327     }
1328   /* log it */
1329   if (gdbarch_debug)
1330     gdb_printf (gdb_stdlog, "gdbarch_register (%s, %s)\n",
1331                     bfd_arch_info->printable_name,
1332                     host_address_to_string (init));
1333   /* Append it */
1334   (*curr) = XNEW (struct gdbarch_registration);
1335   (*curr)->bfd_architecture = bfd_architecture;
1336   (*curr)->init = init;
1337   (*curr)->dump_tdep = dump_tdep;
1338   (*curr)->supports_arch_info = supports_arch_info;
1339   (*curr)->arches = NULL;
1340   (*curr)->next = NULL;
1341 }
1342 
1343 /* Look for an architecture using gdbarch_info.  */
1344 
1345 struct gdbarch_list *
gdbarch_list_lookup_by_info(struct gdbarch_list * arches,const struct gdbarch_info * info)1346 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1347                                    const struct gdbarch_info *info)
1348 {
1349   for (; arches != NULL; arches = arches->next)
1350     {
1351       if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1352           continue;
1353       if (info->byte_order != arches->gdbarch->byte_order)
1354           continue;
1355       if (info->osabi != arches->gdbarch->osabi)
1356           continue;
1357       if (info->target_desc != arches->gdbarch->target_desc)
1358           continue;
1359       return arches;
1360     }
1361   return NULL;
1362 }
1363 
1364 
1365 /* Find an architecture that matches the specified INFO.  Create a new
1366    architecture if needed.  Return that new architecture.  */
1367 
1368 struct gdbarch *
gdbarch_find_by_info(struct gdbarch_info info)1369 gdbarch_find_by_info (struct gdbarch_info info)
1370 {
1371   struct gdbarch *new_gdbarch;
1372   struct gdbarch_registration *rego;
1373 
1374   /* Fill in missing parts of the INFO struct using a number of
1375      sources: "set ..."; INFOabfd supplied; and the global
1376      defaults.  */
1377   gdbarch_info_fill (&info);
1378 
1379   /* Must have found some sort of architecture.  */
1380   gdb_assert (info.bfd_arch_info != nullptr);
1381 
1382   if (gdbarch_debug)
1383     {
1384       gdb_printf (gdb_stdlog,
1385                       "gdbarch_find_by_info: info.bfd_arch_info %s\n",
1386                       (info.bfd_arch_info != nullptr
1387                        ? info.bfd_arch_info->printable_name
1388                        : "(null)"));
1389       gdb_printf (gdb_stdlog,
1390                       "gdbarch_find_by_info: info.byte_order %d (%s)\n",
1391                       info.byte_order,
1392                       (info.byte_order == BFD_ENDIAN_BIG ? "big"
1393                        : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
1394                        : "default"));
1395       gdb_printf (gdb_stdlog,
1396                       "gdbarch_find_by_info: info.osabi %d (%s)\n",
1397                       info.osabi, gdbarch_osabi_name (info.osabi));
1398       gdb_printf (gdb_stdlog,
1399                       "gdbarch_find_by_info: info.abfd %s\n",
1400                       host_address_to_string (info.abfd));
1401     }
1402 
1403   /* Find the tdep code that knows about this architecture.  */
1404   for (rego = gdbarch_registry;
1405        rego != nullptr;
1406        rego = rego->next)
1407     if (rego->bfd_architecture == info.bfd_arch_info->arch)
1408       break;
1409   if (rego == nullptr)
1410     {
1411       if (gdbarch_debug)
1412           gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1413                         "No matching architecture\n");
1414       return nullptr;
1415     }
1416 
1417   /* Ask the tdep code for an architecture that matches "info".  */
1418   new_gdbarch = rego->init (info, rego->arches);
1419 
1420   /* Did the tdep code like it?  No.  Reject the change and revert to
1421      the old architecture.  */
1422   if (new_gdbarch == nullptr)
1423     {
1424       if (gdbarch_debug)
1425           gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1426                         "Target rejected architecture\n");
1427       return nullptr;
1428     }
1429 
1430   /* Is this a pre-existing architecture (as determined by already
1431      being initialized)?  Move it to the front of the architecture
1432      list (keeping the list sorted Most Recently Used).  */
1433   if (new_gdbarch->initialized_p)
1434     {
1435       struct gdbarch_list **list;
1436       struct gdbarch_list *self;
1437       if (gdbarch_debug)
1438           gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1439                         "Previous architecture %s (%s) selected\n",
1440                         host_address_to_string (new_gdbarch),
1441                         new_gdbarch->bfd_arch_info->printable_name);
1442       /* Find the existing arch in the list.  */
1443       for (list = &rego->arches;
1444              (*list) != nullptr && (*list)->gdbarch != new_gdbarch;
1445              list = &(*list)->next);
1446       /* It had better be in the list of architectures.  */
1447       gdb_assert ((*list) != nullptr && (*list)->gdbarch == new_gdbarch);
1448       /* Unlink SELF.  */
1449       self = (*list);
1450       (*list) = self->next;
1451       /* Insert SELF at the front.  */
1452       self->next = rego->arches;
1453       rego->arches = self;
1454       /* Return it.  */
1455       return new_gdbarch;
1456     }
1457 
1458   /* It's a new architecture.  */
1459   if (gdbarch_debug)
1460     gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1461                     "New architecture %s (%s) selected\n",
1462                     host_address_to_string (new_gdbarch),
1463                     new_gdbarch->bfd_arch_info->printable_name);
1464 
1465   /* Insert the new architecture into the front of the architecture
1466      list (keep the list sorted Most Recently Used).  */
1467   {
1468     struct gdbarch_list *self = XNEW (struct gdbarch_list);
1469     self->next = rego->arches;
1470     self->gdbarch = new_gdbarch;
1471     rego->arches = self;
1472   }
1473 
1474   /* Check that the newly installed architecture is valid.  Plug in
1475      any post init values.  */
1476   new_gdbarch->dump_tdep = rego->dump_tdep;
1477   verify_gdbarch (new_gdbarch);
1478   new_gdbarch->initialized_p = true;
1479 
1480   if (gdbarch_debug)
1481     gdbarch_dump (new_gdbarch, gdb_stdlog);
1482 
1483   gdb::observers::new_architecture.notify (new_gdbarch);
1484 
1485   return new_gdbarch;
1486 }
1487 
1488 /* See gdbarch.h.  */
1489 
1490 bool
gdbarch_initialized_p(gdbarch * arch)1491 gdbarch_initialized_p (gdbarch *arch)
1492 {
1493   return arch->initialized_p;
1494 }
1495 
1496 void _initialize_gdbarch_utils ();
1497 void
_initialize_gdbarch_utils()1498 _initialize_gdbarch_utils ()
1499 {
1500   add_setshow_enum_cmd ("endian", class_support,
1501                               endian_enum, &set_endian_string,
1502                               _("Set endianness of target."),
1503                               _("Show endianness of target."),
1504                               NULL, set_endian, show_endian,
1505                               &setlist, &showlist);
1506   add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\
1507 Set architecture debugging."), _("\
1508 Show architecture debugging."), _("\
1509 When non-zero, architecture debugging is enabled."),
1510                                   NULL,
1511                                   show_gdbarch_debug,
1512                                   &setdebuglist, &showdebuglist);
1513 }
1514