76814d9c10f3948589a8bc9988c37074c260dc18
[external/binutils.git] / gdb / gdbarch.sh
1 #!/bin/sh -u
2
3 # Architecture commands for GDB, the GNU debugger.
4 #
5 # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
6 # Free Software Foundation, Inc.
7 #
8 # This file is part of GDB.
9 #
10 # This program is free software; you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 3 of the License, or
13 # (at your option) any later version.
14 #
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 # GNU General Public License for more details.
19 #
20 # You should have received a copy of the GNU General Public License
21 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
23 # Make certain that the script is not running in an internationalized
24 # environment.
25 LANG=c ; export LANG
26 LC_ALL=c ; export LC_ALL
27
28
29 compare_new ()
30 {
31     file=$1
32     if test ! -r ${file}
33     then
34         echo "${file} missing? cp new-${file} ${file}" 1>&2
35     elif diff -u ${file} new-${file}
36     then
37         echo "${file} unchanged" 1>&2
38     else
39         echo "${file} has changed? cp new-${file} ${file}" 1>&2
40     fi
41 }
42
43
44 # Format of the input table
45 read="class returntype function formal actual staticdefault predefault postdefault invalid_p print garbage_at_eol"
46
47 do_read ()
48 {
49     comment=""
50     class=""
51     while read line
52     do
53         if test "${line}" = ""
54         then
55             continue
56         elif test "${line}" = "#" -a "${comment}" = ""
57         then
58             continue
59         elif expr "${line}" : "#" > /dev/null
60         then
61             comment="${comment}
62 ${line}"
63         else
64
65             # The semantics of IFS varies between different SH's.  Some
66             # treat ``::' as three fields while some treat it as just too.
67             # Work around this by eliminating ``::'' ....
68             line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`"
69
70             OFS="${IFS}" ; IFS="[:]"
71             eval read ${read} <<EOF
72 ${line}
73 EOF
74             IFS="${OFS}"
75
76             if test -n "${garbage_at_eol}"
77             then
78                 echo "Garbage at end-of-line in ${line}" 1>&2
79                 kill $$
80                 exit 1
81             fi
82
83             # .... and then going back through each field and strip out those
84             # that ended up with just that space character.
85             for r in ${read}
86             do
87                 if eval test \"\${${r}}\" = \"\ \"
88                 then
89                     eval ${r}=""
90                 fi
91             done
92
93             case "${class}" in
94                 m ) staticdefault="${predefault}" ;;
95                 M ) staticdefault="0" ;;
96                 * ) test "${staticdefault}" || staticdefault=0 ;;
97             esac
98
99             case "${class}" in
100             F | V | M )
101                 case "${invalid_p}" in
102                 "" )
103                     if test -n "${predefault}"
104                     then
105                         #invalid_p="gdbarch->${function} == ${predefault}"
106                         predicate="gdbarch->${function} != ${predefault}"
107                     elif class_is_variable_p
108                     then
109                         predicate="gdbarch->${function} != 0"
110                     elif class_is_function_p
111                     then
112                         predicate="gdbarch->${function} != NULL"
113                     fi
114                     ;;
115                 * )
116                     echo "Predicate function ${function} with invalid_p." 1>&2
117                     kill $$
118                     exit 1
119                     ;;
120                 esac
121             esac
122
123             # PREDEFAULT is a valid fallback definition of MEMBER when
124             # multi-arch is not enabled.  This ensures that the
125             # default value, when multi-arch is the same as the
126             # default value when not multi-arch.  POSTDEFAULT is
127             # always a valid definition of MEMBER as this again
128             # ensures consistency.
129
130             if [ -n "${postdefault}" ]
131             then
132                 fallbackdefault="${postdefault}"
133             elif [ -n "${predefault}" ]
134             then
135                 fallbackdefault="${predefault}"
136             else
137                 fallbackdefault="0"
138             fi
139
140             #NOT YET: See gdbarch.log for basic verification of
141             # database
142
143             break
144         fi
145     done
146     if [ -n "${class}" ]
147     then
148         true
149     else
150         false
151     fi
152 }
153
154
155 fallback_default_p ()
156 {
157     [ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \
158         || [ -n "${predefault}" -a "x${invalid_p}" = "x0" ]
159 }
160
161 class_is_variable_p ()
162 {
163     case "${class}" in
164         *v* | *V* ) true ;;
165         * ) false ;;
166     esac
167 }
168
169 class_is_function_p ()
170 {
171     case "${class}" in
172         *f* | *F* | *m* | *M* ) true ;;
173         * ) false ;;
174     esac
175 }
176
177 class_is_multiarch_p ()
178 {
179     case "${class}" in
180         *m* | *M* ) true ;;
181         * ) false ;;
182     esac
183 }
184
185 class_is_predicate_p ()
186 {
187     case "${class}" in
188         *F* | *V* | *M* ) true ;;
189         * ) false ;;
190     esac
191 }
192
193 class_is_info_p ()
194 {
195     case "${class}" in
196         *i* ) true ;;
197         * ) false ;;
198     esac
199 }
200
201
202 # dump out/verify the doco
203 for field in ${read}
204 do
205   case ${field} in
206
207     class ) : ;;
208
209         # # -> line disable
210         # f -> function
211         #   hiding a function
212         # F -> function + predicate
213         #   hiding a function + predicate to test function validity
214         # v -> variable
215         #   hiding a variable
216         # V -> variable + predicate
217         #   hiding a variable + predicate to test variables validity
218         # i -> set from info
219         #   hiding something from the ``struct info'' object
220         # m -> multi-arch function
221         #   hiding a multi-arch function (parameterised with the architecture)
222         # M -> multi-arch function + predicate
223         #   hiding a multi-arch function + predicate to test function validity
224
225     returntype ) : ;;
226
227         # For functions, the return type; for variables, the data type
228
229     function ) : ;;
230
231         # For functions, the member function name; for variables, the
232         # variable name.  Member function names are always prefixed with
233         # ``gdbarch_'' for name-space purity.
234
235     formal ) : ;;
236
237         # The formal argument list.  It is assumed that the formal
238         # argument list includes the actual name of each list element.
239         # A function with no arguments shall have ``void'' as the
240         # formal argument list.
241
242     actual ) : ;;
243
244         # The list of actual arguments.  The arguments specified shall
245         # match the FORMAL list given above.  Functions with out
246         # arguments leave this blank.
247
248     staticdefault ) : ;;
249
250         # To help with the GDB startup a static gdbarch object is
251         # created.  STATICDEFAULT is the value to insert into that
252         # static gdbarch object.  Since this a static object only
253         # simple expressions can be used.
254
255         # If STATICDEFAULT is empty, zero is used.
256
257     predefault ) : ;;
258
259         # An initial value to assign to MEMBER of the freshly
260         # malloc()ed gdbarch object.  After initialization, the
261         # freshly malloc()ed object is passed to the target
262         # architecture code for further updates.
263
264         # If PREDEFAULT is empty, zero is used.
265
266         # A non-empty PREDEFAULT, an empty POSTDEFAULT and a zero
267         # INVALID_P are specified, PREDEFAULT will be used as the
268         # default for the non- multi-arch target.
269
270         # A zero PREDEFAULT function will force the fallback to call
271         # internal_error().
272
273         # Variable declarations can refer to ``gdbarch'' which will
274         # contain the current architecture.  Care should be taken.
275
276     postdefault ) : ;;
277
278         # A value to assign to MEMBER of the new gdbarch object should
279         # the target architecture code fail to change the PREDEFAULT
280         # value.
281
282         # If POSTDEFAULT is empty, no post update is performed.
283
284         # If both INVALID_P and POSTDEFAULT are non-empty then
285         # INVALID_P will be used to determine if MEMBER should be
286         # changed to POSTDEFAULT.
287
288         # If a non-empty POSTDEFAULT and a zero INVALID_P are
289         # specified, POSTDEFAULT will be used as the default for the
290         # non- multi-arch target (regardless of the value of
291         # PREDEFAULT).
292
293         # You cannot specify both a zero INVALID_P and a POSTDEFAULT.
294
295         # Variable declarations can refer to ``gdbarch'' which
296         # will contain the current architecture.  Care should be
297         # taken.
298
299     invalid_p ) : ;;
300
301         # A predicate equation that validates MEMBER.  Non-zero is
302         # returned if the code creating the new architecture failed to
303         # initialize MEMBER or the initialized the member is invalid.
304         # If POSTDEFAULT is non-empty then MEMBER will be updated to
305         # that value.  If POSTDEFAULT is empty then internal_error()
306         # is called.
307
308         # If INVALID_P is empty, a check that MEMBER is no longer
309         # equal to PREDEFAULT is used.
310
311         # The expression ``0'' disables the INVALID_P check making
312         # PREDEFAULT a legitimate value.
313
314         # See also PREDEFAULT and POSTDEFAULT.
315
316     print ) : ;;
317
318         # An optional expression that convers MEMBER to a value
319         # suitable for formatting using %s.
320
321         # If PRINT is empty, paddr_nz (for CORE_ADDR) or paddr_d
322         # (anything else) is used.
323
324     garbage_at_eol ) : ;;
325
326         # Catches stray fields.
327
328     *)
329         echo "Bad field ${field}"
330         exit 1;;
331   esac
332 done
333
334
335 function_list ()
336 {
337   # See below (DOCO) for description of each field
338   cat <<EOF
339 i:const struct bfd_arch_info *:bfd_arch_info:::&bfd_default_arch_struct::::gdbarch_bfd_arch_info (gdbarch)->printable_name
340 #
341 i:int:byte_order:::BFD_ENDIAN_BIG
342 #
343 i:enum gdb_osabi:osabi:::GDB_OSABI_UNKNOWN
344 #
345 i:const struct target_desc *:target_desc:::::::paddr_d ((long) gdbarch->target_desc)
346 # Number of bits in a char or unsigned char for the target machine.
347 # Just like CHAR_BIT in <limits.h> but describes the target machine.
348 # v:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0:
349 #
350 # Number of bits in a short or unsigned short for the target machine.
351 v:int:short_bit:::8 * sizeof (short):2*TARGET_CHAR_BIT::0
352 # Number of bits in an int or unsigned int for the target machine.
353 v:int:int_bit:::8 * sizeof (int):4*TARGET_CHAR_BIT::0
354 # Number of bits in a long or unsigned long for the target machine.
355 v:int:long_bit:::8 * sizeof (long):4*TARGET_CHAR_BIT::0
356 # Number of bits in a long long or unsigned long long for the target
357 # machine.
358 v:int:long_long_bit:::8 * sizeof (LONGEST):2*gdbarch->long_bit::0
359
360 # The ABI default bit-size and format for "float", "double", and "long
361 # double".  These bit/format pairs should eventually be combined into
362 # a single object.  For the moment, just initialize them as a pair.
363 # Each format describes both the big and little endian layouts (if
364 # useful).
365
366 v:int:float_bit:::8 * sizeof (float):4*TARGET_CHAR_BIT::0
367 v:const struct floatformat **:float_format:::::floatformats_ieee_single::pformat (gdbarch->float_format)
368 v:int:double_bit:::8 * sizeof (double):8*TARGET_CHAR_BIT::0
369 v:const struct floatformat **:double_format:::::floatformats_ieee_double::pformat (gdbarch->double_format)
370 v:int:long_double_bit:::8 * sizeof (long double):8*TARGET_CHAR_BIT::0
371 v:const struct floatformat **:long_double_format:::::floatformats_ieee_double::pformat (gdbarch->long_double_format)
372
373 # For most targets, a pointer on the target and its representation as an
374 # address in GDB have the same size and "look the same".  For such a
375 # target, you need only set gdbarch_ptr_bit and gdbarch_addr_bit
376 # / addr_bit will be set from it.
377 #
378 # If gdbarch_ptr_bit and gdbarch_addr_bit are different, you'll probably
379 # also need to set gdbarch_pointer_to_address and gdbarch_address_to_pointer
380 # as well.
381 #
382 # ptr_bit is the size of a pointer on the target
383 v:int:ptr_bit:::8 * sizeof (void*):gdbarch->int_bit::0
384 # addr_bit is the size of a target address as represented in gdb
385 v:int:addr_bit:::8 * sizeof (void*):0:gdbarch_ptr_bit (gdbarch):
386 #
387 # One if \`char' acts like \`signed char', zero if \`unsigned char'.
388 v:int:char_signed:::1:-1:1
389 #
390 F:CORE_ADDR:read_pc:struct regcache *regcache:regcache
391 F:void:write_pc:struct regcache *regcache, CORE_ADDR val:regcache, val
392 # Function for getting target's idea of a frame pointer.  FIXME: GDB's
393 # whole scheme for dealing with "frames" and "frame pointers" needs a
394 # serious shakedown.
395 m:void:virtual_frame_pointer:CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset:pc, frame_regnum, frame_offset:0:legacy_virtual_frame_pointer::0
396 #
397 M:void:pseudo_register_read:struct regcache *regcache, int cookednum, gdb_byte *buf:regcache, cookednum, buf
398 M:void:pseudo_register_write:struct regcache *regcache, int cookednum, const gdb_byte *buf:regcache, cookednum, buf
399 #
400 v:int:num_regs:::0:-1
401 # This macro gives the number of pseudo-registers that live in the
402 # register namespace but do not get fetched or stored on the target.
403 # These pseudo-registers may be aliases for other registers,
404 # combinations of other registers, or they may be computed by GDB.
405 v:int:num_pseudo_regs:::0:0::0
406
407 # GDB's standard (or well known) register numbers.  These can map onto
408 # a real register or a pseudo (computed) register or not be defined at
409 # all (-1).
410 # gdbarch_sp_regnum will hopefully be replaced by UNWIND_SP.
411 v:int:sp_regnum:::-1:-1::0
412 v:int:pc_regnum:::-1:-1::0
413 v:int:ps_regnum:::-1:-1::0
414 v:int:fp0_regnum:::0:-1::0
415 # Convert stab register number (from \`r\' declaration) to a gdb REGNUM.
416 f:int:stab_reg_to_regnum:int stab_regnr:stab_regnr::no_op_reg_to_regnum::0
417 # Provide a default mapping from a ecoff register number to a gdb REGNUM.
418 f:int:ecoff_reg_to_regnum:int ecoff_regnr:ecoff_regnr::no_op_reg_to_regnum::0
419 # Provide a default mapping from a DWARF register number to a gdb REGNUM.
420 f:int:dwarf_reg_to_regnum:int dwarf_regnr:dwarf_regnr::no_op_reg_to_regnum::0
421 # Convert from an sdb register number to an internal gdb register number.
422 f:int:sdb_reg_to_regnum:int sdb_regnr:sdb_regnr::no_op_reg_to_regnum::0
423 f:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr::no_op_reg_to_regnum::0
424 m:const char *:register_name:int regnr:regnr::0
425
426 # Return the type of a register specified by the architecture.  Only
427 # the register cache should call this function directly; others should
428 # use "register_type".
429 M:struct type *:register_type:int reg_nr:reg_nr
430
431 # See gdbint.texinfo, and PUSH_DUMMY_CALL.
432 M:struct frame_id:unwind_dummy_id:struct frame_info *info:info
433 # Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete
434 # deprecated_fp_regnum.
435 v:int:deprecated_fp_regnum:::-1:-1::0
436
437 # See gdbint.texinfo.  See infcall.c.
438 M:CORE_ADDR:push_dummy_call:struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:function, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr
439 v:int:call_dummy_location::::AT_ENTRY_POINT::0
440 M:CORE_ADDR:push_dummy_code:CORE_ADDR sp, CORE_ADDR funaddr, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache:sp, funaddr, args, nargs, value_type, real_pc, bp_addr, regcache
441
442 m:void:print_registers_info:struct ui_file *file, struct frame_info *frame, int regnum, int all:file, frame, regnum, all::default_print_registers_info::0
443 M:void:print_float_info:struct ui_file *file, struct frame_info *frame, const char *args:file, frame, args
444 M:void:print_vector_info:struct ui_file *file, struct frame_info *frame, const char *args:file, frame, args
445 # MAP a GDB RAW register number onto a simulator register number.  See
446 # also include/...-sim.h.
447 f:int:register_sim_regno:int reg_nr:reg_nr::legacy_register_sim_regno::0
448 m:int:cannot_fetch_register:int regnum:regnum::cannot_register_not::0
449 m:int:cannot_store_register:int regnum:regnum::cannot_register_not::0
450 # setjmp/longjmp support.
451 F:int:get_longjmp_target:struct frame_info *frame, CORE_ADDR *pc:frame, pc
452 #
453 v:int:believe_pcc_promotion:::::::
454 #
455 m:int:convert_register_p:int regnum, struct type *type:regnum, type:0:generic_convert_register_p::0
456 f:void:register_to_value:struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf:frame, regnum, type, buf:0
457 f:void:value_to_register:struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf:frame, regnum, type, buf:0
458 # Construct a value representing the contents of register REGNUM in
459 # frame FRAME, interpreted as type TYPE.  The routine needs to
460 # allocate and return a struct value with all value attributes
461 # (but not the value contents) filled in.
462 f:struct value *:value_from_register:struct type *type, int regnum, struct frame_info *frame:type, regnum, frame::default_value_from_register::0
463 #
464 f:CORE_ADDR:pointer_to_address:struct type *type, const gdb_byte *buf:type, buf::unsigned_pointer_to_address::0
465 f:void:address_to_pointer:struct type *type, gdb_byte *buf, CORE_ADDR addr:type, buf, addr::unsigned_address_to_pointer::0
466 M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf
467
468 # It has been suggested that this, well actually its predecessor,
469 # should take the type/value of the function to be called and not the
470 # return type.  This is left as an exercise for the reader.
471
472 M:enum return_value_convention:return_value:struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf:valtype, regcache, readbuf, writebuf
473
474 f:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip:0:0
475 f:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs:0:0
476 m:const gdb_byte *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr::0:
477 M:CORE_ADDR:adjust_breakpoint_address:CORE_ADDR bpaddr:bpaddr
478 f:int:memory_insert_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_insert_breakpoint::0
479 f:int:memory_remove_breakpoint:struct bp_target_info *bp_tgt:bp_tgt:0:default_memory_remove_breakpoint::0
480 v:CORE_ADDR:decr_pc_after_break:::0:::0
481
482 # A function can be addressed by either it's "pointer" (possibly a
483 # descriptor address) or "entry point" (first executable instruction).
484 # The method "convert_from_func_ptr_addr" converting the former to the
485 # latter.  gdbarch_deprecated_function_start_offset is being used to implement
486 # a simplified subset of that functionality - the function's address
487 # corresponds to the "function pointer" and the function's start
488 # corresponds to the "function entry point" - and hence is redundant.
489
490 v:CORE_ADDR:deprecated_function_start_offset:::0:::0
491
492 # Return the remote protocol register number associated with this
493 # register.  Normally the identity mapping.
494 m:int:remote_register_number:int regno:regno::default_remote_register_number::0
495
496 # Fetch the target specific address used to represent a load module.
497 F:CORE_ADDR:fetch_tls_load_module_address:struct objfile *objfile:objfile
498 #
499 v:CORE_ADDR:frame_args_skip:::0:::0
500 M:CORE_ADDR:unwind_pc:struct frame_info *next_frame:next_frame
501 M:CORE_ADDR:unwind_sp:struct frame_info *next_frame:next_frame
502 # DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame
503 # frame-base.  Enable frame-base before frame-unwind.
504 F:int:frame_num_args:struct frame_info *frame:frame
505 #
506 M:CORE_ADDR:frame_align:CORE_ADDR address:address
507 m:int:stabs_argument_has_addr:struct type *type:type::default_stabs_argument_has_addr::0
508 v:int:frame_red_zone_size
509 #
510 m:CORE_ADDR:convert_from_func_ptr_addr:CORE_ADDR addr, struct target_ops *targ:addr, targ::convert_from_func_ptr_addr_identity::0
511 # On some machines there are bits in addresses which are not really
512 # part of the address, but are used by the kernel, the hardware, etc.
513 # for special purposes.  gdbarch_addr_bits_remove takes out any such bits so
514 # we get a "real" address such as one would find in a symbol table.
515 # This is used only for addresses of instructions, and even then I'm
516 # not sure it's used in all contexts.  It exists to deal with there
517 # being a few stray bits in the PC which would mislead us, not as some
518 # sort of generic thing to handle alignment or segmentation (it's
519 # possible it should be in TARGET_READ_PC instead).
520 f:CORE_ADDR:addr_bits_remove:CORE_ADDR addr:addr::core_addr_identity::0
521 # It is not at all clear why gdbarch_smash_text_address is not folded into
522 # gdbarch_addr_bits_remove.
523 f:CORE_ADDR:smash_text_address:CORE_ADDR addr:addr::core_addr_identity::0
524
525 # FIXME/cagney/2001-01-18: This should be split in two.  A target method that
526 # indicates if the target needs software single step.  An ISA method to
527 # implement it.
528 #
529 # FIXME/cagney/2001-01-18: This should be replaced with something that inserts
530 # breakpoints using the breakpoint system instead of blatting memory directly
531 # (as with rs6000).
532 #
533 # FIXME/cagney/2001-01-18: The logic is backwards.  It should be asking if the
534 # target can single step.  If not, then implement single step using breakpoints.
535 #
536 # A return value of 1 means that the software_single_step breakpoints 
537 # were inserted; 0 means they were not.
538 F:int:software_single_step:struct frame_info *frame:frame
539
540 # Return non-zero if the processor is executing a delay slot and a
541 # further single-step is needed before the instruction finishes.
542 M:int:single_step_through_delay:struct frame_info *frame:frame
543 # FIXME: cagney/2003-08-28: Need to find a better way of selecting the
544 # disassembler.  Perhaps objdump can handle it?
545 f:int:print_insn:bfd_vma vma, struct disassemble_info *info:vma, info::0:
546 f:CORE_ADDR:skip_trampoline_code:struct frame_info *frame, CORE_ADDR pc:frame, pc::generic_skip_trampoline_code::0
547
548
549 # If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER
550 # evaluates non-zero, this is the address where the debugger will place
551 # a step-resume breakpoint to get us past the dynamic linker.
552 m:CORE_ADDR:skip_solib_resolver:CORE_ADDR pc:pc::generic_skip_solib_resolver::0
553 # Some systems also have trampoline code for returning from shared libs.
554 f:int:in_solib_return_trampoline:CORE_ADDR pc, char *name:pc, name::generic_in_solib_return_trampoline::0
555
556 # A target might have problems with watchpoints as soon as the stack
557 # frame of the current function has been destroyed.  This mostly happens
558 # as the first action in a funtion's epilogue.  in_function_epilogue_p()
559 # is defined to return a non-zero value if either the given addr is one
560 # instruction after the stack destroying instruction up to the trailing
561 # return instruction or if we can figure out that the stack frame has
562 # already been invalidated regardless of the value of addr.  Targets
563 # which don't suffer from that problem could just let this functionality
564 # untouched.
565 m:int:in_function_epilogue_p:CORE_ADDR addr:addr:0:generic_in_function_epilogue_p::0
566 # Given a vector of command-line arguments, return a newly allocated
567 # string which, when passed to the create_inferior function, will be
568 # parsed (on Unix systems, by the shell) to yield the same vector.
569 # This function should call error() if the argument vector is not
570 # representable for this target or if this target does not support
571 # command-line arguments.
572 # ARGC is the number of elements in the vector.
573 # ARGV is an array of strings, one per argument.
574 m:char *:construct_inferior_arguments:int argc, char **argv:argc, argv::construct_inferior_arguments::0
575 f:void:elf_make_msymbol_special:asymbol *sym, struct minimal_symbol *msym:sym, msym::default_elf_make_msymbol_special::0
576 f:void:coff_make_msymbol_special:int val, struct minimal_symbol *msym:val, msym::default_coff_make_msymbol_special::0
577 v:const char *:name_of_malloc:::"malloc":"malloc"::0:gdbarch->name_of_malloc
578 v:int:cannot_step_breakpoint:::0:0::0
579 v:int:have_nonsteppable_watchpoint:::0:0::0
580 F:int:address_class_type_flags:int byte_size, int dwarf2_addr_class:byte_size, dwarf2_addr_class
581 M:const char *:address_class_type_flags_to_name:int type_flags:type_flags
582 M:int:address_class_name_to_type_flags:const char *name, int *type_flags_ptr:name, type_flags_ptr
583 # Is a register in a group
584 m:int:register_reggroup_p:int regnum, struct reggroup *reggroup:regnum, reggroup::default_register_reggroup_p::0
585 # Fetch the pointer to the ith function argument.
586 F:CORE_ADDR:fetch_pointer_argument:struct frame_info *frame, int argi, struct type *type:frame, argi, type
587
588 # Return the appropriate register set for a core file section with
589 # name SECT_NAME and size SECT_SIZE.
590 M:const struct regset *:regset_from_core_section:const char *sect_name, size_t sect_size:sect_name, sect_size
591
592 # Read offset OFFSET of TARGET_OBJECT_LIBRARIES formatted shared libraries list from
593 # core file into buffer READBUF with length LEN.
594 M:LONGEST:core_xfer_shared_libraries:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len
595
596 # If the elements of C++ vtables are in-place function descriptors rather
597 # than normal function pointers (which may point to code or a descriptor),
598 # set this to one.
599 v:int:vtable_function_descriptors:::0:0::0
600
601 # Set if the least significant bit of the delta is used instead of the least
602 # significant bit of the pfn for pointers to virtual member functions.
603 v:int:vbit_in_delta:::0:0::0
604
605 # Advance PC to next instruction in order to skip a permanent breakpoint.
606 F:void:skip_permanent_breakpoint:struct regcache *regcache:regcache
607
608 # Refresh overlay mapped state for section OSECT.
609 F:void:overlay_update:struct obj_section *osect:osect
610
611 M:const struct target_desc *:core_read_description:struct target_ops *target, bfd *abfd:target, abfd
612
613 # Handle special encoding of static variables in stabs debug info.
614 F:char *:static_transform_name:char *name:name
615 # Set if the address in N_SO or N_FUN stabs may be zero.
616 v:int:sofun_address_maybe_missing:::0:0::0
617 EOF
618 }
619
620 #
621 # The .log file
622 #
623 exec > new-gdbarch.log
624 function_list | while do_read
625 do
626     cat <<EOF
627 ${class} ${returntype} ${function} ($formal)
628 EOF
629     for r in ${read}
630     do
631         eval echo \"\ \ \ \ ${r}=\${${r}}\"
632     done
633     if class_is_predicate_p && fallback_default_p
634     then
635         echo "Error: predicate function ${function} can not have a non- multi-arch default" 1>&2
636         kill $$
637         exit 1
638     fi
639     if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ]
640     then
641         echo "Error: postdefault is useless when invalid_p=0" 1>&2
642         kill $$
643         exit 1
644     fi
645     if class_is_multiarch_p
646     then
647         if class_is_predicate_p ; then :
648         elif test "x${predefault}" = "x"
649         then
650             echo "Error: pure multi-arch function ${function} must have a predefault" 1>&2
651             kill $$
652             exit 1
653         fi
654     fi
655     echo ""
656 done
657
658 exec 1>&2
659 compare_new gdbarch.log
660
661
662 copyright ()
663 {
664 cat <<EOF
665 /* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
666
667 /* Dynamic architecture support for GDB, the GNU debugger.
668
669    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
670    Free Software Foundation, Inc.
671
672    This file is part of GDB.
673
674    This program is free software; you can redistribute it and/or modify
675    it under the terms of the GNU General Public License as published by
676    the Free Software Foundation; either version 3 of the License, or
677    (at your option) any later version.
678   
679    This program is distributed in the hope that it will be useful,
680    but WITHOUT ANY WARRANTY; without even the implied warranty of
681    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
682    GNU General Public License for more details.
683   
684    You should have received a copy of the GNU General Public License
685    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
686
687 /* This file was created with the aid of \`\`gdbarch.sh''.
688
689    The Bourne shell script \`\`gdbarch.sh'' creates the files
690    \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
691    against the existing \`\`gdbarch.[hc]''.  Any differences found
692    being reported.
693
694    If editing this file, please also run gdbarch.sh and merge any
695    changes into that script. Conversely, when making sweeping changes
696    to this file, modifying gdbarch.sh and using its output may prove
697    easier. */
698
699 EOF
700 }
701
702 #
703 # The .h file
704 #
705
706 exec > new-gdbarch.h
707 copyright
708 cat <<EOF
709 #ifndef GDBARCH_H
710 #define GDBARCH_H
711
712 struct floatformat;
713 struct ui_file;
714 struct frame_info;
715 struct value;
716 struct objfile;
717 struct obj_section;
718 struct minimal_symbol;
719 struct regcache;
720 struct reggroup;
721 struct regset;
722 struct disassemble_info;
723 struct target_ops;
724 struct obstack;
725 struct bp_target_info;
726 struct target_desc;
727
728 extern struct gdbarch *current_gdbarch;
729 EOF
730
731 # function typedef's
732 printf "\n"
733 printf "\n"
734 printf "/* The following are pre-initialized by GDBARCH. */\n"
735 function_list | while do_read
736 do
737     if class_is_info_p
738     then
739         printf "\n"
740         printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
741         printf "/* set_gdbarch_${function}() - not applicable - pre-initialized. */\n"
742     fi
743 done
744
745 # function typedef's
746 printf "\n"
747 printf "\n"
748 printf "/* The following are initialized by the target dependent code. */\n"
749 function_list | while do_read
750 do
751     if [ -n "${comment}" ]
752     then
753         echo "${comment}" | sed \
754             -e '2 s,#,/*,' \
755             -e '3,$ s,#,  ,' \
756             -e '$ s,$, */,'
757     fi
758
759     if class_is_predicate_p
760     then
761         printf "\n"
762         printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
763     fi
764     if class_is_variable_p
765     then
766         printf "\n"
767         printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
768         printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n"
769     fi
770     if class_is_function_p
771     then
772         printf "\n"
773         if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p
774         then
775             printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n"
776         elif class_is_multiarch_p
777         then
778             printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n"
779         else
780             printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
781         fi
782         if [ "x${formal}" = "xvoid" ]
783         then
784           printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
785         else
786           printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
787         fi
788         printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
789     fi
790 done
791
792 # close it off
793 cat <<EOF
794
795 extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
796
797
798 /* Mechanism for co-ordinating the selection of a specific
799    architecture.
800
801    GDB targets (*-tdep.c) can register an interest in a specific
802    architecture.  Other GDB components can register a need to maintain
803    per-architecture data.
804
805    The mechanisms below ensures that there is only a loose connection
806    between the set-architecture command and the various GDB
807    components.  Each component can independently register their need
808    to maintain architecture specific data with gdbarch.
809
810    Pragmatics:
811
812    Previously, a single TARGET_ARCHITECTURE_HOOK was provided.  It
813    didn't scale.
814
815    The more traditional mega-struct containing architecture specific
816    data for all the various GDB components was also considered.  Since
817    GDB is built from a variable number of (fairly independent)
818    components it was determined that the global aproach was not
819    applicable. */
820
821
822 /* Register a new architectural family with GDB.
823
824    Register support for the specified ARCHITECTURE with GDB.  When
825    gdbarch determines that the specified architecture has been
826    selected, the corresponding INIT function is called.
827
828    --
829
830    The INIT function takes two parameters: INFO which contains the
831    information available to gdbarch about the (possibly new)
832    architecture; ARCHES which is a list of the previously created
833    \`\`struct gdbarch'' for this architecture.
834
835    The INFO parameter is, as far as possible, be pre-initialized with
836    information obtained from INFO.ABFD or the global defaults.
837
838    The ARCHES parameter is a linked list (sorted most recently used)
839    of all the previously created architures for this architecture
840    family.  The (possibly NULL) ARCHES->gdbarch can used to access
841    values from the previously selected architecture for this
842    architecture family.  The global \`\`current_gdbarch'' shall not be
843    used.
844
845    The INIT function shall return any of: NULL - indicating that it
846    doesn't recognize the selected architecture; an existing \`\`struct
847    gdbarch'' from the ARCHES list - indicating that the new
848    architecture is just a synonym for an earlier architecture (see
849    gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
850    - that describes the selected architecture (see gdbarch_alloc()).
851
852    The DUMP_TDEP function shall print out all target specific values.
853    Care should be taken to ensure that the function works in both the
854    multi-arch and non- multi-arch cases. */
855
856 struct gdbarch_list
857 {
858   struct gdbarch *gdbarch;
859   struct gdbarch_list *next;
860 };
861
862 struct gdbarch_info
863 {
864   /* Use default: NULL (ZERO). */
865   const struct bfd_arch_info *bfd_arch_info;
866
867   /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO).  */
868   int byte_order;
869
870   /* Use default: NULL (ZERO). */
871   bfd *abfd;
872
873   /* Use default: NULL (ZERO). */
874   struct gdbarch_tdep_info *tdep_info;
875
876   /* Use default: GDB_OSABI_UNINITIALIZED (-1).  */
877   enum gdb_osabi osabi;
878
879   /* Use default: NULL (ZERO).  */
880   const struct target_desc *target_desc;
881 };
882
883 typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
884 typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
885
886 /* DEPRECATED - use gdbarch_register() */
887 extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
888
889 extern void gdbarch_register (enum bfd_architecture architecture,
890                               gdbarch_init_ftype *,
891                               gdbarch_dump_tdep_ftype *);
892
893
894 /* Return a freshly allocated, NULL terminated, array of the valid
895    architecture names.  Since architectures are registered during the
896    _initialize phase this function only returns useful information
897    once initialization has been completed. */
898
899 extern const char **gdbarch_printable_names (void);
900
901
902 /* Helper function.  Search the list of ARCHES for a GDBARCH that
903    matches the information provided by INFO. */
904
905 extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
906
907
908 /* Helper function.  Create a preliminary \`\`struct gdbarch''.  Perform
909    basic initialization using values obtained from the INFO and TDEP
910    parameters.  set_gdbarch_*() functions are called to complete the
911    initialization of the object. */
912
913 extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
914
915
916 /* Helper function.  Free a partially-constructed \`\`struct gdbarch''.
917    It is assumed that the caller freeds the \`\`struct
918    gdbarch_tdep''. */
919
920 extern void gdbarch_free (struct gdbarch *);
921
922
923 /* Helper function.  Allocate memory from the \`\`struct gdbarch''
924    obstack.  The memory is freed when the corresponding architecture
925    is also freed.  */
926
927 extern void *gdbarch_obstack_zalloc (struct gdbarch *gdbarch, long size);
928 #define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), (NR) * sizeof (TYPE)))
929 #define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), sizeof (TYPE)))
930
931
932 /* Helper function. Force an update of the current architecture.
933
934    The actual architecture selected is determined by INFO, \`\`(gdb) set
935    architecture'' et.al., the existing architecture and BFD's default
936    architecture.  INFO should be initialized to zero and then selected
937    fields should be updated.
938
939    Returns non-zero if the update succeeds */
940
941 extern int gdbarch_update_p (struct gdbarch_info info);
942
943
944 /* Helper function.  Find an architecture matching info.
945
946    INFO should be initialized using gdbarch_info_init, relevant fields
947    set, and then finished using gdbarch_info_fill.
948
949    Returns the corresponding architecture, or NULL if no matching
950    architecture was found.  "current_gdbarch" is not updated.  */
951
952 extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info);
953
954
955 /* Helper function.  Set the global "current_gdbarch" to "gdbarch".
956
957    FIXME: kettenis/20031124: Of the functions that follow, only
958    gdbarch_from_bfd is supposed to survive.  The others will
959    dissappear since in the future GDB will (hopefully) be truly
960    multi-arch.  However, for now we're still stuck with the concept of
961    a single active architecture.  */
962
963 extern void deprecated_current_gdbarch_select_hack (struct gdbarch *gdbarch);
964
965
966 /* Register per-architecture data-pointer.
967
968    Reserve space for a per-architecture data-pointer.  An identifier
969    for the reserved data-pointer is returned.  That identifer should
970    be saved in a local static variable.
971
972    Memory for the per-architecture data shall be allocated using
973    gdbarch_obstack_zalloc.  That memory will be deleted when the
974    corresponding architecture object is deleted.
975
976    When a previously created architecture is re-selected, the
977    per-architecture data-pointer for that previous architecture is
978    restored.  INIT() is not re-called.
979
980    Multiple registrarants for any architecture are allowed (and
981    strongly encouraged).  */
982
983 struct gdbarch_data;
984
985 typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack);
986 extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
987 typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
988 extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
989 extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
990                                          struct gdbarch_data *data,
991                                          void *pointer);
992
993 extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
994
995
996 /* Set the dynamic target-system-dependent parameters (architecture,
997    byte-order, ...) using information found in the BFD */
998
999 extern void set_gdbarch_from_file (bfd *);
1000
1001
1002 /* Initialize the current architecture to the "first" one we find on
1003    our list.  */
1004
1005 extern void initialize_current_architecture (void);
1006
1007 /* gdbarch trace variable */
1008 extern int gdbarch_debug;
1009
1010 extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
1011
1012 #endif
1013 EOF
1014 exec 1>&2
1015 #../move-if-change new-gdbarch.h gdbarch.h
1016 compare_new gdbarch.h
1017
1018
1019 #
1020 # C file
1021 #
1022
1023 exec > new-gdbarch.c
1024 copyright
1025 cat <<EOF
1026
1027 #include "defs.h"
1028 #include "arch-utils.h"
1029
1030 #include "gdbcmd.h"
1031 #include "inferior.h" 
1032 #include "symcat.h"
1033
1034 #include "floatformat.h"
1035
1036 #include "gdb_assert.h"
1037 #include "gdb_string.h"
1038 #include "gdb-events.h"
1039 #include "reggroups.h"
1040 #include "osabi.h"
1041 #include "gdb_obstack.h"
1042
1043 /* Static function declarations */
1044
1045 static void alloc_gdbarch_data (struct gdbarch *);
1046
1047 /* Non-zero if we want to trace architecture code.  */
1048
1049 #ifndef GDBARCH_DEBUG
1050 #define GDBARCH_DEBUG 0
1051 #endif
1052 int gdbarch_debug = GDBARCH_DEBUG;
1053 static void
1054 show_gdbarch_debug (struct ui_file *file, int from_tty,
1055                     struct cmd_list_element *c, const char *value)
1056 {
1057   fprintf_filtered (file, _("Architecture debugging is %s.\\n"), value);
1058 }
1059
1060 static const char *
1061 pformat (const struct floatformat **format)
1062 {
1063   if (format == NULL)
1064     return "(null)";
1065   else
1066     /* Just print out one of them - this is only for diagnostics.  */
1067     return format[0]->name;
1068 }
1069
1070 EOF
1071
1072 # gdbarch open the gdbarch object
1073 printf "\n"
1074 printf "/* Maintain the struct gdbarch object */\n"
1075 printf "\n"
1076 printf "struct gdbarch\n"
1077 printf "{\n"
1078 printf "  /* Has this architecture been fully initialized?  */\n"
1079 printf "  int initialized_p;\n"
1080 printf "\n"
1081 printf "  /* An obstack bound to the lifetime of the architecture.  */\n"
1082 printf "  struct obstack *obstack;\n"
1083 printf "\n"
1084 printf "  /* basic architectural information */\n"
1085 function_list | while do_read
1086 do
1087     if class_is_info_p
1088     then
1089         printf "  ${returntype} ${function};\n"
1090     fi
1091 done
1092 printf "\n"
1093 printf "  /* target specific vector. */\n"
1094 printf "  struct gdbarch_tdep *tdep;\n"
1095 printf "  gdbarch_dump_tdep_ftype *dump_tdep;\n"
1096 printf "\n"
1097 printf "  /* per-architecture data-pointers */\n"
1098 printf "  unsigned nr_data;\n"
1099 printf "  void **data;\n"
1100 printf "\n"
1101 printf "  /* per-architecture swap-regions */\n"
1102 printf "  struct gdbarch_swap *swap;\n"
1103 printf "\n"
1104 cat <<EOF
1105   /* Multi-arch values.
1106
1107      When extending this structure you must:
1108
1109      Add the field below.
1110
1111      Declare set/get functions and define the corresponding
1112      macro in gdbarch.h.
1113
1114      gdbarch_alloc(): If zero/NULL is not a suitable default,
1115      initialize the new field.
1116
1117      verify_gdbarch(): Confirm that the target updated the field
1118      correctly.
1119
1120      gdbarch_dump(): Add a fprintf_unfiltered call so that the new
1121      field is dumped out
1122
1123      \`\`startup_gdbarch()'': Append an initial value to the static
1124      variable (base values on the host's c-type system).
1125
1126      get_gdbarch(): Implement the set/get functions (probably using
1127      the macro's as shortcuts).
1128
1129      */
1130
1131 EOF
1132 function_list | while do_read
1133 do
1134     if class_is_variable_p
1135     then
1136         printf "  ${returntype} ${function};\n"
1137     elif class_is_function_p
1138     then
1139         printf "  gdbarch_${function}_ftype *${function};\n"
1140     fi
1141 done
1142 printf "};\n"
1143
1144 # A pre-initialized vector
1145 printf "\n"
1146 printf "\n"
1147 cat <<EOF
1148 /* The default architecture uses host values (for want of a better
1149    choice). */
1150 EOF
1151 printf "\n"
1152 printf "extern const struct bfd_arch_info bfd_default_arch_struct;\n"
1153 printf "\n"
1154 printf "struct gdbarch startup_gdbarch =\n"
1155 printf "{\n"
1156 printf "  1, /* Always initialized.  */\n"
1157 printf "  NULL, /* The obstack.  */\n"
1158 printf "  /* basic architecture information */\n"
1159 function_list | while do_read
1160 do
1161     if class_is_info_p
1162     then
1163         printf "  ${staticdefault},  /* ${function} */\n"
1164     fi
1165 done
1166 cat <<EOF
1167   /* target specific vector and its dump routine */
1168   NULL, NULL,
1169   /*per-architecture data-pointers and swap regions */
1170   0, NULL, NULL,
1171   /* Multi-arch values */
1172 EOF
1173 function_list | while do_read
1174 do
1175     if class_is_function_p || class_is_variable_p
1176     then
1177         printf "  ${staticdefault},  /* ${function} */\n"
1178     fi
1179 done
1180 cat <<EOF
1181   /* startup_gdbarch() */
1182 };
1183
1184 struct gdbarch *current_gdbarch = &startup_gdbarch;
1185 EOF
1186
1187 # Create a new gdbarch struct
1188 cat <<EOF
1189
1190 /* Create a new \`\`struct gdbarch'' based on information provided by
1191    \`\`struct gdbarch_info''. */
1192 EOF
1193 printf "\n"
1194 cat <<EOF
1195 struct gdbarch *
1196 gdbarch_alloc (const struct gdbarch_info *info,
1197                struct gdbarch_tdep *tdep)
1198 {
1199   struct gdbarch *gdbarch;
1200
1201   /* Create an obstack for allocating all the per-architecture memory,
1202      then use that to allocate the architecture vector.  */
1203   struct obstack *obstack = XMALLOC (struct obstack);
1204   obstack_init (obstack);
1205   gdbarch = obstack_alloc (obstack, sizeof (*gdbarch));
1206   memset (gdbarch, 0, sizeof (*gdbarch));
1207   gdbarch->obstack = obstack;
1208
1209   alloc_gdbarch_data (gdbarch);
1210
1211   gdbarch->tdep = tdep;
1212 EOF
1213 printf "\n"
1214 function_list | while do_read
1215 do
1216     if class_is_info_p
1217     then
1218         printf "  gdbarch->${function} = info->${function};\n"
1219     fi
1220 done
1221 printf "\n"
1222 printf "  /* Force the explicit initialization of these. */\n"
1223 function_list | while do_read
1224 do
1225     if class_is_function_p || class_is_variable_p
1226     then
1227         if [ -n "${predefault}" -a "x${predefault}" != "x0" ]
1228         then
1229           printf "  gdbarch->${function} = ${predefault};\n"
1230         fi
1231     fi
1232 done
1233 cat <<EOF
1234   /* gdbarch_alloc() */
1235
1236   return gdbarch;
1237 }
1238 EOF
1239
1240 # Free a gdbarch struct.
1241 printf "\n"
1242 printf "\n"
1243 cat <<EOF
1244 /* Allocate extra space using the per-architecture obstack.  */
1245
1246 void *
1247 gdbarch_obstack_zalloc (struct gdbarch *arch, long size)
1248 {
1249   void *data = obstack_alloc (arch->obstack, size);
1250   memset (data, 0, size);
1251   return data;
1252 }
1253
1254
1255 /* Free a gdbarch struct.  This should never happen in normal
1256    operation --- once you've created a gdbarch, you keep it around.
1257    However, if an architecture's init function encounters an error
1258    building the structure, it may need to clean up a partially
1259    constructed gdbarch.  */
1260
1261 void
1262 gdbarch_free (struct gdbarch *arch)
1263 {
1264   struct obstack *obstack;
1265   gdb_assert (arch != NULL);
1266   gdb_assert (!arch->initialized_p);
1267   obstack = arch->obstack;
1268   obstack_free (obstack, 0); /* Includes the ARCH.  */
1269   xfree (obstack);
1270 }
1271 EOF
1272
1273 # verify a new architecture
1274 cat <<EOF
1275
1276
1277 /* Ensure that all values in a GDBARCH are reasonable.  */
1278
1279 static void
1280 verify_gdbarch (struct gdbarch *gdbarch)
1281 {
1282   struct ui_file *log;
1283   struct cleanup *cleanups;
1284   long dummy;
1285   char *buf;
1286   log = mem_fileopen ();
1287   cleanups = make_cleanup_ui_file_delete (log);
1288   /* fundamental */
1289   if (gdbarch->byte_order == BFD_ENDIAN_UNKNOWN)
1290     fprintf_unfiltered (log, "\n\tbyte-order");
1291   if (gdbarch->bfd_arch_info == NULL)
1292     fprintf_unfiltered (log, "\n\tbfd_arch_info");
1293   /* Check those that need to be defined for the given multi-arch level. */
1294 EOF
1295 function_list | while do_read
1296 do
1297     if class_is_function_p || class_is_variable_p
1298     then
1299         if [ "x${invalid_p}" = "x0" ]
1300         then
1301             printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
1302         elif class_is_predicate_p
1303         then
1304             printf "  /* Skip verify of ${function}, has predicate */\n"
1305         # FIXME: See do_read for potential simplification
1306         elif [ -n "${invalid_p}" -a -n "${postdefault}" ]
1307         then
1308             printf "  if (${invalid_p})\n"
1309             printf "    gdbarch->${function} = ${postdefault};\n"
1310         elif [ -n "${predefault}" -a -n "${postdefault}" ]
1311         then
1312             printf "  if (gdbarch->${function} == ${predefault})\n"
1313             printf "    gdbarch->${function} = ${postdefault};\n"
1314         elif [ -n "${postdefault}" ]
1315         then
1316             printf "  if (gdbarch->${function} == 0)\n"
1317             printf "    gdbarch->${function} = ${postdefault};\n"
1318         elif [ -n "${invalid_p}" ]
1319         then
1320             printf "  if (${invalid_p})\n"
1321             printf "    fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
1322         elif [ -n "${predefault}" ]
1323         then
1324             printf "  if (gdbarch->${function} == ${predefault})\n"
1325             printf "    fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
1326         fi
1327     fi
1328 done
1329 cat <<EOF
1330   buf = ui_file_xstrdup (log, &dummy);
1331   make_cleanup (xfree, buf);
1332   if (strlen (buf) > 0)
1333     internal_error (__FILE__, __LINE__,
1334                     _("verify_gdbarch: the following are invalid ...%s"),
1335                     buf);
1336   do_cleanups (cleanups);
1337 }
1338 EOF
1339
1340 # dump the structure
1341 printf "\n"
1342 printf "\n"
1343 cat <<EOF
1344 /* Print out the details of the current architecture. */
1345
1346 void
1347 gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
1348 {
1349   const char *gdb_nm_file = "<not-defined>";
1350 #if defined (GDB_NM_FILE)
1351   gdb_nm_file = GDB_NM_FILE;
1352 #endif
1353   fprintf_unfiltered (file,
1354                       "gdbarch_dump: GDB_NM_FILE = %s\\n",
1355                       gdb_nm_file);
1356 EOF
1357 function_list | sort -t: -k 3 | while do_read
1358 do
1359     # First the predicate
1360     if class_is_predicate_p
1361     then
1362         printf "  fprintf_unfiltered (file,\n"
1363         printf "                      \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n"
1364         printf "                      gdbarch_${function}_p (gdbarch));\n"
1365     fi
1366     # Print the corresponding value.
1367     if class_is_function_p
1368     then
1369         printf "  fprintf_unfiltered (file,\n"
1370         printf "                      \"gdbarch_dump: ${function} = <0x%%lx>\\\\n\",\n"
1371         printf "                      (long) gdbarch->${function});\n"
1372     else
1373         # It is a variable
1374         case "${print}:${returntype}" in
1375             :CORE_ADDR )
1376                 fmt="0x%s"
1377                 print="paddr_nz (gdbarch->${function})"
1378                 ;;
1379             :* )
1380                 fmt="%s"
1381                 print="paddr_d (gdbarch->${function})"
1382                 ;;
1383             * )
1384                 fmt="%s"
1385                 ;;
1386         esac
1387         printf "  fprintf_unfiltered (file,\n"
1388         printf "                      \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}"
1389         printf "                      ${print});\n"
1390     fi
1391 done
1392 cat <<EOF
1393   if (gdbarch->dump_tdep != NULL)
1394     gdbarch->dump_tdep (gdbarch, file);
1395 }
1396 EOF
1397
1398
1399 # GET/SET
1400 printf "\n"
1401 cat <<EOF
1402 struct gdbarch_tdep *
1403 gdbarch_tdep (struct gdbarch *gdbarch)
1404 {
1405   if (gdbarch_debug >= 2)
1406     fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\\n");
1407   return gdbarch->tdep;
1408 }
1409 EOF
1410 printf "\n"
1411 function_list | while do_read
1412 do
1413     if class_is_predicate_p
1414     then
1415         printf "\n"
1416         printf "int\n"
1417         printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n"
1418         printf "{\n"
1419         printf "  gdb_assert (gdbarch != NULL);\n"
1420         printf "  return ${predicate};\n"
1421         printf "}\n"
1422     fi
1423     if class_is_function_p
1424     then
1425         printf "\n"
1426         printf "${returntype}\n"
1427         if [ "x${formal}" = "xvoid" ]
1428         then
1429           printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1430         else
1431           printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n"
1432         fi
1433         printf "{\n"
1434         printf "  gdb_assert (gdbarch != NULL);\n"
1435         printf "  gdb_assert (gdbarch->${function} != NULL);\n"
1436         if class_is_predicate_p && test -n "${predefault}"
1437         then
1438             # Allow a call to a function with a predicate.
1439             printf "  /* Do not check predicate: ${predicate}, allow call.  */\n"
1440         fi
1441         printf "  if (gdbarch_debug >= 2)\n"
1442         printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1443         if [ "x${actual}" = "x-" -o "x${actual}" = "x" ]
1444         then
1445             if class_is_multiarch_p
1446             then
1447                 params="gdbarch"
1448             else
1449                 params=""
1450             fi
1451         else
1452             if class_is_multiarch_p
1453             then
1454                 params="gdbarch, ${actual}"
1455             else
1456                 params="${actual}"
1457             fi
1458         fi
1459         if [ "x${returntype}" = "xvoid" ]
1460         then
1461           printf "  gdbarch->${function} (${params});\n"
1462         else
1463           printf "  return gdbarch->${function} (${params});\n"
1464         fi
1465         printf "}\n"
1466         printf "\n"
1467         printf "void\n"
1468         printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
1469         printf "            `echo ${function} | sed -e 's/./ /g'`  gdbarch_${function}_ftype ${function})\n"
1470         printf "{\n"
1471         printf "  gdbarch->${function} = ${function};\n"
1472         printf "}\n"
1473     elif class_is_variable_p
1474     then
1475         printf "\n"
1476         printf "${returntype}\n"
1477         printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1478         printf "{\n"
1479         printf "  gdb_assert (gdbarch != NULL);\n"
1480         if [ "x${invalid_p}" = "x0" ]
1481         then
1482             printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
1483         elif [ -n "${invalid_p}" ]
1484         then
1485             printf "  /* Check variable is valid.  */\n"
1486             printf "  gdb_assert (!(${invalid_p}));\n"
1487         elif [ -n "${predefault}" ]
1488         then
1489             printf "  /* Check variable changed from pre-default.  */\n"
1490             printf "  gdb_assert (gdbarch->${function} != ${predefault});\n"
1491         fi
1492         printf "  if (gdbarch_debug >= 2)\n"
1493         printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1494         printf "  return gdbarch->${function};\n"
1495         printf "}\n"
1496         printf "\n"
1497         printf "void\n"
1498         printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
1499         printf "            `echo ${function} | sed -e 's/./ /g'`  ${returntype} ${function})\n"
1500         printf "{\n"
1501         printf "  gdbarch->${function} = ${function};\n"
1502         printf "}\n"
1503     elif class_is_info_p
1504     then
1505         printf "\n"
1506         printf "${returntype}\n"
1507         printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1508         printf "{\n"
1509         printf "  gdb_assert (gdbarch != NULL);\n"
1510         printf "  if (gdbarch_debug >= 2)\n"
1511         printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1512         printf "  return gdbarch->${function};\n"
1513         printf "}\n"
1514     fi
1515 done
1516
1517 # All the trailing guff
1518 cat <<EOF
1519
1520
1521 /* Keep a registry of per-architecture data-pointers required by GDB
1522    modules. */
1523
1524 struct gdbarch_data
1525 {
1526   unsigned index;
1527   int init_p;
1528   gdbarch_data_pre_init_ftype *pre_init;
1529   gdbarch_data_post_init_ftype *post_init;
1530 };
1531
1532 struct gdbarch_data_registration
1533 {
1534   struct gdbarch_data *data;
1535   struct gdbarch_data_registration *next;
1536 };
1537
1538 struct gdbarch_data_registry
1539 {
1540   unsigned nr;
1541   struct gdbarch_data_registration *registrations;
1542 };
1543
1544 struct gdbarch_data_registry gdbarch_data_registry =
1545 {
1546   0, NULL,
1547 };
1548
1549 static struct gdbarch_data *
1550 gdbarch_data_register (gdbarch_data_pre_init_ftype *pre_init,
1551                        gdbarch_data_post_init_ftype *post_init)
1552 {
1553   struct gdbarch_data_registration **curr;
1554   /* Append the new registraration.  */
1555   for (curr = &gdbarch_data_registry.registrations;
1556        (*curr) != NULL;
1557        curr = &(*curr)->next);
1558   (*curr) = XMALLOC (struct gdbarch_data_registration);
1559   (*curr)->next = NULL;
1560   (*curr)->data = XMALLOC (struct gdbarch_data);
1561   (*curr)->data->index = gdbarch_data_registry.nr++;
1562   (*curr)->data->pre_init = pre_init;
1563   (*curr)->data->post_init = post_init;
1564   (*curr)->data->init_p = 1;
1565   return (*curr)->data;
1566 }
1567
1568 struct gdbarch_data *
1569 gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *pre_init)
1570 {
1571   return gdbarch_data_register (pre_init, NULL);
1572 }
1573
1574 struct gdbarch_data *
1575 gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *post_init)
1576 {
1577   return gdbarch_data_register (NULL, post_init);
1578 }
1579
1580 /* Create/delete the gdbarch data vector. */
1581
1582 static void
1583 alloc_gdbarch_data (struct gdbarch *gdbarch)
1584 {
1585   gdb_assert (gdbarch->data == NULL);
1586   gdbarch->nr_data = gdbarch_data_registry.nr;
1587   gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
1588 }
1589
1590 /* Initialize the current value of the specified per-architecture
1591    data-pointer. */
1592
1593 void
1594 deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
1595                              struct gdbarch_data *data,
1596                              void *pointer)
1597 {
1598   gdb_assert (data->index < gdbarch->nr_data);
1599   gdb_assert (gdbarch->data[data->index] == NULL);
1600   gdb_assert (data->pre_init == NULL);
1601   gdbarch->data[data->index] = pointer;
1602 }
1603
1604 /* Return the current value of the specified per-architecture
1605    data-pointer. */
1606
1607 void *
1608 gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
1609 {
1610   gdb_assert (data->index < gdbarch->nr_data);
1611   if (gdbarch->data[data->index] == NULL)
1612     {
1613       /* The data-pointer isn't initialized, call init() to get a
1614          value.  */
1615       if (data->pre_init != NULL)
1616         /* Mid architecture creation: pass just the obstack, and not
1617            the entire architecture, as that way it isn't possible for
1618            pre-init code to refer to undefined architecture
1619            fields.  */
1620         gdbarch->data[data->index] = data->pre_init (gdbarch->obstack);
1621       else if (gdbarch->initialized_p
1622                && data->post_init != NULL)
1623         /* Post architecture creation: pass the entire architecture
1624            (as all fields are valid), but be careful to also detect
1625            recursive references.  */
1626         {
1627           gdb_assert (data->init_p);
1628           data->init_p = 0;
1629           gdbarch->data[data->index] = data->post_init (gdbarch);
1630           data->init_p = 1;
1631         }
1632       else
1633         /* The architecture initialization hasn't completed - punt -
1634          hope that the caller knows what they are doing.  Once
1635          deprecated_set_gdbarch_data has been initialized, this can be
1636          changed to an internal error.  */
1637         return NULL;
1638       gdb_assert (gdbarch->data[data->index] != NULL);
1639     }
1640   return gdbarch->data[data->index];
1641 }
1642
1643
1644 /* Keep a registry of the architectures known by GDB. */
1645
1646 struct gdbarch_registration
1647 {
1648   enum bfd_architecture bfd_architecture;
1649   gdbarch_init_ftype *init;
1650   gdbarch_dump_tdep_ftype *dump_tdep;
1651   struct gdbarch_list *arches;
1652   struct gdbarch_registration *next;
1653 };
1654
1655 static struct gdbarch_registration *gdbarch_registry = NULL;
1656
1657 static void
1658 append_name (const char ***buf, int *nr, const char *name)
1659 {
1660   *buf = xrealloc (*buf, sizeof (char**) * (*nr + 1));
1661   (*buf)[*nr] = name;
1662   *nr += 1;
1663 }
1664
1665 const char **
1666 gdbarch_printable_names (void)
1667 {
1668   /* Accumulate a list of names based on the registed list of
1669      architectures. */
1670   enum bfd_architecture a;
1671   int nr_arches = 0;
1672   const char **arches = NULL;
1673   struct gdbarch_registration *rego;
1674   for (rego = gdbarch_registry;
1675        rego != NULL;
1676        rego = rego->next)
1677     {
1678       const struct bfd_arch_info *ap;
1679       ap = bfd_lookup_arch (rego->bfd_architecture, 0);
1680       if (ap == NULL)
1681         internal_error (__FILE__, __LINE__,
1682                         _("gdbarch_architecture_names: multi-arch unknown"));
1683       do
1684         {
1685           append_name (&arches, &nr_arches, ap->printable_name);
1686           ap = ap->next;
1687         }
1688       while (ap != NULL);
1689     }
1690   append_name (&arches, &nr_arches, NULL);
1691   return arches;
1692 }
1693
1694
1695 void
1696 gdbarch_register (enum bfd_architecture bfd_architecture,
1697                   gdbarch_init_ftype *init,
1698                   gdbarch_dump_tdep_ftype *dump_tdep)
1699 {
1700   struct gdbarch_registration **curr;
1701   const struct bfd_arch_info *bfd_arch_info;
1702   /* Check that BFD recognizes this architecture */
1703   bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1704   if (bfd_arch_info == NULL)
1705     {
1706       internal_error (__FILE__, __LINE__,
1707                       _("gdbarch: Attempt to register unknown architecture (%d)"),
1708                       bfd_architecture);
1709     }
1710   /* Check that we haven't seen this architecture before */
1711   for (curr = &gdbarch_registry;
1712        (*curr) != NULL;
1713        curr = &(*curr)->next)
1714     {
1715       if (bfd_architecture == (*curr)->bfd_architecture)
1716         internal_error (__FILE__, __LINE__,
1717                         _("gdbarch: Duplicate registraration of architecture (%s)"),
1718                         bfd_arch_info->printable_name);
1719     }
1720   /* log it */
1721   if (gdbarch_debug)
1722     fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
1723                         bfd_arch_info->printable_name,
1724                         (long) init);
1725   /* Append it */
1726   (*curr) = XMALLOC (struct gdbarch_registration);
1727   (*curr)->bfd_architecture = bfd_architecture;
1728   (*curr)->init = init;
1729   (*curr)->dump_tdep = dump_tdep;
1730   (*curr)->arches = NULL;
1731   (*curr)->next = NULL;
1732 }
1733
1734 void
1735 register_gdbarch_init (enum bfd_architecture bfd_architecture,
1736                        gdbarch_init_ftype *init)
1737 {
1738   gdbarch_register (bfd_architecture, init, NULL);
1739 }
1740
1741
1742 /* Look for an architecture using gdbarch_info.  */
1743
1744 struct gdbarch_list *
1745 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1746                              const struct gdbarch_info *info)
1747 {
1748   for (; arches != NULL; arches = arches->next)
1749     {
1750       if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1751         continue;
1752       if (info->byte_order != arches->gdbarch->byte_order)
1753         continue;
1754       if (info->osabi != arches->gdbarch->osabi)
1755         continue;
1756       if (info->target_desc != arches->gdbarch->target_desc)
1757         continue;
1758       return arches;
1759     }
1760   return NULL;
1761 }
1762
1763
1764 /* Find an architecture that matches the specified INFO.  Create a new
1765    architecture if needed.  Return that new architecture.  Assumes
1766    that there is no current architecture.  */
1767
1768 static struct gdbarch *
1769 find_arch_by_info (struct gdbarch_info info)
1770 {
1771   struct gdbarch *new_gdbarch;
1772   struct gdbarch_registration *rego;
1773
1774   /* The existing architecture has been swapped out - all this code
1775      works from a clean slate.  */
1776   gdb_assert (current_gdbarch == NULL);
1777
1778   /* Fill in missing parts of the INFO struct using a number of
1779      sources: "set ..."; INFOabfd supplied; and the global
1780      defaults.  */
1781   gdbarch_info_fill (&info);
1782
1783   /* Must have found some sort of architecture. */
1784   gdb_assert (info.bfd_arch_info != NULL);
1785
1786   if (gdbarch_debug)
1787     {
1788       fprintf_unfiltered (gdb_stdlog,
1789                           "find_arch_by_info: info.bfd_arch_info %s\n",
1790                           (info.bfd_arch_info != NULL
1791                            ? info.bfd_arch_info->printable_name
1792                            : "(null)"));
1793       fprintf_unfiltered (gdb_stdlog,
1794                           "find_arch_by_info: info.byte_order %d (%s)\n",
1795                           info.byte_order,
1796                           (info.byte_order == BFD_ENDIAN_BIG ? "big"
1797                            : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
1798                            : "default"));
1799       fprintf_unfiltered (gdb_stdlog,
1800                           "find_arch_by_info: info.osabi %d (%s)\n",
1801                           info.osabi, gdbarch_osabi_name (info.osabi));
1802       fprintf_unfiltered (gdb_stdlog,
1803                           "find_arch_by_info: info.abfd 0x%lx\n",
1804                           (long) info.abfd);
1805       fprintf_unfiltered (gdb_stdlog,
1806                           "find_arch_by_info: info.tdep_info 0x%lx\n",
1807                           (long) info.tdep_info);
1808     }
1809
1810   /* Find the tdep code that knows about this architecture.  */
1811   for (rego = gdbarch_registry;
1812        rego != NULL;
1813        rego = rego->next)
1814     if (rego->bfd_architecture == info.bfd_arch_info->arch)
1815       break;
1816   if (rego == NULL)
1817     {
1818       if (gdbarch_debug)
1819         fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1820                             "No matching architecture\n");
1821       return 0;
1822     }
1823
1824   /* Ask the tdep code for an architecture that matches "info".  */
1825   new_gdbarch = rego->init (info, rego->arches);
1826
1827   /* Did the tdep code like it?  No.  Reject the change and revert to
1828      the old architecture.  */
1829   if (new_gdbarch == NULL)
1830     {
1831       if (gdbarch_debug)
1832         fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1833                             "Target rejected architecture\n");
1834       return NULL;
1835     }
1836
1837   /* Is this a pre-existing architecture (as determined by already
1838      being initialized)?  Move it to the front of the architecture
1839      list (keeping the list sorted Most Recently Used).  */
1840   if (new_gdbarch->initialized_p)
1841     {
1842       struct gdbarch_list **list;
1843       struct gdbarch_list *this;
1844       if (gdbarch_debug)
1845         fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1846                             "Previous architecture 0x%08lx (%s) selected\n",
1847                             (long) new_gdbarch,
1848                             new_gdbarch->bfd_arch_info->printable_name);
1849       /* Find the existing arch in the list.  */
1850       for (list = &rego->arches;
1851            (*list) != NULL && (*list)->gdbarch != new_gdbarch;
1852            list = &(*list)->next);
1853       /* It had better be in the list of architectures.  */
1854       gdb_assert ((*list) != NULL && (*list)->gdbarch == new_gdbarch);
1855       /* Unlink THIS.  */
1856       this = (*list);
1857       (*list) = this->next;
1858       /* Insert THIS at the front.  */
1859       this->next = rego->arches;
1860       rego->arches = this;
1861       /* Return it.  */
1862       return new_gdbarch;
1863     }
1864
1865   /* It's a new architecture.  */
1866   if (gdbarch_debug)
1867     fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1868                         "New architecture 0x%08lx (%s) selected\n",
1869                         (long) new_gdbarch,
1870                         new_gdbarch->bfd_arch_info->printable_name);
1871   
1872   /* Insert the new architecture into the front of the architecture
1873      list (keep the list sorted Most Recently Used).  */
1874   {
1875     struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
1876     this->next = rego->arches;
1877     this->gdbarch = new_gdbarch;
1878     rego->arches = this;
1879   }    
1880
1881   /* Check that the newly installed architecture is valid.  Plug in
1882      any post init values.  */
1883   new_gdbarch->dump_tdep = rego->dump_tdep;
1884   verify_gdbarch (new_gdbarch);
1885   new_gdbarch->initialized_p = 1;
1886
1887   if (gdbarch_debug)
1888     gdbarch_dump (new_gdbarch, gdb_stdlog);
1889
1890   return new_gdbarch;
1891 }
1892
1893 struct gdbarch *
1894 gdbarch_find_by_info (struct gdbarch_info info)
1895 {
1896   struct gdbarch *new_gdbarch;
1897
1898   /* Save the previously selected architecture, setting the global to
1899      NULL.  This stops things like gdbarch->init() trying to use the
1900      previous architecture's configuration.  The previous architecture
1901      may not even be of the same architecture family.  The most recent
1902      architecture of the same family is found at the head of the
1903      rego->arches list.  */
1904   struct gdbarch *old_gdbarch = current_gdbarch;
1905   current_gdbarch = NULL;
1906
1907   /* Find the specified architecture.  */
1908   new_gdbarch = find_arch_by_info (info);
1909
1910   /* Restore the existing architecture.  */
1911   gdb_assert (current_gdbarch == NULL);
1912   current_gdbarch = old_gdbarch;
1913
1914   return new_gdbarch;
1915 }
1916
1917 /* Make the specified architecture current.  */
1918
1919 void
1920 deprecated_current_gdbarch_select_hack (struct gdbarch *new_gdbarch)
1921 {
1922   gdb_assert (new_gdbarch != NULL);
1923   gdb_assert (current_gdbarch != NULL);
1924   gdb_assert (new_gdbarch->initialized_p);
1925   current_gdbarch = new_gdbarch;
1926   architecture_changed_event ();
1927   reinit_frame_cache ();
1928 }
1929
1930 extern void _initialize_gdbarch (void);
1931
1932 void
1933 _initialize_gdbarch (void)
1934 {
1935   struct cmd_list_element *c;
1936
1937   add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\
1938 Set architecture debugging."), _("\\
1939 Show architecture debugging."), _("\\
1940 When non-zero, architecture debugging is enabled."),
1941                             NULL,
1942                             show_gdbarch_debug,
1943                             &setdebuglist, &showdebuglist);
1944 }
1945 EOF
1946
1947 # close things off
1948 exec 1>&2
1949 #../move-if-change new-gdbarch.c gdbarch.c
1950 compare_new gdbarch.c