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