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