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" ]
42 # FIXME: cagney - not until after 5.0
46 # Format of the input table
47 read="class level macro returntype function formal actual attrib startup default invalid_p fmt print print_p description"
53 test "${startup}" || startup
=0
54 test "${fmt}" ||
fmt="%ld"
55 test "${print}" || print
="(long) ${macro}"
56 #test "${default}" || default=0
64 # dump out/verify the doco
77 # hiding something from the ``struct info'' object
81 # See GDB_MULTI_ARCH description. Having GDB_MULTI_ARCH >=
82 # LEVEL is a predicate on checking that a given method is
83 # initialized (using INVALID_P).
87 # The name of the MACRO that this method is to be accessed by.
91 # For functions, the return type; for variables, the data type
95 # For functions, the member function name; for variables, the
96 # variable name. Member function names are always prefixed with
97 # ``gdbarch_'' for name-space purity.
101 # The formal argument list. It is assumed that the formal
102 # argument list includes the actual name of each list element.
103 # A function with no arguments shall have ``void'' as the
104 # formal argument list.
108 # The list of actual arguments. The arguments specified shall
109 # match the FORMAL list given above. Functions with out
110 # arguments leave this blank.
114 # Any GCC attributes that should be attached to the function
115 # declaration. At present this field is unused.
119 # To help with the GDB startup a static gdbarch object is
120 # created. STARTUP is the value to insert into that static
123 # By default ``0'' is used.
127 # Any initial value to assign to a new gdbarch object after it
128 # as been malloc()ed. Zero is used by default.
130 # Specify a non-empty DEFAULT and a zero INVALID_P to create a
131 # fallback value or function for when multi-arch is disabled.
132 # Specify a zero DEFAULT function to make that fallback
137 # A predicate equation that validates MEMBER. Non-zero is
138 # returned if the code creating the new architecture failed to
139 # initialize the MEMBER or initialized the member to something
140 # invalid. By default, a check that the value is no longer
141 # equal to DEFAULT ips performed. The equation ``0'' disables
142 # the invalid_p check.
146 # printf style format string that can be used to print out the
147 # MEMBER. Sometimes "%s" is useful. For functions, this is
148 # ignored and the function address is printed.
150 # By default ```%ld'' is used.
154 # An optional equation that casts MEMBER to a value suitable
155 # for formatting by FMT.
157 # By default ``(long)'' is used.
161 # An optional indicator for any predicte to wrap around the
164 # # -> Wrap print up in ``#ifdef MACRO''
165 # exp -> Wrap print up in ``if (${print_p}) ...
166 # ``'' -> No predicate
180 # See below (DOCO) for description of each field
182 i:2:TARGET_ARCHITECTURE:const struct bfd_arch_info *:bfd_arch_info::::&bfd_default_arch_struct:::%s:TARGET_ARCHITECTURE->printable_name:TARGET_ARCHITECTURE != NULL
184 i:2:TARGET_BYTE_ORDER:int:byte_order::::BIG_ENDIAN
186 v:1:TARGET_BFD_VMA_BIT:int:bfd_vma_bit::::8 * sizeof (void*):TARGET_ARCHITECTURE->bits_per_address:0
187 v:1:TARGET_PTR_BIT:int:ptr_bit::::8 * sizeof (void*):0
188 #v:1:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):0
189 v:1:TARGET_SHORT_BIT:int:short_bit::::8 * sizeof (short):0
190 v:1:TARGET_INT_BIT:int:int_bit::::8 * sizeof (int):0
191 v:1:TARGET_LONG_BIT:int:long_bit::::8 * sizeof (long):0
192 v:1:TARGET_LONG_LONG_BIT:int:long_long_bit::::8 * sizeof (LONGEST):0
193 v:1:TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):0
194 v:1:TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):0
195 v:1:TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):0
197 f:1:TARGET_READ_PC:CORE_ADDR:read_pc:int pid:pid::0:0
198 f:1:TARGET_WRITE_PC:void:write_pc:CORE_ADDR val, int pid:val, pid::0:0
199 f:1:TARGET_READ_FP:CORE_ADDR:read_fp:void:::0:0
200 f:1:TARGET_WRITE_FP:void:write_fp:CORE_ADDR val:val::0:0
201 f:1:TARGET_READ_SP:CORE_ADDR:read_sp:void:::0:0
202 f:1:TARGET_WRITE_SP:void:write_sp:CORE_ADDR val:val::0:0
204 v:2:NUM_REGS:int:num_regs::::0:-1
205 v:2:SP_REGNUM:int:sp_regnum::::0:-1
206 v:2:FP_REGNUM:int:fp_regnum::::0:-1
207 v:2:PC_REGNUM:int:pc_regnum::::0:-1
208 f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name:0
209 v:2:REGISTER_SIZE:int:register_size::::0:-1
210 v:2:REGISTER_BYTES:int:register_bytes::::0:-1
211 f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0
212 f:2:REGISTER_RAW_SIZE:int:register_raw_size:int reg_nr:reg_nr::0:0
213 v:2:MAX_REGISTER_RAW_SIZE:int:max_register_raw_size::::0:-1
214 f:2:REGISTER_VIRTUAL_SIZE:int:register_virtual_size:int reg_nr:reg_nr::0:0
215 v:2:MAX_REGISTER_VIRTUAL_SIZE:int:max_register_virtual_size::::0:-1
216 f:2:REGISTER_VIRTUAL_TYPE:struct type *:register_virtual_type:int reg_nr:reg_nr::0:0
218 v:1:USE_GENERIC_DUMMY_FRAMES:int:use_generic_dummy_frames::::0:-1
219 v:2:CALL_DUMMY_LOCATION:int:call_dummy_location::::0:0
220 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:
221 v:2:CALL_DUMMY_START_OFFSET:CORE_ADDR:call_dummy_start_offset::::0:-1::0x%08lx
222 v:2:CALL_DUMMY_BREAKPOINT_OFFSET:CORE_ADDR:call_dummy_breakpoint_offset::::0:-1::0x%08lx
223 v:1:CALL_DUMMY_BREAKPOINT_OFFSET_P:int:call_dummy_breakpoint_offset_p::::0:-1
224 v:2:CALL_DUMMY_LENGTH:int:call_dummy_length::::0:-1::::CALL_DUMMY_LOCATION == BEFORE_TEXT_END || CALL_DUMMY_LOCATION == AFTER_TEXT_END
225 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
226 v:1:CALL_DUMMY_P:int:call_dummy_p::::0:-1
227 v:2:CALL_DUMMY_WORDS:LONGEST *:call_dummy_words::::0:legacy_call_dummy_words:0:0x%08lx
228 v:2:SIZEOF_CALL_DUMMY_WORDS:int:sizeof_call_dummy_words::::0:legacy_sizeof_call_dummy_words:0:0x%08lx
229 v:1:CALL_DUMMY_STACK_ADJUST_P:int:call_dummy_stack_adjust_p::::0:-1::0x%08lx
230 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
231 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
233 v:2:BELIEVE_PCC_PROMOTION:int:believe_pcc_promotion::::0:::::#
234 v:2:BELIEVE_PCC_PROMOTION_TYPE:int:believe_pcc_promotion_type::::0:::::#
235 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
236 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
238 f:1:REGISTER_CONVERTIBLE:int:register_convertible:int nr:nr:::generic_register_convertible_not:0
239 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
240 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
242 f:2:EXTRACT_RETURN_VALUE:void:extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf::0:0
243 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
244 f:2:PUSH_DUMMY_FRAME:void:push_dummy_frame:void:-:::0
245 f:1:PUSH_RETURN_ADDRESS:CORE_ADDR:push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp:::0
246 f:2:POP_FRAME:void:pop_frame:void:-:::0
248 # I wish that these would just go away....
249 f:2:D10V_MAKE_DADDR:CORE_ADDR:d10v_make_daddr:CORE_ADDR x:x:::0:0
250 f:2:D10V_MAKE_IADDR:CORE_ADDR:d10v_make_iaddr:CORE_ADDR x:x:::0:0
251 f:2:D10V_DADDR_P:int:d10v_daddr_p:CORE_ADDR x:x:::0
252 f:2:D10V_IADDR_P:int:d10v_iaddr_p:CORE_ADDR x:x:::0
253 f:2:D10V_CONVERT_DADDR_TO_RAW:CORE_ADDR:d10v_convert_daddr_to_raw:CORE_ADDR x:x:::0
254 f:2:D10V_CONVERT_IADDR_TO_RAW:CORE_ADDR:d10v_convert_iaddr_to_raw:CORE_ADDR x:x:::0
256 f:2:STORE_STRUCT_RETURN:void:store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp:::0
257 f:2:STORE_RETURN_VALUE:void:store_return_value:struct type *type, char *valbuf:type, valbuf:::0
258 f:2:EXTRACT_STRUCT_VALUE_ADDRESS:CORE_ADDR:extract_struct_value_address:char *regbuf:regbuf:::0
259 f:2:USE_STRUCT_CONVENTION:int:use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type:::0
261 f:2:FRAME_INIT_SAVED_REGS:void:frame_init_saved_regs:struct frame_info *frame:frame::0:0
262 f:2:INIT_EXTRA_FRAME_INFO:void:init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame:::0
264 f:2:SKIP_PROLOGUE:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0
265 f:2:INNER_THAN:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0
266 f:2:BREAKPOINT_FROM_PC:unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::legacy_breakpoint_from_pc:0
267 f:2:MEMORY_INSERT_BREAKPOINT:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint:0
268 f:2:MEMORY_REMOVE_BREAKPOINT:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint:0
269 v:2:DECR_PC_AFTER_BREAK:CORE_ADDR:decr_pc_after_break::::0:-1
270 v:2:FUNCTION_START_OFFSET:CORE_ADDR:function_start_offset::::0:-1
272 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
274 v:2:FRAME_ARGS_SKIP:CORE_ADDR:frame_args_skip::::0:-1
275 f:2:FRAMELESS_FUNCTION_INVOCATION:int:frameless_function_invocation:struct frame_info *fi:fi:::generic_frameless_function_invocation_not:0
276 f:2:FRAME_CHAIN:CORE_ADDR:frame_chain:struct frame_info *frame:frame::0:0
277 f:1:FRAME_CHAIN_VALID:int:frame_chain_valid:CORE_ADDR chain, struct frame_info *thisframe:chain, thisframe::0:0
278 f:2:FRAME_SAVED_PC:CORE_ADDR:frame_saved_pc:struct frame_info *fi:fi::0:0
279 f:2:FRAME_ARGS_ADDRESS:CORE_ADDR:frame_args_address:struct frame_info *fi:fi::0:0
280 f:2:FRAME_LOCALS_ADDRESS:CORE_ADDR:frame_locals_address:struct frame_info *fi:fi::0:0
281 f:2:SAVED_PC_AFTER_CALL:CORE_ADDR:saved_pc_after_call:struct frame_info *frame:frame::0:0
282 f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
293 function_list |
while do_read
# eval read $read
296 ${class} ${macro}(${actual})
297 ${returntype} ${function} ($formal)${attrib}
301 invalid_p=${invalid_p}
305 description=${description}
314 /* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
316 /* Dynamic architecture support for GDB, the GNU debugger.
317 Copyright 1998-1999, Free Software Foundation, Inc.
319 This file is part of GDB.
321 This program is free software; you can redistribute it and/or modify
322 it under the terms of the GNU General Public License as published by
323 the Free Software Foundation; either version 2 of the License, or
324 (at your option) any later version.
326 This program is distributed in the hope that it will be useful,
327 but WITHOUT ANY WARRANTY; without even the implied warranty of
328 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
329 GNU General Public License for more details.
331 You should have received a copy of the GNU General Public License
332 along with this program; if not, write to the Free Software
333 Foundation, Inc., 59 Temple Place - Suite 330,
334 Boston, MA 02111-1307, USA. */
336 /* This file was created with the aid of \`\`gdbarch.sh''.
338 The bourn shell script \`\`gdbarch.sh'' creates the files
339 \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them
340 against the existing \`\`gdbarch.[hc]''. Any differences found
343 If editing this file, please also run gdbarch.sh and merge any
344 changes into that script. Conversely, when makeing sweeping changes
345 to this file, modifying gdbarch.sh and using its output may prove
365 #ifndef GDB_MULTI_ARCH
366 #define GDB_MULTI_ARCH 0
369 extern struct gdbarch *current_gdbarch;
372 /* See gdb/doc/gdbint.texi for a discussion of the GDB_MULTI_ARCH
376 /* If any of the following are defined, the target wasn't correctly
380 #if defined (CALL_DUMMY)
381 #error "CALL_DUMMY: replaced by CALL_DUMMY_WORDS/SIZEOF_CALL_DUMMY_WORDS"
386 #if defined (REGISTER_NAMES)
387 #error "REGISTER_NAMES: replaced by REGISTER_NAME"
392 #if defined (EXTRA_FRAME_INFO)
393 #error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
398 #if defined (FRAME_FIND_SAVED_REGS)
399 #error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
407 echo "/* The following are pre-initialized by GDBARCH. */"
408 function_list |
while do_read
# eval read $read
413 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
414 echo "/* set_gdbarch_${function}() - not applicable - pre-initialized. */"
415 echo "#if GDB_MULTI_ARCH"
416 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
417 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
427 echo "/* The following are initialized by the target dependant code. */"
428 function_list |
while do_read
# eval read $read
433 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
434 echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});"
435 echo "#if GDB_MULTI_ARCH"
436 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
437 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
443 echo "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});"
444 if [ "${formal}" = "void" ]
446 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);"
448 echo "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});"
450 echo "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});"
451 if ! default_is_fallback_p
453 echo "#if GDB_MULTI_ARCH"
455 echo "#if (GDB_MULTI_ARCH > 1) || !defined (${macro})"
456 if [ "${actual}" = "" ]
458 echo "#define ${macro}() (gdbarch_${function} (current_gdbarch))"
459 elif [ "${actual}" = "-" ]
461 echo "#define ${macro} (gdbarch_${function} (current_gdbarch))"
463 echo "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))"
466 if ! default_is_fallback_p
477 extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
480 /* Mechanism for co-ordinating the selection of a specific
483 GDB targets (*-tdep.c) can register an interest in a specific
484 architecture. Other GDB components can register a need to maintain
485 per-architecture data.
487 The mechanisms below ensures that there is only a loose connection
488 between the set-architecture command and the various GDB
489 components. Each component can independantly register their need
490 to maintain architecture specific data with gdbarch.
494 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
497 The more traditional mega-struct containing architecture specific
498 data for all the various GDB components was also considered. Since
499 GDB is built from a variable number of (fairly independant)
500 components it was determined that the global aproach was not
504 /* Register a new architectural family with GDB.
506 Register support for the specified ARCHITECTURE with GDB. When
507 gdbarch determines that the specified architecture has been
508 selected, the corresponding INIT function is called.
512 The INIT function takes two parameters: INFO which contains the
513 information available to gdbarch about the (possibly new)
514 architecture; ARCHES which is a list of the previously created
515 \`\`struct gdbarch'' for this architecture.
517 The INIT function parameter INFO shall, as far as possible, be
518 pre-initialized with information obtained from INFO.ABFD or
519 previously selected architecture (if similar). INIT shall ensure
520 that the INFO.BYTE_ORDER is non-zero.
522 The INIT function shall return any of: NULL - indicating that it
523 doesn't reconize the selected architecture; an existing \`\`struct
524 gdbarch'' from the ARCHES list - indicating that the new
525 architecture is just a synonym for an earlier architecture (see
526 gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch''
527 - that describes the selected architecture (see
532 struct gdbarch *gdbarch;
533 struct gdbarch_list *next;
538 /* Use default: bfd_arch_unknown (ZERO). */
539 enum bfd_architecture bfd_architecture;
541 /* Use default: NULL (ZERO). */
542 const struct bfd_arch_info *bfd_arch_info;
544 /* Use default: 0 (ZERO). */
547 /* Use default: NULL (ZERO). */
550 /* Use default: NULL (ZERO). */
551 struct gdbarch_tdep_info *tdep_info;
554 typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
556 extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
559 /* Helper function. Search the list of ARCHES for a GDBARCH that
560 matches the information provided by INFO. */
562 extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
565 /* Helper function. Create a preliminary \`\`struct gdbarch''. Perform
566 basic initialization using values obtained from the INFO andTDEP
567 parameters. set_gdbarch_*() functions are called to complete the
568 initialization of the object. */
570 extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
573 /* Helper function. Free a partially-constructed \`\`struct gdbarch''. */
574 extern void gdbarch_free (struct gdbarch *);
577 /* Helper function. Force an update of the current architecture. Used
578 by legacy targets that have added their own target specific
579 architecture manipulation commands.
581 The INFO parameter shall be fully initialized (\`\`memset (&INFO,
582 sizeof (info), 0)'' set relevant fields) before gdbarch_update() is
583 called. gdbarch_update() shall initialize any \`\`default'' fields
584 using information obtained from the previous architecture or
585 INFO.ABFD (if specified) before calling the corresponding
586 architectures INIT function. */
588 extern int gdbarch_update (struct gdbarch_info info);
592 /* Register per-architecture data-pointer.
594 Reserve space for a per-architecture data-pointer. An identifier
595 for the reserved data-pointer is returned. That identifer should
596 be saved in a local static.
598 When a new architecture is selected, INIT() is called. When a
599 previous architecture is re-selected, the per-architecture
600 data-pointer for that previous architecture is restored (INIT() is
603 INIT() shall return the initial value for the per-architecture
604 data-pointer for the current architecture.
606 Multiple registrarants for any architecture are allowed (and
607 strongly encouraged). */
609 typedef void *(gdbarch_data_ftype) (void);
610 extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_ftype *init);
612 /* Return the value of the per-architecture data-pointer for the
613 current architecture. */
615 extern void *gdbarch_data (struct gdbarch_data*);
619 /* Register per-architecture memory region.
621 Provide a memory-region swap mechanism. Per-architecture memory
622 region are created. These memory regions are swapped whenever the
623 architecture is changed. For a new architecture, the memory region
624 is initialized with zero (0) and the INIT function is called.
626 Memory regions are swapped / initialized in the order that they are
627 registered. NULL DATA and/or INIT values can be specified.
629 New code should use register_gdbarch_data(). */
631 typedef void (gdbarch_swap_ftype) (void);
632 extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
633 #define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
637 /* The target-system-dependant byte order is dynamic */
639 /* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
640 is selectable at runtime. The user can use the \`\`set endian''
641 command to change it. TARGET_BYTE_ORDER_AUTO is nonzero when
642 target_byte_order should be auto-detected (from the program image
646 /* Multi-arch GDB is always bi-endian. */
647 #define TARGET_BYTE_ORDER_SELECTABLE_P 1
650 #ifndef TARGET_BYTE_ORDER_SELECTABLE_P
651 /* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
652 when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
653 #ifdef TARGET_BYTE_ORDER_SELECTABLE
654 #define TARGET_BYTE_ORDER_SELECTABLE_P 1
656 #define TARGET_BYTE_ORDER_SELECTABLE_P 0
660 extern int target_byte_order;
661 #ifdef TARGET_BYTE_ORDER_SELECTABLE
662 /* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
663 and expect defs.h to re-define TARGET_BYTE_ORDER. */
664 #undef TARGET_BYTE_ORDER
666 #ifndef TARGET_BYTE_ORDER
667 #define TARGET_BYTE_ORDER (target_byte_order + 0)
670 extern int target_byte_order_auto;
671 #ifndef TARGET_BYTE_ORDER_AUTO
672 #define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
677 /* The target-system-dependant BFD architecture is dynamic */
679 extern int target_architecture_auto;
680 #ifndef TARGET_ARCHITECTURE_AUTO
681 #define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
684 extern const struct bfd_arch_info *target_architecture;
685 #ifndef TARGET_ARCHITECTURE
686 #define TARGET_ARCHITECTURE (target_architecture + 0)
689 /* Notify the target dependant backend of a change to the selected
690 architecture. A zero return status indicates that the target did
691 not like the change. */
693 extern int (*target_architecture_hook) (const struct bfd_arch_info *);
697 /* The target-system-dependant disassembler is semi-dynamic */
699 #include "dis-asm.h" /* Get defs for disassemble_info */
701 extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
702 unsigned int len, disassemble_info *info);
704 extern void dis_asm_memory_error (int status, bfd_vma memaddr,
705 disassemble_info *info);
707 extern void dis_asm_print_address (bfd_vma addr,
708 disassemble_info *info);
710 extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
711 extern disassemble_info tm_print_insn_info;
712 #ifndef TARGET_PRINT_INSN
713 #define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
715 #ifndef TARGET_PRINT_INSN_INFO
716 #define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
721 /* Explicit test for D10V architecture.
722 USE of these macro's is *STRONGLY* discouraged. */
724 #define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
725 #ifndef D10V_MAKE_DADDR
726 #define D10V_MAKE_DADDR(X) (internal_error ("gdbarch: D10V_MAKE_DADDR"), 0)
728 #ifndef D10V_MAKE_IADDR
729 #define D10V_MAKE_IADDR(X) (internal_error ("gdbarch: D10V_MAKE_IADDR"), 0)
733 /* Fallback definition of FRAMELESS_FUNCTION_INVOCATION */
734 #ifndef FRAMELESS_FUNCTION_INVOCATION
735 #define FRAMELESS_FUNCTION_INVOCATION(FI) (0)
739 /* Fallback definition of REGISTER_CONVERTIBLE etc */
740 extern int generic_register_convertible_not (int reg_nr);
741 #ifndef REGISTER_CONVERTIBLE
742 #define REGISTER_CONVERTIBLE(x) (0)
744 #ifndef REGISTER_CONVERT_TO_VIRTUAL
745 #define REGISTER_CONVERT_TO_VIRTUAL(x, y, z, a)
747 #ifndef REGISTER_CONVERT_TO_RAW
748 #define REGISTER_CONVERT_TO_RAW(x, y, z, a)
752 /* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
753 #ifndef EXTRACT_STRUCT_VALUE_ADDRESS
754 #define EXTRACT_STRUCT_VALUE_ADDRESS_P (0)
755 #define EXTRACT_STRUCT_VALUE_ADDRESS(X) (internal_error ("gdbarch: EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
757 #ifndef EXTRACT_STRUCT_VALUE_ADDRESS_P
758 #define EXTRACT_STRUCT_VALUE_ADDRESS_P (1)
763 /* Fallback definition for REGISTER_NAME for systems still defining
765 #ifndef REGISTER_NAME
766 extern char *gdb_register_names[];
767 #define REGISTER_NAME(i) gdb_register_names[i]
771 /* Set the dynamic target-system-dependant parameters (architecture,
772 byte-order, ...) using information found in the BFD */
774 extern void set_gdbarch_from_file (bfd *);
777 /* Explicitly set the dynamic target-system-dependant parameters based
778 on bfd_architecture and machine. */
780 extern void set_architecture_from_arch_mach (enum bfd_architecture, unsigned long);
783 /* Initialize the current architecture to the "first" one we find on
786 extern void initialize_current_architecture (void);
788 /* Helper function for targets that don't know how my arguments are
791 extern int frame_num_args_unknown (struct frame_info *fi);
794 /* gdbarch trace variable */
795 extern int gdbarch_debug;
797 extern void gdbarch_dump (void);
802 #../move-if-change new-gdbarch.h gdbarch.h
803 compare_new gdbarch.h
815 #include "gdbarch-utils.h"
819 #include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */
821 /* Just include everything in sight so that the every old definition
822 of macro is visible. */
823 #include "gdb_string.h"
827 #include "inferior.h"
828 #include "breakpoint.h"
829 #include "gdb_wait.h"
833 #include "gdbthread.h"
834 #include "annotate.h"
835 #include "symfile.h" /* for overlay functions */
840 /* Static function declarations */
842 static void verify_gdbarch (struct gdbarch *gdbarch);
843 static void init_gdbarch_data (struct gdbarch *);
844 static void init_gdbarch_swap (struct gdbarch *);
845 static void swapout_gdbarch_swap (struct gdbarch *);
846 static void swapin_gdbarch_swap (struct gdbarch *);
848 /* Convenience macro for allocting typesafe memory. */
851 #define XMALLOC(TYPE) (TYPE*) xmalloc (sizeof (TYPE))
855 /* Non-zero if we want to trace architecture code. */
857 #ifndef GDBARCH_DEBUG
858 #define GDBARCH_DEBUG 0
860 int gdbarch_debug = GDBARCH_DEBUG;
864 # gdbarch open the gdbarch object
866 echo "/* Maintain the struct gdbarch object */"
868 echo "struct gdbarch"
870 echo " /* basic architectural information */"
871 function_list |
while do_read
# eval read $read
874 "i" ) echo " ${returntype} ${function};" ;;
878 echo " /* target specific vector. */"
879 echo " struct gdbarch_tdep *tdep;"
881 echo " /* per-architecture data-pointers */"
885 echo " /* per-architecture swap-regions */"
886 echo " struct gdbarch_swap *swap;"
889 /* Multi-arch values.
891 When extending this structure you must:
895 Declare set/get functions and define the corresponding
898 gdbarch_alloc(): If zero/NULL is not a suitable default,
899 initialize the new field.
901 verify_gdbarch(): Confirm that the target updated the field
904 gdbarch_dump(): Add a fprintf_unfiltered call to so that the new
907 \`\`startup_gdbarch()'': Append an initial value to the static
908 variable (base values on the host's c-type system).
910 get_gdbarch(): Implement the set/get functions (probably using
911 the macro's as shortcuts).
916 function_list |
while do_read
# eval read $read
919 "v" ) echo " ${returntype} ${function};" ;;
920 "f" ) echo " gdbarch_${function}_ftype *${function}${attrib};" ;;
925 # A pre-initialized vector
929 /* The default architecture uses host values (for want of a better
933 echo "extern const struct bfd_arch_info bfd_default_arch_struct;"
935 echo "struct gdbarch startup_gdbarch = {"
936 echo " /* basic architecture information */"
937 function_list |
while do_read
# eval read $read
946 /* target specific vector */
948 /*per-architecture data-pointers and swap regions */
950 /* Multi-arch values */
952 function_list |
while do_read
# eval read $read
961 /* startup_gdbarch() */
963 struct gdbarch *current_gdbarch = &startup_gdbarch;
966 # Create a new gdbarch struct
970 /* Create a new \`\`struct gdbarch'' based in information provided by
971 \`\`struct gdbarch_info''. */
976 gdbarch_alloc (const struct gdbarch_info *info,
977 struct gdbarch_tdep *tdep)
979 struct gdbarch *gdbarch = XMALLOC (struct gdbarch);
980 memset (gdbarch, 0, sizeof (*gdbarch));
982 gdbarch->tdep = tdep;
985 function_list |
while do_read
# eval read $read
988 "i" ) echo " gdbarch->${function} = info->${function};"
992 echo " /* Force the explicit initialization of these. */"
993 function_list |
while do_read
# eval read $read
997 if [ "${default}" != "" -a "${default}" != "0" ]
999 echo " gdbarch->${function} = ${default};"
1005 /* gdbarch_alloc() */
1011 # Free a gdbarch struct.
1015 /* Free a gdbarch struct. This should never happen in normal
1016 operation --- once you've created a gdbarch, you keep it around.
1017 However, if an architecture's init function encounters an error
1018 building the structure, it may need to clean up a partially
1019 constructed gdbarch. */
1021 gdbarch_free (struct gdbarch *arch)
1023 /* At the moment, this is trivial. */
1028 # verify a new architecture
1031 echo "/* Ensure that all values in a GDBARCH are reasonable. */"
1035 verify_gdbarch (struct gdbarch *gdbarch)
1037 /* Only perform sanity checks on a multi-arch target. */
1038 if (GDB_MULTI_ARCH <= 0)
1041 if (gdbarch->byte_order == 0)
1042 internal_error ("verify_gdbarch: byte-order unset");
1043 if (gdbarch->bfd_arch_info == NULL)
1044 internal_error ("verify_gdbarch: bfd_arch_info unset");
1045 /* Check those that need to be defined for the given multi-arch level. */
1047 function_list |
while do_read
# eval read $read
1051 if [ "${invalid_p}" = "0" ]
1053 echo " /* Skip verify of ${function}, invalid_p == 0 */"
1054 elif [ "${invalid_p}" ]
1056 echo " if ((GDB_MULTI_ARCH >= ${level})"
1057 echo " && (${invalid_p}))"
1058 echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
1059 elif [ "${default}" ]
1061 echo " if ((GDB_MULTI_ARCH >= ${level})"
1062 echo " && (gdbarch->${function} == ${default}))"
1063 echo " internal_error (\"gdbarch: verify_gdbarch: ${function} invalid\");"
1072 # dump the structure
1075 echo "/* Print out the details of the current architecture. */"
1082 function_list |
while do_read
# eval read $read
1086 echo " fprintf_unfiltered (gdb_stdlog,"
1087 echo " \"gdbarch_update: ${macro} = 0x%08lx\\n\","
1088 echo " (long) current_gdbarch->${function}"
1089 echo " /*${macro} ()*/);"
1092 if [ "${print_p}" = "#" ]
1094 echo "#ifdef ${macro}"
1095 echo " fprintf_unfiltered (gdb_stdlog,"
1096 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1099 elif [ "${print_p}" ]
1101 echo " if (${print_p})"
1102 echo " fprintf_unfiltered (gdb_stdlog,"
1103 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1106 echo " fprintf_unfiltered (gdb_stdlog,"
1107 echo " \"gdbarch_update: ${macro} = ${fmt}\\n\","
1119 struct gdbarch_tdep *
1120 gdbarch_tdep (struct gdbarch *gdbarch)
1122 if (gdbarch_debug >= 2)
1123 fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\n");
1124 return gdbarch->tdep;
1128 function_list |
while do_read
# eval read $read
1133 echo "${returntype}"
1134 if [ "${formal}" = "void" ]
1136 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1138 echo "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})"
1141 if default_is_fallback_p
&& [ "${default}" != "0" ]
1143 echo " if (GDB_MULTI_ARCH == 0)"
1144 if [ "${returntype}" = "void" ]
1147 echo " ${default} (${actual});"
1151 echo " return ${default} (${actual});"
1154 echo " if (gdbarch->${function} == 0)"
1155 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1156 echo " if (gdbarch_debug >= 2)"
1157 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1158 test "${actual}" = "-" && actual
=""
1159 if [ "${returntype}" = "void" ]
1161 echo " gdbarch->${function} (${actual});"
1163 echo " return gdbarch->${function} (${actual});"
1168 echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
1169 echo " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})"
1171 echo " gdbarch->${function} = ${function};"
1176 echo "${returntype}"
1177 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1179 if [ "${invalid_p}" = "0" ]
1181 echo " /* Skip verify of ${function}, invalid_p == 0 */"
1182 elif [ "${invalid_p}" ]
1184 echo " if (${invalid_p})"
1185 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1186 elif [ "${default}" ]
1188 echo " if (gdbarch->${function} == ${default})"
1189 echo " internal_error (\"gdbarch: gdbarch_${function} invalid\");"
1191 echo " if (gdbarch_debug >= 2)"
1192 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1193 echo " return gdbarch->${function};"
1197 echo "set_gdbarch_${function} (struct gdbarch *gdbarch,"
1198 echo " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})"
1200 echo " gdbarch->${function} = ${function};"
1205 echo "${returntype}"
1206 echo "gdbarch_${function} (struct gdbarch *gdbarch)"
1208 echo " if (gdbarch_debug >= 2)"
1209 echo " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\n\");"
1210 echo " return gdbarch->${function};"
1216 # All the trailing guff
1220 /* Keep a registrary of per-architecture data-pointers required by GDB
1228 struct gdbarch_data_registration
1230 gdbarch_data_ftype *init;
1231 struct gdbarch_data *data;
1232 struct gdbarch_data_registration *next;
1235 struct gdbarch_data_registrary
1238 struct gdbarch_data_registration *registrations;
1241 struct gdbarch_data_registrary gdbarch_data_registrary =
1246 struct gdbarch_data *
1247 register_gdbarch_data (gdbarch_data_ftype *init)
1249 struct gdbarch_data_registration **curr;
1250 for (curr = &gdbarch_data_registrary.registrations;
1252 curr = &(*curr)->next);
1253 (*curr) = XMALLOC (struct gdbarch_data_registration);
1254 (*curr)->next = NULL;
1255 (*curr)->init = init;
1256 (*curr)->data = XMALLOC (struct gdbarch_data);
1257 (*curr)->data->index = gdbarch_data_registrary.nr++;
1258 return (*curr)->data;
1262 /* Walk through all the registered users initializing each in turn. */
1265 init_gdbarch_data (struct gdbarch *gdbarch)
1267 struct gdbarch_data_registration *rego;
1268 gdbarch->nr_data = gdbarch_data_registrary.nr + 1;
1269 gdbarch->data = xmalloc (sizeof (void*) * gdbarch->nr_data);
1270 for (rego = gdbarch_data_registrary.registrations;
1274 if (rego->data->index < gdbarch->nr_data)
1275 gdbarch->data[rego->data->index] = rego->init ();
1280 /* Return the current value of the specified per-architecture
1285 struct gdbarch_data *data;
1287 if (data->index >= current_gdbarch->nr_data)
1288 internal_error ("gdbarch_data: request for non-existant data.");
1289 return current_gdbarch->data[data->index];
1294 /* Keep a registrary of swaped data required by GDB modules. */
1299 struct gdbarch_swap_registration *source;
1300 struct gdbarch_swap *next;
1303 struct gdbarch_swap_registration
1306 unsigned long sizeof_data;
1307 gdbarch_swap_ftype *init;
1308 struct gdbarch_swap_registration *next;
1311 struct gdbarch_swap_registrary
1314 struct gdbarch_swap_registration *registrations;
1317 struct gdbarch_swap_registrary gdbarch_swap_registrary =
1323 register_gdbarch_swap (void *data,
1324 unsigned long sizeof_data,
1325 gdbarch_swap_ftype *init)
1327 struct gdbarch_swap_registration **rego;
1328 for (rego = &gdbarch_swap_registrary.registrations;
1330 rego = &(*rego)->next);
1331 (*rego) = XMALLOC (struct gdbarch_swap_registration);
1332 (*rego)->next = NULL;
1333 (*rego)->init = init;
1334 (*rego)->data = data;
1335 (*rego)->sizeof_data = sizeof_data;
1340 init_gdbarch_swap (struct gdbarch *gdbarch)
1342 struct gdbarch_swap_registration *rego;
1343 struct gdbarch_swap **curr = &gdbarch->swap;
1344 for (rego = gdbarch_swap_registrary.registrations;
1348 if (rego->data != NULL)
1350 (*curr) = XMALLOC (struct gdbarch_swap);
1351 (*curr)->source = rego;
1352 (*curr)->swap = xmalloc (rego->sizeof_data);
1353 (*curr)->next = NULL;
1354 memset (rego->data, 0, rego->sizeof_data);
1355 curr = &(*curr)->next;
1357 if (rego->init != NULL)
1363 swapout_gdbarch_swap (struct gdbarch *gdbarch)
1365 struct gdbarch_swap *curr;
1366 for (curr = gdbarch->swap;
1369 memcpy (curr->swap, curr->source->data, curr->source->sizeof_data);
1373 swapin_gdbarch_swap (struct gdbarch *gdbarch)
1375 struct gdbarch_swap *curr;
1376 for (curr = gdbarch->swap;
1379 memcpy (curr->source->data, curr->swap, curr->source->sizeof_data);
1383 /* Keep a registrary of the architectures known by GDB. */
1385 struct gdbarch_init_registration
1387 enum bfd_architecture bfd_architecture;
1388 gdbarch_init_ftype *init;
1389 struct gdbarch_list *arches;
1390 struct gdbarch_init_registration *next;
1393 static struct gdbarch_init_registration *gdbarch_init_registrary = NULL;
1396 register_gdbarch_init (enum bfd_architecture bfd_architecture,
1397 gdbarch_init_ftype *init)
1399 struct gdbarch_init_registration **curr;
1400 const struct bfd_arch_info *bfd_arch_info;
1401 /* Check that BFD reconizes this architecture */
1402 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0);
1403 if (bfd_arch_info == NULL)
1405 internal_error ("gdbarch: Attempt to register unknown architecture (%d)", bfd_architecture);
1407 /* Check that we haven't seen this architecture before */
1408 for (curr = &gdbarch_init_registrary;
1410 curr = &(*curr)->next)
1412 if (bfd_architecture == (*curr)->bfd_architecture)
1413 internal_error ("gdbarch: Duplicate registraration of architecture (%s)",
1414 bfd_arch_info->printable_name);
1418 fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n",
1419 bfd_arch_info->printable_name,
1422 (*curr) = XMALLOC (struct gdbarch_init_registration);
1423 (*curr)->bfd_architecture = bfd_architecture;
1424 (*curr)->init = init;
1425 (*curr)->arches = NULL;
1426 (*curr)->next = NULL;
1431 /* Look for an architecture using gdbarch_info. Base search on only
1432 BFD_ARCH_INFO and BYTE_ORDER. */
1434 struct gdbarch_list *
1435 gdbarch_list_lookup_by_info (struct gdbarch_list *arches,
1436 const struct gdbarch_info *info)
1438 for (; arches != NULL; arches = arches->next)
1440 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info)
1442 if (info->byte_order != arches->gdbarch->byte_order)
1450 /* Update the current architecture. Return ZERO if the update request
1454 gdbarch_update (struct gdbarch_info info)
1456 struct gdbarch *new_gdbarch;
1457 struct gdbarch_list **list;
1458 struct gdbarch_init_registration *rego;
1460 /* Fill in any missing bits. Most important is the bfd_architecture
1461 which is used to select the target architecture. */
1462 if (info.bfd_architecture == bfd_arch_unknown)
1464 if (info.bfd_arch_info != NULL)
1465 info.bfd_architecture = info.bfd_arch_info->arch;
1466 else if (info.abfd != NULL)
1467 info.bfd_architecture = bfd_get_arch (info.abfd);
1468 /* FIXME - should query BFD for its default architecture. */
1470 info.bfd_architecture = current_gdbarch->bfd_arch_info->arch;
1472 if (info.bfd_arch_info == NULL)
1474 if (target_architecture_auto && info.abfd != NULL)
1475 info.bfd_arch_info = bfd_get_arch_info (info.abfd);
1477 info.bfd_arch_info = current_gdbarch->bfd_arch_info;
1479 if (info.byte_order == 0)
1481 if (target_byte_order_auto && info.abfd != NULL)
1482 info.byte_order = (bfd_big_endian (info.abfd) ? BIG_ENDIAN
1483 : bfd_little_endian (info.abfd) ? LITTLE_ENDIAN
1486 info.byte_order = current_gdbarch->byte_order;
1487 /* FIXME - should query BFD for its default byte-order. */
1489 /* A default for abfd? */
1491 /* Find the target that knows about this architecture. */
1492 for (rego = gdbarch_init_registrary;
1493 rego != NULL && rego->bfd_architecture != info.bfd_architecture;
1498 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: No matching architecture\n");
1504 fprintf_unfiltered (gdb_stdlog,
1505 "gdbarch_update: info.bfd_architecture %d (%s)\n",
1506 info.bfd_architecture,
1507 bfd_lookup_arch (info.bfd_architecture, 0)->printable_name);
1508 fprintf_unfiltered (gdb_stdlog,
1509 "gdbarch_update: info.bfd_arch_info %s\n",
1510 (info.bfd_arch_info != NULL
1511 ? info.bfd_arch_info->printable_name
1513 fprintf_unfiltered (gdb_stdlog,
1514 "gdbarch_update: info.byte_order %d (%s)\n",
1516 (info.byte_order == BIG_ENDIAN ? "big"
1517 : info.byte_order == LITTLE_ENDIAN ? "little"
1519 fprintf_unfiltered (gdb_stdlog,
1520 "gdbarch_update: info.abfd 0x%lx\n",
1522 fprintf_unfiltered (gdb_stdlog,
1523 "gdbarch_update: info.tdep_info 0x%lx\n",
1524 (long) info.tdep_info);
1527 /* Ask the target for a replacement architecture. */
1528 new_gdbarch = rego->init (info, rego->arches);
1530 /* Did the target like it? No. Reject the change. */
1531 if (new_gdbarch == NULL)
1534 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Target rejected architecture\n");
1538 /* Did the architecture change? No. Do nothing. */
1539 if (current_gdbarch == new_gdbarch)
1542 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Architecture 0x%08lx (%s) unchanged\n",
1544 new_gdbarch->bfd_arch_info->printable_name);
1548 /* Swap all data belonging to the old target out */
1549 swapout_gdbarch_swap (current_gdbarch);
1551 /* Is this a pre-existing architecture? Yes. Swap it in. */
1552 for (list = ®o->arches;
1554 list = &(*list)->next)
1556 if ((*list)->gdbarch == new_gdbarch)
1559 fprintf_unfiltered (gdb_stdlog, "gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
1561 new_gdbarch->bfd_arch_info->printable_name);
1562 current_gdbarch = new_gdbarch;
1563 swapin_gdbarch_swap (new_gdbarch);
1568 /* Append this new architecture to this targets list. */
1569 (*list) = XMALLOC (struct gdbarch_list);
1570 (*list)->next = NULL;
1571 (*list)->gdbarch = new_gdbarch;
1573 /* Switch to this new architecture. Dump it out. */
1574 current_gdbarch = new_gdbarch;
1577 fprintf_unfiltered (gdb_stdlog,
1578 "gdbarch_update: New architecture 0x%08lx (%s) selected\n",
1580 new_gdbarch->bfd_arch_info->printable_name);
1584 /* Check that the newly installed architecture is valid. */
1585 verify_gdbarch (new_gdbarch);
1587 /* Initialize the per-architecture memory (swap) areas.
1588 CURRENT_GDBARCH must be update before these modules are
1590 init_gdbarch_swap (new_gdbarch);
1592 /* Initialize the per-architecture data-pointer of all parties that
1593 registered an interest in this architecture. CURRENT_GDBARCH
1594 must be updated before these modules are called. */
1595 init_gdbarch_data (new_gdbarch);
1602 /* Functions to manipulate the endianness of the target. */
1604 #ifdef TARGET_BYTE_ORDER_SELECTABLE
1605 /* compat - Catch old targets that expect a selectable byte-order to
1606 default to BIG_ENDIAN */
1607 #ifndef TARGET_BYTE_ORDER_DEFAULT
1608 #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN
1611 #if !TARGET_BYTE_ORDER_SELECTABLE_P
1612 #ifndef TARGET_BYTE_ORDER_DEFAULT
1613 /* compat - Catch old non byte-order selectable targets that do not
1614 define TARGET_BYTE_ORDER_DEFAULT and instead expect
1615 TARGET_BYTE_ORDER to be used as the default. For targets that
1616 defined neither TARGET_BYTE_ORDER nor TARGET_BYTE_ORDER_DEFAULT the
1617 below will get a strange compiler warning. */
1618 #define TARGET_BYTE_ORDER_DEFAULT TARGET_BYTE_ORDER
1621 #ifndef TARGET_BYTE_ORDER_DEFAULT
1622 #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN /* arbitrary */
1624 int target_byte_order = TARGET_BYTE_ORDER_DEFAULT;
1625 int target_byte_order_auto = 1;
1627 /* Chain containing the \"set endian\" commands. */
1628 static struct cmd_list_element *endianlist = NULL;
1630 /* Called by \`\`show endian''. */
1632 show_endian (char *args, int from_tty)
1635 (TARGET_BYTE_ORDER_AUTO
1636 ? "The target endianness is set automatically (currently %s endian)\n"
1637 : "The target is assumed to be %s endian\n");
1638 printf_unfiltered (msg, (TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little"));
1641 /* Called if the user enters \`\`set endian'' without an argument. */
1643 set_endian (char *args, int from_tty)
1645 printf_unfiltered ("\"set endian\" must be followed by \"auto\", \"big\" or \"little\".\n");
1646 show_endian (args, from_tty);
1649 /* Called by \`\`set endian big''. */
1651 set_endian_big (char *args, int from_tty)
1653 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1655 target_byte_order = BIG_ENDIAN;
1656 target_byte_order_auto = 0;
1659 struct gdbarch_info info;
1660 memset (&info, 0, sizeof info);
1661 info.byte_order = BIG_ENDIAN;
1662 gdbarch_update (info);
1667 printf_unfiltered ("Byte order is not selectable.");
1668 show_endian (args, from_tty);
1672 /* Called by \`\`set endian little''. */
1674 set_endian_little (char *args, int from_tty)
1676 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1678 target_byte_order = LITTLE_ENDIAN;
1679 target_byte_order_auto = 0;
1682 struct gdbarch_info info;
1683 memset (&info, 0, sizeof info);
1684 info.byte_order = LITTLE_ENDIAN;
1685 gdbarch_update (info);
1690 printf_unfiltered ("Byte order is not selectable.");
1691 show_endian (args, from_tty);
1695 /* Called by \`\`set endian auto''. */
1697 set_endian_auto (char *args, int from_tty)
1699 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1701 target_byte_order_auto = 1;
1705 printf_unfiltered ("Byte order is not selectable.");
1706 show_endian (args, from_tty);
1710 /* Set the endianness from a BFD. */
1712 set_endian_from_file (bfd *abfd)
1714 if (TARGET_BYTE_ORDER_SELECTABLE_P)
1718 if (bfd_big_endian (abfd))
1721 want = LITTLE_ENDIAN;
1722 if (TARGET_BYTE_ORDER_AUTO)
1723 target_byte_order = want;
1724 else if (TARGET_BYTE_ORDER != want)
1725 warning ("%s endian file does not match %s endian target.",
1726 want == BIG_ENDIAN ? "big" : "little",
1727 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
1731 if (bfd_big_endian (abfd)
1732 ? TARGET_BYTE_ORDER != BIG_ENDIAN
1733 : TARGET_BYTE_ORDER == BIG_ENDIAN)
1734 warning ("%s endian file does not match %s endian target.",
1735 bfd_big_endian (abfd) ? "big" : "little",
1736 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
1742 /* Functions to manipulate the architecture of the target */
1744 enum set_arch { set_arch_auto, set_arch_manual };
1746 int target_architecture_auto = 1;
1747 extern const struct bfd_arch_info bfd_default_arch_struct;
1748 const struct bfd_arch_info *target_architecture = &bfd_default_arch_struct;
1749 int (*target_architecture_hook) (const struct bfd_arch_info *ap);
1751 static void show_endian (char *, int);
1752 static void set_endian (char *, int);
1753 static void set_endian_big (char *, int);
1754 static void set_endian_little (char *, int);
1755 static void set_endian_auto (char *, int);
1756 static void set_endian_from_file (bfd *);
1757 static int arch_ok (const struct bfd_arch_info *arch);
1758 static void set_arch (const struct bfd_arch_info *arch, enum set_arch type);
1759 static void show_architecture (char *, int);
1760 static void set_architecture (char *, int);
1761 static void info_architecture (char *, int);
1762 static void set_architecture_from_file (bfd *);
1764 /* Do the real work of changing the current architecture */
1767 arch_ok (const struct bfd_arch_info *arch)
1769 /* Should be performing the more basic check that the binary is
1770 compatible with GDB. */
1771 /* Check with the target that the architecture is valid. */
1772 return (target_architecture_hook == NULL
1773 || target_architecture_hook (arch));
1777 set_arch (const struct bfd_arch_info *arch,
1783 if (!arch_ok (arch))
1784 warning ("Target may not support %s architecture",
1785 arch->printable_name);
1786 target_architecture = arch;
1788 case set_arch_manual:
1789 if (!arch_ok (arch))
1791 printf_unfiltered ("Target does not support \`%s' architecture.\n",
1792 arch->printable_name);
1796 target_architecture_auto = 0;
1797 target_architecture = arch;
1805 /* Called if the user enters \`\`show architecture'' without an argument. */
1807 show_architecture (char *args, int from_tty)
1810 arch = TARGET_ARCHITECTURE->printable_name;
1811 if (target_architecture_auto)
1812 printf_filtered ("The target architecture is set automatically (currently %s)\n", arch);
1814 printf_filtered ("The target architecture is assumed to be %s\n", arch);
1817 /* Called if the user enters \`\`set architecture'' with or without an
1820 set_architecture (char *args, int from_tty)
1824 printf_unfiltered ("\"set architecture\" must be followed by \"auto\" or an architecture name.\n");
1826 else if (strcmp (args, "auto") == 0)
1828 target_architecture_auto = 1;
1830 else if (GDB_MULTI_ARCH)
1832 const struct bfd_arch_info *arch = bfd_scan_arch (args);
1834 printf_unfiltered ("Architecture \`%s' not reconized.\n", args);
1837 struct gdbarch_info info;
1838 memset (&info, 0, sizeof info);
1839 info.bfd_arch_info = arch;
1840 if (gdbarch_update (info))
1841 target_architecture_auto = 0;
1843 printf_unfiltered ("Architecture \`%s' not reconized.\n", args);
1848 const struct bfd_arch_info *arch = bfd_scan_arch (args);
1850 set_arch (arch, set_arch_manual);
1852 printf_unfiltered ("Architecture \`%s' not reconized.\n", args);
1856 /* Called if the user enters \`\`info architecture'' without an argument. */
1858 info_architecture (char *args, int from_tty)
1860 enum bfd_architecture a;
1863 if (gdbarch_init_registrary != NULL)
1865 struct gdbarch_init_registration *rego;
1866 printf_filtered ("Available architectures are:\n");
1867 for (rego = gdbarch_init_registrary;
1871 const struct bfd_arch_info *ap;
1872 ap = bfd_lookup_arch (rego->bfd_architecture, 0);
1877 printf_filtered (" %s", ap->printable_name);
1881 printf_filtered ("\n");
1887 printf_filtered ("There are no available architectures.\n");
1891 printf_filtered ("Available architectures are:\n");
1892 for (a = bfd_arch_obscure + 1; a < bfd_arch_last; a++)
1894 const struct bfd_arch_info *ap = bfd_lookup_arch (a, 0);
1899 printf_filtered (" %s", ap->printable_name);
1903 printf_filtered ("\n");
1908 /* Set the architecture from arch/machine */
1910 set_architecture_from_arch_mach (arch, mach)
1911 enum bfd_architecture arch;
1914 const struct bfd_arch_info *wanted = bfd_lookup_arch (arch, mach);
1916 set_arch (wanted, set_arch_manual);
1918 internal_error ("gdbarch: hardwired architecture/machine not reconized");
1921 /* Set the architecture from a BFD */
1923 set_architecture_from_file (bfd *abfd)
1925 const struct bfd_arch_info *wanted = bfd_get_arch_info (abfd);
1926 if (target_architecture_auto)
1928 set_arch (wanted, set_arch_auto);
1930 else if (wanted != target_architecture)
1932 warning ("%s architecture file may be incompatible with %s target.",
1933 wanted->printable_name,
1934 target_architecture->printable_name);
1939 /* Misc helper functions for targets. */
1942 frame_num_args_unknown (fi)
1943 struct frame_info *fi;
1950 generic_register_convertible_not (num)
1958 /* Pointer to the target-dependent disassembly function. */
1959 int (*tm_print_insn) (bfd_vma, disassemble_info *);
1960 disassemble_info tm_print_insn_info;
1964 /* Set the dynamic target-system-dependant parameters (architecture,
1965 byte-order) using information found in the BFD */
1968 set_gdbarch_from_file (abfd)
1973 struct gdbarch_info info;
1974 memset (&info, 0, sizeof info);
1976 gdbarch_update (info);
1979 set_architecture_from_file (abfd);
1980 set_endian_from_file (abfd);
1984 #if defined (CALL_DUMMY)
1985 /* FIXME - this should go away */
1986 LONGEST call_dummy_words[] = CALL_DUMMY;
1987 int sizeof_call_dummy_words = sizeof (call_dummy_words);
1991 /* Initialize the current architecture. */
1993 initialize_current_architecture ()
1997 struct gdbarch_init_registration *rego;
1998 const struct bfd_arch_info *chosen = NULL;
1999 for (rego = gdbarch_init_registrary; rego != NULL; rego = rego->next)
2001 const struct bfd_arch_info *ap
2002 = bfd_lookup_arch (rego->bfd_architecture, 0);
2004 /* Choose the first architecture alphabetically. */
2006 || strcmp (ap->printable_name, chosen->printable_name) < 0)
2012 struct gdbarch_info info;
2013 memset (&info, 0, sizeof info);
2014 info.bfd_arch_info = chosen;
2015 gdbarch_update (info);
2020 extern void _initialize_gdbarch (void);
2022 _initialize_gdbarch ()
2024 struct cmd_list_element *c;
2026 add_prefix_cmd ("endian", class_support, set_endian,
2027 "Set endianness of target.",
2028 &endianlist, "set endian ", 0, &setlist);
2029 add_cmd ("big", class_support, set_endian_big,
2030 "Set target as being big endian.", &endianlist);
2031 add_cmd ("little", class_support, set_endian_little,
2032 "Set target as being little endian.", &endianlist);
2033 add_cmd ("auto", class_support, set_endian_auto,
2034 "Select target endianness automatically.", &endianlist);
2035 add_cmd ("endian", class_support, show_endian,
2036 "Show endianness of target.", &showlist);
2038 add_cmd ("architecture", class_support, set_architecture,
2039 "Set architecture of target.", &setlist);
2040 add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
2041 add_cmd ("architecture", class_support, show_architecture,
2042 "Show architecture of target.", &showlist);
2043 add_cmd ("architecture", class_support, info_architecture,
2044 "List supported target architectures", &infolist);
2046 INIT_DISASSEMBLE_INFO_NO_ARCH (tm_print_insn_info, gdb_stdout, (fprintf_ftype)fprintf_filtered);
2047 tm_print_insn_info.flavour = bfd_target_unknown_flavour;
2048 tm_print_insn_info.read_memory_func = dis_asm_read_memory;
2049 tm_print_insn_info.memory_error_func = dis_asm_memory_error;
2050 tm_print_insn_info.print_address_func = dis_asm_print_address;
2052 add_show_from_set (add_set_cmd ("arch",
2055 (char *)&gdbarch_debug,
2056 "Set architecture debugging.\n\\
2057 When non-zero, architecture debugging is enabled.", &setdebuglist),
2059 c = add_set_cmd ("archdebug",
2062 (char *)&gdbarch_debug,
2063 "Set architecture debugging.\n\\
2064 When non-zero, architecture debugging is enabled.", &setlist);
2066 deprecate_cmd (c, "set debug arch");
2067 deprecate_cmd (add_show_from_set (c, &showlist), "show debug arch");
2073 #../move-if-change new-gdbarch.c gdbarch.c
2074 compare_new gdbarch.c
This page took 0.07525 seconds and 4 git commands to generate.