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