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