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