Eliminate PARAMS.
[deliverable/binutils-gdb.git] / gdb / gdbarch.sh
CommitLineData
f0d4cc9e 1#!/usr/local/bin/bash -u
104c1213
JM
2
3# Architecture commands for GDB, the GNU debugger.
59233f88 4# Copyright 1998-2000 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
25 if ! test -r ${file}
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{
42 if eval read $read
43 then
0b8f9e4d 44 test "${staticdefault}" || staticdefault=0
f0d4cc9e
AC
45 # NOT YET: Breaks BELIEVE_PCC_PROMOTION and confuses non-
46 # multi-arch defaults.
47 # test "${predefault}" || predefault=0
c0e8c252
AC
48 test "${fmt}" || fmt="%ld"
49 test "${print}" || print="(long) ${macro}"
2ada493a
AC
50 case "${invalid_p}" in
51 0 ) valid_p=1 ;;
0b8f9e4d
AC
52 "" )
53 if [ "${predefault}" ]
54 then
f0d4cc9e 55 #invalid_p="gdbarch->${function} == ${predefault}"
0b8f9e4d
AC
56 valid_p="gdbarch->${function} != ${predefault}"
57 else
f0d4cc9e 58 #invalid_p="gdbarch->${function} == 0"
0b8f9e4d
AC
59 valid_p="gdbarch->${function} != 0"
60 fi
2ada493a
AC
61 ;;
62 * ) valid_p="!(${invalid_p})"
63 esac
f0d4cc9e
AC
64
65 # PREDEFAULT is a valid fallback definition of MEMBER when
66 # multi-arch is not enabled. This ensures that the default
67 # value, when multi-arch is the same as the default value when
68 # not multi-arch. POSTDEFAULT is always a valid definition of
69 # MEMBER as this again ensures consistency.
70 if [ "${postdefault}" != "" ]
71 then
72 fallbackdefault="${postdefault}"
73 elif [ "${predefault}" != "" ]
74 then
75 fallbackdefault="${predefault}"
76 else
77 fallbackdefault=""
78 fi
2ada493a 79 #NOT YET:
f0d4cc9e 80 # See gdbarch.log for basic verification of database
c0e8c252
AC
81 :
82 else
83 false
84 fi
85}
86
104c1213 87
f0d4cc9e
AC
88fallback_default_p ()
89{
90 [ "${postdefault}" != "" -a "${invalid_p}" != "0" ] \
91 || [ "${predefault}" != "" -a "${invalid_p}" = "0" ]
92}
93
94class_is_variable_p ()
95{
96 [ "${class}" = "v" -o "${class}" = "V" ]
97}
98
99class_is_function_p ()
100{
101 [ "${class}" = "f" -o "${class}" = "F" ]
102}
103
104class_is_predicate_p ()
105{
106 [ "${class}" = "F" -o "${class}" = "V" ]
107}
108
109class_is_info_p ()
110{
111 [ "${class}" = "i" ]
112}
113
114
cff3e48b
JM
115# dump out/verify the doco
116for field in ${read}
117do
118 case ${field} in
119
120 class ) : ;;
c4093a6a 121
c0e8c252
AC
122 # # -> line disable
123 # f -> function
124 # hiding a function
2ada493a
AC
125 # F -> function + predicate
126 # hiding a function + predicate to test function validity
c0e8c252
AC
127 # v -> variable
128 # hiding a variable
2ada493a
AC
129 # V -> variable + predicate
130 # hiding a variable + predicate to test variables validity
c0e8c252
AC
131 # i -> set from info
132 # hiding something from the ``struct info'' object
cff3e48b
JM
133
134 level ) : ;;
135
c0e8c252
AC
136 # See GDB_MULTI_ARCH description. Having GDB_MULTI_ARCH >=
137 # LEVEL is a predicate on checking that a given method is
138 # initialized (using INVALID_P).
cff3e48b
JM
139
140 macro ) : ;;
141
c0e8c252 142 # The name of the MACRO that this method is to be accessed by.
cff3e48b
JM
143
144 returntype ) : ;;
145
c0e8c252 146 # For functions, the return type; for variables, the data type
cff3e48b
JM
147
148 function ) : ;;
149
c0e8c252
AC
150 # For functions, the member function name; for variables, the
151 # variable name. Member function names are always prefixed with
152 # ``gdbarch_'' for name-space purity.
cff3e48b
JM
153
154 formal ) : ;;
155
c0e8c252
AC
156 # The formal argument list. It is assumed that the formal
157 # argument list includes the actual name of each list element.
158 # A function with no arguments shall have ``void'' as the
159 # formal argument list.
cff3e48b
JM
160
161 actual ) : ;;
162
c0e8c252
AC
163 # The list of actual arguments. The arguments specified shall
164 # match the FORMAL list given above. Functions with out
165 # arguments leave this blank.
cff3e48b
JM
166
167 attrib ) : ;;
168
c0e8c252
AC
169 # Any GCC attributes that should be attached to the function
170 # declaration. At present this field is unused.
cff3e48b 171
0b8f9e4d 172 staticdefault ) : ;;
c0e8c252
AC
173
174 # To help with the GDB startup a static gdbarch object is
0b8f9e4d
AC
175 # created. STATICDEFAULT is the value to insert into that
176 # static gdbarch object. Since this a static object only
177 # simple expressions can be used.
cff3e48b 178
0b8f9e4d 179 # If STATICDEFAULT is empty, zero is used.
c0e8c252 180
0b8f9e4d 181 predefault ) : ;;
cff3e48b 182
0b8f9e4d
AC
183 # A initial value to assign to MEMBER of the freshly
184 # malloc()ed gdbarch object. After the gdbarch object has
185 # been initialized using PREDEFAULT, it is passed to the
186 # target code for further updates.
cff3e48b 187
0b8f9e4d
AC
188 # If PREDEFAULT is empty, zero is used.
189
f0d4cc9e
AC
190 # When POSTDEFAULT is empty, a non-empty PREDEFAULT and a zero
191 # INVALID_P will be used as default values when when
192 # multi-arch is disabled. Specify a zero PREDEFAULT function
193 # to make that fallback call internal_error().
194
195 # Variable declarations can refer to ``gdbarch'' which will
196 # contain the current architecture. Care should be taken.
0b8f9e4d
AC
197
198 postdefault ) : ;;
199
200 # A value to assign to MEMBER of the new gdbarch object should
f0d4cc9e
AC
201 # the target code fail to change the PREDEFAULT value. Also
202 # use POSTDEFAULT as the fallback value for the non-
203 # multi-arch case.
0b8f9e4d
AC
204
205 # If POSTDEFAULT is empty, no post update is performed.
206
207 # If both INVALID_P and POSTDEFAULT are non-empty then
208 # INVALID_P will be used to determine if MEMBER should be
209 # changed to POSTDEFAULT.
210
f0d4cc9e
AC
211 # You cannot specify both a zero INVALID_P and a POSTDEFAULT.
212
213 # Variable declarations can refer to ``gdbarch'' which will
214 # contain the current architecture. Care should be taken.
cff3e48b 215
c4093a6a 216 invalid_p ) : ;;
cff3e48b 217
0b8f9e4d 218 # A predicate equation that validates MEMBER. Non-zero is
c0e8c252 219 # returned if the code creating the new architecture failed to
0b8f9e4d
AC
220 # initialize MEMBER or the initialized the member is invalid.
221 # If POSTDEFAULT is non-empty then MEMBER will be updated to
222 # that value. If POSTDEFAULT is empty then internal_error()
223 # is called.
224
225 # If INVALID_P is empty, a check that MEMBER is no longer
226 # equal to PREDEFAULT is used.
227
f0d4cc9e
AC
228 # The expression ``0'' disables the INVALID_P check making
229 # PREDEFAULT a legitimate value.
0b8f9e4d
AC
230
231 # See also PREDEFAULT and POSTDEFAULT.
cff3e48b
JM
232
233 fmt ) : ;;
234
c0e8c252
AC
235 # printf style format string that can be used to print out the
236 # MEMBER. Sometimes "%s" is useful. For functions, this is
237 # ignored and the function address is printed.
238
0b8f9e4d 239 # If FMT is empty, ``%ld'' is used.
cff3e48b
JM
240
241 print ) : ;;
242
c0e8c252
AC
243 # An optional equation that casts MEMBER to a value suitable
244 # for formatting by FMT.
245
0b8f9e4d 246 # If PRINT is empty, ``(long)'' is used.
cff3e48b
JM
247
248 print_p ) : ;;
249
c0e8c252
AC
250 # An optional indicator for any predicte to wrap around the
251 # print member code.
252
c0e8c252
AC
253 # exp -> Wrap print up in ``if (${print_p}) ...
254 # ``'' -> No predicate
cff3e48b 255
0b8f9e4d
AC
256 # If PRINT_P is empty, ``1'' is always used.
257
cff3e48b
JM
258 description ) : ;;
259
0b8f9e4d 260 # Currently unused.
cff3e48b
JM
261
262 *) exit 1;;
263 esac
264done
265
266IFS=:
267
104c1213
JM
268function_list ()
269{
cff3e48b 270 # See below (DOCO) for description of each field
104c1213 271 cat <<EOF |
0b8f9e4d 272i: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
273#
274i:2:TARGET_BYTE_ORDER:int:byte_order::::BIG_ENDIAN
275#
0b8f9e4d 276v:1:TARGET_BFD_VMA_BIT:int:bfd_vma_bit::::8 * sizeof (void*):TARGET_ARCHITECTURE->bits_per_address::0
104c1213
JM
277v:1:TARGET_PTR_BIT:int:ptr_bit::::8 * sizeof (void*):0
278#v:1:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):0
279v:1:TARGET_SHORT_BIT:int:short_bit::::8 * sizeof (short):0
280v:1:TARGET_INT_BIT:int:int_bit::::8 * sizeof (int):0
281v:1:TARGET_LONG_BIT:int:long_bit::::8 * sizeof (long):0
282v:1:TARGET_LONG_LONG_BIT:int:long_long_bit::::8 * sizeof (LONGEST):0
283v:1:TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):0
284v:1:TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):0
285v:1:TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):0
0b8f9e4d 286v:1:IEEE_FLOAT:int:ieee_float::::0:0::0:::
104c1213
JM
287#
288f:1:TARGET_READ_PC:CORE_ADDR:read_pc:int pid:pid::0:0
289f:1:TARGET_WRITE_PC:void:write_pc:CORE_ADDR val, int pid:val, pid::0:0
290f:1:TARGET_READ_FP:CORE_ADDR:read_fp:void:::0:0
291f:1:TARGET_WRITE_FP:void:write_fp:CORE_ADDR val:val::0:0
292f:1:TARGET_READ_SP:CORE_ADDR:read_sp:void:::0:0
293f:1:TARGET_WRITE_SP:void:write_sp:CORE_ADDR val:val::0:0
294#
295v:2:NUM_REGS:int:num_regs::::0:-1
296v:2:SP_REGNUM:int:sp_regnum::::0:-1
297v:2:FP_REGNUM:int:fp_regnum::::0:-1
298v:2:PC_REGNUM:int:pc_regnum::::0:-1
0b8f9e4d
AC
299v:2:FP0_REGNUM:int:fp0_regnum::::0:-1::0
300v:2:NPC_REGNUM:int:npc_regnum::::0:-1::0
301v:2:NNPC_REGNUM:int:nnpc_regnum::::0:-1::0
302f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name::0
104c1213
JM
303v:2:REGISTER_SIZE:int:register_size::::0:-1
304v:2:REGISTER_BYTES:int:register_bytes::::0:-1
305f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0
306f:2:REGISTER_RAW_SIZE:int:register_raw_size:int reg_nr:reg_nr::0:0
307v:2:MAX_REGISTER_RAW_SIZE:int:max_register_raw_size::::0:-1
308f:2:REGISTER_VIRTUAL_SIZE:int:register_virtual_size:int reg_nr:reg_nr::0:0
309v:2:MAX_REGISTER_VIRTUAL_SIZE:int:max_register_virtual_size::::0:-1
310f:2:REGISTER_VIRTUAL_TYPE:struct type *:register_virtual_type:int reg_nr:reg_nr::0:0
311#
312v:1:USE_GENERIC_DUMMY_FRAMES:int:use_generic_dummy_frames::::0:-1
313v:2:CALL_DUMMY_LOCATION:int:call_dummy_location::::0:0
0b8f9e4d
AC
314f:2:CALL_DUMMY_ADDRESS:CORE_ADDR:call_dummy_address:void:::0:0::gdbarch->call_dummy_location == AT_ENTRY_POINT && gdbarch->call_dummy_address == 0
315v:2:CALL_DUMMY_START_OFFSET:CORE_ADDR:call_dummy_start_offset::::0:-1:::0x%08lx
316v:2:CALL_DUMMY_BREAKPOINT_OFFSET:CORE_ADDR:call_dummy_breakpoint_offset::::0:-1:::0x%08lx
104c1213 317v:1:CALL_DUMMY_BREAKPOINT_OFFSET_P:int:call_dummy_breakpoint_offset_p::::0:-1
0b8f9e4d 318v:2:CALL_DUMMY_LENGTH:int:call_dummy_length::::0:-1:::::CALL_DUMMY_LOCATION == BEFORE_TEXT_END || CALL_DUMMY_LOCATION == AFTER_TEXT_END
104c1213
JM
319f:2: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
320v:1:CALL_DUMMY_P:int:call_dummy_p::::0:-1
0b8f9e4d
AC
321v:2:CALL_DUMMY_WORDS:LONGEST *:call_dummy_words::::0:legacy_call_dummy_words::0:0x%08lx
322v:2:SIZEOF_CALL_DUMMY_WORDS:int:sizeof_call_dummy_words::::0:legacy_sizeof_call_dummy_words::0:0x%08lx
323v:1:CALL_DUMMY_STACK_ADJUST_P:int:call_dummy_stack_adjust_p::::0:-1:::0x%08lx
324v: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
325f: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
104c1213 326#
f0d4cc9e
AC
327v:2:BELIEVE_PCC_PROMOTION:int:believe_pcc_promotion:::::::
328v:2:BELIEVE_PCC_PROMOTION_TYPE:int:believe_pcc_promotion_type:::::::
0b8f9e4d 329f: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
330f: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
331#
0b8f9e4d
AC
332f:1:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr:::generic_register_convertible_not::0
333f: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
334f: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
104c1213 335#
ac2e2ef7
AC
336f:2:POINTER_TO_ADDRESS:CORE_ADDR:pointer_to_address:struct type *type, void *buf:type, buf:::unsigned_pointer_to_address::0
337f:2:ADDRESS_TO_POINTER:void:address_to_pointer:struct type *type, void *buf, CORE_ADDR addr:type, buf, addr:::unsigned_address_to_pointer::0
4478b372 338#
0b8f9e4d 339f:2:RETURN_VALUE_ON_STACK:int:return_value_on_stack:struct type *type:type:::generic_return_value_on_stack_not::0
104c1213
JM
340f:2:EXTRACT_RETURN_VALUE:void:extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf::0:0
341f: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
AC
342f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-:::0
343f:1:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0
344f:2:POP_FRAME:void:pop_frame:void:-:::0
104c1213
JM
345#
346# I wish that these would just go away....
0b8f9e4d
AC
347f:2:D10V_MAKE_DADDR:CORE_ADDR:d10v_make_daddr:CORE_ADDR x:x:::0::0
348f:2:D10V_MAKE_IADDR:CORE_ADDR:d10v_make_iaddr:CORE_ADDR x:x:::0::0
349f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x:::0::0
350f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x:::0::0
351f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x:::0::0
352f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x:::0::0
104c1213 353#
c0e8c252
AC
354f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp:::0
355f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf:::0
356f:2:EXTRACT_STRUCT_VALUE_ADDRESS:CORE_ADDR:extract_struct_value_address:char *regbuf:regbuf:::0
357f:2:USE_STRUCT_CONVENTION:int:use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type:::0
104c1213
JM
358#
359f:2:FRAME_INIT_SAVED_REGS:void:frame_init_saved_regs:struct frame_info *frame:frame::0:0
c0e8c252 360f:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame:::0
104c1213
JM
361#
362f:2:SKIP_PROLOGUE:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0
0b8f9e4d 363f:2:PROLOGUE_FRAMELESS_P:int:prologue_frameless_p:CORE_ADDR ip:ip::0:generic_prologue_frameless_p::0
104c1213 364f:2:INNER_THAN:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0
0b8f9e4d
AC
365f:2:BREAKPOINT_FROM_PC:unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::legacy_breakpoint_from_pc::0
366f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint::0
367f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint::0
104c1213
JM
368v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1
369v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1
370#
0b8f9e4d 371f: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
372#
373v:2:FRAME_ARGS_SKIP:CORE_ADDR:frame_args_skip::::0:-1
0b8f9e4d 374f:2:FRAMELESS_FUNCTION_INVOCATION:int:frameless_function_invocation:struct frame_info *fi:fi:::generic_frameless_function_invocation_not::0
104c1213
JM
375f:2:FRAME_CHAIN:CORE_ADDR:frame_chain:struct frame_info *frame:frame::0:0
376f:1:FRAME_CHAIN_VALID:int:frame_chain_valid:CORE_ADDR chain, struct frame_info *thisframe:chain, thisframe::0:0
377f:2:FRAME_SAVED_PC:CORE_ADDR:frame_saved_pc:struct frame_info *fi:fi::0:0
378f:2:FRAME_ARGS_ADDRESS:CORE_ADDR:frame_args_address:struct frame_info *fi:fi::0:0
379f:2:FRAME_LOCALS_ADDRESS:CORE_ADDR:frame_locals_address:struct frame_info *fi:fi::0:0
380f:2:SAVED_PC_AFTER_CALL:CORE_ADDR:saved_pc_after_call:struct frame_info *frame:frame::0:0
381f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
382#
2ada493a 383F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0
d03e67c9 384F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0
d1e3cf49 385F:2:SAVE_DUMMY_FRAME_TOS:void:save_dummy_frame_tos:CORE_ADDR sp:sp::0:0
f0d4cc9e
AC
386#
387v:2:TARGET_FLOAT_FORMAT:const struct floatformat *:float_format::::::default_float_format (gdbarch)
388v:2:TARGET_DOUBLE_FORMAT:const struct floatformat *:double_format::::::default_double_format (gdbarch)
389v:2:TARGET_LONG_DOUBLE_FORMAT:const struct floatformat *:long_double_format::::::&floatformat_unknown
104c1213
JM
390EOF
391 grep -v '^#'
392}
393
0b8f9e4d
AC
394#
395# The .log file
396#
397exec > new-gdbarch.log
398function_list | while do_read # eval read $read
399do
400 cat <<EOF
104c1213
JM
401${class} ${macro}(${actual})
402 ${returntype} ${function} ($formal)${attrib}
403 level=${level}
0b8f9e4d
AC
404 staticdefault=${staticdefault}
405 predefault=${predefault}
f0d4cc9e
AC
406 postdefault=${postdefault}
407 fallbackdefault=${fallbackdefault}
c4093a6a 408 invalid_p=${invalid_p}
2ada493a 409 valid_p=${valid_p}
104c1213
JM
410 fmt=${fmt}
411 print=${print}
412 print_p=${print_p}
413 description=${description}
414EOF
f0d4cc9e 415 if class_is_predicate_p && fallback_default_p
0b8f9e4d
AC
416 then
417 echo "Error: predicate function can not have a non- multi-arch default" 1>&2
418 kill $$
419 exit 1
420 fi
f0d4cc9e
AC
421 if [ "${invalid_p}" = "0" -a "${postdefault}" != "" ]
422 then
423 echo "Error: postdefault is useless when invalid_p=0" 1>&2
424 kill $$
425 exit 1
426 fi
0b8f9e4d
AC
427done
428
429exec 1>&2
430compare_new gdbarch.log
431
104c1213
JM
432
433copyright ()
434{
435cat <<EOF
59233f88
AC
436/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
437
104c1213
JM
438/* Dynamic architecture support for GDB, the GNU debugger.
439 Copyright 1998-1999, Free Software Foundation, Inc.
440
441 This file is part of GDB.
442
443 This program is free software; you can redistribute it and/or modify
444 it under the terms of the GNU General Public License as published by
445 the Free Software Foundation; either version 2 of the License, or
446 (at your option) any later version.
447
448 This program is distributed in the hope that it will be useful,
449 but WITHOUT ANY WARRANTY; without even the implied warranty of
450 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
451 GNU General Public License for more details.
452
453 You should have received a copy of the GNU General Public License
454 along with this program; if not, write to the Free Software
455 Foundation, Inc., 59 Temple Place - Suite 330,
456 Boston, MA 02111-1307, USA. */
457
104c1213
JM
458/* This file was created with the aid of \`\`gdbarch.sh''.
459
460 The bourn shell script \`\`gdbarch.sh'' creates the files
461 \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
462 against the existing \`\`gdbarch.[hc]''. Any differences found
463 being reported.
464
465 If editing this file, please also run gdbarch.sh and merge any
466 changes into that script. Conversely, when makeing sweeping changes
467 to this file, modifying gdbarch.sh and using its output may prove
468 easier. */
469
470EOF
471}
472
473#
474# The .h file
475#
476
477exec > new-gdbarch.h
478copyright
479cat <<EOF
480#ifndef GDBARCH_H
481#define GDBARCH_H
482
483struct frame_info;
484struct value;
485
486
487#ifndef GDB_MULTI_ARCH
488#define GDB_MULTI_ARCH 0
489#endif
490
491extern struct gdbarch *current_gdbarch;
492
493
494/* See gdb/doc/gdbint.texi for a discussion of the GDB_MULTI_ARCH
495 macro */
496
497
498/* If any of the following are defined, the target wasn't correctly
499 converted. */
500
104c1213
JM
501#if GDB_MULTI_ARCH
502#if defined (EXTRA_FRAME_INFO)
503#error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
504#endif
505#endif
506
507#if GDB_MULTI_ARCH
508#if defined (FRAME_FIND_SAVED_REGS)
509#error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
510#endif
511#endif
512EOF
513
514# function typedef's
515echo ""
516echo ""
517echo "/* The following are pre-initialized by GDBARCH. */"
c0e8c252 518function_list | while do_read # eval read $read
104c1213 519do
2ada493a
AC
520 if class_is_info_p
521 then
104c1213
JM
522 echo ""
523 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
524 echo "/* set_gdbarch_${function}() - not applicable - pre-initialized. */"
525 echo "#if GDB_MULTI_ARCH"
526 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
527 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
528 echo "#endif"
529 echo "#endif"
2ada493a 530 fi
104c1213
JM
531done
532
533# function typedef's
534echo ""
535echo ""
536echo "/* The following are initialized by the target dependant code. */"
c0e8c252 537function_list | while do_read # eval read $read
104c1213 538do
2ada493a
AC
539 if class_is_predicate_p
540 then
541 echo ""
542 echo "#if defined (${macro})"
543 echo "/* Legacy for systems yet to multi-arch ${macro} */"
33489c5b 544# echo "#if (GDB_MULTI_ARCH <= 2) && defined (${macro})"
2ada493a
AC
545 echo "#define ${macro}_P() (1)"
546 echo "#endif"
547 echo ""
33489c5b
AC
548 echo "/* Default predicate for non- multi-arch targets. */"
549 echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro}_P)"
550 echo "#define ${macro}_P() (0)"
551 echo "#endif"
552 echo ""
2ada493a
AC
553 echo "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);"
554 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro}_P)"
555 echo "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))"
556 echo "#endif"
557 fi
558 if class_is_variable_p
559 then
f0d4cc9e 560 if fallback_default_p || class_is_predicate_p
33489c5b
AC
561 then
562 echo ""
563 echo "/* Default (value) for non- multi-arch platforms. */"
564 echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro})"
f0d4cc9e
AC
565 echo "#define ${macro} (${fallbackdefault})" \
566 | sed -e 's/\([^a-z_]\)\(gdbarch[^a-z_]\)/\1current_\2/g'
33489c5b
AC
567 echo "#endif"
568 fi
104c1213
JM
569 echo ""
570 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
571 echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});"
33489c5b 572 echo "#if GDB_MULTI_ARCH"
104c1213
JM
573 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
574 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
575 echo "#endif"
33489c5b 576 echo "#endif"
2ada493a
AC
577 fi
578 if class_is_function_p
579 then
f0d4cc9e 580 if fallback_default_p || class_is_predicate_p
33489c5b
AC
581 then
582 echo ""
583 echo "/* Default (function) for non- multi-arch platforms. */"
584 echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro})"
f0d4cc9e 585 if [ "${fallbackdefault}" = "0" ]
33489c5b
AC
586 then
587 echo "#define ${macro}(${actual}) (internal_error (\"${macro}\"), 0)"
588 else
f0d4cc9e
AC
589 # FIXME: Should be passing current_gdbarch through!
590 echo "#define ${macro}(${actual}) (${fallbackdefault} (${actual}))" \
591 | sed -e 's/\([^a-z_]\)\(gdbarch[^a-z_]\)/\1current_\2/g'
33489c5b
AC
592 fi
593 echo "#endif"
594 fi
104c1213
JM
595 echo ""
596 echo "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});"
597 if [ "${formal}" = "void" ]
598 then
599 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
600 else
601 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});"
602 fi
603 echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});"
33489c5b 604 echo "#if GDB_MULTI_ARCH"
104c1213
JM
605 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
606 if [ "${actual}" = "" ]
607 then
608 echo "#define ${macro}() (gdbarch_${function} (current_gdbarch))"
609 elif [ "${actual}" = "-" ]
610 then
611 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
612 else
613 echo "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))"
614 fi
615 echo "#endif"
33489c5b 616 echo "#endif"
2ada493a 617 fi
104c1213
JM
618done
619
620# close it off
621cat <<EOF
622
623extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
624
625
626/* Mechanism for co-ordinating the selection of a specific
627 architecture.
628
629 GDB targets (*-tdep.c) can register an interest in a specific
630 architecture. Other GDB components can register a need to maintain
631 per-architecture data.
632
633 The mechanisms below ensures that there is only a loose connection
634 between the set-architecture command and the various GDB
635 components. Each component can independantly register their need
636 to maintain architecture specific data with gdbarch.
637
638 Pragmatics:
639
640 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
641 didn't scale.
642
643 The more traditional mega-struct containing architecture specific
644 data for all the various GDB components was also considered. Since
645 GDB is built from a variable number of (fairly independant)
646 components it was determined that the global aproach was not
647 applicable. */
648
649
650/* Register a new architectural family with GDB.
651
652 Register support for the specified ARCHITECTURE with GDB. When
653 gdbarch determines that the specified architecture has been
654 selected, the corresponding INIT function is called.
655
656 --
657
658 The INIT function takes two parameters: INFO which contains the
659 information available to gdbarch about the (possibly new)
660 architecture; ARCHES which is a list of the previously created
661 \`\`struct gdbarch'' for this architecture.
662
663 The INIT function parameter INFO shall, as far as possible, be
664 pre-initialized with information obtained from INFO.ABFD or
665 previously selected architecture (if similar). INIT shall ensure
666 that the INFO.BYTE_ORDER is non-zero.
667
668 The INIT function shall return any of: NULL - indicating that it
669 doesn't reconize the selected architecture; an existing \`\`struct
670 gdbarch'' from the ARCHES list - indicating that the new
671 architecture is just a synonym for an earlier architecture (see
672 gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
673 - that describes the selected architecture (see
674 gdbarch_alloc()). */
675
676struct gdbarch_list
677{
678 struct gdbarch *gdbarch;
679 struct gdbarch_list *next;
680};
681
682struct gdbarch_info
683{
684 /* Use default: bfd_arch_unknown (ZERO). */
685 enum bfd_architecture bfd_architecture;
686
687 /* Use default: NULL (ZERO). */
688 const struct bfd_arch_info *bfd_arch_info;
689
690 /* Use default: 0 (ZERO). */
691 int byte_order;
692
693 /* Use default: NULL (ZERO). */
694 bfd *abfd;
695
696 /* Use default: NULL (ZERO). */
697 struct gdbarch_tdep_info *tdep_info;
698};
699
700typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
701
702extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
703
704
b4a20239
AC
705/* Return a freshly allocated, NULL terminated, array of the valid
706 architecture names. Since architectures are registered during the
707 _initialize phase this function only returns useful information
708 once initialization has been completed. */
709
710extern const char **gdbarch_printable_names (void);
711
712
104c1213
JM
713/* Helper function. Search the list of ARCHES for a GDBARCH that
714 matches the information provided by INFO. */
715
716extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
717
718
719/* Helper function. Create a preliminary \`\`struct gdbarch''. Perform
720 basic initialization using values obtained from the INFO andTDEP
721 parameters. set_gdbarch_*() functions are called to complete the
722 initialization of the object. */
723
724extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
725
726
058f20d5
JB
727/* Helper function. Free a partially-constructed \`\`struct gdbarch''. */
728extern void gdbarch_free (struct gdbarch *);
729
730
104c1213
JM
731/* Helper function. Force an update of the current architecture. Used
732 by legacy targets that have added their own target specific
733 architecture manipulation commands.
734
735 The INFO parameter shall be fully initialized (\`\`memset (&INFO,
736 sizeof (info), 0)'' set relevant fields) before gdbarch_update() is
737 called. gdbarch_update() shall initialize any \`\`default'' fields
738 using information obtained from the previous architecture or
739 INFO.ABFD (if specified) before calling the corresponding
740 architectures INIT function. */
741
742extern int gdbarch_update (struct gdbarch_info info);
743
744
745
746/* Register per-architecture data-pointer.
747
748 Reserve space for a per-architecture data-pointer. An identifier
749 for the reserved data-pointer is returned. That identifer should
750 be saved in a local static.
751
752 When a new architecture is selected, INIT() is called. When a
753 previous architecture is re-selected, the per-architecture
754 data-pointer for that previous architecture is restored (INIT() is
755 not called).
756
757 INIT() shall return the initial value for the per-architecture
758 data-pointer for the current architecture.
759
760 Multiple registrarants for any architecture are allowed (and
761 strongly encouraged). */
762
763typedef void *(gdbarch_data_ftype) (void);
764extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_ftype *init);
765
766/* Return the value of the per-architecture data-pointer for the
767 current architecture. */
768
769extern void *gdbarch_data (struct gdbarch_data*);
770
771
772
773/* Register per-architecture memory region.
774
775 Provide a memory-region swap mechanism. Per-architecture memory
776 region are created. These memory regions are swapped whenever the
777 architecture is changed. For a new architecture, the memory region
778 is initialized with zero (0) and the INIT function is called.
779
780 Memory regions are swapped / initialized in the order that they are
781 registered. NULL DATA and/or INIT values can be specified.
782
783 New code should use register_gdbarch_data(). */
784
785typedef void (gdbarch_swap_ftype) (void);
786extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
e514a9d6 787#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
104c1213
JM
788
789
790
791/* The target-system-dependant byte order is dynamic */
792
793/* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
794 is selectable at runtime. The user can use the \`\`set endian''
795 command to change it. TARGET_BYTE_ORDER_AUTO is nonzero when
796 target_byte_order should be auto-detected (from the program image
797 say). */
798
799#if GDB_MULTI_ARCH
800/* Multi-arch GDB is always bi-endian. */
801#define TARGET_BYTE_ORDER_SELECTABLE_P 1
802#endif
803
804#ifndef TARGET_BYTE_ORDER_SELECTABLE_P
805/* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
806 when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
807#ifdef TARGET_BYTE_ORDER_SELECTABLE
808#define TARGET_BYTE_ORDER_SELECTABLE_P 1
809#else
810#define TARGET_BYTE_ORDER_SELECTABLE_P 0
811#endif
812#endif
813
814extern int target_byte_order;
815#ifdef TARGET_BYTE_ORDER_SELECTABLE
816/* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
817 and expect defs.h to re-define TARGET_BYTE_ORDER. */
818#undef TARGET_BYTE_ORDER
819#endif
820#ifndef TARGET_BYTE_ORDER
821#define TARGET_BYTE_ORDER (target_byte_order + 0)
822#endif
823
824extern int target_byte_order_auto;
825#ifndef TARGET_BYTE_ORDER_AUTO
826#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
827#endif
828
829
830
831/* The target-system-dependant BFD architecture is dynamic */
832
833extern int target_architecture_auto;
834#ifndef TARGET_ARCHITECTURE_AUTO
835#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
836#endif
837
838extern const struct bfd_arch_info *target_architecture;
839#ifndef TARGET_ARCHITECTURE
840#define TARGET_ARCHITECTURE (target_architecture + 0)
841#endif
842
104c1213
JM
843
844/* The target-system-dependant disassembler is semi-dynamic */
845
846#include "dis-asm.h" /* Get defs for disassemble_info */
847
848extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
ff844c8d 849 unsigned int len, disassemble_info *info);
104c1213
JM
850
851extern void dis_asm_memory_error (int status, bfd_vma memaddr,
852 disassemble_info *info);
853
854extern void dis_asm_print_address (bfd_vma addr,
855 disassemble_info *info);
856
857extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
858extern disassemble_info tm_print_insn_info;
859#ifndef TARGET_PRINT_INSN
860#define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
861#endif
862#ifndef TARGET_PRINT_INSN_INFO
863#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
864#endif
865
866
867
868/* Explicit test for D10V architecture.
869 USE of these macro's is *STRONGLY* discouraged. */
870
871#define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
104c1213
JM
872
873
874/* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
875#ifndef EXTRACT_STRUCT_VALUE_ADDRESS
876#define EXTRACT_STRUCT_VALUE_ADDRESS_P (0)
877#define EXTRACT_STRUCT_VALUE_ADDRESS(X) (internal_error ("gdbarch: EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
878#else
879#ifndef EXTRACT_STRUCT_VALUE_ADDRESS_P
880#define EXTRACT_STRUCT_VALUE_ADDRESS_P (1)
881#endif
882#endif
883
884
104c1213
JM
885/* Set the dynamic target-system-dependant parameters (architecture,
886 byte-order, ...) using information found in the BFD */
887
888extern void set_gdbarch_from_file (bfd *);
889
890
e514a9d6
JM
891/* Initialize the current architecture to the "first" one we find on
892 our list. */
893
894extern void initialize_current_architecture (void);
895
104c1213
JM
896
897/* gdbarch trace variable */
898extern int gdbarch_debug;
899
900extern void gdbarch_dump (void);
901
902#endif
903EOF
904exec 1>&2
905#../move-if-change new-gdbarch.h gdbarch.h
59233f88 906compare_new gdbarch.h
104c1213
JM
907
908
909#
910# C file
911#
912
913exec > new-gdbarch.c
914copyright
915cat <<EOF
916
917#include "defs.h"
7355ddba 918#include "arch-utils.h"
104c1213
JM
919
920#if GDB_MULTI_ARCH
921#include "gdbcmd.h"
922#include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
923#else
924/* Just include everything in sight so that the every old definition
925 of macro is visible. */
926#include "gdb_string.h"
927#include <ctype.h>
928#include "symtab.h"
929#include "frame.h"
930#include "inferior.h"
931#include "breakpoint.h"
0596389c 932#include "gdb_wait.h"
104c1213
JM
933#include "gdbcore.h"
934#include "gdbcmd.h"
935#include "target.h"
936#include "gdbthread.h"
937#include "annotate.h"
938#include "symfile.h" /* for overlay functions */
939#endif
940#include "symcat.h"
941
f0d4cc9e 942#include "floatformat.h"
104c1213
JM
943
944/* Static function declarations */
945
946static void verify_gdbarch (struct gdbarch *gdbarch);
947static void init_gdbarch_data (struct gdbarch *);
948static void init_gdbarch_swap (struct gdbarch *);
949static void swapout_gdbarch_swap (struct gdbarch *);
950static void swapin_gdbarch_swap (struct gdbarch *);
951
952/* Convenience macro for allocting typesafe memory. */
953
954#ifndef XMALLOC
955#define XMALLOC(TYPE) (TYPE*) xmalloc (sizeof (TYPE))
956#endif
957
958
959/* Non-zero if we want to trace architecture code. */
960
961#ifndef GDBARCH_DEBUG
962#define GDBARCH_DEBUG 0
963#endif
964int gdbarch_debug = GDBARCH_DEBUG;
965
966EOF
967
968# gdbarch open the gdbarch object
969echo ""
970echo "/* Maintain the struct gdbarch object */"
971echo ""
972echo "struct gdbarch"
973echo "{"
974echo " /* basic architectural information */"
c0e8c252 975function_list | while do_read # eval read $read
104c1213 976do
2ada493a
AC
977 if class_is_info_p
978 then
979 echo " ${returntype} ${function};"
980 fi
104c1213
JM
981done
982echo ""
983echo " /* target specific vector. */"
984echo " struct gdbarch_tdep *tdep;"
985echo ""
986echo " /* per-architecture data-pointers */"
987echo " int nr_data;"
988echo " void **data;"
989echo ""
990echo " /* per-architecture swap-regions */"
991echo " struct gdbarch_swap *swap;"
992echo ""
993cat <<EOF
994 /* Multi-arch values.
995
996 When extending this structure you must:
997
998 Add the field below.
999
1000 Declare set/get functions and define the corresponding
1001 macro in gdbarch.h.
1002
1003 gdbarch_alloc(): If zero/NULL is not a suitable default,
1004 initialize the new field.
1005
1006 verify_gdbarch(): Confirm that the target updated the field
1007 correctly.
1008
1009 gdbarch_dump(): Add a fprintf_unfiltered call to so that the new
1010 field is dumped out
1011
c0e8c252 1012 \`\`startup_gdbarch()'': Append an initial value to the static
104c1213
JM
1013 variable (base values on the host's c-type system).
1014
1015 get_gdbarch(): Implement the set/get functions (probably using
1016 the macro's as shortcuts).
1017
1018 */
1019
1020EOF
c0e8c252 1021function_list | while do_read # eval read $read
104c1213 1022do
2ada493a
AC
1023 if class_is_variable_p
1024 then
1025 echo " ${returntype} ${function};"
1026 elif class_is_function_p
1027 then
1028 echo " gdbarch_${function}_ftype *${function}${attrib};"
1029 fi
104c1213
JM
1030done
1031echo "};"
1032
1033# A pre-initialized vector
1034echo ""
1035echo ""
1036cat <<EOF
1037/* The default architecture uses host values (for want of a better
1038 choice). */
1039EOF
1040echo ""
1041echo "extern const struct bfd_arch_info bfd_default_arch_struct;"
1042echo ""
c0e8c252 1043echo "struct gdbarch startup_gdbarch = {"
104c1213 1044echo " /* basic architecture information */"
c0e8c252 1045function_list | while do_read # eval read $read
104c1213 1046do
2ada493a
AC
1047 if class_is_info_p
1048 then
0b8f9e4d 1049 echo " ${staticdefault},"
2ada493a 1050 fi
104c1213
JM
1051done
1052cat <<EOF
1053 /* target specific vector */
1054 NULL,
1055 /*per-architecture data-pointers and swap regions */
1056 0, NULL, NULL,
1057 /* Multi-arch values */
1058EOF
c0e8c252 1059function_list | while do_read # eval read $read
104c1213 1060do
2ada493a
AC
1061 if class_is_function_p || class_is_variable_p
1062 then
0b8f9e4d 1063 echo " ${staticdefault},"
2ada493a 1064 fi
104c1213
JM
1065done
1066cat <<EOF
c0e8c252 1067 /* startup_gdbarch() */
104c1213 1068};
c0e8c252 1069struct gdbarch *current_gdbarch = &startup_gdbarch;
104c1213
JM
1070EOF
1071
1072# Create a new gdbarch struct
1073echo ""
1074echo ""
1075cat <<EOF
1076/* Create a new \`\`struct gdbarch'' based in information provided by
1077 \`\`struct gdbarch_info''. */
1078EOF
1079echo ""
1080cat <<EOF
1081struct gdbarch *
1082gdbarch_alloc (const struct gdbarch_info *info,
1083 struct gdbarch_tdep *tdep)
1084{
1085 struct gdbarch *gdbarch = XMALLOC (struct gdbarch);
1086 memset (gdbarch, 0, sizeof (*gdbarch));
1087
1088 gdbarch->tdep = tdep;
1089EOF
1090echo ""
c0e8c252 1091function_list | while do_read # eval read $read
104c1213 1092do
2ada493a
AC
1093 if class_is_info_p
1094 then
1095 echo " gdbarch->${function} = info->${function};"
1096 fi
104c1213
JM
1097done
1098echo ""
1099echo " /* Force the explicit initialization of these. */"
c0e8c252 1100function_list | while do_read # eval read $read
104c1213 1101do
2ada493a
AC
1102 if class_is_function_p || class_is_variable_p
1103 then
0b8f9e4d 1104 if [ "${predefault}" != "" -a "${predefault}" != "0" ]
104c1213 1105 then
0b8f9e4d 1106 echo " gdbarch->${function} = ${predefault};"
104c1213 1107 fi
2ada493a 1108 fi
104c1213
JM
1109done
1110cat <<EOF
1111 /* gdbarch_alloc() */
1112
1113 return gdbarch;
1114}
1115EOF
1116
058f20d5
JB
1117# Free a gdbarch struct.
1118echo ""
1119echo ""
1120cat <<EOF
1121/* Free a gdbarch struct. This should never happen in normal
1122 operation --- once you've created a gdbarch, you keep it around.
1123 However, if an architecture's init function encounters an error
1124 building the structure, it may need to clean up a partially
1125 constructed gdbarch. */
1126void
1127gdbarch_free (struct gdbarch *arch)
1128{
1129 /* At the moment, this is trivial. */
1130 free (arch);
1131}
1132EOF
1133
104c1213
JM
1134# verify a new architecture
1135echo ""
1136echo ""
1137echo "/* Ensure that all values in a GDBARCH are reasonable. */"
1138echo ""
1139cat <<EOF
1140static void
1141verify_gdbarch (struct gdbarch *gdbarch)
1142{
1143 /* Only perform sanity checks on a multi-arch target. */
1144 if (GDB_MULTI_ARCH <= 0)
1145 return;
1146 /* fundamental */
1147 if (gdbarch->byte_order == 0)
1148 internal_error ("verify_gdbarch: byte-order unset");
1149 if (gdbarch->bfd_arch_info == NULL)
1150 internal_error ("verify_gdbarch: bfd_arch_info unset");
1151 /* Check those that need to be defined for the given multi-arch level. */
1152EOF
c0e8c252 1153function_list | while do_read # eval read $read
104c1213 1154do
2ada493a
AC
1155 if class_is_function_p || class_is_variable_p
1156 then
c0e8c252
AC
1157 if [ "${invalid_p}" = "0" ]
1158 then
1159 echo " /* Skip verify of ${function}, invalid_p == 0 */"
2ada493a
AC
1160 elif class_is_predicate_p
1161 then
1162 echo " /* Skip verify of ${function}, has predicate */"
f0d4cc9e
AC
1163 # FIXME: See do_read for potential simplification
1164 elif [ "${invalid_p}" -a "${postdefault}" ]
1165 then
1166 echo " if (${invalid_p})"
1167 echo " gdbarch->${function} = ${postdefault};"
1168 elif [ "${predefault}" -a "${postdefault}" ]
1169 then
1170 echo " if (gdbarch->${function} == ${predefault})"
1171 echo " gdbarch->${function} = ${postdefault};"
1172 elif [ "${postdefault}" ]
1173 then
1174 echo " if (gdbarch->${function} == 0)"
1175 echo " gdbarch->${function} = ${postdefault};"
1176 elif [ "${invalid_p}" ]
104c1213 1177 then
c0e8c252
AC
1178 echo " if ((GDB_MULTI_ARCH >= ${level})"
1179 echo " && (${invalid_p}))"
1180 echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
0b8f9e4d 1181 elif [ "${predefault}" ]
104c1213 1182 then
c0e8c252 1183 echo " if ((GDB_MULTI_ARCH >= ${level})"
0b8f9e4d 1184 echo " && (gdbarch->${function} == ${predefault}))"
c0e8c252 1185 echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
104c1213 1186 fi
2ada493a 1187 fi
104c1213
JM
1188done
1189cat <<EOF
1190}
1191EOF
1192
1193# dump the structure
1194echo ""
1195echo ""
1196echo "/* Print out the details of the current architecture. */"
1197echo ""
1198cat <<EOF
1199void
1200gdbarch_dump (void)
1201{
1202EOF
c0e8c252 1203function_list | while do_read # eval read $read
104c1213 1204do
381323f4 1205 echo "#ifdef ${macro}"
2ada493a
AC
1206 if class_is_function_p
1207 then
104c1213
JM
1208 echo " fprintf_unfiltered (gdb_stdlog,"
1209 echo " \"gdbarch_update: ${macro} = 0x%08lx\\n\","
1210 echo " (long) current_gdbarch->${function}"
1211 echo " /*${macro} ()*/);"
2ada493a 1212 else
381323f4 1213 if [ "${print_p}" ]
104c1213
JM
1214 then
1215 echo " if (${print_p})"
1216 echo " fprintf_unfiltered (gdb_stdlog,"
1217 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1218 echo " ${print});"
1219 else
1220 echo " fprintf_unfiltered (gdb_stdlog,"
1221 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1222 echo " ${print});"
1223 fi
2ada493a 1224 fi
381323f4 1225 echo "#endif"
104c1213 1226done
381323f4
AC
1227cat <<EOF
1228 fprintf_unfiltered (gdb_stdlog,
1229 "gdbarch_update: GDB_MULTI_ARCH = %d\\n",
1230 GDB_MULTI_ARCH);
1231}
1232EOF
104c1213
JM
1233
1234
1235# GET/SET
1236echo ""
1237cat <<EOF
1238struct gdbarch_tdep *
1239gdbarch_tdep (struct gdbarch *gdbarch)
1240{
1241 if (gdbarch_debug >= 2)
104c1213
JM
1242 fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\n");
1243 return gdbarch->tdep;
1244}
1245EOF
1246echo ""
c0e8c252 1247function_list | while do_read # eval read $read
104c1213 1248do
2ada493a
AC
1249 if class_is_predicate_p
1250 then
1251 echo ""
1252 echo "int"
1253 echo "gdbarch_${function}_p (struct gdbarch *gdbarch)"
1254 echo "{"
1255 if [ "${valid_p}" ]
1256 then
1257 echo " return ${valid_p};"
1258 else
1259 echo "#error \"gdbarch_${function}_p: not defined\""
1260 fi
1261 echo "}"
1262 fi
1263 if class_is_function_p
1264 then
104c1213
JM
1265 echo ""
1266 echo "${returntype}"
1267 if [ "${formal}" = "void" ]
1268 then
1269 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1270 else
1271 echo "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})"
1272 fi
1273 echo "{"
1274 echo " if (gdbarch->${function} == 0)"
1275 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1276 echo " if (gdbarch_debug >= 2)"
104c1213
JM
1277 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1278 test "${actual}" = "-" && actual=""
1279 if [ "${returntype}" = "void" ]
1280 then
1281 echo " gdbarch->${function} (${actual});"
1282 else
1283 echo " return gdbarch->${function} (${actual});"
1284 fi
1285 echo "}"
1286 echo ""
1287 echo "void"
1288 echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
cff3e48b 1289 echo " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})"
104c1213
JM
1290 echo "{"
1291 echo " gdbarch->${function} = ${function};"
1292 echo "}"
2ada493a
AC
1293 elif class_is_variable_p
1294 then
104c1213
JM
1295 echo ""
1296 echo "${returntype}"
1297 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1298 echo "{"
c0e8c252
AC
1299 if [ "${invalid_p}" = "0" ]
1300 then
1301 echo " /* Skip verify of ${function}, invalid_p == 0 */"
1302 elif [ "${invalid_p}" ]
104c1213 1303 then
c4093a6a 1304 echo " if (${invalid_p})"
104c1213 1305 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
0b8f9e4d 1306 elif [ "${predefault}" ]
104c1213 1307 then
0b8f9e4d 1308 echo " if (gdbarch->${function} == ${predefault})"
104c1213
JM
1309 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1310 fi
1311 echo " if (gdbarch_debug >= 2)"
104c1213
JM
1312 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1313 echo " return gdbarch->${function};"
1314 echo "}"
1315 echo ""
1316 echo "void"
1317 echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
cff3e48b 1318 echo " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})"
104c1213
JM
1319 echo "{"
1320 echo " gdbarch->${function} = ${function};"
1321 echo "}"
2ada493a
AC
1322 elif class_is_info_p
1323 then
104c1213
JM
1324 echo ""
1325 echo "${returntype}"
1326 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1327 echo "{"
1328 echo " if (gdbarch_debug >= 2)"
104c1213
JM
1329 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1330 echo " return gdbarch->${function};"
1331 echo "}"
2ada493a 1332 fi
104c1213
JM
1333done
1334
1335# All the trailing guff
1336cat <<EOF
1337
1338
1339/* Keep a registrary of per-architecture data-pointers required by GDB
1340 modules. */
1341
1342struct gdbarch_data
1343{
1344 int index;
1345};
1346
1347struct gdbarch_data_registration
1348{
1349 gdbarch_data_ftype *init;
1350 struct gdbarch_data *data;
1351 struct gdbarch_data_registration *next;
1352};
1353
1354struct gdbarch_data_registrary
1355{
1356 int nr;
1357 struct gdbarch_data_registration *registrations;
1358};
1359
1360struct gdbarch_data_registrary gdbarch_data_registrary =
1361{
1362 0, NULL,
1363};
1364
1365struct gdbarch_data *
1366register_gdbarch_data (gdbarch_data_ftype *init)
1367{
1368 struct gdbarch_data_registration **curr;
1369 for (curr = &gdbarch_data_registrary.registrations;
1370 (*curr) != NULL;
1371 curr = &(*curr)->next);
1372 (*curr) = XMALLOC (struct gdbarch_data_registration);
1373 (*curr)->next = NULL;
1374 (*curr)->init = init;
1375 (*curr)->data = XMALLOC (struct gdbarch_data);
1376 (*curr)->data->index = gdbarch_data_registrary.nr++;
1377 return (*curr)->data;
1378}
1379
1380
1381/* Walk through all the registered users initializing each in turn. */
1382
1383static void
1384init_gdbarch_data (struct gdbarch *gdbarch)
1385{
1386 struct gdbarch_data_registration *rego;
1387 gdbarch->nr_data = gdbarch_data_registrary.nr + 1;
1388 gdbarch->data = xmalloc (sizeof (void*) * gdbarch->nr_data);
1389 for (rego = gdbarch_data_registrary.registrations;
1390 rego != NULL;
1391 rego = rego->next)
1392 {
1393 if (rego->data->index < gdbarch->nr_data)
1394 gdbarch->data[rego->data->index] = rego->init ();
1395 }
1396}
1397
1398
1399/* Return the current value of the specified per-architecture
1400 data-pointer. */
1401
1402void *
1403gdbarch_data (data)
1404 struct gdbarch_data *data;
1405{
1406 if (data->index >= current_gdbarch->nr_data)
1407 internal_error ("gdbarch_data: request for non-existant data.");
1408 return current_gdbarch->data[data->index];
1409}
1410
1411
1412
1413/* Keep a registrary of swaped data required by GDB modules. */
1414
1415struct gdbarch_swap
1416{
1417 void *swap;
1418 struct gdbarch_swap_registration *source;
1419 struct gdbarch_swap *next;
1420};
1421
1422struct gdbarch_swap_registration
1423{
1424 void *data;
1425 unsigned long sizeof_data;
1426 gdbarch_swap_ftype *init;
1427 struct gdbarch_swap_registration *next;
1428};
1429
1430struct gdbarch_swap_registrary
1431{
1432 int nr;
1433 struct gdbarch_swap_registration *registrations;
1434};
1435
1436struct gdbarch_swap_registrary gdbarch_swap_registrary =
1437{
1438 0, NULL,
1439};
1440
1441void
1442register_gdbarch_swap (void *data,
1443 unsigned long sizeof_data,
1444 gdbarch_swap_ftype *init)
1445{
1446 struct gdbarch_swap_registration **rego;
1447 for (rego = &gdbarch_swap_registrary.registrations;
1448 (*rego) != NULL;
1449 rego = &(*rego)->next);
1450 (*rego) = XMALLOC (struct gdbarch_swap_registration);
1451 (*rego)->next = NULL;
1452 (*rego)->init = init;
1453 (*rego)->data = data;
1454 (*rego)->sizeof_data = sizeof_data;
1455}
1456
1457
1458static void
1459init_gdbarch_swap (struct gdbarch *gdbarch)
1460{
1461 struct gdbarch_swap_registration *rego;
1462 struct gdbarch_swap **curr = &gdbarch->swap;
1463 for (rego = gdbarch_swap_registrary.registrations;
1464 rego != NULL;
1465 rego = rego->next)
1466 {
1467 if (rego->data != NULL)
1468 {
1469 (*curr) = XMALLOC (struct gdbarch_swap);
1470 (*curr)->source = rego;
1471 (*curr)->swap = xmalloc (rego->sizeof_data);
1472 (*curr)->next = NULL;
1473 memset (rego->data, 0, rego->sizeof_data);
1474 curr = &(*curr)->next;
1475 }
1476 if (rego->init != NULL)
1477 rego->init ();
1478 }
1479}
1480
1481static void
1482swapout_gdbarch_swap (struct gdbarch *gdbarch)
1483{
1484 struct gdbarch_swap *curr;
1485 for (curr = gdbarch->swap;
1486 curr != NULL;
1487 curr = curr->next)
1488 memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
1489}
1490
1491static void
1492swapin_gdbarch_swap (struct gdbarch *gdbarch)
1493{
1494 struct gdbarch_swap *curr;
1495 for (curr = gdbarch->swap;
1496 curr != NULL;
1497 curr = curr->next)
1498 memcpy (curr->source->data, curr->swap, curr->source->sizeof_data);
1499}
1500
1501
1502/* Keep a registrary of the architectures known by GDB. */
1503
1504struct gdbarch_init_registration
1505{
1506 enum bfd_architecture bfd_architecture;
1507 gdbarch_init_ftype *init;
1508 struct gdbarch_list *arches;
1509 struct gdbarch_init_registration *next;
1510};
1511
1512static struct gdbarch_init_registration *gdbarch_init_registrary = NULL;
1513
b4a20239
AC
1514static void
1515append_name (const char ***buf, int *nr, const char *name)
1516{
1517 *buf = xrealloc (*buf, sizeof (char**) * (*nr + 1));
1518 (*buf)[*nr] = name;
1519 *nr += 1;
1520}
1521
1522const char **
1523gdbarch_printable_names (void)
1524{
1525 if (GDB_MULTI_ARCH)
1526 {
1527 /* Accumulate a list of names based on the registed list of
1528 architectures. */
1529 enum bfd_architecture a;
1530 int nr_arches = 0;
1531 const char **arches = NULL;
1532 struct gdbarch_init_registration *rego;
1533 for (rego = gdbarch_init_registrary;
1534 rego != NULL;
1535 rego = rego->next)
1536 {
1537 const struct bfd_arch_info *ap;
1538 ap = bfd_lookup_arch (rego->bfd_architecture, 0);
1539 if (ap == NULL)
1540 internal_error ("gdbarch_architecture_names: multi-arch unknown");
1541 do
1542 {
1543 append_name (&arches, &nr_arches, ap->printable_name);
1544 ap = ap->next;
1545 }
1546 while (ap != NULL);
1547 }
1548 append_name (&arches, &nr_arches, NULL);
1549 return arches;
1550 }
1551 else
1552 /* Just return all the architectures that BFD knows. Assume that
1553 the legacy architecture framework supports them. */
1554 return bfd_arch_list ();
1555}
1556
1557
104c1213
JM
1558void
1559register_gdbarch_init (enum bfd_architecture bfd_architecture,
1560 gdbarch_init_ftype *init)
1561{
1562 struct gdbarch_init_registration **curr;
1563 const struct bfd_arch_info *bfd_arch_info;
1564 /* Check that BFD reconizes this architecture */
1565 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1566 if (bfd_arch_info == NULL)
1567 {
1568 internal_error ("gdbarch: Attempt to register unknown architecture (%d)", bfd_architecture);
1569 }
1570 /* Check that we haven't seen this architecture before */
1571 for (curr = &gdbarch_init_registrary;
1572 (*curr) != NULL;
1573 curr = &(*curr)->next)
1574 {
1575 if (bfd_architecture == (*curr)->bfd_architecture)
1576 internal_error ("gdbarch: Duplicate registraration of architecture (%s)",
1577 bfd_arch_info->printable_name);
1578 }
1579 /* log it */
1580 if (gdbarch_debug)
1581 fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
1582 bfd_arch_info->printable_name,
1583 (long) init);
1584 /* Append it */
1585 (*curr) = XMALLOC (struct gdbarch_init_registration);
1586 (*curr)->bfd_architecture = bfd_architecture;
1587 (*curr)->init = init;
1588 (*curr)->arches = NULL;
1589 (*curr)->next = NULL;
1590}
104c1213
JM
1591
1592
1593/* Look for an architecture using gdbarch_info. Base search on only
1594 BFD_ARCH_INFO and BYTE_ORDER. */
1595
1596struct gdbarch_list *
1597gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1598 const struct gdbarch_info *info)
1599{
1600 for (; arches != NULL; arches = arches->next)
1601 {
1602 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1603 continue;
1604 if (info->byte_order != arches->gdbarch->byte_order)
1605 continue;
1606 return arches;
1607 }
1608 return NULL;
1609}
1610
1611
1612/* Update the current architecture. Return ZERO if the update request
1613 failed. */
1614
1615int
1616gdbarch_update (struct gdbarch_info info)
1617{
1618 struct gdbarch *new_gdbarch;
1619 struct gdbarch_list **list;
1620 struct gdbarch_init_registration *rego;
1621
1622 /* Fill in any missing bits. Most important is the bfd_architecture
1623 which is used to select the target architecture. */
1624 if (info.bfd_architecture == bfd_arch_unknown)
1625 {
1626 if (info.bfd_arch_info != NULL)
1627 info.bfd_architecture = info.bfd_arch_info->arch;
1628 else if (info.abfd != NULL)
1629 info.bfd_architecture = bfd_get_arch (info.abfd);
1630 /* FIXME - should query BFD for its default architecture. */
1631 else
1632 info.bfd_architecture = current_gdbarch->bfd_arch_info->arch;
1633 }
1634 if (info.bfd_arch_info == NULL)
1635 {
1636 if (target_architecture_auto && info.abfd != NULL)
1637 info.bfd_arch_info = bfd_get_arch_info (info.abfd);
1638 else
1639 info.bfd_arch_info = current_gdbarch->bfd_arch_info;
1640 }
1641 if (info.byte_order == 0)
1642 {
1643 if (target_byte_order_auto && info.abfd != NULL)
1644 info.byte_order = (bfd_big_endian (info.abfd) ? BIG_ENDIAN
1645 : bfd_little_endian (info.abfd) ? LITTLE_ENDIAN
1646 : 0);
1647 else
1648 info.byte_order = current_gdbarch->byte_order;
1649 /* FIXME - should query BFD for its default byte-order. */
1650 }
1651 /* A default for abfd? */
1652
1653 /* Find the target that knows about this architecture. */
1654 for (rego = gdbarch_init_registrary;
1655 rego != NULL && rego->bfd_architecture != info.bfd_architecture;
1656 rego = rego->next);
1657 if (rego == NULL)
1658 {
1659 if (gdbarch_debug)
1660 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: No matching architecture\n");
1661 return 0;
1662 }
1663
1664 if (gdbarch_debug)
1665 {
1666 fprintf_unfiltered (gdb_stdlog,
1667 "gdbarch_update: info.bfd_architecture %d (%s)\n",
1668 info.bfd_architecture,
1669 bfd_lookup_arch (info.bfd_architecture, 0)->printable_name);
1670 fprintf_unfiltered (gdb_stdlog,
1671 "gdbarch_update: info.bfd_arch_info %s\n",
1672 (info.bfd_arch_info != NULL
1673 ? info.bfd_arch_info->printable_name
1674 : "(null)"));
1675 fprintf_unfiltered (gdb_stdlog,
1676 "gdbarch_update: info.byte_order %d (%s)\n",
1677 info.byte_order,
1678 (info.byte_order == BIG_ENDIAN ? "big"
1679 : info.byte_order == LITTLE_ENDIAN ? "little"
1680 : "default"));
1681 fprintf_unfiltered (gdb_stdlog,
1682 "gdbarch_update: info.abfd 0x%lx\n",
1683 (long) info.abfd);
1684 fprintf_unfiltered (gdb_stdlog,
1685 "gdbarch_update: info.tdep_info 0x%lx\n",
1686 (long) info.tdep_info);
1687 }
1688
1689 /* Ask the target for a replacement architecture. */
1690 new_gdbarch = rego->init (info, rego->arches);
1691
1692 /* Did the target like it? No. Reject the change. */
1693 if (new_gdbarch == NULL)
1694 {
1695 if (gdbarch_debug)
1696 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Target rejected architecture\n");
1697 return 0;
1698 }
1699
1700 /* Did the architecture change? No. Do nothing. */
1701 if (current_gdbarch == new_gdbarch)
1702 {
1703 if (gdbarch_debug)
1704 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Architecture 0x%08lx (%s) unchanged\n",
1705 (long) new_gdbarch,
1706 new_gdbarch->bfd_arch_info->printable_name);
1707 return 1;
1708 }
1709
1710 /* Swap all data belonging to the old target out */
1711 swapout_gdbarch_swap (current_gdbarch);
1712
1713 /* Is this a pre-existing architecture? Yes. Swap it in. */
1714 for (list = &rego->arches;
1715 (*list) != NULL;
1716 list = &(*list)->next)
1717 {
1718 if ((*list)->gdbarch == new_gdbarch)
1719 {
1720 if (gdbarch_debug)
1721 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
1722 (long) new_gdbarch,
1723 new_gdbarch->bfd_arch_info->printable_name);
1724 current_gdbarch = new_gdbarch;
1725 swapin_gdbarch_swap (new_gdbarch);
1726 return 1;
1727 }
1728 }
1729
1730 /* Append this new architecture to this targets list. */
1731 (*list) = XMALLOC (struct gdbarch_list);
1732 (*list)->next = NULL;
1733 (*list)->gdbarch = new_gdbarch;
1734
1735 /* Switch to this new architecture. Dump it out. */
1736 current_gdbarch = new_gdbarch;
1737 if (gdbarch_debug)
1738 {
1739 fprintf_unfiltered (gdb_stdlog,
1740 "gdbarch_update: New architecture 0x%08lx (%s) selected\n",
1741 (long) new_gdbarch,
1742 new_gdbarch->bfd_arch_info->printable_name);
1743 gdbarch_dump ();
1744 }
1745
1746 /* Check that the newly installed architecture is valid. */
1747 verify_gdbarch (new_gdbarch);
1748
1749 /* Initialize the per-architecture memory (swap) areas.
1750 CURRENT_GDBARCH must be update before these modules are
1751 called. */
1752 init_gdbarch_swap (new_gdbarch);
1753
1754 /* Initialize the per-architecture data-pointer of all parties that
1755 registered an interest in this architecture. CURRENT_GDBARCH
1756 must be updated before these modules are called. */
1757 init_gdbarch_data (new_gdbarch);
1758
1759 return 1;
1760}
1761
1762
1763
104c1213
JM
1764/* Disassembler */
1765
1766/* Pointer to the target-dependent disassembly function. */
1767int (*tm_print_insn) (bfd_vma, disassemble_info *);
1768disassemble_info tm_print_insn_info;
1769
1770
104c1213 1771extern void _initialize_gdbarch (void);
b4a20239 1772
104c1213
JM
1773void
1774_initialize_gdbarch ()
1775{
59233f88
AC
1776 struct cmd_list_element *c;
1777
104c1213
JM
1778 INIT_DISASSEMBLE_INFO_NO_ARCH (tm_print_insn_info, gdb_stdout, (fprintf_ftype)fprintf_filtered);
1779 tm_print_insn_info.flavour = bfd_target_unknown_flavour;
1780 tm_print_insn_info.read_memory_func = dis_asm_read_memory;
1781 tm_print_insn_info.memory_error_func = dis_asm_memory_error;
1782 tm_print_insn_info.print_address_func = dis_asm_print_address;
1783
59233f88 1784 add_show_from_set (add_set_cmd ("arch",
104c1213
JM
1785 class_maintenance,
1786 var_zinteger,
1787 (char *)&gdbarch_debug,
1788 "Set architecture debugging.\n\\
59233f88
AC
1789When non-zero, architecture debugging is enabled.", &setdebuglist),
1790 &showdebuglist);
1791 c = add_set_cmd ("archdebug",
1792 class_maintenance,
1793 var_zinteger,
1794 (char *)&gdbarch_debug,
1795 "Set architecture debugging.\n\\
1796When non-zero, architecture debugging is enabled.", &setlist);
1797
1798 deprecate_cmd (c, "set debug arch");
1799 deprecate_cmd (add_show_from_set (c, &showlist), "show debug arch");
104c1213
JM
1800}
1801EOF
1802
1803# close things off
1804exec 1>&2
1805#../move-if-change new-gdbarch.c gdbarch.c
59233f88 1806compare_new gdbarch.c
This page took 0.187519 seconds and 4 git commands to generate.