]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gdbarch.sh
* avr-tdep.c: Ran through gdb_indent.sh.
[thirdparty/binutils-gdb.git] / gdb / gdbarch.sh
CommitLineData
66b43ecb 1#!/bin/sh -u
104c1213
JM
2
3# Architecture commands for GDB, the GNU debugger.
181c1381 4# Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
104c1213
JM
5#
6# This file is part of GDB.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
d8864532
AC
22# Make certain that the script is running in an internationalized
23# environment.
24LANG=c ; export LANG
25
26
59233f88
AC
27compare_new ()
28{
29 file=$1
66b43ecb 30 if test ! -r ${file}
59233f88
AC
31 then
32 echo "${file} missing? cp new-${file} ${file}" 1>&2
50248794 33 elif diff -u ${file} new-${file}
59233f88
AC
34 then
35 echo "${file} unchanged" 1>&2
36 else
37 echo "${file} has changed? cp new-${file} ${file}" 1>&2
38 fi
39}
40
41
42# Format of the input table
0b8f9e4d 43read="class level macro returntype function formal actual attrib staticdefault predefault postdefault invalid_p fmt print print_p description"
c0e8c252
AC
44
45do_read ()
46{
34620563
AC
47 comment=""
48 class=""
49 while read line
50 do
51 if test "${line}" = ""
52 then
53 continue
54 elif test "${line}" = "#" -a "${comment}" = ""
f0d4cc9e 55 then
34620563
AC
56 continue
57 elif expr "${line}" : "#" > /dev/null
f0d4cc9e 58 then
34620563
AC
59 comment="${comment}
60${line}"
f0d4cc9e 61 else
3d9a5942
AC
62
63 # The semantics of IFS varies between different SH's. Some
64 # treat ``::' as three fields while some treat it as just too.
65 # Work around this by eliminating ``::'' ....
66 line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`"
67
68 OFS="${IFS}" ; IFS="[:]"
34620563
AC
69 eval read ${read} <<EOF
70${line}
71EOF
72 IFS="${OFS}"
73
3d9a5942
AC
74 # .... and then going back through each field and strip out those
75 # that ended up with just that space character.
76 for r in ${read}
77 do
78 if eval test \"\${${r}}\" = \"\ \"
79 then
80 eval ${r}=""
81 fi
82 done
83
50248794
AC
84 case "${level}" in
85 1 ) gt_level=">= GDB_MULTI_ARCH_PARTIAL" ;;
86 2 ) gt_level="> GDB_MULTI_ARCH_PARTIAL" ;;
87 "" ) ;;
88 * ) error "Error: bad level for ${function}" 1>&2 ; kill $$ ; exit 1 ;;
89 esac
90
a72293e2
AC
91 case "${class}" in
92 m ) staticdefault="${predefault}" ;;
93 M ) staticdefault="0" ;;
94 * ) test "${staticdefault}" || staticdefault=0 ;;
95 esac
34620563
AC
96 # NOT YET: Breaks BELIEVE_PCC_PROMOTION and confuses non-
97 # multi-arch defaults.
98 # test "${predefault}" || predefault=0
06b25f14
AC
99
100 # come up with a format, use a few guesses for variables
101 case ":${class}:${fmt}:${print}:" in
102 :[vV]::: )
103 if [ "${returntype}" = int ]
104 then
105 fmt="%d"
106 print="${macro}"
107 elif [ "${returntype}" = long ]
108 then
109 fmt="%ld"
110 print="${macro}"
111 fi
112 ;;
113 esac
34620563
AC
114 test "${fmt}" || fmt="%ld"
115 test "${print}" || print="(long) ${macro}"
06b25f14 116
34620563
AC
117 case "${invalid_p}" in
118 0 ) valid_p=1 ;;
119 "" )
72e74a21 120 if [ -n "${predefault}" ]
34620563
AC
121 then
122 #invalid_p="gdbarch->${function} == ${predefault}"
123 valid_p="gdbarch->${function} != ${predefault}"
124 else
125 #invalid_p="gdbarch->${function} == 0"
126 valid_p="gdbarch->${function} != 0"
127 fi
128 ;;
129 * ) valid_p="!(${invalid_p})"
130 esac
131
132 # PREDEFAULT is a valid fallback definition of MEMBER when
133 # multi-arch is not enabled. This ensures that the
134 # default value, when multi-arch is the same as the
135 # default value when not multi-arch. POSTDEFAULT is
136 # always a valid definition of MEMBER as this again
137 # ensures consistency.
138
72e74a21 139 if [ -n "${postdefault}" ]
34620563
AC
140 then
141 fallbackdefault="${postdefault}"
72e74a21 142 elif [ -n "${predefault}" ]
34620563
AC
143 then
144 fallbackdefault="${predefault}"
145 else
73d3c16e 146 fallbackdefault="0"
34620563
AC
147 fi
148
149 #NOT YET: See gdbarch.log for basic verification of
150 # database
151
152 break
f0d4cc9e 153 fi
34620563 154 done
72e74a21 155 if [ -n "${class}" ]
34620563
AC
156 then
157 true
c0e8c252
AC
158 else
159 false
160 fi
161}
162
104c1213 163
f0d4cc9e
AC
164fallback_default_p ()
165{
72e74a21
JB
166 [ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \
167 || [ -n "${predefault}" -a "x${invalid_p}" = "x0" ]
f0d4cc9e
AC
168}
169
170class_is_variable_p ()
171{
4a5c6a1d
AC
172 case "${class}" in
173 *v* | *V* ) true ;;
174 * ) false ;;
175 esac
f0d4cc9e
AC
176}
177
178class_is_function_p ()
179{
4a5c6a1d
AC
180 case "${class}" in
181 *f* | *F* | *m* | *M* ) true ;;
182 * ) false ;;
183 esac
184}
185
186class_is_multiarch_p ()
187{
188 case "${class}" in
189 *m* | *M* ) true ;;
190 * ) false ;;
191 esac
f0d4cc9e
AC
192}
193
194class_is_predicate_p ()
195{
4a5c6a1d
AC
196 case "${class}" in
197 *F* | *V* | *M* ) true ;;
198 * ) false ;;
199 esac
f0d4cc9e
AC
200}
201
202class_is_info_p ()
203{
4a5c6a1d
AC
204 case "${class}" in
205 *i* ) true ;;
206 * ) false ;;
207 esac
f0d4cc9e
AC
208}
209
210
cff3e48b
JM
211# dump out/verify the doco
212for field in ${read}
213do
214 case ${field} in
215
216 class ) : ;;
c4093a6a 217
c0e8c252
AC
218 # # -> line disable
219 # f -> function
220 # hiding a function
2ada493a
AC
221 # F -> function + predicate
222 # hiding a function + predicate to test function validity
c0e8c252
AC
223 # v -> variable
224 # hiding a variable
2ada493a
AC
225 # V -> variable + predicate
226 # hiding a variable + predicate to test variables validity
c0e8c252
AC
227 # i -> set from info
228 # hiding something from the ``struct info'' object
4a5c6a1d
AC
229 # m -> multi-arch function
230 # hiding a multi-arch function (parameterised with the architecture)
231 # M -> multi-arch function + predicate
232 # hiding a multi-arch function + predicate to test function validity
cff3e48b
JM
233
234 level ) : ;;
235
c0e8c252
AC
236 # See GDB_MULTI_ARCH description. Having GDB_MULTI_ARCH >=
237 # LEVEL is a predicate on checking that a given method is
238 # initialized (using INVALID_P).
cff3e48b
JM
239
240 macro ) : ;;
241
c0e8c252 242 # The name of the MACRO that this method is to be accessed by.
cff3e48b
JM
243
244 returntype ) : ;;
245
c0e8c252 246 # For functions, the return type; for variables, the data type
cff3e48b
JM
247
248 function ) : ;;
249
c0e8c252
AC
250 # For functions, the member function name; for variables, the
251 # variable name. Member function names are always prefixed with
252 # ``gdbarch_'' for name-space purity.
cff3e48b
JM
253
254 formal ) : ;;
255
c0e8c252
AC
256 # The formal argument list. It is assumed that the formal
257 # argument list includes the actual name of each list element.
258 # A function with no arguments shall have ``void'' as the
259 # formal argument list.
cff3e48b
JM
260
261 actual ) : ;;
262
c0e8c252
AC
263 # The list of actual arguments. The arguments specified shall
264 # match the FORMAL list given above. Functions with out
265 # arguments leave this blank.
cff3e48b
JM
266
267 attrib ) : ;;
268
c0e8c252
AC
269 # Any GCC attributes that should be attached to the function
270 # declaration. At present this field is unused.
cff3e48b 271
0b8f9e4d 272 staticdefault ) : ;;
c0e8c252
AC
273
274 # To help with the GDB startup a static gdbarch object is
0b8f9e4d
AC
275 # created. STATICDEFAULT is the value to insert into that
276 # static gdbarch object. Since this a static object only
277 # simple expressions can be used.
cff3e48b 278
0b8f9e4d 279 # If STATICDEFAULT is empty, zero is used.
c0e8c252 280
0b8f9e4d 281 predefault ) : ;;
cff3e48b 282
10312cc4
AC
283 # An initial value to assign to MEMBER of the freshly
284 # malloc()ed gdbarch object. After initialization, the
285 # freshly malloc()ed object is passed to the target
286 # architecture code for further updates.
cff3e48b 287
0b8f9e4d
AC
288 # If PREDEFAULT is empty, zero is used.
289
10312cc4
AC
290 # A non-empty PREDEFAULT, an empty POSTDEFAULT and a zero
291 # INVALID_P are specified, PREDEFAULT will be used as the
292 # default for the non- multi-arch target.
293
294 # A zero PREDEFAULT function will force the fallback to call
295 # internal_error().
f0d4cc9e
AC
296
297 # Variable declarations can refer to ``gdbarch'' which will
298 # contain the current architecture. Care should be taken.
0b8f9e4d
AC
299
300 postdefault ) : ;;
301
302 # A value to assign to MEMBER of the new gdbarch object should
10312cc4
AC
303 # the target architecture code fail to change the PREDEFAULT
304 # value.
0b8f9e4d
AC
305
306 # If POSTDEFAULT is empty, no post update is performed.
307
308 # If both INVALID_P and POSTDEFAULT are non-empty then
309 # INVALID_P will be used to determine if MEMBER should be
310 # changed to POSTDEFAULT.
311
10312cc4
AC
312 # If a non-empty POSTDEFAULT and a zero INVALID_P are
313 # specified, POSTDEFAULT will be used as the default for the
314 # non- multi-arch target (regardless of the value of
315 # PREDEFAULT).
316
f0d4cc9e
AC
317 # You cannot specify both a zero INVALID_P and a POSTDEFAULT.
318
319 # Variable declarations can refer to ``gdbarch'' which will
320 # contain the current architecture. Care should be taken.
cff3e48b 321
c4093a6a 322 invalid_p ) : ;;
cff3e48b 323
0b8f9e4d 324 # A predicate equation that validates MEMBER. Non-zero is
c0e8c252 325 # returned if the code creating the new architecture failed to
0b8f9e4d
AC
326 # initialize MEMBER or the initialized the member is invalid.
327 # If POSTDEFAULT is non-empty then MEMBER will be updated to
328 # that value. If POSTDEFAULT is empty then internal_error()
329 # is called.
330
331 # If INVALID_P is empty, a check that MEMBER is no longer
332 # equal to PREDEFAULT is used.
333
f0d4cc9e
AC
334 # The expression ``0'' disables the INVALID_P check making
335 # PREDEFAULT a legitimate value.
0b8f9e4d
AC
336
337 # See also PREDEFAULT and POSTDEFAULT.
cff3e48b
JM
338
339 fmt ) : ;;
340
c0e8c252
AC
341 # printf style format string that can be used to print out the
342 # MEMBER. Sometimes "%s" is useful. For functions, this is
343 # ignored and the function address is printed.
344
0b8f9e4d 345 # If FMT is empty, ``%ld'' is used.
cff3e48b
JM
346
347 print ) : ;;
348
c0e8c252
AC
349 # An optional equation that casts MEMBER to a value suitable
350 # for formatting by FMT.
351
0b8f9e4d 352 # If PRINT is empty, ``(long)'' is used.
cff3e48b
JM
353
354 print_p ) : ;;
355
c0e8c252
AC
356 # An optional indicator for any predicte to wrap around the
357 # print member code.
358
4b9b3959 359 # () -> Call a custom function to do the dump.
c0e8c252
AC
360 # exp -> Wrap print up in ``if (${print_p}) ...
361 # ``'' -> No predicate
cff3e48b 362
0b8f9e4d
AC
363 # If PRINT_P is empty, ``1'' is always used.
364
cff3e48b
JM
365 description ) : ;;
366
0b8f9e4d 367 # Currently unused.
cff3e48b 368
50248794
AC
369 *)
370 echo "Bad field ${field}"
371 exit 1;;
cff3e48b
JM
372 esac
373done
374
cff3e48b 375
104c1213
JM
376function_list ()
377{
cff3e48b 378 # See below (DOCO) for description of each field
34620563 379 cat <<EOF
0b8f9e4d 380i:2:TARGET_ARCHITECTURE:const struct bfd_arch_info *:bfd_arch_info::::&bfd_default_arch_struct::::%s:TARGET_ARCHITECTURE->printable_name:TARGET_ARCHITECTURE != NULL
104c1213 381#
d7449b42 382i:2:TARGET_BYTE_ORDER:int:byte_order::::BFD_ENDIAN_BIG
66b43ecb
AC
383# Number of bits in a char or unsigned char for the target machine.
384# Just like CHAR_BIT in <limits.h> but describes the target machine.
385# v::TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0:
386#
387# Number of bits in a short or unsigned short for the target machine.
388v::TARGET_SHORT_BIT:int:short_bit::::8 * sizeof (short):2*TARGET_CHAR_BIT::0
389# Number of bits in an int or unsigned int for the target machine.
390v::TARGET_INT_BIT:int:int_bit::::8 * sizeof (int):4*TARGET_CHAR_BIT::0
391# Number of bits in a long or unsigned long for the target machine.
392v::TARGET_LONG_BIT:int:long_bit::::8 * sizeof (long):4*TARGET_CHAR_BIT::0
393# Number of bits in a long long or unsigned long long for the target
394# machine.
395v::TARGET_LONG_LONG_BIT:int:long_long_bit::::8 * sizeof (LONGEST):2*TARGET_LONG_BIT::0
396# Number of bits in a float for the target machine.
397v::TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):4*TARGET_CHAR_BIT::0
398# Number of bits in a double for the target machine.
399v::TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):8*TARGET_CHAR_BIT::0
400# Number of bits in a long double for the target machine.
17ef5d92 401v::TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):8*TARGET_CHAR_BIT::0
52204a0b
DT
402# For most targets, a pointer on the target and its representation as an
403# address in GDB have the same size and "look the same". For such a
404# target, you need only set TARGET_PTR_BIT / ptr_bit and TARGET_ADDR_BIT
405# / addr_bit will be set from it.
406#
407# If TARGET_PTR_BIT and TARGET_ADDR_BIT are different, you'll probably
408# also need to set POINTER_TO_ADDRESS and ADDRESS_TO_POINTER as well.
409#
410# ptr_bit is the size of a pointer on the target
66b43ecb 411v::TARGET_PTR_BIT:int:ptr_bit::::8 * sizeof (void*):TARGET_INT_BIT::0
52204a0b
DT
412# addr_bit is the size of a target address as represented in gdb
413v::TARGET_ADDR_BIT:int:addr_bit::::8 * sizeof (void*):0:TARGET_PTR_BIT:
66b43ecb
AC
414# Number of bits in a BFD_VMA for the target object file format.
415v::TARGET_BFD_VMA_BIT:int:bfd_vma_bit::::8 * sizeof (void*):TARGET_ARCHITECTURE->bits_per_address::0
104c1213 416#
4e409299 417# One if \`char' acts like \`signed char', zero if \`unsigned char'.
2c283bc4 418v::TARGET_CHAR_SIGNED:int:char_signed::::1:-1:1::::
4e409299 419#
39f77062
KB
420f::TARGET_READ_PC:CORE_ADDR:read_pc:ptid_t ptid:ptid::0:generic_target_read_pc::0
421f::TARGET_WRITE_PC:void:write_pc:CORE_ADDR val, ptid_t ptid:val, ptid::0:generic_target_write_pc::0
be8dfb87 422f::TARGET_READ_FP:CORE_ADDR:read_fp:void:::0:generic_target_read_fp::0
be8dfb87
AC
423f::TARGET_READ_SP:CORE_ADDR:read_sp:void:::0:generic_target_read_sp::0
424f::TARGET_WRITE_SP:void:write_sp:CORE_ADDR val:val::0:generic_target_write_sp::0
39d4ef09
AC
425# Function for getting target's idea of a frame pointer. FIXME: GDB's
426# whole scheme for dealing with "frames" and "frame pointers" needs a
427# serious shakedown.
428f::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
66b43ecb 429#
61a0eb5b
AC
430M:::void:register_read:int regnum, char *buf:regnum, buf:
431M:::void:register_write:int regnum, char *buf:regnum, buf:
432#
104c1213 433v:2:NUM_REGS:int:num_regs::::0:-1
0aba1244
EZ
434# This macro gives the number of pseudo-registers that live in the
435# register namespace but do not get fetched or stored on the target.
3d9a5942
AC
436# These pseudo-registers may be aliases for other registers,
437# combinations of other registers, or they may be computed by GDB.
0aba1244 438v:2:NUM_PSEUDO_REGS:int:num_pseudo_regs::::0:0::0:::
c2169756
AC
439
440# GDB's standard (or well known) register numbers. These can map onto
441# a real register or a pseudo (computed) register or not be defined at
1200cd6e
AC
442# all (-1).
443v:2:SP_REGNUM:int:sp_regnum::::-1:-1::0
444v:2:FP_REGNUM:int:fp_regnum::::-1:-1::0
445v:2:PC_REGNUM:int:pc_regnum::::-1:-1::0
c2169756 446v:2:PS_REGNUM:int:ps_regnum::::-1:-1::0
0b8f9e4d
AC
447v:2:FP0_REGNUM:int:fp0_regnum::::0:-1::0
448v:2:NPC_REGNUM:int:npc_regnum::::0:-1::0
449v:2:NNPC_REGNUM:int:nnpc_regnum::::0:-1::0
88c72b7d
AC
450# Convert stab register number (from \`r\' declaration) to a gdb REGNUM.
451f:2:STAB_REG_TO_REGNUM:int:stab_reg_to_regnum:int stab_regnr:stab_regnr:::no_op_reg_to_regnum::0
452# Provide a default mapping from a ecoff register number to a gdb REGNUM.
453f:2:ECOFF_REG_TO_REGNUM:int:ecoff_reg_to_regnum:int ecoff_regnr:ecoff_regnr:::no_op_reg_to_regnum::0
454# Provide a default mapping from a DWARF register number to a gdb REGNUM.
455f:2:DWARF_REG_TO_REGNUM:int:dwarf_reg_to_regnum:int dwarf_regnr:dwarf_regnr:::no_op_reg_to_regnum::0
456# Convert from an sdb register number to an internal gdb register number.
457# This should be defined in tm.h, if REGISTER_NAMES is not set up
458# to map one to one onto the sdb register numbers.
459f:2:SDB_REG_TO_REGNUM:int:sdb_reg_to_regnum:int sdb_regnr:sdb_regnr:::no_op_reg_to_regnum::0
460f:2:DWARF2_REG_TO_REGNUM:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr:::no_op_reg_to_regnum::0
0b8f9e4d 461f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name::0
104c1213
JM
462v:2:REGISTER_SIZE:int:register_size::::0:-1
463v:2:REGISTER_BYTES:int:register_bytes::::0:-1
464f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0
46cd78fb 465f:2:REGISTER_RAW_SIZE:int:register_raw_size:int reg_nr:reg_nr::generic_register_raw_size:0
104c1213 466v:2:MAX_REGISTER_RAW_SIZE:int:max_register_raw_size::::0:-1
ce29138a 467f:2:REGISTER_VIRTUAL_SIZE:int:register_virtual_size:int reg_nr:reg_nr::generic_register_virtual_size:0
104c1213
JM
468v:2:MAX_REGISTER_VIRTUAL_SIZE:int:max_register_virtual_size::::0:-1
469f:2:REGISTER_VIRTUAL_TYPE:struct type *:register_virtual_type:int reg_nr:reg_nr::0:0
666e11c5 470f:2:DO_REGISTERS_INFO:void:do_registers_info:int reg_nr, int fpregs:reg_nr, fpregs:::do_registers_info::0
5e74b15c 471f:2:PRINT_FLOAT_INFO:void:print_float_info:void::::default_print_float_info::0
7c7651b2
AC
472# MAP a GDB RAW register number onto a simulator register number. See
473# also include/...-sim.h.
474f:2:REGISTER_SIM_REGNO:int:register_sim_regno:int reg_nr:reg_nr:::default_register_sim_regno::0
2649061d 475F:2:REGISTER_BYTES_OK:int:register_bytes_ok:long nr_bytes:nr_bytes::0:0
01fb7433
AC
476f:2:CANNOT_FETCH_REGISTER:int:cannot_fetch_register:int regnum:regnum:::cannot_register_not::0
477f:2:CANNOT_STORE_REGISTER:int:cannot_store_register:int regnum:regnum:::cannot_register_not::0
9df628e0
RE
478# setjmp/longjmp support.
479F:2:GET_LONGJMP_TARGET:int:get_longjmp_target:CORE_ADDR *pc:pc::0:0
104c1213 480#
028c194b
AC
481# Non multi-arch DUMMY_FRAMES are a mess (multi-arch ones are not that
482# much better but at least they are vaguely consistent). The headers
483# and body contain convoluted #if/#else sequences for determine how
484# things should be compiled. Instead of trying to mimic that
485# behaviour here (and hence entrench it further) gdbarch simply
486# reqires that these methods be set up from the word go. This also
487# avoids any potential problems with moving beyond multi-arch partial.
104c1213 488v:1:USE_GENERIC_DUMMY_FRAMES:int:use_generic_dummy_frames::::0:-1
a985cd41 489v:1:CALL_DUMMY_LOCATION:int:call_dummy_location::::0:0
0b8f9e4d
AC
490f:2:CALL_DUMMY_ADDRESS:CORE_ADDR:call_dummy_address:void:::0:0::gdbarch->call_dummy_location == AT_ENTRY_POINT && gdbarch->call_dummy_address == 0
491v:2:CALL_DUMMY_START_OFFSET:CORE_ADDR:call_dummy_start_offset::::0:-1:::0x%08lx
83e6b173 492v:2:CALL_DUMMY_BREAKPOINT_OFFSET:CORE_ADDR:call_dummy_breakpoint_offset::::0:-1::gdbarch->call_dummy_breakpoint_offset_p && gdbarch->call_dummy_breakpoint_offset == -1:0x%08lx::CALL_DUMMY_BREAKPOINT_OFFSET_P
104c1213 493v:1:CALL_DUMMY_BREAKPOINT_OFFSET_P:int:call_dummy_breakpoint_offset_p::::0:-1
0b8f9e4d 494v:2:CALL_DUMMY_LENGTH:int:call_dummy_length::::0:-1:::::CALL_DUMMY_LOCATION == BEFORE_TEXT_END || CALL_DUMMY_LOCATION == AFTER_TEXT_END
a4a7d16f 495f:1:PC_IN_CALL_DUMMY:int:pc_in_call_dummy:CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address:pc, sp, frame_address::0:0
104c1213 496v:1:CALL_DUMMY_P:int:call_dummy_p::::0:-1
0b8f9e4d
AC
497v:2:CALL_DUMMY_WORDS:LONGEST *:call_dummy_words::::0:legacy_call_dummy_words::0:0x%08lx
498v:2:SIZEOF_CALL_DUMMY_WORDS:int:sizeof_call_dummy_words::::0:legacy_sizeof_call_dummy_words::0:0x%08lx
499v:1:CALL_DUMMY_STACK_ADJUST_P:int:call_dummy_stack_adjust_p::::0:-1:::0x%08lx
500v:2:CALL_DUMMY_STACK_ADJUST:int:call_dummy_stack_adjust::::0:::gdbarch->call_dummy_stack_adjust_p && gdbarch->call_dummy_stack_adjust == 0:0x%08lx::CALL_DUMMY_STACK_ADJUST_P
501f:2:FIX_CALL_DUMMY:void: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:::0
10312cc4 502f:2:INIT_FRAME_PC_FIRST:void:init_frame_pc_first:int fromleaf, struct frame_info *prev:fromleaf, prev:::init_frame_pc_noop::0
7824d2f2 503f:2:INIT_FRAME_PC:void:init_frame_pc:int fromleaf, struct frame_info *prev:fromleaf, prev:::init_frame_pc_default::0
104c1213 504#
f0d4cc9e
AC
505v:2:BELIEVE_PCC_PROMOTION:int:believe_pcc_promotion:::::::
506v:2:BELIEVE_PCC_PROMOTION_TYPE:int:believe_pcc_promotion_type:::::::
0b8f9e4d 507f:2:COERCE_FLOAT_TO_DOUBLE:int:coerce_float_to_double:struct type *formal, struct type *actual:formal, actual:::default_coerce_float_to_double::0
028c194b
AC
508# GET_SAVED_REGISTER is like DUMMY_FRAMES. It is at level one as the
509# old code has strange #ifdef interaction. So far no one has found
510# that default_get_saved_register() is the default they are after.
104c1213
JM
511f:1:GET_SAVED_REGISTER:void: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::generic_get_saved_register:0
512#
6e6d6484 513f:2:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr:::generic_register_convertible_not::0
0b8f9e4d
AC
514f:2:REGISTER_CONVERT_TO_VIRTUAL:void:register_convert_to_virtual:int regnum, struct type *type, char *from, char *to:regnum, type, from, to:::0::0
515f:2:REGISTER_CONVERT_TO_RAW:void:register_convert_to_raw:struct type *type, int regnum, char *from, char *to:type, regnum, from, to:::0::0
34620563
AC
516# This function is called when the value of a pseudo-register needs to
517# be updated. Typically it will be defined on a per-architecture
518# basis.
31e9866e 519F:2:FETCH_PSEUDO_REGISTER:void:fetch_pseudo_register:int regnum:regnum:
34620563
AC
520# This function is called when the value of a pseudo-register needs to
521# be set or stored. Typically it will be defined on a
522# per-architecture basis.
31e9866e 523F:2:STORE_PSEUDO_REGISTER:void:store_pseudo_register:int regnum:regnum:
104c1213 524#
ac2e2ef7
AC
525f:2:POINTER_TO_ADDRESS:CORE_ADDR:pointer_to_address:struct type *type, void *buf:type, buf:::unsigned_pointer_to_address::0
526f:2:ADDRESS_TO_POINTER:void:address_to_pointer:struct type *type, void *buf, CORE_ADDR addr:type, buf, addr:::unsigned_address_to_pointer::0
fc0c74b1 527F:2:INTEGER_TO_ADDRESS:CORE_ADDR:integer_to_address:struct type *type, void *buf:type, buf
4478b372 528#
0b8f9e4d 529f:2:RETURN_VALUE_ON_STACK:int:return_value_on_stack:struct type *type:type:::generic_return_value_on_stack_not::0
104c1213 530f:2:EXTRACT_RETURN_VALUE:void:extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf::0:0
6e6d6484 531f:2:PUSH_ARGUMENTS:CORE_ADDR:push_arguments:int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:nargs, args, sp, struct_return, struct_addr:::default_push_arguments::0
c0e8c252 532f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-:::0
c30e0066 533F:2:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0
c0e8c252 534f:2:POP_FRAME:void:pop_frame:void:-:::0
104c1213 535#
c0e8c252
AC
536f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp:::0
537f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf:::0
d6dd581e 538F:2:EXTRACT_STRUCT_VALUE_ADDRESS:CORE_ADDR:extract_struct_value_address:char *regbuf:regbuf:::0
56f12751 539f:2:USE_STRUCT_CONVENTION:int:use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type:::generic_use_struct_convention::0
104c1213
JM
540#
541f:2:FRAME_INIT_SAVED_REGS:void:frame_init_saved_regs:struct frame_info *frame:frame::0:0
5fdff426 542F:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame:::0
104c1213
JM
543#
544f:2:SKIP_PROLOGUE:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0
0b8f9e4d 545f:2:PROLOGUE_FRAMELESS_P:int:prologue_frameless_p:CORE_ADDR ip:ip::0:generic_prologue_frameless_p::0
104c1213 546f:2:INNER_THAN:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0
f4f9705a 547f:2:BREAKPOINT_FROM_PC:const unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::legacy_breakpoint_from_pc::0
0b8f9e4d
AC
548f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint::0
549f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint::0
104c1213 550v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1
e02bc4cc 551f::PREPARE_TO_PROCEED:int:prepare_to_proceed:int select_it:select_it::0:default_prepare_to_proceed::0
104c1213
JM
552v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1
553#
0b8f9e4d 554f:2:REMOTE_TRANSLATE_XFER_ADDRESS:void:remote_translate_xfer_address:CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len:gdb_addr, gdb_len, rem_addr, rem_len:::generic_remote_translate_xfer_address::0
104c1213
JM
555#
556v:2:FRAME_ARGS_SKIP:CORE_ADDR:frame_args_skip::::0:-1
0b8f9e4d 557f:2:FRAMELESS_FUNCTION_INVOCATION:int:frameless_function_invocation:struct frame_info *fi:fi:::generic_frameless_function_invocation_not::0
104c1213 558f:2:FRAME_CHAIN:CORE_ADDR:frame_chain:struct frame_info *frame:frame::0:0
7f55af32
AC
559# Define a default FRAME_CHAIN_VALID, in the form that is suitable for
560# most targets. If FRAME_CHAIN_VALID returns zero it means that the
561# given frame is the outermost one and has no caller.
562#
563# XXXX - both default and alternate frame_chain_valid functions are
564# deprecated. New code should use dummy frames and one of the generic
565# functions.
566f:2:FRAME_CHAIN_VALID:int:frame_chain_valid:CORE_ADDR chain, struct frame_info *thisframe:chain, thisframe:::func_frame_chain_valid::0
104c1213
JM
567f:2:FRAME_SAVED_PC:CORE_ADDR:frame_saved_pc:struct frame_info *fi:fi::0:0
568f:2:FRAME_ARGS_ADDRESS:CORE_ADDR:frame_args_address:struct frame_info *fi:fi::0:0
569f:2:FRAME_LOCALS_ADDRESS:CORE_ADDR:frame_locals_address:struct frame_info *fi:fi::0:0
570f:2:SAVED_PC_AFTER_CALL:CORE_ADDR:saved_pc_after_call:struct frame_info *frame:frame::0:0
571f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
572#
2ada493a 573F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0
6acf50cd 574v:2:EXTRA_STACK_ALIGNMENT_NEEDED:int:extra_stack_alignment_needed::::0:1::0:::
d03e67c9 575F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0
d1e3cf49 576F:2:SAVE_DUMMY_FRAME_TOS:void:save_dummy_frame_tos:CORE_ADDR sp:sp::0:0
58d5518e 577v:2:PARM_BOUNDARY:int:parm_boundary
f0d4cc9e
AC
578#
579v:2:TARGET_FLOAT_FORMAT:const struct floatformat *:float_format::::::default_float_format (gdbarch)
580v:2:TARGET_DOUBLE_FORMAT:const struct floatformat *:double_format::::::default_double_format (gdbarch)
2fa5c1e0 581v:2:TARGET_LONG_DOUBLE_FORMAT:const struct floatformat *:long_double_format::::::default_double_format (gdbarch)
875e1767
AC
582f:2:CONVERT_FROM_FUNC_PTR_ADDR:CORE_ADDR:convert_from_func_ptr_addr:CORE_ADDR addr:addr:::core_addr_identity::0
583# On some machines there are bits in addresses which are not really
584# part of the address, but are used by the kernel, the hardware, etc.
585# for special purposes. ADDR_BITS_REMOVE takes out any such bits so
586# we get a "real" address such as one would find in a symbol table.
587# This is used only for addresses of instructions, and even then I'm
588# not sure it's used in all contexts. It exists to deal with there
589# being a few stray bits in the PC which would mislead us, not as some
590# sort of generic thing to handle alignment or segmentation (it's
591# possible it should be in TARGET_READ_PC instead).
592f:2:ADDR_BITS_REMOVE:CORE_ADDR:addr_bits_remove:CORE_ADDR addr:addr:::core_addr_identity::0
181c1381
RE
593# It is not at all clear why SMASH_TEXT_ADDRESS is not folded into
594# ADDR_BITS_REMOVE.
595f:2:SMASH_TEXT_ADDRESS:CORE_ADDR:smash_text_address:CORE_ADDR addr:addr:::core_addr_identity::0
64c4637f
AC
596# FIXME/cagney/2001-01-18: This should be split in two. A target method that indicates if
597# the target needs software single step. An ISA method to implement it.
598#
599# FIXME/cagney/2001-01-18: This should be replaced with something that inserts breakpoints
600# using the breakpoint system instead of blatting memory directly (as with rs6000).
601#
602# FIXME/cagney/2001-01-18: The logic is backwards. It should be asking if the target can
603# single step. If not, then implement single step using breakpoints.
604F:2:SOFTWARE_SINGLE_STEP:void:software_single_step:enum target_signal sig, int insert_breakpoints_p:sig, insert_breakpoints_p::0:0
2bf0cb65 605f:2:TARGET_PRINT_INSN:int:print_insn:bfd_vma vma, disassemble_info *info:vma, info:::legacy_print_insn::0
bdcd319a 606f:2:SKIP_TRAMPOLINE_CODE:CORE_ADDR:skip_trampoline_code:CORE_ADDR pc:pc:::generic_skip_trampoline_code::0
68e9cc94
CV
607# For SVR4 shared libraries, each call goes through a small piece of
608# trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE evaluates
609# to nonzero if we are current stopped in one of these.
610f:2:IN_SOLIB_CALL_TRAMPOLINE:int:in_solib_call_trampoline:CORE_ADDR pc, char *name:pc, name:::generic_in_solib_call_trampoline::0
d7bd68ca
AC
611# Sigtramp is a routine that the kernel calls (which then calls the
612# signal handler). On most machines it is a library routine that is
613# linked into the executable.
614#
615# This macro, given a program counter value and the name of the
616# function in which that PC resides (which can be null if the name is
617# not known), returns nonzero if the PC and name show that we are in
618# sigtramp.
619#
620# On most machines just see if the name is sigtramp (and if we have
621# no name, assume we are not in sigtramp).
622#
623# FIXME: cagney/2002-04-21: The function find_pc_partial_function
624# calls find_pc_sect_partial_function() which calls PC_IN_SIGTRAMP.
625# This means PC_IN_SIGTRAMP function can't be implemented by doing its
626# own local NAME lookup.
627#
628# FIXME: cagney/2002-04-21: PC_IN_SIGTRAMP is something of a mess.
629# Some code also depends on SIGTRAMP_START and SIGTRAMP_END but other
630# does not.
631f:2:PC_IN_SIGTRAMP:int:pc_in_sigtramp:CORE_ADDR pc, char *name:pc, name:::legacy_pc_in_sigtramp::0
c12260ac
CV
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
552c04a7
TT
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::CONSTRUCT_INFERIOR_ARGUMENTS:char *:construct_inferior_arguments:int argc, char **argv:argc, argv:::construct_inferior_arguments::0
b6af0555 651F:2:DWARF2_BUILD_FRAME_INFO:void:dwarf2_build_frame_info:struct objfile *objfile:objfile:::0
a2cf933a
EZ
652f:2:ELF_MAKE_MSYMBOL_SPECIAL:void:elf_make_msymbol_special:asymbol *sym, struct minimal_symbol *msym:sym, msym:::default_elf_make_msymbol_special::0
653f:2:COFF_MAKE_MSYMBOL_SPECIAL:void:coff_make_msymbol_special:int val, struct minimal_symbol *msym:val, msym:::default_coff_make_msymbol_special::0
104c1213 654EOF
104c1213
JM
655}
656
0b8f9e4d
AC
657#
658# The .log file
659#
660exec > new-gdbarch.log
34620563 661function_list | while do_read
0b8f9e4d
AC
662do
663 cat <<EOF
104c1213
JM
664${class} ${macro}(${actual})
665 ${returntype} ${function} ($formal)${attrib}
104c1213 666EOF
3d9a5942
AC
667 for r in ${read}
668 do
669 eval echo \"\ \ \ \ ${r}=\${${r}}\"
670 done
671# #fallbackdefault=${fallbackdefault}
672# #valid_p=${valid_p}
673#EOF
f0d4cc9e 674 if class_is_predicate_p && fallback_default_p
0b8f9e4d 675 then
66b43ecb 676 echo "Error: predicate function ${macro} can not have a non- multi-arch default" 1>&2
0b8f9e4d
AC
677 kill $$
678 exit 1
679 fi
72e74a21 680 if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ]
f0d4cc9e
AC
681 then
682 echo "Error: postdefault is useless when invalid_p=0" 1>&2
683 kill $$
684 exit 1
685 fi
a72293e2
AC
686 if class_is_multiarch_p
687 then
688 if class_is_predicate_p ; then :
689 elif test "x${predefault}" = "x"
690 then
691 echo "Error: pure multi-arch function must have a predefault" 1>&2
692 kill $$
693 exit 1
694 fi
695 fi
3d9a5942 696 echo ""
0b8f9e4d
AC
697done
698
699exec 1>&2
700compare_new gdbarch.log
701
104c1213
JM
702
703copyright ()
704{
705cat <<EOF
59233f88
AC
706/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
707
104c1213 708/* Dynamic architecture support for GDB, the GNU debugger.
181c1381 709 Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
104c1213
JM
710
711 This file is part of GDB.
712
713 This program is free software; you can redistribute it and/or modify
714 it under the terms of the GNU General Public License as published by
715 the Free Software Foundation; either version 2 of the License, or
716 (at your option) any later version.
717
718 This program is distributed in the hope that it will be useful,
719 but WITHOUT ANY WARRANTY; without even the implied warranty of
720 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
721 GNU General Public License for more details.
722
723 You should have received a copy of the GNU General Public License
724 along with this program; if not, write to the Free Software
725 Foundation, Inc., 59 Temple Place - Suite 330,
726 Boston, MA 02111-1307, USA. */
727
104c1213
JM
728/* This file was created with the aid of \`\`gdbarch.sh''.
729
52204a0b 730 The Bourne shell script \`\`gdbarch.sh'' creates the files
104c1213
JM
731 \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
732 against the existing \`\`gdbarch.[hc]''. Any differences found
733 being reported.
734
735 If editing this file, please also run gdbarch.sh and merge any
52204a0b 736 changes into that script. Conversely, when making sweeping changes
104c1213
JM
737 to this file, modifying gdbarch.sh and using its output may prove
738 easier. */
739
740EOF
741}
742
743#
744# The .h file
745#
746
747exec > new-gdbarch.h
748copyright
749cat <<EOF
750#ifndef GDBARCH_H
751#define GDBARCH_H
752
2bf0cb65 753#include "dis-asm.h" /* Get defs for disassemble_info, which unfortunately is a typedef. */
fd0407d6 754#if !GDB_MULTI_ARCH
67a2b77e 755/* Pull in function declarations refered to, indirectly, via macros. */
fd0407d6 756#include "value.h" /* For default_coerce_float_to_double which is referenced by a macro. */
67a2b77e 757#include "inferior.h" /* For unsigned_address_to_pointer(). */
fd0407d6 758#endif
2bf0cb65 759
104c1213
JM
760struct frame_info;
761struct value;
b6af0555 762struct objfile;
a2cf933a 763struct minimal_symbol;
104c1213 764
104c1213
JM
765extern struct gdbarch *current_gdbarch;
766
767
104c1213
JM
768/* If any of the following are defined, the target wasn't correctly
769 converted. */
770
104c1213
JM
771#if GDB_MULTI_ARCH
772#if defined (EXTRA_FRAME_INFO)
773#error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
774#endif
775#endif
776
777#if GDB_MULTI_ARCH
778#if defined (FRAME_FIND_SAVED_REGS)
779#error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
780#endif
781#endif
83905903
AC
782
783#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PURE) && defined (GDB_TM_FILE)
784#error "GDB_TM_FILE: Pure multi-arch targets do not have a tm.h file."
785#endif
104c1213
JM
786EOF
787
788# function typedef's
3d9a5942
AC
789printf "\n"
790printf "\n"
791printf "/* The following are pre-initialized by GDBARCH. */\n"
34620563 792function_list | while do_read
104c1213 793do
2ada493a
AC
794 if class_is_info_p
795 then
3d9a5942
AC
796 printf "\n"
797 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
798 printf "/* set_gdbarch_${function}() - not applicable - pre-initialized. */\n"
028c194b 799 printf "#if (GDB_MULTI_ARCH ${gt_level}) && defined (${macro})\n"
83905903
AC
800 printf "#error \"Non multi-arch definition of ${macro}\"\n"
801 printf "#endif\n"
3d9a5942 802 printf "#if GDB_MULTI_ARCH\n"
028c194b 803 printf "#if (GDB_MULTI_ARCH ${gt_level}) || !defined (${macro})\n"
3d9a5942
AC
804 printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
805 printf "#endif\n"
806 printf "#endif\n"
2ada493a 807 fi
104c1213
JM
808done
809
810# function typedef's
3d9a5942
AC
811printf "\n"
812printf "\n"
813printf "/* The following are initialized by the target dependent code. */\n"
34620563 814function_list | while do_read
104c1213 815do
72e74a21 816 if [ -n "${comment}" ]
34620563
AC
817 then
818 echo "${comment}" | sed \
819 -e '2 s,#,/*,' \
820 -e '3,$ s,#, ,' \
821 -e '$ s,$, */,'
822 fi
b77be6cf 823 if class_is_multiarch_p
2ada493a 824 then
b77be6cf
AC
825 if class_is_predicate_p
826 then
827 printf "\n"
828 printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
829 fi
830 else
831 if class_is_predicate_p
832 then
833 printf "\n"
834 printf "#if defined (${macro})\n"
835 printf "/* Legacy for systems yet to multi-arch ${macro} */\n"
836 #printf "#if (GDB_MULTI_ARCH <= GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n"
eee30e78 837 printf "#if !defined (${macro}_P)\n"
b77be6cf
AC
838 printf "#define ${macro}_P() (1)\n"
839 printf "#endif\n"
eee30e78 840 printf "#endif\n"
b77be6cf
AC
841 printf "\n"
842 printf "/* Default predicate for non- multi-arch targets. */\n"
843 printf "#if (!GDB_MULTI_ARCH) && !defined (${macro}_P)\n"
844 printf "#define ${macro}_P() (0)\n"
845 printf "#endif\n"
846 printf "\n"
847 printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
028c194b 848 printf "#if (GDB_MULTI_ARCH ${gt_level}) && defined (${macro}_P)\n"
83905903
AC
849 printf "#error \"Non multi-arch definition of ${macro}\"\n"
850 printf "#endif\n"
028c194b 851 printf "#if (GDB_MULTI_ARCH ${gt_level}) || !defined (${macro}_P)\n"
b77be6cf
AC
852 printf "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))\n"
853 printf "#endif\n"
854 fi
4a5c6a1d 855 fi
2ada493a
AC
856 if class_is_variable_p
857 then
f0d4cc9e 858 if fallback_default_p || class_is_predicate_p
33489c5b 859 then
3d9a5942
AC
860 printf "\n"
861 printf "/* Default (value) for non- multi-arch platforms. */\n"
862 printf "#if (!GDB_MULTI_ARCH) && !defined (${macro})\n"
f0d4cc9e
AC
863 echo "#define ${macro} (${fallbackdefault})" \
864 | sed -e 's/\([^a-z_]\)\(gdbarch[^a-z_]\)/\1current_\2/g'
3d9a5942 865 printf "#endif\n"
33489c5b 866 fi
3d9a5942
AC
867 printf "\n"
868 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
869 printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n"
028c194b 870 printf "#if (GDB_MULTI_ARCH ${gt_level}) && defined (${macro})\n"
83905903
AC
871 printf "#error \"Non multi-arch definition of ${macro}\"\n"
872 printf "#endif\n"
3d9a5942 873 printf "#if GDB_MULTI_ARCH\n"
028c194b 874 printf "#if (GDB_MULTI_ARCH ${gt_level}) || !defined (${macro})\n"
3d9a5942
AC
875 printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
876 printf "#endif\n"
877 printf "#endif\n"
2ada493a
AC
878 fi
879 if class_is_function_p
880 then
b77be6cf
AC
881 if class_is_multiarch_p ; then :
882 elif fallback_default_p || class_is_predicate_p
33489c5b 883 then
3d9a5942
AC
884 printf "\n"
885 printf "/* Default (function) for non- multi-arch platforms. */\n"
886 printf "#if (!GDB_MULTI_ARCH) && !defined (${macro})\n"
72e74a21 887 if [ "x${fallbackdefault}" = "x0" ]
33489c5b 888 then
8e65ff28 889 printf "#define ${macro}(${actual}) (internal_error (__FILE__, __LINE__, \"${macro}\"), 0)\n"
33489c5b 890 else
f0d4cc9e
AC
891 # FIXME: Should be passing current_gdbarch through!
892 echo "#define ${macro}(${actual}) (${fallbackdefault} (${actual}))" \
893 | sed -e 's/\([^a-z_]\)\(gdbarch[^a-z_]\)/\1current_\2/g'
33489c5b 894 fi
3d9a5942 895 printf "#endif\n"
33489c5b 896 fi
3d9a5942 897 printf "\n"
72e74a21 898 if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p
4a5c6a1d
AC
899 then
900 printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n"
901 elif class_is_multiarch_p
902 then
903 printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n"
904 else
905 printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
906 fi
72e74a21 907 if [ "x${formal}" = "xvoid" ]
104c1213 908 then
3d9a5942 909 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
104c1213 910 else
3d9a5942 911 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
104c1213 912 fi
3d9a5942 913 printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
b77be6cf
AC
914 if class_is_multiarch_p ; then :
915 else
028c194b 916 printf "#if (GDB_MULTI_ARCH ${gt_level}) && defined (${macro})\n"
83905903
AC
917 printf "#error \"Non multi-arch definition of ${macro}\"\n"
918 printf "#endif\n"
4a5c6a1d 919 printf "#if GDB_MULTI_ARCH\n"
028c194b 920 printf "#if (GDB_MULTI_ARCH ${gt_level}) || !defined (${macro})\n"
72e74a21 921 if [ "x${actual}" = "x" ]
4a5c6a1d
AC
922 then
923 printf "#define ${macro}() (gdbarch_${function} (current_gdbarch))\n"
72e74a21 924 elif [ "x${actual}" = "x-" ]
4a5c6a1d
AC
925 then
926 printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
927 else
928 printf "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))\n"
929 fi
930 printf "#endif\n"
931 printf "#endif\n"
104c1213 932 fi
2ada493a 933 fi
104c1213
JM
934done
935
936# close it off
937cat <<EOF
938
939extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
940
941
942/* Mechanism for co-ordinating the selection of a specific
943 architecture.
944
945 GDB targets (*-tdep.c) can register an interest in a specific
946 architecture. Other GDB components can register a need to maintain
947 per-architecture data.
948
949 The mechanisms below ensures that there is only a loose connection
950 between the set-architecture command and the various GDB
0fa6923a 951 components. Each component can independently register their need
104c1213
JM
952 to maintain architecture specific data with gdbarch.
953
954 Pragmatics:
955
956 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
957 didn't scale.
958
959 The more traditional mega-struct containing architecture specific
960 data for all the various GDB components was also considered. Since
0fa6923a 961 GDB is built from a variable number of (fairly independent)
104c1213
JM
962 components it was determined that the global aproach was not
963 applicable. */
964
965
966/* Register a new architectural family with GDB.
967
968 Register support for the specified ARCHITECTURE with GDB. When
969 gdbarch determines that the specified architecture has been
970 selected, the corresponding INIT function is called.
971
972 --
973
974 The INIT function takes two parameters: INFO which contains the
975 information available to gdbarch about the (possibly new)
976 architecture; ARCHES which is a list of the previously created
977 \`\`struct gdbarch'' for this architecture.
978
0f79675b
AC
979 The INFO parameter is, as far as possible, be pre-initialized with
980 information obtained from INFO.ABFD or the previously selected
981 architecture.
982
983 The ARCHES parameter is a linked list (sorted most recently used)
984 of all the previously created architures for this architecture
985 family. The (possibly NULL) ARCHES->gdbarch can used to access
986 values from the previously selected architecture for this
987 architecture family. The global \`\`current_gdbarch'' shall not be
988 used.
104c1213
JM
989
990 The INIT function shall return any of: NULL - indicating that it
ec3d358c 991 doesn't recognize the selected architecture; an existing \`\`struct
104c1213
JM
992 gdbarch'' from the ARCHES list - indicating that the new
993 architecture is just a synonym for an earlier architecture (see
994 gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
4b9b3959
AC
995 - that describes the selected architecture (see gdbarch_alloc()).
996
997 The DUMP_TDEP function shall print out all target specific values.
998 Care should be taken to ensure that the function works in both the
999 multi-arch and non- multi-arch cases. */
104c1213
JM
1000
1001struct gdbarch_list
1002{
1003 struct gdbarch *gdbarch;
1004 struct gdbarch_list *next;
1005};
1006
1007struct gdbarch_info
1008{
104c1213
JM
1009 /* Use default: NULL (ZERO). */
1010 const struct bfd_arch_info *bfd_arch_info;
1011
428721aa 1012 /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO). */
104c1213
JM
1013 int byte_order;
1014
1015 /* Use default: NULL (ZERO). */
1016 bfd *abfd;
1017
1018 /* Use default: NULL (ZERO). */
1019 struct gdbarch_tdep_info *tdep_info;
1020};
1021
1022typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
4b9b3959 1023typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
104c1213 1024
4b9b3959 1025/* DEPRECATED - use gdbarch_register() */
104c1213
JM
1026extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
1027
4b9b3959
AC
1028extern void gdbarch_register (enum bfd_architecture architecture,
1029 gdbarch_init_ftype *,
1030 gdbarch_dump_tdep_ftype *);
1031
104c1213 1032
b4a20239
AC
1033/* Return a freshly allocated, NULL terminated, array of the valid
1034 architecture names. Since architectures are registered during the
1035 _initialize phase this function only returns useful information
1036 once initialization has been completed. */
1037
1038extern const char **gdbarch_printable_names (void);
1039
1040
104c1213
JM
1041/* Helper function. Search the list of ARCHES for a GDBARCH that
1042 matches the information provided by INFO. */
1043
1044extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
1045
1046
1047/* Helper function. Create a preliminary \`\`struct gdbarch''. Perform
1048 basic initialization using values obtained from the INFO andTDEP
1049 parameters. set_gdbarch_*() functions are called to complete the
1050 initialization of the object. */
1051
1052extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
1053
1054
4b9b3959
AC
1055/* Helper function. Free a partially-constructed \`\`struct gdbarch''.
1056 It is assumed that the caller freeds the \`\`struct
1057 gdbarch_tdep''. */
1058
058f20d5
JB
1059extern void gdbarch_free (struct gdbarch *);
1060
1061
b732d07d 1062/* Helper function. Force an update of the current architecture.
104c1213 1063
b732d07d
AC
1064 The actual architecture selected is determined by INFO, \`\`(gdb) set
1065 architecture'' et.al., the existing architecture and BFD's default
1066 architecture. INFO should be initialized to zero and then selected
1067 fields should be updated.
104c1213 1068
16f33e29
AC
1069 Returns non-zero if the update succeeds */
1070
1071extern int gdbarch_update_p (struct gdbarch_info info);
104c1213
JM
1072
1073
1074
1075/* Register per-architecture data-pointer.
1076
1077 Reserve space for a per-architecture data-pointer. An identifier
1078 for the reserved data-pointer is returned. That identifer should
95160752 1079 be saved in a local static variable.
104c1213 1080
95160752
AC
1081 The per-architecture data-pointer can be initialized in one of two
1082 ways: The value can be set explicitly using a call to
1083 set_gdbarch_data(); the value can be set implicitly using the value
1084 returned by a non-NULL INIT() callback. INIT(), when non-NULL is
1085 called after the basic architecture vector has been created.
104c1213 1086
95160752
AC
1087 When a previously created architecture is re-selected, the
1088 per-architecture data-pointer for that previous architecture is
1089 restored. INIT() is not called.
1090
1091 During initialization, multiple assignments of the data-pointer are
1092 allowed, non-NULL values are deleted by calling FREE(). If the
1093 architecture is deleted using gdbarch_free() all non-NULL data
1094 pointers are also deleted using FREE().
104c1213
JM
1095
1096 Multiple registrarants for any architecture are allowed (and
1097 strongly encouraged). */
1098
95160752 1099struct gdbarch_data;
104c1213 1100
95160752
AC
1101typedef void *(gdbarch_data_init_ftype) (struct gdbarch *gdbarch);
1102typedef void (gdbarch_data_free_ftype) (struct gdbarch *gdbarch,
1103 void *pointer);
1104extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_init_ftype *init,
1105 gdbarch_data_free_ftype *free);
1106extern void set_gdbarch_data (struct gdbarch *gdbarch,
1107 struct gdbarch_data *data,
1108 void *pointer);
104c1213
JM
1109
1110extern void *gdbarch_data (struct gdbarch_data*);
1111
1112
104c1213
JM
1113/* Register per-architecture memory region.
1114
1115 Provide a memory-region swap mechanism. Per-architecture memory
1116 region are created. These memory regions are swapped whenever the
1117 architecture is changed. For a new architecture, the memory region
1118 is initialized with zero (0) and the INIT function is called.
1119
1120 Memory regions are swapped / initialized in the order that they are
1121 registered. NULL DATA and/or INIT values can be specified.
1122
1123 New code should use register_gdbarch_data(). */
1124
1125typedef void (gdbarch_swap_ftype) (void);
1126extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
e514a9d6 1127#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
104c1213
JM
1128
1129
1130
0fa6923a 1131/* The target-system-dependent byte order is dynamic */
104c1213 1132
104c1213 1133extern int target_byte_order;
104c1213
JM
1134#ifndef TARGET_BYTE_ORDER
1135#define TARGET_BYTE_ORDER (target_byte_order + 0)
1136#endif
1137
1138extern int target_byte_order_auto;
1139#ifndef TARGET_BYTE_ORDER_AUTO
1140#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
1141#endif
1142
1143
1144
0fa6923a 1145/* The target-system-dependent BFD architecture is dynamic */
104c1213
JM
1146
1147extern int target_architecture_auto;
1148#ifndef TARGET_ARCHITECTURE_AUTO
1149#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
1150#endif
1151
1152extern const struct bfd_arch_info *target_architecture;
1153#ifndef TARGET_ARCHITECTURE
1154#define TARGET_ARCHITECTURE (target_architecture + 0)
1155#endif
1156
104c1213 1157
0fa6923a 1158/* The target-system-dependent disassembler is semi-dynamic */
104c1213 1159
104c1213 1160extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
ff844c8d 1161 unsigned int len, disassemble_info *info);
104c1213
JM
1162
1163extern void dis_asm_memory_error (int status, bfd_vma memaddr,
1164 disassemble_info *info);
1165
1166extern void dis_asm_print_address (bfd_vma addr,
1167 disassemble_info *info);
1168
1169extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
1170extern disassemble_info tm_print_insn_info;
104c1213
JM
1171#ifndef TARGET_PRINT_INSN_INFO
1172#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
1173#endif
1174
1175
1176
0fa6923a 1177/* Set the dynamic target-system-dependent parameters (architecture,
104c1213
JM
1178 byte-order, ...) using information found in the BFD */
1179
1180extern void set_gdbarch_from_file (bfd *);
1181
1182
e514a9d6
JM
1183/* Initialize the current architecture to the "first" one we find on
1184 our list. */
1185
1186extern void initialize_current_architecture (void);
1187
ceaa8edf
JB
1188/* For non-multiarched targets, do any initialization of the default
1189 gdbarch object necessary after the _initialize_MODULE functions
1190 have run. */
1191extern void initialize_non_multiarch ();
104c1213
JM
1192
1193/* gdbarch trace variable */
1194extern int gdbarch_debug;
1195
4b9b3959 1196extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
104c1213
JM
1197
1198#endif
1199EOF
1200exec 1>&2
1201#../move-if-change new-gdbarch.h gdbarch.h
59233f88 1202compare_new gdbarch.h
104c1213
JM
1203
1204
1205#
1206# C file
1207#
1208
1209exec > new-gdbarch.c
1210copyright
1211cat <<EOF
1212
1213#include "defs.h"
7355ddba 1214#include "arch-utils.h"
104c1213
JM
1215
1216#if GDB_MULTI_ARCH
1217#include "gdbcmd.h"
1218#include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
1219#else
1220/* Just include everything in sight so that the every old definition
1221 of macro is visible. */
1222#include "gdb_string.h"
1223#include <ctype.h>
1224#include "symtab.h"
1225#include "frame.h"
1226#include "inferior.h"
1227#include "breakpoint.h"
0596389c 1228#include "gdb_wait.h"
104c1213
JM
1229#include "gdbcore.h"
1230#include "gdbcmd.h"
1231#include "target.h"
1232#include "gdbthread.h"
1233#include "annotate.h"
1234#include "symfile.h" /* for overlay functions */
fd0407d6 1235#include "value.h" /* For old tm.h/nm.h macros. */
104c1213
JM
1236#endif
1237#include "symcat.h"
1238
f0d4cc9e 1239#include "floatformat.h"
104c1213 1240
95160752 1241#include "gdb_assert.h"
67c2c32c 1242#include "gdb-events.h"
95160752 1243
104c1213
JM
1244/* Static function declarations */
1245
1246static void verify_gdbarch (struct gdbarch *gdbarch);
b3cc3077
JB
1247static void alloc_gdbarch_data (struct gdbarch *);
1248static void init_gdbarch_data (struct gdbarch *);
95160752 1249static void free_gdbarch_data (struct gdbarch *);
104c1213
JM
1250static void init_gdbarch_swap (struct gdbarch *);
1251static void swapout_gdbarch_swap (struct gdbarch *);
1252static void swapin_gdbarch_swap (struct gdbarch *);
1253
104c1213
JM
1254/* Non-zero if we want to trace architecture code. */
1255
1256#ifndef GDBARCH_DEBUG
1257#define GDBARCH_DEBUG 0
1258#endif
1259int gdbarch_debug = GDBARCH_DEBUG;
1260
1261EOF
1262
1263# gdbarch open the gdbarch object
3d9a5942
AC
1264printf "\n"
1265printf "/* Maintain the struct gdbarch object */\n"
1266printf "\n"
1267printf "struct gdbarch\n"
1268printf "{\n"
1269printf " /* basic architectural information */\n"
34620563 1270function_list | while do_read
104c1213 1271do
2ada493a
AC
1272 if class_is_info_p
1273 then
3d9a5942 1274 printf " ${returntype} ${function};\n"
2ada493a 1275 fi
104c1213 1276done
3d9a5942
AC
1277printf "\n"
1278printf " /* target specific vector. */\n"
1279printf " struct gdbarch_tdep *tdep;\n"
1280printf " gdbarch_dump_tdep_ftype *dump_tdep;\n"
1281printf "\n"
1282printf " /* per-architecture data-pointers */\n"
95160752 1283printf " unsigned nr_data;\n"
3d9a5942
AC
1284printf " void **data;\n"
1285printf "\n"
1286printf " /* per-architecture swap-regions */\n"
1287printf " struct gdbarch_swap *swap;\n"
1288printf "\n"
104c1213
JM
1289cat <<EOF
1290 /* Multi-arch values.
1291
1292 When extending this structure you must:
1293
1294 Add the field below.
1295
1296 Declare set/get functions and define the corresponding
1297 macro in gdbarch.h.
1298
1299 gdbarch_alloc(): If zero/NULL is not a suitable default,
1300 initialize the new field.
1301
1302 verify_gdbarch(): Confirm that the target updated the field
1303 correctly.
1304
7e73cedf 1305 gdbarch_dump(): Add a fprintf_unfiltered call so that the new
104c1213
JM
1306 field is dumped out
1307
c0e8c252 1308 \`\`startup_gdbarch()'': Append an initial value to the static
104c1213
JM
1309 variable (base values on the host's c-type system).
1310
1311 get_gdbarch(): Implement the set/get functions (probably using
1312 the macro's as shortcuts).
1313
1314 */
1315
1316EOF
34620563 1317function_list | while do_read
104c1213 1318do
2ada493a
AC
1319 if class_is_variable_p
1320 then
3d9a5942 1321 printf " ${returntype} ${function};\n"
2ada493a
AC
1322 elif class_is_function_p
1323 then
3d9a5942 1324 printf " gdbarch_${function}_ftype *${function}${attrib};\n"
2ada493a 1325 fi
104c1213 1326done
3d9a5942 1327printf "};\n"
104c1213
JM
1328
1329# A pre-initialized vector
3d9a5942
AC
1330printf "\n"
1331printf "\n"
104c1213
JM
1332cat <<EOF
1333/* The default architecture uses host values (for want of a better
1334 choice). */
1335EOF
3d9a5942
AC
1336printf "\n"
1337printf "extern const struct bfd_arch_info bfd_default_arch_struct;\n"
1338printf "\n"
1339printf "struct gdbarch startup_gdbarch =\n"
1340printf "{\n"
1341printf " /* basic architecture information */\n"
4b9b3959 1342function_list | while do_read
104c1213 1343do
2ada493a
AC
1344 if class_is_info_p
1345 then
3d9a5942 1346 printf " ${staticdefault},\n"
2ada493a 1347 fi
104c1213
JM
1348done
1349cat <<EOF
4b9b3959
AC
1350 /* target specific vector and its dump routine */
1351 NULL, NULL,
104c1213
JM
1352 /*per-architecture data-pointers and swap regions */
1353 0, NULL, NULL,
1354 /* Multi-arch values */
1355EOF
34620563 1356function_list | while do_read
104c1213 1357do
2ada493a
AC
1358 if class_is_function_p || class_is_variable_p
1359 then
3d9a5942 1360 printf " ${staticdefault},\n"
2ada493a 1361 fi
104c1213
JM
1362done
1363cat <<EOF
c0e8c252 1364 /* startup_gdbarch() */
104c1213 1365};
4b9b3959 1366
c0e8c252 1367struct gdbarch *current_gdbarch = &startup_gdbarch;
ceaa8edf
JB
1368
1369/* Do any initialization needed for a non-multiarch configuration
1370 after the _initialize_MODULE functions have been run. */
1371void
1372initialize_non_multiarch ()
1373{
1374 alloc_gdbarch_data (&startup_gdbarch);
6c1e5d11 1375 init_gdbarch_swap (&startup_gdbarch);
ceaa8edf
JB
1376 init_gdbarch_data (&startup_gdbarch);
1377}
104c1213
JM
1378EOF
1379
1380# Create a new gdbarch struct
3d9a5942
AC
1381printf "\n"
1382printf "\n"
104c1213 1383cat <<EOF
66b43ecb 1384/* Create a new \`\`struct gdbarch'' based on information provided by
104c1213
JM
1385 \`\`struct gdbarch_info''. */
1386EOF
3d9a5942 1387printf "\n"
104c1213
JM
1388cat <<EOF
1389struct gdbarch *
1390gdbarch_alloc (const struct gdbarch_info *info,
1391 struct gdbarch_tdep *tdep)
1392{
85de9627
AC
1393 /* NOTE: The new architecture variable is named \`\`current_gdbarch''
1394 so that macros such as TARGET_DOUBLE_BIT, when expanded, refer to
1395 the current local architecture and not the previous global
1396 architecture. This ensures that the new architectures initial
1397 values are not influenced by the previous architecture. Once
1398 everything is parameterised with gdbarch, this will go away. */
1399 struct gdbarch *current_gdbarch = XMALLOC (struct gdbarch);
1400 memset (current_gdbarch, 0, sizeof (*current_gdbarch));
1401
1402 alloc_gdbarch_data (current_gdbarch);
1403
1404 current_gdbarch->tdep = tdep;
104c1213 1405EOF
3d9a5942 1406printf "\n"
34620563 1407function_list | while do_read
104c1213 1408do
2ada493a
AC
1409 if class_is_info_p
1410 then
85de9627 1411 printf " current_gdbarch->${function} = info->${function};\n"
2ada493a 1412 fi
104c1213 1413done
3d9a5942
AC
1414printf "\n"
1415printf " /* Force the explicit initialization of these. */\n"
34620563 1416function_list | while do_read
104c1213 1417do
2ada493a
AC
1418 if class_is_function_p || class_is_variable_p
1419 then
72e74a21 1420 if [ -n "${predefault}" -a "x${predefault}" != "x0" ]
104c1213 1421 then
85de9627 1422 printf " current_gdbarch->${function} = ${predefault};\n"
104c1213 1423 fi
2ada493a 1424 fi
104c1213
JM
1425done
1426cat <<EOF
1427 /* gdbarch_alloc() */
1428
85de9627 1429 return current_gdbarch;
104c1213
JM
1430}
1431EOF
1432
058f20d5 1433# Free a gdbarch struct.
3d9a5942
AC
1434printf "\n"
1435printf "\n"
058f20d5
JB
1436cat <<EOF
1437/* Free a gdbarch struct. This should never happen in normal
1438 operation --- once you've created a gdbarch, you keep it around.
1439 However, if an architecture's init function encounters an error
1440 building the structure, it may need to clean up a partially
1441 constructed gdbarch. */
4b9b3959 1442
058f20d5
JB
1443void
1444gdbarch_free (struct gdbarch *arch)
1445{
95160752
AC
1446 gdb_assert (arch != NULL);
1447 free_gdbarch_data (arch);
338d7c5c 1448 xfree (arch);
058f20d5
JB
1449}
1450EOF
1451
104c1213 1452# verify a new architecture
3d9a5942
AC
1453printf "\n"
1454printf "\n"
1455printf "/* Ensure that all values in a GDBARCH are reasonable. */\n"
1456printf "\n"
104c1213
JM
1457cat <<EOF
1458static void
1459verify_gdbarch (struct gdbarch *gdbarch)
1460{
f16a1923
AC
1461 struct ui_file *log;
1462 struct cleanup *cleanups;
1463 long dummy;
1464 char *buf;
104c1213 1465 /* Only perform sanity checks on a multi-arch target. */
6166d547 1466 if (!GDB_MULTI_ARCH)
104c1213 1467 return;
f16a1923
AC
1468 log = mem_fileopen ();
1469 cleanups = make_cleanup_ui_file_delete (log);
104c1213 1470 /* fundamental */
428721aa 1471 if (gdbarch->byte_order == BFD_ENDIAN_UNKNOWN)
f16a1923 1472 fprintf_unfiltered (log, "\n\tbyte-order");
104c1213 1473 if (gdbarch->bfd_arch_info == NULL)
f16a1923 1474 fprintf_unfiltered (log, "\n\tbfd_arch_info");
104c1213
JM
1475 /* Check those that need to be defined for the given multi-arch level. */
1476EOF
34620563 1477function_list | while do_read
104c1213 1478do
2ada493a
AC
1479 if class_is_function_p || class_is_variable_p
1480 then
72e74a21 1481 if [ "x${invalid_p}" = "x0" ]
c0e8c252 1482 then
3d9a5942 1483 printf " /* Skip verify of ${function}, invalid_p == 0 */\n"
2ada493a
AC
1484 elif class_is_predicate_p
1485 then
3d9a5942 1486 printf " /* Skip verify of ${function}, has predicate */\n"
f0d4cc9e 1487 # FIXME: See do_read for potential simplification
72e74a21 1488 elif [ -n "${invalid_p}" -a -n "${postdefault}" ]
f0d4cc9e 1489 then
3d9a5942
AC
1490 printf " if (${invalid_p})\n"
1491 printf " gdbarch->${function} = ${postdefault};\n"
72e74a21 1492 elif [ -n "${predefault}" -a -n "${postdefault}" ]
f0d4cc9e 1493 then
3d9a5942
AC
1494 printf " if (gdbarch->${function} == ${predefault})\n"
1495 printf " gdbarch->${function} = ${postdefault};\n"
72e74a21 1496 elif [ -n "${postdefault}" ]
f0d4cc9e 1497 then
3d9a5942
AC
1498 printf " if (gdbarch->${function} == 0)\n"
1499 printf " gdbarch->${function} = ${postdefault};\n"
72e74a21 1500 elif [ -n "${invalid_p}" ]
104c1213 1501 then
50248794 1502 printf " if ((GDB_MULTI_ARCH ${gt_level})\n"
3d9a5942 1503 printf " && (${invalid_p}))\n"
f16a1923 1504 printf " fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
72e74a21 1505 elif [ -n "${predefault}" ]
104c1213 1506 then
50248794 1507 printf " if ((GDB_MULTI_ARCH ${gt_level})\n"
3d9a5942 1508 printf " && (gdbarch->${function} == ${predefault}))\n"
f16a1923 1509 printf " fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n"
104c1213 1510 fi
2ada493a 1511 fi
104c1213
JM
1512done
1513cat <<EOF
f16a1923
AC
1514 buf = ui_file_xstrdup (log, &dummy);
1515 make_cleanup (xfree, buf);
1516 if (strlen (buf) > 0)
1517 internal_error (__FILE__, __LINE__,
1518 "verify_gdbarch: the following are invalid ...%s",
1519 buf);
1520 do_cleanups (cleanups);
104c1213
JM
1521}
1522EOF
1523
1524# dump the structure
3d9a5942
AC
1525printf "\n"
1526printf "\n"
104c1213 1527cat <<EOF
4b9b3959
AC
1528/* Print out the details of the current architecture. */
1529
1530/* NOTE/WARNING: The parameter is called \`\`current_gdbarch'' so that it
1531 just happens to match the global variable \`\`current_gdbarch''. That
1532 way macros refering to that variable get the local and not the global
1533 version - ulgh. Once everything is parameterised with gdbarch, this
1534 will go away. */
1535
104c1213 1536void
4b9b3959 1537gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
104c1213 1538{
4b9b3959
AC
1539 fprintf_unfiltered (file,
1540 "gdbarch_dump: GDB_MULTI_ARCH = %d\\n",
1541 GDB_MULTI_ARCH);
104c1213 1542EOF
08e45a40 1543function_list | sort -t: +2 | while do_read
104c1213 1544do
4a5c6a1d 1545 # multiarch functions don't have macros.
08e45a40
AC
1546 if class_is_multiarch_p
1547 then
1548 printf " if (GDB_MULTI_ARCH)\n"
1549 printf " fprintf_unfiltered (file,\n"
1550 printf " \"gdbarch_dump: ${function} = 0x%%08lx\\\\n\",\n"
1551 printf " (long) current_gdbarch->${function});\n"
1552 continue
1553 fi
06b25f14 1554 # Print the macro definition.
08e45a40 1555 printf "#ifdef ${macro}\n"
72e74a21 1556 if [ "x${returntype}" = "xvoid" ]
63e69063 1557 then
08e45a40 1558 printf "#if GDB_MULTI_ARCH\n"
3d9a5942 1559 printf " /* Macro might contain \`[{}]' when not multi-arch */\n"
63e69063 1560 fi
2ada493a
AC
1561 if class_is_function_p
1562 then
3d9a5942
AC
1563 printf " fprintf_unfiltered (file,\n"
1564 printf " \"gdbarch_dump: %%s # %%s\\\\n\",\n"
1565 printf " \"${macro}(${actual})\",\n"
1566 printf " XSTRING (${macro} (${actual})));\n"
2ada493a 1567 else
3d9a5942
AC
1568 printf " fprintf_unfiltered (file,\n"
1569 printf " \"gdbarch_dump: ${macro} # %%s\\\\n\",\n"
1570 printf " XSTRING (${macro}));\n"
4b9b3959 1571 fi
06b25f14 1572 # Print the architecture vector value
08e45a40 1573 if [ "x${returntype}" = "xvoid" ]
4a5c6a1d 1574 then
08e45a40 1575 printf "#endif\n"
4a5c6a1d 1576 fi
72e74a21 1577 if [ "x${print_p}" = "x()" ]
4b9b3959 1578 then
4a5c6a1d 1579 printf " gdbarch_dump_${function} (current_gdbarch);\n"
72e74a21 1580 elif [ "x${print_p}" = "x0" ]
4b9b3959 1581 then
4a5c6a1d 1582 printf " /* skip print of ${macro}, print_p == 0. */\n"
72e74a21 1583 elif [ -n "${print_p}" ]
4b9b3959 1584 then
4a5c6a1d 1585 printf " if (${print_p})\n"
3d9a5942
AC
1586 printf " fprintf_unfiltered (file,\n"
1587 printf " \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
1588 printf " ${print});\n"
4b9b3959
AC
1589 elif class_is_function_p
1590 then
3d9a5942
AC
1591 printf " if (GDB_MULTI_ARCH)\n"
1592 printf " fprintf_unfiltered (file,\n"
1593 printf " \"gdbarch_dump: ${macro} = 0x%%08lx\\\\n\",\n"
1594 printf " (long) current_gdbarch->${function}\n"
1595 printf " /*${macro} ()*/);\n"
4b9b3959 1596 else
3d9a5942
AC
1597 printf " fprintf_unfiltered (file,\n"
1598 printf " \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
1599 printf " ${print});\n"
2ada493a 1600 fi
3d9a5942 1601 printf "#endif\n"
104c1213 1602done
381323f4 1603cat <<EOF
4b9b3959
AC
1604 if (current_gdbarch->dump_tdep != NULL)
1605 current_gdbarch->dump_tdep (current_gdbarch, file);
381323f4
AC
1606}
1607EOF
104c1213
JM
1608
1609
1610# GET/SET
3d9a5942 1611printf "\n"
104c1213
JM
1612cat <<EOF
1613struct gdbarch_tdep *
1614gdbarch_tdep (struct gdbarch *gdbarch)
1615{
1616 if (gdbarch_debug >= 2)
3d9a5942 1617 fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\\n");
104c1213
JM
1618 return gdbarch->tdep;
1619}
1620EOF
3d9a5942 1621printf "\n"
34620563 1622function_list | while do_read
104c1213 1623do
2ada493a
AC
1624 if class_is_predicate_p
1625 then
3d9a5942
AC
1626 printf "\n"
1627 printf "int\n"
1628 printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n"
1629 printf "{\n"
72e74a21 1630 if [ -n "${valid_p}" ]
2ada493a 1631 then
3d9a5942 1632 printf " return ${valid_p};\n"
2ada493a 1633 else
3d9a5942 1634 printf "#error \"gdbarch_${function}_p: not defined\"\n"
2ada493a 1635 fi
3d9a5942 1636 printf "}\n"
2ada493a
AC
1637 fi
1638 if class_is_function_p
1639 then
3d9a5942
AC
1640 printf "\n"
1641 printf "${returntype}\n"
72e74a21 1642 if [ "x${formal}" = "xvoid" ]
104c1213 1643 then
3d9a5942 1644 printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
104c1213 1645 else
3d9a5942 1646 printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n"
104c1213 1647 fi
3d9a5942
AC
1648 printf "{\n"
1649 printf " if (gdbarch->${function} == 0)\n"
8e65ff28
AC
1650 printf " internal_error (__FILE__, __LINE__,\n"
1651 printf " \"gdbarch: gdbarch_${function} invalid\");\n"
3d9a5942
AC
1652 printf " if (gdbarch_debug >= 2)\n"
1653 printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
72e74a21 1654 if [ "x${actual}" = "x-" -o "x${actual}" = "x" ]
4a5c6a1d
AC
1655 then
1656 if class_is_multiarch_p
1657 then
1658 params="gdbarch"
1659 else
1660 params=""
1661 fi
1662 else
1663 if class_is_multiarch_p
1664 then
1665 params="gdbarch, ${actual}"
1666 else
1667 params="${actual}"
1668 fi
1669 fi
72e74a21 1670 if [ "x${returntype}" = "xvoid" ]
104c1213 1671 then
4a5c6a1d 1672 printf " gdbarch->${function} (${params});\n"
104c1213 1673 else
4a5c6a1d 1674 printf " return gdbarch->${function} (${params});\n"
104c1213 1675 fi
3d9a5942
AC
1676 printf "}\n"
1677 printf "\n"
1678 printf "void\n"
1679 printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
1680 printf " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})\n"
1681 printf "{\n"
1682 printf " gdbarch->${function} = ${function};\n"
1683 printf "}\n"
2ada493a
AC
1684 elif class_is_variable_p
1685 then
3d9a5942
AC
1686 printf "\n"
1687 printf "${returntype}\n"
1688 printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1689 printf "{\n"
72e74a21 1690 if [ "x${invalid_p}" = "x0" ]
c0e8c252 1691 then
3d9a5942 1692 printf " /* Skip verify of ${function}, invalid_p == 0 */\n"
72e74a21 1693 elif [ -n "${invalid_p}" ]
104c1213 1694 then
3d9a5942 1695 printf " if (${invalid_p})\n"
8e65ff28
AC
1696 printf " internal_error (__FILE__, __LINE__,\n"
1697 printf " \"gdbarch: gdbarch_${function} invalid\");\n"
72e74a21 1698 elif [ -n "${predefault}" ]
104c1213 1699 then
3d9a5942 1700 printf " if (gdbarch->${function} == ${predefault})\n"
8e65ff28
AC
1701 printf " internal_error (__FILE__, __LINE__,\n"
1702 printf " \"gdbarch: gdbarch_${function} invalid\");\n"
104c1213 1703 fi
3d9a5942
AC
1704 printf " if (gdbarch_debug >= 2)\n"
1705 printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1706 printf " return gdbarch->${function};\n"
1707 printf "}\n"
1708 printf "\n"
1709 printf "void\n"
1710 printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n"
1711 printf " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})\n"
1712 printf "{\n"
1713 printf " gdbarch->${function} = ${function};\n"
1714 printf "}\n"
2ada493a
AC
1715 elif class_is_info_p
1716 then
3d9a5942
AC
1717 printf "\n"
1718 printf "${returntype}\n"
1719 printf "gdbarch_${function} (struct gdbarch *gdbarch)\n"
1720 printf "{\n"
1721 printf " if (gdbarch_debug >= 2)\n"
1722 printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
1723 printf " return gdbarch->${function};\n"
1724 printf "}\n"
2ada493a 1725 fi
104c1213
JM
1726done
1727
1728# All the trailing guff
1729cat <<EOF
1730
1731
f44c642f 1732/* Keep a registry of per-architecture data-pointers required by GDB
104c1213
JM
1733 modules. */
1734
1735struct gdbarch_data
1736{
95160752
AC
1737 unsigned index;
1738 gdbarch_data_init_ftype *init;
1739 gdbarch_data_free_ftype *free;
104c1213
JM
1740};
1741
1742struct gdbarch_data_registration
1743{
104c1213
JM
1744 struct gdbarch_data *data;
1745 struct gdbarch_data_registration *next;
1746};
1747
f44c642f 1748struct gdbarch_data_registry
104c1213 1749{
95160752 1750 unsigned nr;
104c1213
JM
1751 struct gdbarch_data_registration *registrations;
1752};
1753
f44c642f 1754struct gdbarch_data_registry gdbarch_data_registry =
104c1213
JM
1755{
1756 0, NULL,
1757};
1758
1759struct gdbarch_data *
95160752
AC
1760register_gdbarch_data (gdbarch_data_init_ftype *init,
1761 gdbarch_data_free_ftype *free)
104c1213
JM
1762{
1763 struct gdbarch_data_registration **curr;
f44c642f 1764 for (curr = &gdbarch_data_registry.registrations;
104c1213
JM
1765 (*curr) != NULL;
1766 curr = &(*curr)->next);
1767 (*curr) = XMALLOC (struct gdbarch_data_registration);
1768 (*curr)->next = NULL;
104c1213 1769 (*curr)->data = XMALLOC (struct gdbarch_data);
f44c642f 1770 (*curr)->data->index = gdbarch_data_registry.nr++;
95160752
AC
1771 (*curr)->data->init = init;
1772 (*curr)->data->free = free;
104c1213
JM
1773 return (*curr)->data;
1774}
1775
1776
b3cc3077 1777/* Walk through all the registered users initializing each in turn. */
104c1213
JM
1778
1779static void
b3cc3077 1780init_gdbarch_data (struct gdbarch *gdbarch)
104c1213 1781{
b3cc3077
JB
1782 struct gdbarch_data_registration *rego;
1783 for (rego = gdbarch_data_registry.registrations;
1784 rego != NULL;
1785 rego = rego->next)
104c1213 1786 {
b3cc3077
JB
1787 struct gdbarch_data *data = rego->data;
1788 gdb_assert (data->index < gdbarch->nr_data);
1789 if (data->init != NULL)
95160752 1790 {
b3cc3077
JB
1791 void *pointer = data->init (gdbarch);
1792 set_gdbarch_data (gdbarch, data, pointer);
95160752
AC
1793 }
1794 }
1795}
1796
b3cc3077 1797/* Create/delete the gdbarch data vector. */
95160752
AC
1798
1799static void
b3cc3077 1800alloc_gdbarch_data (struct gdbarch *gdbarch)
95160752 1801{
b3cc3077
JB
1802 gdb_assert (gdbarch->data == NULL);
1803 gdbarch->nr_data = gdbarch_data_registry.nr;
1804 gdbarch->data = xcalloc (gdbarch->nr_data, sizeof (void*));
1805}
3c875b6f 1806
b3cc3077
JB
1807static void
1808free_gdbarch_data (struct gdbarch *gdbarch)
1809{
1810 struct gdbarch_data_registration *rego;
1811 gdb_assert (gdbarch->data != NULL);
1812 for (rego = gdbarch_data_registry.registrations;
1813 rego != NULL;
1814 rego = rego->next)
95160752 1815 {
b3cc3077
JB
1816 struct gdbarch_data *data = rego->data;
1817 gdb_assert (data->index < gdbarch->nr_data);
1818 if (data->free != NULL && gdbarch->data[data->index] != NULL)
95160752 1819 {
b3cc3077
JB
1820 data->free (gdbarch, gdbarch->data[data->index]);
1821 gdbarch->data[data->index] = NULL;
95160752 1822 }
104c1213 1823 }
b3cc3077
JB
1824 xfree (gdbarch->data);
1825 gdbarch->data = NULL;
104c1213
JM
1826}
1827
1828
b3cc3077
JB
1829/* Initialize the current value of thee specified per-architecture
1830 data-pointer. */
1831
95160752
AC
1832void
1833set_gdbarch_data (struct gdbarch *gdbarch,
1834 struct gdbarch_data *data,
1835 void *pointer)
1836{
1837 gdb_assert (data->index < gdbarch->nr_data);
1838 if (data->free != NULL && gdbarch->data[data->index] != NULL)
1839 data->free (gdbarch, gdbarch->data[data->index]);
1840 gdbarch->data[data->index] = pointer;
1841}
1842
104c1213
JM
1843/* Return the current value of the specified per-architecture
1844 data-pointer. */
1845
1846void *
34620563 1847gdbarch_data (struct gdbarch_data *data)
104c1213 1848{
95160752 1849 gdb_assert (data->index < current_gdbarch->nr_data);
104c1213
JM
1850 return current_gdbarch->data[data->index];
1851}
1852
1853
1854
f44c642f 1855/* Keep a registry of swapped data required by GDB modules. */
104c1213
JM
1856
1857struct gdbarch_swap
1858{
1859 void *swap;
1860 struct gdbarch_swap_registration *source;
1861 struct gdbarch_swap *next;
1862};
1863
1864struct gdbarch_swap_registration
1865{
1866 void *data;
1867 unsigned long sizeof_data;
1868 gdbarch_swap_ftype *init;
1869 struct gdbarch_swap_registration *next;
1870};
1871
f44c642f 1872struct gdbarch_swap_registry
104c1213
JM
1873{
1874 int nr;
1875 struct gdbarch_swap_registration *registrations;
1876};
1877
f44c642f 1878struct gdbarch_swap_registry gdbarch_swap_registry =
104c1213
JM
1879{
1880 0, NULL,
1881};
1882
1883void
1884register_gdbarch_swap (void *data,
1885 unsigned long sizeof_data,
1886 gdbarch_swap_ftype *init)
1887{
1888 struct gdbarch_swap_registration **rego;
f44c642f 1889 for (rego = &gdbarch_swap_registry.registrations;
104c1213
JM
1890 (*rego) != NULL;
1891 rego = &(*rego)->next);
1892 (*rego) = XMALLOC (struct gdbarch_swap_registration);
1893 (*rego)->next = NULL;
1894 (*rego)->init = init;
1895 (*rego)->data = data;
1896 (*rego)->sizeof_data = sizeof_data;
1897}
1898
1899
1900static void
1901init_gdbarch_swap (struct gdbarch *gdbarch)
1902{
1903 struct gdbarch_swap_registration *rego;
1904 struct gdbarch_swap **curr = &gdbarch->swap;
f44c642f 1905 for (rego = gdbarch_swap_registry.registrations;
104c1213
JM
1906 rego != NULL;
1907 rego = rego->next)
1908 {
1909 if (rego->data != NULL)
1910 {
1911 (*curr) = XMALLOC (struct gdbarch_swap);
1912 (*curr)->source = rego;
1913 (*curr)->swap = xmalloc (rego->sizeof_data);
1914 (*curr)->next = NULL;
1915 memset (rego->data, 0, rego->sizeof_data);
1916 curr = &(*curr)->next;
1917 }
1918 if (rego->init != NULL)
1919 rego->init ();
1920 }
1921}
1922
1923static void
1924swapout_gdbarch_swap (struct gdbarch *gdbarch)
1925{
1926 struct gdbarch_swap *curr;
1927 for (curr = gdbarch->swap;
1928 curr != NULL;
1929 curr = curr->next)
1930 memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
1931}
1932
1933static void
1934swapin_gdbarch_swap (struct gdbarch *gdbarch)
1935{
1936 struct gdbarch_swap *curr;
1937 for (curr = gdbarch->swap;
1938 curr != NULL;
1939 curr = curr->next)
1940 memcpy (curr->source->data, curr->swap, curr->source->sizeof_data);
1941}
1942
1943
f44c642f 1944/* Keep a registry of the architectures known by GDB. */
104c1213 1945
4b9b3959 1946struct gdbarch_registration
104c1213
JM
1947{
1948 enum bfd_architecture bfd_architecture;
1949 gdbarch_init_ftype *init;
4b9b3959 1950 gdbarch_dump_tdep_ftype *dump_tdep;
104c1213 1951 struct gdbarch_list *arches;
4b9b3959 1952 struct gdbarch_registration *next;
104c1213
JM
1953};
1954
f44c642f 1955static struct gdbarch_registration *gdbarch_registry = NULL;
104c1213 1956
b4a20239
AC
1957static void
1958append_name (const char ***buf, int *nr, const char *name)
1959{
1960 *buf = xrealloc (*buf, sizeof (char**) * (*nr + 1));
1961 (*buf)[*nr] = name;
1962 *nr += 1;
1963}
1964
1965const char **
1966gdbarch_printable_names (void)
1967{
1968 if (GDB_MULTI_ARCH)
1969 {
1970 /* Accumulate a list of names based on the registed list of
1971 architectures. */
1972 enum bfd_architecture a;
1973 int nr_arches = 0;
1974 const char **arches = NULL;
4b9b3959 1975 struct gdbarch_registration *rego;
f44c642f 1976 for (rego = gdbarch_registry;
b4a20239
AC
1977 rego != NULL;
1978 rego = rego->next)
1979 {
1980 const struct bfd_arch_info *ap;
1981 ap = bfd_lookup_arch (rego->bfd_architecture, 0);
1982 if (ap == NULL)
8e65ff28
AC
1983 internal_error (__FILE__, __LINE__,
1984 "gdbarch_architecture_names: multi-arch unknown");
b4a20239
AC
1985 do
1986 {
1987 append_name (&arches, &nr_arches, ap->printable_name);
1988 ap = ap->next;
1989 }
1990 while (ap != NULL);
1991 }
1992 append_name (&arches, &nr_arches, NULL);
1993 return arches;
1994 }
1995 else
1996 /* Just return all the architectures that BFD knows. Assume that
1997 the legacy architecture framework supports them. */
1998 return bfd_arch_list ();
1999}
2000
2001
104c1213 2002void
4b9b3959
AC
2003gdbarch_register (enum bfd_architecture bfd_architecture,
2004 gdbarch_init_ftype *init,
2005 gdbarch_dump_tdep_ftype *dump_tdep)
104c1213 2006{
4b9b3959 2007 struct gdbarch_registration **curr;
104c1213 2008 const struct bfd_arch_info *bfd_arch_info;
ec3d358c 2009 /* Check that BFD recognizes this architecture */
104c1213
JM
2010 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
2011 if (bfd_arch_info == NULL)
2012 {
8e65ff28
AC
2013 internal_error (__FILE__, __LINE__,
2014 "gdbarch: Attempt to register unknown architecture (%d)",
2015 bfd_architecture);
104c1213
JM
2016 }
2017 /* Check that we haven't seen this architecture before */
f44c642f 2018 for (curr = &gdbarch_registry;
104c1213
JM
2019 (*curr) != NULL;
2020 curr = &(*curr)->next)
2021 {
2022 if (bfd_architecture == (*curr)->bfd_architecture)
8e65ff28
AC
2023 internal_error (__FILE__, __LINE__,
2024 "gdbarch: Duplicate registraration of architecture (%s)",
2025 bfd_arch_info->printable_name);
104c1213
JM
2026 }
2027 /* log it */
2028 if (gdbarch_debug)
2029 fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
2030 bfd_arch_info->printable_name,
2031 (long) init);
2032 /* Append it */
4b9b3959 2033 (*curr) = XMALLOC (struct gdbarch_registration);
104c1213
JM
2034 (*curr)->bfd_architecture = bfd_architecture;
2035 (*curr)->init = init;
4b9b3959 2036 (*curr)->dump_tdep = dump_tdep;
104c1213
JM
2037 (*curr)->arches = NULL;
2038 (*curr)->next = NULL;
8e1a459b
C
2039 /* When non- multi-arch, install whatever target dump routine we've
2040 been provided - hopefully that routine has been written correctly
4b9b3959
AC
2041 and works regardless of multi-arch. */
2042 if (!GDB_MULTI_ARCH && dump_tdep != NULL
2043 && startup_gdbarch.dump_tdep == NULL)
2044 startup_gdbarch.dump_tdep = dump_tdep;
2045}
2046
2047void
2048register_gdbarch_init (enum bfd_architecture bfd_architecture,
2049 gdbarch_init_ftype *init)
2050{
2051 gdbarch_register (bfd_architecture, init, NULL);
104c1213 2052}
104c1213
JM
2053
2054
2055/* Look for an architecture using gdbarch_info. Base search on only
2056 BFD_ARCH_INFO and BYTE_ORDER. */
2057
2058struct gdbarch_list *
2059gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
2060 const struct gdbarch_info *info)
2061{
2062 for (; arches != NULL; arches = arches->next)
2063 {
2064 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
2065 continue;
2066 if (info->byte_order != arches->gdbarch->byte_order)
2067 continue;
2068 return arches;
2069 }
2070 return NULL;
2071}
2072
2073
2074/* Update the current architecture. Return ZERO if the update request
2075 failed. */
2076
2077int
16f33e29 2078gdbarch_update_p (struct gdbarch_info info)
104c1213
JM
2079{
2080 struct gdbarch *new_gdbarch;
4b9b3959 2081 struct gdbarch_registration *rego;
104c1213 2082
b732d07d
AC
2083 /* Fill in missing parts of the INFO struct using a number of
2084 sources: \`\`set ...''; INFOabfd supplied; existing target. */
2085
2086 /* \`\`(gdb) set architecture ...'' */
2087 if (info.bfd_arch_info == NULL
2088 && !TARGET_ARCHITECTURE_AUTO)
2089 info.bfd_arch_info = TARGET_ARCHITECTURE;
2090 if (info.bfd_arch_info == NULL
2091 && info.abfd != NULL
2092 && bfd_get_arch (info.abfd) != bfd_arch_unknown
2093 && bfd_get_arch (info.abfd) != bfd_arch_obscure)
2094 info.bfd_arch_info = bfd_get_arch_info (info.abfd);
104c1213 2095 if (info.bfd_arch_info == NULL)
b732d07d
AC
2096 info.bfd_arch_info = TARGET_ARCHITECTURE;
2097
2098 /* \`\`(gdb) set byte-order ...'' */
428721aa 2099 if (info.byte_order == BFD_ENDIAN_UNKNOWN
b732d07d
AC
2100 && !TARGET_BYTE_ORDER_AUTO)
2101 info.byte_order = TARGET_BYTE_ORDER;
2102 /* From the INFO struct. */
428721aa 2103 if (info.byte_order == BFD_ENDIAN_UNKNOWN
b732d07d 2104 && info.abfd != NULL)
d7449b42 2105 info.byte_order = (bfd_big_endian (info.abfd) ? BFD_ENDIAN_BIG
778eb05e 2106 : bfd_little_endian (info.abfd) ? BFD_ENDIAN_LITTLE
428721aa 2107 : BFD_ENDIAN_UNKNOWN);
b732d07d 2108 /* From the current target. */
428721aa 2109 if (info.byte_order == BFD_ENDIAN_UNKNOWN)
b732d07d 2110 info.byte_order = TARGET_BYTE_ORDER;
104c1213 2111
b732d07d
AC
2112 /* Must have found some sort of architecture. */
2113 gdb_assert (info.bfd_arch_info != NULL);
104c1213
JM
2114
2115 if (gdbarch_debug)
2116 {
2117 fprintf_unfiltered (gdb_stdlog,
b732d07d 2118 "gdbarch_update: info.bfd_arch_info %s\n",
104c1213
JM
2119 (info.bfd_arch_info != NULL
2120 ? info.bfd_arch_info->printable_name
2121 : "(null)"));
2122 fprintf_unfiltered (gdb_stdlog,
b732d07d 2123 "gdbarch_update: info.byte_order %d (%s)\n",
104c1213 2124 info.byte_order,
d7449b42 2125 (info.byte_order == BFD_ENDIAN_BIG ? "big"
778eb05e 2126 : info.byte_order == BFD_ENDIAN_LITTLE ? "little"
104c1213
JM
2127 : "default"));
2128 fprintf_unfiltered (gdb_stdlog,
b732d07d 2129 "gdbarch_update: info.abfd 0x%lx\n",
104c1213
JM
2130 (long) info.abfd);
2131 fprintf_unfiltered (gdb_stdlog,
b732d07d 2132 "gdbarch_update: info.tdep_info 0x%lx\n",
104c1213
JM
2133 (long) info.tdep_info);
2134 }
2135
b732d07d
AC
2136 /* Find the target that knows about this architecture. */
2137 for (rego = gdbarch_registry;
2138 rego != NULL;
2139 rego = rego->next)
2140 if (rego->bfd_architecture == info.bfd_arch_info->arch)
2141 break;
2142 if (rego == NULL)
2143 {
2144 if (gdbarch_debug)
2145 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: No matching architecture\\n");
2146 return 0;
2147 }
2148
104c1213
JM
2149 /* Ask the target for a replacement architecture. */
2150 new_gdbarch = rego->init (info, rego->arches);
2151
2152 /* Did the target like it? No. Reject the change. */
2153 if (new_gdbarch == NULL)
2154 {
2155 if (gdbarch_debug)
3d9a5942 2156 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Target rejected architecture\\n");
104c1213
JM
2157 return 0;
2158 }
2159
2160 /* Did the architecture change? No. Do nothing. */
2161 if (current_gdbarch == new_gdbarch)
2162 {
2163 if (gdbarch_debug)
3d9a5942 2164 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Architecture 0x%08lx (%s) unchanged\\n",
104c1213
JM
2165 (long) new_gdbarch,
2166 new_gdbarch->bfd_arch_info->printable_name);
2167 return 1;
2168 }
2169
2170 /* Swap all data belonging to the old target out */
2171 swapout_gdbarch_swap (current_gdbarch);
2172
0f79675b
AC
2173 /* Is this a pre-existing architecture? Yes. Move it to the front
2174 of the list of architectures (keeping the list sorted Most
2175 Recently Used) and then copy it in. */
2176 {
2177 struct gdbarch_list **list;
2178 for (list = &rego->arches;
2179 (*list) != NULL;
2180 list = &(*list)->next)
2181 {
2182 if ((*list)->gdbarch == new_gdbarch)
2183 {
2184 struct gdbarch_list *this;
2185 if (gdbarch_debug)
2186 fprintf_unfiltered (gdb_stdlog,
2187 "gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
2188 (long) new_gdbarch,
2189 new_gdbarch->bfd_arch_info->printable_name);
2190 /* Unlink this. */
2191 this = (*list);
2192 (*list) = this->next;
2193 /* Insert in the front. */
2194 this->next = rego->arches;
2195 rego->arches = this;
2196 /* Copy the new architecture in. */
2197 current_gdbarch = new_gdbarch;
2198 swapin_gdbarch_swap (new_gdbarch);
2199 architecture_changed_event ();
2200 return 1;
2201 }
2202 }
2203 }
2204
2205 /* Prepend this new architecture to the architecture list (keep the
2206 list sorted Most Recently Used). */
2207 {
2208 struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
2209 this->next = rego->arches;
2210 this->gdbarch = new_gdbarch;
2211 rego->arches = this;
2212 }
104c1213
JM
2213
2214 /* Switch to this new architecture. Dump it out. */
2215 current_gdbarch = new_gdbarch;
2216 if (gdbarch_debug)
2217 {
2218 fprintf_unfiltered (gdb_stdlog,
3d9a5942 2219 "gdbarch_update: New architecture 0x%08lx (%s) selected\\n",
104c1213
JM
2220 (long) new_gdbarch,
2221 new_gdbarch->bfd_arch_info->printable_name);
104c1213
JM
2222 }
2223
4b9b3959
AC
2224 /* Check that the newly installed architecture is valid. Plug in
2225 any post init values. */
2226 new_gdbarch->dump_tdep = rego->dump_tdep;
104c1213
JM
2227 verify_gdbarch (new_gdbarch);
2228
2229 /* Initialize the per-architecture memory (swap) areas.
2230 CURRENT_GDBARCH must be update before these modules are
2231 called. */
2232 init_gdbarch_swap (new_gdbarch);
2233
b3cc3077
JB
2234 /* Initialize the per-architecture data-pointer of all parties that
2235 registered an interest in this architecture. CURRENT_GDBARCH
2236 must be updated before these modules are called. */
2237 init_gdbarch_data (new_gdbarch);
67c2c32c
KS
2238 architecture_changed_event ();
2239
4b9b3959
AC
2240 if (gdbarch_debug)
2241 gdbarch_dump (current_gdbarch, gdb_stdlog);
2242
104c1213
JM
2243 return 1;
2244}
2245
2246
104c1213
JM
2247/* Disassembler */
2248
2249/* Pointer to the target-dependent disassembly function. */
2250int (*tm_print_insn) (bfd_vma, disassemble_info *);
2251disassemble_info tm_print_insn_info;
2252
2253
104c1213 2254extern void _initialize_gdbarch (void);
b4a20239 2255
104c1213 2256void
34620563 2257_initialize_gdbarch (void)
104c1213 2258{
59233f88
AC
2259 struct cmd_list_element *c;
2260
104c1213
JM
2261 INIT_DISASSEMBLE_INFO_NO_ARCH (tm_print_insn_info, gdb_stdout, (fprintf_ftype)fprintf_filtered);
2262 tm_print_insn_info.flavour = bfd_target_unknown_flavour;
2263 tm_print_insn_info.read_memory_func = dis_asm_read_memory;
2264 tm_print_insn_info.memory_error_func = dis_asm_memory_error;
2265 tm_print_insn_info.print_address_func = dis_asm_print_address;
2266
59233f88 2267 add_show_from_set (add_set_cmd ("arch",
104c1213
JM
2268 class_maintenance,
2269 var_zinteger,
2270 (char *)&gdbarch_debug,
3d9a5942 2271 "Set architecture debugging.\\n\\
59233f88
AC
2272When non-zero, architecture debugging is enabled.", &setdebuglist),
2273 &showdebuglist);
2274 c = add_set_cmd ("archdebug",
2275 class_maintenance,
2276 var_zinteger,
2277 (char *)&gdbarch_debug,
3d9a5942 2278 "Set architecture debugging.\\n\\
59233f88
AC
2279When non-zero, architecture debugging is enabled.", &setlist);
2280
2281 deprecate_cmd (c, "set debug arch");
2282 deprecate_cmd (add_show_from_set (c, &showlist), "show debug arch");
104c1213
JM
2283}
2284EOF
2285
2286# close things off
2287exec 1>&2
2288#../move-if-change new-gdbarch.c gdbarch.c
59233f88 2289compare_new gdbarch.c