* MAINTAINERS (Responsible Maintainers/misc): Add myself
[deliverable/binutils-gdb.git] / gdb / arch-utils.c
CommitLineData
c0e8c252 1/* Dynamic architecture support for GDB, the GNU debugger.
f4f9705a 2
0b302171 3 Copyright (C) 1998-2012 Free Software Foundation, Inc.
c0e8c252
AC
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c0e8c252
AC
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c0e8c252
AC
19
20#include "defs.h"
21
fb6ecb0f 22#include "arch-utils.h"
192cb3d4 23#include "buildsym.h"
c0e8c252 24#include "gdbcmd.h"
0e2de366 25#include "inferior.h" /* enum CALL_DUMMY_LOCATION et al. */
5f8a3188 26#include "gdb_string.h"
fbec36e2 27#include "regcache.h"
39d4ef09 28#include "gdb_assert.h"
4182591f 29#include "sim-regno.h"
750eb019 30#include "gdbcore.h"
bf922ad9 31#include "osabi.h"
424163ea 32#include "target-descriptions.h"
237fc4c9 33#include "objfiles.h"
18648a37 34#include "language.h"
bf922ad9 35
1ba607ad
AC
36#include "version.h"
37
f0d4cc9e
AC
38#include "floatformat.h"
39
1fd35568 40
237fc4c9
PA
41struct displaced_step_closure *
42simple_displaced_step_copy_insn (struct gdbarch *gdbarch,
43 CORE_ADDR from, CORE_ADDR to,
44 struct regcache *regs)
45{
46 size_t len = gdbarch_max_insn_length (gdbarch);
47 gdb_byte *buf = xmalloc (len);
48
49 read_memory (from, buf, len);
50 write_memory (to, buf, len);
51
52 if (debug_displaced)
53 {
5af949e3
UW
54 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
55 paddress (gdbarch, from), paddress (gdbarch, to));
237fc4c9
PA
56 displaced_step_dump_bytes (gdb_stdlog, buf, len);
57 }
58
59 return (struct displaced_step_closure *) buf;
60}
61
62
63void
64simple_displaced_step_free_closure (struct gdbarch *gdbarch,
65 struct displaced_step_closure *closure)
66{
67 xfree (closure);
68}
69
99e40580
UW
70int
71default_displaced_step_hw_singlestep (struct gdbarch *gdbarch,
72 struct displaced_step_closure *closure)
73{
74 return !gdbarch_software_single_step_p (gdbarch);
75}
237fc4c9
PA
76
77CORE_ADDR
78displaced_step_at_entry_point (struct gdbarch *gdbarch)
79{
80 CORE_ADDR addr;
81 int bp_len;
82
83 addr = entry_point_address ();
84
237fc4c9
PA
85 /* Inferior calls also use the entry point as a breakpoint location.
86 We don't want displaced stepping to interfere with those
87 breakpoints, so leave space. */
88 gdbarch_breakpoint_from_pc (gdbarch, &addr, &bp_len);
5931a2fa 89 addr += bp_len * 2;
237fc4c9
PA
90
91 return addr;
92}
93
4182591f 94int
e7faf938 95legacy_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4182591f
AC
96{
97 /* Only makes sense to supply raw registers. */
e7faf938 98 gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
4182591f
AC
99 /* NOTE: cagney/2002-05-13: The old code did it this way and it is
100 suspected that some GDB/SIM combinations may rely on this
101 behavour. The default should be one2one_register_sim_regno
102 (below). */
e7faf938
MD
103 if (gdbarch_register_name (gdbarch, regnum) != NULL
104 && gdbarch_register_name (gdbarch, regnum)[0] != '\0')
4182591f
AC
105 return regnum;
106 else
107 return LEGACY_SIM_REGNO_IGNORE;
108}
109
bdcd319a 110CORE_ADDR
52f729a7 111generic_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
bdcd319a
CV
112{
113 return 0;
114}
115
dea0c52f 116CORE_ADDR
4c8c40e6 117generic_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
dea0c52f
MK
118{
119 return 0;
120}
121
d50355b6 122int
e17a4113 123generic_in_solib_return_trampoline (struct gdbarch *gdbarch,
2c02bd72 124 CORE_ADDR pc, const char *name)
d50355b6
MS
125{
126 return 0;
127}
128
c12260ac
CV
129int
130generic_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
131{
132 return 0;
133}
134
4d1e7dd1 135/* Helper functions for gdbarch_inner_than */
3339cf8b
AC
136
137int
fba45db2 138core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs)
3339cf8b
AC
139{
140 return (lhs < rhs);
141}
142
143int
fba45db2 144core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs)
3339cf8b
AC
145{
146 return (lhs > rhs);
147}
148
0e2de366 149/* Misc helper functions for targets. */
193e3b1a 150
f517ea4e 151CORE_ADDR
24568a2c 152core_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr)
f517ea4e
PS
153{
154 return addr;
155}
156
e2d0e7eb
AC
157CORE_ADDR
158convert_from_func_ptr_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr,
159 struct target_ops *targ)
160{
161 return addr;
162}
163
88c72b7d 164int
d3f73121 165no_op_reg_to_regnum (struct gdbarch *gdbarch, int reg)
88c72b7d
AC
166{
167 return reg;
168}
169
a2cf933a
EZ
170void
171default_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
172{
173 return;
174}
175
176void
177default_coff_make_msymbol_special (int val, struct minimal_symbol *msym)
178{
179 return;
180}
181
01fb7433 182int
64a3914f 183cannot_register_not (struct gdbarch *gdbarch, int regnum)
01fb7433
AC
184{
185 return 0;
186}
39d4ef09
AC
187
188/* Legacy version of target_virtual_frame_pointer(). Assumes that
0e2de366
MS
189 there is an gdbarch_deprecated_fp_regnum and that it is the same,
190 cooked or raw. */
39d4ef09
AC
191
192void
a54fba4c
MD
193legacy_virtual_frame_pointer (struct gdbarch *gdbarch,
194 CORE_ADDR pc,
39d4ef09
AC
195 int *frame_regnum,
196 LONGEST *frame_offset)
197{
20bcf01c
AC
198 /* FIXME: cagney/2002-09-13: This code is used when identifying the
199 frame pointer of the current PC. It is assuming that a single
200 register and an offset can determine this. I think it should
201 instead generate a byte code expression as that would work better
202 with things like Dwarf2's CFI. */
a54fba4c
MD
203 if (gdbarch_deprecated_fp_regnum (gdbarch) >= 0
204 && gdbarch_deprecated_fp_regnum (gdbarch)
205 < gdbarch_num_regs (gdbarch))
206 *frame_regnum = gdbarch_deprecated_fp_regnum (gdbarch);
207 else if (gdbarch_sp_regnum (gdbarch) >= 0
208 && gdbarch_sp_regnum (gdbarch)
209 < gdbarch_num_regs (gdbarch))
210 *frame_regnum = gdbarch_sp_regnum (gdbarch);
20bcf01c
AC
211 else
212 /* Should this be an internal error? I guess so, it is reflecting
213 an architectural limitation in the current design. */
0e2de366
MS
214 internal_error (__FILE__, __LINE__,
215 _("No virtual frame pointer available"));
39d4ef09
AC
216 *frame_offset = 0;
217}
46cd78fb 218
d7bd68ca 219\f
13d01224 220int
76a8ddb9
UW
221generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
222 struct type *type)
13d01224 223{
9730f241 224 return 0;
13d01224
AC
225}
226
192cb3d4
MK
227int
228default_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
229{
192cb3d4
MK
230 return 0;
231}
232
3ca64954
RC
233int
234generic_instruction_nullified (struct gdbarch *gdbarch,
235 struct regcache *regcache)
236{
237 return 0;
238}
239
123dc839
DJ
240int
241default_remote_register_number (struct gdbarch *gdbarch,
242 int regno)
243{
244 return regno;
245}
246
01fb7433 247\f
b4a20239
AC
248/* Functions to manipulate the endianness of the target. */
249
7a107747 250static int target_byte_order_user = BFD_ENDIAN_UNKNOWN;
b4a20239 251
53904c9e
AC
252static const char endian_big[] = "big";
253static const char endian_little[] = "little";
254static const char endian_auto[] = "auto";
40478521 255static const char *const endian_enum[] =
b4a20239
AC
256{
257 endian_big,
258 endian_little,
259 endian_auto,
260 NULL,
261};
53904c9e 262static const char *set_endian_string;
b4a20239 263
b6d373df
DJ
264enum bfd_endian
265selected_byte_order (void)
266{
e17c207e 267 return target_byte_order_user;
b6d373df
DJ
268}
269
b4a20239
AC
270/* Called by ``show endian''. */
271
272static void
7ab04401
AC
273show_endian (struct ui_file *file, int from_tty, struct cmd_list_element *c,
274 const char *value)
b4a20239 275{
7b6b9e83 276 if (target_byte_order_user == BFD_ENDIAN_UNKNOWN)
e17c207e 277 if (gdbarch_byte_order (get_current_arch ()) == BFD_ENDIAN_BIG)
7ab04401
AC
278 fprintf_unfiltered (file, _("The target endianness is set automatically "
279 "(currently big endian)\n"));
edefbb7c 280 else
7ab04401 281 fprintf_unfiltered (file, _("The target endianness is set automatically "
3e43a32a 282 "(currently little endian)\n"));
b4a20239 283 else
e17c207e 284 if (target_byte_order_user == BFD_ENDIAN_BIG)
7ab04401
AC
285 fprintf_unfiltered (file,
286 _("The target is assumed to be big endian\n"));
287 else
288 fprintf_unfiltered (file,
289 _("The target is assumed to be little endian\n"));
b4a20239
AC
290}
291
292static void
293set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c)
294{
7a107747
DJ
295 struct gdbarch_info info;
296
297 gdbarch_info_init (&info);
298
3fd3d7d2 299 if (set_endian_string == endian_auto)
b4a20239 300 {
7a107747
DJ
301 target_byte_order_user = BFD_ENDIAN_UNKNOWN;
302 if (! gdbarch_update_p (info))
303 internal_error (__FILE__, __LINE__,
304 _("set_endian: architecture update failed"));
b4a20239
AC
305 }
306 else if (set_endian_string == endian_little)
307 {
d90cf509
AC
308 info.byte_order = BFD_ENDIAN_LITTLE;
309 if (! gdbarch_update_p (info))
edefbb7c 310 printf_unfiltered (_("Little endian target not supported by GDB\n"));
7a107747
DJ
311 else
312 target_byte_order_user = BFD_ENDIAN_LITTLE;
b4a20239
AC
313 }
314 else if (set_endian_string == endian_big)
315 {
d90cf509
AC
316 info.byte_order = BFD_ENDIAN_BIG;
317 if (! gdbarch_update_p (info))
edefbb7c 318 printf_unfiltered (_("Big endian target not supported by GDB\n"));
7a107747
DJ
319 else
320 target_byte_order_user = BFD_ENDIAN_BIG;
b4a20239
AC
321 }
322 else
8e65ff28 323 internal_error (__FILE__, __LINE__,
edefbb7c 324 _("set_endian: bad value"));
7a107747 325
7ab04401 326 show_endian (gdb_stdout, from_tty, NULL, NULL);
b4a20239
AC
327}
328
23181151 329/* Given SELECTED, a currently selected BFD architecture, and
e35359c5
UW
330 TARGET_DESC, the current target description, return what
331 architecture to use.
332
333 SELECTED may be NULL, in which case we return the architecture
334 associated with TARGET_DESC. If SELECTED specifies a variant
335 of the architecture associtated with TARGET_DESC, return the
336 more specific of the two.
337
338 If SELECTED is a different architecture, but it is accepted as
339 compatible by the target, we can use the target architecture.
340
341 If SELECTED is obviously incompatible, warn the user. */
23181151
DJ
342
343static const struct bfd_arch_info *
e35359c5
UW
344choose_architecture_for_target (const struct target_desc *target_desc,
345 const struct bfd_arch_info *selected)
23181151 346{
e35359c5 347 const struct bfd_arch_info *from_target = tdesc_architecture (target_desc);
23181151
DJ
348 const struct bfd_arch_info *compat1, *compat2;
349
350 if (selected == NULL)
351 return from_target;
352
353 if (from_target == NULL)
354 return selected;
355
356 /* struct bfd_arch_info objects are singletons: that is, there's
357 supposed to be exactly one instance for a given machine. So you
358 can tell whether two are equivalent by comparing pointers. */
359 if (from_target == selected)
360 return selected;
361
362 /* BFD's 'A->compatible (A, B)' functions return zero if A and B are
363 incompatible. But if they are compatible, it returns the 'more
364 featureful' of the two arches. That is, if A can run code
365 written for B, but B can't run code written for A, then it'll
366 return A.
367
368 Some targets (e.g. MIPS as of 2006-12-04) don't fully
369 implement this, instead always returning NULL or the first
370 argument. We detect that case by checking both directions. */
371
372 compat1 = selected->compatible (selected, from_target);
373 compat2 = from_target->compatible (from_target, selected);
374
375 if (compat1 == NULL && compat2 == NULL)
376 {
0e2de366
MS
377 /* BFD considers the architectures incompatible. Check our
378 target description whether it accepts SELECTED as compatible
379 anyway. */
e35359c5
UW
380 if (tdesc_compatible_p (target_desc, selected))
381 return from_target;
382
23181151
DJ
383 warning (_("Selected architecture %s is not compatible "
384 "with reported target architecture %s"),
385 selected->printable_name, from_target->printable_name);
386 return selected;
387 }
388
389 if (compat1 == NULL)
390 return compat2;
391 if (compat2 == NULL)
392 return compat1;
393 if (compat1 == compat2)
394 return compat1;
395
0e2de366
MS
396 /* If the two didn't match, but one of them was a default
397 architecture, assume the more specific one is correct. This
398 handles the case where an executable or target description just
399 says "mips", but the other knows which MIPS variant. */
23181151
DJ
400 if (compat1->the_default)
401 return compat2;
402 if (compat2->the_default)
403 return compat1;
404
405 /* We have no idea which one is better. This is a bug, but not
406 a critical problem; warn the user. */
407 warning (_("Selected architecture %s is ambiguous with "
408 "reported target architecture %s"),
409 selected->printable_name, from_target->printable_name);
410 return selected;
411}
412
0e2de366 413/* Functions to manipulate the architecture of the target. */
b4a20239
AC
414
415enum set_arch { set_arch_auto, set_arch_manual };
416
7a107747 417static const struct bfd_arch_info *target_architecture_user;
b4a20239 418
a8cf2722
AC
419static const char *set_architecture_string;
420
421const char *
422selected_architecture_name (void)
423{
7a107747 424 if (target_architecture_user == NULL)
a8cf2722
AC
425 return NULL;
426 else
427 return set_architecture_string;
428}
b4a20239 429
b4a20239 430/* Called if the user enters ``show architecture'' without an
0e2de366 431 argument. */
b4a20239
AC
432
433static void
7ab04401
AC
434show_architecture (struct ui_file *file, int from_tty,
435 struct cmd_list_element *c, const char *value)
b4a20239 436{
7a107747 437 if (target_architecture_user == NULL)
3e43a32a
MS
438 fprintf_filtered (file, _("The target architecture is set "
439 "automatically (currently %s)\n"),
440 gdbarch_bfd_arch_info (get_current_arch ())->printable_name);
b4a20239 441 else
3e43a32a
MS
442 fprintf_filtered (file, _("The target architecture is assumed to be %s\n"),
443 set_architecture_string);
b4a20239
AC
444}
445
446
447/* Called if the user enters ``set architecture'' with or without an
0e2de366 448 argument. */
b4a20239
AC
449
450static void
451set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
452{
7a107747
DJ
453 struct gdbarch_info info;
454
455 gdbarch_info_init (&info);
456
b4a20239
AC
457 if (strcmp (set_architecture_string, "auto") == 0)
458 {
7a107747
DJ
459 target_architecture_user = NULL;
460 if (!gdbarch_update_p (info))
461 internal_error (__FILE__, __LINE__,
462 _("could not select an architecture automatically"));
b4a20239 463 }
d90cf509 464 else
b4a20239 465 {
b4a20239
AC
466 info.bfd_arch_info = bfd_scan_arch (set_architecture_string);
467 if (info.bfd_arch_info == NULL)
8e65ff28 468 internal_error (__FILE__, __LINE__,
edefbb7c 469 _("set_architecture: bfd_scan_arch failed"));
16f33e29 470 if (gdbarch_update_p (info))
7a107747 471 target_architecture_user = info.bfd_arch_info;
b4a20239 472 else
edefbb7c 473 printf_unfiltered (_("Architecture `%s' not recognized.\n"),
b4a20239
AC
474 set_architecture_string);
475 }
7ab04401 476 show_architecture (gdb_stdout, from_tty, NULL, NULL);
b4a20239
AC
477}
478
ebdba546
AC
479/* Try to select a global architecture that matches "info". Return
480 non-zero if the attempt succeds. */
481int
482gdbarch_update_p (struct gdbarch_info info)
483{
a7f1256d
UW
484 struct gdbarch *new_gdbarch;
485
486 /* Check for the current file. */
487 if (info.abfd == NULL)
488 info.abfd = exec_bfd;
489 if (info.abfd == NULL)
490 info.abfd = core_bfd;
491
492 /* Check for the current target description. */
493 if (info.target_desc == NULL)
494 info.target_desc = target_current_description ();
495
496 new_gdbarch = gdbarch_find_by_info (info);
ebdba546
AC
497
498 /* If there no architecture by that name, reject the request. */
499 if (new_gdbarch == NULL)
500 {
501 if (gdbarch_debug)
502 fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
503 "Architecture not found\n");
504 return 0;
505 }
506
507 /* If it is the same old architecture, accept the request (but don't
508 swap anything). */
f5656ead 509 if (new_gdbarch == target_gdbarch ())
ebdba546
AC
510 {
511 if (gdbarch_debug)
512 fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
e3cb3832
JB
513 "Architecture %s (%s) unchanged\n",
514 host_address_to_string (new_gdbarch),
ebdba546
AC
515 gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
516 return 1;
517 }
518
519 /* It's a new architecture, swap it in. */
520 if (gdbarch_debug)
521 fprintf_unfiltered (gdb_stdlog, "gdbarch_update_p: "
e3cb3832
JB
522 "New architecture %s (%s) selected\n",
523 host_address_to_string (new_gdbarch),
ebdba546 524 gdbarch_bfd_arch_info (new_gdbarch)->printable_name);
59837fe0 525 deprecated_target_gdbarch_select_hack (new_gdbarch);
ebdba546
AC
526
527 return 1;
528}
529
2b026650
MK
530/* Return the architecture for ABFD. If no suitable architecture
531 could be find, return NULL. */
532
533struct gdbarch *
534gdbarch_from_bfd (bfd *abfd)
b4a20239 535{
d90cf509
AC
536 struct gdbarch_info info;
537 gdbarch_info_init (&info);
05c547f6 538
d90cf509 539 info.abfd = abfd;
b60eb90d 540 return gdbarch_find_by_info (info);
2b026650
MK
541}
542
543/* Set the dynamic target-system-dependent parameters (architecture,
544 byte-order) using information found in the BFD */
545
546void
547set_gdbarch_from_file (bfd *abfd)
548{
a7f1256d 549 struct gdbarch_info info;
2b026650
MK
550 struct gdbarch *gdbarch;
551
a7f1256d
UW
552 gdbarch_info_init (&info);
553 info.abfd = abfd;
554 info.target_desc = target_current_description ();
555 gdbarch = gdbarch_find_by_info (info);
556
2b026650 557 if (gdbarch == NULL)
8a3fe4f8 558 error (_("Architecture of file not recognized."));
59837fe0 559 deprecated_target_gdbarch_select_hack (gdbarch);
b4a20239
AC
560}
561
562/* Initialize the current architecture. Update the ``set
563 architecture'' command so that it specifies a list of valid
564 architectures. */
565
1ba607ad
AC
566#ifdef DEFAULT_BFD_ARCH
567extern const bfd_arch_info_type DEFAULT_BFD_ARCH;
568static const bfd_arch_info_type *default_bfd_arch = &DEFAULT_BFD_ARCH;
569#else
4b9b3959 570static const bfd_arch_info_type *default_bfd_arch;
1ba607ad
AC
571#endif
572
573#ifdef DEFAULT_BFD_VEC
574extern const bfd_target DEFAULT_BFD_VEC;
575static const bfd_target *default_bfd_vec = &DEFAULT_BFD_VEC;
576#else
577static const bfd_target *default_bfd_vec;
578#endif
579
7a107747
DJ
580static int default_byte_order = BFD_ENDIAN_UNKNOWN;
581
b4a20239
AC
582void
583initialize_current_architecture (void)
584{
585 const char **arches = gdbarch_printable_names ();
05c547f6 586 struct gdbarch_info info;
b4a20239 587
0e2de366 588 /* determine a default architecture and byte order. */
fb6ecb0f 589 gdbarch_info_init (&info);
1ba607ad 590
0e2de366 591 /* Find a default architecture. */
7a107747 592 if (default_bfd_arch == NULL)
b4a20239 593 {
1ba607ad 594 /* Choose the architecture by taking the first one
0e2de366 595 alphabetically. */
1ba607ad 596 const char *chosen = arches[0];
b4a20239 597 const char **arch;
b4a20239
AC
598 for (arch = arches; *arch != NULL; arch++)
599 {
b4a20239
AC
600 if (strcmp (*arch, chosen) < 0)
601 chosen = *arch;
602 }
603 if (chosen == NULL)
8e65ff28 604 internal_error (__FILE__, __LINE__,
edefbb7c 605 _("initialize_current_architecture: No arch"));
7a107747
DJ
606 default_bfd_arch = bfd_scan_arch (chosen);
607 if (default_bfd_arch == NULL)
8e65ff28 608 internal_error (__FILE__, __LINE__,
edefbb7c 609 _("initialize_current_architecture: Arch not found"));
1ba607ad
AC
610 }
611
7a107747
DJ
612 info.bfd_arch_info = default_bfd_arch;
613
afe64c1a 614 /* Take several guesses at a byte order. */
7a107747 615 if (default_byte_order == BFD_ENDIAN_UNKNOWN
1ba607ad
AC
616 && default_bfd_vec != NULL)
617 {
0e2de366 618 /* Extract BFD's default vector's byte order. */
1ba607ad
AC
619 switch (default_bfd_vec->byteorder)
620 {
621 case BFD_ENDIAN_BIG:
7a107747 622 default_byte_order = BFD_ENDIAN_BIG;
1ba607ad
AC
623 break;
624 case BFD_ENDIAN_LITTLE:
7a107747 625 default_byte_order = BFD_ENDIAN_LITTLE;
1ba607ad
AC
626 break;
627 default:
628 break;
629 }
630 }
7a107747 631 if (default_byte_order == BFD_ENDIAN_UNKNOWN)
1ba607ad 632 {
0e2de366 633 /* look for ``*el-*'' in the target name. */
1ba607ad
AC
634 const char *chp;
635 chp = strchr (target_name, '-');
636 if (chp != NULL
637 && chp - 2 >= target_name
638 && strncmp (chp - 2, "el", 2) == 0)
7a107747 639 default_byte_order = BFD_ENDIAN_LITTLE;
1ba607ad 640 }
7a107747 641 if (default_byte_order == BFD_ENDIAN_UNKNOWN)
1ba607ad
AC
642 {
643 /* Wire it to big-endian!!! */
7a107747 644 default_byte_order = BFD_ENDIAN_BIG;
1ba607ad
AC
645 }
646
7a107747 647 info.byte_order = default_byte_order;
9d4fde75 648 info.byte_order_for_code = info.byte_order;
7a107747 649
d90cf509
AC
650 if (! gdbarch_update_p (info))
651 internal_error (__FILE__, __LINE__,
edefbb7c
AC
652 _("initialize_current_architecture: Selection of "
653 "initial architecture failed"));
b4a20239 654
1ba607ad 655 /* Create the ``set architecture'' command appending ``auto'' to the
0e2de366 656 list of architectures. */
b4a20239 657 {
0e2de366 658 /* Append ``auto''. */
b4a20239
AC
659 int nr;
660 for (nr = 0; arches[nr] != NULL; nr++);
661 arches = xrealloc (arches, sizeof (char*) * (nr + 2));
662 arches[nr + 0] = "auto";
663 arches[nr + 1] = NULL;
7ab04401 664 add_setshow_enum_cmd ("architecture", class_support,
3e43a32a
MS
665 arches, &set_architecture_string,
666 _("Set architecture of target."),
667 _("Show architecture of target."), NULL,
7ab04401
AC
668 set_architecture, show_architecture,
669 &setlist, &showlist);
b4a20239 670 add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
b4a20239
AC
671 }
672}
673
674
fb6ecb0f
AC
675/* Initialize a gdbarch info to values that will be automatically
676 overridden. Note: Originally, this ``struct info'' was initialized
ce2826aa 677 using memset(0). Unfortunately, that ran into problems, namely
fb6ecb0f
AC
678 BFD_ENDIAN_BIG is zero. An explicit initialization function that
679 can explicitly set each field to a well defined value is used. */
680
681void
682gdbarch_info_init (struct gdbarch_info *info)
683{
684 memset (info, 0, sizeof (struct gdbarch_info));
428721aa 685 info->byte_order = BFD_ENDIAN_UNKNOWN;
9d4fde75 686 info->byte_order_for_code = info->byte_order;
4be87837 687 info->osabi = GDB_OSABI_UNINITIALIZED;
fb6ecb0f
AC
688}
689
100bcc3f 690/* Similar to init, but this time fill in the blanks. Information is
7a107747
DJ
691 obtained from the global "set ..." options and explicitly
692 initialized INFO fields. */
bf922ad9
AC
693
694void
7a107747 695gdbarch_info_fill (struct gdbarch_info *info)
bf922ad9
AC
696{
697 /* "(gdb) set architecture ...". */
698 if (info->bfd_arch_info == NULL
7a107747
DJ
699 && target_architecture_user)
700 info->bfd_arch_info = target_architecture_user;
424163ea 701 /* From the file. */
bf922ad9
AC
702 if (info->bfd_arch_info == NULL
703 && info->abfd != NULL
704 && bfd_get_arch (info->abfd) != bfd_arch_unknown
705 && bfd_get_arch (info->abfd) != bfd_arch_obscure)
706 info->bfd_arch_info = bfd_get_arch_info (info->abfd);
23181151
DJ
707 /* From the target. */
708 if (info->target_desc != NULL)
709 info->bfd_arch_info = choose_architecture_for_target
e35359c5 710 (info->target_desc, info->bfd_arch_info);
7a107747
DJ
711 /* From the default. */
712 if (info->bfd_arch_info == NULL)
713 info->bfd_arch_info = default_bfd_arch;
bf922ad9
AC
714
715 /* "(gdb) set byte-order ...". */
716 if (info->byte_order == BFD_ENDIAN_UNKNOWN
7a107747
DJ
717 && target_byte_order_user != BFD_ENDIAN_UNKNOWN)
718 info->byte_order = target_byte_order_user;
bf922ad9
AC
719 /* From the INFO struct. */
720 if (info->byte_order == BFD_ENDIAN_UNKNOWN
721 && info->abfd != NULL)
722 info->byte_order = (bfd_big_endian (info->abfd) ? BFD_ENDIAN_BIG
7a107747
DJ
723 : bfd_little_endian (info->abfd) ? BFD_ENDIAN_LITTLE
724 : BFD_ENDIAN_UNKNOWN);
725 /* From the default. */
726 if (info->byte_order == BFD_ENDIAN_UNKNOWN)
727 info->byte_order = default_byte_order;
9d4fde75 728 info->byte_order_for_code = info->byte_order;
bf922ad9
AC
729
730 /* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */
08d16641 731 /* From the manual override, or from file. */
bf922ad9
AC
732 if (info->osabi == GDB_OSABI_UNINITIALIZED)
733 info->osabi = gdbarch_lookup_osabi (info->abfd);
08d16641
PA
734 /* From the target. */
735 if (info->osabi == GDB_OSABI_UNKNOWN && info->target_desc != NULL)
736 info->osabi = tdesc_osabi (info->target_desc);
737 /* From the configured default. */
f4290e2a 738#ifdef GDB_OSABI_DEFAULT
08d16641
PA
739 if (info->osabi == GDB_OSABI_UNKNOWN)
740 info->osabi = GDB_OSABI_DEFAULT;
f4290e2a 741#endif
bf922ad9
AC
742
743 /* Must have at least filled in the architecture. */
744 gdb_assert (info->bfd_arch_info != NULL);
745}
746
0e2de366
MS
747/* Return "current" architecture. If the target is running, this is
748 the architecture of the selected frame. Otherwise, the "current"
749 architecture defaults to the target architecture.
e17c207e 750
0e2de366
MS
751 This function should normally be called solely by the command
752 interpreter routines to determine the architecture to execute a
753 command in. */
e17c207e
UW
754struct gdbarch *
755get_current_arch (void)
756{
757 if (has_stack_frames ())
758 return get_frame_arch (get_selected_frame (NULL));
759 else
f5656ead 760 return target_gdbarch ();
e17c207e
UW
761}
762
6c95b8df
PA
763int
764default_has_shared_address_space (struct gdbarch *gdbarch)
765{
766 /* Simply say no. In most unix-like targets each inferior/process
767 has its own address space. */
768 return 0;
769}
770
7a697b8d
SS
771int
772default_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
773 CORE_ADDR addr, int *isize, char **msg)
774{
775 /* We don't know if maybe the target has some way to do fast
776 tracepoints that doesn't need gdbarch, so always say yes. */
777 if (msg)
778 *msg = NULL;
779 return 1;
780}
781
a1dcb23a
DJ
782void
783default_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
784 int *kindptr)
785{
786 gdbarch_breakpoint_from_pc (gdbarch, pcptr, kindptr);
787}
788
6710bf39
SS
789void
790default_gen_return_address (struct gdbarch *gdbarch,
791 struct agent_expr *ax, struct axs_value *value,
792 CORE_ADDR scope)
793{
794 error (_("This architecture has no method to collect a return address."));
795}
796
18648a37
YQ
797int
798default_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
799 struct type *type)
800{
801 /* Usually, the return value's address is stored the in the "first hidden"
802 parameter if the return value should be passed by reference, as
803 specified in ABI. */
804 return language_pass_by_reference (type);
805}
806
c0e8c252
AC
807/* */
808
3e43a32a
MS
809/* -Wmissing-prototypes */
810extern initialize_file_ftype _initialize_gdbarch_utils;
c0e8c252
AC
811
812void
b4a20239 813_initialize_gdbarch_utils (void)
c0e8c252 814{
7ab04401 815 add_setshow_enum_cmd ("endian", class_support,
3e43a32a
MS
816 endian_enum, &set_endian_string,
817 _("Set endianness of target."),
818 _("Show endianness of target."),
819 NULL, set_endian, show_endian,
7ab04401 820 &setlist, &showlist);
c0e8c252 821}
This page took 0.796255 seconds and 4 git commands to generate.