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