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