This commit was generated by cvs2svn to track changes on a CVS vendor
[platform/upstream/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, 1997, 1998, 1999, 2000
3    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 "defs.h"
23 #include "frame.h"
24 #include "inferior.h"
25 #include "gdbcmd.h"
26 #include "gdbcore.h"
27 #include "symfile.h"
28 #include "gdb_string.h"
29 #include "coff/internal.h"      /* Internal format of COFF symbols in BFD */
30 #include "dis-asm.h"            /* For register flavors. */
31
32 extern void _initialize_arm_tdep (void);
33
34 /* Number of different reg name sets (options). */
35 static int num_flavor_options;
36
37 /* We have more registers than the disassembler as gdb can print the value
38    of special registers as well.
39    The general register names are overwritten by whatever is being used by
40    the disassembler at the moment. We also adjust the case of cpsr and fps. */
41
42 /* Initial value: Register names used in ARM's ISA documentation. */
43 static char * arm_register_name_strings[] =
44 {"r0",  "r1",  "r2",  "r3",     /*  0  1  2  3 */
45  "r4",  "r5",  "r6",  "r7",     /*  4  5  6  7 */
46  "r8",  "r9",  "r10", "r11",    /*  8  9 10 11 */
47  "r12", "sp",  "lr",  "pc",     /* 12 13 14 15 */
48  "f0",  "f1",  "f2",  "f3",     /* 16 17 18 19 */
49  "f4",  "f5",  "f6",  "f7",     /* 20 21 22 23 */
50  "fps", "cpsr" };               /* 24 25       */
51 char **arm_register_names = arm_register_name_strings;
52
53 /* Valid register name flavors.  */
54 static char **valid_flavors;
55
56 /* Disassembly flavor to use. Default to "std" register names. */
57 static char *disassembly_flavor;
58 static int current_option;      /* Index to that option in the opcodes table. */
59
60 /* This is used to keep the bfd arch_info in sync with the disassembly
61    flavor.  */
62 static void set_disassembly_flavor_sfunc(char *, int,
63                                          struct cmd_list_element *);
64 static void set_disassembly_flavor (void);
65
66 static void convert_from_extended (void *ptr, void *dbl);
67
68 /* Define other aspects of the stack frame.  We keep the offsets of
69    all saved registers, 'cause we need 'em a lot!  We also keep the
70    current size of the stack frame, and the offset of the frame
71    pointer from the stack pointer (for frameless functions, and when
72    we're still in the prologue of a function with a frame) */
73
74 struct frame_extra_info
75   {
76     struct frame_saved_regs fsr;
77     int framesize;
78     int frameoffset;
79     int framereg;
80   };
81
82 /* Addresses for calling Thumb functions have the bit 0 set.
83    Here are some macros to test, set, or clear bit 0 of addresses.  */
84 #define IS_THUMB_ADDR(addr)     ((addr) & 1)
85 #define MAKE_THUMB_ADDR(addr)   ((addr) | 1)
86 #define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
87
88 #define SWAP_TARGET_AND_HOST(buffer,len)                                \
89   do                                                                    \
90     {                                                                   \
91       if (TARGET_BYTE_ORDER != HOST_BYTE_ORDER)                         \
92         {                                                               \
93           char tmp;                                                     \
94           char *p = (char *)(buffer);                                   \
95           char *q = ((char *)(buffer)) + len - 1;                       \
96           for (; p < q; p++, q--)                                       \
97             {                                                           \
98               tmp = *q;                                                 \
99               *q = *p;                                                  \
100               *p = tmp;                                                 \
101             }                                                           \
102         }                                                               \
103     }                                                                   \
104   while (0)
105
106 /* Will a function return an aggregate type in memory or in a
107    register?  Return 0 if an aggregate type can be returned in a
108    register, 1 if it must be returned in memory.  */
109
110 int
111 arm_use_struct_convention (int gcc_p, struct type *type)
112 {
113   int nRc;
114   register enum type_code code;
115
116   /* In the ARM ABI, "integer" like aggregate types are returned in
117      registers.  For an aggregate type to be integer like, its size
118      must be less than or equal to REGISTER_SIZE and the offset of
119      each addressable subfield must be zero.  Note that bit fields are
120      not addressable, and all addressable subfields of unions always
121      start at offset zero.
122
123      This function is based on the behaviour of GCC 2.95.1.
124      See: gcc/arm.c: arm_return_in_memory() for details.
125
126      Note: All versions of GCC before GCC 2.95.2 do not set up the
127      parameters correctly for a function returning the following
128      structure: struct { float f;}; This should be returned in memory,
129      not a register.  Richard Earnshaw sent me a patch, but I do not
130      know of any way to detect if a function like the above has been
131      compiled with the correct calling convention.  */
132
133   /* All aggregate types that won't fit in a register must be returned
134      in memory.  */
135   if (TYPE_LENGTH (type) > REGISTER_SIZE)
136     {
137       return 1;
138     }
139
140   /* The only aggregate types that can be returned in a register are
141      structs and unions.  Arrays must be returned in memory.  */
142   code = TYPE_CODE (type);
143   if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
144     {
145       return 1;
146     }
147
148   /* Assume all other aggregate types can be returned in a register.
149      Run a check for structures, unions and arrays.  */
150   nRc = 0;
151
152   if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
153     {
154       int i;
155       /* Need to check if this struct/union is "integer" like.  For
156          this to be true, its size must be less than or equal to
157          REGISTER_SIZE and the offset of each addressable subfield
158          must be zero.  Note that bit fields are not addressable, and
159          unions always start at offset zero.  If any of the subfields
160          is a floating point type, the struct/union cannot be an
161          integer type.  */
162
163       /* For each field in the object, check:
164          1) Is it FP? --> yes, nRc = 1;
165          2) Is it addressable (bitpos != 0) and
166          not packed (bitsize == 0)?
167          --> yes, nRc = 1  
168        */
169
170       for (i = 0; i < TYPE_NFIELDS (type); i++)
171         {
172           enum type_code field_type_code;
173           field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i));
174
175           /* Is it a floating point type field?  */
176           if (field_type_code == TYPE_CODE_FLT)
177             {
178               nRc = 1;
179               break;
180             }
181
182           /* If bitpos != 0, then we have to care about it.  */
183           if (TYPE_FIELD_BITPOS (type, i) != 0)
184             {
185               /* Bitfields are not addressable.  If the field bitsize is 
186                  zero, then the field is not packed.  Hence it cannot be
187                  a bitfield or any other packed type.  */
188               if (TYPE_FIELD_BITSIZE (type, i) == 0)
189                 {
190                   nRc = 1;
191                   break;
192                 }
193             }
194         }
195     }
196
197   return nRc;
198 }
199
200 int
201 arm_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
202 {
203   return (chain != 0 && (FRAME_SAVED_PC (thisframe) >= LOWEST_PC));
204 }
205
206 /* Set to true if the 32-bit mode is in use. */
207
208 int arm_apcs_32 = 1;
209
210 /* Flag set by arm_fix_call_dummy that tells whether the target
211    function is a Thumb function.  This flag is checked by
212    arm_push_arguments.  FIXME: Change the PUSH_ARGUMENTS macro (and
213    its use in valops.c) to pass the function address as an additional
214    parameter.  */
215
216 static int target_is_thumb;
217
218 /* Flag set by arm_fix_call_dummy that tells whether the calling
219    function is a Thumb function.  This flag is checked by
220    arm_pc_is_thumb and arm_call_dummy_breakpoint_offset.  */
221
222 static int caller_is_thumb;
223
224 /* Determine if the program counter specified in MEMADDR is in a Thumb
225    function.  */
226
227 int
228 arm_pc_is_thumb (bfd_vma memaddr)
229 {
230   struct minimal_symbol *sym;
231
232   /* If bit 0 of the address is set, assume this is a Thumb address.  */
233   if (IS_THUMB_ADDR (memaddr))
234     return 1;
235
236   /* Thumb functions have a "special" bit set in minimal symbols.  */
237   sym = lookup_minimal_symbol_by_pc (memaddr);
238   if (sym)
239     {
240       return (MSYMBOL_IS_SPECIAL (sym));
241     }
242   else
243     {
244       return 0;
245     }
246 }
247
248 /* Determine if the program counter specified in MEMADDR is in a call
249    dummy being called from a Thumb function.  */
250
251 int
252 arm_pc_is_thumb_dummy (bfd_vma memaddr)
253 {
254   CORE_ADDR sp = read_sp ();
255
256   /* FIXME: Until we switch for the new call dummy macros, this heuristic
257      is the best we can do.  We are trying to determine if the pc is on
258      the stack, which (hopefully) will only happen in a call dummy.
259      We hope the current stack pointer is not so far alway from the dummy
260      frame location (true if we have not pushed large data structures or
261      gone too many levels deep) and that our 1024 is not enough to consider
262      code regions as part of the stack (true for most practical purposes) */
263   if (PC_IN_CALL_DUMMY (memaddr, sp, sp + 1024))
264     return caller_is_thumb;
265   else
266     return 0;
267 }
268
269 CORE_ADDR
270 arm_addr_bits_remove (CORE_ADDR val)
271 {
272   if (arm_pc_is_thumb (val))
273     return (val & (arm_apcs_32 ? 0xfffffffe : 0x03fffffe));
274   else
275     return (val & (arm_apcs_32 ? 0xfffffffc : 0x03fffffc));
276 }
277
278 CORE_ADDR
279 arm_saved_pc_after_call (struct frame_info *frame)
280 {
281   return ADDR_BITS_REMOVE (read_register (LR_REGNUM));
282 }
283
284 int
285 arm_frameless_function_invocation (struct frame_info *fi)
286 {
287   CORE_ADDR func_start, after_prologue;
288   int frameless;
289
290   func_start = (get_pc_function_start ((fi)->pc) + FUNCTION_START_OFFSET);
291   after_prologue = SKIP_PROLOGUE (func_start);
292
293   /* There are some frameless functions whose first two instructions
294      follow the standard APCS form, in which case after_prologue will
295      be func_start + 8. */
296
297   frameless = (after_prologue < func_start + 12);
298   return frameless;
299 }
300
301 /* A typical Thumb prologue looks like this:
302    push    {r7, lr}
303    add     sp, sp, #-28
304    add     r7, sp, #12
305    Sometimes the latter instruction may be replaced by:
306    mov     r7, sp
307    
308    or like this:
309    push    {r7, lr}
310    mov     r7, sp
311    sub     sp, #12
312    
313    or, on tpcs, like this:
314    sub     sp,#16
315    push    {r7, lr}
316    (many instructions)
317    mov     r7, sp
318    sub     sp, #12
319
320    There is always one instruction of three classes:
321    1 - push
322    2 - setting of r7
323    3 - adjusting of sp
324    
325    When we have found at least one of each class we are done with the prolog.
326    Note that the "sub sp, #NN" before the push does not count.
327    */
328
329 static CORE_ADDR
330 thumb_skip_prologue (CORE_ADDR pc)
331 {
332   CORE_ADDR current_pc;
333   int findmask = 0;     /* findmask:
334                            bit 0 - push { rlist }
335                            bit 1 - mov r7, sp  OR  add r7, sp, #imm  (setting of r7)
336                            bit 2 - sub sp, #simm  OR  add sp, #simm  (adjusting of sp)
337                         */
338
339   for (current_pc = pc; current_pc < pc + 40; current_pc += 2)
340     {
341       unsigned short insn = read_memory_unsigned_integer (current_pc, 2);
342
343       if ((insn & 0xfe00) == 0xb400)    /* push { rlist } */
344         {
345           findmask |= 1;  /* push found */
346         }
347       else if ((insn & 0xff00) == 0xb000)       /* add sp, #simm  OR  sub sp, #simm */
348         {
349           if ((findmask & 1) == 0)  /* before push ? */
350             continue;
351           else
352             findmask |= 4;  /* add/sub sp found */
353         }
354       else if ((insn & 0xff00) == 0xaf00)       /* add r7, sp, #imm */
355         {
356           findmask |= 2;  /* setting of r7 found */
357         }
358       else if (insn == 0x466f)                  /* mov r7, sp */
359         {
360           findmask |= 2;  /* setting of r7 found */
361         }
362       else
363         continue;       /* something in the prolog that we don't care about or some
364                            instruction from outside the prolog scheduled here for optimization */
365     }
366
367   return current_pc;
368 }
369
370 /* The APCS (ARM Procedure Call Standard) defines the following
371    prologue:
372
373    mov          ip, sp
374    [stmfd       sp!, {a1,a2,a3,a4}]
375    stmfd        sp!, {...,fp,ip,lr,pc}
376    [stfe        f7, [sp, #-12]!]
377    [stfe        f6, [sp, #-12]!]
378    [stfe        f5, [sp, #-12]!]
379    [stfe        f4, [sp, #-12]!]
380    sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
381
382 CORE_ADDR
383 arm_skip_prologue (CORE_ADDR pc)
384 {
385   unsigned long inst;
386   CORE_ADDR skip_pc;
387   CORE_ADDR func_addr, func_end;
388   struct symtab_and_line sal;
389
390   /* See what the symbol table says.  */
391
392   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
393     {
394       sal = find_pc_line (func_addr, 0);
395       if ((sal.line != 0) && (sal.end < func_end))
396         return sal.end;
397     }
398
399   /* Check if this is Thumb code.  */
400   if (arm_pc_is_thumb (pc))
401     return thumb_skip_prologue (pc);
402
403   /* Can't find the prologue end in the symbol table, try it the hard way
404      by disassembling the instructions. */
405   skip_pc = pc;
406   inst = read_memory_integer (skip_pc, 4);
407   if (inst != 0xe1a0c00d)       /* mov ip, sp */
408     return pc;
409
410   skip_pc += 4;
411   inst = read_memory_integer (skip_pc, 4);
412   if ((inst & 0xfffffff0) == 0xe92d0000)        /* stmfd sp!,{a1,a2,a3,a4}  */
413     {
414       skip_pc += 4;
415       inst = read_memory_integer (skip_pc, 4);
416     }
417
418   if ((inst & 0xfffff800) != 0xe92dd800)        /* stmfd sp!,{...,fp,ip,lr,pc} */
419     return pc;
420
421   skip_pc += 4;
422   inst = read_memory_integer (skip_pc, 4);
423
424   /* Any insns after this point may float into the code, if it makes
425      for better instruction scheduling, so we skip them only if we
426      find them, but still consdier the function to be frame-ful.  */
427
428   /* We may have either one sfmfd instruction here, or several stfe
429      insns, depending on the version of floating point code we
430      support.  */
431   if ((inst & 0xffbf0fff) == 0xec2d0200)        /* sfmfd fn, <cnt>, [sp]! */
432     {
433       skip_pc += 4;
434       inst = read_memory_integer (skip_pc, 4);
435     }
436   else
437     {
438       while ((inst & 0xffff8fff) == 0xed6d0103)         /* stfe fn, [sp, #-12]! */
439         {
440           skip_pc += 4;
441           inst = read_memory_integer (skip_pc, 4);
442         }
443     }
444
445   if ((inst & 0xfffff000) == 0xe24cb000)        /* sub fp, ip, #nn */
446     skip_pc += 4;
447
448   return skip_pc;
449 }
450 /* *INDENT-OFF* */
451 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
452    This function decodes a Thumb function prologue to determine:
453      1) the size of the stack frame
454      2) which registers are saved on it
455      3) the offsets of saved regs
456      4) the offset from the stack pointer to the frame pointer
457    This information is stored in the "extra" fields of the frame_info.
458
459    A typical Thumb function prologue would create this stack frame
460    (offsets relative to FP)
461      old SP ->  24  stack parameters
462                 20  LR
463                 16  R7
464      R7 ->       0  local variables (16 bytes)
465      SP ->     -12  additional stack space (12 bytes)
466    The frame size would thus be 36 bytes, and the frame offset would be
467    12 bytes.  The frame register is R7. 
468    
469    The comments for thumb_skip_prolog() describe the algorithm we use to detect
470    the end of the prolog */
471 /* *INDENT-ON* */
472
473 static void
474 thumb_scan_prologue (struct frame_info *fi)
475 {
476   CORE_ADDR prologue_start;
477   CORE_ADDR prologue_end;
478   CORE_ADDR current_pc;
479   int saved_reg[16];            /* which register has been copied to register n? */
480   int findmask = 0;     /* findmask:
481                            bit 0 - push { rlist }
482                            bit 1 - mov r7, sp  OR  add r7, sp, #imm  (setting of r7)
483                            bit 2 - sub sp, #simm  OR  add sp, #simm  (adjusting of sp)
484                         */
485   int i;
486
487   if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
488     {
489       struct symtab_and_line sal = find_pc_line (prologue_start, 0);
490
491       if (sal.line == 0)        /* no line info, use current PC */
492         prologue_end = fi->pc;
493       else if (sal.end < prologue_end)  /* next line begins after fn end */
494         prologue_end = sal.end; /* (probably means no prologue)  */
495     }
496   else
497     prologue_end = prologue_start + 40;         /* We're in the boondocks: allow for */
498   /* 16 pushes, an add, and "mv fp,sp" */
499
500   prologue_end = min (prologue_end, fi->pc);
501
502   /* Initialize the saved register map.  When register H is copied to
503      register L, we will put H in saved_reg[L].  */
504   for (i = 0; i < 16; i++)
505     saved_reg[i] = i;
506
507   /* Search the prologue looking for instructions that set up the
508      frame pointer, adjust the stack pointer, and save registers.
509      Do this until all basic prolog instructions are found.  */
510
511   fi->framesize = 0;
512   for (current_pc = prologue_start;
513        (current_pc < prologue_end) && ((findmask & 7) != 7);
514        current_pc += 2)
515     {
516       unsigned short insn;
517       int regno;
518       int offset;
519
520       insn = read_memory_unsigned_integer (current_pc, 2);
521
522       if ((insn & 0xfe00) == 0xb400)    /* push { rlist } */
523         {
524           int mask;
525           findmask |= 1;  /* push found */
526           /* Bits 0-7 contain a mask for registers R0-R7.  Bit 8 says
527              whether to save LR (R14).  */
528           mask = (insn & 0xff) | ((insn & 0x100) << 6);
529
530           /* Calculate offsets of saved R0-R7 and LR. */
531           for (regno = LR_REGNUM; regno >= 0; regno--)
532             if (mask & (1 << regno))
533               {
534                 fi->framesize += 4;
535                 fi->fsr.regs[saved_reg[regno]] = -(fi->framesize);
536                 saved_reg[regno] = regno;       /* reset saved register map */
537               }
538         }
539       else if ((insn & 0xff00) == 0xb000)       /* add sp, #simm  OR  sub sp, #simm */
540         {
541           if ((findmask & 1) == 0)  /* before push ? */
542             continue;
543           else
544             findmask |= 4;  /* add/sub sp found */
545           
546           offset = (insn & 0x7f) << 2;  /* get scaled offset */
547           if (insn & 0x80)      /* is it signed? (==subtracting) */
548             {
549               fi->frameoffset += offset;
550               offset = -offset;
551             }
552           fi->framesize -= offset;
553         }
554       else if ((insn & 0xff00) == 0xaf00)       /* add r7, sp, #imm */
555         {
556           findmask |= 2;  /* setting of r7 found */
557           fi->framereg = THUMB_FP_REGNUM;
558           fi->frameoffset = (insn & 0xff) << 2;         /* get scaled offset */
559         }
560       else if (insn == 0x466f)                  /* mov r7, sp */
561         {
562           findmask |= 2;  /* setting of r7 found */
563           fi->framereg = THUMB_FP_REGNUM;
564           fi->frameoffset = 0;
565           saved_reg[THUMB_FP_REGNUM] = SP_REGNUM;
566         }
567       else if ((insn & 0xffc0) == 0x4640)       /* mov r0-r7, r8-r15 */
568         {
569           int lo_reg = insn & 7;        /* dest. register (r0-r7) */
570           int hi_reg = ((insn >> 3) & 7) + 8;   /* source register (r8-15) */
571           saved_reg[lo_reg] = hi_reg;   /* remember hi reg was saved */
572         }
573       else
574         continue;       /* something in the prolog that we don't care about or some
575                            instruction from outside the prolog scheduled here for optimization */
576     }
577 }
578
579 /* Check if prologue for this frame's PC has already been scanned.  If
580    it has, copy the relevant information about that prologue and
581    return non-zero.  Otherwise do not copy anything and return zero.
582
583    The information saved in the cache includes:
584    * the frame register number;
585    * the size of the stack frame;
586    * the offsets of saved regs (relative to the old SP); and
587    * the offset from the stack pointer to the frame pointer
588
589    The cache contains only one entry, since this is adequate for the
590    typical sequence of prologue scan requests we get.  When performing
591    a backtrace, GDB will usually ask to scan the same function twice
592    in a row (once to get the frame chain, and once to fill in the
593    extra frame information).  */
594
595 static struct frame_info prologue_cache;
596
597 static int
598 check_prologue_cache (struct frame_info *fi)
599 {
600   int i;
601
602   if (fi->pc == prologue_cache.pc)
603     {
604       fi->framereg = prologue_cache.framereg;
605       fi->framesize = prologue_cache.framesize;
606       fi->frameoffset = prologue_cache.frameoffset;
607       for (i = 0; i <= NUM_REGS; i++)
608         fi->fsr.regs[i] = prologue_cache.fsr.regs[i];
609       return 1;
610     }
611   else
612     return 0;
613 }
614
615
616 /* Copy the prologue information from fi to the prologue cache.  */
617
618 static void
619 save_prologue_cache (struct frame_info *fi)
620 {
621   int i;
622
623   prologue_cache.pc = fi->pc;
624   prologue_cache.framereg = fi->framereg;
625   prologue_cache.framesize = fi->framesize;
626   prologue_cache.frameoffset = fi->frameoffset;
627
628   for (i = 0; i <= NUM_REGS; i++)
629     prologue_cache.fsr.regs[i] = fi->fsr.regs[i];
630 }
631
632
633 /* This function decodes an ARM function prologue to determine:
634    1) the size of the stack frame
635    2) which registers are saved on it
636    3) the offsets of saved regs
637    4) the offset from the stack pointer to the frame pointer
638    This information is stored in the "extra" fields of the frame_info.
639
640    There are two basic forms for the ARM prologue.  The fixed argument
641    function call will look like:
642
643    mov    ip, sp
644    stmfd  sp!, {fp, ip, lr, pc}
645    sub    fp, ip, #4
646    [sub sp, sp, #4]
647
648    Which would create this stack frame (offsets relative to FP):
649    IP ->   4    (caller's stack)
650    FP ->   0    PC (points to address of stmfd instruction + 8 in callee)
651    -4   LR (return address in caller)
652    -8   IP (copy of caller's SP)
653    -12  FP (caller's FP)
654    SP -> -28    Local variables
655
656    The frame size would thus be 32 bytes, and the frame offset would be
657    28 bytes.  The stmfd call can also save any of the vN registers it
658    plans to use, which increases the frame size accordingly.
659
660    Note: The stored PC is 8 off of the STMFD instruction that stored it
661    because the ARM Store instructions always store PC + 8 when you read
662    the PC register.
663
664    A variable argument function call will look like:
665
666    mov    ip, sp
667    stmfd  sp!, {a1, a2, a3, a4}
668    stmfd  sp!, {fp, ip, lr, pc}
669    sub    fp, ip, #20
670
671    Which would create this stack frame (offsets relative to FP):
672    IP ->  20    (caller's stack)
673    16  A4
674    12  A3
675    8  A2
676    4  A1
677    FP ->   0    PC (points to address of stmfd instruction + 8 in callee)
678    -4   LR (return address in caller)
679    -8   IP (copy of caller's SP)
680    -12  FP (caller's FP)
681    SP -> -28    Local variables
682
683    The frame size would thus be 48 bytes, and the frame offset would be
684    28 bytes.
685
686    There is another potential complication, which is that the optimizer
687    will try to separate the store of fp in the "stmfd" instruction from
688    the "sub fp, ip, #NN" instruction.  Almost anything can be there, so
689    we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
690
691    Also, note, the original version of the ARM toolchain claimed that there
692    should be an
693
694    instruction at the end of the prologue.  I have never seen GCC produce
695    this, and the ARM docs don't mention it.  We still test for it below in
696    case it happens...
697
698  */
699
700 static void
701 arm_scan_prologue (struct frame_info *fi)
702 {
703   int regno, sp_offset, fp_offset;
704   CORE_ADDR prologue_start, prologue_end, current_pc;
705
706   /* Check if this function is already in the cache of frame information. */
707   if (check_prologue_cache (fi))
708     return;
709
710   /* Assume there is no frame until proven otherwise.  */
711   fi->framereg = SP_REGNUM;
712   fi->framesize = 0;
713   fi->frameoffset = 0;
714
715   /* Check for Thumb prologue.  */
716   if (arm_pc_is_thumb (fi->pc))
717     {
718       thumb_scan_prologue (fi);
719       save_prologue_cache (fi);
720       return;
721     }
722
723   /* Find the function prologue.  If we can't find the function in
724      the symbol table, peek in the stack frame to find the PC.  */
725   if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
726     {
727       /* Assume the prologue is everything between the first instruction
728          in the function and the first source line.  */
729       struct symtab_and_line sal = find_pc_line (prologue_start, 0);
730
731       if (sal.line == 0)        /* no line info, use current PC */
732         prologue_end = fi->pc;
733       else if (sal.end < prologue_end)  /* next line begins after fn end */
734         prologue_end = sal.end; /* (probably means no prologue)  */
735     }
736   else
737     {
738       /* Get address of the stmfd in the prologue of the callee; the saved
739          PC is the address of the stmfd + 8.  */
740       prologue_start = ADDR_BITS_REMOVE (read_memory_integer (fi->frame, 4))
741         - 8;
742       prologue_end = prologue_start + 64;       /* This is all the insn's
743                                                    that could be in the prologue,
744                                                    plus room for 5 insn's inserted
745                                                    by the scheduler.  */
746     }
747
748   /* Now search the prologue looking for instructions that set up the
749      frame pointer, adjust the stack pointer, and save registers.
750
751      Be careful, however, and if it doesn't look like a prologue,
752      don't try to scan it.  If, for instance, a frameless function
753      begins with stmfd sp!, then we will tell ourselves there is
754      a frame, which will confuse stack traceback, as well ad"finish" 
755      and other operations that rely on a knowledge of the stack
756      traceback.
757
758      In the APCS, the prologue should start with  "mov ip, sp" so
759      if we don't see this as the first insn, we will stop.  */
760
761   sp_offset = fp_offset = 0;
762
763   if (read_memory_unsigned_integer (prologue_start, 4)
764       == 0xe1a0c00d)            /* mov ip, sp */
765     {
766       for (current_pc = prologue_start + 4; current_pc < prologue_end;
767            current_pc += 4)
768         {
769           unsigned int insn = read_memory_unsigned_integer (current_pc, 4);
770
771           if ((insn & 0xffff0000) == 0xe92d0000)
772             /* stmfd sp!, {..., fp, ip, lr, pc}
773                or
774                stmfd sp!, {a1, a2, a3, a4}  */
775             {
776               int mask = insn & 0xffff;
777
778               /* Calculate offsets of saved registers. */
779               for (regno = PC_REGNUM; regno >= 0; regno--)
780                 if (mask & (1 << regno))
781                   {
782                     sp_offset -= 4;
783                     fi->fsr.regs[regno] = sp_offset;
784                   }
785             }
786           else if ((insn & 0xfffff000) == 0xe24cb000)   /* sub fp, ip #n */
787             {
788               unsigned imm = insn & 0xff;       /* immediate value */
789               unsigned rot = (insn & 0xf00) >> 7;       /* rotate amount */
790               imm = (imm >> rot) | (imm << (32 - rot));
791               fp_offset = -imm;
792               fi->framereg = FP_REGNUM;
793             }
794           else if ((insn & 0xfffff000) == 0xe24dd000)   /* sub sp, sp #n */
795             {
796               unsigned imm = insn & 0xff;       /* immediate value */
797               unsigned rot = (insn & 0xf00) >> 7;       /* rotate amount */
798               imm = (imm >> rot) | (imm << (32 - rot));
799               sp_offset -= imm;
800             }
801           else if ((insn & 0xffff7fff) == 0xed6d0103)   /* stfe f?, [sp, -#c]! */
802             {
803               sp_offset -= 12;
804               regno = F0_REGNUM + ((insn >> 12) & 0x07);
805               fi->fsr.regs[regno] = sp_offset;
806             }
807           else if ((insn & 0xffbf0fff) == 0xec2d0200)   /* sfmfd f0, 4, [sp!] */
808             {
809               int n_saved_fp_regs;
810               unsigned int fp_start_reg, fp_bound_reg;
811
812               if ((insn & 0x800) == 0x800)      /* N0 is set */
813                 {
814                   if ((insn & 0x40000) == 0x40000)      /* N1 is set */
815                     n_saved_fp_regs = 3;
816                   else
817                     n_saved_fp_regs = 1;
818                 }
819               else
820                 {
821                   if ((insn & 0x40000) == 0x40000)      /* N1 is set */
822                     n_saved_fp_regs = 2;
823                   else
824                     n_saved_fp_regs = 4;
825                 }
826
827               fp_start_reg = F0_REGNUM + ((insn >> 12) & 0x7);
828               fp_bound_reg = fp_start_reg + n_saved_fp_regs;
829               for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
830                 {
831                   sp_offset -= 12;
832                   fi->fsr.regs[fp_start_reg++] = sp_offset;
833                 }
834             }
835           else
836             /* The optimizer might shove anything into the prologue,
837                so we just skip what we don't recognize. */
838             continue;
839         }
840     }
841
842   /* The frame size is just the negative of the offset (from the original SP)
843      of the last thing thing we pushed on the stack.  The frame offset is
844      [new FP] - [new SP].  */
845   fi->framesize = -sp_offset;
846   fi->frameoffset = fp_offset - sp_offset;
847
848   save_prologue_cache (fi);
849 }
850
851 /* Find REGNUM on the stack.  Otherwise, it's in an active register.
852    One thing we might want to do here is to check REGNUM against the
853    clobber mask, and somehow flag it as invalid if it isn't saved on
854    the stack somewhere.  This would provide a graceful failure mode
855    when trying to get the value of caller-saves registers for an inner
856    frame.  */
857
858 static CORE_ADDR
859 arm_find_callers_reg (struct frame_info *fi, int regnum)
860 {
861   for (; fi; fi = fi->next)
862
863 #if 0                           /* FIXME: enable this code if we convert to new call dummy scheme.  */
864     if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
865       return generic_read_register_dummy (fi->pc, fi->frame, regnum);
866     else
867 #endif
868     if (fi->fsr.regs[regnum] != 0)
869       return read_memory_integer (fi->fsr.regs[regnum],
870                                   REGISTER_RAW_SIZE (regnum));
871   return read_register (regnum);
872 }
873 /* *INDENT-OFF* */
874 /* Function: frame_chain
875    Given a GDB frame, determine the address of the calling function's frame.
876    This will be used to create a new GDB frame struct, and then
877    INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
878    For ARM, we save the frame size when we initialize the frame_info.
879
880    The original definition of this function was a macro in tm-arm.h:
881       { In the case of the ARM, the frame's nominal address is the FP value,
882          and 12 bytes before comes the saved previous FP value as a 4-byte word.  }
883
884       #define FRAME_CHAIN(thisframe)  \
885         ((thisframe)->pc >= LOWEST_PC ?    \
886          read_memory_integer ((thisframe)->frame - 12, 4) :\
887          0)
888 */
889 /* *INDENT-ON* */
890
891 CORE_ADDR
892 arm_frame_chain (struct frame_info *fi)
893 {
894 #if 0                           /* FIXME: enable this code if we convert to new call dummy scheme.  */
895   CORE_ADDR fn_start, callers_pc, fp;
896
897   /* is this a dummy frame? */
898   if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
899     return fi->frame;           /* dummy frame same as caller's frame */
900
901   /* is caller-of-this a dummy frame? */
902   callers_pc = FRAME_SAVED_PC (fi);     /* find out who called us: */
903   fp = arm_find_callers_reg (fi, FP_REGNUM);
904   if (PC_IN_CALL_DUMMY (callers_pc, fp, fp))
905     return fp;                  /* dummy frame's frame may bear no relation to ours */
906
907   if (find_pc_partial_function (fi->pc, 0, &fn_start, 0))
908     if (fn_start == entry_point_address ())
909       return 0;                 /* in _start fn, don't chain further */
910 #endif
911   CORE_ADDR caller_pc, fn_start;
912   struct frame_info caller_fi;
913   int framereg = fi->framereg;
914
915   if (fi->pc < LOWEST_PC)
916     return 0;
917
918   /* If the caller is the startup code, we're at the end of the chain.  */
919   caller_pc = FRAME_SAVED_PC (fi);
920   if (find_pc_partial_function (caller_pc, 0, &fn_start, 0))
921     if (fn_start == entry_point_address ())
922       return 0;
923
924   /* If the caller is Thumb and the caller is ARM, or vice versa,
925      the frame register of the caller is different from ours.
926      So we must scan the prologue of the caller to determine its
927      frame register number. */
928   if (arm_pc_is_thumb (caller_pc) != arm_pc_is_thumb (fi->pc))
929     {
930       memset (&caller_fi, 0, sizeof (caller_fi));
931       caller_fi.pc = caller_pc;
932       arm_scan_prologue (&caller_fi);
933       framereg = caller_fi.framereg;
934     }
935
936   /* If the caller used a frame register, return its value.
937      Otherwise, return the caller's stack pointer.  */
938   if (framereg == FP_REGNUM || framereg == THUMB_FP_REGNUM)
939     return arm_find_callers_reg (fi, framereg);
940   else
941     return fi->frame + fi->framesize;
942 }
943
944 /* This function actually figures out the frame address for a given pc
945    and sp.  This is tricky because we sometimes don't use an explicit
946    frame pointer, and the previous stack pointer isn't necessarily
947    recorded on the stack.  The only reliable way to get this info is
948    to examine the prologue.  FROMLEAF is a little confusing, it means
949    this is the next frame up the chain AFTER a frameless function.  If
950    this is true, then the frame value for this frame is still in the
951    fp register.  */
952
953 void
954 arm_init_extra_frame_info (int fromleaf, struct frame_info *fi)
955 {
956   int reg;
957
958   if (fi->next)
959     fi->pc = FRAME_SAVED_PC (fi->next);
960
961   memset (fi->fsr.regs, '\000', sizeof fi->fsr.regs);
962
963 #if 0                           /* FIXME: enable this code if we convert to new call dummy scheme.  */
964   if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
965     {
966       /* We need to setup fi->frame here because run_stack_dummy gets it wrong
967          by assuming it's always FP.  */
968       fi->frame = generic_read_register_dummy (fi->pc, fi->frame, SP_REGNUM);
969       fi->framesize = 0;
970       fi->frameoffset = 0;
971       return;
972     }
973   else
974 #endif
975     {
976       arm_scan_prologue (fi);
977
978       if (!fi->next)
979         /* this is the innermost frame? */
980         fi->frame = read_register (fi->framereg);
981       else if (fi->framereg == FP_REGNUM || fi->framereg == THUMB_FP_REGNUM)
982         {
983           /* not the innermost frame */
984           /* If we have an FP, the callee saved it. */
985           if (fi->next->fsr.regs[fi->framereg] != 0)
986             fi->frame =
987               read_memory_integer (fi->next->fsr.regs[fi->framereg], 4);
988           else if (fromleaf)
989             /* If we were called by a frameless fn.  then our frame is
990                still in the frame pointer register on the board... */
991             fi->frame = read_fp ();
992         }
993
994       /* Calculate actual addresses of saved registers using offsets
995          determined by arm_scan_prologue.  */
996       for (reg = 0; reg < NUM_REGS; reg++)
997         if (fi->fsr.regs[reg] != 0)
998           fi->fsr.regs[reg] += fi->frame + fi->framesize - fi->frameoffset;
999     }
1000 }
1001
1002
1003 /* Find the caller of this frame.  We do this by seeing if LR_REGNUM
1004    is saved in the stack anywhere, otherwise we get it from the
1005    registers.
1006
1007    The old definition of this function was a macro:
1008    #define FRAME_SAVED_PC(FRAME) \
1009    ADDR_BITS_REMOVE (read_memory_integer ((FRAME)->frame - 4, 4)) */
1010
1011 CORE_ADDR
1012 arm_frame_saved_pc (struct frame_info *fi)
1013 {
1014 #if 0                           /* FIXME: enable this code if we convert to new call dummy scheme.  */
1015   if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
1016     return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
1017   else
1018 #endif
1019     {
1020       CORE_ADDR pc = arm_find_callers_reg (fi, LR_REGNUM);
1021       return IS_THUMB_ADDR (pc) ? UNMAKE_THUMB_ADDR (pc) : pc;
1022     }
1023 }
1024
1025 /* Return the frame address.  On ARM, it is R11; on Thumb it is R7.
1026    Examine the Program Status Register to decide which state we're in.  */
1027
1028 CORE_ADDR
1029 arm_target_read_fp (void)
1030 {
1031   if (read_register (PS_REGNUM) & 0x20)         /* Bit 5 is Thumb state bit */
1032     return read_register (THUMB_FP_REGNUM);     /* R7 if Thumb */
1033   else
1034     return read_register (FP_REGNUM);   /* R11 if ARM */
1035 }
1036
1037 /* Calculate the frame offsets of the saved registers (ARM version).  */
1038
1039 void
1040 arm_frame_find_saved_regs (struct frame_info *fi,
1041                            struct frame_saved_regs *regaddr)
1042 {
1043   memcpy (regaddr, &fi->fsr, sizeof (struct frame_saved_regs));
1044 }
1045
1046 void
1047 arm_push_dummy_frame (void)
1048 {
1049   CORE_ADDR old_sp = read_register (SP_REGNUM);
1050   CORE_ADDR sp = old_sp;
1051   CORE_ADDR fp, prologue_start;
1052   int regnum;
1053
1054   /* Push the two dummy prologue instructions in reverse order,
1055      so that they'll be in the correct low-to-high order in memory.  */
1056   /* sub     fp, ip, #4 */
1057   sp = push_word (sp, 0xe24cb004);
1058   /*  stmdb   sp!, {r0-r10, fp, ip, lr, pc} */
1059   prologue_start = sp = push_word (sp, 0xe92ddfff);
1060
1061   /* Push a pointer to the dummy prologue + 12, because when stm
1062      instruction stores the PC, it stores the address of the stm
1063      instruction itself plus 12.  */
1064   fp = sp = push_word (sp, prologue_start + 12);
1065   sp = push_word (sp, read_register (PC_REGNUM));       /* FIXME: was PS_REGNUM */
1066   sp = push_word (sp, old_sp);
1067   sp = push_word (sp, read_register (FP_REGNUM));
1068
1069   for (regnum = 10; regnum >= 0; regnum--)
1070     sp = push_word (sp, read_register (regnum));
1071
1072   write_register (FP_REGNUM, fp);
1073   write_register (THUMB_FP_REGNUM, fp);
1074   write_register (SP_REGNUM, sp);
1075 }
1076
1077 /* Fix up the call dummy, based on whether the processor is currently
1078    in Thumb or ARM mode, and whether the target function is Thumb or
1079    ARM.  There are three different situations requiring three
1080    different dummies:
1081
1082    * ARM calling ARM: uses the call dummy in tm-arm.h, which has already
1083    been copied into the dummy parameter to this function.
1084    * ARM calling Thumb: uses the call dummy in tm-arm.h, but with the
1085    "mov pc,r4" instruction patched to be a "bx r4" instead.
1086    * Thumb calling anything: uses the Thumb dummy defined below, which
1087    works for calling both ARM and Thumb functions.
1088
1089    All three call dummies expect to receive the target function
1090    address in R4, with the low bit set if it's a Thumb function.  */
1091
1092 void
1093 arm_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
1094                     value_ptr *args, struct type *type, int gcc_p)
1095 {
1096   static short thumb_dummy[4] =
1097   {
1098     0xf000, 0xf801,             /*        bl      label */
1099     0xdf18,                     /*        swi     24 */
1100     0x4720,                     /* label: bx      r4 */
1101   };
1102   static unsigned long arm_bx_r4 = 0xe12fff14;  /* bx r4 instruction */
1103
1104   /* Set flag indicating whether the current PC is in a Thumb function. */
1105   caller_is_thumb = arm_pc_is_thumb (read_pc ());
1106
1107   /* If the target function is Thumb, set the low bit of the function
1108      address.  And if the CPU is currently in ARM mode, patch the
1109      second instruction of call dummy to use a BX instruction to
1110      switch to Thumb mode.  */
1111   target_is_thumb = arm_pc_is_thumb (fun);
1112   if (target_is_thumb)
1113     {
1114       fun |= 1;
1115       if (!caller_is_thumb)
1116         store_unsigned_integer (dummy + 4, sizeof (arm_bx_r4), arm_bx_r4);
1117     }
1118
1119   /* If the CPU is currently in Thumb mode, use the Thumb call dummy
1120      instead of the ARM one that's already been copied.  This will
1121      work for both Thumb and ARM target functions.  */
1122   if (caller_is_thumb)
1123     {
1124       int i;
1125       char *p = dummy;
1126       int len = sizeof (thumb_dummy) / sizeof (thumb_dummy[0]);
1127
1128       for (i = 0; i < len; i++)
1129         {
1130           store_unsigned_integer (p, sizeof (thumb_dummy[0]), thumb_dummy[i]);
1131           p += sizeof (thumb_dummy[0]);
1132         }
1133     }
1134
1135   /* Put the target address in r4; the call dummy will copy this to
1136      the PC. */
1137   write_register (4, fun);
1138 }
1139
1140 /* Return the offset in the call dummy of the instruction that needs
1141    to have a breakpoint placed on it.  This is the offset of the 'swi
1142    24' instruction, which is no longer actually used, but simply acts
1143    as a place-holder now.
1144
1145    This implements the CALL_DUMMY_BREAK_OFFSET macro.  */
1146
1147 int
1148 arm_call_dummy_breakpoint_offset (void)
1149 {
1150   if (caller_is_thumb)
1151     return 4;
1152   else
1153     return 8;
1154 }
1155
1156 /* Note: ScottB
1157
1158    This function does not support passing parameters using the FPA
1159    variant of the APCS.  It passes any floating point arguments in the
1160    general registers and/or on the stack.  */
1161
1162 CORE_ADDR
1163 arm_push_arguments (int nargs, value_ptr * args, CORE_ADDR sp,
1164                     int struct_return, CORE_ADDR struct_addr)
1165 {
1166   char *fp;
1167   int argnum, argreg, nstack_size;
1168
1169   /* Walk through the list of args and determine how large a temporary
1170      stack is required.  Need to take care here as structs may be
1171      passed on the stack, and we have to to push them.  */
1172   nstack_size = -4 * REGISTER_SIZE;     /* Some arguments go into A1-A4.  */
1173   if (struct_return)            /* The struct address goes in A1.  */
1174     nstack_size += REGISTER_SIZE;
1175
1176   /* Walk through the arguments and add their size to nstack_size.  */
1177   for (argnum = 0; argnum < nargs; argnum++)
1178     {
1179       int len;
1180       struct type *arg_type;
1181
1182       arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1183       len = TYPE_LENGTH (arg_type);
1184
1185       /* ANSI C code passes float arguments as integers, K&R code
1186          passes float arguments as doubles.  Correct for this here.  */
1187       if (TYPE_CODE_FLT == TYPE_CODE (arg_type) && REGISTER_SIZE == len)
1188         nstack_size += FP_REGISTER_VIRTUAL_SIZE;
1189       else
1190         nstack_size += len;
1191     }
1192
1193   /* Allocate room on the stack, and initialize our stack frame
1194      pointer.  */
1195   fp = NULL;
1196   if (nstack_size > 0)
1197     {
1198       sp -= nstack_size;
1199       fp = (char *) sp;
1200     }
1201
1202   /* Initialize the integer argument register pointer.  */
1203   argreg = A1_REGNUM;
1204
1205   /* The struct_return pointer occupies the first parameter passing
1206      register.  */
1207   if (struct_return)
1208     write_register (argreg++, struct_addr);
1209
1210   /* Process arguments from left to right.  Store as many as allowed
1211      in the parameter passing registers (A1-A4), and save the rest on
1212      the temporary stack.  */
1213   for (argnum = 0; argnum < nargs; argnum++)
1214     {
1215       int len;
1216       char *val;
1217       double dbl_arg;
1218       CORE_ADDR regval;
1219       enum type_code typecode;
1220       struct type *arg_type, *target_type;
1221
1222       arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1223       target_type = TYPE_TARGET_TYPE (arg_type);
1224       len = TYPE_LENGTH (arg_type);
1225       typecode = TYPE_CODE (arg_type);
1226       val = (char *) VALUE_CONTENTS (args[argnum]);
1227
1228       /* ANSI C code passes float arguments as integers, K&R code
1229          passes float arguments as doubles.  The .stabs record for 
1230          for ANSI prototype floating point arguments records the
1231          type as FP_INTEGER, while a K&R style (no prototype)
1232          .stabs records the type as FP_FLOAT.  In this latter case
1233          the compiler converts the float arguments to double before
1234          calling the function.  */
1235       if (TYPE_CODE_FLT == typecode && REGISTER_SIZE == len)
1236         {
1237           float f;
1238           double d;
1239           char * bufo = (char *) &d;
1240           char * bufd = (char *) &dbl_arg;
1241
1242           len = sizeof (double);
1243           f = *(float *) val;
1244           SWAP_TARGET_AND_HOST (&f, sizeof (float));  /* adjust endianess */
1245           d = f;
1246           /* We must revert the longwords so they get loaded into the
1247              the right registers. */
1248           memcpy (bufd, bufo + len / 2, len / 2);
1249           SWAP_TARGET_AND_HOST (bufd, len / 2);  /* adjust endianess */
1250           memcpy (bufd + len / 2, bufo, len / 2);
1251           SWAP_TARGET_AND_HOST (bufd + len / 2, len / 2); /* adjust endianess */
1252           val = (char *) &dbl_arg;
1253         }
1254 #if 1
1255       /* I don't know why this code was disable. The only logical use
1256          for a function pointer is to call that function, so setting
1257          the mode bit is perfectly fine. FN */
1258       /* If the argument is a pointer to a function, and it is a Thumb
1259          function, set the low bit of the pointer.  */
1260       if (TYPE_CODE_PTR == typecode
1261           && NULL != target_type
1262           && TYPE_CODE_FUNC == TYPE_CODE (target_type))
1263         {
1264           CORE_ADDR regval = extract_address (val, len);
1265           if (arm_pc_is_thumb (regval))
1266             store_address (val, len, MAKE_THUMB_ADDR (regval));
1267         }
1268 #endif
1269       /* Copy the argument to general registers or the stack in
1270          register-sized pieces.  Large arguments are split between
1271          registers and stack.  */
1272       while (len > 0)
1273         {
1274           int partial_len = len < REGISTER_SIZE ? len : REGISTER_SIZE;
1275
1276           if (argreg <= ARM_LAST_ARG_REGNUM)
1277             {
1278               /* It's an argument being passed in a general register.  */
1279               regval = extract_address (val, partial_len);
1280               write_register (argreg++, regval);
1281             }
1282           else
1283             {
1284               /* Push the arguments onto the stack.  */
1285               write_memory ((CORE_ADDR) fp, val, REGISTER_SIZE);
1286               fp += REGISTER_SIZE;
1287             }
1288
1289           len -= partial_len;
1290           val += partial_len;
1291         }
1292     }
1293
1294   /* Return adjusted stack pointer.  */
1295   return sp;
1296 }
1297
1298 void
1299 arm_pop_frame (void)
1300 {
1301   int regnum;
1302   struct frame_info *frame = get_current_frame ();
1303
1304   if (!PC_IN_CALL_DUMMY(frame->pc, frame->frame, read_fp()))
1305     {
1306       CORE_ADDR old_SP;
1307
1308       old_SP = read_register (frame->framereg);
1309       for (regnum = 0; regnum < NUM_REGS; regnum++)
1310         if (frame->fsr.regs[regnum] != 0)
1311           write_register (regnum,
1312                       read_memory_integer (frame->fsr.regs[regnum], 4));
1313
1314       write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
1315       write_register (SP_REGNUM, old_SP);
1316     }
1317   else
1318     {
1319       CORE_ADDR sp;
1320
1321       sp = read_register (FP_REGNUM);
1322       sp -= sizeof(CORE_ADDR); /* we don't care about this first word */
1323
1324       write_register (PC_REGNUM, read_memory_integer (sp, 4));
1325       sp -= sizeof(CORE_ADDR);
1326       write_register (SP_REGNUM, read_memory_integer (sp, 4));
1327       sp -= sizeof(CORE_ADDR);
1328       write_register (FP_REGNUM, read_memory_integer (sp, 4));
1329       sp -= sizeof(CORE_ADDR);
1330
1331       for (regnum = 10; regnum >= 0; regnum--)
1332         {
1333           write_register (regnum, read_memory_integer (sp, 4));
1334           sp -= sizeof(CORE_ADDR);
1335         }
1336     }
1337
1338   flush_cached_frames ();
1339 }
1340
1341 static void
1342 print_fpu_flags (int flags)
1343 {
1344   if (flags & (1 << 0))
1345     fputs ("IVO ", stdout);
1346   if (flags & (1 << 1))
1347     fputs ("DVZ ", stdout);
1348   if (flags & (1 << 2))
1349     fputs ("OFL ", stdout);
1350   if (flags & (1 << 3))
1351     fputs ("UFL ", stdout);
1352   if (flags & (1 << 4))
1353     fputs ("INX ", stdout);
1354   putchar ('\n');
1355 }
1356
1357 void
1358 arm_float_info (void)
1359 {
1360   register unsigned long status = read_register (FPS_REGNUM);
1361   int type;
1362
1363   type = (status >> 24) & 127;
1364   printf ("%s FPU type %d\n",
1365           (status & (1 << 31)) ? "Hardware" : "Software",
1366           type);
1367   fputs ("mask: ", stdout);
1368   print_fpu_flags (status >> 16);
1369   fputs ("flags: ", stdout);
1370   print_fpu_flags (status);
1371 }
1372
1373 #if 0
1374 /* FIXME:  The generated assembler works but sucks.  Instead of using
1375    r0, r1 it pushes them on the stack, then loads them into r3, r4 and
1376    uses those registers.  I must be missing something.  ScottB  */
1377
1378 void
1379 convert_from_extended (void *ptr, void *dbl)
1380 {
1381   __asm__ ("
1382            ldfe f0,[%0]
1383            stfd f0,[%1] "
1384 :                               /* no output */
1385 :          "r" (ptr), "r" (dbl));
1386 }
1387
1388 void
1389 convert_to_extended (void *dbl, void *ptr)
1390 {
1391   __asm__ ("
1392            ldfd f0,[%0]
1393            stfe f0,[%1] "
1394 :                               /* no output */
1395 :          "r" (dbl), "r" (ptr));
1396 }
1397 #else
1398 static void
1399 convert_from_extended (void *ptr, void *dbl)
1400 {
1401   *(double *) dbl = *(double *) ptr;
1402 }
1403
1404 void
1405 convert_to_extended (void *dbl, void *ptr)
1406 {
1407   *(double *) ptr = *(double *) dbl;
1408 }
1409 #endif
1410
1411 /* Nonzero if register N requires conversion from raw format to
1412    virtual format.  */
1413
1414 int
1415 arm_register_convertible (unsigned int regnum)
1416 {
1417   return ((regnum - F0_REGNUM) < 8);
1418 }
1419
1420 /* Convert data from raw format for register REGNUM in buffer FROM to
1421    virtual format with type TYPE in buffer TO.  */
1422
1423 void
1424 arm_register_convert_to_virtual (unsigned int regnum, struct type *type,
1425                                  void *from, void *to)
1426 {
1427   double val;
1428
1429   convert_from_extended (from, &val);
1430   store_floating (to, TYPE_LENGTH (type), val);
1431 }
1432
1433 /* Convert data from virtual format with type TYPE in buffer FROM to
1434    raw format for register REGNUM in buffer TO.  */
1435
1436 void
1437 arm_register_convert_to_raw (unsigned int regnum, struct type *type,
1438                              void *from, void *to)
1439 {
1440   double val = extract_floating (from, TYPE_LENGTH (type));
1441
1442   convert_to_extended (&val, to);
1443 }
1444
1445 static int
1446 condition_true (unsigned long cond, unsigned long status_reg)
1447 {
1448   if (cond == INST_AL || cond == INST_NV)
1449     return 1;
1450
1451   switch (cond)
1452     {
1453     case INST_EQ:
1454       return ((status_reg & FLAG_Z) != 0);
1455     case INST_NE:
1456       return ((status_reg & FLAG_Z) == 0);
1457     case INST_CS:
1458       return ((status_reg & FLAG_C) != 0);
1459     case INST_CC:
1460       return ((status_reg & FLAG_C) == 0);
1461     case INST_MI:
1462       return ((status_reg & FLAG_N) != 0);
1463     case INST_PL:
1464       return ((status_reg & FLAG_N) == 0);
1465     case INST_VS:
1466       return ((status_reg & FLAG_V) != 0);
1467     case INST_VC:
1468       return ((status_reg & FLAG_V) == 0);
1469     case INST_HI:
1470       return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
1471     case INST_LS:
1472       return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
1473     case INST_GE:
1474       return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
1475     case INST_LT:
1476       return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
1477     case INST_GT:
1478       return (((status_reg & FLAG_Z) == 0) &&
1479               (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0)));
1480     case INST_LE:
1481       return (((status_reg & FLAG_Z) != 0) ||
1482               (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0)));
1483     }
1484   return 1;
1485 }
1486
1487 #define submask(x) ((1L << ((x) + 1)) - 1)
1488 #define bit(obj,st) (((obj) >> (st)) & 1)
1489 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
1490 #define sbits(obj,st,fn) \
1491   ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
1492 #define BranchDest(addr,instr) \
1493   ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
1494 #define ARM_PC_32 1
1495
1496 static unsigned long
1497 shifted_reg_val (unsigned long inst, int carry, unsigned long pc_val,
1498                  unsigned long status_reg)
1499 {
1500   unsigned long res, shift;
1501   int rm = bits (inst, 0, 3);
1502   unsigned long shifttype = bits (inst, 5, 6);
1503
1504   if (bit (inst, 4))
1505     {
1506       int rs = bits (inst, 8, 11);
1507       shift = (rs == 15 ? pc_val + 8 : read_register (rs)) & 0xFF;
1508     }
1509   else
1510     shift = bits (inst, 7, 11);
1511
1512   res = (rm == 15
1513          ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
1514             + (bit (inst, 4) ? 12 : 8))
1515          : read_register (rm));
1516
1517   switch (shifttype)
1518     {
1519     case 0:                     /* LSL */
1520       res = shift >= 32 ? 0 : res << shift;
1521       break;
1522
1523     case 1:                     /* LSR */
1524       res = shift >= 32 ? 0 : res >> shift;
1525       break;
1526
1527     case 2:                     /* ASR */
1528       if (shift >= 32)
1529         shift = 31;
1530       res = ((res & 0x80000000L)
1531              ? ~((~res) >> shift) : res >> shift);
1532       break;
1533
1534     case 3:                     /* ROR/RRX */
1535       shift &= 31;
1536       if (shift == 0)
1537         res = (res >> 1) | (carry ? 0x80000000L : 0);
1538       else
1539         res = (res >> shift) | (res << (32 - shift));
1540       break;
1541     }
1542
1543   return res & 0xffffffff;
1544 }
1545
1546 /* Return number of 1-bits in VAL.  */
1547
1548 static int
1549 bitcount (unsigned long val)
1550 {
1551   int nbits;
1552   for (nbits = 0; val != 0; nbits++)
1553     val &= val - 1;             /* delete rightmost 1-bit in val */
1554   return nbits;
1555 }
1556
1557 static CORE_ADDR
1558 thumb_get_next_pc (CORE_ADDR pc)
1559 {
1560   unsigned long pc_val = ((unsigned long) pc) + 4;      /* PC after prefetch */
1561   unsigned short inst1 = read_memory_integer (pc, 2);
1562   CORE_ADDR nextpc = pc + 2;    /* default is next instruction */
1563   unsigned long offset;
1564
1565   if ((inst1 & 0xff00) == 0xbd00)       /* pop {rlist, pc} */
1566     {
1567       CORE_ADDR sp;
1568
1569       /* Fetch the saved PC from the stack.  It's stored above
1570          all of the other registers.  */
1571       offset = bitcount (bits (inst1, 0, 7)) * REGISTER_SIZE;
1572       sp = read_register (SP_REGNUM);
1573       nextpc = (CORE_ADDR) read_memory_integer (sp + offset, 4);
1574       nextpc = ADDR_BITS_REMOVE (nextpc);
1575       if (nextpc == pc)
1576         error ("Infinite loop detected");
1577     }
1578   else if ((inst1 & 0xf000) == 0xd000)  /* conditional branch */
1579     {
1580       unsigned long status = read_register (PS_REGNUM);
1581       unsigned long cond = bits (inst1, 8, 11);
1582       if (cond != 0x0f && condition_true (cond, status))        /* 0x0f = SWI */
1583         nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
1584     }
1585   else if ((inst1 & 0xf800) == 0xe000)  /* unconditional branch */
1586     {
1587       nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
1588     }
1589   else if ((inst1 & 0xf800) == 0xf000)  /* long branch with link */
1590     {
1591       unsigned short inst2 = read_memory_integer (pc + 2, 2);
1592       offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) << 1);
1593       nextpc = pc_val + offset;
1594     }
1595
1596   return nextpc;
1597 }
1598
1599 CORE_ADDR
1600 arm_get_next_pc (CORE_ADDR pc)
1601 {
1602   unsigned long pc_val;
1603   unsigned long this_instr;
1604   unsigned long status;
1605   CORE_ADDR nextpc;
1606
1607   if (arm_pc_is_thumb (pc))
1608     return thumb_get_next_pc (pc);
1609
1610   pc_val = (unsigned long) pc;
1611   this_instr = read_memory_integer (pc, 4);
1612   status = read_register (PS_REGNUM);
1613   nextpc = (CORE_ADDR) (pc_val + 4);    /* Default case */
1614
1615   if (condition_true (bits (this_instr, 28, 31), status))
1616     {
1617       switch (bits (this_instr, 24, 27))
1618         {
1619         case 0x0:
1620         case 0x1:               /* data processing */
1621         case 0x2:
1622         case 0x3:
1623           {
1624             unsigned long operand1, operand2, result = 0;
1625             unsigned long rn;
1626             int c;
1627
1628             if (bits (this_instr, 12, 15) != 15)
1629               break;
1630
1631             if (bits (this_instr, 22, 25) == 0
1632                 && bits (this_instr, 4, 7) == 9)        /* multiply */
1633               error ("Illegal update to pc in instruction");
1634
1635             /* Multiply into PC */
1636             c = (status & FLAG_C) ? 1 : 0;
1637             rn = bits (this_instr, 16, 19);
1638             operand1 = (rn == 15) ? pc_val + 8 : read_register (rn);
1639
1640             if (bit (this_instr, 25))
1641               {
1642                 unsigned long immval = bits (this_instr, 0, 7);
1643                 unsigned long rotate = 2 * bits (this_instr, 8, 11);
1644                 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
1645                   & 0xffffffff;
1646               }
1647             else                /* operand 2 is a shifted register */
1648               operand2 = shifted_reg_val (this_instr, c, pc_val, status);
1649
1650             switch (bits (this_instr, 21, 24))
1651               {
1652               case 0x0: /*and */
1653                 result = operand1 & operand2;
1654                 break;
1655
1656               case 0x1: /*eor */
1657                 result = operand1 ^ operand2;
1658                 break;
1659
1660               case 0x2: /*sub */
1661                 result = operand1 - operand2;
1662                 break;
1663
1664               case 0x3: /*rsb */
1665                 result = operand2 - operand1;
1666                 break;
1667
1668               case 0x4: /*add */
1669                 result = operand1 + operand2;
1670                 break;
1671
1672               case 0x5: /*adc */
1673                 result = operand1 + operand2 + c;
1674                 break;
1675
1676               case 0x6: /*sbc */
1677                 result = operand1 - operand2 + c;
1678                 break;
1679
1680               case 0x7: /*rsc */
1681                 result = operand2 - operand1 + c;
1682                 break;
1683
1684               case 0x8:
1685               case 0x9:
1686               case 0xa:
1687               case 0xb: /* tst, teq, cmp, cmn */
1688                 result = (unsigned long) nextpc;
1689                 break;
1690
1691               case 0xc: /*orr */
1692                 result = operand1 | operand2;
1693                 break;
1694
1695               case 0xd: /*mov */
1696                 /* Always step into a function.  */
1697                 result = operand2;
1698                 break;
1699
1700               case 0xe: /*bic */
1701                 result = operand1 & ~operand2;
1702                 break;
1703
1704               case 0xf: /*mvn */
1705                 result = ~operand2;
1706                 break;
1707               }
1708             nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
1709
1710             if (nextpc == pc)
1711               error ("Infinite loop detected");
1712             break;
1713           }
1714
1715         case 0x4:
1716         case 0x5:               /* data transfer */
1717         case 0x6:
1718         case 0x7:
1719           if (bit (this_instr, 20))
1720             {
1721               /* load */
1722               if (bits (this_instr, 12, 15) == 15)
1723                 {
1724                   /* rd == pc */
1725                   unsigned long rn;
1726                   unsigned long base;
1727
1728                   if (bit (this_instr, 22))
1729                     error ("Illegal update to pc in instruction");
1730
1731                   /* byte write to PC */
1732                   rn = bits (this_instr, 16, 19);
1733                   base = (rn == 15) ? pc_val + 8 : read_register (rn);
1734                   if (bit (this_instr, 24))
1735                     {
1736                       /* pre-indexed */
1737                       int c = (status & FLAG_C) ? 1 : 0;
1738                       unsigned long offset =
1739                       (bit (this_instr, 25)
1740                        ? shifted_reg_val (this_instr, c, pc_val, status)
1741                        : bits (this_instr, 0, 11));
1742
1743                       if (bit (this_instr, 23))
1744                         base += offset;
1745                       else
1746                         base -= offset;
1747                     }
1748                   nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
1749                                                             4);
1750
1751                   nextpc = ADDR_BITS_REMOVE (nextpc);
1752
1753                   if (nextpc == pc)
1754                     error ("Infinite loop detected");
1755                 }
1756             }
1757           break;
1758
1759         case 0x8:
1760         case 0x9:               /* block transfer */
1761           if (bit (this_instr, 20))
1762             {
1763               /* LDM */
1764               if (bit (this_instr, 15))
1765                 {
1766                   /* loading pc */
1767                   int offset = 0;
1768
1769                   if (bit (this_instr, 23))
1770                     {
1771                       /* up */
1772                       unsigned long reglist = bits (this_instr, 0, 14);
1773                       offset = bitcount (reglist) * 4;
1774                       if (bit (this_instr, 24))         /* pre */
1775                         offset += 4;
1776                     }
1777                   else if (bit (this_instr, 24))
1778                     offset = -4;
1779
1780                   {
1781                     unsigned long rn_val =
1782                     read_register (bits (this_instr, 16, 19));
1783                     nextpc =
1784                       (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
1785                                                                   + offset),
1786                                                        4);
1787                   }
1788                   nextpc = ADDR_BITS_REMOVE (nextpc);
1789                   if (nextpc == pc)
1790                     error ("Infinite loop detected");
1791                 }
1792             }
1793           break;
1794
1795         case 0xb:               /* branch & link */
1796         case 0xa:               /* branch */
1797           {
1798             nextpc = BranchDest (pc, this_instr);
1799
1800             nextpc = ADDR_BITS_REMOVE (nextpc);
1801             if (nextpc == pc)
1802               error ("Infinite loop detected");
1803             break;
1804           }
1805
1806         case 0xc:
1807         case 0xd:
1808         case 0xe:               /* coproc ops */
1809         case 0xf:               /* SWI */
1810           break;
1811
1812         default:
1813           fprintf (stderr, "Bad bit-field extraction\n");
1814           return (pc);
1815         }
1816     }
1817
1818   return nextpc;
1819 }
1820
1821 #include "bfd-in2.h"
1822 #include "libcoff.h"
1823
1824 static int
1825 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
1826 {
1827   if (arm_pc_is_thumb (memaddr))
1828     {
1829       static asymbol *asym;
1830       static combined_entry_type ce;
1831       static struct coff_symbol_struct csym;
1832       static struct _bfd fake_bfd;
1833       static bfd_target fake_target;
1834
1835       if (csym.native == NULL)
1836         {
1837           /* Create a fake symbol vector containing a Thumb symbol.  This is
1838              solely so that the code in print_insn_little_arm() and
1839              print_insn_big_arm() in opcodes/arm-dis.c will detect the presence
1840              of a Thumb symbol and switch to decoding Thumb instructions.  */
1841
1842           fake_target.flavour = bfd_target_coff_flavour;
1843           fake_bfd.xvec = &fake_target;
1844           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
1845           csym.native = &ce;
1846           csym.symbol.the_bfd = &fake_bfd;
1847           csym.symbol.name = "fake";
1848           asym = (asymbol *) & csym;
1849         }
1850
1851       memaddr = UNMAKE_THUMB_ADDR (memaddr);
1852       info->symbols = &asym;
1853     }
1854   else
1855     info->symbols = NULL;
1856
1857   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1858     return print_insn_big_arm (memaddr, info);
1859   else
1860     return print_insn_little_arm (memaddr, info);
1861 }
1862
1863 /* This function implements the BREAKPOINT_FROM_PC macro.  It uses the
1864    program counter value to determine whether a 16-bit or 32-bit
1865    breakpoint should be used.  It returns a pointer to a string of
1866    bytes that encode a breakpoint instruction, stores the length of
1867    the string to *lenptr, and adjusts the program counter (if
1868    necessary) to point to the actual memory location where the
1869    breakpoint should be inserted.  */
1870
1871 unsigned char *
1872 arm_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
1873 {
1874   if (arm_pc_is_thumb (*pcptr) || arm_pc_is_thumb_dummy (*pcptr))
1875     {
1876       if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1877         {
1878           static char thumb_breakpoint[] = THUMB_BE_BREAKPOINT;
1879           *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
1880           *lenptr = sizeof (thumb_breakpoint);
1881           return thumb_breakpoint;
1882         }
1883       else
1884         {
1885           static char thumb_breakpoint[] = THUMB_LE_BREAKPOINT;
1886           *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
1887           *lenptr = sizeof (thumb_breakpoint);
1888           return thumb_breakpoint;
1889         }
1890     }
1891   else
1892     {
1893       if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1894         {
1895           static char arm_breakpoint[] = ARM_BE_BREAKPOINT;
1896           *lenptr = sizeof (arm_breakpoint);
1897           return arm_breakpoint;
1898         }
1899       else
1900         {
1901           static char arm_breakpoint[] = ARM_LE_BREAKPOINT;
1902           *lenptr = sizeof (arm_breakpoint);
1903           return arm_breakpoint;
1904         }
1905     }
1906 }
1907
1908 /* Extract from an array REGBUF containing the (raw) register state a
1909    function return value of type TYPE, and copy that, in virtual
1910    format, into VALBUF.  */
1911
1912 void
1913 arm_extract_return_value (struct type *type,
1914                           char regbuf[REGISTER_BYTES],
1915                           char *valbuf)
1916 {
1917   if (TYPE_CODE_FLT == TYPE_CODE (type))
1918     convert_from_extended (&regbuf[REGISTER_BYTE (F0_REGNUM)], valbuf);
1919   else
1920     memcpy (valbuf, &regbuf[REGISTER_BYTE (A1_REGNUM)], TYPE_LENGTH (type));
1921 }
1922
1923 /* Return non-zero if the PC is inside a thumb call thunk.  */
1924
1925 int
1926 arm_in_call_stub (CORE_ADDR pc, char *name)
1927 {
1928   CORE_ADDR start_addr;
1929
1930   /* Find the starting address of the function containing the PC.  If
1931      the caller didn't give us a name, look it up at the same time.  */
1932   if (find_pc_partial_function (pc, name ? NULL : &name, &start_addr, NULL) == 0)
1933     return 0;
1934
1935   return strncmp (name, "_call_via_r", 11) == 0;
1936 }
1937
1938 /* If PC is in a Thumb call or return stub, return the address of the
1939    target PC, which is in a register.  The thunk functions are called
1940    _called_via_xx, where x is the register name.  The possible names
1941    are r0-r9, sl, fp, ip, sp, and lr.  */
1942
1943 CORE_ADDR
1944 arm_skip_stub (CORE_ADDR pc)
1945 {
1946   char *name;
1947   CORE_ADDR start_addr;
1948
1949   /* Find the starting address and name of the function containing the PC.  */
1950   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
1951     return 0;
1952
1953   /* Call thunks always start with "_call_via_".  */
1954   if (strncmp (name, "_call_via_", 10) == 0)
1955     {
1956       /* Use the name suffix to determine which register contains the
1957          target PC.  */
1958       static char *table[15] =
1959       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
1960        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
1961       };
1962       int regno;
1963
1964       for (regno = 0; regno <= 14; regno++)
1965         if (strcmp (&name[10], table[regno]) == 0)
1966           return read_register (regno);
1967     }
1968
1969   return 0;                     /* not a stub */
1970 }
1971
1972 /* If the user changes the register disassembly flavor used for info register
1973    and other commands, we have to also switch the flavor used in opcodes
1974    for disassembly output.
1975    This function is run in the set disassembly_flavor command, and does that. */
1976
1977 static void
1978 set_disassembly_flavor_sfunc (char *args, int from_tty,
1979                               struct cmd_list_element *c)
1980 {
1981   set_disassembly_flavor ();
1982 }
1983 \f
1984 static void
1985 set_disassembly_flavor (void)
1986 {
1987   const char *setname, *setdesc, **regnames;
1988   int numregs, j;
1989
1990   /* Find the flavor that the user wants in the opcodes table. */
1991   int current = 0;
1992   numregs = get_arm_regnames (current, &setname, &setdesc, &regnames);
1993   while ((disassembly_flavor != setname)
1994          && (current < num_flavor_options))
1995     get_arm_regnames (++current, &setname, &setdesc, &regnames);
1996   current_option = current;
1997
1998   /* Fill our copy. */
1999   for (j = 0; j < numregs; j++)
2000     arm_register_names[j] = (char *) regnames[j];
2001
2002   /* Adjust case. */
2003   if (isupper (*regnames[PC_REGNUM]))
2004     {
2005       arm_register_names[FPS_REGNUM] = "FPS";
2006       arm_register_names[PS_REGNUM] = "CPSR";
2007     }
2008   else
2009     {
2010       arm_register_names[FPS_REGNUM] = "fps";
2011       arm_register_names[PS_REGNUM] = "cpsr";
2012     }
2013
2014   /* Synchronize the disassembler. */
2015   set_arm_regname_option (current);
2016 }
2017
2018 /* arm_othernames implements the "othernames" command.  This is kind
2019    of hacky, and I prefer the set-show disassembly-flavor which is
2020    also used for the x86 gdb.  I will keep this around, however, in
2021    case anyone is actually using it. */
2022
2023 static void
2024 arm_othernames (char *names, int n)
2025 {
2026   /* Circle through the various flavors. */
2027   current_option = (current_option + 1) % num_flavor_options;
2028
2029   disassembly_flavor = valid_flavors[current_option];
2030   set_disassembly_flavor (); 
2031 }
2032
2033 void
2034 _initialize_arm_tdep (void)
2035 {
2036   struct ui_file *stb;
2037   long length;
2038   struct cmd_list_element *new_cmd;
2039   const char *setname, *setdesc, **regnames;
2040   int numregs, i, j;
2041   static char *helptext;
2042
2043   tm_print_insn = gdb_print_insn_arm;
2044
2045   /* Get the number of possible sets of register names defined in opcodes. */
2046   num_flavor_options = get_arm_regname_num_options ();
2047
2048   /* Sync the opcode insn printer with our register viewer: */
2049   parse_arm_disassembler_option ("reg-names-std");
2050
2051   /* Begin creating the help text. */
2052   stb = mem_fileopen ();
2053   fprintf_unfiltered (stb, "Set the disassembly flavor.\n\
2054 The valid values are:\n");
2055
2056   /* Initialize the array that will be passed to add_set_enum_cmd(). */
2057   valid_flavors = xmalloc ((num_flavor_options + 1) * sizeof (char *));
2058   for (i = 0; i < num_flavor_options; i++)
2059     {
2060       numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
2061       valid_flavors[i] = (char *) setname;
2062       fprintf_unfiltered (stb, "%s - %s\n", setname,
2063                           setdesc);
2064       /* Copy the default names (if found) and synchronize disassembler. */
2065       if (!strcmp (setname, "std"))
2066         {
2067           disassembly_flavor = (char *) setname;
2068           current_option = i;
2069           for (j = 0; j < numregs; j++)
2070             arm_register_names[j] = (char *) regnames[j];
2071           set_arm_regname_option (i);
2072         }
2073     }
2074   /* Mark the end of valid options. */
2075   valid_flavors[num_flavor_options] = NULL;
2076
2077   /* Finish the creation of the help text. */
2078   fprintf_unfiltered (stb, "The default is \"std\".");
2079   helptext = ui_file_xstrdup (stb, &length);
2080   ui_file_delete (stb);
2081
2082   /* Add the disassembly-flavor command */
2083   new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
2084                               valid_flavors,
2085                               (char *) &disassembly_flavor,
2086                               helptext,
2087                               &setlist);
2088   new_cmd->function.sfunc = set_disassembly_flavor_sfunc;
2089   add_show_from_set (new_cmd, &showlist);
2090
2091   /* ??? Maybe this should be a boolean.  */
2092   add_show_from_set (add_set_cmd ("apcs32", no_class,
2093                                   var_zinteger, (char *) &arm_apcs_32,
2094                                   "Set usage of ARM 32-bit mode.\n", &setlist),
2095                      &showlist);
2096
2097   /* Add the deprecated "othernames" command */
2098
2099   add_com ("othernames", class_obscure, arm_othernames,
2100            "Switch to the next set of register names.");
2101 }
2102
2103 /* Test whether the coff symbol specific value corresponds to a Thumb
2104    function.  */
2105
2106 int
2107 coff_sym_is_thumb (int val)
2108 {
2109   return (val == C_THUMBEXT ||
2110           val == C_THUMBSTAT ||
2111           val == C_THUMBEXTFUNC ||
2112           val == C_THUMBSTATFUNC ||
2113           val == C_THUMBLABEL);
2114 }