3 # Architecture commands for GDB, the GNU debugger.
4 # Copyright 1998-2000 Free Software Foundation, Inc.
6 # This file is part of GDB.
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.
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.
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.
27 echo "${file} missing? cp new-${file} ${file}" 1>&2
28 elif diff -c ${file} new-
${file}
30 echo "${file} unchanged" 1>&2
32 echo "${file} has changed? cp new-${file} ${file}" 1>&2
37 # DEFAULT is a valid fallback definition of a MACRO when
38 # multi-arch is not enabled.
39 default_is_fallback_p
()
41 [ "${default}" != "" -a "${invalid_p}" = "0" ]
44 # Format of the input table
45 read="class level macro returntype function formal actual attrib startup default invalid_p fmt print print_p description"
47 class_is_variable_p
()
49 [ "${class}" = "v" -o "${class}" = "V" ]
52 class_is_function_p
()
54 [ "${class}" = "f" -o "${class}" = "F" ]
57 class_is_predicate_p
()
59 [ "${class}" = "F" -o "${class}" = "V" ]
72 test "${startup}" || startup
=0
73 test "${fmt}" ||
fmt="%ld"
74 test "${print}" || print
="(long) ${macro}"
76 #Should set DEFAULT to zero and force the user to provide
78 #test "${default}" || default=0 - NO
79 case "${invalid_p}" in
81 "" ) test "${default}" && valid_p="gdbarch->${function} != ${default}"
83 #test "${default}" && invalid_p="gdbarch->${function} == ${default}"
85 * ) valid_p
="!(${invalid_p})"
95 # dump out/verify the doco
105 # F -> function + predicate
106 # hiding a function + predicate to test function validity
109 # V -> variable + predicate
110 # hiding a variable + predicate to test variables validity
112 # hiding something from the ``struct info'' object
116 # See GDB_MULTI_ARCH description. Having GDB_MULTI_ARCH >=
117 # LEVEL is a predicate on checking that a given method is
118 # initialized (using INVALID_P).
122 # The name of the MACRO that this method is to be accessed by.
126 # For functions, the return type; for variables, the data type
130 # For functions, the member function name; for variables, the
131 # variable name. Member function names are always prefixed with
132 # ``gdbarch_'' for name-space purity.
136 # The formal argument list. It is assumed that the formal
137 # argument list includes the actual name of each list element.
138 # A function with no arguments shall have ``void'' as the
139 # formal argument list.
143 # The list of actual arguments. The arguments specified shall
144 # match the FORMAL list given above. Functions with out
145 # arguments leave this blank.
149 # Any GCC attributes that should be attached to the function
150 # declaration. At present this field is unused.
154 # To help with the GDB startup a static gdbarch object is
155 # created. STARTUP is the value to insert into that static
158 # By default ``0'' is used.
162 # Any initial value to assign to a new gdbarch object after it
163 # as been malloc()ed. Zero is used by default.
165 # Specify a non-empty DEFAULT and a zero INVALID_P to create a
166 # fallback value or function for when multi-arch is disabled.
167 # Specify a zero DEFAULT function to make that fallback
172 # A predicate equation that validates MEMBER. Non-zero is
173 # returned if the code creating the new architecture failed to
174 # initialize the MEMBER or initialized the member to something
175 # invalid. By default, a check that the value is no longer
176 # equal to DEFAULT is performed. The equation ``0'' disables
177 # the invalid_p check.
181 # printf style format string that can be used to print out the
182 # MEMBER. Sometimes "%s" is useful. For functions, this is
183 # ignored and the function address is printed.
185 # By default ```%ld'' is used.
189 # An optional equation that casts MEMBER to a value suitable
190 # for formatting by FMT.
192 # By default ``(long)'' is used.
196 # An optional indicator for any predicte to wrap around the
199 # exp -> Wrap print up in ``if (${print_p}) ...
200 # ``'' -> No predicate
214 # See below (DOCO) for description of each field
216 i:2:TARGET_ARCHITECTURE:const struct bfd_arch_info *:bfd_arch_info::::&bfd_default_arch_struct:::%s:TARGET_ARCHITECTURE->printable_name:TARGET_ARCHITECTURE != NULL
218 i:2:TARGET_BYTE_ORDER:int:byte_order::::BIG_ENDIAN
220 v:1:TARGET_BFD_VMA_BIT:int:bfd_vma_bit::::8 * sizeof (void*):TARGET_ARCHITECTURE->bits_per_address:0
221 v:1:TARGET_PTR_BIT:int:ptr_bit::::8 * sizeof (void*):0
222 #v:1:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):0
223 v:1:TARGET_SHORT_BIT:int:short_bit::::8 * sizeof (short):0
224 v:1:TARGET_INT_BIT:int:int_bit::::8 * sizeof (int):0
225 v:1:TARGET_LONG_BIT:int:long_bit::::8 * sizeof (long):0
226 v:1:TARGET_LONG_LONG_BIT:int:long_long_bit::::8 * sizeof (LONGEST):0
227 v:1:TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):0
228 v:1:TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):0
229 v:1:TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):0
230 v:1:IEEE_FLOAT:int:ieee_float::::0:0:0:::
232 f:1:TARGET_READ_PC:CORE_ADDR:read_pc:int pid:pid::0:0
233 f:1:TARGET_WRITE_PC:void:write_pc:CORE_ADDR val, int pid:val, pid::0:0
234 f:1:TARGET_READ_FP:CORE_ADDR:read_fp:void:::0:0
235 f:1:TARGET_WRITE_FP:void:write_fp:CORE_ADDR val:val::0:0
236 f:1:TARGET_READ_SP:CORE_ADDR:read_sp:void:::0:0
237 f:1:TARGET_WRITE_SP:void:write_sp:CORE_ADDR val:val::0:0
239 v:2:NUM_REGS:int:num_regs::::0:-1
240 v:2:SP_REGNUM:int:sp_regnum::::0:-1
241 v:2:FP_REGNUM:int:fp_regnum::::0:-1
242 v:2:PC_REGNUM:int:pc_regnum::::0:-1
243 v:2:FP0_REGNUM:int:fp0_regnum::::0:-1:0
244 v:2:NPC_REGNUM:int:npc_regnum::::0:-1:0
245 v:2:NNPC_REGNUM:int:nnpc_regnum::::0:-1:0
246 f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name:0
247 v:2:REGISTER_SIZE:int:register_size::::0:-1
248 v:2:REGISTER_BYTES:int:register_bytes::::0:-1
249 f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0
250 f:2:REGISTER_RAW_SIZE:int:register_raw_size:int reg_nr:reg_nr::0:0
251 v:2:MAX_REGISTER_RAW_SIZE:int:max_register_raw_size::::0:-1
252 f:2:REGISTER_VIRTUAL_SIZE:int:register_virtual_size:int reg_nr:reg_nr::0:0
253 v:2:MAX_REGISTER_VIRTUAL_SIZE:int:max_register_virtual_size::::0:-1
254 f:2:REGISTER_VIRTUAL_TYPE:struct type *:register_virtual_type:int reg_nr:reg_nr::0:0
256 v:1:USE_GENERIC_DUMMY_FRAMES:int:use_generic_dummy_frames::::0:-1
257 v:2:CALL_DUMMY_LOCATION:int:call_dummy_location::::0:0
258 f:2:CALL_DUMMY_ADDRESS:CORE_ADDR:call_dummy_address:void:::0:0:gdbarch->call_dummy_location == AT_ENTRY_POINT && gdbarch->call_dummy_address == 0:
259 v:2:CALL_DUMMY_START_OFFSET:CORE_ADDR:call_dummy_start_offset::::0:-1::0x%08lx
260 v:2:CALL_DUMMY_BREAKPOINT_OFFSET:CORE_ADDR:call_dummy_breakpoint_offset::::0:-1::0x%08lx
261 v:1:CALL_DUMMY_BREAKPOINT_OFFSET_P:int:call_dummy_breakpoint_offset_p::::0:-1
262 v:2:CALL_DUMMY_LENGTH:int:call_dummy_length::::0:-1::::CALL_DUMMY_LOCATION == BEFORE_TEXT_END || CALL_DUMMY_LOCATION == AFTER_TEXT_END
263 f: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
264 v:1:CALL_DUMMY_P:int:call_dummy_p::::0:-1
265 v:2:CALL_DUMMY_WORDS:LONGEST *:call_dummy_words::::0:legacy_call_dummy_words:0:0x%08lx
266 v:2:SIZEOF_CALL_DUMMY_WORDS:int:sizeof_call_dummy_words::::0:legacy_sizeof_call_dummy_words:0:0x%08lx
267 v:1:CALL_DUMMY_STACK_ADJUST_P:int:call_dummy_stack_adjust_p::::0:-1::0x%08lx
268 v: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
269 f: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:0
271 v:2:BELIEVE_PCC_PROMOTION:int:believe_pcc_promotion::::0:::::
272 v:2:BELIEVE_PCC_PROMOTION_TYPE:int:believe_pcc_promotion_type::::0:::::
273 f:2:COERCE_FLOAT_TO_DOUBLE:int:coerce_float_to_double:struct type *formal, struct type *actual:formal, actual:::default_coerce_float_to_double:0
274 f: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
276 f:1:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr:::generic_register_convertible_not:0
277 f: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
278 f: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
280 f:2:POINTER_TO_ADDRESS:CORE_ADDR:pointer_to_address:struct type *type, char *buf:type, buf:::generic_pointer_to_address:0
281 f:2:ADDRESS_TO_POINTER:void:address_to_pointer:struct type *type, char *buf, CORE_ADDR addr:type, buf, addr:::generic_address_to_pointer:0
283 f:2:RETURN_VALUE_ON_STACK:int:return_value_on_stack:struct type *type:type:::generic_return_value_on_stack_not:0
284 f:2:EXTRACT_RETURN_VALUE:void:extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf::0:0
285 f: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
286 f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-:::0
287 f:1:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0
288 f:2:POP_FRAME:void:pop_frame:void:-:::0
290 # I wish that these would just go away....
291 f:2:D10V_MAKE_DADDR:CORE_ADDR:d10v_make_daddr:CORE_ADDR x:x:::0:0
292 f:2:D10V_MAKE_IADDR:CORE_ADDR:d10v_make_iaddr:CORE_ADDR x:x:::0:0
293 f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x:::0:0
294 f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x:::0:0
295 f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x:::0:0
296 f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x:::0:0
298 f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp:::0
299 f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf:::0
300 f:2:EXTRACT_STRUCT_VALUE_ADDRESS:CORE_ADDR:extract_struct_value_address:char *regbuf:regbuf:::0
301 f:2:USE_STRUCT_CONVENTION:int:use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type:::0
303 f:2:FRAME_INIT_SAVED_REGS:void:frame_init_saved_regs:struct frame_info *frame:frame::0:0
304 f:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame:::0
306 f:2:SKIP_PROLOGUE:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0
307 f:2:PROLOGUE_FRAMELESS_P:int:prologue_frameless_p:CORE_ADDR ip:ip::0:generic_prologue_frameless_p:0
308 f:2:INNER_THAN:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0
309 f:2:BREAKPOINT_FROM_PC:unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::legacy_breakpoint_from_pc:0
310 f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint:0
311 f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint:0
312 v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1
313 v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1
315 f: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
317 v:2:FRAME_ARGS_SKIP:CORE_ADDR:frame_args_skip::::0:-1
318 f:2:FRAMELESS_FUNCTION_INVOCATION:int:frameless_function_invocation:struct frame_info *fi:fi:::generic_frameless_function_invocation_not:0
319 f:2:FRAME_CHAIN:CORE_ADDR:frame_chain:struct frame_info *frame:frame::0:0
320 f:1:FRAME_CHAIN_VALID:int:frame_chain_valid:CORE_ADDR chain, struct frame_info *thisframe:chain, thisframe::0:0
321 f:2:FRAME_SAVED_PC:CORE_ADDR:frame_saved_pc:struct frame_info *fi:fi::0:0
322 f:2:FRAME_ARGS_ADDRESS:CORE_ADDR:frame_args_address:struct frame_info *fi:fi::0:0
323 f:2:FRAME_LOCALS_ADDRESS:CORE_ADDR:frame_locals_address:struct frame_info *fi:fi::0:0
324 f:2:SAVED_PC_AFTER_CALL:CORE_ADDR:saved_pc_after_call:struct frame_info *frame:frame::0:0
325 f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
327 F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0
328 F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0
329 F:2:SAVE_DUMMY_FRAME_TOS:void:save_dummy_frame_tos:CORE_ADDR sp:sp::0:0
339 function_list |
while do_read
# eval read $read
342 ${class} ${macro}(${actual})
343 ${returntype} ${function} ($formal)${attrib}
347 invalid_p=${invalid_p}
352 description=${description}
354 if class_is_predicate_p
&& default_is_fallback_p
356 echo "Error: predicate function can not have a non- multi-arch default" 1>&2
367 /* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
369 /* Dynamic architecture support for GDB, the GNU debugger.
370 Copyright 1998-1999, Free Software Foundation, Inc.
372 This file is part of GDB.
374 This program is free software; you can redistribute it and/or modify
375 it under the terms of the GNU General Public License as published by
376 the Free Software Foundation; either version 2 of the License, or
377 (at your option) any later version.
379 This program is distributed in the hope that it will be useful,
380 but WITHOUT ANY WARRANTY; without even the implied warranty of
381 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
382 GNU General Public License for more details.
384 You should have received a copy of the GNU General Public License
385 along with this program; if not, write to the Free Software
386 Foundation, Inc., 59 Temple Place - Suite 330,
387 Boston, MA 02111-1307, USA. */
389 /* This file was created with the aid of \`\`gdbarch.sh''.
391 The bourn shell script \`\`gdbarch.sh'' creates the files
392 \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
393 against the existing \`\`gdbarch.[hc]''. Any differences found
396 If editing this file, please also run gdbarch.sh and merge any
397 changes into that script. Conversely, when makeing sweeping changes
398 to this file, modifying gdbarch.sh and using its output may prove
418 #ifndef GDB_MULTI_ARCH
419 #define GDB_MULTI_ARCH 0
422 extern struct gdbarch *current_gdbarch;
425 /* See gdb/doc/gdbint.texi for a discussion of the GDB_MULTI_ARCH
429 /* If any of the following are defined, the target wasn't correctly
433 #if defined (EXTRA_FRAME_INFO)
434 #error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
439 #if defined (FRAME_FIND_SAVED_REGS)
440 #error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
448 echo "/* The following are pre-initialized by GDBARCH. */"
449 function_list |
while do_read
# eval read $read
454 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
455 echo "/* set_gdbarch_${function}() - not applicable - pre-initialized. */"
456 echo "#if GDB_MULTI_ARCH"
457 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
458 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
467 echo "/* The following are initialized by the target dependant code. */"
468 function_list |
while do_read
# eval read $read
470 if class_is_predicate_p
473 echo "#if defined (${macro})"
474 echo "/* Legacy for systems yet to multi-arch ${macro} */"
475 # echo "#if (GDB_MULTI_ARCH <= 2) && defined (${macro})"
476 echo "#define ${macro}_P() (1)"
479 echo "/* Default predicate for non- multi-arch targets. */"
480 echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro}_P)"
481 echo "#define ${macro}_P() (0)"
484 echo "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);"
485 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro}_P)"
486 echo "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))"
489 if class_is_variable_p
491 if default_is_fallback_p || class_is_predicate_p
494 echo "/* Default (value) for non- multi-arch platforms. */"
495 echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro})"
496 echo "#define ${macro} (${default})"
500 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
501 echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});"
502 echo "#if GDB_MULTI_ARCH"
503 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
504 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
508 if class_is_function_p
510 if default_is_fallback_p || class_is_predicate_p
513 echo "/* Default (function) for non- multi-arch platforms. */"
514 echo "#if (GDB_MULTI_ARCH == 0) && !defined (${macro})"
515 if [ "${default}" = "0" ]
517 echo "#define ${macro}(${actual}) (internal_error (\"${macro}\"), 0)"
519 echo "#define ${macro}(${actual}) (${default} (${actual}))"
524 echo "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});"
525 if [ "${formal}" = "void" ]
527 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
529 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});"
531 echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});"
532 echo "#if GDB_MULTI_ARCH"
533 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
534 if [ "${actual}" = "" ]
536 echo "#define ${macro}() (gdbarch_${function} (current_gdbarch))"
537 elif [ "${actual}" = "-" ]
539 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
541 echo "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))"
551 extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
554 /* Mechanism for co-ordinating the selection of a specific
557 GDB targets (*-tdep.c) can register an interest in a specific
558 architecture. Other GDB components can register a need to maintain
559 per-architecture data.
561 The mechanisms below ensures that there is only a loose connection
562 between the set-architecture command and the various GDB
563 components. Each component can independantly register their need
564 to maintain architecture specific data with gdbarch.
568 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
571 The more traditional mega-struct containing architecture specific
572 data for all the various GDB components was also considered. Since
573 GDB is built from a variable number of (fairly independant)
574 components it was determined that the global aproach was not
578 /* Register a new architectural family with GDB.
580 Register support for the specified ARCHITECTURE with GDB. When
581 gdbarch determines that the specified architecture has been
582 selected, the corresponding INIT function is called.
586 The INIT function takes two parameters: INFO which contains the
587 information available to gdbarch about the (possibly new)
588 architecture; ARCHES which is a list of the previously created
589 \`\`struct gdbarch'' for this architecture.
591 The INIT function parameter INFO shall, as far as possible, be
592 pre-initialized with information obtained from INFO.ABFD or
593 previously selected architecture (if similar). INIT shall ensure
594 that the INFO.BYTE_ORDER is non-zero.
596 The INIT function shall return any of: NULL - indicating that it
597 doesn't reconize the selected architecture; an existing \`\`struct
598 gdbarch'' from the ARCHES list - indicating that the new
599 architecture is just a synonym for an earlier architecture (see
600 gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
601 - that describes the selected architecture (see
606 struct gdbarch *gdbarch;
607 struct gdbarch_list *next;
612 /* Use default: bfd_arch_unknown (ZERO). */
613 enum bfd_architecture bfd_architecture;
615 /* Use default: NULL (ZERO). */
616 const struct bfd_arch_info *bfd_arch_info;
618 /* Use default: 0 (ZERO). */
621 /* Use default: NULL (ZERO). */
624 /* Use default: NULL (ZERO). */
625 struct gdbarch_tdep_info *tdep_info;
628 typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
630 extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
633 /* Helper function. Search the list of ARCHES for a GDBARCH that
634 matches the information provided by INFO. */
636 extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
639 /* Helper function. Create a preliminary \`\`struct gdbarch''. Perform
640 basic initialization using values obtained from the INFO andTDEP
641 parameters. set_gdbarch_*() functions are called to complete the
642 initialization of the object. */
644 extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
647 /* Helper function. Free a partially-constructed \`\`struct gdbarch''. */
648 extern void gdbarch_free (struct gdbarch *);
651 /* Helper function. Force an update of the current architecture. Used
652 by legacy targets that have added their own target specific
653 architecture manipulation commands.
655 The INFO parameter shall be fully initialized (\`\`memset (&INFO,
656 sizeof (info), 0)'' set relevant fields) before gdbarch_update() is
657 called. gdbarch_update() shall initialize any \`\`default'' fields
658 using information obtained from the previous architecture or
659 INFO.ABFD (if specified) before calling the corresponding
660 architectures INIT function. */
662 extern int gdbarch_update (struct gdbarch_info info);
666 /* Register per-architecture data-pointer.
668 Reserve space for a per-architecture data-pointer. An identifier
669 for the reserved data-pointer is returned. That identifer should
670 be saved in a local static.
672 When a new architecture is selected, INIT() is called. When a
673 previous architecture is re-selected, the per-architecture
674 data-pointer for that previous architecture is restored (INIT() is
677 INIT() shall return the initial value for the per-architecture
678 data-pointer for the current architecture.
680 Multiple registrarants for any architecture are allowed (and
681 strongly encouraged). */
683 typedef void *(gdbarch_data_ftype) (void);
684 extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_ftype *init);
686 /* Return the value of the per-architecture data-pointer for the
687 current architecture. */
689 extern void *gdbarch_data (struct gdbarch_data*);
693 /* Register per-architecture memory region.
695 Provide a memory-region swap mechanism. Per-architecture memory
696 region are created. These memory regions are swapped whenever the
697 architecture is changed. For a new architecture, the memory region
698 is initialized with zero (0) and the INIT function is called.
700 Memory regions are swapped / initialized in the order that they are
701 registered. NULL DATA and/or INIT values can be specified.
703 New code should use register_gdbarch_data(). */
705 typedef void (gdbarch_swap_ftype) (void);
706 extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
707 #define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
711 /* The target-system-dependant byte order is dynamic */
713 /* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
714 is selectable at runtime. The user can use the \`\`set endian''
715 command to change it. TARGET_BYTE_ORDER_AUTO is nonzero when
716 target_byte_order should be auto-detected (from the program image
720 /* Multi-arch GDB is always bi-endian. */
721 #define TARGET_BYTE_ORDER_SELECTABLE_P 1
724 #ifndef TARGET_BYTE_ORDER_SELECTABLE_P
725 /* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
726 when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
727 #ifdef TARGET_BYTE_ORDER_SELECTABLE
728 #define TARGET_BYTE_ORDER_SELECTABLE_P 1
730 #define TARGET_BYTE_ORDER_SELECTABLE_P 0
734 extern int target_byte_order;
735 #ifdef TARGET_BYTE_ORDER_SELECTABLE
736 /* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
737 and expect defs.h to re-define TARGET_BYTE_ORDER. */
738 #undef TARGET_BYTE_ORDER
740 #ifndef TARGET_BYTE_ORDER
741 #define TARGET_BYTE_ORDER (target_byte_order + 0)
744 extern int target_byte_order_auto;
745 #ifndef TARGET_BYTE_ORDER_AUTO
746 #define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
751 /* The target-system-dependant BFD architecture is dynamic */
753 extern int target_architecture_auto;
754 #ifndef TARGET_ARCHITECTURE_AUTO
755 #define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
758 extern const struct bfd_arch_info *target_architecture;
759 #ifndef TARGET_ARCHITECTURE
760 #define TARGET_ARCHITECTURE (target_architecture + 0)
763 /* Notify the target dependant backend of a change to the selected
764 architecture. A zero return status indicates that the target did
765 not like the change. */
767 extern int (*target_architecture_hook) (const struct bfd_arch_info *);
771 /* The target-system-dependant disassembler is semi-dynamic */
773 #include "dis-asm.h" /* Get defs for disassemble_info */
775 extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
776 unsigned int len, disassemble_info *info);
778 extern void dis_asm_memory_error (int status, bfd_vma memaddr,
779 disassemble_info *info);
781 extern void dis_asm_print_address (bfd_vma addr,
782 disassemble_info *info);
784 extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
785 extern disassemble_info tm_print_insn_info;
786 #ifndef TARGET_PRINT_INSN
787 #define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
789 #ifndef TARGET_PRINT_INSN_INFO
790 #define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
795 /* Explicit test for D10V architecture.
796 USE of these macro's is *STRONGLY* discouraged. */
798 #define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
801 /* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
802 #ifndef EXTRACT_STRUCT_VALUE_ADDRESS
803 #define EXTRACT_STRUCT_VALUE_ADDRESS_P (0)
804 #define EXTRACT_STRUCT_VALUE_ADDRESS(X) (internal_error ("gdbarch: EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
806 #ifndef EXTRACT_STRUCT_VALUE_ADDRESS_P
807 #define EXTRACT_STRUCT_VALUE_ADDRESS_P (1)
812 /* Set the dynamic target-system-dependant parameters (architecture,
813 byte-order, ...) using information found in the BFD */
815 extern void set_gdbarch_from_file (bfd *);
818 /* Explicitly set the dynamic target-system-dependant parameters based
819 on bfd_architecture and machine. */
821 extern void set_architecture_from_arch_mach (enum bfd_architecture, unsigned long);
824 /* Initialize the current architecture to the "first" one we find on
827 extern void initialize_current_architecture (void);
829 /* Helper function for targets that don't know how my arguments are
832 extern int frame_num_args_unknown (struct frame_info *fi);
835 /* gdbarch trace variable */
836 extern int gdbarch_debug;
838 extern void gdbarch_dump (void);
843 #../move-if-change new-gdbarch.h gdbarch.h
844 compare_new gdbarch.h
856 #include "arch-utils.h"
860 #include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
862 /* Just include everything in sight so that the every old definition
863 of macro is visible. */
864 #include "gdb_string.h"
868 #include "inferior.h"
869 #include "breakpoint.h"
870 #include "gdb_wait.h"
874 #include "gdbthread.h"
875 #include "annotate.h"
876 #include "symfile.h" /* for overlay functions */
881 /* Static function declarations */
883 static void verify_gdbarch (struct gdbarch *gdbarch);
884 static void init_gdbarch_data (struct gdbarch *);
885 static void init_gdbarch_swap (struct gdbarch *);
886 static void swapout_gdbarch_swap (struct gdbarch *);
887 static void swapin_gdbarch_swap (struct gdbarch *);
889 /* Convenience macro for allocting typesafe memory. */
892 #define XMALLOC(TYPE) (TYPE*) xmalloc (sizeof (TYPE))
896 /* Non-zero if we want to trace architecture code. */
898 #ifndef GDBARCH_DEBUG
899 #define GDBARCH_DEBUG 0
901 int gdbarch_debug = GDBARCH_DEBUG;
905 # gdbarch open the gdbarch object
907 echo "/* Maintain the struct gdbarch object */"
909 echo "struct gdbarch"
911 echo " /* basic architectural information */"
912 function_list |
while do_read
# eval read $read
916 echo " ${returntype} ${function};"
920 echo " /* target specific vector. */"
921 echo " struct gdbarch_tdep *tdep;"
923 echo " /* per-architecture data-pointers */"
927 echo " /* per-architecture swap-regions */"
928 echo " struct gdbarch_swap *swap;"
931 /* Multi-arch values.
933 When extending this structure you must:
937 Declare set/get functions and define the corresponding
940 gdbarch_alloc(): If zero/NULL is not a suitable default,
941 initialize the new field.
943 verify_gdbarch(): Confirm that the target updated the field
946 gdbarch_dump(): Add a fprintf_unfiltered call to so that the new
949 \`\`startup_gdbarch()'': Append an initial value to the static
950 variable (base values on the host's c-type system).
952 get_gdbarch(): Implement the set/get functions (probably using
953 the macro's as shortcuts).
958 function_list |
while do_read
# eval read $read
960 if class_is_variable_p
962 echo " ${returntype} ${function};"
963 elif class_is_function_p
965 echo " gdbarch_${function}_ftype *${function}${attrib};"
970 # A pre-initialized vector
974 /* The default architecture uses host values (for want of a better
978 echo "extern const struct bfd_arch_info bfd_default_arch_struct;"
980 echo "struct gdbarch startup_gdbarch = {"
981 echo " /* basic architecture information */"
982 function_list |
while do_read
# eval read $read
990 /* target specific vector */
992 /*per-architecture data-pointers and swap regions */
994 /* Multi-arch values */
996 function_list |
while do_read
# eval read $read
998 if class_is_function_p || class_is_variable_p
1004 /* startup_gdbarch() */
1006 struct gdbarch *current_gdbarch = &startup_gdbarch;
1009 # Create a new gdbarch struct
1013 /* Create a new \`\`struct gdbarch'' based in information provided by
1014 \`\`struct gdbarch_info''. */
1019 gdbarch_alloc (const struct gdbarch_info *info,
1020 struct gdbarch_tdep *tdep)
1022 struct gdbarch *gdbarch = XMALLOC (struct gdbarch);
1023 memset (gdbarch, 0, sizeof (*gdbarch));
1025 gdbarch->tdep = tdep;
1028 function_list |
while do_read
# eval read $read
1032 echo " gdbarch->${function} = info->${function};"
1036 echo " /* Force the explicit initialization of these. */"
1037 function_list |
while do_read
# eval read $read
1039 if class_is_function_p || class_is_variable_p
1041 if [ "${default}" != "" -a "${default}" != "0" ]
1043 echo " gdbarch->${function} = ${default};"
1048 /* gdbarch_alloc() */
1054 # Free a gdbarch struct.
1058 /* Free a gdbarch struct. This should never happen in normal
1059 operation --- once you've created a gdbarch, you keep it around.
1060 However, if an architecture's init function encounters an error
1061 building the structure, it may need to clean up a partially
1062 constructed gdbarch. */
1064 gdbarch_free (struct gdbarch *arch)
1066 /* At the moment, this is trivial. */
1071 # verify a new architecture
1074 echo "/* Ensure that all values in a GDBARCH are reasonable. */"
1078 verify_gdbarch (struct gdbarch *gdbarch)
1080 /* Only perform sanity checks on a multi-arch target. */
1081 if (GDB_MULTI_ARCH <= 0)
1084 if (gdbarch->byte_order == 0)
1085 internal_error ("verify_gdbarch: byte-order unset");
1086 if (gdbarch->bfd_arch_info == NULL)
1087 internal_error ("verify_gdbarch: bfd_arch_info unset");
1088 /* Check those that need to be defined for the given multi-arch level. */
1090 function_list |
while do_read
# eval read $read
1092 if class_is_function_p || class_is_variable_p
1094 if [ "${invalid_p}" = "0" ]
1096 echo " /* Skip verify of ${function}, invalid_p == 0 */"
1097 elif class_is_predicate_p
1099 echo " /* Skip verify of ${function}, has predicate */"
1100 elif [ "${invalid_p}" ]
1102 echo " if ((GDB_MULTI_ARCH >= ${level})"
1103 echo " && (${invalid_p}))"
1104 echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
1105 elif [ "${default}" ]
1107 echo " if ((GDB_MULTI_ARCH >= ${level})"
1108 echo " && (gdbarch->${function} == ${default}))"
1109 echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
1117 # dump the structure
1120 echo "/* Print out the details of the current architecture. */"
1127 function_list |
while do_read
# eval read $read
1129 echo "#ifdef ${macro}"
1130 if class_is_function_p
1132 echo " fprintf_unfiltered (gdb_stdlog,"
1133 echo " \"gdbarch_update: ${macro} = 0x%08lx\\n\","
1134 echo " (long) current_gdbarch->${function}"
1135 echo " /*${macro} ()*/);"
1139 echo " if (${print_p})"
1140 echo " fprintf_unfiltered (gdb_stdlog,"
1141 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1144 echo " fprintf_unfiltered (gdb_stdlog,"
1145 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1152 fprintf_unfiltered (gdb_stdlog,
1153 "gdbarch_update: GDB_MULTI_ARCH = %d\\n",
1162 struct gdbarch_tdep *
1163 gdbarch_tdep (struct gdbarch *gdbarch)
1165 if (gdbarch_debug >= 2)
1166 fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\n");
1167 return gdbarch->tdep;
1171 function_list |
while do_read
# eval read $read
1173 if class_is_predicate_p
1177 echo "gdbarch_${function}_p (struct gdbarch *gdbarch)"
1181 echo " return ${valid_p};"
1183 echo "#error \"gdbarch_${function}_p: not defined\""
1187 if class_is_function_p
1190 echo "${returntype}"
1191 if [ "${formal}" = "void" ]
1193 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1195 echo "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})"
1198 echo " if (gdbarch->${function} == 0)"
1199 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1200 echo " if (gdbarch_debug >= 2)"
1201 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1202 test "${actual}" = "-" && actual
=""
1203 if [ "${returntype}" = "void" ]
1205 echo " gdbarch->${function} (${actual});"
1207 echo " return gdbarch->${function} (${actual});"
1212 echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
1213 echo " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})"
1215 echo " gdbarch->${function} = ${function};"
1217 elif class_is_variable_p
1220 echo "${returntype}"
1221 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1223 if [ "${invalid_p}" = "0" ]
1225 echo " /* Skip verify of ${function}, invalid_p == 0 */"
1226 elif [ "${invalid_p}" ]
1228 echo " if (${invalid_p})"
1229 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1230 elif [ "${default}" ]
1232 echo " if (gdbarch->${function} == ${default})"
1233 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1235 echo " if (gdbarch_debug >= 2)"
1236 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1237 echo " return gdbarch->${function};"
1241 echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
1242 echo " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})"
1244 echo " gdbarch->${function} = ${function};"
1246 elif class_is_info_p
1249 echo "${returntype}"
1250 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1252 echo " if (gdbarch_debug >= 2)"
1253 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1254 echo " return gdbarch->${function};"
1259 # All the trailing guff
1263 /* Keep a registrary of per-architecture data-pointers required by GDB
1271 struct gdbarch_data_registration
1273 gdbarch_data_ftype *init;
1274 struct gdbarch_data *data;
1275 struct gdbarch_data_registration *next;
1278 struct gdbarch_data_registrary
1281 struct gdbarch_data_registration *registrations;
1284 struct gdbarch_data_registrary gdbarch_data_registrary =
1289 struct gdbarch_data *
1290 register_gdbarch_data (gdbarch_data_ftype *init)
1292 struct gdbarch_data_registration **curr;
1293 for (curr = &gdbarch_data_registrary.registrations;
1295 curr = &(*curr)->next);
1296 (*curr) = XMALLOC (struct gdbarch_data_registration);
1297 (*curr)->next = NULL;
1298 (*curr)->init = init;
1299 (*curr)->data = XMALLOC (struct gdbarch_data);
1300 (*curr)->data->index = gdbarch_data_registrary.nr++;
1301 return (*curr)->data;
1305 /* Walk through all the registered users initializing each in turn. */
1308 init_gdbarch_data (struct gdbarch *gdbarch)
1310 struct gdbarch_data_registration *rego;
1311 gdbarch->nr_data = gdbarch_data_registrary.nr + 1;
1312 gdbarch->data = xmalloc (sizeof (void*) * gdbarch->nr_data);
1313 for (rego = gdbarch_data_registrary.registrations;
1317 if (rego->data->index < gdbarch->nr_data)
1318 gdbarch->data[rego->data->index] = rego->init ();
1323 /* Return the current value of the specified per-architecture
1328 struct gdbarch_data *data;
1330 if (data->index >= current_gdbarch->nr_data)
1331 internal_error ("gdbarch_data: request for non-existant data.");
1332 return current_gdbarch->data[data->index];
1337 /* Keep a registrary of swaped data required by GDB modules. */
1342 struct gdbarch_swap_registration *source;
1343 struct gdbarch_swap *next;
1346 struct gdbarch_swap_registration
1349 unsigned long sizeof_data;
1350 gdbarch_swap_ftype *init;
1351 struct gdbarch_swap_registration *next;
1354 struct gdbarch_swap_registrary
1357 struct gdbarch_swap_registration *registrations;
1360 struct gdbarch_swap_registrary gdbarch_swap_registrary =
1366 register_gdbarch_swap (void *data,
1367 unsigned long sizeof_data,
1368 gdbarch_swap_ftype *init)
1370 struct gdbarch_swap_registration **rego;
1371 for (rego = &gdbarch_swap_registrary.registrations;
1373 rego = &(*rego)->next);
1374 (*rego) = XMALLOC (struct gdbarch_swap_registration);
1375 (*rego)->next = NULL;
1376 (*rego)->init = init;
1377 (*rego)->data = data;
1378 (*rego)->sizeof_data = sizeof_data;
1383 init_gdbarch_swap (struct gdbarch *gdbarch)
1385 struct gdbarch_swap_registration *rego;
1386 struct gdbarch_swap **curr = &gdbarch->swap;
1387 for (rego = gdbarch_swap_registrary.registrations;
1391 if (rego->data != NULL)
1393 (*curr) = XMALLOC (struct gdbarch_swap);
1394 (*curr)->source = rego;
1395 (*curr)->swap = xmalloc (rego->sizeof_data);
1396 (*curr)->next = NULL;
1397 memset (rego->data, 0, rego->sizeof_data);
1398 curr = &(*curr)->next;
1400 if (rego->init != NULL)
1406 swapout_gdbarch_swap (struct gdbarch *gdbarch)
1408 struct gdbarch_swap *curr;
1409 for (curr = gdbarch->swap;
1412 memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
1416 swapin_gdbarch_swap (struct gdbarch *gdbarch)
1418 struct gdbarch_swap *curr;
1419 for (curr = gdbarch->swap;
1422 memcpy (curr->source->data, curr->swap, curr->source->sizeof_data);
1426 /* Keep a registrary of the architectures known by GDB. */
1428 struct gdbarch_init_registration
1430 enum bfd_architecture bfd_architecture;
1431 gdbarch_init_ftype *init;
1432 struct gdbarch_list *arches;
1433 struct gdbarch_init_registration *next;
1436 static struct gdbarch_init_registration *gdbarch_init_registrary = NULL;
1439 register_gdbarch_init (enum bfd_architecture bfd_architecture,
1440 gdbarch_init_ftype *init)
1442 struct gdbarch_init_registration **curr;
1443 const struct bfd_arch_info *bfd_arch_info;
1444 /* Check that BFD reconizes this architecture */
1445 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1446 if (bfd_arch_info == NULL)
1448 internal_error ("gdbarch: Attempt to register unknown architecture (%d)", bfd_architecture);
1450 /* Check that we haven't seen this architecture before */
1451 for (curr = &gdbarch_init_registrary;
1453 curr = &(*curr)->next)
1455 if (bfd_architecture == (*curr)->bfd_architecture)
1456 internal_error ("gdbarch: Duplicate registraration of architecture (%s)",
1457 bfd_arch_info->printable_name);
1461 fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
1462 bfd_arch_info->printable_name,
1465 (*curr) = XMALLOC (struct gdbarch_init_registration);
1466 (*curr)->bfd_architecture = bfd_architecture;
1467 (*curr)->init = init;
1468 (*curr)->arches = NULL;
1469 (*curr)->next = NULL;
1474 /* Look for an architecture using gdbarch_info. Base search on only
1475 BFD_ARCH_INFO and BYTE_ORDER. */
1477 struct gdbarch_list *
1478 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1479 const struct gdbarch_info *info)
1481 for (; arches != NULL; arches = arches->next)
1483 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1485 if (info->byte_order != arches->gdbarch->byte_order)
1493 /* Update the current architecture. Return ZERO if the update request
1497 gdbarch_update (struct gdbarch_info info)
1499 struct gdbarch *new_gdbarch;
1500 struct gdbarch_list **list;
1501 struct gdbarch_init_registration *rego;
1503 /* Fill in any missing bits. Most important is the bfd_architecture
1504 which is used to select the target architecture. */
1505 if (info.bfd_architecture == bfd_arch_unknown)
1507 if (info.bfd_arch_info != NULL)
1508 info.bfd_architecture = info.bfd_arch_info->arch;
1509 else if (info.abfd != NULL)
1510 info.bfd_architecture = bfd_get_arch (info.abfd);
1511 /* FIXME - should query BFD for its default architecture. */
1513 info.bfd_architecture = current_gdbarch->bfd_arch_info->arch;
1515 if (info.bfd_arch_info == NULL)
1517 if (target_architecture_auto && info.abfd != NULL)
1518 info.bfd_arch_info = bfd_get_arch_info (info.abfd);
1520 info.bfd_arch_info = current_gdbarch->bfd_arch_info;
1522 if (info.byte_order == 0)
1524 if (target_byte_order_auto && info.abfd != NULL)
1525 info.byte_order = (bfd_big_endian (info.abfd) ? BIG_ENDIAN
1526 : bfd_little_endian (info.abfd) ? LITTLE_ENDIAN
1529 info.byte_order = current_gdbarch->byte_order;
1530 /* FIXME - should query BFD for its default byte-order. */
1532 /* A default for abfd? */
1534 /* Find the target that knows about this architecture. */
1535 for (rego = gdbarch_init_registrary;
1536 rego != NULL && rego->bfd_architecture != info.bfd_architecture;
1541 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: No matching architecture\n");
1547 fprintf_unfiltered (gdb_stdlog,
1548 "gdbarch_update: info.bfd_architecture %d (%s)\n",
1549 info.bfd_architecture,
1550 bfd_lookup_arch (info.bfd_architecture, 0)->printable_name);
1551 fprintf_unfiltered (gdb_stdlog,
1552 "gdbarch_update: info.bfd_arch_info %s\n",
1553 (info.bfd_arch_info != NULL
1554 ? info.bfd_arch_info->printable_name
1556 fprintf_unfiltered (gdb_stdlog,
1557 "gdbarch_update: info.byte_order %d (%s)\n",
1559 (info.byte_order == BIG_ENDIAN ? "big"
1560 : info.byte_order == LITTLE_ENDIAN ? "little"
1562 fprintf_unfiltered (gdb_stdlog,
1563 "gdbarch_update: info.abfd 0x%lx\n",
1565 fprintf_unfiltered (gdb_stdlog,
1566 "gdbarch_update: info.tdep_info 0x%lx\n",
1567 (long) info.tdep_info);
1570 /* Ask the target for a replacement architecture. */
1571 new_gdbarch = rego->init (info, rego->arches);
1573 /* Did the target like it? No. Reject the change. */
1574 if (new_gdbarch == NULL)
1577 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Target rejected architecture\n");
1581 /* Did the architecture change? No. Do nothing. */
1582 if (current_gdbarch == new_gdbarch)
1585 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Architecture 0x%08lx (%s) unchanged\n",
1587 new_gdbarch->bfd_arch_info->printable_name);
1591 /* Swap all data belonging to the old target out */
1592 swapout_gdbarch_swap (current_gdbarch);
1594 /* Is this a pre-existing architecture? Yes. Swap it in. */
1595 for (list = ®o->arches;
1597 list = &(*list)->next)
1599 if ((*list)->gdbarch == new_gdbarch)
1602 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
1604 new_gdbarch->bfd_arch_info->printable_name);
1605 current_gdbarch = new_gdbarch;
1606 swapin_gdbarch_swap (new_gdbarch);
1611 /* Append this new architecture to this targets list. */
1612 (*list) = XMALLOC (struct gdbarch_list);
1613 (*list)->next = NULL;
1614 (*list)->gdbarch = new_gdbarch;
1616 /* Switch to this new architecture. Dump it out. */
1617 current_gdbarch = new_gdbarch;
1620 fprintf_unfiltered (gdb_stdlog,
1621 "gdbarch_update: New architecture 0x%08lx (%s) selected\n",
1623 new_gdbarch->bfd_arch_info->printable_name);
1627 /* Check that the newly installed architecture is valid. */
1628 verify_gdbarch (new_gdbarch);
1630 /* Initialize the per-architecture memory (swap) areas.
1631 CURRENT_GDBARCH must be update before these modules are
1633 init_gdbarch_swap (new_gdbarch);
1635 /* Initialize the per-architecture data-pointer of all parties that
1636 registered an interest in this architecture. CURRENT_GDBARCH
1637 must be updated before these modules are called. */
1638 init_gdbarch_data (new_gdbarch);
1645 /* Functions to manipulate the endianness of the target. */
1647 #ifdef TARGET_BYTE_ORDER_SELECTABLE
1648 /* compat - Catch old targets that expect a selectable byte-order to
1649 default to BIG_ENDIAN */
1650 #ifndef TARGET_BYTE_ORDER_DEFAULT
1651 #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN
1654 #if !TARGET_BYTE_ORDER_SELECTABLE_P
1655 #ifndef TARGET_BYTE_ORDER_DEFAULT
1656 /* compat - Catch old non byte-order selectable targets that do not
1657 define TARGET_BYTE_ORDER_DEFAULT and instead expect
1658 TARGET_BYTE_ORDER to be used as the default. For targets that
1659 defined neither TARGET_BYTE_ORDER nor TARGET_BYTE_ORDER_DEFAULT the
1660 below will get a strange compiler warning. */
1661 #define TARGET_BYTE_ORDER_DEFAULT TARGET_BYTE_ORDER
1664 #ifndef TARGET_BYTE_ORDER_DEFAULT
1665 #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN /* arbitrary */
1667 int target_byte_order = TARGET_BYTE_ORDER_DEFAULT;
1668 int target_byte_order_auto = 1;
1670 /* Chain containing the \"set endian\" commands. */
1671 static struct cmd_list_element *endianlist = NULL;
1673 /* Called by \`\`show endian''. */
1675 show_endian (char *args, int from_tty)
1678 (TARGET_BYTE_ORDER_AUTO
1679 ? "The target endianness is set automatically (currently %s endian)\n"
1680 : "The target is assumed to be %s endian\n");
1681 printf_unfiltered (msg, (TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little"));
1684 /* Called if the user enters \`\`set endian'' without an argument. */
1686 set_endian (char *args, int from_tty)
1688 printf_unfiltered ("\"set endian\" must be followed by \"auto\", \"big\" or \"little\".\n");
1689 show_endian (args, from_tty);
1692 /* Called by \`\`set endian big''. */
1694 set_endian_big (char *args, int from_tty)
1696 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1698 target_byte_order = BIG_ENDIAN;
1699 target_byte_order_auto = 0;
1702 struct gdbarch_info info;
1703 memset (&info, 0, sizeof info);
1704 info.byte_order = BIG_ENDIAN;
1705 gdbarch_update (info);
1710 printf_unfiltered ("Byte order is not selectable.");
1711 show_endian (args, from_tty);
1715 /* Called by \`\`set endian little''. */
1717 set_endian_little (char *args, int from_tty)
1719 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1721 target_byte_order = LITTLE_ENDIAN;
1722 target_byte_order_auto = 0;
1725 struct gdbarch_info info;
1726 memset (&info, 0, sizeof info);
1727 info.byte_order = LITTLE_ENDIAN;
1728 gdbarch_update (info);
1733 printf_unfiltered ("Byte order is not selectable.");
1734 show_endian (args, from_tty);
1738 /* Called by \`\`set endian auto''. */
1740 set_endian_auto (char *args, int from_tty)
1742 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1744 target_byte_order_auto = 1;
1748 printf_unfiltered ("Byte order is not selectable.");
1749 show_endian (args, from_tty);
1753 /* Set the endianness from a BFD. */
1755 set_endian_from_file (bfd *abfd)
1757 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1761 if (bfd_big_endian (abfd))
1764 want = LITTLE_ENDIAN;
1765 if (TARGET_BYTE_ORDER_AUTO)
1766 target_byte_order = want;
1767 else if (TARGET_BYTE_ORDER != want)
1768 warning ("%s endian file does not match %s endian target.",
1769 want == BIG_ENDIAN ? "big" : "little",
1770 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
1774 if (bfd_big_endian (abfd)
1775 ? TARGET_BYTE_ORDER != BIG_ENDIAN
1776 : TARGET_BYTE_ORDER == BIG_ENDIAN)
1777 warning ("%s endian file does not match %s endian target.",
1778 bfd_big_endian (abfd) ? "big" : "little",
1779 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
1785 /* Functions to manipulate the architecture of the target */
1787 enum set_arch { set_arch_auto, set_arch_manual };
1789 int target_architecture_auto = 1;
1790 extern const struct bfd_arch_info bfd_default_arch_struct;
1791 const struct bfd_arch_info *target_architecture = &bfd_default_arch_struct;
1792 int (*target_architecture_hook) (const struct bfd_arch_info *ap);
1794 static void show_endian (char *, int);
1795 static void set_endian (char *, int);
1796 static void set_endian_big (char *, int);
1797 static void set_endian_little (char *, int);
1798 static void set_endian_auto (char *, int);
1799 static void set_endian_from_file (bfd *);
1800 static int arch_ok (const struct bfd_arch_info *arch);
1801 static void set_arch (const struct bfd_arch_info *arch, enum set_arch type);
1802 static void show_architecture (char *, int);
1803 static void set_architecture (char *, int);
1804 static void info_architecture (char *, int);
1805 static void set_architecture_from_file (bfd *);
1807 /* Do the real work of changing the current architecture */
1810 arch_ok (const struct bfd_arch_info *arch)
1812 /* Should be performing the more basic check that the binary is
1813 compatible with GDB. */
1814 /* Check with the target that the architecture is valid. */
1815 return (target_architecture_hook == NULL
1816 || target_architecture_hook (arch));
1820 set_arch (const struct bfd_arch_info *arch,
1826 if (!arch_ok (arch))
1827 warning ("Target may not support %s architecture",
1828 arch->printable_name);
1829 target_architecture = arch;
1831 case set_arch_manual:
1832 if (!arch_ok (arch))
1834 printf_unfiltered ("Target does not support \`%s' architecture.\n",
1835 arch->printable_name);
1839 target_architecture_auto = 0;
1840 target_architecture = arch;
1848 /* Called if the user enters \`\`show architecture'' without an argument. */
1850 show_architecture (char *args, int from_tty)
1853 arch = TARGET_ARCHITECTURE->printable_name;
1854 if (target_architecture_auto)
1855 printf_filtered ("The target architecture is set automatically (currently %s)\n", arch);
1857 printf_filtered ("The target architecture is assumed to be %s\n", arch);
1860 /* Called if the user enters \`\`set architecture'' with or without an
1863 set_architecture (char *args, int from_tty)
1867 printf_unfiltered ("\"set architecture\" must be followed by \"auto\" or an architecture name.\n");
1869 else if (strcmp (args, "auto") == 0)
1871 target_architecture_auto = 1;
1873 else if (GDB_MULTI_ARCH)
1875 const struct bfd_arch_info *arch = bfd_scan_arch (args);
1877 printf_unfiltered ("Architecture \`%s' not reconized.\n", args);
1880 struct gdbarch_info info;
1881 memset (&info, 0, sizeof info);
1882 info.bfd_arch_info = arch;
1883 if (gdbarch_update (info))
1884 target_architecture_auto = 0;
1886 printf_unfiltered ("Architecture \`%s' not reconized.\n", args);
1891 const struct bfd_arch_info *arch = bfd_scan_arch (args);
1893 set_arch (arch, set_arch_manual);
1895 printf_unfiltered ("Architecture \`%s' not reconized.\n", args);
1899 /* Called if the user enters \`\`info architecture'' without an argument. */
1901 info_architecture (char *args, int from_tty)
1903 enum bfd_architecture a;
1906 if (gdbarch_init_registrary != NULL)
1908 struct gdbarch_init_registration *rego;
1909 printf_filtered ("Available architectures are:\n");
1910 for (rego = gdbarch_init_registrary;
1914 const struct bfd_arch_info *ap;
1915 ap = bfd_lookup_arch (rego->bfd_architecture, 0);
1920 printf_filtered (" %s", ap->printable_name);
1924 printf_filtered ("\n");
1930 printf_filtered ("There are no available architectures.\n");
1934 printf_filtered ("Available architectures are:\n");
1935 for (a = bfd_arch_obscure + 1; a < bfd_arch_last; a++)
1937 const struct bfd_arch_info *ap = bfd_lookup_arch (a, 0);
1942 printf_filtered (" %s", ap->printable_name);
1946 printf_filtered ("\n");
1951 /* Set the architecture from arch/machine */
1953 set_architecture_from_arch_mach (arch, mach)
1954 enum bfd_architecture arch;
1957 const struct bfd_arch_info *wanted = bfd_lookup_arch (arch, mach);
1959 set_arch (wanted, set_arch_manual);
1961 internal_error ("gdbarch: hardwired architecture/machine not reconized");
1964 /* Set the architecture from a BFD */
1966 set_architecture_from_file (bfd *abfd)
1968 const struct bfd_arch_info *wanted = bfd_get_arch_info (abfd);
1969 if (target_architecture_auto)
1971 set_arch (wanted, set_arch_auto);
1973 else if (wanted != target_architecture)
1975 warning ("%s architecture file may be incompatible with %s target.",
1976 wanted->printable_name,
1977 target_architecture->printable_name);
1982 /* Misc helper functions for targets. */
1985 frame_num_args_unknown (fi)
1986 struct frame_info *fi;
1993 generic_register_convertible_not (num)
2002 /* Pointer to the target-dependent disassembly function. */
2003 int (*tm_print_insn) (bfd_vma, disassemble_info *);
2004 disassemble_info tm_print_insn_info;
2008 /* Set the dynamic target-system-dependant parameters (architecture,
2009 byte-order) using information found in the BFD */
2012 set_gdbarch_from_file (abfd)
2017 struct gdbarch_info info;
2018 memset (&info, 0, sizeof info);
2020 gdbarch_update (info);
2023 set_architecture_from_file (abfd);
2024 set_endian_from_file (abfd);
2028 /* Initialize the current architecture. */
2030 initialize_current_architecture ()
2034 struct gdbarch_init_registration *rego;
2035 const struct bfd_arch_info *chosen = NULL;
2036 for (rego = gdbarch_init_registrary; rego != NULL; rego = rego->next)
2038 const struct bfd_arch_info *ap
2039 = bfd_lookup_arch (rego->bfd_architecture, 0);
2041 /* Choose the first architecture alphabetically. */
2043 || strcmp (ap->printable_name, chosen->printable_name) < 0)
2049 struct gdbarch_info info;
2050 memset (&info, 0, sizeof info);
2051 info.bfd_arch_info = chosen;
2052 gdbarch_update (info);
2057 extern void _initialize_gdbarch (void);
2059 _initialize_gdbarch ()
2061 struct cmd_list_element *c;
2063 add_prefix_cmd ("endian", class_support, set_endian,
2064 "Set endianness of target.",
2065 &endianlist, "set endian ", 0, &setlist);
2066 add_cmd ("big", class_support, set_endian_big,
2067 "Set target as being big endian.", &endianlist);
2068 add_cmd ("little", class_support, set_endian_little,
2069 "Set target as being little endian.", &endianlist);
2070 add_cmd ("auto", class_support, set_endian_auto,
2071 "Select target endianness automatically.", &endianlist);
2072 add_cmd ("endian", class_support, show_endian,
2073 "Show endianness of target.", &showlist);
2075 add_cmd ("architecture", class_support, set_architecture,
2076 "Set architecture of target.", &setlist);
2077 add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
2078 add_cmd ("architecture", class_support, show_architecture,
2079 "Show architecture of target.", &showlist);
2080 add_cmd ("architecture", class_support, info_architecture,
2081 "List supported target architectures", &infolist);
2083 INIT_DISASSEMBLE_INFO_NO_ARCH (tm_print_insn_info, gdb_stdout, (fprintf_ftype)fprintf_filtered);
2084 tm_print_insn_info.flavour = bfd_target_unknown_flavour;
2085 tm_print_insn_info.read_memory_func = dis_asm_read_memory;
2086 tm_print_insn_info.memory_error_func = dis_asm_memory_error;
2087 tm_print_insn_info.print_address_func = dis_asm_print_address;
2089 add_show_from_set (add_set_cmd ("arch",
2092 (char *)&gdbarch_debug,
2093 "Set architecture debugging.\n\\
2094 When non-zero, architecture debugging is enabled.", &setdebuglist),
2096 c = add_set_cmd ("archdebug",
2099 (char *)&gdbarch_debug,
2100 "Set architecture debugging.\n\\
2101 When non-zero, architecture debugging is enabled.", &setlist);
2103 deprecate_cmd (c, "set debug arch");
2104 deprecate_cmd (add_show_from_set (c, &showlist), "show debug arch");
2110 #../move-if-change new-gdbarch.c gdbarch.c
2111 compare_new gdbarch.c