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