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