From David S. Miller <davem@redhat.com>:
[deliverable/binutils-gdb.git] / gdb / arch-utils.c
CommitLineData
c0e8c252 1/* Dynamic architecture support for GDB, the GNU debugger.
f4f9705a 2
4be87837 3 Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation,
f4f9705a 4 Inc.
c0e8c252
AC
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
23#include "defs.h"
24
fb6ecb0f 25#include "arch-utils.h"
192cb3d4 26#include "buildsym.h"
c0e8c252
AC
27#include "gdbcmd.h"
28#include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
5f8a3188 29#include "gdb_string.h"
fbec36e2 30#include "regcache.h"
39d4ef09 31#include "gdb_assert.h"
4182591f 32#include "sim-regno.h"
c0e8c252 33
1ba607ad
AC
34#include "version.h"
35
f0d4cc9e
AC
36#include "floatformat.h"
37
049ee0e4
AC
38/* Implementation of extract return value that grubs around in the
39 register cache. */
40void
41legacy_extract_return_value (struct type *type, struct regcache *regcache,
ebba8386 42 void *valbuf)
049ee0e4
AC
43{
44 char *registers = deprecated_grub_regcache_for_registers (regcache);
ebba8386 45 bfd_byte *buf = valbuf;
524d7c18 46 DEPRECATED_EXTRACT_RETURN_VALUE (type, registers, buf); /* OK */
049ee0e4
AC
47}
48
ebba8386
AC
49/* Implementation of store return value that grubs the register cache.
50 Takes a local copy of the buffer to avoid const problems. */
51void
52legacy_store_return_value (struct type *type, struct regcache *regcache,
53 const void *buf)
54{
55 bfd_byte *b = alloca (TYPE_LENGTH (type));
56 gdb_assert (regcache == current_regcache);
57 memcpy (b, buf, TYPE_LENGTH (type));
58 DEPRECATED_STORE_RETURN_VALUE (type, b);
59}
60
61
1fd35568
JB
62int
63always_use_struct_convention (int gcc_p, struct type *value_type)
64{
65 return 1;
66}
67
68
4182591f
AC
69int
70legacy_register_sim_regno (int regnum)
71{
72 /* Only makes sense to supply raw registers. */
73 gdb_assert (regnum >= 0 && regnum < NUM_REGS);
74 /* NOTE: cagney/2002-05-13: The old code did it this way and it is
75 suspected that some GDB/SIM combinations may rely on this
76 behavour. The default should be one2one_register_sim_regno
77 (below). */
78 if (REGISTER_NAME (regnum) != NULL
79 && REGISTER_NAME (regnum)[0] != '\0')
80 return regnum;
81 else
82 return LEGACY_SIM_REGNO_IGNORE;
83}
84
c0e8c252
AC
85int
86generic_frameless_function_invocation_not (struct frame_info *fi)
87{
88 return 0;
89}
90
71a9f22e
JB
91int
92generic_return_value_on_stack_not (struct type *type)
93{
94 return 0;
95}
96
bdcd319a
CV
97CORE_ADDR
98generic_skip_trampoline_code (CORE_ADDR pc)
99{
100 return 0;
101}
102
dea0c52f
MK
103CORE_ADDR
104generic_skip_solib_resolver (CORE_ADDR pc)
105{
106 return 0;
107}
108
68e9cc94
CV
109int
110generic_in_solib_call_trampoline (CORE_ADDR pc, char *name)
111{
112 return 0;
113}
114
d50355b6
MS
115int
116generic_in_solib_return_trampoline (CORE_ADDR pc, char *name)
117{
118 return 0;
119}
120
c12260ac
CV
121int
122generic_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
123{
124 return 0;
125}
126
c0e8c252
AC
127#if defined (CALL_DUMMY)
128LONGEST legacy_call_dummy_words[] = CALL_DUMMY;
129#else
130LONGEST legacy_call_dummy_words[1];
131#endif
132int legacy_sizeof_call_dummy_words = sizeof (legacy_call_dummy_words);
133
134void
f6684c31
AC
135generic_remote_translate_xfer_address (struct gdbarch *gdbarch,
136 struct regcache *regcache,
137 CORE_ADDR gdb_addr, int gdb_len,
c0e8c252
AC
138 CORE_ADDR * rem_addr, int *rem_len)
139{
140 *rem_addr = gdb_addr;
141 *rem_len = gdb_len;
142}
143
dad41f9a
AC
144int
145generic_prologue_frameless_p (CORE_ADDR ip)
146{
dad41f9a 147 return ip == SKIP_PROLOGUE (ip);
dad41f9a
AC
148}
149
3339cf8b
AC
150/* Helper functions for INNER_THAN */
151
152int
fba45db2 153core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs)
3339cf8b
AC
154{
155 return (lhs < rhs);
156}
157
158int
fba45db2 159core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs)
3339cf8b
AC
160{
161 return (lhs > rhs);
162}
163
164
f0d4cc9e
AC
165/* Helper functions for TARGET_{FLOAT,DOUBLE}_FORMAT */
166
167const struct floatformat *
168default_float_format (struct gdbarch *gdbarch)
169{
f0d4cc9e 170 int byte_order = gdbarch_byte_order (gdbarch);
f0d4cc9e
AC
171 switch (byte_order)
172 {
d7449b42 173 case BFD_ENDIAN_BIG:
f0d4cc9e 174 return &floatformat_ieee_single_big;
778eb05e 175 case BFD_ENDIAN_LITTLE:
f0d4cc9e
AC
176 return &floatformat_ieee_single_little;
177 default:
8e65ff28
AC
178 internal_error (__FILE__, __LINE__,
179 "default_float_format: bad byte order");
f0d4cc9e
AC
180 }
181}
182
183
184const struct floatformat *
185default_double_format (struct gdbarch *gdbarch)
186{
f0d4cc9e 187 int byte_order = gdbarch_byte_order (gdbarch);
f0d4cc9e
AC
188 switch (byte_order)
189 {
d7449b42 190 case BFD_ENDIAN_BIG:
f0d4cc9e 191 return &floatformat_ieee_double_big;
778eb05e 192 case BFD_ENDIAN_LITTLE:
f0d4cc9e
AC
193 return &floatformat_ieee_double_little;
194 default:
8e65ff28
AC
195 internal_error (__FILE__, __LINE__,
196 "default_double_format: bad byte order");
f0d4cc9e
AC
197 }
198}
199
193e3b1a
AC
200/* Misc helper functions for targets. */
201
193e3b1a 202int
781a750d 203deprecated_register_convertible_not (int num)
193e3b1a
AC
204{
205 return 0;
206}
207
b4a20239 208
f517ea4e 209CORE_ADDR
875e1767 210core_addr_identity (CORE_ADDR addr)
f517ea4e
PS
211{
212 return addr;
213}
214
e2d0e7eb
AC
215CORE_ADDR
216convert_from_func_ptr_addr_identity (struct gdbarch *gdbarch, CORE_ADDR addr,
217 struct target_ops *targ)
218{
219 return addr;
220}
221
88c72b7d
AC
222int
223no_op_reg_to_regnum (int reg)
224{
225 return reg;
226}
227
97f46953 228CORE_ADDR
0968aa8c 229deprecated_init_frame_pc_default (int fromleaf, struct frame_info *prev)
7824d2f2 230{
6913c89a
AC
231 if (fromleaf && DEPRECATED_SAVED_PC_AFTER_CALL_P ())
232 return DEPRECATED_SAVED_PC_AFTER_CALL (get_next_frame (prev));
75e3c1f9 233 else if (get_next_frame (prev) != NULL)
8bedc050 234 return DEPRECATED_FRAME_SAVED_PC (get_next_frame (prev));
7824d2f2 235 else
97f46953 236 return read_pc ();
7824d2f2
AC
237}
238
a2cf933a
EZ
239void
240default_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
241{
242 return;
243}
244
245void
246default_coff_make_msymbol_special (int val, struct minimal_symbol *msym)
247{
248 return;
249}
250
01fb7433
AC
251int
252cannot_register_not (int regnum)
253{
254 return 0;
255}
39d4ef09
AC
256
257/* Legacy version of target_virtual_frame_pointer(). Assumes that
0ba6dca9
AC
258 there is an DEPRECATED_FP_REGNUM and that it is the same, cooked or
259 raw. */
39d4ef09
AC
260
261void
262legacy_virtual_frame_pointer (CORE_ADDR pc,
263 int *frame_regnum,
264 LONGEST *frame_offset)
265{
20bcf01c
AC
266 /* FIXME: cagney/2002-09-13: This code is used when identifying the
267 frame pointer of the current PC. It is assuming that a single
268 register and an offset can determine this. I think it should
269 instead generate a byte code expression as that would work better
270 with things like Dwarf2's CFI. */
0ba6dca9
AC
271 if (DEPRECATED_FP_REGNUM >= 0 && DEPRECATED_FP_REGNUM < NUM_REGS)
272 *frame_regnum = DEPRECATED_FP_REGNUM;
20bcf01c
AC
273 else if (SP_REGNUM >= 0 && SP_REGNUM < NUM_REGS)
274 *frame_regnum = SP_REGNUM;
275 else
276 /* Should this be an internal error? I guess so, it is reflecting
277 an architectural limitation in the current design. */
278 internal_error (__FILE__, __LINE__, "No virtual frame pointer available");
39d4ef09
AC
279 *frame_offset = 0;
280}
46cd78fb 281
b2e75d78
AC
282/* Assume the world is sane, every register's virtual and real size
283 is identical. */
46cd78fb
AC
284
285int
b2e75d78 286generic_register_size (int regnum)
46cd78fb
AC
287{
288 gdb_assert (regnum >= 0 && regnum < NUM_REGS + NUM_PSEUDO_REGS);
35cac7cf
AC
289 if (gdbarch_register_type_p (current_gdbarch))
290 return TYPE_LENGTH (gdbarch_register_type (current_gdbarch, regnum));
291 else
292 /* FIXME: cagney/2003-03-01: Once all architectures implement
293 gdbarch_register_type(), this entire function can go away. It
294 is made obsolete by register_size(). */
2e092625 295 return TYPE_LENGTH (DEPRECATED_REGISTER_VIRTUAL_TYPE (regnum)); /* OK */
ce29138a
MS
296}
297
a7e3c2ad
AC
298/* Assume all registers are adjacent. */
299
300int
301generic_register_byte (int regnum)
302{
303 int byte;
304 int i;
305 gdb_assert (regnum >= 0 && regnum < NUM_REGS + NUM_PSEUDO_REGS);
306 byte = 0;
307 for (i = 0; i < regnum; i++)
308 {
0aa7e1aa 309 byte += generic_register_size (i);
a7e3c2ad
AC
310 }
311 return byte;
312}
313
d7bd68ca
AC
314\f
315int
316legacy_pc_in_sigtramp (CORE_ADDR pc, char *name)
317{
db54fef4
CV
318#if !defined (IN_SIGTRAMP)
319 if (SIGTRAMP_START_P ())
320 return (pc) >= SIGTRAMP_START (pc) && (pc) < SIGTRAMP_END (pc);
321 else
322 return name && strcmp ("_sigtramp", name) == 0;
323#else
324 return IN_SIGTRAMP (pc, name);
325#endif
d7bd68ca
AC
326}
327
13d01224 328int
ff2e87ac 329legacy_convert_register_p (int regnum, struct type *type)
13d01224 330{
781a750d 331 return DEPRECATED_REGISTER_CONVERTIBLE (regnum);
13d01224
AC
332}
333
334void
ff2e87ac
AC
335legacy_register_to_value (struct frame_info *frame, int regnum,
336 struct type *type, void *to)
13d01224 337{
ff2e87ac 338 char from[MAX_REGISTER_SIZE];
7f5f525d 339 get_frame_register (frame, regnum, from);
781a750d 340 DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL (regnum, type, from, to);
13d01224
AC
341}
342
343void
ff2e87ac
AC
344legacy_value_to_register (struct frame_info *frame, int regnum,
345 struct type *type, const void *tmp)
13d01224 346{
ff2e87ac
AC
347 char to[MAX_REGISTER_SIZE];
348 char *from = alloca (TYPE_LENGTH (type));
349 memcpy (from, from, TYPE_LENGTH (type));
781a750d 350 DEPRECATED_REGISTER_CONVERT_TO_RAW (type, regnum, from, to);
ff2e87ac 351 put_frame_register (frame, regnum, to);
13d01224
AC
352}
353
192cb3d4
MK
354int
355default_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
356{
357 if (DEPRECATED_REG_STRUCT_HAS_ADDR_P ()
358 && DEPRECATED_REG_STRUCT_HAS_ADDR (processing_gcc_compilation, type))
359 {
360 CHECK_TYPEDEF (type);
361
362 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
363 || TYPE_CODE (type) == TYPE_CODE_UNION
364 || TYPE_CODE (type) == TYPE_CODE_SET
365 || TYPE_CODE (type) == TYPE_CODE_BITSTRING);
366 }
367
368 return 0;
369}
370
01fb7433 371\f
b4a20239
AC
372/* Functions to manipulate the endianness of the target. */
373
1ba607ad 374/* ``target_byte_order'' is only used when non- multi-arch.
afe64c1a
AC
375 Multi-arch targets obtain the current byte order using the
376 TARGET_BYTE_ORDER gdbarch method.
377
378 The choice of initial value is entirely arbitrary. During startup,
379 the function initialize_current_architecture() updates this value
380 based on default byte-order information extracted from BFD. */
381int target_byte_order = BFD_ENDIAN_BIG;
b4a20239
AC
382int target_byte_order_auto = 1;
383
53904c9e
AC
384static const char endian_big[] = "big";
385static const char endian_little[] = "little";
386static const char endian_auto[] = "auto";
387static const char *endian_enum[] =
b4a20239
AC
388{
389 endian_big,
390 endian_little,
391 endian_auto,
392 NULL,
393};
53904c9e 394static const char *set_endian_string;
b4a20239
AC
395
396/* Called by ``show endian''. */
397
398static void
399show_endian (char *args, int from_tty)
400{
401 if (TARGET_BYTE_ORDER_AUTO)
402 printf_unfiltered ("The target endianness is set automatically (currently %s endian)\n",
d7449b42 403 (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "big" : "little"));
b4a20239
AC
404 else
405 printf_unfiltered ("The target is assumed to be %s endian\n",
d7449b42 406 (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "big" : "little"));
b4a20239
AC
407}
408
409static void
410set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c)
411{
3fd3d7d2 412 if (set_endian_string == endian_auto)
b4a20239
AC
413 {
414 target_byte_order_auto = 1;
415 }
416 else if (set_endian_string == endian_little)
417 {
d90cf509 418 struct gdbarch_info info;
b4a20239 419 target_byte_order_auto = 0;
d90cf509
AC
420 gdbarch_info_init (&info);
421 info.byte_order = BFD_ENDIAN_LITTLE;
422 if (! gdbarch_update_p (info))
423 printf_unfiltered ("Little endian target not supported by GDB\n");
b4a20239
AC
424 }
425 else if (set_endian_string == endian_big)
426 {
d90cf509 427 struct gdbarch_info info;
b4a20239 428 target_byte_order_auto = 0;
d90cf509
AC
429 gdbarch_info_init (&info);
430 info.byte_order = BFD_ENDIAN_BIG;
431 if (! gdbarch_update_p (info))
432 printf_unfiltered ("Big endian target not supported by GDB\n");
b4a20239
AC
433 }
434 else
8e65ff28
AC
435 internal_error (__FILE__, __LINE__,
436 "set_endian: bad value");
b4a20239
AC
437 show_endian (NULL, from_tty);
438}
439
b4a20239
AC
440/* Functions to manipulate the architecture of the target */
441
442enum set_arch { set_arch_auto, set_arch_manual };
443
444int target_architecture_auto = 1;
445
53904c9e 446const char *set_architecture_string;
b4a20239 447
b4a20239
AC
448/* Called if the user enters ``show architecture'' without an
449 argument. */
450
451static void
452show_architecture (char *args, int from_tty)
453{
454 const char *arch;
455 arch = TARGET_ARCHITECTURE->printable_name;
456 if (target_architecture_auto)
457 printf_filtered ("The target architecture is set automatically (currently %s)\n", arch);
458 else
459 printf_filtered ("The target architecture is assumed to be %s\n", arch);
460}
461
462
463/* Called if the user enters ``set architecture'' with or without an
464 argument. */
465
466static void
467set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
468{
469 if (strcmp (set_architecture_string, "auto") == 0)
470 {
471 target_architecture_auto = 1;
472 }
d90cf509 473 else
b4a20239
AC
474 {
475 struct gdbarch_info info;
fb6ecb0f 476 gdbarch_info_init (&info);
b4a20239
AC
477 info.bfd_arch_info = bfd_scan_arch (set_architecture_string);
478 if (info.bfd_arch_info == NULL)
8e65ff28
AC
479 internal_error (__FILE__, __LINE__,
480 "set_architecture: bfd_scan_arch failed");
16f33e29 481 if (gdbarch_update_p (info))
b4a20239
AC
482 target_architecture_auto = 0;
483 else
ec3d358c 484 printf_unfiltered ("Architecture `%s' not recognized.\n",
b4a20239
AC
485 set_architecture_string);
486 }
b4a20239
AC
487 show_architecture (NULL, from_tty);
488}
489
2b026650
MK
490/* FIXME: kettenis/20031124: Of the functions that follow, only
491 gdbarch_from_bfd is supposed to survive. The others will
492 dissappear since in the future GDB will (hopefully) be truly
493 multi-arch. However, for now we're still stuck with the concept of
494 a single active architecture. */
b4a20239 495
2b026650
MK
496/* Make GDBARCH the currently selected architecture. */
497
498static void
499deprecated_select_gdbarch_hack (struct gdbarch *gdbarch)
500{
501 struct gdbarch_info info;
502
503 /* FIXME: kettenis/20031024: The only way to select a specific
504 architecture is to clone its `struct gdbarch_info', and update
505 according to that copy. This is gross, but significant work will
506 need to be done before we can take a more sane approach. */
507 gdbarch_info_init (&info);
508 info.bfd_arch_info = gdbarch_bfd_arch_info (gdbarch);
509 info.byte_order = gdbarch_byte_order (gdbarch);
510 info.osabi = gdbarch_osabi (gdbarch);
511 gdbarch_update_p (info);
512 gdb_assert (gdbarch == current_gdbarch);
513}
514
515/* Return the architecture for ABFD. If no suitable architecture
516 could be find, return NULL. */
517
518struct gdbarch *
519gdbarch_from_bfd (bfd *abfd)
b4a20239 520{
2b026650
MK
521 struct gdbarch *old_gdbarch = current_gdbarch;
522 struct gdbarch *new_gdbarch;
d90cf509 523 struct gdbarch_info info;
2b026650
MK
524
525 /* FIXME: kettenis/20031024: The only way to find the architecture
526 for a certain BFD is by doing an architecture update. This
527 activates the architecture, so we need to reactivate the old
528 architecture. This is gross, but significant work will need to
529 be done before we can take a more sane approach. */
d90cf509
AC
530 gdbarch_info_init (&info);
531 info.abfd = abfd;
532 if (! gdbarch_update_p (info))
2b026650
MK
533 return NULL;
534
535 new_gdbarch = current_gdbarch;
536 deprecated_select_gdbarch_hack (old_gdbarch);
537 return new_gdbarch;
538}
539
540/* Set the dynamic target-system-dependent parameters (architecture,
541 byte-order) using information found in the BFD */
542
543void
544set_gdbarch_from_file (bfd *abfd)
545{
546 struct gdbarch *gdbarch;
547
548 gdbarch = gdbarch_from_bfd (abfd);
549 if (gdbarch == NULL)
d90cf509 550 error ("Architecture of file not recognized.\n");
2b026650 551 deprecated_select_gdbarch_hack (gdbarch);
b4a20239
AC
552}
553
554/* Initialize the current architecture. Update the ``set
555 architecture'' command so that it specifies a list of valid
556 architectures. */
557
1ba607ad
AC
558#ifdef DEFAULT_BFD_ARCH
559extern const bfd_arch_info_type DEFAULT_BFD_ARCH;
560static const bfd_arch_info_type *default_bfd_arch = &DEFAULT_BFD_ARCH;
561#else
4b9b3959 562static const bfd_arch_info_type *default_bfd_arch;
1ba607ad
AC
563#endif
564
565#ifdef DEFAULT_BFD_VEC
566extern const bfd_target DEFAULT_BFD_VEC;
567static const bfd_target *default_bfd_vec = &DEFAULT_BFD_VEC;
568#else
569static const bfd_target *default_bfd_vec;
570#endif
571
b4a20239
AC
572void
573initialize_current_architecture (void)
574{
575 const char **arches = gdbarch_printable_names ();
b4a20239 576
1ba607ad
AC
577 /* determine a default architecture and byte order. */
578 struct gdbarch_info info;
fb6ecb0f 579 gdbarch_info_init (&info);
1ba607ad
AC
580
581 /* Find a default architecture. */
582 if (info.bfd_arch_info == NULL
583 && default_bfd_arch != NULL)
584 info.bfd_arch_info = default_bfd_arch;
585 if (info.bfd_arch_info == NULL)
b4a20239 586 {
1ba607ad
AC
587 /* Choose the architecture by taking the first one
588 alphabetically. */
589 const char *chosen = arches[0];
b4a20239 590 const char **arch;
b4a20239
AC
591 for (arch = arches; *arch != NULL; arch++)
592 {
b4a20239
AC
593 if (strcmp (*arch, chosen) < 0)
594 chosen = *arch;
595 }
596 if (chosen == NULL)
8e65ff28
AC
597 internal_error (__FILE__, __LINE__,
598 "initialize_current_architecture: No arch");
b4a20239
AC
599 info.bfd_arch_info = bfd_scan_arch (chosen);
600 if (info.bfd_arch_info == NULL)
8e65ff28
AC
601 internal_error (__FILE__, __LINE__,
602 "initialize_current_architecture: Arch not found");
1ba607ad
AC
603 }
604
afe64c1a 605 /* Take several guesses at a byte order. */
428721aa 606 if (info.byte_order == BFD_ENDIAN_UNKNOWN
1ba607ad
AC
607 && default_bfd_vec != NULL)
608 {
609 /* Extract BFD's default vector's byte order. */
610 switch (default_bfd_vec->byteorder)
611 {
612 case BFD_ENDIAN_BIG:
d7449b42 613 info.byte_order = BFD_ENDIAN_BIG;
1ba607ad
AC
614 break;
615 case BFD_ENDIAN_LITTLE:
778eb05e 616 info.byte_order = BFD_ENDIAN_LITTLE;
1ba607ad
AC
617 break;
618 default:
619 break;
620 }
621 }
428721aa 622 if (info.byte_order == BFD_ENDIAN_UNKNOWN)
1ba607ad
AC
623 {
624 /* look for ``*el-*'' in the target name. */
625 const char *chp;
626 chp = strchr (target_name, '-');
627 if (chp != NULL
628 && chp - 2 >= target_name
629 && strncmp (chp - 2, "el", 2) == 0)
778eb05e 630 info.byte_order = BFD_ENDIAN_LITTLE;
1ba607ad 631 }
428721aa 632 if (info.byte_order == BFD_ENDIAN_UNKNOWN)
1ba607ad
AC
633 {
634 /* Wire it to big-endian!!! */
d7449b42 635 info.byte_order = BFD_ENDIAN_BIG;
1ba607ad
AC
636 }
637
d90cf509
AC
638 if (! gdbarch_update_p (info))
639 internal_error (__FILE__, __LINE__,
640 "initialize_current_architecture: Selection of initial architecture failed");
b4a20239 641
1ba607ad
AC
642 /* Create the ``set architecture'' command appending ``auto'' to the
643 list of architectures. */
b4a20239
AC
644 {
645 struct cmd_list_element *c;
646 /* Append ``auto''. */
647 int nr;
648 for (nr = 0; arches[nr] != NULL; nr++);
649 arches = xrealloc (arches, sizeof (char*) * (nr + 2));
650 arches[nr + 0] = "auto";
651 arches[nr + 1] = NULL;
652 /* FIXME: add_set_enum_cmd() uses an array of ``char *'' instead
653 of ``const char *''. We just happen to know that the casts are
654 safe. */
655 c = add_set_enum_cmd ("architecture", class_support,
53904c9e 656 arches, &set_architecture_string,
b4a20239
AC
657 "Set architecture of target.",
658 &setlist);
9f60d481 659 set_cmd_sfunc (c, set_architecture);
b4a20239
AC
660 add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
661 /* Don't use set_from_show - need to print both auto/manual and
662 current setting. */
663 add_cmd ("architecture", class_support, show_architecture,
664 "Show the current target architecture", &showlist);
b4a20239
AC
665 }
666}
667
668
fb6ecb0f
AC
669/* Initialize a gdbarch info to values that will be automatically
670 overridden. Note: Originally, this ``struct info'' was initialized
ce2826aa 671 using memset(0). Unfortunately, that ran into problems, namely
fb6ecb0f
AC
672 BFD_ENDIAN_BIG is zero. An explicit initialization function that
673 can explicitly set each field to a well defined value is used. */
674
675void
676gdbarch_info_init (struct gdbarch_info *info)
677{
678 memset (info, 0, sizeof (struct gdbarch_info));
428721aa 679 info->byte_order = BFD_ENDIAN_UNKNOWN;
4be87837 680 info->osabi = GDB_OSABI_UNINITIALIZED;
fb6ecb0f
AC
681}
682
c0e8c252
AC
683/* */
684
a78f21af 685extern initialize_file_ftype _initialize_gdbarch_utils; /* -Wmissing-prototypes */
c0e8c252
AC
686
687void
b4a20239 688_initialize_gdbarch_utils (void)
c0e8c252 689{
b4a20239
AC
690 struct cmd_list_element *c;
691 c = add_set_enum_cmd ("endian", class_support,
692 endian_enum, &set_endian_string,
693 "Set endianness of target.",
694 &setlist);
9f60d481 695 set_cmd_sfunc (c, set_endian);
b4a20239
AC
696 /* Don't use set_from_show - need to print both auto/manual and
697 current setting. */
698 add_cmd ("endian", class_support, show_endian,
699 "Show the current byte-order", &showlist);
c0e8c252 700}
This page took 0.279251 seconds and 4 git commands to generate.