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