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