2007-11-02 Markus Deuling <deuling@de.ibm.com>
[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 ``current_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 (current_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) current_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*current_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 (current_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 (current_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 (current_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*):current_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 (current_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 f: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 f:int:cannot_fetch_register:int regnum:regnum::cannot_register_not::0
449 f: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 f: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 f: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:current_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   /* NOTE: The new architecture variable is named \`\`current_gdbarch''
1200      so that macros such as TARGET_ARCHITECTURE, when expanded, refer to
1201      the current local architecture and not the previous global
1202      architecture.  This ensures that the new architectures initial
1203      values are not influenced by the previous architecture.  Once
1204      everything is parameterised with gdbarch, this will go away.  */
1205   struct gdbarch *current_gdbarch;
1206
1207   /* Create an obstack for allocating all the per-architecture memory,
1208      then use that to allocate the architecture vector.  */
1209   struct obstack *obstack = XMALLOC (struct obstack);
1210   obstack_init (obstack);
1211   current_gdbarch = obstack_alloc (obstack, sizeof (*current_gdbarch));
1212   memset (current_gdbarch, 0, sizeof (*current_gdbarch));
1213   current_gdbarch->obstack = obstack;
1214
1215   alloc_gdbarch_data (current_gdbarch);
1216
1217   current_gdbarch->tdep = tdep;
1218 EOF
1219 printf "\n"
1220 function_list | while do_read
1221 do
1222     if class_is_info_p
1223     then
1224         printf "  current_gdbarch->${function} = info->${function};\n"
1225     fi
1226 done
1227 printf "\n"
1228 printf "  /* Force the explicit initialization of these. */\n"
1229 function_list | while do_read
1230 do
1231     if class_is_function_p || class_is_variable_p
1232     then
1233         if [ -n "${predefault}" -a "x${predefault}" != "x0" ]
1234         then
1235           printf "  current_gdbarch->${function} = ${predefault};\n"
1236         fi
1237     fi
1238 done
1239 cat <<EOF
1240   /* gdbarch_alloc() */
1241
1242   return current_gdbarch;
1243 }
1244 EOF
1245
1246 # Free a gdbarch struct.
1247 printf "\n"
1248 printf "\n"
1249 cat <<EOF
1250 /* Allocate extra space using the per-architecture obstack.  */
1251
1252 void *
1253 gdbarch_obstack_zalloc (struct gdbarch *arch, long size)
1254 {
1255   void *data = obstack_alloc (arch->obstack, size);
1256   memset (data, 0, size);
1257   return data;
1258 }
1259
1260
1261 /* Free a gdbarch struct.  This should never happen in normal
1262    operation --- once you've created a gdbarch, you keep it around.
1263    However, if an architecture's init function encounters an error
1264    building the structure, it may need to clean up a partially
1265    constructed gdbarch.  */
1266
1267 void
1268 gdbarch_free (struct gdbarch *arch)
1269 {
1270   struct obstack *obstack;
1271   gdb_assert (arch != NULL);
1272   gdb_assert (!arch->initialized_p);
1273   obstack = arch->obstack;
1274   obstack_free (obstack, 0); /* Includes the ARCH.  */
1275   xfree (obstack);
1276 }
1277 EOF
1278
1279 # verify a new architecture
1280 cat <<EOF
1281
1282
1283 /* Ensure that all values in a GDBARCH are reasonable.  */
1284
1285 /* NOTE/WARNING: The parameter is called \`\`current_gdbarch'' so that it
1286    just happens to match the global variable \`\`current_gdbarch''.  That
1287    way macros refering to that variable get the local and not the global
1288    version - ulgh.  Once everything is parameterised with gdbarch, this
1289    will go away. */
1290
1291 static void
1292 verify_gdbarch (struct gdbarch *current_gdbarch)
1293 {
1294   struct ui_file *log;
1295   struct cleanup *cleanups;
1296   long dummy;
1297   char *buf;
1298   log = mem_fileopen ();
1299   cleanups = make_cleanup_ui_file_delete (log);
1300   /* fundamental */
1301   if (current_gdbarch->byte_order == BFD_ENDIAN_UNKNOWN)
1302     fprintf_unfiltered (log, "\n\tbyte-order");
1303   if (current_gdbarch->bfd_arch_info == NULL)
1304     fprintf_unfiltered (log, "\n\tbfd_arch_info");
1305   /* Check those that need to be defined for the given multi-arch level. */
1306 EOF
1307 function_list | while do_read
1308 do
1309     if class_is_function_p || class_is_variable_p
1310     then
1311         if [ "x${invalid_p}" = "x0" ]
1312         then
1313             printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
1314         elif class_is_predicate_p
1315         then
1316             printf "  /* Skip verify of ${function}, has predicate */\n"
1317         # FIXME: See do_read for potential simplification
1318         elif [ -n "${invalid_p}" -a -n "${postdefault}" ]
1319         then
1320             printf "  if (${invalid_p})\n"
1321             printf "    current_gdbarch->${function} = ${postdefault};\n"
1322         elif [ -n "${predefault}" -a -n "${postdefault}" ]
1323         then
1324             printf "  if (current_gdbarch->${function} == ${predefault})\n"
1325             printf "    current_gdbarch->${function} = ${postdefault};\n"
1326         elif [ -n "${postdefault}" ]
1327         then
1328             printf "  if (current_gdbarch->${function} == 0)\n"
1329             printf "    current_gdbarch->${function} = ${postdefault};\n"
1330         elif [ -n "${invalid_p}" ]
1331         then
1332             printf "  if (${invalid_p})\n"
1333             printf "    fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
1334         elif [ -n "${predefault}" ]
1335         then
1336             printf "  if (current_gdbarch->${function} == ${predefault})\n"
1337             printf "    fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
1338         fi
1339     fi
1340 done
1341 cat <<EOF
1342   buf = ui_file_xstrdup (log, &dummy);
1343   make_cleanup (xfree, buf);
1344   if (strlen (buf) > 0)
1345     internal_error (__FILE__, __LINE__,
1346                     _("verify_gdbarch: the following are invalid ...%s"),
1347                     buf);
1348   do_cleanups (cleanups);
1349 }
1350 EOF
1351
1352 # dump the structure
1353 printf "\n"
1354 printf "\n"
1355 cat <<EOF
1356 /* Print out the details of the current architecture. */
1357
1358 /* NOTE/WARNING: The parameter is called \`\`current_gdbarch'' so that it
1359    just happens to match the global variable \`\`current_gdbarch''.  That
1360    way macros refering to that variable get the local and not the global
1361    version - ulgh.  Once everything is parameterised with gdbarch, this
1362    will go away. */
1363
1364 void
1365 gdbarch_dump (struct gdbarch *current_gdbarch, struct ui_file *file)
1366 {
1367   const char *gdb_xm_file = "<not-defined>";
1368   const char *gdb_nm_file = "<not-defined>";
1369   const char *gdb_tm_file = "<not-defined>";
1370 #if defined (GDB_XM_FILE)
1371   gdb_xm_file = GDB_XM_FILE;
1372 #endif
1373   fprintf_unfiltered (file,
1374                       "gdbarch_dump: GDB_XM_FILE = %s\\n",
1375                       gdb_xm_file);
1376 #if defined (GDB_NM_FILE)
1377   gdb_nm_file = GDB_NM_FILE;
1378 #endif
1379   fprintf_unfiltered (file,
1380                       "gdbarch_dump: GDB_NM_FILE = %s\\n",
1381                       gdb_nm_file);
1382 #if defined (GDB_TM_FILE)
1383   gdb_tm_file = GDB_TM_FILE;
1384 #endif
1385   fprintf_unfiltered (file,
1386                       "gdbarch_dump: GDB_TM_FILE = %s\\n",
1387                       gdb_tm_file);
1388 EOF
1389 function_list | sort -t: -k 3 | while do_read
1390 do
1391     # First the predicate
1392     if class_is_predicate_p
1393     then
1394         printf "  fprintf_unfiltered (file,\n"
1395         printf "                      \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n"
1396         printf "                      gdbarch_${function}_p (current_gdbarch));\n"
1397     fi
1398     # Print the corresponding value.
1399     if class_is_function_p
1400     then
1401         printf "  fprintf_unfiltered (file,\n"
1402         printf "                      \"gdbarch_dump: ${function} = <0x%%lx>\\\\n\",\n"
1403         printf "                      (long) current_gdbarch->${function});\n"
1404     else
1405         # It is a variable
1406         case "${print}:${returntype}" in
1407             :CORE_ADDR )
1408                 fmt="0x%s"
1409                 print="paddr_nz (current_gdbarch->${function})"
1410                 ;;
1411             :* )
1412                 fmt="%s"
1413                 print="paddr_d (current_gdbarch->${function})"
1414                 ;;
1415             * )
1416                 fmt="%s"
1417                 ;;
1418         esac
1419         printf "  fprintf_unfiltered (file,\n"
1420         printf "                      \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}"
1421         printf "                      ${print});\n"
1422     fi
1423 done
1424 cat <<EOF
1425   if (current_gdbarch->dump_tdep != NULL)
1426     current_gdbarch->dump_tdep (current_gdbarch, file);
1427 }
1428 EOF
1429
1430
1431 # GET/SET
1432 printf "\n"
1433 cat <<EOF
1434 struct gdbarch_tdep *
1435 gdbarch_tdep (struct gdbarch *gdbarch)
1436 {
1437   if (gdbarch_debug >= 2)
1438     fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\\n");
1439   return gdbarch->tdep;
1440 }
1441 EOF
1442 printf "\n"
1443 function_list | while do_read
1444 do
1445     if class_is_predicate_p
1446     then
1447         printf "\n"
1448         printf "int\n"
1449         printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n"
1450         printf "{\n"
1451         printf "  gdb_assert (gdbarch != NULL);\n"
1452         printf "  return ${predicate};\n"
1453         printf "}\n"
1454     fi
1455     if class_is_function_p
1456     then
1457         printf "\n"
1458         printf "${returntype}\n"
1459         if [ "x${formal}" = "xvoid" ]
1460         then
1461           printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1462         else
1463           printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n"
1464         fi
1465         printf "{\n"
1466         printf "  gdb_assert (gdbarch != NULL);\n"
1467         printf "  gdb_assert (gdbarch->${function} != NULL);\n"
1468         if class_is_predicate_p && test -n "${predefault}"
1469         then
1470             # Allow a call to a function with a predicate.
1471             printf "  /* Do not check predicate: ${predicate}, allow call.  */\n"
1472         fi
1473         printf "  if (gdbarch_debug >= 2)\n"
1474         printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1475         if [ "x${actual}" = "x-" -o "x${actual}" = "x" ]
1476         then
1477             if class_is_multiarch_p
1478             then
1479                 params="gdbarch"
1480             else
1481                 params=""
1482             fi
1483         else
1484             if class_is_multiarch_p
1485             then
1486                 params="gdbarch, ${actual}"
1487             else
1488                 params="${actual}"
1489             fi
1490         fi
1491         if [ "x${returntype}" = "xvoid" ]
1492         then
1493           printf "  gdbarch->${function} (${params});\n"
1494         else
1495           printf "  return gdbarch->${function} (${params});\n"
1496         fi
1497         printf "}\n"
1498         printf "\n"
1499         printf "void\n"
1500         printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
1501         printf "            `echo ${function} | sed -e 's/./ /g'`  gdbarch_${function}_ftype ${function})\n"
1502         printf "{\n"
1503         printf "  gdbarch->${function} = ${function};\n"
1504         printf "}\n"
1505     elif class_is_variable_p
1506     then
1507         printf "\n"
1508         printf "${returntype}\n"
1509         printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1510         printf "{\n"
1511         printf "  gdb_assert (gdbarch != NULL);\n"
1512         if [ "x${invalid_p}" = "x0" ]
1513         then
1514             printf "  /* Skip verify of ${function}, invalid_p == 0 */\n"
1515         elif [ -n "${invalid_p}" ]
1516         then
1517             printf "  /* Check variable is valid.  */\n"
1518             printf "  gdb_assert (!(${invalid_p}));\n"
1519         elif [ -n "${predefault}" ]
1520         then
1521             printf "  /* Check variable changed from pre-default.  */\n"
1522             printf "  gdb_assert (gdbarch->${function} != ${predefault});\n"
1523         fi
1524         printf "  if (gdbarch_debug >= 2)\n"
1525         printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1526         printf "  return gdbarch->${function};\n"
1527         printf "}\n"
1528         printf "\n"
1529         printf "void\n"
1530         printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
1531         printf "            `echo ${function} | sed -e 's/./ /g'`  ${returntype} ${function})\n"
1532         printf "{\n"
1533         printf "  gdbarch->${function} = ${function};\n"
1534         printf "}\n"
1535     elif class_is_info_p
1536     then
1537         printf "\n"
1538         printf "${returntype}\n"
1539         printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1540         printf "{\n"
1541         printf "  gdb_assert (gdbarch != NULL);\n"
1542         printf "  if (gdbarch_debug >= 2)\n"
1543         printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1544         printf "  return gdbarch->${function};\n"
1545         printf "}\n"
1546     fi
1547 done
1548
1549 # All the trailing guff
1550 cat <<EOF
1551
1552
1553 /* Keep a registry of per-architecture data-pointers required by GDB
1554    modules. */
1555
1556 struct gdbarch_data
1557 {
1558   unsigned index;
1559   int init_p;
1560   gdbarch_data_pre_init_ftype *pre_init;
1561   gdbarch_data_post_init_ftype *post_init;
1562 };
1563
1564 struct gdbarch_data_registration
1565 {
1566   struct gdbarch_data *data;
1567   struct gdbarch_data_registration *next;
1568 };
1569
1570 struct gdbarch_data_registry
1571 {
1572   unsigned nr;
1573   struct gdbarch_data_registration *registrations;
1574 };
1575
1576 struct gdbarch_data_registry gdbarch_data_registry =
1577 {
1578   0, NULL,
1579 };
1580
1581 static struct gdbarch_data *
1582 gdbarch_data_register (gdbarch_data_pre_init_ftype *pre_init,
1583                        gdbarch_data_post_init_ftype *post_init)
1584 {
1585   struct gdbarch_data_registration **curr;
1586   /* Append the new registraration.  */
1587   for (curr = &gdbarch_data_registry.registrations;
1588        (*curr) != NULL;
1589        curr = &(*curr)->next);
1590   (*curr) = XMALLOC (struct gdbarch_data_registration);
1591   (*curr)->next = NULL;
1592   (*curr)->data = XMALLOC (struct gdbarch_data);
1593   (*curr)->data->index = gdbarch_data_registry.nr++;
1594   (*curr)->data->pre_init = pre_init;
1595   (*curr)->data->post_init = post_init;
1596   (*curr)->data->init_p = 1;
1597   return (*curr)->data;
1598 }
1599
1600 struct gdbarch_data *
1601 gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *pre_init)
1602 {
1603   return gdbarch_data_register (pre_init, NULL);
1604 }
1605
1606 struct gdbarch_data *
1607 gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *post_init)
1608 {
1609   return gdbarch_data_register (NULL, post_init);
1610 }
1611
1612 /* Create/delete the gdbarch data vector. */
1613
1614 static void
1615 alloc_gdbarch_data (struct gdbarch *gdbarch)
1616 {
1617   gdb_assert (gdbarch->data == NULL);
1618   gdbarch->nr_data = gdbarch_data_registry.nr;
1619   gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
1620 }
1621
1622 /* Initialize the current value of the specified per-architecture
1623    data-pointer. */
1624
1625 void
1626 deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
1627                              struct gdbarch_data *data,
1628                              void *pointer)
1629 {
1630   gdb_assert (data->index < gdbarch->nr_data);
1631   gdb_assert (gdbarch->data[data->index] == NULL);
1632   gdb_assert (data->pre_init == NULL);
1633   gdbarch->data[data->index] = pointer;
1634 }
1635
1636 /* Return the current value of the specified per-architecture
1637    data-pointer. */
1638
1639 void *
1640 gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
1641 {
1642   gdb_assert (data->index < gdbarch->nr_data);
1643   if (gdbarch->data[data->index] == NULL)
1644     {
1645       /* The data-pointer isn't initialized, call init() to get a
1646          value.  */
1647       if (data->pre_init != NULL)
1648         /* Mid architecture creation: pass just the obstack, and not
1649            the entire architecture, as that way it isn't possible for
1650            pre-init code to refer to undefined architecture
1651            fields.  */
1652         gdbarch->data[data->index] = data->pre_init (gdbarch->obstack);
1653       else if (gdbarch->initialized_p
1654                && data->post_init != NULL)
1655         /* Post architecture creation: pass the entire architecture
1656            (as all fields are valid), but be careful to also detect
1657            recursive references.  */
1658         {
1659           gdb_assert (data->init_p);
1660           data->init_p = 0;
1661           gdbarch->data[data->index] = data->post_init (gdbarch);
1662           data->init_p = 1;
1663         }
1664       else
1665         /* The architecture initialization hasn't completed - punt -
1666          hope that the caller knows what they are doing.  Once
1667          deprecated_set_gdbarch_data has been initialized, this can be
1668          changed to an internal error.  */
1669         return NULL;
1670       gdb_assert (gdbarch->data[data->index] != NULL);
1671     }
1672   return gdbarch->data[data->index];
1673 }
1674
1675
1676 /* Keep a registry of the architectures known by GDB. */
1677
1678 struct gdbarch_registration
1679 {
1680   enum bfd_architecture bfd_architecture;
1681   gdbarch_init_ftype *init;
1682   gdbarch_dump_tdep_ftype *dump_tdep;
1683   struct gdbarch_list *arches;
1684   struct gdbarch_registration *next;
1685 };
1686
1687 static struct gdbarch_registration *gdbarch_registry = NULL;
1688
1689 static void
1690 append_name (const char ***buf, int *nr, const char *name)
1691 {
1692   *buf = xrealloc (*buf, sizeof (char**) * (*nr + 1));
1693   (*buf)[*nr] = name;
1694   *nr += 1;
1695 }
1696
1697 const char **
1698 gdbarch_printable_names (void)
1699 {
1700   /* Accumulate a list of names based on the registed list of
1701      architectures. */
1702   enum bfd_architecture a;
1703   int nr_arches = 0;
1704   const char **arches = NULL;
1705   struct gdbarch_registration *rego;
1706   for (rego = gdbarch_registry;
1707        rego != NULL;
1708        rego = rego->next)
1709     {
1710       const struct bfd_arch_info *ap;
1711       ap = bfd_lookup_arch (rego->bfd_architecture, 0);
1712       if (ap == NULL)
1713         internal_error (__FILE__, __LINE__,
1714                         _("gdbarch_architecture_names: multi-arch unknown"));
1715       do
1716         {
1717           append_name (&arches, &nr_arches, ap->printable_name);
1718           ap = ap->next;
1719         }
1720       while (ap != NULL);
1721     }
1722   append_name (&arches, &nr_arches, NULL);
1723   return arches;
1724 }
1725
1726
1727 void
1728 gdbarch_register (enum bfd_architecture bfd_architecture,
1729                   gdbarch_init_ftype *init,
1730                   gdbarch_dump_tdep_ftype *dump_tdep)
1731 {
1732   struct gdbarch_registration **curr;
1733   const struct bfd_arch_info *bfd_arch_info;
1734   /* Check that BFD recognizes this architecture */
1735   bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1736   if (bfd_arch_info == NULL)
1737     {
1738       internal_error (__FILE__, __LINE__,
1739                       _("gdbarch: Attempt to register unknown architecture (%d)"),
1740                       bfd_architecture);
1741     }
1742   /* Check that we haven't seen this architecture before */
1743   for (curr = &gdbarch_registry;
1744        (*curr) != NULL;
1745        curr = &(*curr)->next)
1746     {
1747       if (bfd_architecture == (*curr)->bfd_architecture)
1748         internal_error (__FILE__, __LINE__,
1749                         _("gdbarch: Duplicate registraration of architecture (%s)"),
1750                         bfd_arch_info->printable_name);
1751     }
1752   /* log it */
1753   if (gdbarch_debug)
1754     fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
1755                         bfd_arch_info->printable_name,
1756                         (long) init);
1757   /* Append it */
1758   (*curr) = XMALLOC (struct gdbarch_registration);
1759   (*curr)->bfd_architecture = bfd_architecture;
1760   (*curr)->init = init;
1761   (*curr)->dump_tdep = dump_tdep;
1762   (*curr)->arches = NULL;
1763   (*curr)->next = NULL;
1764 }
1765
1766 void
1767 register_gdbarch_init (enum bfd_architecture bfd_architecture,
1768                        gdbarch_init_ftype *init)
1769 {
1770   gdbarch_register (bfd_architecture, init, NULL);
1771 }
1772
1773
1774 /* Look for an architecture using gdbarch_info.  */
1775
1776 struct gdbarch_list *
1777 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1778                              const struct gdbarch_info *info)
1779 {
1780   for (; arches != NULL; arches = arches->next)
1781     {
1782       if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1783         continue;
1784       if (info->byte_order != arches->gdbarch->byte_order)
1785         continue;
1786       if (info->osabi != arches->gdbarch->osabi)
1787         continue;
1788       if (info->target_desc != arches->gdbarch->target_desc)
1789         continue;
1790       return arches;
1791     }
1792   return NULL;
1793 }
1794
1795
1796 /* Find an architecture that matches the specified INFO.  Create a new
1797    architecture if needed.  Return that new architecture.  Assumes
1798    that there is no current architecture.  */
1799
1800 static struct gdbarch *
1801 find_arch_by_info (struct gdbarch_info info)
1802 {
1803   struct gdbarch *new_gdbarch;
1804   struct gdbarch_registration *rego;
1805
1806   /* The existing architecture has been swapped out - all this code
1807      works from a clean slate.  */
1808   gdb_assert (current_gdbarch == NULL);
1809
1810   /* Fill in missing parts of the INFO struct using a number of
1811      sources: "set ..."; INFOabfd supplied; and the global
1812      defaults.  */
1813   gdbarch_info_fill (&info);
1814
1815   /* Must have found some sort of architecture. */
1816   gdb_assert (info.bfd_arch_info != NULL);
1817
1818   if (gdbarch_debug)
1819     {
1820       fprintf_unfiltered (gdb_stdlog,
1821                           "find_arch_by_info: info.bfd_arch_info %s\n",
1822                           (info.bfd_arch_info != NULL
1823                            ? info.bfd_arch_info->printable_name
1824                            : "(null)"));
1825       fprintf_unfiltered (gdb_stdlog,
1826                           "find_arch_by_info: info.byte_order %d (%s)\n",
1827                           info.byte_order,
1828                           (info.byte_order == BFD_ENDIAN_BIG ? "big"
1829                            : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
1830                            : "default"));
1831       fprintf_unfiltered (gdb_stdlog,
1832                           "find_arch_by_info: info.osabi %d (%s)\n",
1833                           info.osabi, gdbarch_osabi_name (info.osabi));
1834       fprintf_unfiltered (gdb_stdlog,
1835                           "find_arch_by_info: info.abfd 0x%lx\n",
1836                           (long) info.abfd);
1837       fprintf_unfiltered (gdb_stdlog,
1838                           "find_arch_by_info: info.tdep_info 0x%lx\n",
1839                           (long) info.tdep_info);
1840     }
1841
1842   /* Find the tdep code that knows about this architecture.  */
1843   for (rego = gdbarch_registry;
1844        rego != NULL;
1845        rego = rego->next)
1846     if (rego->bfd_architecture == info.bfd_arch_info->arch)
1847       break;
1848   if (rego == NULL)
1849     {
1850       if (gdbarch_debug)
1851         fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1852                             "No matching architecture\n");
1853       return 0;
1854     }
1855
1856   /* Ask the tdep code for an architecture that matches "info".  */
1857   new_gdbarch = rego->init (info, rego->arches);
1858
1859   /* Did the tdep code like it?  No.  Reject the change and revert to
1860      the old architecture.  */
1861   if (new_gdbarch == NULL)
1862     {
1863       if (gdbarch_debug)
1864         fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1865                             "Target rejected architecture\n");
1866       return NULL;
1867     }
1868
1869   /* Is this a pre-existing architecture (as determined by already
1870      being initialized)?  Move it to the front of the architecture
1871      list (keeping the list sorted Most Recently Used).  */
1872   if (new_gdbarch->initialized_p)
1873     {
1874       struct gdbarch_list **list;
1875       struct gdbarch_list *this;
1876       if (gdbarch_debug)
1877         fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1878                             "Previous architecture 0x%08lx (%s) selected\n",
1879                             (long) new_gdbarch,
1880                             new_gdbarch->bfd_arch_info->printable_name);
1881       /* Find the existing arch in the list.  */
1882       for (list = &rego->arches;
1883            (*list) != NULL && (*list)->gdbarch != new_gdbarch;
1884            list = &(*list)->next);
1885       /* It had better be in the list of architectures.  */
1886       gdb_assert ((*list) != NULL && (*list)->gdbarch == new_gdbarch);
1887       /* Unlink THIS.  */
1888       this = (*list);
1889       (*list) = this->next;
1890       /* Insert THIS at the front.  */
1891       this->next = rego->arches;
1892       rego->arches = this;
1893       /* Return it.  */
1894       return new_gdbarch;
1895     }
1896
1897   /* It's a new architecture.  */
1898   if (gdbarch_debug)
1899     fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: "
1900                         "New architecture 0x%08lx (%s) selected\n",
1901                         (long) new_gdbarch,
1902                         new_gdbarch->bfd_arch_info->printable_name);
1903   
1904   /* Insert the new architecture into the front of the architecture
1905      list (keep the list sorted Most Recently Used).  */
1906   {
1907     struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
1908     this->next = rego->arches;
1909     this->gdbarch = new_gdbarch;
1910     rego->arches = this;
1911   }    
1912
1913   /* Check that the newly installed architecture is valid.  Plug in
1914      any post init values.  */
1915   new_gdbarch->dump_tdep = rego->dump_tdep;
1916   verify_gdbarch (new_gdbarch);
1917   new_gdbarch->initialized_p = 1;
1918
1919   if (gdbarch_debug)
1920     gdbarch_dump (new_gdbarch, gdb_stdlog);
1921
1922   return new_gdbarch;
1923 }
1924
1925 struct gdbarch *
1926 gdbarch_find_by_info (struct gdbarch_info info)
1927 {
1928   struct gdbarch *new_gdbarch;
1929
1930   /* Save the previously selected architecture, setting the global to
1931      NULL.  This stops things like gdbarch->init() trying to use the
1932      previous architecture's configuration.  The previous architecture
1933      may not even be of the same architecture family.  The most recent
1934      architecture of the same family is found at the head of the
1935      rego->arches list.  */
1936   struct gdbarch *old_gdbarch = current_gdbarch;
1937   current_gdbarch = NULL;
1938
1939   /* Find the specified architecture.  */
1940   new_gdbarch = find_arch_by_info (info);
1941
1942   /* Restore the existing architecture.  */
1943   gdb_assert (current_gdbarch == NULL);
1944   current_gdbarch = old_gdbarch;
1945
1946   return new_gdbarch;
1947 }
1948
1949 /* Make the specified architecture current.  */
1950
1951 void
1952 deprecated_current_gdbarch_select_hack (struct gdbarch *new_gdbarch)
1953 {
1954   gdb_assert (new_gdbarch != NULL);
1955   gdb_assert (current_gdbarch != NULL);
1956   gdb_assert (new_gdbarch->initialized_p);
1957   current_gdbarch = new_gdbarch;
1958   architecture_changed_event ();
1959   reinit_frame_cache ();
1960 }
1961
1962 extern void _initialize_gdbarch (void);
1963
1964 void
1965 _initialize_gdbarch (void)
1966 {
1967   struct cmd_list_element *c;
1968
1969   add_setshow_zinteger_cmd ("arch", class_maintenance, &gdbarch_debug, _("\\
1970 Set architecture debugging."), _("\\
1971 Show architecture debugging."), _("\\
1972 When non-zero, architecture debugging is enabled."),
1973                             NULL,
1974                             show_gdbarch_debug,
1975                             &setdebuglist, &showdebuglist);
1976 }
1977 EOF
1978
1979 # close things off
1980 exec 1>&2
1981 #../move-if-change new-gdbarch.c gdbarch.c
1982 compare_new gdbarch.c