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