gdb/
[external/binutils.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2    Copyright 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
3    2001, 2002, 2003 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #include <ctype.h>              /* XXX for isupper () */
23
24 #include "defs.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "symfile.h"
30 #include "gdb_string.h"
31 #include "dis-asm.h"            /* For register flavors. */
32 #include "regcache.h"
33 #include "doublest.h"
34 #include "value.h"
35 #include "arch-utils.h"
36 #include "solib-svr4.h"
37
38 #include "arm-tdep.h"
39 #include "gdb/sim-arm.h"
40
41 #include "elf-bfd.h"
42 #include "coff/internal.h"
43 #include "elf/arm.h"
44
45 #include "gdb_assert.h"
46
47 static int arm_debug;
48
49 /* Each OS has a different mechanism for accessing the various
50    registers stored in the sigcontext structure.
51
52    SIGCONTEXT_REGISTER_ADDRESS should be defined to the name (or
53    function pointer) which may be used to determine the addresses
54    of the various saved registers in the sigcontext structure.
55
56    For the ARM target, there are three parameters to this function. 
57    The first is the pc value of the frame under consideration, the
58    second the stack pointer of this frame, and the last is the
59    register number to fetch.  
60
61    If the tm.h file does not define this macro, then it's assumed that
62    no mechanism is needed and we define SIGCONTEXT_REGISTER_ADDRESS to
63    be 0. 
64    
65    When it comes time to multi-arching this code, see the identically
66    named machinery in ia64-tdep.c for an example of how it could be
67    done.  It should not be necessary to modify the code below where
68    this macro is used.  */
69
70 #ifdef SIGCONTEXT_REGISTER_ADDRESS
71 #ifndef SIGCONTEXT_REGISTER_ADDRESS_P
72 #define SIGCONTEXT_REGISTER_ADDRESS_P() 1
73 #endif
74 #else
75 #define SIGCONTEXT_REGISTER_ADDRESS(SP,PC,REG) 0
76 #define SIGCONTEXT_REGISTER_ADDRESS_P() 0
77 #endif
78
79 /* Macros for setting and testing a bit in a minimal symbol that marks
80    it as Thumb function.  The MSB of the minimal symbol's "info" field
81    is used for this purpose. This field is already being used to store
82    the symbol size, so the assumption is that the symbol size cannot
83    exceed 2^31.
84
85    MSYMBOL_SET_SPECIAL  Actually sets the "special" bit.
86    MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.
87    MSYMBOL_SIZE         Returns the size of the minimal symbol,
88                         i.e. the "info" field with the "special" bit
89                         masked out.  */
90
91 #define MSYMBOL_SET_SPECIAL(msym)                                       \
92         MSYMBOL_INFO (msym) = (char *) (((long) MSYMBOL_INFO (msym))    \
93                                         | 0x80000000)
94
95 #define MSYMBOL_IS_SPECIAL(msym)                                \
96         (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
97
98 #define MSYMBOL_SIZE(msym)                              \
99         ((long) MSYMBOL_INFO (msym) & 0x7fffffff)
100
101 /* Number of different reg name sets (options).  */
102 static int num_flavor_options;
103
104 /* We have more registers than the disassembler as gdb can print the value
105    of special registers as well.
106    The general register names are overwritten by whatever is being used by
107    the disassembler at the moment. We also adjust the case of cpsr and fps.  */
108
109 /* Initial value: Register names used in ARM's ISA documentation.  */
110 static char * arm_register_name_strings[] =
111 {"r0",  "r1",  "r2",  "r3",     /*  0  1  2  3 */
112  "r4",  "r5",  "r6",  "r7",     /*  4  5  6  7 */
113  "r8",  "r9",  "r10", "r11",    /*  8  9 10 11 */
114  "r12", "sp",  "lr",  "pc",     /* 12 13 14 15 */
115  "f0",  "f1",  "f2",  "f3",     /* 16 17 18 19 */
116  "f4",  "f5",  "f6",  "f7",     /* 20 21 22 23 */
117  "fps", "cpsr" };               /* 24 25       */
118 static char **arm_register_names = arm_register_name_strings;
119
120 /* Valid register name flavors.  */
121 static const char **valid_flavors;
122
123 /* Disassembly flavor to use. Default to "std" register names.  */
124 static const char *disassembly_flavor;
125 /* Index to that option in the opcodes table.  */
126 static int current_option;
127
128 /* This is used to keep the bfd arch_info in sync with the disassembly
129    flavor.  */
130 static void set_disassembly_flavor_sfunc(char *, int,
131                                          struct cmd_list_element *);
132 static void set_disassembly_flavor (void);
133
134 static void convert_from_extended (const struct floatformat *, const void *,
135                                    void *);
136 static void convert_to_extended (const struct floatformat *, void *,
137                                  const void *);
138
139 /* Define other aspects of the stack frame.  We keep the offsets of
140    all saved registers, 'cause we need 'em a lot!  We also keep the
141    current size of the stack frame, and the offset of the frame
142    pointer from the stack pointer (for frameless functions, and when
143    we're still in the prologue of a function with a frame).  */
144
145 struct frame_extra_info
146 {
147   int framesize;
148   int frameoffset;
149   int framereg;
150 };
151
152 /* Addresses for calling Thumb functions have the bit 0 set.
153    Here are some macros to test, set, or clear bit 0 of addresses.  */
154 #define IS_THUMB_ADDR(addr)     ((addr) & 1)
155 #define MAKE_THUMB_ADDR(addr)   ((addr) | 1)
156 #define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
157
158 static int
159 arm_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
160 {
161   return (chain != 0 && (FRAME_SAVED_PC (thisframe) >= LOWEST_PC));
162 }
163
164 /* Set to true if the 32-bit mode is in use.  */
165
166 int arm_apcs_32 = 1;
167
168 /* Flag set by arm_fix_call_dummy that tells whether the target
169    function is a Thumb function.  This flag is checked by
170    arm_push_arguments.  FIXME: Change the PUSH_ARGUMENTS macro (and
171    its use in valops.c) to pass the function address as an additional
172    parameter.  */
173
174 static int target_is_thumb;
175
176 /* Flag set by arm_fix_call_dummy that tells whether the calling
177    function is a Thumb function.  This flag is checked by
178    arm_pc_is_thumb and arm_call_dummy_breakpoint_offset.  */
179
180 static int caller_is_thumb;
181
182 /* Determine if the program counter specified in MEMADDR is in a Thumb
183    function.  */
184
185 int
186 arm_pc_is_thumb (CORE_ADDR memaddr)
187 {
188   struct minimal_symbol *sym;
189
190   /* If bit 0 of the address is set, assume this is a Thumb address.  */
191   if (IS_THUMB_ADDR (memaddr))
192     return 1;
193
194   /* Thumb functions have a "special" bit set in minimal symbols.  */
195   sym = lookup_minimal_symbol_by_pc (memaddr);
196   if (sym)
197     {
198       return (MSYMBOL_IS_SPECIAL (sym));
199     }
200   else
201     {
202       return 0;
203     }
204 }
205
206 /* Determine if the program counter specified in MEMADDR is in a call
207    dummy being called from a Thumb function.  */
208
209 int
210 arm_pc_is_thumb_dummy (CORE_ADDR memaddr)
211 {
212   CORE_ADDR sp = read_sp ();
213
214   /* FIXME: Until we switch for the new call dummy macros, this heuristic
215      is the best we can do.  We are trying to determine if the pc is on
216      the stack, which (hopefully) will only happen in a call dummy.
217      We hope the current stack pointer is not so far alway from the dummy
218      frame location (true if we have not pushed large data structures or
219      gone too many levels deep) and that our 1024 is not enough to consider
220      code regions as part of the stack (true for most practical purposes).  */
221   if (DEPRECATED_PC_IN_CALL_DUMMY (memaddr, sp, sp + 1024))
222     return caller_is_thumb;
223   else
224     return 0;
225 }
226
227 /* Remove useless bits from addresses in a running program.  */
228 static CORE_ADDR
229 arm_addr_bits_remove (CORE_ADDR val)
230 {
231   if (arm_apcs_32)
232     return (val & (arm_pc_is_thumb (val) ? 0xfffffffe : 0xfffffffc));
233   else
234     return (val & 0x03fffffc);
235 }
236
237 /* When reading symbols, we need to zap the low bit of the address,
238    which may be set to 1 for Thumb functions.  */
239 static CORE_ADDR
240 arm_smash_text_address (CORE_ADDR val)
241 {
242   return val & ~1;
243 }
244
245 /* Immediately after a function call, return the saved pc.  Can't
246    always go through the frames for this because on some machines the
247    new frame is not set up until the new function executes some
248    instructions.  */
249
250 static CORE_ADDR
251 arm_saved_pc_after_call (struct frame_info *frame)
252 {
253   return ADDR_BITS_REMOVE (read_register (ARM_LR_REGNUM));
254 }
255
256 /* Determine whether the function invocation represented by FI has a
257    frame on the stack associated with it.  If it does return zero,
258    otherwise return 1.  */
259
260 static int
261 arm_frameless_function_invocation (struct frame_info *fi)
262 {
263   CORE_ADDR func_start, after_prologue;
264   int frameless;
265
266   /* Sometimes we have functions that do a little setup (like saving the
267      vN registers with the stmdb instruction, but DO NOT set up a frame.
268      The symbol table will report this as a prologue.  However, it is
269      important not to try to parse these partial frames as frames, or we
270      will get really confused.
271
272      So I will demand 3 instructions between the start & end of the
273      prologue before I call it a real prologue, i.e. at least
274         mov ip, sp,
275         stmdb sp!, {}
276         sub sp, ip, #4.  */
277
278   func_start = (get_pc_function_start (get_frame_pc (fi)) + FUNCTION_START_OFFSET);
279   after_prologue = SKIP_PROLOGUE (func_start);
280
281   /* There are some frameless functions whose first two instructions
282      follow the standard APCS form, in which case after_prologue will
283      be func_start + 8.  */
284
285   frameless = (after_prologue < func_start + 12);
286   return frameless;
287 }
288
289 /* The address of the arguments in the frame.  */
290 static CORE_ADDR
291 arm_frame_args_address (struct frame_info *fi)
292 {
293   return fi->frame;
294 }
295
296 /* The address of the local variables in the frame.  */
297 static CORE_ADDR
298 arm_frame_locals_address (struct frame_info *fi)
299 {
300   return fi->frame;
301 }
302
303 /* The number of arguments being passed in the frame.  */
304 static int
305 arm_frame_num_args (struct frame_info *fi)
306 {
307   /* We have no way of knowing.  */
308   return -1;
309 }
310
311 /* A typical Thumb prologue looks like this:
312    push    {r7, lr}
313    add     sp, sp, #-28
314    add     r7, sp, #12
315    Sometimes the latter instruction may be replaced by:
316    mov     r7, sp
317    
318    or like this:
319    push    {r7, lr}
320    mov     r7, sp
321    sub     sp, #12
322    
323    or, on tpcs, like this:
324    sub     sp,#16
325    push    {r7, lr}
326    (many instructions)
327    mov     r7, sp
328    sub     sp, #12
329
330    There is always one instruction of three classes:
331    1 - push
332    2 - setting of r7
333    3 - adjusting of sp
334    
335    When we have found at least one of each class we are done with the prolog.
336    Note that the "sub sp, #NN" before the push does not count.
337    */
338
339 static CORE_ADDR
340 thumb_skip_prologue (CORE_ADDR pc, CORE_ADDR func_end)
341 {
342   CORE_ADDR current_pc;
343   /* findmask:
344      bit 0 - push { rlist }
345      bit 1 - mov r7, sp  OR  add r7, sp, #imm  (setting of r7)
346      bit 2 - sub sp, #simm  OR  add sp, #simm  (adjusting of sp)
347   */
348   int findmask = 0;
349
350   for (current_pc = pc;
351        current_pc + 2 < func_end && current_pc < pc + 40;
352        current_pc += 2)
353     {
354       unsigned short insn = read_memory_unsigned_integer (current_pc, 2);
355
356       if ((insn & 0xfe00) == 0xb400)            /* push { rlist } */
357         {
358           findmask |= 1;                        /* push found */
359         }
360       else if ((insn & 0xff00) == 0xb000)       /* add sp, #simm  OR  
361                                                    sub sp, #simm */
362         {
363           if ((findmask & 1) == 0)              /* before push ? */
364             continue;
365           else
366             findmask |= 4;                      /* add/sub sp found */
367         }
368       else if ((insn & 0xff00) == 0xaf00)       /* add r7, sp, #imm */
369         {
370           findmask |= 2;                        /* setting of r7 found */
371         }
372       else if (insn == 0x466f)                  /* mov r7, sp */
373         {
374           findmask |= 2;                        /* setting of r7 found */
375         }
376       else if (findmask == (4+2+1))
377         {
378           /* We have found one of each type of prologue instruction */
379           break;
380         }
381       else
382         /* Something in the prolog that we don't care about or some
383            instruction from outside the prolog scheduled here for
384            optimization.  */
385         continue;
386     }
387
388   return current_pc;
389 }
390
391 /* Advance the PC across any function entry prologue instructions to
392    reach some "real" code.
393
394    The APCS (ARM Procedure Call Standard) defines the following
395    prologue:
396
397    mov          ip, sp
398    [stmfd       sp!, {a1,a2,a3,a4}]
399    stmfd        sp!, {...,fp,ip,lr,pc}
400    [stfe        f7, [sp, #-12]!]
401    [stfe        f6, [sp, #-12]!]
402    [stfe        f5, [sp, #-12]!]
403    [stfe        f4, [sp, #-12]!]
404    sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
405
406 static CORE_ADDR
407 arm_skip_prologue (CORE_ADDR pc)
408 {
409   unsigned long inst;
410   CORE_ADDR skip_pc;
411   CORE_ADDR func_addr, func_end = 0;
412   char *func_name;
413   struct symtab_and_line sal;
414
415   /* If we're in a dummy frame, don't even try to skip the prologue.  */
416   if (DEPRECATED_PC_IN_CALL_DUMMY (pc, 0, 0))
417     return pc;
418
419   /* See what the symbol table says.  */
420
421   if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
422     {
423       struct symbol *sym;
424
425       /* Found a function.  */
426       sym = lookup_symbol (func_name, NULL, VAR_NAMESPACE, NULL, NULL);
427       if (sym && SYMBOL_LANGUAGE (sym) != language_asm)
428         {
429           /* Don't use this trick for assembly source files.  */
430           sal = find_pc_line (func_addr, 0);
431           if ((sal.line != 0) && (sal.end < func_end))
432             return sal.end;
433         }
434     }
435
436   /* Check if this is Thumb code.  */
437   if (arm_pc_is_thumb (pc))
438     return thumb_skip_prologue (pc, func_end);
439
440   /* Can't find the prologue end in the symbol table, try it the hard way
441      by disassembling the instructions.  */
442
443   /* Like arm_scan_prologue, stop no later than pc + 64. */
444   if (func_end == 0 || func_end > pc + 64)
445     func_end = pc + 64;
446
447   for (skip_pc = pc; skip_pc < func_end; skip_pc += 4)
448     {
449       inst = read_memory_integer (skip_pc, 4);
450
451       /* "mov ip, sp" is no longer a required part of the prologue.  */
452       if (inst == 0xe1a0c00d)                   /* mov ip, sp */
453         continue;
454
455       /* Some prologues begin with "str lr, [sp, #-4]!".  */
456       if (inst == 0xe52de004)                   /* str lr, [sp, #-4]! */
457         continue;
458
459       if ((inst & 0xfffffff0) == 0xe92d0000)    /* stmfd sp!,{a1,a2,a3,a4} */
460         continue;
461
462       if ((inst & 0xfffff800) == 0xe92dd800)    /* stmfd sp!,{fp,ip,lr,pc} */
463         continue;
464
465       /* Any insns after this point may float into the code, if it makes
466          for better instruction scheduling, so we skip them only if we
467          find them, but still consider the function to be frame-ful.  */
468
469       /* We may have either one sfmfd instruction here, or several stfe
470          insns, depending on the version of floating point code we
471          support.  */
472       if ((inst & 0xffbf0fff) == 0xec2d0200)    /* sfmfd fn, <cnt>, [sp]! */
473         continue;
474
475       if ((inst & 0xffff8fff) == 0xed6d0103)    /* stfe fn, [sp, #-12]! */
476         continue;
477
478       if ((inst & 0xfffff000) == 0xe24cb000)    /* sub fp, ip, #nn */
479         continue;
480
481       if ((inst & 0xfffff000) == 0xe24dd000)    /* sub sp, sp, #nn */
482         continue;
483
484       if ((inst & 0xffffc000) == 0xe54b0000 ||  /* strb r(0123),[r11,#-nn] */
485           (inst & 0xffffc0f0) == 0xe14b00b0 ||  /* strh r(0123),[r11,#-nn] */
486           (inst & 0xffffc000) == 0xe50b0000)    /* str  r(0123),[r11,#-nn] */
487         continue;
488
489       if ((inst & 0xffffc000) == 0xe5cd0000 ||  /* strb r(0123),[sp,#nn] */
490           (inst & 0xffffc0f0) == 0xe1cd00b0 ||  /* strh r(0123),[sp,#nn] */
491           (inst & 0xffffc000) == 0xe58d0000)    /* str  r(0123),[sp,#nn] */
492         continue;
493
494       /* Un-recognized instruction; stop scanning.  */
495       break;
496     }
497
498   return skip_pc;               /* End of prologue */
499 }
500
501 /* *INDENT-OFF* */
502 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
503    This function decodes a Thumb function prologue to determine:
504      1) the size of the stack frame
505      2) which registers are saved on it
506      3) the offsets of saved regs
507      4) the offset from the stack pointer to the frame pointer
508    This information is stored in the "extra" fields of the frame_info.
509
510    A typical Thumb function prologue would create this stack frame
511    (offsets relative to FP)
512      old SP ->  24  stack parameters
513                 20  LR
514                 16  R7
515      R7 ->       0  local variables (16 bytes)
516      SP ->     -12  additional stack space (12 bytes)
517    The frame size would thus be 36 bytes, and the frame offset would be
518    12 bytes.  The frame register is R7. 
519    
520    The comments for thumb_skip_prolog() describe the algorithm we use
521    to detect the end of the prolog.  */
522 /* *INDENT-ON* */
523
524 static void
525 thumb_scan_prologue (struct frame_info *fi)
526 {
527   CORE_ADDR prologue_start;
528   CORE_ADDR prologue_end;
529   CORE_ADDR current_pc;
530   /* Which register has been copied to register n?  */
531   int saved_reg[16];
532   /* findmask:
533      bit 0 - push { rlist }
534      bit 1 - mov r7, sp  OR  add r7, sp, #imm  (setting of r7)
535      bit 2 - sub sp, #simm  OR  add sp, #simm  (adjusting of sp)
536   */
537   int findmask = 0;
538   int i;
539
540   /* Don't try to scan dummy frames.  */
541   if (fi != NULL
542       && DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), 0, 0))
543     return;
544
545   if (find_pc_partial_function (get_frame_pc (fi), NULL, &prologue_start, &prologue_end))
546     {
547       struct symtab_and_line sal = find_pc_line (prologue_start, 0);
548
549       if (sal.line == 0)                /* no line info, use current PC  */
550         prologue_end = get_frame_pc (fi);
551       else if (sal.end < prologue_end)  /* next line begins after fn end */
552         prologue_end = sal.end;         /* (probably means no prologue)  */
553     }
554   else
555     /* We're in the boondocks: allow for 
556        16 pushes, an add, and "mv fp,sp".  */
557     prologue_end = prologue_start + 40;
558
559   prologue_end = min (prologue_end, get_frame_pc (fi));
560
561   /* Initialize the saved register map.  When register H is copied to
562      register L, we will put H in saved_reg[L].  */
563   for (i = 0; i < 16; i++)
564     saved_reg[i] = i;
565
566   /* Search the prologue looking for instructions that set up the
567      frame pointer, adjust the stack pointer, and save registers.
568      Do this until all basic prolog instructions are found.  */
569
570   fi->extra_info->framesize = 0;
571   for (current_pc = prologue_start;
572        (current_pc < prologue_end) && ((findmask & 7) != 7);
573        current_pc += 2)
574     {
575       unsigned short insn;
576       int regno;
577       int offset;
578
579       insn = read_memory_unsigned_integer (current_pc, 2);
580
581       if ((insn & 0xfe00) == 0xb400)    /* push { rlist } */
582         {
583           int mask;
584           findmask |= 1;                /* push found */
585           /* Bits 0-7 contain a mask for registers R0-R7.  Bit 8 says
586              whether to save LR (R14).  */
587           mask = (insn & 0xff) | ((insn & 0x100) << 6);
588
589           /* Calculate offsets of saved R0-R7 and LR.  */
590           for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
591             if (mask & (1 << regno))
592               {
593                 fi->extra_info->framesize += 4;
594                 get_frame_saved_regs (fi)[saved_reg[regno]] =
595                   -(fi->extra_info->framesize);
596                 /* Reset saved register map.  */
597                 saved_reg[regno] = regno;
598               }
599         }
600       else if ((insn & 0xff00) == 0xb000)       /* add sp, #simm  OR  
601                                                    sub sp, #simm */
602         {
603           if ((findmask & 1) == 0)              /* before push?  */
604             continue;
605           else
606             findmask |= 4;                      /* add/sub sp found */
607           
608           offset = (insn & 0x7f) << 2;          /* get scaled offset */
609           if (insn & 0x80)              /* is it signed? (==subtracting) */
610             {
611               fi->extra_info->frameoffset += offset;
612               offset = -offset;
613             }
614           fi->extra_info->framesize -= offset;
615         }
616       else if ((insn & 0xff00) == 0xaf00)       /* add r7, sp, #imm */
617         {
618           findmask |= 2;                        /* setting of r7 found */
619           fi->extra_info->framereg = THUMB_FP_REGNUM;
620           /* get scaled offset */
621           fi->extra_info->frameoffset = (insn & 0xff) << 2;
622         }
623       else if (insn == 0x466f)                  /* mov r7, sp */
624         {
625           findmask |= 2;                        /* setting of r7 found */
626           fi->extra_info->framereg = THUMB_FP_REGNUM;
627           fi->extra_info->frameoffset = 0;
628           saved_reg[THUMB_FP_REGNUM] = ARM_SP_REGNUM;
629         }
630       else if ((insn & 0xffc0) == 0x4640)       /* mov r0-r7, r8-r15 */
631         {
632           int lo_reg = insn & 7;                /* dest.  register (r0-r7) */
633           int hi_reg = ((insn >> 3) & 7) + 8;   /* source register (r8-15) */
634           saved_reg[lo_reg] = hi_reg;           /* remember hi reg was saved */
635         }
636       else
637         /* Something in the prolog that we don't care about or some
638            instruction from outside the prolog scheduled here for
639            optimization.  */ 
640         continue;
641     }
642 }
643
644 /* Check if prologue for this frame's PC has already been scanned.  If
645    it has, copy the relevant information about that prologue and
646    return non-zero.  Otherwise do not copy anything and return zero.
647
648    The information saved in the cache includes:
649    * the frame register number;
650    * the size of the stack frame;
651    * the offsets of saved regs (relative to the old SP); and
652    * the offset from the stack pointer to the frame pointer
653
654    The cache contains only one entry, since this is adequate for the
655    typical sequence of prologue scan requests we get.  When performing
656    a backtrace, GDB will usually ask to scan the same function twice
657    in a row (once to get the frame chain, and once to fill in the
658    extra frame information).  */
659
660 static struct frame_info prologue_cache;
661
662 static int
663 check_prologue_cache (struct frame_info *fi)
664 {
665   int i;
666
667   if (get_frame_pc (fi) == get_frame_pc (&prologue_cache))
668     {
669       fi->extra_info->framereg = prologue_cache.extra_info->framereg;
670       fi->extra_info->framesize = prologue_cache.extra_info->framesize;
671       fi->extra_info->frameoffset = prologue_cache.extra_info->frameoffset;
672       for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
673         get_frame_saved_regs (fi)[i] = get_frame_saved_regs (&prologue_cache)[i];
674       return 1;
675     }
676   else
677     return 0;
678 }
679
680
681 /* Copy the prologue information from fi to the prologue cache.  */
682
683 static void
684 save_prologue_cache (struct frame_info *fi)
685 {
686   int i;
687
688   deprecated_update_frame_pc_hack (&prologue_cache, get_frame_pc (fi));
689   prologue_cache.extra_info->framereg = fi->extra_info->framereg;
690   prologue_cache.extra_info->framesize = fi->extra_info->framesize;
691   prologue_cache.extra_info->frameoffset = fi->extra_info->frameoffset;
692
693   for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
694     get_frame_saved_regs (&prologue_cache)[i] = get_frame_saved_regs (fi)[i];
695 }
696
697
698 /* This function decodes an ARM function prologue to determine:
699    1) the size of the stack frame
700    2) which registers are saved on it
701    3) the offsets of saved regs
702    4) the offset from the stack pointer to the frame pointer
703    This information is stored in the "extra" fields of the frame_info.
704
705    There are two basic forms for the ARM prologue.  The fixed argument
706    function call will look like:
707
708    mov    ip, sp
709    stmfd  sp!, {fp, ip, lr, pc}
710    sub    fp, ip, #4
711    [sub sp, sp, #4]
712
713    Which would create this stack frame (offsets relative to FP):
714    IP ->   4    (caller's stack)
715    FP ->   0    PC (points to address of stmfd instruction + 8 in callee)
716    -4   LR (return address in caller)
717    -8   IP (copy of caller's SP)
718    -12  FP (caller's FP)
719    SP -> -28    Local variables
720
721    The frame size would thus be 32 bytes, and the frame offset would be
722    28 bytes.  The stmfd call can also save any of the vN registers it
723    plans to use, which increases the frame size accordingly.
724
725    Note: The stored PC is 8 off of the STMFD instruction that stored it
726    because the ARM Store instructions always store PC + 8 when you read
727    the PC register.
728
729    A variable argument function call will look like:
730
731    mov    ip, sp
732    stmfd  sp!, {a1, a2, a3, a4}
733    stmfd  sp!, {fp, ip, lr, pc}
734    sub    fp, ip, #20
735
736    Which would create this stack frame (offsets relative to FP):
737    IP ->  20    (caller's stack)
738    16  A4
739    12  A3
740    8  A2
741    4  A1
742    FP ->   0    PC (points to address of stmfd instruction + 8 in callee)
743    -4   LR (return address in caller)
744    -8   IP (copy of caller's SP)
745    -12  FP (caller's FP)
746    SP -> -28    Local variables
747
748    The frame size would thus be 48 bytes, and the frame offset would be
749    28 bytes.
750
751    There is another potential complication, which is that the optimizer
752    will try to separate the store of fp in the "stmfd" instruction from
753    the "sub fp, ip, #NN" instruction.  Almost anything can be there, so
754    we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
755
756    Also, note, the original version of the ARM toolchain claimed that there
757    should be an
758
759    instruction at the end of the prologue.  I have never seen GCC produce
760    this, and the ARM docs don't mention it.  We still test for it below in
761    case it happens...
762
763  */
764
765 static void
766 arm_scan_prologue (struct frame_info *fi)
767 {
768   int regno, sp_offset, fp_offset;
769   LONGEST return_value;
770   CORE_ADDR prologue_start, prologue_end, current_pc;
771
772   /* Check if this function is already in the cache of frame information.  */
773   if (check_prologue_cache (fi))
774     return;
775
776   /* Assume there is no frame until proven otherwise.  */
777   fi->extra_info->framereg = ARM_SP_REGNUM;
778   fi->extra_info->framesize = 0;
779   fi->extra_info->frameoffset = 0;
780
781   /* Check for Thumb prologue.  */
782   if (arm_pc_is_thumb (get_frame_pc (fi)))
783     {
784       thumb_scan_prologue (fi);
785       save_prologue_cache (fi);
786       return;
787     }
788
789   /* Find the function prologue.  If we can't find the function in
790      the symbol table, peek in the stack frame to find the PC.  */
791   if (find_pc_partial_function (get_frame_pc (fi), NULL, &prologue_start, &prologue_end))
792     {
793       /* One way to find the end of the prologue (which works well
794          for unoptimized code) is to do the following:
795
796             struct symtab_and_line sal = find_pc_line (prologue_start, 0);
797
798             if (sal.line == 0)
799               prologue_end = get_frame_pc (fi);
800             else if (sal.end < prologue_end)
801               prologue_end = sal.end;
802
803          This mechanism is very accurate so long as the optimizer
804          doesn't move any instructions from the function body into the
805          prologue.  If this happens, sal.end will be the last
806          instruction in the first hunk of prologue code just before
807          the first instruction that the scheduler has moved from
808          the body to the prologue.
809
810          In order to make sure that we scan all of the prologue
811          instructions, we use a slightly less accurate mechanism which
812          may scan more than necessary.  To help compensate for this
813          lack of accuracy, the prologue scanning loop below contains
814          several clauses which'll cause the loop to terminate early if
815          an implausible prologue instruction is encountered.  
816          
817          The expression
818          
819               prologue_start + 64
820             
821          is a suitable endpoint since it accounts for the largest
822          possible prologue plus up to five instructions inserted by
823          the scheduler.  */
824          
825       if (prologue_end > prologue_start + 64)
826         {
827           prologue_end = prologue_start + 64;   /* See above.  */
828         }
829     }
830   else
831     {
832       /* Get address of the stmfd in the prologue of the callee; 
833          the saved PC is the address of the stmfd + 8.  */
834       if (!safe_read_memory_integer (fi->frame, 4,  &return_value))
835         return;
836       else
837         {
838           prologue_start = ADDR_BITS_REMOVE (return_value) - 8;
839           prologue_end = prologue_start + 64;   /* See above.  */
840         }
841     }
842
843   /* Now search the prologue looking for instructions that set up the
844      frame pointer, adjust the stack pointer, and save registers.
845
846      Be careful, however, and if it doesn't look like a prologue,
847      don't try to scan it.  If, for instance, a frameless function
848      begins with stmfd sp!, then we will tell ourselves there is
849      a frame, which will confuse stack traceback, as well as "finish" 
850      and other operations that rely on a knowledge of the stack
851      traceback.
852
853      In the APCS, the prologue should start with  "mov ip, sp" so
854      if we don't see this as the first insn, we will stop.  
855
856      [Note: This doesn't seem to be true any longer, so it's now an
857      optional part of the prologue.  - Kevin Buettner, 2001-11-20]
858
859      [Note further: The "mov ip,sp" only seems to be missing in
860      frameless functions at optimization level "-O2" or above,
861      in which case it is often (but not always) replaced by
862      "str lr, [sp, #-4]!".  - Michael Snyder, 2002-04-23]  */
863
864   sp_offset = fp_offset = 0;
865
866   for (current_pc = prologue_start;
867        current_pc < prologue_end;
868        current_pc += 4)
869     {
870       unsigned int insn = read_memory_unsigned_integer (current_pc, 4);
871
872       if (insn == 0xe1a0c00d)           /* mov ip, sp */
873         {
874           continue;
875         }
876       else if (insn == 0xe52de004)      /* str lr, [sp, #-4]! */
877         {
878           /* Function is frameless: extra_info defaults OK?  */
879           continue;
880         }
881       else if ((insn & 0xffff0000) == 0xe92d0000)
882         /* stmfd sp!, {..., fp, ip, lr, pc}
883            or
884            stmfd sp!, {a1, a2, a3, a4}  */
885         {
886           int mask = insn & 0xffff;
887
888           /* Calculate offsets of saved registers.  */
889           for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
890             if (mask & (1 << regno))
891               {
892                 sp_offset -= 4;
893                 get_frame_saved_regs (fi)[regno] = sp_offset;
894               }
895         }
896       else if ((insn & 0xffffc000) == 0xe54b0000 ||     /* strb rx,[r11,#-n] */
897                (insn & 0xffffc0f0) == 0xe14b00b0 ||     /* strh rx,[r11,#-n] */
898                (insn & 0xffffc000) == 0xe50b0000)       /* str  rx,[r11,#-n] */
899         {
900           /* No need to add this to saved_regs -- it's just an arg reg.  */
901           continue;
902         }
903       else if ((insn & 0xffffc000) == 0xe5cd0000 ||     /* strb rx,[sp,#n] */
904                (insn & 0xffffc0f0) == 0xe1cd00b0 ||     /* strh rx,[sp,#n] */
905                (insn & 0xffffc000) == 0xe58d0000)       /* str  rx,[sp,#n] */
906         {
907           /* No need to add this to saved_regs -- it's just an arg reg.  */
908           continue;
909         }
910       else if ((insn & 0xfffff000) == 0xe24cb000)       /* sub fp, ip #n */
911         {
912           unsigned imm = insn & 0xff;                   /* immediate value */
913           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
914           imm = (imm >> rot) | (imm << (32 - rot));
915           fp_offset = -imm;
916           fi->extra_info->framereg = ARM_FP_REGNUM;
917         }
918       else if ((insn & 0xfffff000) == 0xe24dd000)       /* sub sp, sp #n */
919         {
920           unsigned imm = insn & 0xff;                   /* immediate value */
921           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
922           imm = (imm >> rot) | (imm << (32 - rot));
923           sp_offset -= imm;
924         }
925       else if ((insn & 0xffff7fff) == 0xed6d0103)       /* stfe f?, [sp, -#c]! */
926         {
927           sp_offset -= 12;
928           regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
929           get_frame_saved_regs (fi)[regno] = sp_offset;
930         }
931       else if ((insn & 0xffbf0fff) == 0xec2d0200)       /* sfmfd f0, 4, [sp!] */
932         {
933           int n_saved_fp_regs;
934           unsigned int fp_start_reg, fp_bound_reg;
935
936           if ((insn & 0x800) == 0x800)          /* N0 is set */
937             {
938               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
939                 n_saved_fp_regs = 3;
940               else
941                 n_saved_fp_regs = 1;
942             }
943           else
944             {
945               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
946                 n_saved_fp_regs = 2;
947               else
948                 n_saved_fp_regs = 4;
949             }
950
951           fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
952           fp_bound_reg = fp_start_reg + n_saved_fp_regs;
953           for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
954             {
955               sp_offset -= 12;
956               get_frame_saved_regs (fi)[fp_start_reg++] = sp_offset;
957             }
958         }
959       else if ((insn & 0xf0000000) != 0xe0000000)
960         break;                  /* Condition not true, exit early */
961       else if ((insn & 0xfe200000) == 0xe8200000)       /* ldm? */
962         break;                  /* Don't scan past a block load */
963       else
964         /* The optimizer might shove anything into the prologue,
965            so we just skip what we don't recognize.  */
966         continue;
967     }
968
969   /* The frame size is just the negative of the offset (from the
970      original SP) of the last thing thing we pushed on the stack. 
971      The frame offset is [new FP] - [new SP].  */
972   fi->extra_info->framesize = -sp_offset;
973   if (fi->extra_info->framereg == ARM_FP_REGNUM)
974     fi->extra_info->frameoffset = fp_offset - sp_offset;
975   else
976     fi->extra_info->frameoffset = 0;
977
978   save_prologue_cache (fi);
979 }
980
981 /* Find REGNUM on the stack.  Otherwise, it's in an active register.
982    One thing we might want to do here is to check REGNUM against the
983    clobber mask, and somehow flag it as invalid if it isn't saved on
984    the stack somewhere.  This would provide a graceful failure mode
985    when trying to get the value of caller-saves registers for an inner
986    frame.  */
987
988 static CORE_ADDR
989 arm_find_callers_reg (struct frame_info *fi, int regnum)
990 {
991   /* NOTE: cagney/2002-05-03: This function really shouldn't be
992      needed.  Instead the (still being written) register unwind
993      function could be called directly.  */
994   for (; fi; fi = fi->next)
995     {
996       if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), 0, 0))
997         {
998           return deprecated_read_register_dummy (get_frame_pc (fi), fi->frame, regnum);
999         }
1000       else if (get_frame_saved_regs (fi)[regnum] != 0)
1001         {
1002           /* NOTE: cagney/2002-05-03: This would normally need to
1003              handle ARM_SP_REGNUM as a special case as, according to
1004              the frame.h comments, saved_regs[SP_REGNUM] contains the
1005              SP value not its address.  It appears that the ARM isn't
1006              doing this though.  */
1007           return read_memory_integer (get_frame_saved_regs (fi)[regnum],
1008                                       REGISTER_RAW_SIZE (regnum));
1009         }
1010     }
1011   return read_register (regnum);
1012 }
1013 /* Function: frame_chain Given a GDB frame, determine the address of
1014    the calling function's frame.  This will be used to create a new
1015    GDB frame struct, and then INIT_EXTRA_FRAME_INFO and
1016    DEPRECATED_INIT_FRAME_PC will be called for the new frame.  For
1017    ARM, we save the frame size when we initialize the frame_info.  */
1018
1019 static CORE_ADDR
1020 arm_frame_chain (struct frame_info *fi)
1021 {
1022   CORE_ADDR caller_pc;
1023   int framereg = fi->extra_info->framereg;
1024
1025   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), 0, 0))
1026     /* A generic call dummy's frame is the same as caller's.  */
1027     return fi->frame;
1028
1029   if (get_frame_pc (fi) < LOWEST_PC)
1030     return 0;
1031
1032   /* If the caller is the startup code, we're at the end of the chain.  */
1033   caller_pc = FRAME_SAVED_PC (fi);
1034
1035   /* If the caller is Thumb and the caller is ARM, or vice versa,
1036      the frame register of the caller is different from ours.
1037      So we must scan the prologue of the caller to determine its
1038      frame register number.  */
1039   /* XXX Fixme, we should try to do this without creating a temporary
1040      caller_fi.  */
1041   if (arm_pc_is_thumb (caller_pc) != arm_pc_is_thumb (get_frame_pc (fi)))
1042     {
1043       struct frame_info caller_fi;
1044       struct cleanup *old_chain;
1045
1046       /* Create a temporary frame suitable for scanning the caller's
1047          prologue.  (Ugh.)  */
1048       memset (&caller_fi, 0, sizeof (caller_fi));
1049       caller_fi.extra_info = (struct frame_extra_info *)
1050         xcalloc (1, sizeof (struct frame_extra_info));
1051       old_chain = make_cleanup (xfree, caller_fi.extra_info);
1052       caller_fi.saved_regs = (CORE_ADDR *)
1053         xcalloc (1, SIZEOF_FRAME_SAVED_REGS);
1054       make_cleanup (xfree, caller_fi.saved_regs);
1055
1056       /* Now, scan the prologue and obtain the frame register.  */
1057       deprecated_update_frame_pc_hack (&caller_fi, caller_pc);
1058       arm_scan_prologue (&caller_fi);
1059       framereg = caller_fi.extra_info->framereg;
1060
1061       /* Deallocate the storage associated with the temporary frame
1062          created above.  */
1063       do_cleanups (old_chain);
1064     }
1065
1066   /* If the caller used a frame register, return its value.
1067      Otherwise, return the caller's stack pointer.  */
1068   if (framereg == ARM_FP_REGNUM || framereg == THUMB_FP_REGNUM)
1069     return arm_find_callers_reg (fi, framereg);
1070   else
1071     return fi->frame + fi->extra_info->framesize;
1072 }
1073
1074 /* This function actually figures out the frame address for a given pc
1075    and sp.  This is tricky because we sometimes don't use an explicit
1076    frame pointer, and the previous stack pointer isn't necessarily
1077    recorded on the stack.  The only reliable way to get this info is
1078    to examine the prologue.  FROMLEAF is a little confusing, it means
1079    this is the next frame up the chain AFTER a frameless function.  If
1080    this is true, then the frame value for this frame is still in the
1081    fp register.  */
1082
1083 static void
1084 arm_init_extra_frame_info (int fromleaf, struct frame_info *fi)
1085 {
1086   int reg;
1087   CORE_ADDR sp;
1088
1089   if (get_frame_saved_regs (fi) == NULL)
1090     frame_saved_regs_zalloc (fi);
1091
1092   fi->extra_info = (struct frame_extra_info *)
1093     frame_obstack_alloc (sizeof (struct frame_extra_info));
1094
1095   fi->extra_info->framesize = 0;
1096   fi->extra_info->frameoffset = 0;
1097   fi->extra_info->framereg = 0;
1098
1099   if (fi->next)
1100     deprecated_update_frame_pc_hack (fi, FRAME_SAVED_PC (fi->next));
1101
1102   memset (get_frame_saved_regs (fi), '\000', sizeof get_frame_saved_regs (fi));
1103
1104   /* Compute stack pointer for this frame.  We use this value for both
1105      the sigtramp and call dummy cases.  */
1106   if (!fi->next)
1107     sp = read_sp();
1108   else if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi->next), 0, 0))
1109     /* For generic dummy frames, pull the value direct from the frame.
1110        Having an unwind function to do this would be nice.  */
1111     sp = deprecated_read_register_dummy (get_frame_pc (fi->next), fi->next->frame,
1112                                          ARM_SP_REGNUM);
1113   else
1114     sp = (fi->next->frame - fi->next->extra_info->frameoffset
1115           + fi->next->extra_info->framesize);
1116
1117   /* Determine whether or not we're in a sigtramp frame.
1118      Unfortunately, it isn't sufficient to test (get_frame_type (fi)
1119      == SIGTRAMP_FRAME) because this value is sometimes set after
1120      invoking INIT_EXTRA_FRAME_INFO.  So we test *both*
1121      (get_frame_type (fi) == SIGTRAMP_FRAME) and PC_IN_SIGTRAMP to
1122      determine if we need to use the sigcontext addresses for the
1123      saved registers.
1124
1125      Note: If an ARM PC_IN_SIGTRAMP method ever needs to compare
1126      against the name of the function, the code below will have to be
1127      changed to first fetch the name of the function and then pass
1128      this name to PC_IN_SIGTRAMP.  */
1129
1130   /* FIXME: cagney/2002-11-18: This problem will go away once
1131      frame.c:get_prev_frame() is modified to set the frame's type
1132      before calling functions like this.  */
1133
1134   if (SIGCONTEXT_REGISTER_ADDRESS_P () 
1135       && ((get_frame_type (fi) == SIGTRAMP_FRAME) || PC_IN_SIGTRAMP (get_frame_pc (fi), (char *)0)))
1136     {
1137       for (reg = 0; reg < NUM_REGS; reg++)
1138         get_frame_saved_regs (fi)[reg] = SIGCONTEXT_REGISTER_ADDRESS (sp, get_frame_pc (fi), reg);
1139
1140       /* FIXME: What about thumb mode?  */
1141       fi->extra_info->framereg = ARM_SP_REGNUM;
1142       fi->frame =
1143         read_memory_integer (get_frame_saved_regs (fi)[fi->extra_info->framereg],
1144                              REGISTER_RAW_SIZE (fi->extra_info->framereg));
1145       fi->extra_info->framesize = 0;
1146       fi->extra_info->frameoffset = 0;
1147
1148     }
1149   else
1150     {
1151       arm_scan_prologue (fi);
1152
1153       if (!fi->next)
1154         /* This is the innermost frame?  */
1155         fi->frame = read_register (fi->extra_info->framereg);
1156       else if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi->next), 0, 0))
1157         /* Next inner most frame is a dummy, just grab its frame.
1158            Dummy frames always have the same FP as their caller.  */
1159         fi->frame = fi->next->frame;
1160       else if (fi->extra_info->framereg == ARM_FP_REGNUM
1161                || fi->extra_info->framereg == THUMB_FP_REGNUM)
1162         {
1163           /* not the innermost frame */
1164           /* If we have an FP, the callee saved it.  */
1165           if (get_frame_saved_regs (get_next_frame (fi))[fi->extra_info->framereg] != 0)
1166             fi->frame =
1167               read_memory_integer (get_frame_saved_regs (get_next_frame (fi))[fi->extra_info->framereg], 4);
1168           else if (fromleaf)
1169             /* If we were called by a frameless fn.  then our frame is
1170                still in the frame pointer register on the board...  */
1171             fi->frame = read_fp ();
1172         }
1173
1174       /* Calculate actual addresses of saved registers using offsets
1175          determined by arm_scan_prologue.  */
1176       for (reg = 0; reg < NUM_REGS; reg++)
1177         if (get_frame_saved_regs (fi)[reg] != 0)
1178           get_frame_saved_regs (fi)[reg] += (fi->frame + fi->extra_info->framesize
1179                                              - fi->extra_info->frameoffset);
1180     }
1181 }
1182
1183
1184 /* Find the caller of this frame.  We do this by seeing if ARM_LR_REGNUM
1185    is saved in the stack anywhere, otherwise we get it from the
1186    registers.
1187
1188    The old definition of this function was a macro:
1189    #define FRAME_SAVED_PC(FRAME) \
1190    ADDR_BITS_REMOVE (read_memory_integer ((FRAME)->frame - 4, 4)) */
1191
1192 static CORE_ADDR
1193 arm_frame_saved_pc (struct frame_info *fi)
1194 {
1195   /* If a dummy frame, pull the PC out of the frame's register buffer.  */
1196   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), 0, 0))
1197     return deprecated_read_register_dummy (get_frame_pc (fi), fi->frame, ARM_PC_REGNUM);
1198
1199   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), fi->frame - fi->extra_info->frameoffset,
1200                         fi->frame))
1201     {
1202       return read_memory_integer (get_frame_saved_regs (fi)[ARM_PC_REGNUM],
1203                                   REGISTER_RAW_SIZE (ARM_PC_REGNUM));
1204     }
1205   else
1206     {
1207       CORE_ADDR pc = arm_find_callers_reg (fi, ARM_LR_REGNUM);
1208       return IS_THUMB_ADDR (pc) ? UNMAKE_THUMB_ADDR (pc) : pc;
1209     }
1210 }
1211
1212 /* Return the frame address.  On ARM, it is R11; on Thumb it is R7.
1213    Examine the Program Status Register to decide which state we're in.  */
1214
1215 static CORE_ADDR
1216 arm_read_fp (void)
1217 {
1218   if (read_register (ARM_PS_REGNUM) & 0x20)     /* Bit 5 is Thumb state bit */
1219     return read_register (THUMB_FP_REGNUM);     /* R7 if Thumb */
1220   else
1221     return read_register (ARM_FP_REGNUM);       /* R11 if ARM */
1222 }
1223
1224 /* Store into a struct frame_saved_regs the addresses of the saved
1225    registers of frame described by FRAME_INFO.  This includes special
1226    registers such as PC and FP saved in special ways in the stack
1227    frame.  SP is even more special: the address we return for it IS
1228    the sp for the next frame.  */
1229
1230 static void
1231 arm_frame_init_saved_regs (struct frame_info *fip)
1232 {
1233
1234   if (get_frame_saved_regs (fip))
1235     return;
1236
1237   arm_init_extra_frame_info (0, fip);
1238 }
1239
1240 /* Set the return address for a generic dummy frame.  ARM uses the
1241    entry point.  */
1242
1243 static CORE_ADDR
1244 arm_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
1245 {
1246   write_register (ARM_LR_REGNUM, CALL_DUMMY_ADDRESS ());
1247   return sp;
1248 }
1249
1250 /* Push an empty stack frame, to record the current PC, etc.  */
1251
1252 static void
1253 arm_push_dummy_frame (void)
1254 {
1255   CORE_ADDR old_sp = read_register (ARM_SP_REGNUM);
1256   CORE_ADDR sp = old_sp;
1257   CORE_ADDR fp, prologue_start;
1258   int regnum;
1259
1260   /* Push the two dummy prologue instructions in reverse order,
1261      so that they'll be in the correct low-to-high order in memory.  */
1262   /* sub     fp, ip, #4 */
1263   sp = push_word (sp, 0xe24cb004);
1264   /*  stmdb   sp!, {r0-r10, fp, ip, lr, pc} */
1265   prologue_start = sp = push_word (sp, 0xe92ddfff);
1266
1267   /* Push a pointer to the dummy prologue + 12, because when stm
1268      instruction stores the PC, it stores the address of the stm
1269      instruction itself plus 12.  */
1270   fp = sp = push_word (sp, prologue_start + 12);
1271
1272   /* Push the processor status.  */
1273   sp = push_word (sp, read_register (ARM_PS_REGNUM));
1274
1275   /* Push all 16 registers starting with r15.  */
1276   for (regnum = ARM_PC_REGNUM; regnum >= 0; regnum--)
1277     sp = push_word (sp, read_register (regnum));
1278
1279   /* Update fp (for both Thumb and ARM) and sp.  */
1280   write_register (ARM_FP_REGNUM, fp);
1281   write_register (THUMB_FP_REGNUM, fp);
1282   write_register (ARM_SP_REGNUM, sp);
1283 }
1284
1285 /* CALL_DUMMY_WORDS:
1286    This sequence of words is the instructions
1287
1288    mov  lr,pc
1289    mov  pc,r4
1290    illegal
1291
1292    Note this is 12 bytes.  */
1293
1294 static LONGEST arm_call_dummy_words[] =
1295 {
1296   0xe1a0e00f, 0xe1a0f004, 0xe7ffdefe
1297 };
1298
1299 /* Adjust the call_dummy_breakpoint_offset for the bp_call_dummy
1300    breakpoint to the proper address in the call dummy, so that
1301    `finish' after a stop in a call dummy works.
1302
1303    FIXME rearnsha 2002-02018: Tweeking current_gdbarch is not an
1304    optimal solution, but the call to arm_fix_call_dummy is immediately
1305    followed by a call to run_stack_dummy, which is the only function
1306    where call_dummy_breakpoint_offset is actually used.  */
1307
1308
1309 static void
1310 arm_set_call_dummy_breakpoint_offset (void)
1311 {
1312   if (caller_is_thumb)
1313     set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 4);
1314   else
1315     set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 8);
1316 }
1317
1318 /* Fix up the call dummy, based on whether the processor is currently
1319    in Thumb or ARM mode, and whether the target function is Thumb or
1320    ARM.  There are three different situations requiring three
1321    different dummies:
1322
1323    * ARM calling ARM: uses the call dummy in tm-arm.h, which has already
1324    been copied into the dummy parameter to this function.
1325    * ARM calling Thumb: uses the call dummy in tm-arm.h, but with the
1326    "mov pc,r4" instruction patched to be a "bx r4" instead.
1327    * Thumb calling anything: uses the Thumb dummy defined below, which
1328    works for calling both ARM and Thumb functions.
1329
1330    All three call dummies expect to receive the target function
1331    address in R4, with the low bit set if it's a Thumb function.  */
1332
1333 static void
1334 arm_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
1335                     struct value **args, struct type *type, int gcc_p)
1336 {
1337   static short thumb_dummy[4] =
1338   {
1339     0xf000, 0xf801,             /*        bl      label */
1340     0xdf18,                     /*        swi     24 */
1341     0x4720,                     /* label: bx      r4 */
1342   };
1343   static unsigned long arm_bx_r4 = 0xe12fff14;  /* bx r4 instruction */
1344
1345   /* Set flag indicating whether the current PC is in a Thumb function.  */
1346   caller_is_thumb = arm_pc_is_thumb (read_pc ());
1347   arm_set_call_dummy_breakpoint_offset ();
1348
1349   /* If the target function is Thumb, set the low bit of the function
1350      address.  And if the CPU is currently in ARM mode, patch the
1351      second instruction of call dummy to use a BX instruction to
1352      switch to Thumb mode.  */
1353   target_is_thumb = arm_pc_is_thumb (fun);
1354   if (target_is_thumb)
1355     {
1356       fun |= 1;
1357       if (!caller_is_thumb)
1358         store_unsigned_integer (dummy + 4, sizeof (arm_bx_r4), arm_bx_r4);
1359     }
1360
1361   /* If the CPU is currently in Thumb mode, use the Thumb call dummy
1362      instead of the ARM one that's already been copied.  This will
1363      work for both Thumb and ARM target functions.  */
1364   if (caller_is_thumb)
1365     {
1366       int i;
1367       char *p = dummy;
1368       int len = sizeof (thumb_dummy) / sizeof (thumb_dummy[0]);
1369
1370       for (i = 0; i < len; i++)
1371         {
1372           store_unsigned_integer (p, sizeof (thumb_dummy[0]), thumb_dummy[i]);
1373           p += sizeof (thumb_dummy[0]);
1374         }
1375     }
1376
1377   /* Put the target address in r4; the call dummy will copy this to
1378      the PC.  */
1379   write_register (4, fun);
1380 }
1381
1382 /* Note: ScottB
1383
1384    This function does not support passing parameters using the FPA
1385    variant of the APCS.  It passes any floating point arguments in the
1386    general registers and/or on the stack.  */
1387
1388 static CORE_ADDR
1389 arm_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1390                     int struct_return, CORE_ADDR struct_addr)
1391 {
1392   CORE_ADDR fp;
1393   int argnum;
1394   int argreg;
1395   int nstack;
1396   int simd_argreg;
1397   int second_pass;
1398   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1399
1400   /* Walk through the list of args and determine how large a temporary
1401      stack is required.  Need to take care here as structs may be
1402      passed on the stack, and we have to to push them.  On the second
1403      pass, do the store.  */
1404   nstack = 0;
1405   fp = sp;
1406   for (second_pass = 0; second_pass < 2; second_pass++)
1407     {
1408       /* Compute the FP using the information computed during the
1409          first pass.  */
1410       if (second_pass)
1411         fp = sp - nstack;
1412
1413       simd_argreg = 0;
1414       argreg = ARM_A1_REGNUM;
1415       nstack = 0;
1416
1417       /* The struct_return pointer occupies the first parameter
1418          passing register.  */
1419       if (struct_return)
1420         {
1421           if (second_pass)
1422             {
1423               if (arm_debug)
1424                 fprintf_unfiltered (gdb_stdlog,
1425                                     "struct return in %s = 0x%s\n",
1426                                     REGISTER_NAME (argreg),
1427                                     paddr (struct_addr));
1428               write_register (argreg, struct_addr);
1429             }
1430           argreg++;
1431         }
1432
1433       for (argnum = 0; argnum < nargs; argnum++)
1434         {
1435           int len;
1436           struct type *arg_type;
1437           struct type *target_type;
1438           enum type_code typecode;
1439           char *val;
1440           
1441           arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1442           len = TYPE_LENGTH (arg_type);
1443           target_type = TYPE_TARGET_TYPE (arg_type);
1444           typecode = TYPE_CODE (arg_type);
1445           val = VALUE_CONTENTS (args[argnum]);
1446           
1447           /* If the argument is a pointer to a function, and it is a
1448              Thumb function, create a LOCAL copy of the value and set
1449              the THUMB bit in it.  */
1450           if (second_pass
1451               && TYPE_CODE_PTR == typecode
1452               && target_type != NULL
1453               && TYPE_CODE_FUNC == TYPE_CODE (target_type))
1454             {
1455               CORE_ADDR regval = extract_address (val, len);
1456               if (arm_pc_is_thumb (regval))
1457                 {
1458                   val = alloca (len);
1459                   store_address (val, len, MAKE_THUMB_ADDR (regval));
1460                 }
1461             }
1462
1463           /* Copy the argument to general registers or the stack in
1464              register-sized pieces.  Large arguments are split between
1465              registers and stack.  */
1466           while (len > 0)
1467             {
1468               int partial_len = len < REGISTER_SIZE ? len : REGISTER_SIZE;
1469               
1470               if (argreg <= ARM_LAST_ARG_REGNUM)
1471                 {
1472                   /* The argument is being passed in a general purpose
1473                      register.  */
1474                   if (second_pass)
1475                     {
1476                       CORE_ADDR regval = extract_address (val,
1477                                                           partial_len);
1478                       if (arm_debug)
1479                         fprintf_unfiltered (gdb_stdlog,
1480                                             "arg %d in %s = 0x%s\n",
1481                                             argnum,
1482                                             REGISTER_NAME (argreg),
1483                                             phex (regval, REGISTER_SIZE));
1484                       write_register (argreg, regval);
1485                     }
1486                   argreg++;
1487                 }
1488               else
1489                 {
1490                   if (second_pass)
1491                     {
1492                       /* Push the arguments onto the stack.  */
1493                       if (arm_debug)
1494                         fprintf_unfiltered (gdb_stdlog,
1495                                             "arg %d @ 0x%s + %d\n",
1496                                             argnum, paddr (fp), nstack);
1497                       write_memory (fp + nstack, val, REGISTER_SIZE);
1498                     }
1499                   nstack += REGISTER_SIZE;
1500                 }
1501               
1502               len -= partial_len;
1503               val += partial_len;
1504             }
1505
1506         }
1507     }
1508
1509   /* Return the botom of the argument list (pointed to by fp).  */
1510   return fp;
1511 }
1512
1513 /* Pop the current frame.  So long as the frame info has been
1514    initialized properly (see arm_init_extra_frame_info), this code
1515    works for dummy frames as well as regular frames.  I.e, there's no
1516    need to have a special case for dummy frames.  */
1517 static void
1518 arm_pop_frame (void)
1519 {
1520   int regnum;
1521   struct frame_info *frame = get_current_frame ();
1522   CORE_ADDR old_SP = (frame->frame - frame->extra_info->frameoffset
1523                       + frame->extra_info->framesize);
1524
1525   if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame), frame->frame, frame->frame))
1526     {
1527       generic_pop_dummy_frame ();
1528       flush_cached_frames ();
1529       return;
1530     }
1531
1532   for (regnum = 0; regnum < NUM_REGS; regnum++)
1533     if (get_frame_saved_regs (frame)[regnum] != 0)
1534       write_register (regnum,
1535                   read_memory_integer (get_frame_saved_regs (frame)[regnum],
1536                                        REGISTER_RAW_SIZE (regnum)));
1537
1538   write_register (ARM_PC_REGNUM, FRAME_SAVED_PC (frame));
1539   write_register (ARM_SP_REGNUM, old_SP);
1540
1541   flush_cached_frames ();
1542 }
1543
1544 static void
1545 print_fpu_flags (int flags)
1546 {
1547   if (flags & (1 << 0))
1548     fputs ("IVO ", stdout);
1549   if (flags & (1 << 1))
1550     fputs ("DVZ ", stdout);
1551   if (flags & (1 << 2))
1552     fputs ("OFL ", stdout);
1553   if (flags & (1 << 3))
1554     fputs ("UFL ", stdout);
1555   if (flags & (1 << 4))
1556     fputs ("INX ", stdout);
1557   putchar ('\n');
1558 }
1559
1560 /* Print interesting information about the floating point processor
1561    (if present) or emulator.  */
1562 static void
1563 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
1564                       struct frame_info *frame, const char *args)
1565 {
1566   register unsigned long status = read_register (ARM_FPS_REGNUM);
1567   int type;
1568
1569   type = (status >> 24) & 127;
1570   printf ("%s FPU type %d\n",
1571           (status & (1 << 31)) ? "Hardware" : "Software",
1572           type);
1573   fputs ("mask: ", stdout);
1574   print_fpu_flags (status >> 16);
1575   fputs ("flags: ", stdout);
1576   print_fpu_flags (status);
1577 }
1578
1579 /* Return the GDB type object for the "standard" data type of data in
1580    register N.  */
1581
1582 static struct type *
1583 arm_register_type (int regnum)
1584 {
1585   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
1586     {
1587       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1588         return builtin_type_arm_ext_big;
1589       else
1590         return builtin_type_arm_ext_littlebyte_bigword;
1591     }
1592   else
1593     return builtin_type_int32;
1594 }
1595
1596 /* Index within `registers' of the first byte of the space for
1597    register N.  */
1598
1599 static int
1600 arm_register_byte (int regnum)
1601 {
1602   if (regnum < ARM_F0_REGNUM)
1603     return regnum * INT_REGISTER_RAW_SIZE;
1604   else if (regnum < ARM_PS_REGNUM)
1605     return (NUM_GREGS * INT_REGISTER_RAW_SIZE
1606             + (regnum - ARM_F0_REGNUM) * FP_REGISTER_RAW_SIZE);
1607   else
1608     return (NUM_GREGS * INT_REGISTER_RAW_SIZE
1609             + NUM_FREGS * FP_REGISTER_RAW_SIZE
1610             + (regnum - ARM_FPS_REGNUM) * STATUS_REGISTER_SIZE);
1611 }
1612
1613 /* Number of bytes of storage in the actual machine representation for
1614    register N.  All registers are 4 bytes, except fp0 - fp7, which are
1615    12 bytes in length.  */
1616
1617 static int
1618 arm_register_raw_size (int regnum)
1619 {
1620   if (regnum < ARM_F0_REGNUM)
1621     return INT_REGISTER_RAW_SIZE;
1622   else if (regnum < ARM_FPS_REGNUM)
1623     return FP_REGISTER_RAW_SIZE;
1624   else
1625     return STATUS_REGISTER_SIZE;
1626 }
1627
1628 /* Number of bytes of storage in a program's representation
1629    for register N.  */
1630 static int
1631 arm_register_virtual_size (int regnum)
1632 {
1633   if (regnum < ARM_F0_REGNUM)
1634     return INT_REGISTER_VIRTUAL_SIZE;
1635   else if (regnum < ARM_FPS_REGNUM)
1636     return FP_REGISTER_VIRTUAL_SIZE;
1637   else
1638     return STATUS_REGISTER_SIZE;
1639 }
1640
1641 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
1642 static int
1643 arm_register_sim_regno (int regnum)
1644 {
1645   int reg = regnum;
1646   gdb_assert (reg >= 0 && reg < NUM_REGS);
1647
1648   if (reg < NUM_GREGS)
1649     return SIM_ARM_R0_REGNUM + reg;
1650   reg -= NUM_GREGS;
1651
1652   if (reg < NUM_FREGS)
1653     return SIM_ARM_FP0_REGNUM + reg;
1654   reg -= NUM_FREGS;
1655
1656   if (reg < NUM_SREGS)
1657     return SIM_ARM_FPS_REGNUM + reg;
1658   reg -= NUM_SREGS;
1659
1660   internal_error (__FILE__, __LINE__, "Bad REGNUM %d", regnum);
1661 }
1662
1663 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
1664    convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
1665    It is thought that this is is the floating-point register format on
1666    little-endian systems.  */
1667
1668 static void
1669 convert_from_extended (const struct floatformat *fmt, const void *ptr,
1670                        void *dbl)
1671 {
1672   DOUBLEST d;
1673   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1674     floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
1675   else
1676     floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
1677                              ptr, &d);
1678   floatformat_from_doublest (fmt, &d, dbl);
1679 }
1680
1681 static void
1682 convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr)
1683 {
1684   DOUBLEST d;
1685   floatformat_to_doublest (fmt, ptr, &d);
1686   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1687     floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
1688   else
1689     floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
1690                                &d, dbl);
1691 }
1692
1693 static int
1694 condition_true (unsigned long cond, unsigned long status_reg)
1695 {
1696   if (cond == INST_AL || cond == INST_NV)
1697     return 1;
1698
1699   switch (cond)
1700     {
1701     case INST_EQ:
1702       return ((status_reg & FLAG_Z) != 0);
1703     case INST_NE:
1704       return ((status_reg & FLAG_Z) == 0);
1705     case INST_CS:
1706       return ((status_reg & FLAG_C) != 0);
1707     case INST_CC:
1708       return ((status_reg & FLAG_C) == 0);
1709     case INST_MI:
1710       return ((status_reg & FLAG_N) != 0);
1711     case INST_PL:
1712       return ((status_reg & FLAG_N) == 0);
1713     case INST_VS:
1714       return ((status_reg & FLAG_V) != 0);
1715     case INST_VC:
1716       return ((status_reg & FLAG_V) == 0);
1717     case INST_HI:
1718       return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
1719     case INST_LS:
1720       return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
1721     case INST_GE:
1722       return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
1723     case INST_LT:
1724       return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
1725     case INST_GT:
1726       return (((status_reg & FLAG_Z) == 0) &&
1727               (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0)));
1728     case INST_LE:
1729       return (((status_reg & FLAG_Z) != 0) ||
1730               (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0)));
1731     }
1732   return 1;
1733 }
1734
1735 /* Support routines for single stepping.  Calculate the next PC value.  */
1736 #define submask(x) ((1L << ((x) + 1)) - 1)
1737 #define bit(obj,st) (((obj) >> (st)) & 1)
1738 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
1739 #define sbits(obj,st,fn) \
1740   ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
1741 #define BranchDest(addr,instr) \
1742   ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
1743 #define ARM_PC_32 1
1744
1745 static unsigned long
1746 shifted_reg_val (unsigned long inst, int carry, unsigned long pc_val,
1747                  unsigned long status_reg)
1748 {
1749   unsigned long res, shift;
1750   int rm = bits (inst, 0, 3);
1751   unsigned long shifttype = bits (inst, 5, 6);
1752
1753   if (bit (inst, 4))
1754     {
1755       int rs = bits (inst, 8, 11);
1756       shift = (rs == 15 ? pc_val + 8 : read_register (rs)) & 0xFF;
1757     }
1758   else
1759     shift = bits (inst, 7, 11);
1760
1761   res = (rm == 15
1762          ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
1763             + (bit (inst, 4) ? 12 : 8))
1764          : read_register (rm));
1765
1766   switch (shifttype)
1767     {
1768     case 0:                     /* LSL */
1769       res = shift >= 32 ? 0 : res << shift;
1770       break;
1771
1772     case 1:                     /* LSR */
1773       res = shift >= 32 ? 0 : res >> shift;
1774       break;
1775
1776     case 2:                     /* ASR */
1777       if (shift >= 32)
1778         shift = 31;
1779       res = ((res & 0x80000000L)
1780              ? ~((~res) >> shift) : res >> shift);
1781       break;
1782
1783     case 3:                     /* ROR/RRX */
1784       shift &= 31;
1785       if (shift == 0)
1786         res = (res >> 1) | (carry ? 0x80000000L : 0);
1787       else
1788         res = (res >> shift) | (res << (32 - shift));
1789       break;
1790     }
1791
1792   return res & 0xffffffff;
1793 }
1794
1795 /* Return number of 1-bits in VAL.  */
1796
1797 static int
1798 bitcount (unsigned long val)
1799 {
1800   int nbits;
1801   for (nbits = 0; val != 0; nbits++)
1802     val &= val - 1;             /* delete rightmost 1-bit in val */
1803   return nbits;
1804 }
1805
1806 CORE_ADDR
1807 thumb_get_next_pc (CORE_ADDR pc)
1808 {
1809   unsigned long pc_val = ((unsigned long) pc) + 4;      /* PC after prefetch */
1810   unsigned short inst1 = read_memory_integer (pc, 2);
1811   CORE_ADDR nextpc = pc + 2;            /* default is next instruction */
1812   unsigned long offset;
1813
1814   if ((inst1 & 0xff00) == 0xbd00)       /* pop {rlist, pc} */
1815     {
1816       CORE_ADDR sp;
1817
1818       /* Fetch the saved PC from the stack.  It's stored above
1819          all of the other registers.  */
1820       offset = bitcount (bits (inst1, 0, 7)) * REGISTER_SIZE;
1821       sp = read_register (ARM_SP_REGNUM);
1822       nextpc = (CORE_ADDR) read_memory_integer (sp + offset, 4);
1823       nextpc = ADDR_BITS_REMOVE (nextpc);
1824       if (nextpc == pc)
1825         error ("Infinite loop detected");
1826     }
1827   else if ((inst1 & 0xf000) == 0xd000)  /* conditional branch */
1828     {
1829       unsigned long status = read_register (ARM_PS_REGNUM);
1830       unsigned long cond = bits (inst1, 8, 11);
1831       if (cond != 0x0f && condition_true (cond, status))    /* 0x0f = SWI */
1832         nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
1833     }
1834   else if ((inst1 & 0xf800) == 0xe000)  /* unconditional branch */
1835     {
1836       nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
1837     }
1838   else if ((inst1 & 0xf800) == 0xf000)  /* long branch with link */
1839     {
1840       unsigned short inst2 = read_memory_integer (pc + 2, 2);
1841       offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) << 1);
1842       nextpc = pc_val + offset;
1843     }
1844
1845   return nextpc;
1846 }
1847
1848 CORE_ADDR
1849 arm_get_next_pc (CORE_ADDR pc)
1850 {
1851   unsigned long pc_val;
1852   unsigned long this_instr;
1853   unsigned long status;
1854   CORE_ADDR nextpc;
1855
1856   if (arm_pc_is_thumb (pc))
1857     return thumb_get_next_pc (pc);
1858
1859   pc_val = (unsigned long) pc;
1860   this_instr = read_memory_integer (pc, 4);
1861   status = read_register (ARM_PS_REGNUM);
1862   nextpc = (CORE_ADDR) (pc_val + 4);    /* Default case */
1863
1864   if (condition_true (bits (this_instr, 28, 31), status))
1865     {
1866       switch (bits (this_instr, 24, 27))
1867         {
1868         case 0x0:
1869         case 0x1:                       /* data processing */
1870         case 0x2:
1871         case 0x3:
1872           {
1873             unsigned long operand1, operand2, result = 0;
1874             unsigned long rn;
1875             int c;
1876
1877             if (bits (this_instr, 12, 15) != 15)
1878               break;
1879
1880             if (bits (this_instr, 22, 25) == 0
1881                 && bits (this_instr, 4, 7) == 9)        /* multiply */
1882               error ("Illegal update to pc in instruction");
1883
1884             /* Multiply into PC */
1885             c = (status & FLAG_C) ? 1 : 0;
1886             rn = bits (this_instr, 16, 19);
1887             operand1 = (rn == 15) ? pc_val + 8 : read_register (rn);
1888
1889             if (bit (this_instr, 25))
1890               {
1891                 unsigned long immval = bits (this_instr, 0, 7);
1892                 unsigned long rotate = 2 * bits (this_instr, 8, 11);
1893                 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
1894                   & 0xffffffff;
1895               }
1896             else                /* operand 2 is a shifted register */
1897               operand2 = shifted_reg_val (this_instr, c, pc_val, status);
1898
1899             switch (bits (this_instr, 21, 24))
1900               {
1901               case 0x0: /*and */
1902                 result = operand1 & operand2;
1903                 break;
1904
1905               case 0x1: /*eor */
1906                 result = operand1 ^ operand2;
1907                 break;
1908
1909               case 0x2: /*sub */
1910                 result = operand1 - operand2;
1911                 break;
1912
1913               case 0x3: /*rsb */
1914                 result = operand2 - operand1;
1915                 break;
1916
1917               case 0x4: /*add */
1918                 result = operand1 + operand2;
1919                 break;
1920
1921               case 0x5: /*adc */
1922                 result = operand1 + operand2 + c;
1923                 break;
1924
1925               case 0x6: /*sbc */
1926                 result = operand1 - operand2 + c;
1927                 break;
1928
1929               case 0x7: /*rsc */
1930                 result = operand2 - operand1 + c;
1931                 break;
1932
1933               case 0x8:
1934               case 0x9:
1935               case 0xa:
1936               case 0xb: /* tst, teq, cmp, cmn */
1937                 result = (unsigned long) nextpc;
1938                 break;
1939
1940               case 0xc: /*orr */
1941                 result = operand1 | operand2;
1942                 break;
1943
1944               case 0xd: /*mov */
1945                 /* Always step into a function.  */
1946                 result = operand2;
1947                 break;
1948
1949               case 0xe: /*bic */
1950                 result = operand1 & ~operand2;
1951                 break;
1952
1953               case 0xf: /*mvn */
1954                 result = ~operand2;
1955                 break;
1956               }
1957             nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
1958
1959             if (nextpc == pc)
1960               error ("Infinite loop detected");
1961             break;
1962           }
1963
1964         case 0x4:
1965         case 0x5:               /* data transfer */
1966         case 0x6:
1967         case 0x7:
1968           if (bit (this_instr, 20))
1969             {
1970               /* load */
1971               if (bits (this_instr, 12, 15) == 15)
1972                 {
1973                   /* rd == pc */
1974                   unsigned long rn;
1975                   unsigned long base;
1976
1977                   if (bit (this_instr, 22))
1978                     error ("Illegal update to pc in instruction");
1979
1980                   /* byte write to PC */
1981                   rn = bits (this_instr, 16, 19);
1982                   base = (rn == 15) ? pc_val + 8 : read_register (rn);
1983                   if (bit (this_instr, 24))
1984                     {
1985                       /* pre-indexed */
1986                       int c = (status & FLAG_C) ? 1 : 0;
1987                       unsigned long offset =
1988                       (bit (this_instr, 25)
1989                        ? shifted_reg_val (this_instr, c, pc_val, status)
1990                        : bits (this_instr, 0, 11));
1991
1992                       if (bit (this_instr, 23))
1993                         base += offset;
1994                       else
1995                         base -= offset;
1996                     }
1997                   nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
1998                                                             4);
1999
2000                   nextpc = ADDR_BITS_REMOVE (nextpc);
2001
2002                   if (nextpc == pc)
2003                     error ("Infinite loop detected");
2004                 }
2005             }
2006           break;
2007
2008         case 0x8:
2009         case 0x9:               /* block transfer */
2010           if (bit (this_instr, 20))
2011             {
2012               /* LDM */
2013               if (bit (this_instr, 15))
2014                 {
2015                   /* loading pc */
2016                   int offset = 0;
2017
2018                   if (bit (this_instr, 23))
2019                     {
2020                       /* up */
2021                       unsigned long reglist = bits (this_instr, 0, 14);
2022                       offset = bitcount (reglist) * 4;
2023                       if (bit (this_instr, 24))         /* pre */
2024                         offset += 4;
2025                     }
2026                   else if (bit (this_instr, 24))
2027                     offset = -4;
2028
2029                   {
2030                     unsigned long rn_val =
2031                     read_register (bits (this_instr, 16, 19));
2032                     nextpc =
2033                       (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
2034                                                                   + offset),
2035                                                        4);
2036                   }
2037                   nextpc = ADDR_BITS_REMOVE (nextpc);
2038                   if (nextpc == pc)
2039                     error ("Infinite loop detected");
2040                 }
2041             }
2042           break;
2043
2044         case 0xb:               /* branch & link */
2045         case 0xa:               /* branch */
2046           {
2047             nextpc = BranchDest (pc, this_instr);
2048
2049             nextpc = ADDR_BITS_REMOVE (nextpc);
2050             if (nextpc == pc)
2051               error ("Infinite loop detected");
2052             break;
2053           }
2054
2055         case 0xc:
2056         case 0xd:
2057         case 0xe:               /* coproc ops */
2058         case 0xf:               /* SWI */
2059           break;
2060
2061         default:
2062           fprintf_filtered (gdb_stderr, "Bad bit-field extraction\n");
2063           return (pc);
2064         }
2065     }
2066
2067   return nextpc;
2068 }
2069
2070 /* single_step() is called just before we want to resume the inferior,
2071    if we want to single-step it but there is no hardware or kernel
2072    single-step support.  We find the target of the coming instruction
2073    and breakpoint it.
2074
2075    single_step() is also called just after the inferior stops.  If we
2076    had set up a simulated single-step, we undo our damage.  */
2077
2078 static void
2079 arm_software_single_step (enum target_signal sig, int insert_bpt)
2080 {
2081   static int next_pc;            /* State between setting and unsetting.  */
2082   static char break_mem[BREAKPOINT_MAX]; /* Temporary storage for mem@bpt */
2083
2084   if (insert_bpt)
2085     {
2086       next_pc = arm_get_next_pc (read_register (ARM_PC_REGNUM));
2087       target_insert_breakpoint (next_pc, break_mem);
2088     }
2089   else
2090     target_remove_breakpoint (next_pc, break_mem);
2091 }
2092
2093 #include "bfd-in2.h"
2094 #include "libcoff.h"
2095
2096 static int
2097 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
2098 {
2099   if (arm_pc_is_thumb (memaddr))
2100     {
2101       static asymbol *asym;
2102       static combined_entry_type ce;
2103       static struct coff_symbol_struct csym;
2104       static struct _bfd fake_bfd;
2105       static bfd_target fake_target;
2106
2107       if (csym.native == NULL)
2108         {
2109           /* Create a fake symbol vector containing a Thumb symbol.
2110              This is solely so that the code in print_insn_little_arm() 
2111              and print_insn_big_arm() in opcodes/arm-dis.c will detect
2112              the presence of a Thumb symbol and switch to decoding
2113              Thumb instructions.  */
2114
2115           fake_target.flavour = bfd_target_coff_flavour;
2116           fake_bfd.xvec = &fake_target;
2117           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
2118           csym.native = &ce;
2119           csym.symbol.the_bfd = &fake_bfd;
2120           csym.symbol.name = "fake";
2121           asym = (asymbol *) & csym;
2122         }
2123
2124       memaddr = UNMAKE_THUMB_ADDR (memaddr);
2125       info->symbols = &asym;
2126     }
2127   else
2128     info->symbols = NULL;
2129
2130   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2131     return print_insn_big_arm (memaddr, info);
2132   else
2133     return print_insn_little_arm (memaddr, info);
2134 }
2135
2136 /* The following define instruction sequences that will cause ARM
2137    cpu's to take an undefined instruction trap.  These are used to
2138    signal a breakpoint to GDB.
2139    
2140    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
2141    modes.  A different instruction is required for each mode.  The ARM
2142    cpu's can also be big or little endian.  Thus four different
2143    instructions are needed to support all cases.
2144    
2145    Note: ARMv4 defines several new instructions that will take the
2146    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
2147    not in fact add the new instructions.  The new undefined
2148    instructions in ARMv4 are all instructions that had no defined
2149    behaviour in earlier chips.  There is no guarantee that they will
2150    raise an exception, but may be treated as NOP's.  In practice, it
2151    may only safe to rely on instructions matching:
2152    
2153    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
2154    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2155    C C C C 0 1 1 x x x x x x x x x x x x x x x x x x x x 1 x x x x
2156    
2157    Even this may only true if the condition predicate is true. The
2158    following use a condition predicate of ALWAYS so it is always TRUE.
2159    
2160    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
2161    and NetBSD all use a software interrupt rather than an undefined
2162    instruction to force a trap.  This can be handled by by the
2163    abi-specific code during establishment of the gdbarch vector.  */
2164
2165
2166 /* NOTE rearnsha 2002-02-18: for now we allow a non-multi-arch gdb to
2167    override these definitions.  */
2168 #ifndef ARM_LE_BREAKPOINT
2169 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
2170 #endif
2171 #ifndef ARM_BE_BREAKPOINT
2172 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
2173 #endif
2174 #ifndef THUMB_LE_BREAKPOINT
2175 #define THUMB_LE_BREAKPOINT {0xfe,0xdf}
2176 #endif
2177 #ifndef THUMB_BE_BREAKPOINT
2178 #define THUMB_BE_BREAKPOINT {0xdf,0xfe}
2179 #endif
2180
2181 static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
2182 static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
2183 static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
2184 static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
2185
2186 /* Determine the type and size of breakpoint to insert at PCPTR.  Uses
2187    the program counter value to determine whether a 16-bit or 32-bit
2188    breakpoint should be used.  It returns a pointer to a string of
2189    bytes that encode a breakpoint instruction, stores the length of
2190    the string to *lenptr, and adjusts the program counter (if
2191    necessary) to point to the actual memory location where the
2192    breakpoint should be inserted.  */
2193
2194 /* XXX ??? from old tm-arm.h: if we're using RDP, then we're inserting
2195    breakpoints and storing their handles instread of what was in
2196    memory.  It is nice that this is the same size as a handle -
2197    otherwise remote-rdp will have to change.  */
2198
2199 static const unsigned char *
2200 arm_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
2201 {
2202   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2203
2204   if (arm_pc_is_thumb (*pcptr) || arm_pc_is_thumb_dummy (*pcptr))
2205     {
2206       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
2207       *lenptr = tdep->thumb_breakpoint_size;
2208       return tdep->thumb_breakpoint;
2209     }
2210   else
2211     {
2212       *lenptr = tdep->arm_breakpoint_size;
2213       return tdep->arm_breakpoint;
2214     }
2215 }
2216
2217 /* Extract from an array REGBUF containing the (raw) register state a
2218    function return value of type TYPE, and copy that, in virtual
2219    format, into VALBUF.  */
2220
2221 static void
2222 arm_extract_return_value (struct type *type,
2223                           struct regcache *regs,
2224                           void *dst)
2225 {
2226   bfd_byte *valbuf = dst;
2227
2228   if (TYPE_CODE_FLT == TYPE_CODE (type))
2229     {
2230       struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2231
2232       switch (tdep->fp_model)
2233         {
2234         case ARM_FLOAT_FPA:
2235           {
2236             /* The value is in register F0 in internal format.  We need to
2237                extract the raw value and then convert it to the desired
2238                internal type.  */
2239             bfd_byte tmpbuf[FP_REGISTER_RAW_SIZE];
2240
2241             regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
2242             convert_from_extended (floatformat_from_type (type), tmpbuf,
2243                                    valbuf);
2244           }
2245           break;
2246
2247         case ARM_FLOAT_SOFT:
2248         case ARM_FLOAT_SOFT_VFP:
2249           regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
2250           if (TYPE_LENGTH (type) > 4)
2251             regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
2252                                   valbuf + INT_REGISTER_RAW_SIZE);
2253           break;
2254
2255         default:
2256           internal_error
2257             (__FILE__, __LINE__,
2258              "arm_extract_return_value: Floating point model not supported");
2259           break;
2260         }
2261     }
2262   else if (TYPE_CODE (type) == TYPE_CODE_INT
2263            || TYPE_CODE (type) == TYPE_CODE_CHAR
2264            || TYPE_CODE (type) == TYPE_CODE_BOOL
2265            || TYPE_CODE (type) == TYPE_CODE_PTR
2266            || TYPE_CODE (type) == TYPE_CODE_REF
2267            || TYPE_CODE (type) == TYPE_CODE_ENUM)
2268     {
2269       /* If the the type is a plain integer, then the access is
2270          straight-forward.  Otherwise we have to play around a bit more.  */
2271       int len = TYPE_LENGTH (type);
2272       int regno = ARM_A1_REGNUM;
2273       ULONGEST tmp;
2274
2275       while (len > 0)
2276         {
2277           /* By using store_unsigned_integer we avoid having to do
2278              anything special for small big-endian values.  */
2279           regcache_cooked_read_unsigned (regs, regno++, &tmp);
2280           store_unsigned_integer (valbuf, 
2281                                   (len > INT_REGISTER_RAW_SIZE
2282                                    ? INT_REGISTER_RAW_SIZE : len),
2283                                   tmp);
2284           len -= INT_REGISTER_RAW_SIZE;
2285           valbuf += INT_REGISTER_RAW_SIZE;
2286         }
2287     }
2288   else
2289     {
2290       /* For a structure or union the behaviour is as if the value had
2291          been stored to word-aligned memory and then loaded into 
2292          registers with 32-bit load instruction(s).  */
2293       int len = TYPE_LENGTH (type);
2294       int regno = ARM_A1_REGNUM;
2295       bfd_byte tmpbuf[INT_REGISTER_RAW_SIZE];
2296
2297       while (len > 0)
2298         {
2299           regcache_cooked_read (regs, regno++, tmpbuf);
2300           memcpy (valbuf, tmpbuf,
2301                   len > INT_REGISTER_RAW_SIZE ? INT_REGISTER_RAW_SIZE : len);
2302           len -= INT_REGISTER_RAW_SIZE;
2303           valbuf += INT_REGISTER_RAW_SIZE;
2304         }
2305     }
2306 }
2307
2308 /* Extract from an array REGBUF containing the (raw) register state
2309    the address in which a function should return its structure value.  */
2310
2311 static CORE_ADDR
2312 arm_extract_struct_value_address (struct regcache *regcache)
2313 {
2314   ULONGEST ret;
2315
2316   regcache_cooked_read_unsigned (regcache, ARM_A1_REGNUM, &ret);
2317   return ret;
2318 }
2319
2320 /* Will a function return an aggregate type in memory or in a
2321    register?  Return 0 if an aggregate type can be returned in a
2322    register, 1 if it must be returned in memory.  */
2323
2324 static int
2325 arm_use_struct_convention (int gcc_p, struct type *type)
2326 {
2327   int nRc;
2328   register enum type_code code;
2329
2330   /* In the ARM ABI, "integer" like aggregate types are returned in
2331      registers.  For an aggregate type to be integer like, its size
2332      must be less than or equal to REGISTER_SIZE and the offset of
2333      each addressable subfield must be zero.  Note that bit fields are
2334      not addressable, and all addressable subfields of unions always
2335      start at offset zero.
2336
2337      This function is based on the behaviour of GCC 2.95.1.
2338      See: gcc/arm.c: arm_return_in_memory() for details.
2339
2340      Note: All versions of GCC before GCC 2.95.2 do not set up the
2341      parameters correctly for a function returning the following
2342      structure: struct { float f;}; This should be returned in memory,
2343      not a register.  Richard Earnshaw sent me a patch, but I do not
2344      know of any way to detect if a function like the above has been
2345      compiled with the correct calling convention.  */
2346
2347   /* All aggregate types that won't fit in a register must be returned
2348      in memory.  */
2349   if (TYPE_LENGTH (type) > REGISTER_SIZE)
2350     {
2351       return 1;
2352     }
2353
2354   /* The only aggregate types that can be returned in a register are
2355      structs and unions.  Arrays must be returned in memory.  */
2356   code = TYPE_CODE (type);
2357   if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
2358     {
2359       return 1;
2360     }
2361
2362   /* Assume all other aggregate types can be returned in a register.
2363      Run a check for structures, unions and arrays.  */
2364   nRc = 0;
2365
2366   if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
2367     {
2368       int i;
2369       /* Need to check if this struct/union is "integer" like.  For
2370          this to be true, its size must be less than or equal to
2371          REGISTER_SIZE and the offset of each addressable subfield
2372          must be zero.  Note that bit fields are not addressable, and
2373          unions always start at offset zero.  If any of the subfields
2374          is a floating point type, the struct/union cannot be an
2375          integer type.  */
2376
2377       /* For each field in the object, check:
2378          1) Is it FP? --> yes, nRc = 1;
2379          2) Is it addressable (bitpos != 0) and
2380          not packed (bitsize == 0)?
2381          --> yes, nRc = 1  
2382        */
2383
2384       for (i = 0; i < TYPE_NFIELDS (type); i++)
2385         {
2386           enum type_code field_type_code;
2387           field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i));
2388
2389           /* Is it a floating point type field?  */
2390           if (field_type_code == TYPE_CODE_FLT)
2391             {
2392               nRc = 1;
2393               break;
2394             }
2395
2396           /* If bitpos != 0, then we have to care about it.  */
2397           if (TYPE_FIELD_BITPOS (type, i) != 0)
2398             {
2399               /* Bitfields are not addressable.  If the field bitsize is 
2400                  zero, then the field is not packed.  Hence it cannot be
2401                  a bitfield or any other packed type.  */
2402               if (TYPE_FIELD_BITSIZE (type, i) == 0)
2403                 {
2404                   nRc = 1;
2405                   break;
2406                 }
2407             }
2408         }
2409     }
2410
2411   return nRc;
2412 }
2413
2414 /* Write into appropriate registers a function return value of type
2415    TYPE, given in virtual format.  */
2416
2417 static void
2418 arm_store_return_value (struct type *type, struct regcache *regs,
2419                         const void *src)
2420 {
2421   const bfd_byte *valbuf = src;
2422
2423   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2424     {
2425       struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2426       char buf[ARM_MAX_REGISTER_RAW_SIZE];
2427
2428       switch (tdep->fp_model)
2429         {
2430         case ARM_FLOAT_FPA:
2431
2432           convert_to_extended (floatformat_from_type (type), buf, valbuf);
2433           regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
2434           break;
2435
2436         case ARM_FLOAT_SOFT:
2437         case ARM_FLOAT_SOFT_VFP:
2438           regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
2439           if (TYPE_LENGTH (type) > 4)
2440             regcache_cooked_write (regs, ARM_A1_REGNUM + 1, 
2441                                    valbuf + INT_REGISTER_RAW_SIZE);
2442           break;
2443
2444         default:
2445           internal_error
2446             (__FILE__, __LINE__,
2447              "arm_store_return_value: Floating point model not supported");
2448           break;
2449         }
2450     }
2451   else if (TYPE_CODE (type) == TYPE_CODE_INT
2452            || TYPE_CODE (type) == TYPE_CODE_CHAR
2453            || TYPE_CODE (type) == TYPE_CODE_BOOL
2454            || TYPE_CODE (type) == TYPE_CODE_PTR
2455            || TYPE_CODE (type) == TYPE_CODE_REF
2456            || TYPE_CODE (type) == TYPE_CODE_ENUM)
2457     {
2458       if (TYPE_LENGTH (type) <= 4)
2459         {
2460           /* Values of one word or less are zero/sign-extended and
2461              returned in r0.  */
2462           bfd_byte tmpbuf[INT_REGISTER_RAW_SIZE];
2463           LONGEST val = unpack_long (type, valbuf);
2464
2465           store_signed_integer (tmpbuf, INT_REGISTER_RAW_SIZE, val);
2466           regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
2467         }
2468       else
2469         {
2470           /* Integral values greater than one word are stored in consecutive
2471              registers starting with r0.  This will always be a multiple of
2472              the regiser size.  */
2473           int len = TYPE_LENGTH (type);
2474           int regno = ARM_A1_REGNUM;
2475
2476           while (len > 0)
2477             {
2478               regcache_cooked_write (regs, regno++, valbuf);
2479               len -= INT_REGISTER_RAW_SIZE;
2480               valbuf += INT_REGISTER_RAW_SIZE;
2481             }
2482         }
2483     }
2484   else
2485     {
2486       /* For a structure or union the behaviour is as if the value had
2487          been stored to word-aligned memory and then loaded into 
2488          registers with 32-bit load instruction(s).  */
2489       int len = TYPE_LENGTH (type);
2490       int regno = ARM_A1_REGNUM;
2491       bfd_byte tmpbuf[INT_REGISTER_RAW_SIZE];
2492
2493       while (len > 0)
2494         {
2495           memcpy (tmpbuf, valbuf,
2496                   len > INT_REGISTER_RAW_SIZE ? INT_REGISTER_RAW_SIZE : len);
2497           regcache_cooked_write (regs, regno++, tmpbuf);
2498           len -= INT_REGISTER_RAW_SIZE;
2499           valbuf += INT_REGISTER_RAW_SIZE;
2500         }
2501     }
2502 }
2503
2504 /* Store the address of the place in which to copy the structure the
2505    subroutine will return.  This is called from call_function.  */
2506
2507 static void
2508 arm_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
2509 {
2510   write_register (ARM_A1_REGNUM, addr);
2511 }
2512
2513 static int
2514 arm_get_longjmp_target (CORE_ADDR *pc)
2515 {
2516   CORE_ADDR jb_addr;
2517   char buf[INT_REGISTER_RAW_SIZE];
2518   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2519   
2520   jb_addr = read_register (ARM_A1_REGNUM);
2521
2522   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
2523                           INT_REGISTER_RAW_SIZE))
2524     return 0;
2525
2526   *pc = extract_address (buf, INT_REGISTER_RAW_SIZE);
2527   return 1;
2528 }
2529
2530 /* Return non-zero if the PC is inside a thumb call thunk.  */
2531
2532 int
2533 arm_in_call_stub (CORE_ADDR pc, char *name)
2534 {
2535   CORE_ADDR start_addr;
2536
2537   /* Find the starting address of the function containing the PC.  If
2538      the caller didn't give us a name, look it up at the same time.  */
2539   if (0 == find_pc_partial_function (pc, name ? NULL : &name, 
2540                                      &start_addr, NULL))
2541     return 0;
2542
2543   return strncmp (name, "_call_via_r", 11) == 0;
2544 }
2545
2546 /* If PC is in a Thumb call or return stub, return the address of the
2547    target PC, which is in a register.  The thunk functions are called
2548    _called_via_xx, where x is the register name.  The possible names
2549    are r0-r9, sl, fp, ip, sp, and lr.  */
2550
2551 CORE_ADDR
2552 arm_skip_stub (CORE_ADDR pc)
2553 {
2554   char *name;
2555   CORE_ADDR start_addr;
2556
2557   /* Find the starting address and name of the function containing the PC.  */
2558   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
2559     return 0;
2560
2561   /* Call thunks always start with "_call_via_".  */
2562   if (strncmp (name, "_call_via_", 10) == 0)
2563     {
2564       /* Use the name suffix to determine which register contains the
2565          target PC.  */
2566       static char *table[15] =
2567       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
2568        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
2569       };
2570       int regno;
2571
2572       for (regno = 0; regno <= 14; regno++)
2573         if (strcmp (&name[10], table[regno]) == 0)
2574           return read_register (regno);
2575     }
2576
2577   return 0;                     /* not a stub */
2578 }
2579
2580 /* If the user changes the register disassembly flavor used for info
2581    register and other commands, we have to also switch the flavor used
2582    in opcodes for disassembly output.  This function is run in the set
2583    disassembly_flavor command, and does that.  */
2584
2585 static void
2586 set_disassembly_flavor_sfunc (char *args, int from_tty,
2587                               struct cmd_list_element *c)
2588 {
2589   set_disassembly_flavor ();
2590 }
2591 \f
2592 /* Return the ARM register name corresponding to register I.  */
2593 static const char *
2594 arm_register_name (int i)
2595 {
2596   return arm_register_names[i];
2597 }
2598
2599 static void
2600 set_disassembly_flavor (void)
2601 {
2602   const char *setname, *setdesc, **regnames;
2603   int numregs, j;
2604
2605   /* Find the flavor that the user wants in the opcodes table.  */
2606   int current = 0;
2607   numregs = get_arm_regnames (current, &setname, &setdesc, &regnames);
2608   while ((disassembly_flavor != setname)
2609          && (current < num_flavor_options))
2610     get_arm_regnames (++current, &setname, &setdesc, &regnames);
2611   current_option = current;
2612
2613   /* Fill our copy.  */
2614   for (j = 0; j < numregs; j++)
2615     arm_register_names[j] = (char *) regnames[j];
2616
2617   /* Adjust case.  */
2618   if (isupper (*regnames[ARM_PC_REGNUM]))
2619     {
2620       arm_register_names[ARM_FPS_REGNUM] = "FPS";
2621       arm_register_names[ARM_PS_REGNUM] = "CPSR";
2622     }
2623   else
2624     {
2625       arm_register_names[ARM_FPS_REGNUM] = "fps";
2626       arm_register_names[ARM_PS_REGNUM] = "cpsr";
2627     }
2628
2629   /* Synchronize the disassembler.  */
2630   set_arm_regname_option (current);
2631 }
2632
2633 /* arm_othernames implements the "othernames" command.  This is kind
2634    of hacky, and I prefer the set-show disassembly-flavor which is
2635    also used for the x86 gdb.  I will keep this around, however, in
2636    case anyone is actually using it.  */
2637
2638 static void
2639 arm_othernames (char *names, int n)
2640 {
2641   /* Circle through the various flavors.  */
2642   current_option = (current_option + 1) % num_flavor_options;
2643
2644   disassembly_flavor = valid_flavors[current_option];
2645   set_disassembly_flavor ();
2646 }
2647
2648 /* Fetch, and possibly build, an appropriate link_map_offsets structure
2649    for ARM linux targets using the struct offsets defined in <link.h>.
2650    Note, however, that link.h is not actually referred to in this file.
2651    Instead, the relevant structs offsets were obtained from examining
2652    link.h.  (We can't refer to link.h from this file because the host
2653    system won't necessarily have it, or if it does, the structs which
2654    it defines will refer to the host system, not the target).  */
2655
2656 struct link_map_offsets *
2657 arm_linux_svr4_fetch_link_map_offsets (void)
2658 {
2659   static struct link_map_offsets lmo;
2660   static struct link_map_offsets *lmp = 0;
2661
2662   if (lmp == 0)
2663     {
2664       lmp = &lmo;
2665
2666       lmo.r_debug_size = 8;     /* Actual size is 20, but this is all we
2667                                    need.  */
2668
2669       lmo.r_map_offset = 4;
2670       lmo.r_map_size   = 4;
2671
2672       lmo.link_map_size = 20;   /* Actual size is 552, but this is all we
2673                                    need.  */
2674
2675       lmo.l_addr_offset = 0;
2676       lmo.l_addr_size   = 4;
2677
2678       lmo.l_name_offset = 4;
2679       lmo.l_name_size   = 4;
2680
2681       lmo.l_next_offset = 12;
2682       lmo.l_next_size   = 4;
2683
2684       lmo.l_prev_offset = 16;
2685       lmo.l_prev_size   = 4;
2686     }
2687
2688     return lmp;
2689 }
2690
2691 /* Test whether the coff symbol specific value corresponds to a Thumb
2692    function.  */
2693
2694 static int
2695 coff_sym_is_thumb (int val)
2696 {
2697   return (val == C_THUMBEXT ||
2698           val == C_THUMBSTAT ||
2699           val == C_THUMBEXTFUNC ||
2700           val == C_THUMBSTATFUNC ||
2701           val == C_THUMBLABEL);
2702 }
2703
2704 /* arm_coff_make_msymbol_special()
2705    arm_elf_make_msymbol_special()
2706    
2707    These functions test whether the COFF or ELF symbol corresponds to
2708    an address in thumb code, and set a "special" bit in a minimal
2709    symbol to indicate that it does.  */
2710    
2711 static void
2712 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
2713 {
2714   /* Thumb symbols are of type STT_LOPROC, (synonymous with
2715      STT_ARM_TFUNC).  */
2716   if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
2717       == STT_LOPROC)
2718     MSYMBOL_SET_SPECIAL (msym);
2719 }
2720
2721 static void
2722 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
2723 {
2724   if (coff_sym_is_thumb (val))
2725     MSYMBOL_SET_SPECIAL (msym);
2726 }
2727
2728 \f
2729 static enum gdb_osabi
2730 arm_elf_osabi_sniffer (bfd *abfd)
2731 {
2732   unsigned int elfosabi, eflags;
2733   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
2734
2735   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
2736
2737   switch (elfosabi)
2738     {
2739     case ELFOSABI_NONE:  
2740       /* When elfosabi is ELFOSABI_NONE (0), then the ELF structures in the
2741          file are conforming to the base specification for that machine 
2742          (there are no OS-specific extensions).  In order to determine the 
2743          real OS in use we must look for OS notes that have been added.  */
2744       bfd_map_over_sections (abfd,
2745                              generic_elf_osabi_sniff_abi_tag_sections,  
2746                              &osabi);
2747       if (osabi == GDB_OSABI_UNKNOWN)
2748         {
2749           /* Existing ARM tools don't set this field, so look at the EI_FLAGS
2750              field for more information.  */
2751           eflags = EF_ARM_EABI_VERSION(elf_elfheader(abfd)->e_flags);
2752           switch (eflags)
2753             {
2754             case EF_ARM_EABI_VER1:
2755               osabi = GDB_OSABI_ARM_EABI_V1;
2756               break;
2757
2758             case EF_ARM_EABI_VER2:
2759               osabi = GDB_OSABI_ARM_EABI_V2;
2760               break;
2761
2762             case EF_ARM_EABI_UNKNOWN:
2763               /* Assume GNU tools.  */
2764               osabi = GDB_OSABI_ARM_APCS;
2765               break;
2766
2767             default:
2768               internal_error (__FILE__, __LINE__,
2769                               "arm_elf_osabi_sniffer: Unknown ARM EABI "
2770                               "version 0x%x", eflags);
2771             }
2772         }
2773       break;
2774
2775     case ELFOSABI_ARM:
2776       /* GNU tools use this value.  Check note sections in this case,
2777          as well.  */
2778       bfd_map_over_sections (abfd,
2779                              generic_elf_osabi_sniff_abi_tag_sections, 
2780                              &osabi);
2781       if (osabi == GDB_OSABI_UNKNOWN)
2782         {
2783           /* Assume APCS ABI.  */
2784           osabi = GDB_OSABI_ARM_APCS;
2785         }
2786       break;
2787
2788     case ELFOSABI_FREEBSD:
2789       osabi = GDB_OSABI_FREEBSD_ELF;
2790       break;
2791
2792     case ELFOSABI_NETBSD:
2793       osabi = GDB_OSABI_NETBSD_ELF;
2794       break;
2795
2796     case ELFOSABI_LINUX:
2797       osabi = GDB_OSABI_LINUX;
2798       break;
2799     }
2800
2801   return osabi;
2802 }
2803
2804 \f
2805 /* Initialize the current architecture based on INFO.  If possible,
2806    re-use an architecture from ARCHES, which is a list of
2807    architectures already created during this debugging session.
2808
2809    Called e.g. at program startup, when reading a core file, and when
2810    reading a binary file.  */
2811
2812 static struct gdbarch *
2813 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2814 {
2815   struct gdbarch_tdep *tdep;
2816   struct gdbarch *gdbarch;
2817   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
2818
2819   /* Try to deterimine the ABI of the object we are loading.  */
2820
2821   if (info.abfd != NULL)
2822     {
2823       osabi = gdbarch_lookup_osabi (info.abfd);
2824       if (osabi == GDB_OSABI_UNKNOWN)
2825         {
2826           switch (bfd_get_flavour (info.abfd))
2827             {
2828             case bfd_target_aout_flavour:
2829               /* Assume it's an old APCS-style ABI.  */
2830               osabi = GDB_OSABI_ARM_APCS;
2831               break;
2832
2833             case bfd_target_coff_flavour:
2834               /* Assume it's an old APCS-style ABI.  */
2835               /* XXX WinCE?  */
2836               osabi = GDB_OSABI_ARM_APCS;
2837               break;
2838
2839             default:
2840               /* Leave it as "unknown".  */
2841             }
2842         }
2843     }
2844
2845   /* Find a candidate among extant architectures.  */
2846   for (arches = gdbarch_list_lookup_by_info (arches, &info);
2847        arches != NULL;
2848        arches = gdbarch_list_lookup_by_info (arches->next, &info))
2849     {
2850       /* Make sure the ABI selection matches.  */
2851       tdep = gdbarch_tdep (arches->gdbarch);
2852       if (tdep && tdep->osabi == osabi)
2853         return arches->gdbarch;
2854     }
2855
2856   tdep = xmalloc (sizeof (struct gdbarch_tdep));
2857   gdbarch = gdbarch_alloc (&info, tdep);
2858
2859   /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
2860      ready to unwind the PC first (see frame.c:get_prev_frame()).  */
2861   set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
2862
2863   tdep->osabi = osabi;
2864
2865   /* This is the way it has always defaulted.  */
2866   tdep->fp_model = ARM_FLOAT_FPA;
2867
2868   /* Breakpoints.  */
2869   switch (info.byte_order)
2870     {
2871     case BFD_ENDIAN_BIG:
2872       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
2873       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
2874       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
2875       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
2876
2877       break;
2878
2879     case BFD_ENDIAN_LITTLE:
2880       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
2881       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
2882       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
2883       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
2884
2885       break;
2886
2887     default:
2888       internal_error (__FILE__, __LINE__,
2889                       "arm_gdbarch_init: bad byte order for float format");
2890     }
2891
2892   /* On ARM targets char defaults to unsigned.  */
2893   set_gdbarch_char_signed (gdbarch, 0);
2894
2895   /* This should be low enough for everything.  */
2896   tdep->lowest_pc = 0x20;
2897   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
2898
2899   set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
2900   set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
2901
2902   set_gdbarch_call_dummy_p (gdbarch, 1);
2903   set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
2904
2905   set_gdbarch_call_dummy_words (gdbarch, arm_call_dummy_words);
2906   set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
2907   set_gdbarch_call_dummy_start_offset (gdbarch, 0);
2908   set_gdbarch_call_dummy_length (gdbarch, 0);
2909
2910   set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
2911
2912   set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
2913   set_gdbarch_push_return_address (gdbarch, arm_push_return_address);
2914
2915   set_gdbarch_push_arguments (gdbarch, arm_push_arguments);
2916
2917   /* Frame handling.  */
2918   set_gdbarch_frame_chain_valid (gdbarch, arm_frame_chain_valid);
2919   set_gdbarch_init_extra_frame_info (gdbarch, arm_init_extra_frame_info);
2920   set_gdbarch_read_fp (gdbarch, arm_read_fp);
2921   set_gdbarch_frame_chain (gdbarch, arm_frame_chain);
2922   set_gdbarch_frameless_function_invocation
2923     (gdbarch, arm_frameless_function_invocation);
2924   set_gdbarch_frame_saved_pc (gdbarch, arm_frame_saved_pc);
2925   set_gdbarch_frame_args_address (gdbarch, arm_frame_args_address);
2926   set_gdbarch_frame_locals_address (gdbarch, arm_frame_locals_address);
2927   set_gdbarch_frame_num_args (gdbarch, arm_frame_num_args);
2928   set_gdbarch_frame_args_skip (gdbarch, 0);
2929   set_gdbarch_frame_init_saved_regs (gdbarch, arm_frame_init_saved_regs);
2930   set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
2931   set_gdbarch_pop_frame (gdbarch, arm_pop_frame);
2932
2933   /* Address manipulation.  */
2934   set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
2935   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
2936
2937   /* Offset from address of function to start of its code.  */
2938   set_gdbarch_function_start_offset (gdbarch, 0);
2939
2940   /* Advance PC across function entry code.  */
2941   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
2942
2943   /* Get the PC when a frame might not be available.  */
2944   set_gdbarch_saved_pc_after_call (gdbarch, arm_saved_pc_after_call);
2945
2946   /* The stack grows downward.  */
2947   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2948
2949   /* Breakpoint manipulation.  */
2950   set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
2951   set_gdbarch_decr_pc_after_break (gdbarch, 0);
2952
2953   /* Information about registers, etc.  */
2954   set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
2955   set_gdbarch_fp_regnum (gdbarch, ARM_FP_REGNUM);       /* ??? */
2956   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
2957   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
2958   set_gdbarch_register_byte (gdbarch, arm_register_byte);
2959   set_gdbarch_register_bytes (gdbarch,
2960                               (NUM_GREGS * INT_REGISTER_RAW_SIZE
2961                                + NUM_FREGS * FP_REGISTER_RAW_SIZE
2962                                + NUM_SREGS * STATUS_REGISTER_SIZE));
2963   set_gdbarch_num_regs (gdbarch, NUM_GREGS + NUM_FREGS + NUM_SREGS);
2964   set_gdbarch_register_raw_size (gdbarch, arm_register_raw_size);
2965   set_gdbarch_register_virtual_size (gdbarch, arm_register_virtual_size);
2966   set_gdbarch_max_register_raw_size (gdbarch, FP_REGISTER_RAW_SIZE);
2967   set_gdbarch_max_register_virtual_size (gdbarch, FP_REGISTER_VIRTUAL_SIZE);
2968   set_gdbarch_register_virtual_type (gdbarch, arm_register_type);
2969
2970   /* Internal <-> external register number maps.  */
2971   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
2972
2973   /* Integer registers are 4 bytes.  */
2974   set_gdbarch_register_size (gdbarch, 4);
2975   set_gdbarch_register_name (gdbarch, arm_register_name);
2976
2977   /* Returning results.  */
2978   set_gdbarch_extract_return_value (gdbarch, arm_extract_return_value);
2979   set_gdbarch_store_return_value (gdbarch, arm_store_return_value);
2980   set_gdbarch_store_struct_return (gdbarch, arm_store_struct_return);
2981   set_gdbarch_use_struct_convention (gdbarch, arm_use_struct_convention);
2982   set_gdbarch_extract_struct_value_address (gdbarch,
2983                                             arm_extract_struct_value_address);
2984
2985   /* Single stepping.  */
2986   /* XXX For an RDI target we should ask the target if it can single-step.  */
2987   set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
2988
2989   /* Minsymbol frobbing.  */
2990   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
2991   set_gdbarch_coff_make_msymbol_special (gdbarch,
2992                                          arm_coff_make_msymbol_special);
2993
2994   /* Hook in the ABI-specific overrides, if they have been registered.  */
2995   gdbarch_init_osabi (info, gdbarch, osabi);
2996
2997   /* Now we have tuned the configuration, set a few final things,
2998      based on what the OS ABI has told us.  */
2999
3000   if (tdep->jb_pc >= 0)
3001     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
3002
3003   /* Floating point sizes and format.  */
3004   switch (info.byte_order)
3005     {
3006     case BFD_ENDIAN_BIG:
3007       set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
3008       set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_big);
3009       set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
3010       
3011       break;
3012
3013     case BFD_ENDIAN_LITTLE:
3014       set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
3015       if (tdep->fp_model == ARM_FLOAT_VFP
3016           || tdep->fp_model == ARM_FLOAT_SOFT_VFP)
3017         {
3018           set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_little);
3019           set_gdbarch_long_double_format (gdbarch,
3020                                           &floatformat_ieee_double_little);
3021         }
3022       else
3023         {
3024           set_gdbarch_double_format
3025             (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
3026           set_gdbarch_long_double_format
3027             (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
3028         }
3029       break;
3030
3031     default:
3032       internal_error (__FILE__, __LINE__,
3033                       "arm_gdbarch_init: bad byte order for float format");
3034     }
3035
3036   /* We can't use SIZEOF_FRAME_SAVED_REGS here, since that still
3037      references the old architecture vector, not the one we are
3038      building here.  */
3039   if (get_frame_saved_regs (&prologue_cache) != NULL)
3040     xfree (get_frame_saved_regs (&prologue_cache));
3041
3042   /* We can't use NUM_REGS nor NUM_PSEUDO_REGS here, since that still
3043      references the old architecture vector, not the one we are
3044      building here.  */
3045   prologue_cache.saved_regs = (CORE_ADDR *)
3046     xcalloc (1, (sizeof (CORE_ADDR)
3047                  * (gdbarch_num_regs (gdbarch)
3048                     + gdbarch_num_pseudo_regs (gdbarch))));
3049
3050   return gdbarch;
3051 }
3052
3053 static void
3054 arm_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3055 {
3056   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3057
3058   if (tdep == NULL)
3059     return;
3060
3061   fprintf_unfiltered (file, "arm_dump_tdep: OS ABI = %s\n",
3062                       gdbarch_osabi_name (tdep->osabi));
3063
3064   fprintf_unfiltered (file, "arm_dump_tdep: Lowest pc = 0x%lx",
3065                       (unsigned long) tdep->lowest_pc);
3066 }
3067
3068 static void
3069 arm_init_abi_eabi_v1 (struct gdbarch_info info,
3070                       struct gdbarch *gdbarch)
3071 {
3072   /* Place-holder.  */
3073 }
3074
3075 static void
3076 arm_init_abi_eabi_v2 (struct gdbarch_info info,
3077                       struct gdbarch *gdbarch)
3078 {
3079   /* Place-holder.  */
3080 }
3081
3082 static void
3083 arm_init_abi_apcs (struct gdbarch_info info,
3084                    struct gdbarch *gdbarch)
3085 {
3086   /* Place-holder.  */
3087 }
3088
3089 void
3090 _initialize_arm_tdep (void)
3091 {
3092   struct ui_file *stb;
3093   long length;
3094   struct cmd_list_element *new_cmd;
3095   const char *setname;
3096   const char *setdesc;
3097   const char **regnames;
3098   int numregs, i, j;
3099   static char *helptext;
3100
3101   if (GDB_MULTI_ARCH)
3102     gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
3103
3104   /* Register an ELF OS ABI sniffer for ARM binaries.  */
3105   gdbarch_register_osabi_sniffer (bfd_arch_arm,
3106                                   bfd_target_elf_flavour,
3107                                   arm_elf_osabi_sniffer);
3108
3109   /* Register some ABI variants for embedded systems.  */
3110   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_ARM_EABI_V1,
3111                           arm_init_abi_eabi_v1);
3112   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_ARM_EABI_V2,
3113                           arm_init_abi_eabi_v2);
3114   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_ARM_APCS,
3115                           arm_init_abi_apcs);
3116
3117   tm_print_insn = gdb_print_insn_arm;
3118
3119   /* Get the number of possible sets of register names defined in opcodes.  */
3120   num_flavor_options = get_arm_regname_num_options ();
3121
3122   /* Sync the opcode insn printer with our register viewer.  */
3123   parse_arm_disassembler_option ("reg-names-std");
3124
3125   /* Begin creating the help text.  */
3126   stb = mem_fileopen ();
3127   fprintf_unfiltered (stb, "Set the disassembly flavor.\n\
3128 The valid values are:\n");
3129
3130   /* Initialize the array that will be passed to add_set_enum_cmd().  */
3131   valid_flavors = xmalloc ((num_flavor_options + 1) * sizeof (char *));
3132   for (i = 0; i < num_flavor_options; i++)
3133     {
3134       numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
3135       valid_flavors[i] = setname;
3136       fprintf_unfiltered (stb, "%s - %s\n", setname,
3137                           setdesc);
3138       /* Copy the default names (if found) and synchronize disassembler.  */
3139       if (!strcmp (setname, "std"))
3140         {
3141           disassembly_flavor = setname;
3142           current_option = i;
3143           for (j = 0; j < numregs; j++)
3144             arm_register_names[j] = (char *) regnames[j];
3145           set_arm_regname_option (i);
3146         }
3147     }
3148   /* Mark the end of valid options.  */
3149   valid_flavors[num_flavor_options] = NULL;
3150
3151   /* Finish the creation of the help text.  */
3152   fprintf_unfiltered (stb, "The default is \"std\".");
3153   helptext = ui_file_xstrdup (stb, &length);
3154   ui_file_delete (stb);
3155
3156   /* Add the disassembly-flavor command.  */
3157   new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
3158                               valid_flavors,
3159                               &disassembly_flavor,
3160                               helptext,
3161                               &setlist);
3162   set_cmd_sfunc (new_cmd, set_disassembly_flavor_sfunc);
3163   add_show_from_set (new_cmd, &showlist);
3164
3165   /* ??? Maybe this should be a boolean.  */
3166   add_show_from_set (add_set_cmd ("apcs32", no_class,
3167                                   var_zinteger, (char *) &arm_apcs_32,
3168                                   "Set usage of ARM 32-bit mode.\n", &setlist),
3169                      &showlist);
3170
3171   /* Add the deprecated "othernames" command.  */
3172
3173   add_com ("othernames", class_obscure, arm_othernames,
3174            "Switch to the next set of register names.");
3175
3176   /* Fill in the prologue_cache fields.  */
3177   prologue_cache.saved_regs = NULL;
3178   prologue_cache.extra_info = (struct frame_extra_info *)
3179     xcalloc (1, sizeof (struct frame_extra_info));
3180
3181   /* Debugging flag.  */
3182   add_show_from_set (add_set_cmd ("arm", class_maintenance, var_zinteger,
3183                                   &arm_debug, "Set arm debugging.\n\
3184 When non-zero, arm specific debugging is enabled.", &setdebuglist),
3185                      &showdebuglist);
3186 }