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