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