]> Git Repo - binutils.git/blob - gdb/arm-tdep.c
*** empty log message ***
[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 /* Adjust the call_dummy_breakpoint_offset for the bp_call_dummy
1267    breakpoint to the proper address in the call dummy, so that
1268    `finish' after a stop in a call dummy works.
1269
1270    FIXME rearnsha 2002-02018: Tweeking current_gdbarch is not an
1271    optimal solution, but the call to arm_fix_call_dummy is immediately
1272    followed by a call to run_stack_dummy, which is the only function
1273    where call_dummy_breakpoint_offset is actually used.  */
1274
1275
1276 static void
1277 arm_set_call_dummy_breakpoint_offset (void)
1278 {
1279   if (caller_is_thumb)
1280     set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 4);
1281   else
1282     set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 8);
1283 }
1284
1285 /* Fix up the call dummy, based on whether the processor is currently
1286    in Thumb or ARM mode, and whether the target function is Thumb or
1287    ARM.  There are three different situations requiring three
1288    different dummies:
1289
1290    * ARM calling ARM: uses the call dummy in tm-arm.h, which has already
1291    been copied into the dummy parameter to this function.
1292    * ARM calling Thumb: uses the call dummy in tm-arm.h, but with the
1293    "mov pc,r4" instruction patched to be a "bx r4" instead.
1294    * Thumb calling anything: uses the Thumb dummy defined below, which
1295    works for calling both ARM and Thumb functions.
1296
1297    All three call dummies expect to receive the target function
1298    address in R4, with the low bit set if it's a Thumb function.  */
1299
1300 static void
1301 arm_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
1302                     struct value **args, struct type *type, int gcc_p)
1303 {
1304   static short thumb_dummy[4] =
1305   {
1306     0xf000, 0xf801,             /*        bl      label */
1307     0xdf18,                     /*        swi     24 */
1308     0x4720,                     /* label: bx      r4 */
1309   };
1310   static unsigned long arm_bx_r4 = 0xe12fff14;  /* bx r4 instruction */
1311
1312   /* Set flag indicating whether the current PC is in a Thumb function. */
1313   caller_is_thumb = arm_pc_is_thumb (read_pc ());
1314   arm_set_call_dummy_breakpoint_offset ();
1315
1316   /* If the target function is Thumb, set the low bit of the function
1317      address.  And if the CPU is currently in ARM mode, patch the
1318      second instruction of call dummy to use a BX instruction to
1319      switch to Thumb mode.  */
1320   target_is_thumb = arm_pc_is_thumb (fun);
1321   if (target_is_thumb)
1322     {
1323       fun |= 1;
1324       if (!caller_is_thumb)
1325         store_unsigned_integer (dummy + 4, sizeof (arm_bx_r4), arm_bx_r4);
1326     }
1327
1328   /* If the CPU is currently in Thumb mode, use the Thumb call dummy
1329      instead of the ARM one that's already been copied.  This will
1330      work for both Thumb and ARM target functions.  */
1331   if (caller_is_thumb)
1332     {
1333       int i;
1334       char *p = dummy;
1335       int len = sizeof (thumb_dummy) / sizeof (thumb_dummy[0]);
1336
1337       for (i = 0; i < len; i++)
1338         {
1339           store_unsigned_integer (p, sizeof (thumb_dummy[0]), thumb_dummy[i]);
1340           p += sizeof (thumb_dummy[0]);
1341         }
1342     }
1343
1344   /* Put the target address in r4; the call dummy will copy this to
1345      the PC. */
1346   write_register (4, fun);
1347 }
1348
1349 /* Note: ScottB
1350
1351    This function does not support passing parameters using the FPA
1352    variant of the APCS.  It passes any floating point arguments in the
1353    general registers and/or on the stack.  */
1354
1355 static CORE_ADDR
1356 arm_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1357                     int struct_return, CORE_ADDR struct_addr)
1358 {
1359   char *fp;
1360   int argnum, argreg, nstack_size;
1361
1362   /* Walk through the list of args and determine how large a temporary
1363      stack is required.  Need to take care here as structs may be
1364      passed on the stack, and we have to to push them.  */
1365   nstack_size = -4 * REGISTER_SIZE;     /* Some arguments go into A1-A4.  */
1366   if (struct_return)            /* The struct address goes in A1.  */
1367     nstack_size += REGISTER_SIZE;
1368
1369   /* Walk through the arguments and add their size to nstack_size.  */
1370   for (argnum = 0; argnum < nargs; argnum++)
1371     {
1372       int len;
1373       struct type *arg_type;
1374
1375       arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1376       len = TYPE_LENGTH (arg_type);
1377
1378       nstack_size += len;
1379     }
1380
1381   /* Allocate room on the stack, and initialize our stack frame
1382      pointer.  */
1383   fp = NULL;
1384   if (nstack_size > 0)
1385     {
1386       sp -= nstack_size;
1387       fp = (char *) sp;
1388     }
1389
1390   /* Initialize the integer argument register pointer.  */
1391   argreg = ARM_A1_REGNUM;
1392
1393   /* The struct_return pointer occupies the first parameter passing
1394      register.  */
1395   if (struct_return)
1396     write_register (argreg++, struct_addr);
1397
1398   /* Process arguments from left to right.  Store as many as allowed
1399      in the parameter passing registers (A1-A4), and save the rest on
1400      the temporary stack.  */
1401   for (argnum = 0; argnum < nargs; argnum++)
1402     {
1403       int len;
1404       char *val;
1405       CORE_ADDR regval;
1406       enum type_code typecode;
1407       struct type *arg_type, *target_type;
1408
1409       arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1410       target_type = TYPE_TARGET_TYPE (arg_type);
1411       len = TYPE_LENGTH (arg_type);
1412       typecode = TYPE_CODE (arg_type);
1413       val = (char *) VALUE_CONTENTS (args[argnum]);
1414
1415 #if 1
1416       /* I don't know why this code was disable. The only logical use
1417          for a function pointer is to call that function, so setting
1418          the mode bit is perfectly fine. FN */
1419       /* If the argument is a pointer to a function, and it is a Thumb
1420          function, set the low bit of the pointer.  */
1421       if (TYPE_CODE_PTR == typecode
1422           && NULL != target_type
1423           && TYPE_CODE_FUNC == TYPE_CODE (target_type))
1424         {
1425           CORE_ADDR regval = extract_address (val, len);
1426           if (arm_pc_is_thumb (regval))
1427             store_address (val, len, MAKE_THUMB_ADDR (regval));
1428         }
1429 #endif
1430       /* Copy the argument to general registers or the stack in
1431          register-sized pieces.  Large arguments are split between
1432          registers and stack.  */
1433       while (len > 0)
1434         {
1435           int partial_len = len < REGISTER_SIZE ? len : REGISTER_SIZE;
1436
1437           if (argreg <= ARM_LAST_ARG_REGNUM)
1438             {
1439               /* It's an argument being passed in a general register.  */
1440               regval = extract_address (val, partial_len);
1441               write_register (argreg++, regval);
1442             }
1443           else
1444             {
1445               /* Push the arguments onto the stack.  */
1446               write_memory ((CORE_ADDR) fp, val, REGISTER_SIZE);
1447               fp += REGISTER_SIZE;
1448             }
1449
1450           len -= partial_len;
1451           val += partial_len;
1452         }
1453     }
1454
1455   /* Return adjusted stack pointer.  */
1456   return sp;
1457 }
1458
1459 /* Pop the current frame.  So long as the frame info has been initialized
1460    properly (see arm_init_extra_frame_info), this code works for dummy frames
1461    as well as regular frames.  I.e, there's no need to have a special case
1462    for dummy frames.  */
1463 static void
1464 arm_pop_frame (void)
1465 {
1466   int regnum;
1467   struct frame_info *frame = get_current_frame ();
1468   CORE_ADDR old_SP = (frame->frame - frame->extra_info->frameoffset
1469                       + frame->extra_info->framesize);
1470
1471   for (regnum = 0; regnum < NUM_REGS; regnum++)
1472     if (frame->saved_regs[regnum] != 0)
1473       write_register (regnum,
1474                   read_memory_integer (frame->saved_regs[regnum],
1475                                        REGISTER_RAW_SIZE (regnum)));
1476
1477   write_register (ARM_PC_REGNUM, FRAME_SAVED_PC (frame));
1478   write_register (ARM_SP_REGNUM, old_SP);
1479
1480   flush_cached_frames ();
1481 }
1482
1483 static void
1484 print_fpu_flags (int flags)
1485 {
1486   if (flags & (1 << 0))
1487     fputs ("IVO ", stdout);
1488   if (flags & (1 << 1))
1489     fputs ("DVZ ", stdout);
1490   if (flags & (1 << 2))
1491     fputs ("OFL ", stdout);
1492   if (flags & (1 << 3))
1493     fputs ("UFL ", stdout);
1494   if (flags & (1 << 4))
1495     fputs ("INX ", stdout);
1496   putchar ('\n');
1497 }
1498
1499 /* Print interesting information about the floating point processor
1500    (if present) or emulator.  */
1501 static void
1502 arm_print_float_info (void)
1503 {
1504   register unsigned long status = read_register (ARM_FPS_REGNUM);
1505   int type;
1506
1507   type = (status >> 24) & 127;
1508   printf ("%s FPU type %d\n",
1509           (status & (1 << 31)) ? "Hardware" : "Software",
1510           type);
1511   fputs ("mask: ", stdout);
1512   print_fpu_flags (status >> 16);
1513   fputs ("flags: ", stdout);
1514   print_fpu_flags (status);
1515 }
1516
1517 /* Return the GDB type object for the "standard" data type of data in
1518    register N.  */
1519
1520 static struct type *
1521 arm_register_type (int regnum)
1522 {
1523   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
1524     {
1525       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1526         return builtin_type_arm_ext_big;
1527       else
1528         return builtin_type_arm_ext_littlebyte_bigword;
1529     }
1530   else
1531     return builtin_type_int32;
1532 }
1533
1534 /* Index within `registers' of the first byte of the space for
1535    register N.  */
1536
1537 static int
1538 arm_register_byte (int regnum)
1539 {
1540   if (regnum < ARM_F0_REGNUM)
1541     return regnum * INT_REGISTER_RAW_SIZE;
1542   else if (regnum < ARM_PS_REGNUM)
1543     return (NUM_GREGS * INT_REGISTER_RAW_SIZE
1544             + (regnum - ARM_F0_REGNUM) * FP_REGISTER_RAW_SIZE);
1545   else
1546     return (NUM_GREGS * INT_REGISTER_RAW_SIZE
1547             + NUM_FREGS * FP_REGISTER_RAW_SIZE
1548             + (regnum - ARM_FPS_REGNUM) * STATUS_REGISTER_SIZE);
1549 }
1550
1551 /* Number of bytes of storage in the actual machine representation for
1552    register N.  All registers are 4 bytes, except fp0 - fp7, which are
1553    12 bytes in length.  */
1554
1555 static int
1556 arm_register_raw_size (int regnum)
1557 {
1558   if (regnum < ARM_F0_REGNUM)
1559     return INT_REGISTER_RAW_SIZE;
1560   else if (regnum < ARM_FPS_REGNUM)
1561     return FP_REGISTER_RAW_SIZE;
1562   else
1563     return STATUS_REGISTER_SIZE;
1564 }
1565
1566 /* Number of bytes of storage in a program's representation
1567    for register N.  */
1568 static int
1569 arm_register_virtual_size (int regnum)
1570 {
1571   if (regnum < ARM_F0_REGNUM)
1572     return INT_REGISTER_VIRTUAL_SIZE;
1573   else if (regnum < ARM_FPS_REGNUM)
1574     return FP_REGISTER_VIRTUAL_SIZE;
1575   else
1576     return STATUS_REGISTER_SIZE;
1577 }
1578
1579
1580 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
1581    convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
1582    It is thought that this is is the floating-point register format on
1583    little-endian systems.  */
1584
1585 static void
1586 convert_from_extended (void *ptr, void *dbl)
1587 {
1588   DOUBLEST d;
1589   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1590     floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
1591   else
1592     floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
1593                              ptr, &d);
1594   floatformat_from_doublest (TARGET_DOUBLE_FORMAT, &d, dbl);
1595 }
1596
1597 static void
1598 convert_to_extended (void *dbl, void *ptr)
1599 {
1600   DOUBLEST d;
1601   floatformat_to_doublest (TARGET_DOUBLE_FORMAT, ptr, &d);
1602   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1603     floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
1604   else
1605     floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
1606                                &d, dbl);
1607 }
1608
1609 static int
1610 condition_true (unsigned long cond, unsigned long status_reg)
1611 {
1612   if (cond == INST_AL || cond == INST_NV)
1613     return 1;
1614
1615   switch (cond)
1616     {
1617     case INST_EQ:
1618       return ((status_reg & FLAG_Z) != 0);
1619     case INST_NE:
1620       return ((status_reg & FLAG_Z) == 0);
1621     case INST_CS:
1622       return ((status_reg & FLAG_C) != 0);
1623     case INST_CC:
1624       return ((status_reg & FLAG_C) == 0);
1625     case INST_MI:
1626       return ((status_reg & FLAG_N) != 0);
1627     case INST_PL:
1628       return ((status_reg & FLAG_N) == 0);
1629     case INST_VS:
1630       return ((status_reg & FLAG_V) != 0);
1631     case INST_VC:
1632       return ((status_reg & FLAG_V) == 0);
1633     case INST_HI:
1634       return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
1635     case INST_LS:
1636       return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
1637     case INST_GE:
1638       return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
1639     case INST_LT:
1640       return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
1641     case INST_GT:
1642       return (((status_reg & FLAG_Z) == 0) &&
1643               (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0)));
1644     case INST_LE:
1645       return (((status_reg & FLAG_Z) != 0) ||
1646               (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0)));
1647     }
1648   return 1;
1649 }
1650
1651 /* Support routines for single stepping.  Calculate the next PC value.  */
1652 #define submask(x) ((1L << ((x) + 1)) - 1)
1653 #define bit(obj,st) (((obj) >> (st)) & 1)
1654 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
1655 #define sbits(obj,st,fn) \
1656   ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
1657 #define BranchDest(addr,instr) \
1658   ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
1659 #define ARM_PC_32 1
1660
1661 static unsigned long
1662 shifted_reg_val (unsigned long inst, int carry, unsigned long pc_val,
1663                  unsigned long status_reg)
1664 {
1665   unsigned long res, shift;
1666   int rm = bits (inst, 0, 3);
1667   unsigned long shifttype = bits (inst, 5, 6);
1668
1669   if (bit (inst, 4))
1670     {
1671       int rs = bits (inst, 8, 11);
1672       shift = (rs == 15 ? pc_val + 8 : read_register (rs)) & 0xFF;
1673     }
1674   else
1675     shift = bits (inst, 7, 11);
1676
1677   res = (rm == 15
1678          ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
1679             + (bit (inst, 4) ? 12 : 8))
1680          : read_register (rm));
1681
1682   switch (shifttype)
1683     {
1684     case 0:                     /* LSL */
1685       res = shift >= 32 ? 0 : res << shift;
1686       break;
1687
1688     case 1:                     /* LSR */
1689       res = shift >= 32 ? 0 : res >> shift;
1690       break;
1691
1692     case 2:                     /* ASR */
1693       if (shift >= 32)
1694         shift = 31;
1695       res = ((res & 0x80000000L)
1696              ? ~((~res) >> shift) : res >> shift);
1697       break;
1698
1699     case 3:                     /* ROR/RRX */
1700       shift &= 31;
1701       if (shift == 0)
1702         res = (res >> 1) | (carry ? 0x80000000L : 0);
1703       else
1704         res = (res >> shift) | (res << (32 - shift));
1705       break;
1706     }
1707
1708   return res & 0xffffffff;
1709 }
1710
1711 /* Return number of 1-bits in VAL.  */
1712
1713 static int
1714 bitcount (unsigned long val)
1715 {
1716   int nbits;
1717   for (nbits = 0; val != 0; nbits++)
1718     val &= val - 1;             /* delete rightmost 1-bit in val */
1719   return nbits;
1720 }
1721
1722 CORE_ADDR
1723 thumb_get_next_pc (CORE_ADDR pc)
1724 {
1725   unsigned long pc_val = ((unsigned long) pc) + 4;      /* PC after prefetch */
1726   unsigned short inst1 = read_memory_integer (pc, 2);
1727   CORE_ADDR nextpc = pc + 2;    /* default is next instruction */
1728   unsigned long offset;
1729
1730   if ((inst1 & 0xff00) == 0xbd00)       /* pop {rlist, pc} */
1731     {
1732       CORE_ADDR sp;
1733
1734       /* Fetch the saved PC from the stack.  It's stored above
1735          all of the other registers.  */
1736       offset = bitcount (bits (inst1, 0, 7)) * REGISTER_SIZE;
1737       sp = read_register (ARM_SP_REGNUM);
1738       nextpc = (CORE_ADDR) read_memory_integer (sp + offset, 4);
1739       nextpc = ADDR_BITS_REMOVE (nextpc);
1740       if (nextpc == pc)
1741         error ("Infinite loop detected");
1742     }
1743   else if ((inst1 & 0xf000) == 0xd000)  /* conditional branch */
1744     {
1745       unsigned long status = read_register (ARM_PS_REGNUM);
1746       unsigned long cond = bits (inst1, 8, 11);
1747       if (cond != 0x0f && condition_true (cond, status))        /* 0x0f = SWI */
1748         nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
1749     }
1750   else if ((inst1 & 0xf800) == 0xe000)  /* unconditional branch */
1751     {
1752       nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
1753     }
1754   else if ((inst1 & 0xf800) == 0xf000)  /* long branch with link */
1755     {
1756       unsigned short inst2 = read_memory_integer (pc + 2, 2);
1757       offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) << 1);
1758       nextpc = pc_val + offset;
1759     }
1760
1761   return nextpc;
1762 }
1763
1764 CORE_ADDR
1765 arm_get_next_pc (CORE_ADDR pc)
1766 {
1767   unsigned long pc_val;
1768   unsigned long this_instr;
1769   unsigned long status;
1770   CORE_ADDR nextpc;
1771
1772   if (arm_pc_is_thumb (pc))
1773     return thumb_get_next_pc (pc);
1774
1775   pc_val = (unsigned long) pc;
1776   this_instr = read_memory_integer (pc, 4);
1777   status = read_register (ARM_PS_REGNUM);
1778   nextpc = (CORE_ADDR) (pc_val + 4);    /* Default case */
1779
1780   if (condition_true (bits (this_instr, 28, 31), status))
1781     {
1782       switch (bits (this_instr, 24, 27))
1783         {
1784         case 0x0:
1785         case 0x1:               /* data processing */
1786         case 0x2:
1787         case 0x3:
1788           {
1789             unsigned long operand1, operand2, result = 0;
1790             unsigned long rn;
1791             int c;
1792
1793             if (bits (this_instr, 12, 15) != 15)
1794               break;
1795
1796             if (bits (this_instr, 22, 25) == 0
1797                 && bits (this_instr, 4, 7) == 9)        /* multiply */
1798               error ("Illegal update to pc in instruction");
1799
1800             /* Multiply into PC */
1801             c = (status & FLAG_C) ? 1 : 0;
1802             rn = bits (this_instr, 16, 19);
1803             operand1 = (rn == 15) ? pc_val + 8 : read_register (rn);
1804
1805             if (bit (this_instr, 25))
1806               {
1807                 unsigned long immval = bits (this_instr, 0, 7);
1808                 unsigned long rotate = 2 * bits (this_instr, 8, 11);
1809                 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
1810                   & 0xffffffff;
1811               }
1812             else                /* operand 2 is a shifted register */
1813               operand2 = shifted_reg_val (this_instr, c, pc_val, status);
1814
1815             switch (bits (this_instr, 21, 24))
1816               {
1817               case 0x0: /*and */
1818                 result = operand1 & operand2;
1819                 break;
1820
1821               case 0x1: /*eor */
1822                 result = operand1 ^ operand2;
1823                 break;
1824
1825               case 0x2: /*sub */
1826                 result = operand1 - operand2;
1827                 break;
1828
1829               case 0x3: /*rsb */
1830                 result = operand2 - operand1;
1831                 break;
1832
1833               case 0x4: /*add */
1834                 result = operand1 + operand2;
1835                 break;
1836
1837               case 0x5: /*adc */
1838                 result = operand1 + operand2 + c;
1839                 break;
1840
1841               case 0x6: /*sbc */
1842                 result = operand1 - operand2 + c;
1843                 break;
1844
1845               case 0x7: /*rsc */
1846                 result = operand2 - operand1 + c;
1847                 break;
1848
1849               case 0x8:
1850               case 0x9:
1851               case 0xa:
1852               case 0xb: /* tst, teq, cmp, cmn */
1853                 result = (unsigned long) nextpc;
1854                 break;
1855
1856               case 0xc: /*orr */
1857                 result = operand1 | operand2;
1858                 break;
1859
1860               case 0xd: /*mov */
1861                 /* Always step into a function.  */
1862                 result = operand2;
1863                 break;
1864
1865               case 0xe: /*bic */
1866                 result = operand1 & ~operand2;
1867                 break;
1868
1869               case 0xf: /*mvn */
1870                 result = ~operand2;
1871                 break;
1872               }
1873             nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
1874
1875             if (nextpc == pc)
1876               error ("Infinite loop detected");
1877             break;
1878           }
1879
1880         case 0x4:
1881         case 0x5:               /* data transfer */
1882         case 0x6:
1883         case 0x7:
1884           if (bit (this_instr, 20))
1885             {
1886               /* load */
1887               if (bits (this_instr, 12, 15) == 15)
1888                 {
1889                   /* rd == pc */
1890                   unsigned long rn;
1891                   unsigned long base;
1892
1893                   if (bit (this_instr, 22))
1894                     error ("Illegal update to pc in instruction");
1895
1896                   /* byte write to PC */
1897                   rn = bits (this_instr, 16, 19);
1898                   base = (rn == 15) ? pc_val + 8 : read_register (rn);
1899                   if (bit (this_instr, 24))
1900                     {
1901                       /* pre-indexed */
1902                       int c = (status & FLAG_C) ? 1 : 0;
1903                       unsigned long offset =
1904                       (bit (this_instr, 25)
1905                        ? shifted_reg_val (this_instr, c, pc_val, status)
1906                        : bits (this_instr, 0, 11));
1907
1908                       if (bit (this_instr, 23))
1909                         base += offset;
1910                       else
1911                         base -= offset;
1912                     }
1913                   nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
1914                                                             4);
1915
1916                   nextpc = ADDR_BITS_REMOVE (nextpc);
1917
1918                   if (nextpc == pc)
1919                     error ("Infinite loop detected");
1920                 }
1921             }
1922           break;
1923
1924         case 0x8:
1925         case 0x9:               /* block transfer */
1926           if (bit (this_instr, 20))
1927             {
1928               /* LDM */
1929               if (bit (this_instr, 15))
1930                 {
1931                   /* loading pc */
1932                   int offset = 0;
1933
1934                   if (bit (this_instr, 23))
1935                     {
1936                       /* up */
1937                       unsigned long reglist = bits (this_instr, 0, 14);
1938                       offset = bitcount (reglist) * 4;
1939                       if (bit (this_instr, 24))         /* pre */
1940                         offset += 4;
1941                     }
1942                   else if (bit (this_instr, 24))
1943                     offset = -4;
1944
1945                   {
1946                     unsigned long rn_val =
1947                     read_register (bits (this_instr, 16, 19));
1948                     nextpc =
1949                       (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
1950                                                                   + offset),
1951                                                        4);
1952                   }
1953                   nextpc = ADDR_BITS_REMOVE (nextpc);
1954                   if (nextpc == pc)
1955                     error ("Infinite loop detected");
1956                 }
1957             }
1958           break;
1959
1960         case 0xb:               /* branch & link */
1961         case 0xa:               /* branch */
1962           {
1963             nextpc = BranchDest (pc, this_instr);
1964
1965             nextpc = ADDR_BITS_REMOVE (nextpc);
1966             if (nextpc == pc)
1967               error ("Infinite loop detected");
1968             break;
1969           }
1970
1971         case 0xc:
1972         case 0xd:
1973         case 0xe:               /* coproc ops */
1974         case 0xf:               /* SWI */
1975           break;
1976
1977         default:
1978           fprintf_filtered (gdb_stderr, "Bad bit-field extraction\n");
1979           return (pc);
1980         }
1981     }
1982
1983   return nextpc;
1984 }
1985
1986 /* single_step() is called just before we want to resume the inferior,
1987    if we want to single-step it but there is no hardware or kernel
1988    single-step support.  We find the target of the coming instruction
1989    and breakpoint it.
1990
1991    single_step is also called just after the inferior stops.  If we had
1992    set up a simulated single-step, we undo our damage.  */
1993
1994 static void
1995 arm_software_single_step (enum target_signal sig, int insert_bpt)
1996 {
1997   static int next_pc; /* State between setting and unsetting. */
1998   static char break_mem[BREAKPOINT_MAX]; /* Temporary storage for mem@bpt */
1999
2000   if (insert_bpt)
2001     {
2002       next_pc = arm_get_next_pc (read_register (ARM_PC_REGNUM));
2003       target_insert_breakpoint (next_pc, break_mem);
2004     }
2005   else
2006     target_remove_breakpoint (next_pc, break_mem);
2007 }
2008
2009 #include "bfd-in2.h"
2010 #include "libcoff.h"
2011
2012 static int
2013 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
2014 {
2015   if (arm_pc_is_thumb (memaddr))
2016     {
2017       static asymbol *asym;
2018       static combined_entry_type ce;
2019       static struct coff_symbol_struct csym;
2020       static struct _bfd fake_bfd;
2021       static bfd_target fake_target;
2022
2023       if (csym.native == NULL)
2024         {
2025           /* Create a fake symbol vector containing a Thumb symbol.  This is
2026              solely so that the code in print_insn_little_arm() and
2027              print_insn_big_arm() in opcodes/arm-dis.c will detect the presence
2028              of a Thumb symbol and switch to decoding Thumb instructions.  */
2029
2030           fake_target.flavour = bfd_target_coff_flavour;
2031           fake_bfd.xvec = &fake_target;
2032           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
2033           csym.native = &ce;
2034           csym.symbol.the_bfd = &fake_bfd;
2035           csym.symbol.name = "fake";
2036           asym = (asymbol *) & csym;
2037         }
2038
2039       memaddr = UNMAKE_THUMB_ADDR (memaddr);
2040       info->symbols = &asym;
2041     }
2042   else
2043     info->symbols = NULL;
2044
2045   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2046     return print_insn_big_arm (memaddr, info);
2047   else
2048     return print_insn_little_arm (memaddr, info);
2049 }
2050
2051 /* The following define instruction sequences that will cause ARM
2052    cpu's to take an undefined instruction trap.  These are used to
2053    signal a breakpoint to GDB.
2054    
2055    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
2056    modes.  A different instruction is required for each mode.  The ARM
2057    cpu's can also be big or little endian.  Thus four different
2058    instructions are needed to support all cases.
2059    
2060    Note: ARMv4 defines several new instructions that will take the
2061    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
2062    not in fact add the new instructions.  The new undefined
2063    instructions in ARMv4 are all instructions that had no defined
2064    behaviour in earlier chips.  There is no guarantee that they will
2065    raise an exception, but may be treated as NOP's.  In practice, it
2066    may only safe to rely on instructions matching:
2067    
2068    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
2069    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
2070    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
2071    
2072    Even this may only true if the condition predicate is true. The
2073    following use a condition predicate of ALWAYS so it is always TRUE.
2074    
2075    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
2076    and NetBSD all use a software interrupt rather than an undefined
2077    instruction to force a trap.  This can be handled by by the
2078    abi-specific code during establishment of the gdbarch vector.  */
2079
2080
2081 /* NOTE rearnsha 2002-02-18: for now we allow a non-multi-arch gdb to
2082    override these definitions.  */
2083 #ifndef ARM_LE_BREAKPOINT
2084 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
2085 #endif
2086 #ifndef ARM_BE_BREAKPOINT
2087 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
2088 #endif
2089 #ifndef THUMB_LE_BREAKPOINT
2090 #define THUMB_LE_BREAKPOINT {0xfe,0xdf}
2091 #endif
2092 #ifndef THUMB_BE_BREAKPOINT
2093 #define THUMB_BE_BREAKPOINT {0xdf,0xfe}
2094 #endif
2095
2096 static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
2097 static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
2098 static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
2099 static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
2100
2101 /* Determine the type and size of breakpoint to insert at PCPTR.  Uses
2102    the program counter value to determine whether a 16-bit or 32-bit
2103    breakpoint should be used.  It returns a pointer to a string of
2104    bytes that encode a breakpoint instruction, stores the length of
2105    the string to *lenptr, and adjusts the program counter (if
2106    necessary) to point to the actual memory location where the
2107    breakpoint should be inserted.  */
2108
2109 /* XXX ??? from old tm-arm.h: if we're using RDP, then we're inserting
2110    breakpoints and storing their handles instread of what was in
2111    memory.  It is nice that this is the same size as a handle -
2112    otherwise remote-rdp will have to change. */
2113
2114 unsigned char *
2115 arm_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
2116 {
2117   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2118
2119   if (arm_pc_is_thumb (*pcptr) || arm_pc_is_thumb_dummy (*pcptr))
2120     {
2121       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
2122       *lenptr = tdep->thumb_breakpoint_size;
2123       return tdep->thumb_breakpoint;
2124     }
2125   else
2126     {
2127       *lenptr = tdep->arm_breakpoint_size;
2128       return tdep->arm_breakpoint;
2129     }
2130 }
2131
2132 /* Extract from an array REGBUF containing the (raw) register state a
2133    function return value of type TYPE, and copy that, in virtual
2134    format, into VALBUF.  */
2135
2136 static void
2137 arm_extract_return_value (struct type *type,
2138                           char regbuf[REGISTER_BYTES],
2139                           char *valbuf)
2140 {
2141   if (TYPE_CODE_FLT == TYPE_CODE (type))
2142     {
2143       struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2144
2145       switch (tdep->fp_model)
2146         {
2147         case ARM_FLOAT_FPA:
2148           convert_from_extended (&regbuf[REGISTER_BYTE (ARM_F0_REGNUM)],
2149                                  valbuf);
2150           break;
2151
2152         case ARM_FLOAT_SOFT:
2153         case ARM_FLOAT_SOFT_VFP:
2154           memcpy (valbuf, &regbuf[REGISTER_BYTE (ARM_A1_REGNUM)],
2155                   TYPE_LENGTH (type));
2156           break;
2157
2158         default:
2159           internal_error
2160             (__FILE__, __LINE__,
2161              "arm_extract_return_value: Floating point model not supported");
2162           break;
2163         }
2164     }
2165   else
2166     memcpy (valbuf, &regbuf[REGISTER_BYTE (ARM_A1_REGNUM)],
2167             TYPE_LENGTH (type));
2168 }
2169
2170 /* Extract from an array REGBUF containing the (raw) register state
2171    the address in which a function should return its structure value.  */
2172
2173 static CORE_ADDR
2174 arm_extract_struct_value_address (char *regbuf)
2175 {
2176   return extract_address (regbuf, REGISTER_RAW_SIZE(ARM_A1_REGNUM));
2177 }
2178
2179 /* Will a function return an aggregate type in memory or in a
2180    register?  Return 0 if an aggregate type can be returned in a
2181    register, 1 if it must be returned in memory.  */
2182
2183 static int
2184 arm_use_struct_convention (int gcc_p, struct type *type)
2185 {
2186   int nRc;
2187   register enum type_code code;
2188
2189   /* In the ARM ABI, "integer" like aggregate types are returned in
2190      registers.  For an aggregate type to be integer like, its size
2191      must be less than or equal to REGISTER_SIZE and the offset of
2192      each addressable subfield must be zero.  Note that bit fields are
2193      not addressable, and all addressable subfields of unions always
2194      start at offset zero.
2195
2196      This function is based on the behaviour of GCC 2.95.1.
2197      See: gcc/arm.c: arm_return_in_memory() for details.
2198
2199      Note: All versions of GCC before GCC 2.95.2 do not set up the
2200      parameters correctly for a function returning the following
2201      structure: struct { float f;}; This should be returned in memory,
2202      not a register.  Richard Earnshaw sent me a patch, but I do not
2203      know of any way to detect if a function like the above has been
2204      compiled with the correct calling convention.  */
2205
2206   /* All aggregate types that won't fit in a register must be returned
2207      in memory.  */
2208   if (TYPE_LENGTH (type) > REGISTER_SIZE)
2209     {
2210       return 1;
2211     }
2212
2213   /* The only aggregate types that can be returned in a register are
2214      structs and unions.  Arrays must be returned in memory.  */
2215   code = TYPE_CODE (type);
2216   if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
2217     {
2218       return 1;
2219     }
2220
2221   /* Assume all other aggregate types can be returned in a register.
2222      Run a check for structures, unions and arrays.  */
2223   nRc = 0;
2224
2225   if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
2226     {
2227       int i;
2228       /* Need to check if this struct/union is "integer" like.  For
2229          this to be true, its size must be less than or equal to
2230          REGISTER_SIZE and the offset of each addressable subfield
2231          must be zero.  Note that bit fields are not addressable, and
2232          unions always start at offset zero.  If any of the subfields
2233          is a floating point type, the struct/union cannot be an
2234          integer type.  */
2235
2236       /* For each field in the object, check:
2237          1) Is it FP? --> yes, nRc = 1;
2238          2) Is it addressable (bitpos != 0) and
2239          not packed (bitsize == 0)?
2240          --> yes, nRc = 1  
2241        */
2242
2243       for (i = 0; i < TYPE_NFIELDS (type); i++)
2244         {
2245           enum type_code field_type_code;
2246           field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i));
2247
2248           /* Is it a floating point type field?  */
2249           if (field_type_code == TYPE_CODE_FLT)
2250             {
2251               nRc = 1;
2252               break;
2253             }
2254
2255           /* If bitpos != 0, then we have to care about it.  */
2256           if (TYPE_FIELD_BITPOS (type, i) != 0)
2257             {
2258               /* Bitfields are not addressable.  If the field bitsize is 
2259                  zero, then the field is not packed.  Hence it cannot be
2260                  a bitfield or any other packed type.  */
2261               if (TYPE_FIELD_BITSIZE (type, i) == 0)
2262                 {
2263                   nRc = 1;
2264                   break;
2265                 }
2266             }
2267         }
2268     }
2269
2270   return nRc;
2271 }
2272
2273 /* Write into appropriate registers a function return value of type
2274    TYPE, given in virtual format.  */
2275
2276 static void
2277 arm_store_return_value (struct type *type, char *valbuf)
2278 {
2279   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2280     {
2281       struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2282       char buf[MAX_REGISTER_RAW_SIZE];
2283
2284       switch (tdep->fp_model)
2285         {
2286         case ARM_FLOAT_FPA:
2287
2288           convert_to_extended (valbuf, buf);
2289           write_register_bytes (REGISTER_BYTE (ARM_F0_REGNUM), buf,
2290                                 MAX_REGISTER_RAW_SIZE);
2291           break;
2292
2293         case ARM_FLOAT_SOFT:
2294         case ARM_FLOAT_SOFT_VFP:
2295           write_register_bytes (ARM_A1_REGNUM, valbuf, TYPE_LENGTH (type));
2296           break;
2297
2298         default:
2299           internal_error
2300             (__FILE__, __LINE__,
2301              "arm_store_return_value: Floating point model not supported");
2302           break;
2303         }
2304     }
2305   else
2306     write_register_bytes (ARM_A1_REGNUM, valbuf, TYPE_LENGTH (type));
2307 }
2308
2309 /* Store the address of the place in which to copy the structure the
2310    subroutine will return.  This is called from call_function. */
2311
2312 static void
2313 arm_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
2314 {
2315   write_register (ARM_A1_REGNUM, addr);
2316 }
2317
2318 static int
2319 arm_get_longjmp_target (CORE_ADDR *pc)
2320 {
2321   CORE_ADDR jb_addr;
2322   char buf[INT_REGISTER_RAW_SIZE];
2323   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2324   
2325   jb_addr = read_register (ARM_A1_REGNUM);
2326
2327   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
2328                           INT_REGISTER_RAW_SIZE))
2329     return 0;
2330
2331   *pc = extract_address (buf, INT_REGISTER_RAW_SIZE);
2332   return 1;
2333 }
2334
2335 /* Return non-zero if the PC is inside a thumb call thunk.  */
2336
2337 int
2338 arm_in_call_stub (CORE_ADDR pc, char *name)
2339 {
2340   CORE_ADDR start_addr;
2341
2342   /* Find the starting address of the function containing the PC.  If
2343      the caller didn't give us a name, look it up at the same time.  */
2344   if (find_pc_partial_function (pc, name ? NULL : &name, &start_addr, NULL) == 0)
2345     return 0;
2346
2347   return strncmp (name, "_call_via_r", 11) == 0;
2348 }
2349
2350 /* If PC is in a Thumb call or return stub, return the address of the
2351    target PC, which is in a register.  The thunk functions are called
2352    _called_via_xx, where x is the register name.  The possible names
2353    are r0-r9, sl, fp, ip, sp, and lr.  */
2354
2355 CORE_ADDR
2356 arm_skip_stub (CORE_ADDR pc)
2357 {
2358   char *name;
2359   CORE_ADDR start_addr;
2360
2361   /* Find the starting address and name of the function containing the PC.  */
2362   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
2363     return 0;
2364
2365   /* Call thunks always start with "_call_via_".  */
2366   if (strncmp (name, "_call_via_", 10) == 0)
2367     {
2368       /* Use the name suffix to determine which register contains the
2369          target PC.  */
2370       static char *table[15] =
2371       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
2372        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
2373       };
2374       int regno;
2375
2376       for (regno = 0; regno <= 14; regno++)
2377         if (strcmp (&name[10], table[regno]) == 0)
2378           return read_register (regno);
2379     }
2380
2381   return 0;                     /* not a stub */
2382 }
2383
2384 /* If the user changes the register disassembly flavor used for info register
2385    and other commands, we have to also switch the flavor used in opcodes
2386    for disassembly output.
2387    This function is run in the set disassembly_flavor command, and does that. */
2388
2389 static void
2390 set_disassembly_flavor_sfunc (char *args, int from_tty,
2391                               struct cmd_list_element *c)
2392 {
2393   set_disassembly_flavor ();
2394 }
2395 \f
2396 /* Return the ARM register name corresponding to register I.  */
2397 static char *
2398 arm_register_name (int i)
2399 {
2400   return arm_register_names[i];
2401 }
2402
2403 static void
2404 set_disassembly_flavor (void)
2405 {
2406   const char *setname, *setdesc, **regnames;
2407   int numregs, j;
2408
2409   /* Find the flavor that the user wants in the opcodes table. */
2410   int current = 0;
2411   numregs = get_arm_regnames (current, &setname, &setdesc, &regnames);
2412   while ((disassembly_flavor != setname)
2413          && (current < num_flavor_options))
2414     get_arm_regnames (++current, &setname, &setdesc, &regnames);
2415   current_option = current;
2416
2417   /* Fill our copy. */
2418   for (j = 0; j < numregs; j++)
2419     arm_register_names[j] = (char *) regnames[j];
2420
2421   /* Adjust case. */
2422   if (isupper (*regnames[ARM_PC_REGNUM]))
2423     {
2424       arm_register_names[ARM_FPS_REGNUM] = "FPS";
2425       arm_register_names[ARM_PS_REGNUM] = "CPSR";
2426     }
2427   else
2428     {
2429       arm_register_names[ARM_FPS_REGNUM] = "fps";
2430       arm_register_names[ARM_PS_REGNUM] = "cpsr";
2431     }
2432
2433   /* Synchronize the disassembler. */
2434   set_arm_regname_option (current);
2435 }
2436
2437 /* arm_othernames implements the "othernames" command.  This is kind
2438    of hacky, and I prefer the set-show disassembly-flavor which is
2439    also used for the x86 gdb.  I will keep this around, however, in
2440    case anyone is actually using it. */
2441
2442 static void
2443 arm_othernames (char *names, int n)
2444 {
2445   /* Circle through the various flavors. */
2446   current_option = (current_option + 1) % num_flavor_options;
2447
2448   disassembly_flavor = valid_flavors[current_option];
2449   set_disassembly_flavor (); 
2450 }
2451
2452 /* Fetch, and possibly build, an appropriate link_map_offsets structure
2453    for ARM linux targets using the struct offsets defined in <link.h>.
2454    Note, however, that link.h is not actually referred to in this file.
2455    Instead, the relevant structs offsets were obtained from examining
2456    link.h.  (We can't refer to link.h from this file because the host
2457    system won't necessarily have it, or if it does, the structs which
2458    it defines will refer to the host system, not the target.)  */
2459
2460 struct link_map_offsets *
2461 arm_linux_svr4_fetch_link_map_offsets (void)
2462 {
2463   static struct link_map_offsets lmo;
2464   static struct link_map_offsets *lmp = 0;
2465
2466   if (lmp == 0)
2467     {
2468       lmp = &lmo;
2469
2470       lmo.r_debug_size = 8;     /* Actual size is 20, but this is all we
2471                                    need. */
2472
2473       lmo.r_map_offset = 4;
2474       lmo.r_map_size   = 4;
2475
2476       lmo.link_map_size = 20;   /* Actual size is 552, but this is all we
2477                                    need. */
2478
2479       lmo.l_addr_offset = 0;
2480       lmo.l_addr_size   = 4;
2481
2482       lmo.l_name_offset = 4;
2483       lmo.l_name_size   = 4;
2484
2485       lmo.l_next_offset = 12;
2486       lmo.l_next_size   = 4;
2487
2488       lmo.l_prev_offset = 16;
2489       lmo.l_prev_size   = 4;
2490     }
2491
2492     return lmp;
2493 }
2494
2495 /* Test whether the coff symbol specific value corresponds to a Thumb
2496    function.  */
2497
2498 static int
2499 coff_sym_is_thumb (int val)
2500 {
2501   return (val == C_THUMBEXT ||
2502           val == C_THUMBSTAT ||
2503           val == C_THUMBEXTFUNC ||
2504           val == C_THUMBSTATFUNC ||
2505           val == C_THUMBLABEL);
2506 }
2507
2508 /* arm_coff_make_msymbol_special()
2509    arm_elf_make_msymbol_special()
2510    
2511    These functions test whether the COFF or ELF symbol corresponds to
2512    an address in thumb code, and set a "special" bit in a minimal
2513    symbol to indicate that it does.  */
2514    
2515 static void
2516 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
2517 {
2518   /* Thumb symbols are of type STT_LOPROC, (synonymous with
2519      STT_ARM_TFUNC).  */
2520   if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
2521       == STT_LOPROC)
2522     MSYMBOL_SET_SPECIAL (msym);
2523 }
2524
2525 static void
2526 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
2527 {
2528   if (coff_sym_is_thumb (val))
2529     MSYMBOL_SET_SPECIAL (msym);
2530 }
2531
2532 \f
2533 static void
2534 process_note_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
2535 {
2536   enum arm_abi *os_ident_ptr = obj;
2537   const char *name;
2538   unsigned int sectsize;
2539
2540   name = bfd_get_section_name (abfd, sect);
2541   sectsize = bfd_section_size (abfd, sect);
2542
2543   if (strcmp (name, ".note.ABI-tag") == 0 && sectsize > 0)
2544     {
2545       unsigned int name_length, data_length, note_type;
2546       char *note;
2547
2548       /* If the section is larger than this, it's probably not what we are
2549          looking for.  */
2550       if (sectsize > 128)
2551         sectsize = 128;
2552
2553       note = alloca (sectsize);
2554
2555       bfd_get_section_contents (abfd, sect, note,
2556                                 (file_ptr) 0, (bfd_size_type) sectsize);
2557
2558       name_length = bfd_h_get_32 (abfd, note);
2559       data_length = bfd_h_get_32 (abfd, note + 4);
2560       note_type   = bfd_h_get_32 (abfd, note + 8);
2561
2562       if (name_length == 4 && data_length == 16 && note_type == 1
2563           && strcmp (note + 12, "GNU") == 0)
2564         {
2565           int os_number = bfd_h_get_32 (abfd, note + 16);
2566
2567           /* The case numbers are from abi-tags in glibc.  */
2568           switch (os_number)
2569             {
2570             case 0 :
2571               *os_ident_ptr = ARM_ABI_LINUX;
2572               break;
2573
2574             case 1 :
2575               internal_error
2576                 (__FILE__, __LINE__,
2577                  "process_note_abi_sections: Hurd objects not supported");
2578               break;
2579
2580             case 2 :
2581               internal_error
2582                 (__FILE__, __LINE__,
2583                  "process_note_abi_sections: Solaris objects not supported");
2584               break;
2585
2586             default :
2587               internal_error
2588                 (__FILE__, __LINE__,
2589                  "process_note_abi_sections: unknown OS number %d",
2590                  os_number);
2591               break;
2592             }
2593         }
2594     }
2595   /* NetBSD uses a similar trick.  */
2596   else if (strcmp (name, ".note.netbsd.ident") == 0 && sectsize > 0)
2597     {
2598       unsigned int name_length, desc_length, note_type;
2599       char *note;
2600
2601       /* If the section is larger than this, it's probably not what we are
2602          looking for.  */
2603       if (sectsize > 128)
2604         sectsize = 128;
2605
2606       note = alloca (sectsize);
2607
2608       bfd_get_section_contents (abfd, sect, note,
2609                                 (file_ptr) 0, (bfd_size_type) sectsize);
2610
2611       name_length = bfd_h_get_32 (abfd, note);
2612       desc_length = bfd_h_get_32 (abfd, note + 4);
2613       note_type   = bfd_h_get_32 (abfd, note + 8);
2614
2615       if (name_length == 7 && desc_length == 4 && note_type == 1
2616           && strcmp (note + 12, "NetBSD") == 0)
2617         /* XXX Should we check the version here?
2618            Probably not necessary yet.  */
2619         *os_ident_ptr = ARM_ABI_NETBSD_ELF;
2620     }
2621 }
2622
2623 /* Return one of the ELFOSABI_ constants for BFDs representing ELF
2624    executables.  If it's not an ELF executable or if the OS/ABI couldn't
2625    be determined, simply return -1.  */
2626
2627 static int
2628 get_elfosabi (bfd *abfd)
2629 {
2630   int elfosabi;
2631   enum arm_abi arm_abi = ARM_ABI_UNKNOWN;
2632
2633   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
2634
2635   /* When elfosabi is 0 (ELFOSABI_NONE), this is supposed to indicate
2636      that we're on a SYSV system.  However, GNU/Linux uses a note section
2637      to record OS/ABI info, but leaves e_ident[EI_OSABI] zero.  So we
2638      have to check the note sections too.
2639
2640      GNU/ARM tools set the EI_OSABI field to ELFOSABI_ARM, so handle that
2641      as well.  */
2642   if (elfosabi == 0 || elfosabi == ELFOSABI_ARM)
2643     {
2644       bfd_map_over_sections (abfd,
2645                              process_note_abi_tag_sections,
2646                              &arm_abi);
2647     }
2648
2649   if (arm_abi != ARM_ABI_UNKNOWN)
2650     return arm_abi;
2651
2652   switch (elfosabi)
2653     {
2654     case ELFOSABI_NONE:
2655       /* Existing ARM Tools don't set this field, so look at the EI_FLAGS
2656          field for more information.  */
2657
2658       switch (EF_ARM_EABI_VERSION(elf_elfheader(abfd)->e_flags))
2659         {
2660         case EF_ARM_EABI_VER1:
2661           return ARM_ABI_EABI_V1;
2662
2663         case EF_ARM_EABI_VER2:
2664           return ARM_ABI_EABI_V2;
2665
2666         case EF_ARM_EABI_UNKNOWN:
2667           /* Assume GNU tools.  */
2668           return ARM_ABI_APCS;
2669
2670         default:
2671           internal_error (__FILE__, __LINE__,
2672                           "get_elfosabi: Unknown ARM EABI version 0x%lx",
2673                           EF_ARM_EABI_VERSION(elf_elfheader(abfd)->e_flags));
2674
2675         }
2676       break;
2677
2678     case ELFOSABI_NETBSD:
2679       return ARM_ABI_NETBSD_ELF;
2680
2681     case ELFOSABI_FREEBSD:
2682       return ARM_ABI_FREEBSD;
2683
2684     case ELFOSABI_LINUX:
2685       return ARM_ABI_LINUX;
2686
2687     case ELFOSABI_ARM:
2688       /* Assume GNU tools with the old APCS abi.  */
2689       return ARM_ABI_APCS;
2690
2691     default:
2692     }
2693
2694   return ARM_ABI_UNKNOWN;
2695 }
2696
2697 struct arm_abi_handler
2698 {
2699   struct arm_abi_handler *next;
2700   enum arm_abi abi;
2701   void (*init_abi)(struct gdbarch_info, struct gdbarch *);
2702 };
2703
2704 struct arm_abi_handler *arm_abi_handler_list = NULL;
2705
2706 void
2707 arm_gdbarch_register_os_abi (enum arm_abi abi,
2708                              void (*init_abi)(struct gdbarch_info,
2709                                               struct gdbarch *))
2710 {
2711   struct arm_abi_handler **handler_p;
2712
2713   for (handler_p = &arm_abi_handler_list; *handler_p != NULL;
2714        handler_p = &(*handler_p)->next)
2715     {
2716       if ((*handler_p)->abi == abi)
2717         {
2718           internal_error
2719             (__FILE__, __LINE__,
2720              "arm_gdbarch_register_os_abi: A handler for this ABI variant (%d)"
2721              " has already been registered", (int)abi);
2722           /* If user wants to continue, override previous definition.  */
2723           (*handler_p)->init_abi = init_abi;
2724           return;
2725         }
2726     }
2727
2728   (*handler_p)
2729     = (struct arm_abi_handler *) xmalloc (sizeof (struct arm_abi_handler));
2730   (*handler_p)->next = NULL;
2731   (*handler_p)->abi = abi;
2732   (*handler_p)->init_abi = init_abi;
2733 }
2734
2735 /* Initialize the current architecture based on INFO.  If possible, re-use an
2736    architecture from ARCHES, which is a list of architectures already created
2737    during this debugging session.
2738
2739    Called e.g. at program startup, when reading a core file, and when reading
2740    a binary file.  */
2741
2742 static struct gdbarch *
2743 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2744 {
2745   struct gdbarch_tdep *tdep;
2746   struct gdbarch *gdbarch;
2747   enum arm_abi arm_abi = ARM_ABI_UNKNOWN;
2748   struct arm_abi_handler *abi_handler;
2749
2750   /* Try to deterimine the ABI of the object we are loading.  */
2751
2752   if (info.abfd != NULL)
2753     {
2754       switch (bfd_get_flavour (info.abfd))
2755         {
2756         case bfd_target_elf_flavour:
2757           arm_abi = get_elfosabi (info.abfd);
2758           break;
2759
2760         case bfd_target_aout_flavour:
2761           if (strcmp (bfd_get_target(info.abfd), "a.out-arm-netbsd") == 0)
2762             arm_abi = ARM_ABI_NETBSD_AOUT;
2763           else
2764             /* Assume it's an old APCS-style ABI.  */
2765             arm_abi = ARM_ABI_APCS;
2766           break;
2767
2768         case bfd_target_coff_flavour:
2769           /* Assume it's an old APCS-style ABI.  */
2770           /* XXX WinCE?  */
2771           arm_abi = ARM_ABI_APCS;
2772           break;
2773
2774         default:
2775           /* Not sure what to do here, leave the ABI as unknown.  */
2776           break;
2777         }
2778     }
2779
2780   /* Find a candidate among extant architectures.  */
2781   for (arches = gdbarch_list_lookup_by_info (arches, &info);
2782        arches != NULL;
2783        arches = gdbarch_list_lookup_by_info (arches->next, &info))
2784     {
2785       /* Make sure the ABI selection matches.  */
2786       tdep = gdbarch_tdep (arches->gdbarch);
2787       if (tdep && tdep->arm_abi == arm_abi)
2788         return arches->gdbarch;
2789     }
2790
2791   tdep = xmalloc (sizeof (struct gdbarch_tdep));
2792   gdbarch = gdbarch_alloc (&info, tdep);
2793
2794   tdep->arm_abi = arm_abi;
2795   if (arm_abi < ARM_ABI_INVALID)
2796     tdep->abi_name = arm_abi_names[arm_abi];
2797   else
2798     {
2799       internal_error (__FILE__, __LINE__, "Invalid setting of arm_abi %d",
2800                       (int) arm_abi);
2801       tdep->abi_name = "<invalid>";
2802     }
2803
2804   /* This is the way it has always defaulted.  */
2805   tdep->fp_model = ARM_FLOAT_FPA;
2806
2807   /* Breakpoints.  */
2808   switch (info.byte_order)
2809     {
2810     case BFD_ENDIAN_BIG:
2811       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
2812       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
2813       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
2814       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
2815
2816       break;
2817
2818     case BFD_ENDIAN_LITTLE:
2819       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
2820       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
2821       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
2822       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
2823
2824       break;
2825
2826     default:
2827       internal_error (__FILE__, __LINE__,
2828                       "arm_gdbarch_init: bad byte order for float format");
2829     }
2830
2831   /* On ARM targets char defaults to unsigned.  */
2832   set_gdbarch_char_signed (gdbarch, 0);
2833
2834   /* This should be low enough for everything.  */
2835   tdep->lowest_pc = 0x20;
2836   tdep->jb_pc = -1; /* Longjump support not enabled by default.  */
2837
2838   set_gdbarch_use_generic_dummy_frames (gdbarch, 0);
2839
2840   /* Call dummy code.  */
2841   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
2842   set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
2843   /* We have to give this a value now, even though we will re-set it 
2844      during each call to arm_fix_call_dummy.  */
2845   set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 8);
2846   set_gdbarch_call_dummy_p (gdbarch, 1);
2847   set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
2848
2849   set_gdbarch_call_dummy_words (gdbarch, arm_call_dummy_words);
2850   set_gdbarch_sizeof_call_dummy_words (gdbarch, sizeof (arm_call_dummy_words));
2851   set_gdbarch_call_dummy_start_offset (gdbarch, 0);
2852   set_gdbarch_call_dummy_length (gdbarch, 0);
2853
2854   set_gdbarch_fix_call_dummy (gdbarch, arm_fix_call_dummy);
2855
2856   set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_on_stack);
2857
2858   set_gdbarch_get_saved_register (gdbarch, generic_get_saved_register);
2859   set_gdbarch_push_arguments (gdbarch, arm_push_arguments);
2860   set_gdbarch_coerce_float_to_double (gdbarch,
2861                                       standard_coerce_float_to_double);
2862
2863   /* Frame handling.  */
2864   set_gdbarch_frame_chain_valid (gdbarch, arm_frame_chain_valid);
2865   set_gdbarch_init_extra_frame_info (gdbarch, arm_init_extra_frame_info);
2866   set_gdbarch_read_fp (gdbarch, arm_read_fp);
2867   set_gdbarch_frame_chain (gdbarch, arm_frame_chain);
2868   set_gdbarch_frameless_function_invocation
2869     (gdbarch, arm_frameless_function_invocation);
2870   set_gdbarch_frame_saved_pc (gdbarch, arm_frame_saved_pc);
2871   set_gdbarch_frame_args_address (gdbarch, arm_frame_args_address);
2872   set_gdbarch_frame_locals_address (gdbarch, arm_frame_locals_address);
2873   set_gdbarch_frame_num_args (gdbarch, arm_frame_num_args);
2874   set_gdbarch_frame_args_skip (gdbarch, 0);
2875   set_gdbarch_frame_init_saved_regs (gdbarch, arm_frame_init_saved_regs);
2876   set_gdbarch_push_dummy_frame (gdbarch, arm_push_dummy_frame);
2877   set_gdbarch_pop_frame (gdbarch, arm_pop_frame);
2878
2879   /* Address manipulation.  */
2880   set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
2881   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
2882
2883   /* Offset from address of function to start of its code.  */
2884   set_gdbarch_function_start_offset (gdbarch, 0);
2885
2886   /* Advance PC across function entry code.  */
2887   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
2888
2889   /* Get the PC when a frame might not be available.  */
2890   set_gdbarch_saved_pc_after_call (gdbarch, arm_saved_pc_after_call);
2891
2892   /* The stack grows downward.  */
2893   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2894
2895   /* Breakpoint manipulation.  */
2896   set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
2897   set_gdbarch_decr_pc_after_break (gdbarch, 0);
2898
2899   /* Information about registers, etc.  */
2900   set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
2901   set_gdbarch_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
2902   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
2903   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
2904   set_gdbarch_register_byte (gdbarch, arm_register_byte);
2905   set_gdbarch_register_bytes (gdbarch,
2906                               (NUM_GREGS * INT_REGISTER_RAW_SIZE
2907                                + NUM_FREGS * FP_REGISTER_RAW_SIZE
2908                                + NUM_SREGS * STATUS_REGISTER_SIZE));
2909   set_gdbarch_num_regs (gdbarch, NUM_GREGS + NUM_FREGS + NUM_SREGS);
2910   set_gdbarch_register_raw_size (gdbarch, arm_register_raw_size);
2911   set_gdbarch_register_virtual_size (gdbarch, arm_register_virtual_size);
2912   set_gdbarch_max_register_raw_size (gdbarch, FP_REGISTER_RAW_SIZE);
2913   set_gdbarch_max_register_virtual_size (gdbarch, FP_REGISTER_VIRTUAL_SIZE);
2914   set_gdbarch_register_virtual_type (gdbarch, arm_register_type);
2915
2916   /* Integer registers are 4 bytes.  */
2917   set_gdbarch_register_size (gdbarch, 4);
2918   set_gdbarch_register_name (gdbarch, arm_register_name);
2919
2920   /* Returning results.  */
2921   set_gdbarch_extract_return_value (gdbarch, arm_extract_return_value);
2922   set_gdbarch_store_return_value (gdbarch, arm_store_return_value);
2923   set_gdbarch_store_struct_return (gdbarch, arm_store_struct_return);
2924   set_gdbarch_use_struct_convention (gdbarch, arm_use_struct_convention);
2925   set_gdbarch_extract_struct_value_address (gdbarch,
2926                                             arm_extract_struct_value_address);
2927
2928   /* Single stepping.  */
2929   /* XXX For an RDI target we should ask the target if it can single-step.  */
2930   set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
2931
2932   /* Minsymbol frobbing.  */
2933   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
2934   set_gdbarch_coff_make_msymbol_special (gdbarch,
2935                                          arm_coff_make_msymbol_special);
2936
2937   /* Hook in the ABI-specific overrides, if they have been registered.  */
2938   if (arm_abi == ARM_ABI_UNKNOWN)
2939     {
2940       /* Don't complain about not knowing the ABI variant if we don't 
2941          have an inferior.  */
2942       if (info.abfd)
2943         fprintf_filtered
2944           (gdb_stderr, "GDB doesn't recognize the ABI of the inferior.  "
2945            "Attempting to continue with the default ARM settings");
2946     }
2947   else
2948     {
2949       for (abi_handler = arm_abi_handler_list; abi_handler != NULL;
2950            abi_handler = abi_handler->next)
2951         if (abi_handler->abi == arm_abi)
2952           break;
2953
2954       if (abi_handler)
2955         abi_handler->init_abi (info, gdbarch);
2956       else
2957         {
2958           /* We assume that if GDB_MULTI_ARCH is less than 
2959              GDB_MULTI_ARCH_TM that an ABI variant can be supported by
2960              overriding definitions in this file.  */
2961           if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)
2962             fprintf_filtered
2963               (gdb_stderr,
2964                "A handler for the ABI variant \"%s\" is not built into this "
2965                "configuration of GDB.  "
2966                "Attempting to continue with the default ARM settings",
2967                arm_abi_names[arm_abi]);
2968         }
2969     }
2970
2971   /* Now we have tuned the configuration, set a few final things,
2972      based on what the OS ABI has told us.  */
2973
2974   if (tdep->jb_pc >= 0)
2975     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
2976
2977   /* Floating point sizes and format.  */
2978   switch (info.byte_order)
2979     {
2980     case BFD_ENDIAN_BIG:
2981       set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
2982       set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_big);
2983       set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
2984       
2985       break;
2986
2987     case BFD_ENDIAN_LITTLE:
2988       set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
2989       if (tdep->fp_model == ARM_FLOAT_VFP
2990           || tdep->fp_model == ARM_FLOAT_SOFT_VFP)
2991         {
2992           set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_little);
2993           set_gdbarch_long_double_format (gdbarch,
2994                                           &floatformat_ieee_double_little);
2995         }
2996       else
2997         {
2998           set_gdbarch_double_format
2999             (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
3000           set_gdbarch_long_double_format
3001             (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
3002         }
3003       break;
3004
3005     default:
3006       internal_error (__FILE__, __LINE__,
3007                       "arm_gdbarch_init: bad byte order for float format");
3008     }
3009
3010   /* We can't use SIZEOF_FRAME_SAVED_REGS here, since that still
3011      references the old architecture vector, not the one we are
3012      building here.  */
3013   if (prologue_cache.saved_regs != NULL)
3014     xfree (prologue_cache.saved_regs);
3015
3016   prologue_cache.saved_regs = (CORE_ADDR *)
3017     xcalloc (1, (sizeof (CORE_ADDR)
3018                  * (gdbarch_num_regs (gdbarch) + NUM_PSEUDO_REGS)));
3019
3020   return gdbarch;
3021 }
3022
3023 static void
3024 arm_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3025 {
3026   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3027
3028   if (tdep == NULL)
3029     return;
3030
3031   if (tdep->abi_name != NULL)
3032     fprintf_unfiltered (file, "arm_dump_tdep: ABI = %s\n", tdep->abi_name);
3033   else
3034     internal_error (__FILE__, __LINE__,
3035                     "arm_dump_tdep: illegal setting of tdep->arm_abi (%d)",
3036                     (int) tdep->arm_abi);
3037
3038   fprintf_unfiltered (file, "arm_dump_tdep: Lowest pc = 0x%lx",
3039                       (unsigned long) tdep->lowest_pc);
3040 }
3041
3042 static void
3043 arm_init_abi_eabi_v1 (struct gdbarch_info info,
3044                       struct gdbarch *gdbarch)
3045 {
3046   /* Place-holder.  */
3047 }
3048
3049 static void
3050 arm_init_abi_eabi_v2 (struct gdbarch_info info,
3051                       struct gdbarch *gdbarch)
3052 {
3053   /* Place-holder.  */
3054 }
3055
3056 static void
3057 arm_init_abi_apcs (struct gdbarch_info info,
3058                    struct gdbarch *gdbarch)
3059 {
3060   /* Place-holder.  */
3061 }
3062
3063 void
3064 _initialize_arm_tdep (void)
3065 {
3066   struct ui_file *stb;
3067   long length;
3068   struct cmd_list_element *new_cmd;
3069   const char *setname;
3070   const char *setdesc;
3071   const char **regnames;
3072   int numregs, i, j;
3073   static char *helptext;
3074
3075   if (GDB_MULTI_ARCH)
3076     gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
3077
3078   /* Register some ABI variants for embedded systems.  */
3079   arm_gdbarch_register_os_abi (ARM_ABI_EABI_V1, arm_init_abi_eabi_v1);
3080   arm_gdbarch_register_os_abi (ARM_ABI_EABI_V2, arm_init_abi_eabi_v2);
3081   arm_gdbarch_register_os_abi (ARM_ABI_APCS, arm_init_abi_apcs);
3082
3083   tm_print_insn = gdb_print_insn_arm;
3084
3085   /* Get the number of possible sets of register names defined in opcodes. */
3086   num_flavor_options = get_arm_regname_num_options ();
3087
3088   /* Sync the opcode insn printer with our register viewer: */
3089   parse_arm_disassembler_option ("reg-names-std");
3090
3091   /* Begin creating the help text. */
3092   stb = mem_fileopen ();
3093   fprintf_unfiltered (stb, "Set the disassembly flavor.\n\
3094 The valid values are:\n");
3095
3096   /* Initialize the array that will be passed to add_set_enum_cmd(). */
3097   valid_flavors = xmalloc ((num_flavor_options + 1) * sizeof (char *));
3098   for (i = 0; i < num_flavor_options; i++)
3099     {
3100       numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
3101       valid_flavors[i] = setname;
3102       fprintf_unfiltered (stb, "%s - %s\n", setname,
3103                           setdesc);
3104       /* Copy the default names (if found) and synchronize disassembler. */
3105       if (!strcmp (setname, "std"))
3106         {
3107           disassembly_flavor = setname;
3108           current_option = i;
3109           for (j = 0; j < numregs; j++)
3110             arm_register_names[j] = (char *) regnames[j];
3111           set_arm_regname_option (i);
3112         }
3113     }
3114   /* Mark the end of valid options. */
3115   valid_flavors[num_flavor_options] = NULL;
3116
3117   /* Finish the creation of the help text. */
3118   fprintf_unfiltered (stb, "The default is \"std\".");
3119   helptext = ui_file_xstrdup (stb, &length);
3120   ui_file_delete (stb);
3121
3122   /* Add the disassembly-flavor command */
3123   new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
3124                               valid_flavors,
3125                               &disassembly_flavor,
3126                               helptext,
3127                               &setlist);
3128   set_cmd_sfunc (new_cmd, set_disassembly_flavor_sfunc);
3129   add_show_from_set (new_cmd, &showlist);
3130
3131   /* ??? Maybe this should be a boolean.  */
3132   add_show_from_set (add_set_cmd ("apcs32", no_class,
3133                                   var_zinteger, (char *) &arm_apcs_32,
3134                                   "Set usage of ARM 32-bit mode.\n", &setlist),
3135                      &showlist);
3136
3137   /* Add the deprecated "othernames" command */
3138
3139   add_com ("othernames", class_obscure, arm_othernames,
3140            "Switch to the next set of register names.");
3141
3142   /* Fill in the prologue_cache fields.  */
3143   prologue_cache.saved_regs = NULL;
3144   prologue_cache.extra_info = (struct frame_extra_info *)
3145     xcalloc (1, sizeof (struct frame_extra_info));
3146 }
This page took 0.205335 seconds and 4 git commands to generate.