OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [gdb/] [arm-tdep.c] - Blame information for rev 1181

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.