xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/arch-utils.c (revision f8cf1a9151c7af1cb0bd8b09c13c66bca599c027)
1 /* Dynamic architecture support for GDB, the GNU debugger.
2 
3    Copyright (C) 1998-2023 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 
22 #include "arch-utils.h"
23 #include "gdbcmd.h"
24 #include "inferior.h"		/* enum CALL_DUMMY_LOCATION et al.  */
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
48 default_displaced_step_hw_singlestep (struct gdbarch *gdbarch)
49 {
50   return !gdbarch_software_single_step_p (gdbarch);
51 }
52 
53 CORE_ADDR
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
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
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
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
106 default_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 
114 bool
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
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 *
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
143 generic_skip_trampoline_code (frame_info_ptr frame, CORE_ADDR pc)
144 {
145   return 0;
146 }
147 
148 CORE_ADDR
149 generic_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
150 {
151   return 0;
152 }
153 
154 int
155 generic_in_solib_return_trampoline (struct gdbarch *gdbarch,
156 				    CORE_ADDR pc, const char *name)
157 {
158   return 0;
159 }
160 
161 int
162 generic_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
163 {
164   return 0;
165 }
166 
167 int
168 default_code_of_frame_writable (struct gdbarch *gdbarch,
169 				frame_info_ptr frame)
170 {
171   return 1;
172 }
173 
174 /* Helper functions for gdbarch_inner_than */
175 
176 int
177 core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs)
178 {
179   return (lhs < rhs);
180 }
181 
182 int
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
191 core_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr)
192 {
193   return addr;
194 }
195 
196 CORE_ADDR
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
204 no_op_reg_to_regnum (struct gdbarch *gdbarch, int reg)
205 {
206   return reg;
207 }
208 
209 void
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
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
226 default_adjust_dwarf2_addr (CORE_ADDR pc)
227 {
228   return pc;
229 }
230 
231 /* See arch-utils.h.  */
232 
233 CORE_ADDR
234 default_adjust_dwarf2_line (CORE_ADDR addr, int rel)
235 {
236   return addr;
237 }
238 
239 /* See arch-utils.h.  */
240 
241 bool
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
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
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 **
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
320 generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
321 			    struct type *type)
322 {
323   return 0;
324 }
325 
326 int
327 default_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
328 {
329   return 0;
330 }
331 
332 int
333 generic_instruction_nullified (struct gdbarch *gdbarch,
334 			       struct regcache *regcache)
335 {
336   return 0;
337 }
338 
339 int
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
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
372 selected_byte_order (void)
373 {
374   return target_byte_order_user;
375 }
376 
377 /* Called by ``show endian''.  */
378 
379 static void
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
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 *
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 *
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
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
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
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 = 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 == target_gdbarch ())
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   set_target_gdbarch (new_gdbarch);
629 
630   return 1;
631 }
632 
633 /* Return the architecture for ABFD.  If no suitable architecture
634    could be find, return NULL.  */
635 
636 struct gdbarch *
637 gdbarch_from_bfd (bfd *abfd)
638 {
639   struct gdbarch_info info;
640 
641   info.abfd = abfd;
642   return gdbarch_find_by_info (info);
643 }
644 
645 /* Set the dynamic target-system-dependent parameters (architecture,
646    byte-order) using information found in the BFD */
647 
648 void
649 set_gdbarch_from_file (bfd *abfd)
650 {
651   struct gdbarch_info info;
652   struct gdbarch *gdbarch;
653 
654   info.abfd = abfd;
655   info.target_desc = target_current_description ();
656   gdbarch = gdbarch_find_by_info (info);
657 
658   if (gdbarch == NULL)
659     error (_("Architecture of file not recognized."));
660   set_target_gdbarch (gdbarch);
661 }
662 
663 /* Initialize the current architecture.  Update the ``set
664    architecture'' command so that it specifies a list of valid
665    architectures.  */
666 
667 #ifdef DEFAULT_BFD_ARCH
668 extern const bfd_arch_info_type DEFAULT_BFD_ARCH;
669 static const bfd_arch_info_type *default_bfd_arch = &DEFAULT_BFD_ARCH;
670 #else
671 static const bfd_arch_info_type *default_bfd_arch;
672 #endif
673 
674 #ifdef DEFAULT_BFD_VEC
675 extern const bfd_target DEFAULT_BFD_VEC;
676 static const bfd_target *default_bfd_vec = &DEFAULT_BFD_VEC;
677 #else
678 static const bfd_target *default_bfd_vec;
679 #endif
680 
681 static enum bfd_endian default_byte_order = BFD_ENDIAN_UNKNOWN;
682 
683 /* Printable names of architectures.  Used as the enum list of the
684    "set arch" command.  */
685 static std::vector<const char *> arches;
686 
687 void
688 initialize_current_architecture (void)
689 {
690   arches = gdbarch_printable_names ();
691 
692   /* Find a default architecture.  */
693   if (default_bfd_arch == NULL)
694     {
695       /* Choose the architecture by taking the first one
696 	 alphabetically.  */
697       const char *chosen = arches[0];
698 
699       for (const char *arch : arches)
700 	{
701 	  if (strcmp (arch, chosen) < 0)
702 	    chosen = arch;
703 	}
704 
705       if (chosen == NULL)
706 	internal_error (_("initialize_current_architecture: No arch"));
707 
708       default_bfd_arch = bfd_scan_arch (chosen);
709       if (default_bfd_arch == NULL)
710 	internal_error (_("initialize_current_architecture: Arch not found"));
711     }
712 
713   gdbarch_info info;
714   info.bfd_arch_info = default_bfd_arch;
715 
716   /* Take several guesses at a byte order.  */
717   if (default_byte_order == BFD_ENDIAN_UNKNOWN
718       && default_bfd_vec != NULL)
719     {
720       /* Extract BFD's default vector's byte order.  */
721       switch (default_bfd_vec->byteorder)
722 	{
723 	case BFD_ENDIAN_BIG:
724 	  default_byte_order = BFD_ENDIAN_BIG;
725 	  break;
726 	case BFD_ENDIAN_LITTLE:
727 	  default_byte_order = BFD_ENDIAN_LITTLE;
728 	  break;
729 	default:
730 	  break;
731 	}
732     }
733   if (default_byte_order == BFD_ENDIAN_UNKNOWN)
734     {
735       /* look for ``*el-*'' in the target name.  */
736       const char *chp;
737       chp = strchr (target_name, '-');
738       if (chp != NULL
739 	  && chp - 2 >= target_name
740 	  && startswith (chp - 2, "el"))
741 	default_byte_order = BFD_ENDIAN_LITTLE;
742     }
743   if (default_byte_order == BFD_ENDIAN_UNKNOWN)
744     {
745       /* Wire it to big-endian!!! */
746       default_byte_order = BFD_ENDIAN_BIG;
747     }
748 
749   info.byte_order = default_byte_order;
750   info.byte_order_for_code = info.byte_order;
751 
752   if (! gdbarch_update_p (info))
753     internal_error (_("initialize_current_architecture: Selection of "
754 		      "initial architecture failed"));
755 
756   /* Create the ``set architecture'' command appending ``auto'' to the
757      list of architectures.  */
758   {
759     /* Append ``auto''.  */
760     set_architecture_string = "auto";
761     arches.push_back (set_architecture_string);
762     arches.push_back (nullptr);
763     set_show_commands architecture_cmds
764       = add_setshow_enum_cmd ("architecture", class_support,
765 			      arches.data (), &set_architecture_string,
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);
772   }
773 }
774 
775 /* Similar to init, but this time fill in the blanks.  Information is
776    obtained from the global "set ..." options and explicitly
777    initialized INFO fields.  */
778 
779 void
780 gdbarch_info_fill (struct gdbarch_info *info)
781 {
782   /* "(gdb) set architecture ...".  */
783   if (info->bfd_arch_info == NULL
784       && target_architecture_user)
785     info->bfd_arch_info = target_architecture_user;
786   /* From the file.  */
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);
792   /* From the target.  */
793   if (info->target_desc != NULL)
794     info->bfd_arch_info = choose_architecture_for_target
795 			   (info->target_desc, info->bfd_arch_info);
796   /* From the default.  */
797   if (info->bfd_arch_info == NULL)
798     info->bfd_arch_info = default_bfd_arch;
799 
800   /* "(gdb) set byte-order ...".  */
801   if (info->byte_order == BFD_ENDIAN_UNKNOWN
802       && target_byte_order_user != BFD_ENDIAN_UNKNOWN)
803     info->byte_order = target_byte_order_user;
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
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;
813   info->byte_order_for_code = info->byte_order;
814   /* Wire the default to the last selected byte order.  */
815   default_byte_order = info->byte_order;
816 
817   /* "(gdb) set osabi ...".  Handled by gdbarch_lookup_osabi.  */
818   /* From the manual override, or from file.  */
819   if (info->osabi == GDB_OSABI_UNKNOWN)
820     info->osabi = gdbarch_lookup_osabi (info->abfd);
821   /* From the target.  */
822 
823   if (info->osabi == GDB_OSABI_UNKNOWN && info->target_desc != NULL)
824     info->osabi = tdesc_osabi (info->target_desc);
825   /* From the configured default.  */
826 #ifdef GDB_OSABI_DEFAULT
827   if (info->osabi == GDB_OSABI_UNKNOWN)
828     info->osabi = GDB_OSABI_DEFAULT;
829 #endif
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;
833 
834   /* Must have at least filled in the architecture.  */
835   gdb_assert (info->bfd_arch_info != NULL);
836 }
837 
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.
841 
842    This function should normally be called solely by the command
843    interpreter routines to determine the architecture to execute a
844    command in.  */
845 struct gdbarch *
846 get_current_arch (void)
847 {
848   if (has_stack_frames ())
849     return get_frame_arch (get_selected_frame (NULL));
850   else
851     return target_gdbarch ();
852 }
853 
854 int
855 default_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 
862 int
863 default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
864 				  std::string *msg)
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)
869     msg->clear ();
870   return 1;
871 }
872 
873 const gdb_byte *
874 default_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 }
881 int
882 default_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 
889 
890 void
891 default_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 
898 int
899 default_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.  */
905   return !(language_pass_by_reference (type).trivially_copyable);
906 }
907 
908 int default_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
909 {
910   return 0;
911 }
912 
913 int default_insn_is_ret (struct gdbarch *gdbarch, CORE_ADDR addr)
914 {
915   return 0;
916 }
917 
918 int default_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr)
919 {
920   return 0;
921 }
922 
923 /*  See arch-utils.h.  */
924 
925 bool
926 default_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 
955 void
956 default_skip_permanent_breakpoint (struct regcache *regcache)
957 {
958   struct gdbarch *gdbarch = regcache->arch ();
959   CORE_ADDR current_pc = regcache_read_pc (regcache);
960   int bp_len;
961 
962   gdbarch_breakpoint_from_pc (gdbarch, &current_pc, &bp_len);
963   current_pc += bp_len;
964   regcache_write_pc (regcache, current_pc);
965 }
966 
967 CORE_ADDR
968 default_infcall_mmap (CORE_ADDR size, unsigned prot)
969 {
970   error (_("This target does not support inferior memory allocation by mmap."));
971 }
972 
973 void
974 default_infcall_munmap (CORE_ADDR addr, CORE_ADDR size)
975 {
976   /* Memory reserved by inferior mmap is kept leaked.  */
977 }
978 
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 
982 std::string
983 default_gcc_target_options (struct gdbarch *gdbarch)
984 {
985   return string_printf ("-m%d%s", gdbarch_ptr_bit (gdbarch),
986 			(gdbarch_ptr_bit (gdbarch) == 64
987 			 ? " -mcmodel=large" : ""));
988 }
989 
990 /* gdbarch gnu_triplet_regexp method.  */
991 
992 const char *
993 default_gnu_triplet_regexp (struct gdbarch *gdbarch)
994 {
995   return gdbarch_bfd_arch_info (gdbarch)->arch_name;
996 }
997 
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.  */
1002 
1003 int
1004 default_addressable_memory_unit_size (struct gdbarch *gdbarch)
1005 {
1006   return gdbarch_bfd_arch_info (gdbarch)->bits_per_byte / 8;
1007 }
1008 
1009 void
1010 default_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);
1029   regcache->raw_supply (pc_regno, regs);
1030 }
1031 
1032 int
1033 default_print_insn (bfd_vma memaddr, disassemble_info *info)
1034 {
1035   disassembler_ftype disassemble_fn;
1036 
1037   disassemble_fn = disassembler (info->arch, info->endian == BFD_ENDIAN_BIG,
1038 				 info->mach, current_program_space->exec_bfd ());
1039 
1040   gdb_assert (disassemble_fn != NULL);
1041   return (*disassemble_fn) (memaddr, info);
1042 }
1043 
1044 /* See arch-utils.h.  */
1045 
1046 CORE_ADDR
1047 gdbarch_skip_prologue_noexcept (gdbarch *gdbarch, CORE_ADDR pc) noexcept
1048 {
1049   CORE_ADDR new_pc = pc;
1050 
1051   try
1052     {
1053       new_pc = gdbarch_skip_prologue (gdbarch, pc);
1054     }
1055   catch (const gdb_exception &ex)
1056     {}
1057 
1058   return new_pc;
1059 }
1060 
1061 /* See arch-utils.h.  */
1062 
1063 bool
1064 default_in_indirect_branch_thunk (gdbarch *gdbarch, CORE_ADDR pc)
1065 {
1066   return false;
1067 }
1068 
1069 /* See arch-utils.h.  */
1070 
1071 ULONGEST
1072 default_type_align (struct gdbarch *gdbarch, struct type *type)
1073 {
1074   return 0;
1075 }
1076 
1077 /* See arch-utils.h.  */
1078 
1079 std::string
1080 default_get_pc_address_flags (frame_info_ptr frame, CORE_ADDR pc)
1081 {
1082   return "";
1083 }
1084 
1085 /* See arch-utils.h.  */
1086 void
1087 default_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)
1092 {
1093 }
1094 
1095 CORE_ADDR
1096 default_get_return_buf_addr (struct type *val_type, frame_info_ptr cur_frame)
1097 {
1098   return 0;
1099 }
1100 
1101 /* Non-zero if we want to trace architecture code.  */
1102 
1103 #ifndef GDBARCH_DEBUG
1104 #define GDBARCH_DEBUG 0
1105 #endif
1106 unsigned int gdbarch_debug = GDBARCH_DEBUG;
1107 static void
1108 show_gdbarch_debug (struct ui_file *file, int from_tty,
1109 		    struct cmd_list_element *c, const char *value)
1110 {
1111   gdb_printf (file, _("Architecture debugging is %s.\n"), value);
1112 }
1113 
1114 static const char *
1115 pformat (struct gdbarch *gdbarch, const struct floatformat **format)
1116 {
1117   if (format == NULL)
1118     return "(null)";
1119 
1120   int format_index = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE ? 1 : 0;
1121   return format[format_index]->name;
1122 }
1123 
1124 static const char *
1125 pstring (const char *string)
1126 {
1127   if (string == NULL)
1128     return "(null)";
1129   return string;
1130 }
1131 
1132 static const char *
1133 pstring_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 
1143 static const char *
1144 pstring_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 
1171 obstack *gdbarch_obstack (gdbarch *arch)
1172 {
1173   return &arch->obstack;
1174 }
1175 
1176 /* See gdbarch.h.  */
1177 
1178 char *
1179 gdbarch_obstack_strdup (struct gdbarch *arch, const char *string)
1180 {
1181   return obstack_strdup (&arch->obstack, string);
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 
1191 void
1192 gdbarch_free (struct gdbarch *arch)
1193 {
1194   gdb_assert (arch != NULL);
1195   gdb_assert (!arch->initialized_p);
1196   delete arch;
1197 }
1198 
1199 /* See gdbarch.h.  */
1200 
1201 struct gdbarch_tdep_base *
1202 gdbarch_tdep_1 (struct gdbarch *gdbarch)
1203 {
1204   if (gdbarch_debug >= 2)
1205     gdb_printf (gdb_stdlog, "gdbarch_tdep_1 called\n");
1206   return gdbarch->tdep;
1207 }
1208 
1209 registry<gdbarch> *
1210 registry_accessor<gdbarch>::get (gdbarch *arch)
1211 {
1212   return &arch->registry_fields;
1213 }
1214 
1215 /* Keep a registry of the architectures known by GDB.  */
1216 
1217 struct 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 
1226 static struct gdbarch_registration *gdbarch_registry = NULL;
1227 
1228 std::vector<const char *>
1229 gdbarch_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)
1242 	internal_error (_("gdbarch_architecture_names: multi-arch unknown"));
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 
1255 void
1256 gdbarch_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     {
1267       internal_error (_("gdbarch: Attempt to register "
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)
1277 	internal_error (_("gdbarch: Duplicate registration "
1278 			  "of architecture (%s)"),
1279 			bfd_arch_info->printable_name);
1280     }
1281   /* log it */
1282   if (gdbarch_debug)
1283     gdb_printf (gdb_stdlog, "gdbarch_register (%s, %s)\n",
1284 		bfd_arch_info->printable_name,
1285 		host_address_to_string (init));
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 
1295 /* Look for an architecture using gdbarch_info.  */
1296 
1297 struct gdbarch_list *
1298 gdbarch_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 
1320 struct gdbarch *
1321 gdbarch_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.  */
1332   gdb_assert (info.bfd_arch_info != nullptr);
1333 
1334   if (gdbarch_debug)
1335     {
1336       gdb_printf (gdb_stdlog,
1337 		  "gdbarch_find_by_info: info.bfd_arch_info %s\n",
1338 		  (info.bfd_arch_info != nullptr
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));
1353     }
1354 
1355   /* Find the tdep code that knows about this architecture.  */
1356   for (rego = gdbarch_registry;
1357        rego != nullptr;
1358        rego = rego->next)
1359     if (rego->bfd_architecture == info.bfd_arch_info->arch)
1360       break;
1361   if (rego == nullptr)
1362     {
1363       if (gdbarch_debug)
1364 	gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1365 		    "No matching architecture\n");
1366       return nullptr;
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.  */
1374   if (new_gdbarch == nullptr)
1375     {
1376       if (gdbarch_debug)
1377 	gdb_printf (gdb_stdlog, "gdbarch_find_by_info: "
1378 		    "Target rejected architecture\n");
1379       return nullptr;
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)
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);
1394       /* Find the existing arch in the list.  */
1395       for (list = &rego->arches;
1396 	   (*list) != nullptr && (*list)->gdbarch != new_gdbarch;
1397 	   list = &(*list)->next);
1398       /* It had better be in the list of architectures.  */
1399       gdb_assert ((*list) != nullptr && (*list)->gdbarch == new_gdbarch);
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)
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);
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);
1430   new_gdbarch->initialized_p = true;
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 
1440 void
1441 set_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 
1452 struct gdbarch *
1453 target_gdbarch (void)
1454 {
1455   return current_inferior ()->gdbarch;
1456 }
1457 
1458 void _initialize_gdbarch_utils ();
1459 void
1460 _initialize_gdbarch_utils ()
1461 {
1462   add_setshow_enum_cmd ("endian", class_support,
1463 			endian_enum, &set_endian_string,
1464 			_("Set endianness of target."),
1465 			_("Show endianness of target."),
1466 			NULL, set_endian, show_endian,
1467 			&setlist, &showlist);
1468   add_setshow_zuinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\
1469 Set architecture debugging."), _("\
1470 Show architecture debugging."), _("\
1471 When non-zero, architecture debugging is enabled."),
1472 			    NULL,
1473 			    show_gdbarch_debug,
1474 			    &setdebuglist, &showdebuglist);
1475 }
1476