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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [cris-tdep.c] - Blame information for rev 823

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

Line No. Rev Author Line
1 227 jeremybenn
/* Target dependent code for CRIS, for GDB, the GNU debugger.
2
 
3
   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
 
6
   Contributed by Axis Communications AB.
7
   Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
8
 
9
   This file is part of GDB.
10
 
11
   This program is free software; you can redistribute it and/or modify
12
   it under the terms of the GNU General Public License as published by
13
   the Free Software Foundation; either version 3 of the License, or
14
   (at your option) any later version.
15
 
16
   This program is distributed in the hope that it will be useful,
17
   but WITHOUT ANY WARRANTY; without even the implied warranty of
18
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
   GNU General Public License for more details.
20
 
21
   You should have received a copy of the GNU General Public License
22
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
23
 
24
#include "defs.h"
25
#include "frame.h"
26
#include "frame-unwind.h"
27
#include "frame-base.h"
28
#include "trad-frame.h"
29
#include "dwarf2-frame.h"
30
#include "symtab.h"
31
#include "inferior.h"
32
#include "gdbtypes.h"
33
#include "gdbcore.h"
34
#include "gdbcmd.h"
35
#include "target.h"
36
#include "value.h"
37
#include "opcode/cris.h"
38
#include "arch-utils.h"
39
#include "regcache.h"
40
#include "gdb_assert.h"
41
 
42
#include "objfiles.h"
43
 
44
#include "solib.h"              /* Support for shared libraries.  */
45
#include "solib-svr4.h"
46
#include "gdb_string.h"
47
#include "dis-asm.h"
48
 
49
enum cris_num_regs
50
{
51
  /* There are no floating point registers.  Used in gdbserver low-linux.c.  */
52
  NUM_FREGS = 0,
53
 
54
  /* There are 16 general registers.  */
55
  NUM_GENREGS = 16,
56
 
57
  /* There are 16 special registers.  */
58
  NUM_SPECREGS = 16,
59
 
60
  /* CRISv32 has a pseudo PC register, not noted here.  */
61
 
62
  /* CRISv32 has 16 support registers.  */
63
  NUM_SUPPREGS = 16
64
};
65
 
66
/* Register numbers of various important registers.
67
   CRIS_FP_REGNUM   Contains address of executing stack frame.
68
   STR_REGNUM  Contains the address of structure return values.
69
   RET_REGNUM  Contains the return value when shorter than or equal to 32 bits
70
   ARG1_REGNUM Contains the first parameter to a function.
71
   ARG2_REGNUM Contains the second parameter to a function.
72
   ARG3_REGNUM Contains the third parameter to a function.
73
   ARG4_REGNUM Contains the fourth parameter to a function. Rest on stack.
74
   gdbarch_sp_regnum Contains address of top of stack.
75
   gdbarch_pc_regnum Contains address of next instruction.
76
   SRP_REGNUM  Subroutine return pointer register.
77
   BRP_REGNUM  Breakpoint return pointer register.  */
78
 
79
enum cris_regnums
80
{
81
  /* Enums with respect to the general registers, valid for all
82
     CRIS versions.  The frame pointer is always in R8.  */
83
  CRIS_FP_REGNUM = 8,
84
  /* ABI related registers.  */
85
  STR_REGNUM  = 9,
86
  RET_REGNUM  = 10,
87
  ARG1_REGNUM = 10,
88
  ARG2_REGNUM = 11,
89
  ARG3_REGNUM = 12,
90
  ARG4_REGNUM = 13,
91
 
92
  /* Registers which happen to be common.  */
93
  VR_REGNUM   = 17,
94
  MOF_REGNUM  = 23,
95
  SRP_REGNUM  = 27,
96
 
97
  /* CRISv10 et. al. specific registers.  */
98
  P0_REGNUM   = 16,
99
  P4_REGNUM   = 20,
100
  CCR_REGNUM  = 21,
101
  P8_REGNUM   = 24,
102
  IBR_REGNUM  = 25,
103
  IRP_REGNUM  = 26,
104
  BAR_REGNUM  = 28,
105
  DCCR_REGNUM = 29,
106
  BRP_REGNUM  = 30,
107
  USP_REGNUM  = 31,
108
 
109
  /* CRISv32 specific registers.  */
110
  ACR_REGNUM  = 15,
111
  BZ_REGNUM   = 16,
112
  PID_REGNUM  = 18,
113
  SRS_REGNUM  = 19,
114
  WZ_REGNUM   = 20,
115
  EXS_REGNUM  = 21,
116
  EDA_REGNUM  = 22,
117
  DZ_REGNUM   = 24,
118
  EBP_REGNUM  = 25,
119
  ERP_REGNUM  = 26,
120
  NRP_REGNUM  = 28,
121
  CCS_REGNUM  = 29,
122
  CRISV32USP_REGNUM  = 30, /* Shares name but not number with CRISv10.  */
123
  SPC_REGNUM  = 31,
124
  CRISV32PC_REGNUM   = 32, /* Shares name but not number with CRISv10.  */
125
 
126
  S0_REGNUM = 33,
127
  S1_REGNUM = 34,
128
  S2_REGNUM = 35,
129
  S3_REGNUM = 36,
130
  S4_REGNUM = 37,
131
  S5_REGNUM = 38,
132
  S6_REGNUM = 39,
133
  S7_REGNUM = 40,
134
  S8_REGNUM = 41,
135
  S9_REGNUM = 42,
136
  S10_REGNUM = 43,
137
  S11_REGNUM = 44,
138
  S12_REGNUM = 45,
139
  S13_REGNUM = 46,
140
  S14_REGNUM = 47,
141
  S15_REGNUM = 48,
142
};
143
 
144
extern const struct cris_spec_reg cris_spec_regs[];
145
 
146
/* CRIS version, set via the user command 'set cris-version'.  Affects
147
   register names and sizes.  */
148
static int usr_cmd_cris_version;
149
 
150
/* Indicates whether to trust the above variable.  */
151
static int usr_cmd_cris_version_valid = 0;
152
 
153
static const char cris_mode_normal[] = "normal";
154
static const char cris_mode_guru[] = "guru";
155
static const char *cris_modes[] = {
156
  cris_mode_normal,
157
  cris_mode_guru,
158
 
159
};
160
 
161
/* CRIS mode, set via the user command 'set cris-mode'.  Affects
162
   type of break instruction among other things.  */
163
static const char *usr_cmd_cris_mode = cris_mode_normal;
164
 
165
/* Whether to make use of Dwarf-2 CFI (default on).  */
166
static int usr_cmd_cris_dwarf2_cfi = 1;
167
 
168
/* CRIS architecture specific information.  */
169
struct gdbarch_tdep
170
{
171
  int cris_version;
172
  const char *cris_mode;
173
  int cris_dwarf2_cfi;
174
};
175
 
176
/* Sigtramp identification code copied from i386-linux-tdep.c.  */
177
 
178
#define SIGTRAMP_INSN0    0x9c5f  /* movu.w 0xXX, $r9 */
179
#define SIGTRAMP_OFFSET0  0
180
#define SIGTRAMP_INSN1    0xe93d  /* break 13 */
181
#define SIGTRAMP_OFFSET1  4
182
 
183
static const unsigned short sigtramp_code[] =
184
{
185
  SIGTRAMP_INSN0, 0x0077,  /* movu.w $0x77, $r9 */
186
  SIGTRAMP_INSN1           /* break 13 */
187
};
188
 
189
#define SIGTRAMP_LEN (sizeof sigtramp_code)
190
 
191
/* Note: same length as normal sigtramp code.  */
192
 
193
static const unsigned short rt_sigtramp_code[] =
194
{
195
  SIGTRAMP_INSN0, 0x00ad,  /* movu.w $0xad, $r9 */
196
  SIGTRAMP_INSN1           /* break 13 */
197
};
198
 
199
/* If PC is in a sigtramp routine, return the address of the start of
200
   the routine.  Otherwise, return 0.  */
201
 
202
static CORE_ADDR
203
cris_sigtramp_start (struct frame_info *this_frame)
204
{
205
  CORE_ADDR pc = get_frame_pc (this_frame);
206
  gdb_byte buf[SIGTRAMP_LEN];
207
 
208
  if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
209
    return 0;
210
 
211
  if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN0)
212
    {
213
      if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN1)
214
        return 0;
215
 
216
      pc -= SIGTRAMP_OFFSET1;
217
      if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
218
        return 0;
219
    }
220
 
221
  if (memcmp (buf, sigtramp_code, SIGTRAMP_LEN) != 0)
222
    return 0;
223
 
224
  return pc;
225
}
226
 
227
/* If PC is in a RT sigtramp routine, return the address of the start of
228
   the routine.  Otherwise, return 0.  */
229
 
230
static CORE_ADDR
231
cris_rt_sigtramp_start (struct frame_info *this_frame)
232
{
233
  CORE_ADDR pc = get_frame_pc (this_frame);
234
  gdb_byte buf[SIGTRAMP_LEN];
235
 
236
  if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
237
    return 0;
238
 
239
  if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN0)
240
    {
241
      if (((buf[1] << 8) + buf[0]) != SIGTRAMP_INSN1)
242
        return 0;
243
 
244
      pc -= SIGTRAMP_OFFSET1;
245
      if (!safe_frame_unwind_memory (this_frame, pc, buf, SIGTRAMP_LEN))
246
        return 0;
247
    }
248
 
249
  if (memcmp (buf, rt_sigtramp_code, SIGTRAMP_LEN) != 0)
250
    return 0;
251
 
252
  return pc;
253
}
254
 
255
/* Assuming THIS_FRAME is a frame for a GNU/Linux sigtramp routine,
256
   return the address of the associated sigcontext structure.  */
257
 
258
static CORE_ADDR
259
cris_sigcontext_addr (struct frame_info *this_frame)
260
{
261
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
262
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
263
  CORE_ADDR pc;
264
  CORE_ADDR sp;
265
  char buf[4];
266
 
267
  get_frame_register (this_frame, gdbarch_sp_regnum (gdbarch), buf);
268
  sp = extract_unsigned_integer (buf, 4, byte_order);
269
 
270
  /* Look for normal sigtramp frame first.  */
271
  pc = cris_sigtramp_start (this_frame);
272
  if (pc)
273
    {
274
      /* struct signal_frame (arch/cris/kernel/signal.c) contains
275
         struct sigcontext as its first member, meaning the SP points to
276
         it already.  */
277
      return sp;
278
    }
279
 
280
  pc = cris_rt_sigtramp_start (this_frame);
281
  if (pc)
282
    {
283
      /* struct rt_signal_frame (arch/cris/kernel/signal.c) contains
284
         a struct ucontext, which in turn contains a struct sigcontext.
285
         Magic digging:
286
         4 + 4 + 128 to struct ucontext, then
287
         4 + 4 + 12 to struct sigcontext.  */
288
      return (sp + 156);
289
    }
290
 
291
  error (_("Couldn't recognize signal trampoline."));
292
  return 0;
293
}
294
 
295
struct cris_unwind_cache
296
{
297
  /* The previous frame's inner most stack address.  Used as this
298
     frame ID's stack_addr.  */
299
  CORE_ADDR prev_sp;
300
  /* The frame's base, optionally used by the high-level debug info.  */
301
  CORE_ADDR base;
302
  int size;
303
  /* How far the SP and r8 (FP) have been offset from the start of
304
     the stack frame (as defined by the previous frame's stack
305
     pointer).  */
306
  LONGEST sp_offset;
307
  LONGEST r8_offset;
308
  int uses_frame;
309
 
310
  /* From old frame_extra_info struct.  */
311
  CORE_ADDR return_pc;
312
  int leaf_function;
313
 
314
  /* Table indicating the location of each and every register.  */
315
  struct trad_frame_saved_reg *saved_regs;
316
};
317
 
318
static struct cris_unwind_cache *
319
cris_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
320
                                  void **this_cache)
321
{
322
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
323
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
324
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
325
  struct cris_unwind_cache *info;
326
  CORE_ADDR pc;
327
  CORE_ADDR sp;
328
  CORE_ADDR addr;
329
  char buf[4];
330
  int i;
331
 
332
  if ((*this_cache))
333
    return (*this_cache);
334
 
335
  info = FRAME_OBSTACK_ZALLOC (struct cris_unwind_cache);
336
  (*this_cache) = info;
337
  info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
338
 
339
  /* Zero all fields.  */
340
  info->prev_sp = 0;
341
  info->base = 0;
342
  info->size = 0;
343
  info->sp_offset = 0;
344
  info->r8_offset = 0;
345
  info->uses_frame = 0;
346
  info->return_pc = 0;
347
  info->leaf_function = 0;
348
 
349
  get_frame_register (this_frame, gdbarch_sp_regnum (gdbarch), buf);
350
  info->base = extract_unsigned_integer (buf, 4, byte_order);
351
 
352
  addr = cris_sigcontext_addr (this_frame);
353
 
354
  /* Layout of the sigcontext struct:
355
     struct sigcontext {
356
        struct pt_regs regs;
357
        unsigned long oldmask;
358
        unsigned long usp;
359
     }; */
360
 
361
  if (tdep->cris_version == 10)
362
    {
363
      /* R0 to R13 are stored in reverse order at offset (2 * 4) in
364
         struct pt_regs.  */
365
      for (i = 0; i <= 13; i++)
366
        info->saved_regs[i].addr = addr + ((15 - i) * 4);
367
 
368
      info->saved_regs[MOF_REGNUM].addr = addr + (16 * 4);
369
      info->saved_regs[DCCR_REGNUM].addr = addr + (17 * 4);
370
      info->saved_regs[SRP_REGNUM].addr = addr + (18 * 4);
371
      /* Note: IRP is off by 2 at this point.  There's no point in correcting
372
         it though since that will mean that the backtrace will show a PC
373
         different from what is shown when stopped.  */
374
      info->saved_regs[IRP_REGNUM].addr = addr + (19 * 4);
375
      info->saved_regs[gdbarch_pc_regnum (gdbarch)]
376
        = info->saved_regs[IRP_REGNUM];
377
      info->saved_regs[gdbarch_sp_regnum (gdbarch)].addr = addr + (24 * 4);
378
    }
379
  else
380
    {
381
      /* CRISv32.  */
382
      /* R0 to R13 are stored in order at offset (1 * 4) in
383
         struct pt_regs.  */
384
      for (i = 0; i <= 13; i++)
385
        info->saved_regs[i].addr = addr + ((i + 1) * 4);
386
 
387
      info->saved_regs[ACR_REGNUM].addr = addr + (15 * 4);
388
      info->saved_regs[SRS_REGNUM].addr = addr + (16 * 4);
389
      info->saved_regs[MOF_REGNUM].addr = addr + (17 * 4);
390
      info->saved_regs[SPC_REGNUM].addr = addr + (18 * 4);
391
      info->saved_regs[CCS_REGNUM].addr = addr + (19 * 4);
392
      info->saved_regs[SRP_REGNUM].addr = addr + (20 * 4);
393
      info->saved_regs[ERP_REGNUM].addr = addr + (21 * 4);
394
      info->saved_regs[EXS_REGNUM].addr = addr + (22 * 4);
395
      info->saved_regs[EDA_REGNUM].addr = addr + (23 * 4);
396
 
397
      /* FIXME: If ERP is in a delay slot at this point then the PC will
398
         be wrong at this point.  This problem manifests itself in the
399
         sigaltstack.exp test case, which occasionally generates FAILs when
400
         the signal is received while in a delay slot.
401
 
402
         This could be solved by a couple of read_memory_unsigned_integer and a
403
         trad_frame_set_value.  */
404
      info->saved_regs[gdbarch_pc_regnum (gdbarch)]
405
        = info->saved_regs[ERP_REGNUM];
406
 
407
      info->saved_regs[gdbarch_sp_regnum (gdbarch)].addr
408
        = addr + (25 * 4);
409
    }
410
 
411
  return info;
412
}
413
 
414
static void
415
cris_sigtramp_frame_this_id (struct frame_info *this_frame, void **this_cache,
416
                             struct frame_id *this_id)
417
{
418
  struct cris_unwind_cache *cache =
419
    cris_sigtramp_frame_unwind_cache (this_frame, this_cache);
420
  (*this_id) = frame_id_build (cache->base, get_frame_pc (this_frame));
421
}
422
 
423
/* Forward declaration.  */
424
 
425
static struct value *cris_frame_prev_register (struct frame_info *this_frame,
426
                                               void **this_cache, int regnum);
427
static struct value *
428
cris_sigtramp_frame_prev_register (struct frame_info *this_frame,
429
                                   void **this_cache, int regnum)
430
{
431
  /* Make sure we've initialized the cache.  */
432
  cris_sigtramp_frame_unwind_cache (this_frame, this_cache);
433
  return cris_frame_prev_register (this_frame, this_cache, regnum);
434
}
435
 
436
static int
437
cris_sigtramp_frame_sniffer (const struct frame_unwind *self,
438
                             struct frame_info *this_frame,
439
                             void **this_cache)
440
{
441
  if (cris_sigtramp_start (this_frame)
442
      || cris_rt_sigtramp_start (this_frame))
443
    return 1;
444
 
445
  return 0;
446
}
447
 
448
static const struct frame_unwind cris_sigtramp_frame_unwind =
449
{
450
  SIGTRAMP_FRAME,
451
  cris_sigtramp_frame_this_id,
452
  cris_sigtramp_frame_prev_register,
453
  NULL,
454
  cris_sigtramp_frame_sniffer
455
};
456
 
457
static int
458
crisv32_single_step_through_delay (struct gdbarch *gdbarch,
459
                                   struct frame_info *this_frame)
460
{
461
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
462
  ULONGEST erp;
463
  int ret = 0;
464
 
465
  if (tdep->cris_mode == cris_mode_guru)
466
    erp = get_frame_register_unsigned (this_frame, NRP_REGNUM);
467
  else
468
    erp = get_frame_register_unsigned (this_frame, ERP_REGNUM);
469
 
470
  if (erp & 0x1)
471
    {
472
      /* In delay slot - check if there's a breakpoint at the preceding
473
         instruction.  */
474
      if (breakpoint_here_p (get_frame_address_space (this_frame), erp & ~0x1))
475
        ret = 1;
476
    }
477
  return ret;
478
}
479
 
480
/* Hardware watchpoint support.  */
481
 
482
/* We support 6 hardware data watchpoints, but cannot trigger on execute
483
   (any combination of read/write is fine).  */
484
 
485
int
486
cris_can_use_hardware_watchpoint (int type, int count, int other)
487
{
488
  struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
489
 
490
  /* No bookkeeping is done here; it is handled by the remote debug agent.  */
491
 
492
  if (tdep->cris_version != 32)
493
    return 0;
494
  else
495
    /* CRISv32: Six data watchpoints, one for instructions.  */
496
    return (((type == bp_read_watchpoint || type == bp_access_watchpoint
497
             || type == bp_hardware_watchpoint) && count <= 6)
498
            || (type == bp_hardware_breakpoint && count <= 1));
499
}
500
 
501
/* The CRISv32 hardware data watchpoints work by specifying ranges,
502
   which have no alignment or length restrictions.  */
503
 
504
int
505
cris_region_ok_for_watchpoint (CORE_ADDR addr, int len)
506
{
507
  return 1;
508
}
509
 
510
/* If the inferior has some watchpoint that triggered, return the
511
   address associated with that watchpoint.  Otherwise, return
512
   zero.  */
513
 
514
CORE_ADDR
515
cris_stopped_data_address (void)
516
{
517
  CORE_ADDR eda;
518
  eda = get_frame_register_unsigned (get_current_frame (), EDA_REGNUM);
519
  return eda;
520
}
521
 
522
/* The instruction environment needed to find single-step breakpoints.  */
523
 
524
typedef
525
struct instruction_environment
526
{
527
  unsigned long reg[NUM_GENREGS];
528
  unsigned long preg[NUM_SPECREGS];
529
  unsigned long branch_break_address;
530
  unsigned long delay_slot_pc;
531
  unsigned long prefix_value;
532
  int   branch_found;
533
  int   prefix_found;
534
  int   invalid;
535
  int   slot_needed;
536
  int   delay_slot_pc_active;
537
  int   xflag_found;
538
  int   disable_interrupt;
539
  int   byte_order;
540
} inst_env_type;
541
 
542
/* Machine-dependencies in CRIS for opcodes.  */
543
 
544
/* Instruction sizes.  */
545
enum cris_instruction_sizes
546
{
547
  INST_BYTE_SIZE  = 0,
548
  INST_WORD_SIZE  = 1,
549
  INST_DWORD_SIZE = 2
550
};
551
 
552
/* Addressing modes.  */
553
enum cris_addressing_modes
554
{
555
  REGISTER_MODE = 1,
556
  INDIRECT_MODE = 2,
557
  AUTOINC_MODE  = 3
558
};
559
 
560
/* Prefix addressing modes.  */
561
enum cris_prefix_addressing_modes
562
{
563
  PREFIX_INDEX_MODE  = 2,
564
  PREFIX_ASSIGN_MODE = 3,
565
 
566
  /* Handle immediate byte offset addressing mode prefix format.  */
567
  PREFIX_OFFSET_MODE = 2
568
};
569
 
570
/* Masks for opcodes.  */
571
enum cris_opcode_masks
572
{
573
  BRANCH_SIGNED_SHORT_OFFSET_MASK = 0x1,
574
  SIGNED_EXTEND_BIT_MASK          = 0x2,
575
  SIGNED_BYTE_MASK                = 0x80,
576
  SIGNED_BYTE_EXTEND_MASK         = 0xFFFFFF00,
577
  SIGNED_WORD_MASK                = 0x8000,
578
  SIGNED_WORD_EXTEND_MASK         = 0xFFFF0000,
579
  SIGNED_DWORD_MASK               = 0x80000000,
580
  SIGNED_QUICK_VALUE_MASK         = 0x20,
581
  SIGNED_QUICK_VALUE_EXTEND_MASK  = 0xFFFFFFC0
582
};
583
 
584
/* Functions for opcodes.  The general form of the ETRAX 16-bit instruction:
585
   Bit 15 - 12   Operand2
586
       11 - 10   Mode
587
        9 -  6   Opcode
588
        5 -  4   Size
589
        3 -  0   Operand1  */
590
 
591
static int
592
cris_get_operand2 (unsigned short insn)
593
{
594
  return ((insn & 0xF000) >> 12);
595
}
596
 
597
static int
598
cris_get_mode (unsigned short insn)
599
{
600
  return ((insn & 0x0C00) >> 10);
601
}
602
 
603
static int
604
cris_get_opcode (unsigned short insn)
605
{
606
  return ((insn & 0x03C0) >> 6);
607
}
608
 
609
static int
610
cris_get_size (unsigned short insn)
611
{
612
  return ((insn & 0x0030) >> 4);
613
}
614
 
615
static int
616
cris_get_operand1 (unsigned short insn)
617
{
618
  return (insn & 0x000F);
619
}
620
 
621
/* Additional functions in order to handle opcodes.  */
622
 
623
static int
624
cris_get_quick_value (unsigned short insn)
625
{
626
  return (insn & 0x003F);
627
}
628
 
629
static int
630
cris_get_bdap_quick_offset (unsigned short insn)
631
{
632
  return (insn & 0x00FF);
633
}
634
 
635
static int
636
cris_get_branch_short_offset (unsigned short insn)
637
{
638
  return (insn & 0x00FF);
639
}
640
 
641
static int
642
cris_get_asr_shift_steps (unsigned long value)
643
{
644
  return (value & 0x3F);
645
}
646
 
647
static int
648
cris_get_clear_size (unsigned short insn)
649
{
650
  return ((insn) & 0xC000);
651
}
652
 
653
static int
654
cris_is_signed_extend_bit_on (unsigned short insn)
655
{
656
  return (((insn) & 0x20) == 0x20);
657
}
658
 
659
static int
660
cris_is_xflag_bit_on (unsigned short insn)
661
{
662
  return (((insn) & 0x1000) == 0x1000);
663
}
664
 
665
static void
666
cris_set_size_to_dword (unsigned short *insn)
667
{
668
  *insn &= 0xFFCF;
669
  *insn |= 0x20;
670
}
671
 
672
static signed char
673
cris_get_signed_offset (unsigned short insn)
674
{
675
  return ((signed char) (insn & 0x00FF));
676
}
677
 
678
/* Calls an op function given the op-type, working on the insn and the
679
   inst_env.  */
680
static void cris_gdb_func (struct gdbarch *, enum cris_op_type, unsigned short,
681
                           inst_env_type *);
682
 
683
static struct gdbarch *cris_gdbarch_init (struct gdbarch_info,
684
                                          struct gdbarch_list *);
685
 
686
static void cris_dump_tdep (struct gdbarch *, struct ui_file *);
687
 
688
static void set_cris_version (char *ignore_args, int from_tty,
689
                              struct cmd_list_element *c);
690
 
691
static void set_cris_mode (char *ignore_args, int from_tty,
692
                           struct cmd_list_element *c);
693
 
694
static void set_cris_dwarf2_cfi (char *ignore_args, int from_tty,
695
                                 struct cmd_list_element *c);
696
 
697
static CORE_ADDR cris_scan_prologue (CORE_ADDR pc,
698
                                     struct frame_info *this_frame,
699
                                     struct cris_unwind_cache *info);
700
 
701
static CORE_ADDR crisv32_scan_prologue (CORE_ADDR pc,
702
                                        struct frame_info *this_frame,
703
                                        struct cris_unwind_cache *info);
704
 
705
static CORE_ADDR cris_unwind_pc (struct gdbarch *gdbarch,
706
                                 struct frame_info *next_frame);
707
 
708
static CORE_ADDR cris_unwind_sp (struct gdbarch *gdbarch,
709
                                 struct frame_info *next_frame);
710
 
711
/* When arguments must be pushed onto the stack, they go on in reverse
712
   order.  The below implements a FILO (stack) to do this.
713
   Copied from d10v-tdep.c.  */
714
 
715
struct stack_item
716
{
717
  int len;
718
  struct stack_item *prev;
719
  void *data;
720
};
721
 
722
static struct stack_item *
723
push_stack_item (struct stack_item *prev, void *contents, int len)
724
{
725
  struct stack_item *si;
726
  si = xmalloc (sizeof (struct stack_item));
727
  si->data = xmalloc (len);
728
  si->len = len;
729
  si->prev = prev;
730
  memcpy (si->data, contents, len);
731
  return si;
732
}
733
 
734
static struct stack_item *
735
pop_stack_item (struct stack_item *si)
736
{
737
  struct stack_item *dead = si;
738
  si = si->prev;
739
  xfree (dead->data);
740
  xfree (dead);
741
  return si;
742
}
743
 
744
/* Put here the code to store, into fi->saved_regs, the addresses of
745
   the saved registers of frame described by FRAME_INFO.  This
746
   includes special registers such as pc and fp saved in special ways
747
   in the stack frame.  sp is even more special: the address we return
748
   for it IS the sp for the next frame.  */
749
 
750
static struct cris_unwind_cache *
751
cris_frame_unwind_cache (struct frame_info *this_frame,
752
                         void **this_prologue_cache)
753
{
754
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
755
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
756
  CORE_ADDR pc;
757
  struct cris_unwind_cache *info;
758
  int i;
759
 
760
  if ((*this_prologue_cache))
761
    return (*this_prologue_cache);
762
 
763
  info = FRAME_OBSTACK_ZALLOC (struct cris_unwind_cache);
764
  (*this_prologue_cache) = info;
765
  info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
766
 
767
  /* Zero all fields.  */
768
  info->prev_sp = 0;
769
  info->base = 0;
770
  info->size = 0;
771
  info->sp_offset = 0;
772
  info->r8_offset = 0;
773
  info->uses_frame = 0;
774
  info->return_pc = 0;
775
  info->leaf_function = 0;
776
 
777
  /* Prologue analysis does the rest...  */
778
  if (tdep->cris_version == 32)
779
    crisv32_scan_prologue (get_frame_func (this_frame), this_frame, info);
780
  else
781
    cris_scan_prologue (get_frame_func (this_frame), this_frame, info);
782
 
783
  return info;
784
}
785
 
786
/* Given a GDB frame, determine the address of the calling function's
787
   frame.  This will be used to create a new GDB frame struct.  */
788
 
789
static void
790
cris_frame_this_id (struct frame_info *this_frame,
791
                    void **this_prologue_cache,
792
                    struct frame_id *this_id)
793
{
794
  struct cris_unwind_cache *info
795
    = cris_frame_unwind_cache (this_frame, this_prologue_cache);
796
  CORE_ADDR base;
797
  CORE_ADDR func;
798
  struct frame_id id;
799
 
800
  /* The FUNC is easy.  */
801
  func = get_frame_func (this_frame);
802
 
803
  /* Hopefully the prologue analysis either correctly determined the
804
     frame's base (which is the SP from the previous frame), or set
805
     that base to "NULL".  */
806
  base = info->prev_sp;
807
  if (base == 0)
808
    return;
809
 
810
  id = frame_id_build (base, func);
811
 
812
  (*this_id) = id;
813
}
814
 
815
static struct value *
816
cris_frame_prev_register (struct frame_info *this_frame,
817
                          void **this_prologue_cache, int regnum)
818
{
819
  struct cris_unwind_cache *info
820
    = cris_frame_unwind_cache (this_frame, this_prologue_cache);
821
  return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
822
}
823
 
824
/* Assuming THIS_FRAME is a dummy, return the frame ID of that dummy
825
   frame.  The frame ID's base needs to match the TOS value saved by
826
   save_dummy_frame_tos(), and the PC match the dummy frame's breakpoint.  */
827
 
828
static struct frame_id
829
cris_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
830
{
831
  CORE_ADDR sp;
832
  sp = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum (gdbarch));
833
  return frame_id_build (sp, get_frame_pc (this_frame));
834
}
835
 
836
static CORE_ADDR
837
cris_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
838
{
839
  /* Align to the size of an instruction (so that they can safely be
840
     pushed onto the stack).  */
841
  return sp & ~3;
842
}
843
 
844
static CORE_ADDR
845
cris_push_dummy_code (struct gdbarch *gdbarch,
846
                      CORE_ADDR sp, CORE_ADDR funaddr,
847
                      struct value **args, int nargs,
848
                      struct type *value_type,
849
                      CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
850
                      struct regcache *regcache)
851
{
852
  /* Allocate space sufficient for a breakpoint.  */
853
  sp = (sp - 4) & ~3;
854
  /* Store the address of that breakpoint */
855
  *bp_addr = sp;
856
  /* CRIS always starts the call at the callee's entry point.  */
857
  *real_pc = funaddr;
858
  return sp;
859
}
860
 
861
static CORE_ADDR
862
cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
863
                      struct regcache *regcache, CORE_ADDR bp_addr,
864
                      int nargs, struct value **args, CORE_ADDR sp,
865
                      int struct_return, CORE_ADDR struct_addr)
866
{
867
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
868
  int stack_alloc;
869
  int stack_offset;
870
  int argreg;
871
  int argnum;
872
 
873
  CORE_ADDR regval;
874
 
875
  /* The function's arguments and memory allocated by gdb for the arguments to
876
     point at reside in separate areas on the stack.
877
     Both frame pointers grow toward higher addresses.  */
878
  CORE_ADDR fp_arg;
879
  CORE_ADDR fp_mem;
880
 
881
  struct stack_item *si = NULL;
882
 
883
  /* Push the return address.  */
884
  regcache_cooked_write_unsigned (regcache, SRP_REGNUM, bp_addr);
885
 
886
  /* Are we returning a value using a structure return or a normal value
887
     return?  struct_addr is the address of the reserved space for the return
888
     structure to be written on the stack.  */
889
  if (struct_return)
890
    {
891
      regcache_cooked_write_unsigned (regcache, STR_REGNUM, struct_addr);
892
    }
893
 
894
  /* Now load as many as possible of the first arguments into registers,
895
     and push the rest onto the stack.  */
896
  argreg = ARG1_REGNUM;
897
  stack_offset = 0;
898
 
899
  for (argnum = 0; argnum < nargs; argnum++)
900
    {
901
      int len;
902
      char *val;
903
      int reg_demand;
904
      int i;
905
 
906
      len = TYPE_LENGTH (value_type (args[argnum]));
907
      val = (char *) value_contents (args[argnum]);
908
 
909
      /* How may registers worth of storage do we need for this argument?  */
910
      reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0);
911
 
912
      if (len <= (2 * 4) && (argreg + reg_demand - 1 <= ARG4_REGNUM))
913
        {
914
          /* Data passed by value.  Fits in available register(s).  */
915
          for (i = 0; i < reg_demand; i++)
916
            {
917
              regcache_cooked_write (regcache, argreg, val);
918
              argreg++;
919
              val += 4;
920
            }
921
        }
922
      else if (len <= (2 * 4) && argreg <= ARG4_REGNUM)
923
        {
924
          /* Data passed by value. Does not fit in available register(s).
925
             Use the register(s) first, then the stack.  */
926
          for (i = 0; i < reg_demand; i++)
927
            {
928
              if (argreg <= ARG4_REGNUM)
929
                {
930
                  regcache_cooked_write (regcache, argreg, val);
931
                  argreg++;
932
                  val += 4;
933
                }
934
              else
935
                {
936
                  /* Push item for later so that pushed arguments
937
                     come in the right order.  */
938
                  si = push_stack_item (si, val, 4);
939
                  val += 4;
940
                }
941
            }
942
        }
943
      else if (len > (2 * 4))
944
        {
945
          /* Data passed by reference.  Push copy of data onto stack
946
             and pass pointer to this copy as argument.  */
947
          sp = (sp - len) & ~3;
948
          write_memory (sp, val, len);
949
 
950
          if (argreg <= ARG4_REGNUM)
951
            {
952
              regcache_cooked_write_unsigned (regcache, argreg, sp);
953
              argreg++;
954
            }
955
          else
956
            {
957
              gdb_byte buf[4];
958
              store_unsigned_integer (buf, 4, byte_order, sp);
959
              si = push_stack_item (si, buf, 4);
960
            }
961
        }
962
      else
963
        {
964
          /* Data passed by value.  No available registers.  Put it on
965
             the stack.  */
966
           si = push_stack_item (si, val, len);
967
        }
968
    }
969
 
970
  while (si)
971
    {
972
      /* fp_arg must be word-aligned (i.e., don't += len) to match
973
         the function prologue.  */
974
      sp = (sp - si->len) & ~3;
975
      write_memory (sp, si->data, si->len);
976
      si = pop_stack_item (si);
977
    }
978
 
979
  /* Finally, update the SP register.  */
980
  regcache_cooked_write_unsigned (regcache, gdbarch_sp_regnum (gdbarch), sp);
981
 
982
  return sp;
983
}
984
 
985
static const struct frame_unwind cris_frame_unwind =
986
{
987
  NORMAL_FRAME,
988
  cris_frame_this_id,
989
  cris_frame_prev_register,
990
  NULL,
991
  default_frame_sniffer
992
};
993
 
994
static CORE_ADDR
995
cris_frame_base_address (struct frame_info *this_frame, void **this_cache)
996
{
997
  struct cris_unwind_cache *info
998
    = cris_frame_unwind_cache (this_frame, this_cache);
999
  return info->base;
1000
}
1001
 
1002
static const struct frame_base cris_frame_base =
1003
{
1004
  &cris_frame_unwind,
1005
  cris_frame_base_address,
1006
  cris_frame_base_address,
1007
  cris_frame_base_address
1008
};
1009
 
1010
/* Frames information. The definition of the struct frame_info is
1011
 
1012
   CORE_ADDR frame
1013
   CORE_ADDR pc
1014
   enum frame_type type;
1015
   CORE_ADDR return_pc
1016
   int leaf_function
1017
 
1018
   If the compilation option -fno-omit-frame-pointer is present the
1019
   variable frame will be set to the content of R8 which is the frame
1020
   pointer register.
1021
 
1022
   The variable pc contains the address where execution is performed
1023
   in the present frame.  The innermost frame contains the current content
1024
   of the register PC.  All other frames contain the content of the
1025
   register PC in the next frame.
1026
 
1027
   The variable `type' indicates the frame's type: normal, SIGTRAMP
1028
   (associated with a signal handler), dummy (associated with a dummy
1029
   frame).
1030
 
1031
   The variable return_pc contains the address where execution should be
1032
   resumed when the present frame has finished, the return address.
1033
 
1034
   The variable leaf_function is 1 if the return address is in the register
1035
   SRP, and 0 if it is on the stack.
1036
 
1037
   Prologue instructions C-code.
1038
   The prologue may consist of (-fno-omit-frame-pointer)
1039
   1)                2)
1040
   push   srp
1041
   push   r8         push   r8
1042
   move.d sp,r8      move.d sp,r8
1043
   subq   X,sp       subq   X,sp
1044
   movem  rY,[sp]    movem  rY,[sp]
1045
   move.S rZ,[r8-U]  move.S rZ,[r8-U]
1046
 
1047
   where 1 is a non-terminal function, and 2 is a leaf-function.
1048
 
1049
   Note that this assumption is extremely brittle, and will break at the
1050
   slightest change in GCC's prologue.
1051
 
1052
   If local variables are declared or register contents are saved on stack
1053
   the subq-instruction will be present with X as the number of bytes
1054
   needed for storage.  The reshuffle with respect to r8 may be performed
1055
   with any size S (b, w, d) and any of the general registers Z={0..13}.
1056
   The offset U should be representable by a signed 8-bit value in all cases.
1057
   Thus, the prefix word is assumed to be immediate byte offset mode followed
1058
   by another word containing the instruction.
1059
 
1060
   Degenerate cases:
1061
   3)
1062
   push   r8
1063
   move.d sp,r8
1064
   move.d r8,sp
1065
   pop    r8
1066
 
1067
   Prologue instructions C++-code.
1068
   Case 1) and 2) in the C-code may be followed by
1069
 
1070
   move.d r10,rS    ; this
1071
   move.d r11,rT    ; P1
1072
   move.d r12,rU    ; P2
1073
   move.d r13,rV    ; P3
1074
   move.S [r8+U],rZ ; P4
1075
 
1076
   if any of the call parameters are stored. The host expects these
1077
   instructions to be executed in order to get the call parameters right.  */
1078
 
1079
/* Examine the prologue of a function.  The variable ip is the address of
1080
   the first instruction of the prologue.  The variable limit is the address
1081
   of the first instruction after the prologue.  The variable fi contains the
1082
   information in struct frame_info.  The variable frameless_p controls whether
1083
   the entire prologue is examined (0) or just enough instructions to
1084
   determine that it is a prologue (1).  */
1085
 
1086
static CORE_ADDR
1087
cris_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
1088
                    struct cris_unwind_cache *info)
1089
{
1090
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
1091
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1092
 
1093
  /* Present instruction.  */
1094
  unsigned short insn;
1095
 
1096
  /* Next instruction, lookahead.  */
1097
  unsigned short insn_next;
1098
  int regno;
1099
 
1100
  /* Is there a push fp?  */
1101
  int have_fp;
1102
 
1103
  /* Number of byte on stack used for local variables and movem.  */
1104
  int val;
1105
 
1106
  /* Highest register number in a movem.  */
1107
  int regsave;
1108
 
1109
  /* move.d r<source_register>,rS */
1110
  short source_register;
1111
 
1112
  /* Scan limit.  */
1113
  int limit;
1114
 
1115
  /* This frame is with respect to a leaf until a push srp is found.  */
1116
  if (info)
1117
    {
1118
      info->leaf_function = 1;
1119
    }
1120
 
1121
  /* Assume nothing on stack.  */
1122
  val = 0;
1123
  regsave = -1;
1124
 
1125
  /* If we were called without a this_frame, that means we were called
1126
     from cris_skip_prologue which already tried to find the end of the
1127
     prologue through the symbol information.  64 instructions past current
1128
     pc is arbitrarily chosen, but at least it means we'll stop eventually.  */
1129
  limit = this_frame ? get_frame_pc (this_frame) : pc + 64;
1130
 
1131
  /* Find the prologue instructions.  */
1132
  while (pc > 0 && pc < limit)
1133
    {
1134
      insn = read_memory_unsigned_integer (pc, 2, byte_order);
1135
      pc += 2;
1136
      if (insn == 0xE1FC)
1137
        {
1138
          /* push <reg> 32 bit instruction */
1139
          insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
1140
          pc += 2;
1141
          regno = cris_get_operand2 (insn_next);
1142
          if (info)
1143
            {
1144
              info->sp_offset += 4;
1145
            }
1146
          /* This check, meant to recognize srp, used to be regno ==
1147
             (SRP_REGNUM - NUM_GENREGS), but that covers r11 also.  */
1148
          if (insn_next == 0xBE7E)
1149
            {
1150
              if (info)
1151
                {
1152
                  info->leaf_function = 0;
1153
                }
1154
            }
1155
          else if (insn_next == 0x8FEE)
1156
            {
1157
              /* push $r8 */
1158
              if (info)
1159
                {
1160
                  info->r8_offset = info->sp_offset;
1161
                }
1162
            }
1163
        }
1164
      else if (insn == 0x866E)
1165
        {
1166
          /* move.d sp,r8 */
1167
          if (info)
1168
            {
1169
              info->uses_frame = 1;
1170
            }
1171
          continue;
1172
        }
1173
      else if (cris_get_operand2 (insn) == gdbarch_sp_regnum (gdbarch)
1174
               && cris_get_mode (insn) == 0x0000
1175
               && cris_get_opcode (insn) == 0x000A)
1176
        {
1177
          /* subq <val>,sp */
1178
          if (info)
1179
            {
1180
              info->sp_offset += cris_get_quick_value (insn);
1181
            }
1182
        }
1183
      else if (cris_get_mode (insn) == 0x0002
1184
               && cris_get_opcode (insn) == 0x000F
1185
               && cris_get_size (insn) == 0x0003
1186
               && cris_get_operand1 (insn) == gdbarch_sp_regnum (gdbarch))
1187
        {
1188
          /* movem r<regsave>,[sp] */
1189
          regsave = cris_get_operand2 (insn);
1190
        }
1191
      else if (cris_get_operand2 (insn) == gdbarch_sp_regnum (gdbarch)
1192
               && ((insn & 0x0F00) >> 8) == 0x0001
1193
               && (cris_get_signed_offset (insn) < 0))
1194
        {
1195
          /* Immediate byte offset addressing prefix word with sp as base
1196
             register.  Used for CRIS v8 i.e. ETRAX 100 and newer if <val>
1197
             is between 64 and 128.
1198
             movem r<regsave>,[sp=sp-<val>] */
1199
          if (info)
1200
            {
1201
              info->sp_offset += -cris_get_signed_offset (insn);
1202
            }
1203
          insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
1204
          pc += 2;
1205
          if (cris_get_mode (insn_next) == PREFIX_ASSIGN_MODE
1206
              && cris_get_opcode (insn_next) == 0x000F
1207
              && cris_get_size (insn_next) == 0x0003
1208
              && cris_get_operand1 (insn_next) == gdbarch_sp_regnum
1209
                                                  (gdbarch))
1210
            {
1211
              regsave = cris_get_operand2 (insn_next);
1212
            }
1213
          else
1214
            {
1215
              /* The prologue ended before the limit was reached.  */
1216
              pc -= 4;
1217
              break;
1218
            }
1219
        }
1220
      else if (cris_get_mode (insn) == 0x0001
1221
               && cris_get_opcode (insn) == 0x0009
1222
               && cris_get_size (insn) == 0x0002)
1223
        {
1224
          /* move.d r<10..13>,r<0..15> */
1225
          source_register = cris_get_operand1 (insn);
1226
 
1227
          /* FIXME?  In the glibc solibs, the prologue might contain something
1228
             like (this example taken from relocate_doit):
1229
             move.d $pc,$r0
1230
             sub.d 0xfffef426,$r0
1231
             which isn't covered by the source_register check below.  Question
1232
             is whether to add a check for this combo, or make better use of
1233
             the limit variable instead.  */
1234
          if (source_register < ARG1_REGNUM || source_register > ARG4_REGNUM)
1235
            {
1236
              /* The prologue ended before the limit was reached.  */
1237
              pc -= 2;
1238
              break;
1239
            }
1240
        }
1241
      else if (cris_get_operand2 (insn) == CRIS_FP_REGNUM
1242
               /* The size is a fixed-size.  */
1243
               && ((insn & 0x0F00) >> 8) == 0x0001
1244
               /* A negative offset.  */
1245
               && (cris_get_signed_offset (insn) < 0))
1246
        {
1247
          /* move.S rZ,[r8-U] (?) */
1248
          insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
1249
          pc += 2;
1250
          regno = cris_get_operand2 (insn_next);
1251
          if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
1252
              && cris_get_mode (insn_next) == PREFIX_OFFSET_MODE
1253
              && cris_get_opcode (insn_next) == 0x000F)
1254
            {
1255
              /* move.S rZ,[r8-U] */
1256
              continue;
1257
            }
1258
          else
1259
            {
1260
              /* The prologue ended before the limit was reached.  */
1261
              pc -= 4;
1262
              break;
1263
            }
1264
        }
1265
      else if (cris_get_operand2 (insn) == CRIS_FP_REGNUM
1266
               /* The size is a fixed-size.  */
1267
               && ((insn & 0x0F00) >> 8) == 0x0001
1268
               /* A positive offset.  */
1269
               && (cris_get_signed_offset (insn) > 0))
1270
        {
1271
          /* move.S [r8+U],rZ (?) */
1272
          insn_next = read_memory_unsigned_integer (pc, 2, byte_order);
1273
          pc += 2;
1274
          regno = cris_get_operand2 (insn_next);
1275
          if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
1276
              && cris_get_mode (insn_next) == PREFIX_OFFSET_MODE
1277
              && cris_get_opcode (insn_next) == 0x0009
1278
              && cris_get_operand1 (insn_next) == regno)
1279
            {
1280
              /* move.S [r8+U],rZ */
1281
              continue;
1282
            }
1283
          else
1284
            {
1285
              /* The prologue ended before the limit was reached.  */
1286
              pc -= 4;
1287
              break;
1288
            }
1289
        }
1290
      else
1291
        {
1292
          /* The prologue ended before the limit was reached.  */
1293
          pc -= 2;
1294
          break;
1295
        }
1296
    }
1297
 
1298
  /* We only want to know the end of the prologue when this_frame and info
1299
     are NULL (called from cris_skip_prologue i.e.).  */
1300
  if (this_frame == NULL && info == NULL)
1301
    {
1302
      return pc;
1303
    }
1304
 
1305
  info->size = info->sp_offset;
1306
 
1307
  /* Compute the previous frame's stack pointer (which is also the
1308
     frame's ID's stack address), and this frame's base pointer.  */
1309
  if (info->uses_frame)
1310
    {
1311
      ULONGEST this_base;
1312
      /* The SP was moved to the FP.  This indicates that a new frame
1313
         was created.  Get THIS frame's FP value by unwinding it from
1314
         the next frame.  */
1315
      this_base = get_frame_register_unsigned (this_frame, CRIS_FP_REGNUM);
1316
      info->base = this_base;
1317
      info->saved_regs[CRIS_FP_REGNUM].addr = info->base;
1318
 
1319
      /* The FP points at the last saved register.  Adjust the FP back
1320
         to before the first saved register giving the SP.  */
1321
      info->prev_sp = info->base + info->r8_offset;
1322
    }
1323
  else
1324
    {
1325
      ULONGEST this_base;
1326
      /* Assume that the FP is this frame's SP but with that pushed
1327
         stack space added back.  */
1328
      this_base = get_frame_register_unsigned (this_frame,
1329
                                               gdbarch_sp_regnum (gdbarch));
1330
      info->base = this_base;
1331
      info->prev_sp = info->base + info->size;
1332
    }
1333
 
1334
  /* Calculate the addresses for the saved registers on the stack.  */
1335
  /* FIXME: The address calculation should really be done on the fly while
1336
     we're analyzing the prologue (we only hold one regsave value as it is
1337
     now).  */
1338
  val = info->sp_offset;
1339
 
1340
  for (regno = regsave; regno >= 0; regno--)
1341
    {
1342
      info->saved_regs[regno].addr = info->base + info->r8_offset - val;
1343
      val -= 4;
1344
    }
1345
 
1346
  /* The previous frame's SP needed to be computed.  Save the computed
1347
     value.  */
1348
  trad_frame_set_value (info->saved_regs,
1349
                        gdbarch_sp_regnum (gdbarch), info->prev_sp);
1350
 
1351
  if (!info->leaf_function)
1352
    {
1353
      /* SRP saved on the stack.  But where?  */
1354
      if (info->r8_offset == 0)
1355
        {
1356
          /* R8 not pushed yet.  */
1357
          info->saved_regs[SRP_REGNUM].addr = info->base;
1358
        }
1359
      else
1360
        {
1361
          /* R8 pushed, but SP may or may not be moved to R8 yet.  */
1362
          info->saved_regs[SRP_REGNUM].addr = info->base + 4;
1363
        }
1364
    }
1365
 
1366
  /* The PC is found in SRP (the actual register or located on the stack).  */
1367
  info->saved_regs[gdbarch_pc_regnum (gdbarch)]
1368
    = info->saved_regs[SRP_REGNUM];
1369
 
1370
  return pc;
1371
}
1372
 
1373
static CORE_ADDR
1374
crisv32_scan_prologue (CORE_ADDR pc, struct frame_info *this_frame,
1375
                    struct cris_unwind_cache *info)
1376
{
1377
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
1378
  ULONGEST this_base;
1379
 
1380
  /* Unlike the CRISv10 prologue scanner (cris_scan_prologue), this is not
1381
     meant to be a full-fledged prologue scanner.  It is only needed for
1382
     the cases where we end up in code always lacking DWARF-2 CFI, notably:
1383
 
1384
       * PLT stubs (library calls)
1385
       * call dummys
1386
       * signal trampolines
1387
 
1388
     For those cases, it is assumed that there is no actual prologue; that
1389
     the stack pointer is not adjusted, and (as a consequence) the return
1390
     address is not pushed onto the stack.  */
1391
 
1392
  /* We only want to know the end of the prologue when this_frame and info
1393
     are NULL (called from cris_skip_prologue i.e.).  */
1394
  if (this_frame == NULL && info == NULL)
1395
    {
1396
      return pc;
1397
    }
1398
 
1399
  /* The SP is assumed to be unaltered.  */
1400
  this_base = get_frame_register_unsigned (this_frame,
1401
                                           gdbarch_sp_regnum (gdbarch));
1402
  info->base = this_base;
1403
  info->prev_sp = this_base;
1404
 
1405
  /* The PC is assumed to be found in SRP.  */
1406
  info->saved_regs[gdbarch_pc_regnum (gdbarch)]
1407
    = info->saved_regs[SRP_REGNUM];
1408
 
1409
  return pc;
1410
}
1411
 
1412
/* Advance pc beyond any function entry prologue instructions at pc
1413
   to reach some "real" code.  */
1414
 
1415
/* Given a PC value corresponding to the start of a function, return the PC
1416
   of the first instruction after the function prologue.  */
1417
 
1418
static CORE_ADDR
1419
cris_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1420
{
1421
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1422
  CORE_ADDR func_addr, func_end;
1423
  struct symtab_and_line sal;
1424
  CORE_ADDR pc_after_prologue;
1425
 
1426
  /* If we have line debugging information, then the end of the prologue
1427
     should the first assembly instruction of the first source line.  */
1428
  if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
1429
    {
1430
      sal = find_pc_line (func_addr, 0);
1431
      if (sal.end > 0 && sal.end < func_end)
1432
        return sal.end;
1433
    }
1434
 
1435
  if (tdep->cris_version == 32)
1436
    pc_after_prologue = crisv32_scan_prologue (pc, NULL, NULL);
1437
  else
1438
    pc_after_prologue = cris_scan_prologue (pc, NULL, NULL);
1439
 
1440
  return pc_after_prologue;
1441
}
1442
 
1443
static CORE_ADDR
1444
cris_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1445
{
1446
  ULONGEST pc;
1447
  pc = frame_unwind_register_unsigned (next_frame,
1448
                                       gdbarch_pc_regnum (gdbarch));
1449
  return pc;
1450
}
1451
 
1452
static CORE_ADDR
1453
cris_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
1454
{
1455
  ULONGEST sp;
1456
  sp = frame_unwind_register_unsigned (next_frame,
1457
                                       gdbarch_sp_regnum (gdbarch));
1458
  return sp;
1459
}
1460
 
1461
/* Use the program counter to determine the contents and size of a breakpoint
1462
   instruction.  It returns a pointer to a string of bytes that encode a
1463
   breakpoint instruction, stores the length of the string to *lenptr, and
1464
   adjusts pcptr (if necessary) to point to the actual memory location where
1465
   the breakpoint should be inserted.  */
1466
 
1467
static const unsigned char *
1468
cris_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
1469
{
1470
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1471
  static unsigned char break8_insn[] = {0x38, 0xe9};
1472
  static unsigned char break15_insn[] = {0x3f, 0xe9};
1473
  *lenptr = 2;
1474
 
1475
  if (tdep->cris_mode == cris_mode_guru)
1476
    return break15_insn;
1477
  else
1478
    return break8_insn;
1479
}
1480
 
1481
/* Returns 1 if spec_reg is applicable to the current gdbarch's CRIS version,
1482
 
1483
 
1484
static int
1485
cris_spec_reg_applicable (struct gdbarch *gdbarch,
1486
                          struct cris_spec_reg spec_reg)
1487
{
1488
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1489
  int version = tdep->cris_version;
1490
 
1491
  switch (spec_reg.applicable_version)
1492
    {
1493
    case cris_ver_version_all:
1494
      return 1;
1495
    case cris_ver_warning:
1496
      /* Indeterminate/obsolete.  */
1497
      return 0;
1498
    case cris_ver_v0_3:
1499
      return (version >= 0 && version <= 3);
1500
    case cris_ver_v3p:
1501
      return (version >= 3);
1502
    case cris_ver_v8:
1503
      return (version == 8 || version == 9);
1504
    case cris_ver_v8p:
1505
      return (version >= 8);
1506
    case cris_ver_v0_10:
1507
      return (version >= 0 && version <= 10);
1508
    case cris_ver_v3_10:
1509
      return (version >= 3 && version <= 10);
1510
    case cris_ver_v8_10:
1511
      return (version >= 8 && version <= 10);
1512
    case cris_ver_v10:
1513
      return (version == 10);
1514
    case cris_ver_v10p:
1515
      return (version >= 10);
1516
    case cris_ver_v32p:
1517
      return (version >= 32);
1518
    default:
1519
      /* Invalid cris version.  */
1520
      return 0;
1521
    }
1522
}
1523
 
1524
/* Returns the register size in unit byte.  Returns 0 for an unimplemented
1525
   register, -1 for an invalid register.  */
1526
 
1527
static int
1528
cris_register_size (struct gdbarch *gdbarch, int regno)
1529
{
1530
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1531
  int i;
1532
  int spec_regno;
1533
 
1534
  if (regno >= 0 && regno < NUM_GENREGS)
1535
    {
1536
      /* General registers (R0 - R15) are 32 bits.  */
1537
      return 4;
1538
    }
1539
  else if (regno >= NUM_GENREGS && regno < (NUM_GENREGS + NUM_SPECREGS))
1540
    {
1541
      /* Special register (R16 - R31).  cris_spec_regs is zero-based.
1542
         Adjust regno accordingly.  */
1543
      spec_regno = regno - NUM_GENREGS;
1544
 
1545
      for (i = 0; cris_spec_regs[i].name != NULL; i++)
1546
        {
1547
          if (cris_spec_regs[i].number == spec_regno
1548
              && cris_spec_reg_applicable (gdbarch, cris_spec_regs[i]))
1549
            /* Go with the first applicable register.  */
1550
            return cris_spec_regs[i].reg_size;
1551
        }
1552
      /* Special register not applicable to this CRIS version.  */
1553
      return 0;
1554
    }
1555
  else if (regno >= gdbarch_pc_regnum (gdbarch)
1556
           && regno < gdbarch_num_regs (gdbarch))
1557
    {
1558
      /* This will apply to CRISv32 only where there are additional registers
1559
         after the special registers (pseudo PC and support registers).  */
1560
      return 4;
1561
    }
1562
 
1563
 
1564
  return -1;
1565
}
1566
 
1567
/* Nonzero if regno should not be fetched from the target.  This is the case
1568
   for unimplemented (size 0) and non-existant registers.  */
1569
 
1570
static int
1571
cris_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
1572
{
1573
  return ((regno < 0 || regno >= gdbarch_num_regs (gdbarch))
1574
          || (cris_register_size (gdbarch, regno) == 0));
1575
}
1576
 
1577
/* Nonzero if regno should not be written to the target, for various
1578
   reasons.  */
1579
 
1580
static int
1581
cris_cannot_store_register (struct gdbarch *gdbarch, int regno)
1582
{
1583
  /* There are three kinds of registers we refuse to write to.
1584
     1. Those that not implemented.
1585
     2. Those that are read-only (depends on the processor mode).
1586
     3. Those registers to which a write has no effect.
1587
  */
1588
 
1589
  if (regno < 0
1590
      || regno >= gdbarch_num_regs (gdbarch)
1591
      || cris_register_size (gdbarch, regno) == 0)
1592
    /* Not implemented.  */
1593
    return 1;
1594
 
1595
  else if  (regno == VR_REGNUM)
1596
    /* Read-only.  */
1597
    return 1;
1598
 
1599
  else if  (regno == P0_REGNUM || regno == P4_REGNUM || regno == P8_REGNUM)
1600
    /* Writing has no effect.  */
1601
    return 1;
1602
 
1603
  /* IBR, BAR, BRP and IRP are read-only in user mode.  Let the debug
1604
     agent decide whether they are writable.  */
1605
 
1606
  return 0;
1607
}
1608
 
1609
/* Nonzero if regno should not be fetched from the target.  This is the case
1610
   for unimplemented (size 0) and non-existant registers.  */
1611
 
1612
static int
1613
crisv32_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
1614
{
1615
  return ((regno < 0 || regno >= gdbarch_num_regs (gdbarch))
1616
          || (cris_register_size (gdbarch, regno) == 0));
1617
}
1618
 
1619
/* Nonzero if regno should not be written to the target, for various
1620
   reasons.  */
1621
 
1622
static int
1623
crisv32_cannot_store_register (struct gdbarch *gdbarch, int regno)
1624
{
1625
  /* There are three kinds of registers we refuse to write to.
1626
     1. Those that not implemented.
1627
     2. Those that are read-only (depends on the processor mode).
1628
     3. Those registers to which a write has no effect.
1629
  */
1630
 
1631
  if (regno < 0
1632
      || regno >= gdbarch_num_regs (gdbarch)
1633
      || cris_register_size (gdbarch, regno) == 0)
1634
    /* Not implemented.  */
1635
    return 1;
1636
 
1637
  else if  (regno == VR_REGNUM)
1638
    /* Read-only.  */
1639
    return 1;
1640
 
1641
  else if  (regno == BZ_REGNUM || regno == WZ_REGNUM || regno == DZ_REGNUM)
1642
    /* Writing has no effect.  */
1643
    return 1;
1644
 
1645
  /* Many special registers are read-only in user mode.  Let the debug
1646
     agent decide whether they are writable.  */
1647
 
1648
  return 0;
1649
}
1650
 
1651
/* Return the GDB type (defined in gdbtypes.c) for the "standard" data type
1652
   of data in register regno.  */
1653
 
1654
static struct type *
1655
cris_register_type (struct gdbarch *gdbarch, int regno)
1656
{
1657
  if (regno == gdbarch_pc_regnum (gdbarch))
1658
    return builtin_type (gdbarch)->builtin_func_ptr;
1659
  else if (regno == gdbarch_sp_regnum (gdbarch)
1660
           || regno == CRIS_FP_REGNUM)
1661
    return builtin_type (gdbarch)->builtin_data_ptr;
1662
  else if ((regno >= 0 && regno < gdbarch_sp_regnum (gdbarch))
1663
           || (regno >= MOF_REGNUM && regno <= USP_REGNUM))
1664
    /* Note: R8 taken care of previous clause.  */
1665
    return builtin_type (gdbarch)->builtin_uint32;
1666
  else if (regno >= P4_REGNUM && regno <= CCR_REGNUM)
1667
      return builtin_type (gdbarch)->builtin_uint16;
1668
  else if (regno >= P0_REGNUM && regno <= VR_REGNUM)
1669
      return builtin_type (gdbarch)->builtin_uint8;
1670
  else
1671
      /* Invalid (unimplemented) register.  */
1672
      return builtin_type (gdbarch)->builtin_int0;
1673
}
1674
 
1675
static struct type *
1676
crisv32_register_type (struct gdbarch *gdbarch, int regno)
1677
{
1678
  if (regno == gdbarch_pc_regnum (gdbarch))
1679
    return builtin_type (gdbarch)->builtin_func_ptr;
1680
  else if (regno == gdbarch_sp_regnum (gdbarch)
1681
           || regno == CRIS_FP_REGNUM)
1682
    return builtin_type (gdbarch)->builtin_data_ptr;
1683
  else if ((regno >= 0 && regno <= ACR_REGNUM)
1684
           || (regno >= EXS_REGNUM && regno <= SPC_REGNUM)
1685
           || (regno == PID_REGNUM)
1686
           || (regno >= S0_REGNUM && regno <= S15_REGNUM))
1687
    /* Note: R8 and SP taken care of by previous clause.  */
1688
    return builtin_type (gdbarch)->builtin_uint32;
1689
  else if (regno == WZ_REGNUM)
1690
      return builtin_type (gdbarch)->builtin_uint16;
1691
  else if (regno == BZ_REGNUM || regno == VR_REGNUM || regno == SRS_REGNUM)
1692
      return builtin_type (gdbarch)->builtin_uint8;
1693
  else
1694
    {
1695
      /* Invalid (unimplemented) register.  Should not happen as there are
1696
         no unimplemented CRISv32 registers.  */
1697
      warning (_("crisv32_register_type: unknown regno %d"), regno);
1698
      return builtin_type (gdbarch)->builtin_int0;
1699
    }
1700
}
1701
 
1702
/* Stores a function return value of type type, where valbuf is the address
1703
   of the value to be stored.  */
1704
 
1705
/* In the CRIS ABI, R10 and R11 are used to store return values.  */
1706
 
1707
static void
1708
cris_store_return_value (struct type *type, struct regcache *regcache,
1709
                         const void *valbuf)
1710
{
1711
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
1712
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1713
  ULONGEST val;
1714
  int len = TYPE_LENGTH (type);
1715
 
1716
  if (len <= 4)
1717
    {
1718
      /* Put the return value in R10.  */
1719
      val = extract_unsigned_integer (valbuf, len, byte_order);
1720
      regcache_cooked_write_unsigned (regcache, ARG1_REGNUM, val);
1721
    }
1722
  else if (len <= 8)
1723
    {
1724
      /* Put the return value in R10 and R11.  */
1725
      val = extract_unsigned_integer (valbuf, 4, byte_order);
1726
      regcache_cooked_write_unsigned (regcache, ARG1_REGNUM, val);
1727
      val = extract_unsigned_integer ((char *)valbuf + 4, len - 4, byte_order);
1728
      regcache_cooked_write_unsigned (regcache, ARG2_REGNUM, val);
1729
    }
1730
  else
1731
    error (_("cris_store_return_value: type length too large."));
1732
}
1733
 
1734
/* Return the name of register regno as a string. Return NULL for an invalid or
1735
   unimplemented register.  */
1736
 
1737
static const char *
1738
cris_special_register_name (struct gdbarch *gdbarch, int regno)
1739
{
1740
  int spec_regno;
1741
  int i;
1742
 
1743
  /* Special register (R16 - R31).  cris_spec_regs is zero-based.
1744
     Adjust regno accordingly.  */
1745
  spec_regno = regno - NUM_GENREGS;
1746
 
1747
  /* Assume nothing about the layout of the cris_spec_regs struct
1748
     when searching.  */
1749
  for (i = 0; cris_spec_regs[i].name != NULL; i++)
1750
    {
1751
      if (cris_spec_regs[i].number == spec_regno
1752
          && cris_spec_reg_applicable (gdbarch, cris_spec_regs[i]))
1753
        /* Go with the first applicable register.  */
1754
        return cris_spec_regs[i].name;
1755
    }
1756
  /* Special register not applicable to this CRIS version.  */
1757
  return NULL;
1758
}
1759
 
1760
static const char *
1761
cris_register_name (struct gdbarch *gdbarch, int regno)
1762
{
1763
  static char *cris_genreg_names[] =
1764
  { "r0",  "r1",  "r2",  "r3", \
1765
    "r4",  "r5",  "r6",  "r7", \
1766
    "r8",  "r9",  "r10", "r11", \
1767
    "r12", "r13", "sp",  "pc" };
1768
 
1769
  if (regno >= 0 && regno < NUM_GENREGS)
1770
    {
1771
      /* General register.  */
1772
      return cris_genreg_names[regno];
1773
    }
1774
  else if (regno >= NUM_GENREGS && regno < gdbarch_num_regs (gdbarch))
1775
    {
1776
      return cris_special_register_name (gdbarch, regno);
1777
    }
1778
  else
1779
    {
1780
      /* Invalid register.  */
1781
      return NULL;
1782
    }
1783
}
1784
 
1785
static const char *
1786
crisv32_register_name (struct gdbarch *gdbarch, int regno)
1787
{
1788
  static char *crisv32_genreg_names[] =
1789
    { "r0",  "r1",  "r2",  "r3", \
1790
      "r4",  "r5",  "r6",  "r7", \
1791
      "r8",  "r9",  "r10", "r11", \
1792
      "r12", "r13", "sp",  "acr"
1793
    };
1794
 
1795
  static char *crisv32_sreg_names[] =
1796
    { "s0",  "s1",  "s2",  "s3", \
1797
      "s4",  "s5",  "s6",  "s7", \
1798
      "s8",  "s9",  "s10", "s11", \
1799
      "s12", "s13", "s14",  "s15"
1800
    };
1801
 
1802
  if (regno >= 0 && regno < NUM_GENREGS)
1803
    {
1804
      /* General register.  */
1805
      return crisv32_genreg_names[regno];
1806
    }
1807
  else if (regno >= NUM_GENREGS && regno < (NUM_GENREGS + NUM_SPECREGS))
1808
    {
1809
      return cris_special_register_name (gdbarch, regno);
1810
    }
1811
  else if (regno == gdbarch_pc_regnum (gdbarch))
1812
    {
1813
      return "pc";
1814
    }
1815
  else if (regno >= S0_REGNUM && regno <= S15_REGNUM)
1816
    {
1817
      return crisv32_sreg_names[regno - S0_REGNUM];
1818
    }
1819
  else
1820
    {
1821
      /* Invalid register.  */
1822
      return NULL;
1823
    }
1824
}
1825
 
1826
/* Convert DWARF register number REG to the appropriate register
1827
   number used by GDB.  */
1828
 
1829
static int
1830
cris_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int reg)
1831
{
1832
  /* We need to re-map a couple of registers (SRP is 16 in Dwarf-2 register
1833
     numbering, MOF is 18).
1834
     Adapted from gcc/config/cris/cris.h.  */
1835
  static int cris_dwarf_regmap[] = {
1836
    0,  1,  2,  3,
1837
    4,  5,  6,  7,
1838
    8,  9,  10, 11,
1839
    12, 13, 14, 15,
1840
    27, -1, -1, -1,
1841
    -1, -1, -1, 23,
1842
    -1, -1, -1, 27,
1843
    -1, -1, -1, -1
1844
  };
1845
  int regnum = -1;
1846
 
1847
  if (reg >= 0 && reg < ARRAY_SIZE (cris_dwarf_regmap))
1848
    regnum = cris_dwarf_regmap[reg];
1849
 
1850
  if (regnum == -1)
1851
    warning (_("Unmapped DWARF Register #%d encountered."), reg);
1852
 
1853
  return regnum;
1854
}
1855
 
1856
/* DWARF-2 frame support.  */
1857
 
1858
static void
1859
cris_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1860
                            struct dwarf2_frame_state_reg *reg,
1861
                            struct frame_info *this_frame)
1862
{
1863
  /* The return address column.  */
1864
  if (regnum == gdbarch_pc_regnum (gdbarch))
1865
    reg->how = DWARF2_FRAME_REG_RA;
1866
 
1867
  /* The call frame address.  */
1868
  else if (regnum == gdbarch_sp_regnum (gdbarch))
1869
    reg->how = DWARF2_FRAME_REG_CFA;
1870
}
1871
 
1872
/* Extract from an array regbuf containing the raw register state a function
1873
   return value of type type, and copy that, in virtual format, into
1874
   valbuf.  */
1875
 
1876
/* In the CRIS ABI, R10 and R11 are used to store return values.  */
1877
 
1878
static void
1879
cris_extract_return_value (struct type *type, struct regcache *regcache,
1880
                           void *valbuf)
1881
{
1882
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
1883
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1884
  ULONGEST val;
1885
  int len = TYPE_LENGTH (type);
1886
 
1887
  if (len <= 4)
1888
    {
1889
      /* Get the return value from R10.  */
1890
      regcache_cooked_read_unsigned (regcache, ARG1_REGNUM, &val);
1891
      store_unsigned_integer (valbuf, len, byte_order, val);
1892
    }
1893
  else if (len <= 8)
1894
    {
1895
      /* Get the return value from R10 and R11.  */
1896
      regcache_cooked_read_unsigned (regcache, ARG1_REGNUM, &val);
1897
      store_unsigned_integer (valbuf, 4, byte_order, val);
1898
      regcache_cooked_read_unsigned (regcache, ARG2_REGNUM, &val);
1899
      store_unsigned_integer ((char *)valbuf + 4, len - 4, byte_order, val);
1900
    }
1901
  else
1902
    error (_("cris_extract_return_value: type length too large"));
1903
}
1904
 
1905
/* Handle the CRIS return value convention.  */
1906
 
1907
static enum return_value_convention
1908
cris_return_value (struct gdbarch *gdbarch, struct type *func_type,
1909
                   struct type *type, struct regcache *regcache,
1910
                   gdb_byte *readbuf, const gdb_byte *writebuf)
1911
{
1912
  if (TYPE_CODE (type) == TYPE_CODE_STRUCT
1913
      || TYPE_CODE (type) == TYPE_CODE_UNION
1914
      || TYPE_LENGTH (type) > 8)
1915
    /* Structs, unions, and anything larger than 8 bytes (2 registers)
1916
       goes on the stack.  */
1917
    return RETURN_VALUE_STRUCT_CONVENTION;
1918
 
1919
  if (readbuf)
1920
    cris_extract_return_value (type, regcache, readbuf);
1921
  if (writebuf)
1922
    cris_store_return_value (type, regcache, writebuf);
1923
 
1924
  return RETURN_VALUE_REGISTER_CONVENTION;
1925
}
1926
 
1927
/* Calculates a value that measures how good inst_args constraints an
1928
   instruction.  It stems from cris_constraint, found in cris-dis.c.  */
1929
 
1930
static int
1931
constraint (unsigned int insn, const signed char *inst_args,
1932
            inst_env_type *inst_env)
1933
{
1934
  int retval = 0;
1935
  int tmp, i;
1936
 
1937
  const char *s = inst_args;
1938
 
1939
  for (; *s; s++)
1940
    switch (*s)
1941
      {
1942
      case 'm':
1943
        if ((insn & 0x30) == 0x30)
1944
          return -1;
1945
        break;
1946
 
1947
      case 'S':
1948
        /* A prefix operand.  */
1949
        if (inst_env->prefix_found)
1950
          break;
1951
        else
1952
          return -1;
1953
 
1954
      case 'B':
1955
        /* A "push" prefix.  (This check was REMOVED by san 970921.)  Check for
1956
           valid "push" size.  In case of special register, it may be != 4.  */
1957
        if (inst_env->prefix_found)
1958
          break;
1959
        else
1960
          return -1;
1961
 
1962
      case 'D':
1963
        retval = (((insn >> 0xC) & 0xF) == (insn & 0xF));
1964
        if (!retval)
1965
          return -1;
1966
        else
1967
          retval += 4;
1968
        break;
1969
 
1970
      case 'P':
1971
        tmp = (insn >> 0xC) & 0xF;
1972
 
1973
        for (i = 0; cris_spec_regs[i].name != NULL; i++)
1974
          {
1975
            /* Since we match four bits, we will give a value of
1976
               4 - 1 = 3 in a match.  If there is a corresponding
1977
               exact match of a special register in another pattern, it
1978
               will get a value of 4, which will be higher.  This should
1979
               be correct in that an exact pattern would match better that
1980
               a general pattern.
1981
               Note that there is a reason for not returning zero; the
1982
               pattern for "clear" is partly  matched in the bit-pattern
1983
               (the two lower bits must be zero), while the bit-pattern
1984
               for a move from a special register is matched in the
1985
               register constraint.
1986
               This also means we will will have a race condition if
1987
               there is a partly match in three bits in the bit pattern.  */
1988
            if (tmp == cris_spec_regs[i].number)
1989
              {
1990
                retval += 3;
1991
                break;
1992
              }
1993
          }
1994
 
1995
        if (cris_spec_regs[i].name == NULL)
1996
          return -1;
1997
        break;
1998
      }
1999
  return retval;
2000
}
2001
 
2002
/* Returns the number of bits set in the variable value.  */
2003
 
2004
static int
2005
number_of_bits (unsigned int value)
2006
{
2007
  int number_of_bits = 0;
2008
 
2009
  while (value != 0)
2010
    {
2011
      number_of_bits += 1;
2012
      value &= (value - 1);
2013
    }
2014
  return number_of_bits;
2015
}
2016
 
2017
/* Finds the address that should contain the single step breakpoint(s).
2018
   It stems from code in cris-dis.c.  */
2019
 
2020
static int
2021
find_cris_op (unsigned short insn, inst_env_type *inst_env)
2022
{
2023
  int i;
2024
  int max_level_of_match = -1;
2025
  int max_matched = -1;
2026
  int level_of_match;
2027
 
2028
  for (i = 0; cris_opcodes[i].name != NULL; i++)
2029
    {
2030
      if (((cris_opcodes[i].match & insn) == cris_opcodes[i].match)
2031
          && ((cris_opcodes[i].lose & insn) == 0)
2032
          /* Only CRISv10 instructions, please.  */
2033
          && (cris_opcodes[i].applicable_version != cris_ver_v32p))
2034
        {
2035
          level_of_match = constraint (insn, cris_opcodes[i].args, inst_env);
2036
          if (level_of_match >= 0)
2037
            {
2038
              level_of_match +=
2039
                number_of_bits (cris_opcodes[i].match | cris_opcodes[i].lose);
2040
              if (level_of_match > max_level_of_match)
2041
                {
2042
                  max_matched = i;
2043
                  max_level_of_match = level_of_match;
2044
                  if (level_of_match == 16)
2045
                    {
2046
                      /* All bits matched, cannot find better.  */
2047
                      break;
2048
                    }
2049
                }
2050
            }
2051
        }
2052
    }
2053
  return max_matched;
2054
}
2055
 
2056
/* Attempts to find single-step breakpoints.  Returns -1 on failure which is
2057
   actually an internal error.  */
2058
 
2059
static int
2060
find_step_target (struct frame_info *frame, inst_env_type *inst_env)
2061
{
2062
  int i;
2063
  int offset;
2064
  unsigned short insn;
2065
  struct gdbarch *gdbarch = get_frame_arch (frame);
2066
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2067
 
2068
  /* Create a local register image and set the initial state.  */
2069
  for (i = 0; i < NUM_GENREGS; i++)
2070
    {
2071
      inst_env->reg[i] =
2072
        (unsigned long) get_frame_register_unsigned (frame, i);
2073
    }
2074
  offset = NUM_GENREGS;
2075
  for (i = 0; i < NUM_SPECREGS; i++)
2076
    {
2077
      inst_env->preg[i] =
2078
        (unsigned long) get_frame_register_unsigned (frame, offset + i);
2079
    }
2080
  inst_env->branch_found = 0;
2081
  inst_env->slot_needed = 0;
2082
  inst_env->delay_slot_pc_active = 0;
2083
  inst_env->prefix_found = 0;
2084
  inst_env->invalid = 0;
2085
  inst_env->xflag_found = 0;
2086
  inst_env->disable_interrupt = 0;
2087
  inst_env->byte_order = byte_order;
2088
 
2089
  /* Look for a step target.  */
2090
  do
2091
    {
2092
      /* Read an instruction from the client.  */
2093
      insn = read_memory_unsigned_integer
2094
             (inst_env->reg[gdbarch_pc_regnum (gdbarch)], 2, byte_order);
2095
 
2096
      /* If the instruction is not in a delay slot the new content of the
2097
         PC is [PC] + 2.  If the instruction is in a delay slot it is not
2098
         that simple.  Since a instruction in a delay slot cannot change
2099
         the content of the PC, it does not matter what value PC will have.
2100
         Just make sure it is a valid instruction.  */
2101
      if (!inst_env->delay_slot_pc_active)
2102
        {
2103
          inst_env->reg[gdbarch_pc_regnum (gdbarch)] += 2;
2104
        }
2105
      else
2106
        {
2107
          inst_env->delay_slot_pc_active = 0;
2108
          inst_env->reg[gdbarch_pc_regnum (gdbarch)]
2109
            = inst_env->delay_slot_pc;
2110
        }
2111
      /* Analyse the present instruction.  */
2112
      i = find_cris_op (insn, inst_env);
2113
      if (i == -1)
2114
        {
2115
          inst_env->invalid = 1;
2116
        }
2117
      else
2118
        {
2119
          cris_gdb_func (gdbarch, cris_opcodes[i].op, insn, inst_env);
2120
        }
2121
    } while (!inst_env->invalid
2122
             && (inst_env->prefix_found || inst_env->xflag_found
2123
                 || inst_env->slot_needed));
2124
  return i;
2125
}
2126
 
2127
/* There is no hardware single-step support.  The function find_step_target
2128
   digs through the opcodes in order to find all possible targets.
2129
   Either one ordinary target or two targets for branches may be found.  */
2130
 
2131
static int
2132
cris_software_single_step (struct frame_info *frame)
2133
{
2134
  struct gdbarch *gdbarch = get_frame_arch (frame);
2135
  struct address_space *aspace = get_frame_address_space (frame);
2136
  inst_env_type inst_env;
2137
 
2138
  /* Analyse the present instruction environment and insert
2139
     breakpoints.  */
2140
  int status = find_step_target (frame, &inst_env);
2141
  if (status == -1)
2142
    {
2143
      /* Could not find a target.  Things are likely to go downhill
2144
         from here.  */
2145
      warning (_("CRIS software single step could not find a step target."));
2146
    }
2147
  else
2148
    {
2149
      /* Insert at most two breakpoints.  One for the next PC content
2150
         and possibly another one for a branch, jump, etc.  */
2151
      CORE_ADDR next_pc
2152
        = (CORE_ADDR) inst_env.reg[gdbarch_pc_regnum (gdbarch)];
2153
      insert_single_step_breakpoint (gdbarch, aspace, next_pc);
2154
      if (inst_env.branch_found
2155
          && (CORE_ADDR) inst_env.branch_break_address != next_pc)
2156
        {
2157
          CORE_ADDR branch_target_address
2158
                = (CORE_ADDR) inst_env.branch_break_address;
2159
          insert_single_step_breakpoint (gdbarch,
2160
                                         aspace, branch_target_address);
2161
        }
2162
    }
2163
 
2164
  return 1;
2165
}
2166
 
2167
/* Calculates the prefix value for quick offset addressing mode.  */
2168
 
2169
static void
2170
quick_mode_bdap_prefix (unsigned short inst, inst_env_type *inst_env)
2171
{
2172
  /* It's invalid to be in a delay slot.  You can't have a prefix to this
2173
     instruction (not 100% sure).  */
2174
  if (inst_env->slot_needed || inst_env->prefix_found)
2175
    {
2176
      inst_env->invalid = 1;
2177
      return;
2178
    }
2179
 
2180
  inst_env->prefix_value = inst_env->reg[cris_get_operand2 (inst)];
2181
  inst_env->prefix_value += cris_get_bdap_quick_offset (inst);
2182
 
2183
  /* A prefix doesn't change the xflag_found.  But the rest of the flags
2184
     need updating.  */
2185
  inst_env->slot_needed = 0;
2186
  inst_env->prefix_found = 1;
2187
}
2188
 
2189
/* Updates the autoincrement register.  The size of the increment is derived
2190
   from the size of the operation.  The PC is always kept aligned on even
2191
   word addresses.  */
2192
 
2193
static void
2194
process_autoincrement (int size, unsigned short inst, inst_env_type *inst_env)
2195
{
2196
  if (size == INST_BYTE_SIZE)
2197
    {
2198
      inst_env->reg[cris_get_operand1 (inst)] += 1;
2199
 
2200
      /* The PC must be word aligned, so increase the PC with one
2201
         word even if the size is byte.  */
2202
      if (cris_get_operand1 (inst) == REG_PC)
2203
        {
2204
          inst_env->reg[REG_PC] += 1;
2205
        }
2206
    }
2207
  else if (size == INST_WORD_SIZE)
2208
    {
2209
      inst_env->reg[cris_get_operand1 (inst)] += 2;
2210
    }
2211
  else if (size == INST_DWORD_SIZE)
2212
    {
2213
      inst_env->reg[cris_get_operand1 (inst)] += 4;
2214
    }
2215
  else
2216
    {
2217
      /* Invalid size.  */
2218
      inst_env->invalid = 1;
2219
    }
2220
}
2221
 
2222
/* Just a forward declaration.  */
2223
 
2224
static unsigned long get_data_from_address (unsigned short *inst,
2225
                                            CORE_ADDR address,
2226
                                            enum bfd_endian byte_order);
2227
 
2228
/* Calculates the prefix value for the general case of offset addressing
2229
   mode.  */
2230
 
2231
static void
2232
bdap_prefix (unsigned short inst, inst_env_type *inst_env)
2233
{
2234
 
2235
  long offset;
2236
 
2237
  /* It's invalid to be in a delay slot.  */
2238
  if (inst_env->slot_needed || inst_env->prefix_found)
2239
    {
2240
      inst_env->invalid = 1;
2241
      return;
2242
    }
2243
 
2244
  /* The calculation of prefix_value used to be after process_autoincrement,
2245
     but that fails for an instruction such as jsr [$r0+12] which is encoded
2246
     as 5f0d 0c00 30b9 when compiled with -fpic.  Since PC is operand1 it
2247
     mustn't be incremented until we have read it and what it points at.  */
2248
  inst_env->prefix_value = inst_env->reg[cris_get_operand2 (inst)];
2249
 
2250
  /* The offset is an indirection of the contents of the operand1 register.  */
2251
  inst_env->prefix_value +=
2252
    get_data_from_address (&inst, inst_env->reg[cris_get_operand1 (inst)],
2253
                           inst_env->byte_order);
2254
 
2255
  if (cris_get_mode (inst) == AUTOINC_MODE)
2256
    {
2257
      process_autoincrement (cris_get_size (inst), inst, inst_env);
2258
    }
2259
 
2260
  /* A prefix doesn't change the xflag_found.  But the rest of the flags
2261
     need updating.  */
2262
  inst_env->slot_needed = 0;
2263
  inst_env->prefix_found = 1;
2264
}
2265
 
2266
/* Calculates the prefix value for the index addressing mode.  */
2267
 
2268
static void
2269
biap_prefix (unsigned short inst, inst_env_type *inst_env)
2270
{
2271
  /* It's invalid to be in a delay slot.  I can't see that it's possible to
2272
     have a prefix to this instruction.  So I will treat this as invalid.  */
2273
  if (inst_env->slot_needed || inst_env->prefix_found)
2274
    {
2275
      inst_env->invalid = 1;
2276
      return;
2277
    }
2278
 
2279
  inst_env->prefix_value = inst_env->reg[cris_get_operand1 (inst)];
2280
 
2281
  /* The offset is the operand2 value shifted the size of the instruction
2282
     to the left.  */
2283
  inst_env->prefix_value +=
2284
    inst_env->reg[cris_get_operand2 (inst)] << cris_get_size (inst);
2285
 
2286
  /* If the PC is operand1 (base) the address used is the address after
2287
     the main instruction, i.e. address + 2 (the PC is already compensated
2288
     for the prefix operation).  */
2289
  if (cris_get_operand1 (inst) == REG_PC)
2290
    {
2291
      inst_env->prefix_value += 2;
2292
    }
2293
 
2294
  /* A prefix doesn't change the xflag_found.  But the rest of the flags
2295
     need updating.  */
2296
  inst_env->slot_needed = 0;
2297
  inst_env->xflag_found = 0;
2298
  inst_env->prefix_found = 1;
2299
}
2300
 
2301
/* Calculates the prefix value for the double indirect addressing mode.  */
2302
 
2303
static void
2304
dip_prefix (unsigned short inst, inst_env_type *inst_env)
2305
{
2306
 
2307
  CORE_ADDR address;
2308
 
2309
  /* It's invalid to be in a delay slot.  */
2310
  if (inst_env->slot_needed || inst_env->prefix_found)
2311
    {
2312
      inst_env->invalid = 1;
2313
      return;
2314
    }
2315
 
2316
  /* The prefix value is one dereference of the contents of the operand1
2317
     register.  */
2318
  address = (CORE_ADDR) inst_env->reg[cris_get_operand1 (inst)];
2319
  inst_env->prefix_value
2320
    = read_memory_unsigned_integer (address, 4, inst_env->byte_order);
2321
 
2322
  /* Check if the mode is autoincrement.  */
2323
  if (cris_get_mode (inst) == AUTOINC_MODE)
2324
    {
2325
      inst_env->reg[cris_get_operand1 (inst)] += 4;
2326
    }
2327
 
2328
  /* A prefix doesn't change the xflag_found.  But the rest of the flags
2329
     need updating.  */
2330
  inst_env->slot_needed = 0;
2331
  inst_env->xflag_found = 0;
2332
  inst_env->prefix_found = 1;
2333
}
2334
 
2335
/* Finds the destination for a branch with 8-bits offset.  */
2336
 
2337
static void
2338
eight_bit_offset_branch_op (unsigned short inst, inst_env_type *inst_env)
2339
{
2340
 
2341
  short offset;
2342
 
2343
  /* If we have a prefix or are in a delay slot it's bad.  */
2344
  if (inst_env->slot_needed || inst_env->prefix_found)
2345
    {
2346
      inst_env->invalid = 1;
2347
      return;
2348
    }
2349
 
2350
  /* We have a branch, find out where the branch will land.  */
2351
  offset = cris_get_branch_short_offset (inst);
2352
 
2353
  /* Check if the offset is signed.  */
2354
  if (offset & BRANCH_SIGNED_SHORT_OFFSET_MASK)
2355
    {
2356
      offset |= 0xFF00;
2357
    }
2358
 
2359
  /* The offset ends with the sign bit, set it to zero.  The address
2360
     should always be word aligned.  */
2361
  offset &= ~BRANCH_SIGNED_SHORT_OFFSET_MASK;
2362
 
2363
  inst_env->branch_found = 1;
2364
  inst_env->branch_break_address = inst_env->reg[REG_PC] + offset;
2365
 
2366
  inst_env->slot_needed = 1;
2367
  inst_env->prefix_found = 0;
2368
  inst_env->xflag_found = 0;
2369
  inst_env->disable_interrupt = 1;
2370
}
2371
 
2372
/* Finds the destination for a branch with 16-bits offset.  */
2373
 
2374
static void
2375
sixteen_bit_offset_branch_op (unsigned short inst, inst_env_type *inst_env)
2376
{
2377
  short offset;
2378
 
2379
  /* If we have a prefix or is in a delay slot it's bad.  */
2380
  if (inst_env->slot_needed || inst_env->prefix_found)
2381
    {
2382
      inst_env->invalid = 1;
2383
      return;
2384
    }
2385
 
2386
  /* We have a branch, find out the offset for the branch.  */
2387
  offset = read_memory_integer (inst_env->reg[REG_PC], 2, inst_env->byte_order);
2388
 
2389
  /* The instruction is one word longer than normal, so add one word
2390
     to the PC.  */
2391
  inst_env->reg[REG_PC] += 2;
2392
 
2393
  inst_env->branch_found = 1;
2394
  inst_env->branch_break_address = inst_env->reg[REG_PC] + offset;
2395
 
2396
 
2397
  inst_env->slot_needed = 1;
2398
  inst_env->prefix_found = 0;
2399
  inst_env->xflag_found = 0;
2400
  inst_env->disable_interrupt = 1;
2401
}
2402
 
2403
/* Handles the ABS instruction.  */
2404
 
2405
static void
2406
abs_op (unsigned short inst, inst_env_type *inst_env)
2407
{
2408
 
2409
  long value;
2410
 
2411
  /* ABS can't have a prefix, so it's bad if it does.  */
2412
  if (inst_env->prefix_found)
2413
    {
2414
      inst_env->invalid = 1;
2415
      return;
2416
    }
2417
 
2418
  /* Check if the operation affects the PC.  */
2419
  if (cris_get_operand2 (inst) == REG_PC)
2420
    {
2421
 
2422
      /* It's invalid to change to the PC if we are in a delay slot.  */
2423
      if (inst_env->slot_needed)
2424
        {
2425
          inst_env->invalid = 1;
2426
          return;
2427
        }
2428
 
2429
      value = (long) inst_env->reg[REG_PC];
2430
 
2431
      /* The value of abs (SIGNED_DWORD_MASK) is SIGNED_DWORD_MASK.  */
2432
      if (value != SIGNED_DWORD_MASK)
2433
        {
2434
          value = -value;
2435
          inst_env->reg[REG_PC] = (long) value;
2436
        }
2437
    }
2438
 
2439
  inst_env->slot_needed = 0;
2440
  inst_env->prefix_found = 0;
2441
  inst_env->xflag_found = 0;
2442
  inst_env->disable_interrupt = 0;
2443
}
2444
 
2445
/* Handles the ADDI instruction.  */
2446
 
2447
static void
2448
addi_op (unsigned short inst, inst_env_type *inst_env)
2449
{
2450
  /* It's invalid to have the PC as base register.  And ADDI can't have
2451
     a prefix.  */
2452
  if (inst_env->prefix_found || (cris_get_operand1 (inst) == REG_PC))
2453
    {
2454
      inst_env->invalid = 1;
2455
      return;
2456
    }
2457
 
2458
  inst_env->slot_needed = 0;
2459
  inst_env->prefix_found = 0;
2460
  inst_env->xflag_found = 0;
2461
  inst_env->disable_interrupt = 0;
2462
}
2463
 
2464
/* Handles the ASR instruction.  */
2465
 
2466
static void
2467
asr_op (unsigned short inst, inst_env_type *inst_env)
2468
{
2469
  int shift_steps;
2470
  unsigned long value;
2471
  unsigned long signed_extend_mask = 0;
2472
 
2473
  /* ASR can't have a prefix, so check that it doesn't.  */
2474
  if (inst_env->prefix_found)
2475
    {
2476
      inst_env->invalid = 1;
2477
      return;
2478
    }
2479
 
2480
  /* Check if the PC is the target register.  */
2481
  if (cris_get_operand2 (inst) == REG_PC)
2482
    {
2483
      /* It's invalid to change the PC in a delay slot.  */
2484
      if (inst_env->slot_needed)
2485
        {
2486
          inst_env->invalid = 1;
2487
          return;
2488
        }
2489
      /* Get the number of bits to shift.  */
2490
      shift_steps = cris_get_asr_shift_steps (inst_env->reg[cris_get_operand1 (inst)]);
2491
      value = inst_env->reg[REG_PC];
2492
 
2493
      /* Find out how many bits the operation should apply to.  */
2494
      if (cris_get_size (inst) == INST_BYTE_SIZE)
2495
        {
2496
          if (value & SIGNED_BYTE_MASK)
2497
            {
2498
              signed_extend_mask = 0xFF;
2499
              signed_extend_mask = signed_extend_mask >> shift_steps;
2500
              signed_extend_mask = ~signed_extend_mask;
2501
            }
2502
          value = value >> shift_steps;
2503
          value |= signed_extend_mask;
2504
          value &= 0xFF;
2505
          inst_env->reg[REG_PC] &= 0xFFFFFF00;
2506
          inst_env->reg[REG_PC] |= value;
2507
        }
2508
      else if (cris_get_size (inst) == INST_WORD_SIZE)
2509
        {
2510
          if (value & SIGNED_WORD_MASK)
2511
            {
2512
              signed_extend_mask = 0xFFFF;
2513
              signed_extend_mask = signed_extend_mask >> shift_steps;
2514
              signed_extend_mask = ~signed_extend_mask;
2515
            }
2516
          value = value >> shift_steps;
2517
          value |= signed_extend_mask;
2518
          value &= 0xFFFF;
2519
          inst_env->reg[REG_PC] &= 0xFFFF0000;
2520
          inst_env->reg[REG_PC] |= value;
2521
        }
2522
      else if (cris_get_size (inst) == INST_DWORD_SIZE)
2523
        {
2524
          if (value & SIGNED_DWORD_MASK)
2525
            {
2526
              signed_extend_mask = 0xFFFFFFFF;
2527
              signed_extend_mask = signed_extend_mask >> shift_steps;
2528
              signed_extend_mask = ~signed_extend_mask;
2529
            }
2530
          value = value >> shift_steps;
2531
          value |= signed_extend_mask;
2532
          inst_env->reg[REG_PC]  = value;
2533
        }
2534
    }
2535
  inst_env->slot_needed = 0;
2536
  inst_env->prefix_found = 0;
2537
  inst_env->xflag_found = 0;
2538
  inst_env->disable_interrupt = 0;
2539
}
2540
 
2541
/* Handles the ASRQ instruction.  */
2542
 
2543
static void
2544
asrq_op (unsigned short inst, inst_env_type *inst_env)
2545
{
2546
 
2547
  int shift_steps;
2548
  unsigned long value;
2549
  unsigned long signed_extend_mask = 0;
2550
 
2551
  /* ASRQ can't have a prefix, so check that it doesn't.  */
2552
  if (inst_env->prefix_found)
2553
    {
2554
      inst_env->invalid = 1;
2555
      return;
2556
    }
2557
 
2558
  /* Check if the PC is the target register.  */
2559
  if (cris_get_operand2 (inst) == REG_PC)
2560
    {
2561
 
2562
      /* It's invalid to change the PC in a delay slot.  */
2563
      if (inst_env->slot_needed)
2564
        {
2565
          inst_env->invalid = 1;
2566
          return;
2567
        }
2568
      /* The shift size is given as a 5 bit quick value, i.e. we don't
2569
         want the the sign bit of the quick value.  */
2570
      shift_steps = cris_get_asr_shift_steps (inst);
2571
      value = inst_env->reg[REG_PC];
2572
      if (value & SIGNED_DWORD_MASK)
2573
        {
2574
          signed_extend_mask = 0xFFFFFFFF;
2575
          signed_extend_mask = signed_extend_mask >> shift_steps;
2576
          signed_extend_mask = ~signed_extend_mask;
2577
        }
2578
      value = value >> shift_steps;
2579
      value |= signed_extend_mask;
2580
      inst_env->reg[REG_PC]  = value;
2581
    }
2582
  inst_env->slot_needed = 0;
2583
  inst_env->prefix_found = 0;
2584
  inst_env->xflag_found = 0;
2585
  inst_env->disable_interrupt = 0;
2586
}
2587
 
2588
/* Handles the AX, EI and SETF instruction.  */
2589
 
2590
static void
2591
ax_ei_setf_op (unsigned short inst, inst_env_type *inst_env)
2592
{
2593
  if (inst_env->prefix_found)
2594
    {
2595
      inst_env->invalid = 1;
2596
      return;
2597
    }
2598
  /* Check if the instruction is setting the X flag.  */
2599
  if (cris_is_xflag_bit_on (inst))
2600
    {
2601
      inst_env->xflag_found = 1;
2602
    }
2603
  else
2604
    {
2605
      inst_env->xflag_found = 0;
2606
    }
2607
  inst_env->slot_needed = 0;
2608
  inst_env->prefix_found = 0;
2609
  inst_env->disable_interrupt = 1;
2610
}
2611
 
2612
/* Checks if the instruction is in assign mode.  If so, it updates the assign
2613
   register.  Note that check_assign assumes that the caller has checked that
2614
   there is a prefix to this instruction.  The mode check depends on this.  */
2615
 
2616
static void
2617
check_assign (unsigned short inst, inst_env_type *inst_env)
2618
{
2619
  /* Check if it's an assign addressing mode.  */
2620
  if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
2621
    {
2622
      /* Assign the prefix value to operand 1.  */
2623
      inst_env->reg[cris_get_operand1 (inst)] = inst_env->prefix_value;
2624
    }
2625
}
2626
 
2627
/* Handles the 2-operand BOUND instruction.  */
2628
 
2629
static void
2630
two_operand_bound_op (unsigned short inst, inst_env_type *inst_env)
2631
{
2632
  /* It's invalid to have the PC as the index operand.  */
2633
  if (cris_get_operand2 (inst) == REG_PC)
2634
    {
2635
      inst_env->invalid = 1;
2636
      return;
2637
    }
2638
  /* Check if we have a prefix.  */
2639
  if (inst_env->prefix_found)
2640
    {
2641
      check_assign (inst, inst_env);
2642
    }
2643
  /* Check if this is an autoincrement mode.  */
2644
  else if (cris_get_mode (inst) == AUTOINC_MODE)
2645
    {
2646
      /* It's invalid to change the PC in a delay slot.  */
2647
      if (inst_env->slot_needed)
2648
        {
2649
          inst_env->invalid = 1;
2650
          return;
2651
        }
2652
      process_autoincrement (cris_get_size (inst), inst, inst_env);
2653
    }
2654
  inst_env->slot_needed = 0;
2655
  inst_env->prefix_found = 0;
2656
  inst_env->xflag_found = 0;
2657
  inst_env->disable_interrupt = 0;
2658
}
2659
 
2660
/* Handles the 3-operand BOUND instruction.  */
2661
 
2662
static void
2663
three_operand_bound_op (unsigned short inst, inst_env_type *inst_env)
2664
{
2665
  /* It's an error if we haven't got a prefix.  And it's also an error
2666
     if the PC is the destination register.  */
2667
  if ((!inst_env->prefix_found) || (cris_get_operand1 (inst) == REG_PC))
2668
    {
2669
      inst_env->invalid = 1;
2670
      return;
2671
    }
2672
  inst_env->slot_needed = 0;
2673
  inst_env->prefix_found = 0;
2674
  inst_env->xflag_found = 0;
2675
  inst_env->disable_interrupt = 0;
2676
}
2677
 
2678
/* Clears the status flags in inst_env.  */
2679
 
2680
static void
2681
btst_nop_op (unsigned short inst, inst_env_type *inst_env)
2682
{
2683
  /* It's an error if we have got a prefix.  */
2684
  if (inst_env->prefix_found)
2685
    {
2686
      inst_env->invalid = 1;
2687
      return;
2688
    }
2689
 
2690
  inst_env->slot_needed = 0;
2691
  inst_env->prefix_found = 0;
2692
  inst_env->xflag_found = 0;
2693
  inst_env->disable_interrupt = 0;
2694
}
2695
 
2696
/* Clears the status flags in inst_env.  */
2697
 
2698
static void
2699
clearf_di_op (unsigned short inst, inst_env_type *inst_env)
2700
{
2701
  /* It's an error if we have got a prefix.  */
2702
  if (inst_env->prefix_found)
2703
    {
2704
      inst_env->invalid = 1;
2705
      return;
2706
    }
2707
 
2708
  inst_env->slot_needed = 0;
2709
  inst_env->prefix_found = 0;
2710
  inst_env->xflag_found = 0;
2711
  inst_env->disable_interrupt = 1;
2712
}
2713
 
2714
/* Handles the CLEAR instruction if it's in register mode.  */
2715
 
2716
static void
2717
reg_mode_clear_op (unsigned short inst, inst_env_type *inst_env)
2718
{
2719
  /* Check if the target is the PC.  */
2720
  if (cris_get_operand2 (inst) == REG_PC)
2721
    {
2722
      /* The instruction will clear the instruction's size bits.  */
2723
      int clear_size = cris_get_clear_size (inst);
2724
      if (clear_size == INST_BYTE_SIZE)
2725
        {
2726
          inst_env->delay_slot_pc = inst_env->reg[REG_PC] & 0xFFFFFF00;
2727
        }
2728
      if (clear_size == INST_WORD_SIZE)
2729
        {
2730
          inst_env->delay_slot_pc = inst_env->reg[REG_PC] & 0xFFFF0000;
2731
        }
2732
      if (clear_size == INST_DWORD_SIZE)
2733
        {
2734
          inst_env->delay_slot_pc = 0x0;
2735
        }
2736
      /* The jump will be delayed with one delay slot.  So we need a delay
2737
         slot.  */
2738
      inst_env->slot_needed = 1;
2739
      inst_env->delay_slot_pc_active = 1;
2740
    }
2741
  else
2742
    {
2743
      /* The PC will not change => no delay slot.  */
2744
      inst_env->slot_needed = 0;
2745
    }
2746
  inst_env->prefix_found = 0;
2747
  inst_env->xflag_found = 0;
2748
  inst_env->disable_interrupt = 0;
2749
}
2750
 
2751
/* Handles the TEST instruction if it's in register mode.  */
2752
 
2753
static void
2754
reg_mode_test_op (unsigned short inst, inst_env_type *inst_env)
2755
{
2756
  /* It's an error if we have got a prefix.  */
2757
  if (inst_env->prefix_found)
2758
    {
2759
      inst_env->invalid = 1;
2760
      return;
2761
    }
2762
  inst_env->slot_needed = 0;
2763
  inst_env->prefix_found = 0;
2764
  inst_env->xflag_found = 0;
2765
  inst_env->disable_interrupt = 0;
2766
 
2767
}
2768
 
2769
/* Handles the CLEAR and TEST instruction if the instruction isn't
2770
   in register mode.  */
2771
 
2772
static void
2773
none_reg_mode_clear_test_op (unsigned short inst, inst_env_type *inst_env)
2774
{
2775
  /* Check if we are in a prefix mode.  */
2776
  if (inst_env->prefix_found)
2777
    {
2778
      /* The only way the PC can change is if this instruction is in
2779
         assign addressing mode.  */
2780
      check_assign (inst, inst_env);
2781
    }
2782
  /* Indirect mode can't change the PC so just check if the mode is
2783
     autoincrement.  */
2784
  else if (cris_get_mode (inst) == AUTOINC_MODE)
2785
    {
2786
      process_autoincrement (cris_get_size (inst), inst, inst_env);
2787
    }
2788
  inst_env->slot_needed = 0;
2789
  inst_env->prefix_found = 0;
2790
  inst_env->xflag_found = 0;
2791
  inst_env->disable_interrupt = 0;
2792
}
2793
 
2794
/* Checks that the PC isn't the destination register or the instructions has
2795
   a prefix.  */
2796
 
2797
static void
2798
dstep_logshift_mstep_neg_not_op (unsigned short inst, inst_env_type *inst_env)
2799
{
2800
  /* It's invalid to have the PC as the destination.  The instruction can't
2801
     have a prefix.  */
2802
  if ((cris_get_operand2 (inst) == REG_PC) || inst_env->prefix_found)
2803
    {
2804
      inst_env->invalid = 1;
2805
      return;
2806
    }
2807
 
2808
  inst_env->slot_needed = 0;
2809
  inst_env->prefix_found = 0;
2810
  inst_env->xflag_found = 0;
2811
  inst_env->disable_interrupt = 0;
2812
}
2813
 
2814
/* Checks that the instruction doesn't have a prefix.  */
2815
 
2816
static void
2817
break_op (unsigned short inst, inst_env_type *inst_env)
2818
{
2819
  /* The instruction can't have a prefix.  */
2820
  if (inst_env->prefix_found)
2821
    {
2822
      inst_env->invalid = 1;
2823
      return;
2824
    }
2825
 
2826
  inst_env->slot_needed = 0;
2827
  inst_env->prefix_found = 0;
2828
  inst_env->xflag_found = 0;
2829
  inst_env->disable_interrupt = 1;
2830
}
2831
 
2832
/* Checks that the PC isn't the destination register and that the instruction
2833
   doesn't have a prefix.  */
2834
 
2835
static void
2836
scc_op (unsigned short inst, inst_env_type *inst_env)
2837
{
2838
  /* It's invalid to have the PC as the destination.  The instruction can't
2839
     have a prefix.  */
2840
  if ((cris_get_operand2 (inst) == REG_PC) || inst_env->prefix_found)
2841
    {
2842
      inst_env->invalid = 1;
2843
      return;
2844
    }
2845
 
2846
  inst_env->slot_needed = 0;
2847
  inst_env->prefix_found = 0;
2848
  inst_env->xflag_found = 0;
2849
  inst_env->disable_interrupt = 1;
2850
}
2851
 
2852
/* Handles the register mode JUMP instruction.  */
2853
 
2854
static void
2855
reg_mode_jump_op (unsigned short inst, inst_env_type *inst_env)
2856
{
2857
  /* It's invalid to do a JUMP in a delay slot.  The mode is register, so
2858
     you can't have a prefix.  */
2859
  if ((inst_env->slot_needed) || (inst_env->prefix_found))
2860
    {
2861
      inst_env->invalid = 1;
2862
      return;
2863
    }
2864
 
2865
  /* Just change the PC.  */
2866
  inst_env->reg[REG_PC] = inst_env->reg[cris_get_operand1 (inst)];
2867
  inst_env->slot_needed = 0;
2868
  inst_env->prefix_found = 0;
2869
  inst_env->xflag_found = 0;
2870
  inst_env->disable_interrupt = 1;
2871
}
2872
 
2873
/* Handles the JUMP instruction for all modes except register.  */
2874
 
2875
static void
2876
none_reg_mode_jump_op (unsigned short inst, inst_env_type *inst_env)
2877
{
2878
  unsigned long newpc;
2879
  CORE_ADDR address;
2880
 
2881
  /* It's invalid to do a JUMP in a delay slot.  */
2882
  if (inst_env->slot_needed)
2883
    {
2884
      inst_env->invalid = 1;
2885
    }
2886
  else
2887
    {
2888
      /* Check if we have a prefix.  */
2889
      if (inst_env->prefix_found)
2890
        {
2891
          check_assign (inst, inst_env);
2892
 
2893
          /* Get the new value for the the PC.  */
2894
          newpc =
2895
            read_memory_unsigned_integer ((CORE_ADDR) inst_env->prefix_value,
2896
                                          4, inst_env->byte_order);
2897
        }
2898
      else
2899
        {
2900
          /* Get the new value for the PC.  */
2901
          address = (CORE_ADDR) inst_env->reg[cris_get_operand1 (inst)];
2902
          newpc = read_memory_unsigned_integer (address,
2903
                                                4, inst_env->byte_order);
2904
 
2905
          /* Check if we should increment a register.  */
2906
          if (cris_get_mode (inst) == AUTOINC_MODE)
2907
            {
2908
              inst_env->reg[cris_get_operand1 (inst)] += 4;
2909
            }
2910
        }
2911
      inst_env->reg[REG_PC] = newpc;
2912
    }
2913
  inst_env->slot_needed = 0;
2914
  inst_env->prefix_found = 0;
2915
  inst_env->xflag_found = 0;
2916
  inst_env->disable_interrupt = 1;
2917
}
2918
 
2919
/* Handles moves to special registers (aka P-register) for all modes.  */
2920
 
2921
static void
2922
move_to_preg_op (struct gdbarch *gdbarch, unsigned short inst,
2923
                 inst_env_type *inst_env)
2924
{
2925
  if (inst_env->prefix_found)
2926
    {
2927
      /* The instruction has a prefix that means we are only interested if
2928
         the instruction is in assign mode.  */
2929
      if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
2930
        {
2931
          /* The prefix handles the problem if we are in a delay slot.  */
2932
          if (cris_get_operand1 (inst) == REG_PC)
2933
            {
2934
              /* Just take care of the assign.  */
2935
              check_assign (inst, inst_env);
2936
            }
2937
        }
2938
    }
2939
  else if (cris_get_mode (inst) == AUTOINC_MODE)
2940
    {
2941
      /* The instruction doesn't have a prefix, the only case left that we
2942
         are interested in is the autoincrement mode.  */
2943
      if (cris_get_operand1 (inst) == REG_PC)
2944
        {
2945
          /* If the PC is to be incremented it's invalid to be in a
2946
             delay slot.  */
2947
          if (inst_env->slot_needed)
2948
            {
2949
              inst_env->invalid = 1;
2950
              return;
2951
            }
2952
 
2953
          /* The increment depends on the size of the special register.  */
2954
          if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
2955
            {
2956
              process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
2957
            }
2958
          else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
2959
            {
2960
              process_autoincrement (INST_WORD_SIZE, inst, inst_env);
2961
            }
2962
          else
2963
            {
2964
              process_autoincrement (INST_DWORD_SIZE, inst, inst_env);
2965
            }
2966
        }
2967
    }
2968
  inst_env->slot_needed = 0;
2969
  inst_env->prefix_found = 0;
2970
  inst_env->xflag_found = 0;
2971
  inst_env->disable_interrupt = 1;
2972
}
2973
 
2974
/* Handles moves from special registers (aka P-register) for all modes
2975
   except register.  */
2976
 
2977
static void
2978
none_reg_mode_move_from_preg_op (struct gdbarch *gdbarch, unsigned short inst,
2979
                                 inst_env_type *inst_env)
2980
{
2981
  if (inst_env->prefix_found)
2982
    {
2983
      /* The instruction has a prefix that means we are only interested if
2984
         the instruction is in assign mode.  */
2985
      if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
2986
        {
2987
          /* The prefix handles the problem if we are in a delay slot.  */
2988
          if (cris_get_operand1 (inst) == REG_PC)
2989
            {
2990
              /* Just take care of the assign.  */
2991
              check_assign (inst, inst_env);
2992
            }
2993
        }
2994
    }
2995
  /* The instruction doesn't have a prefix, the only case left that we
2996
     are interested in is the autoincrement mode.  */
2997
  else if (cris_get_mode (inst) == AUTOINC_MODE)
2998
    {
2999
      if (cris_get_operand1 (inst) == REG_PC)
3000
        {
3001
          /* If the PC is to be incremented it's invalid to be in a
3002
             delay slot.  */
3003
          if (inst_env->slot_needed)
3004
            {
3005
              inst_env->invalid = 1;
3006
              return;
3007
            }
3008
 
3009
          /* The increment depends on the size of the special register.  */
3010
          if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
3011
            {
3012
              process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
3013
            }
3014
          else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
3015
            {
3016
              process_autoincrement (INST_WORD_SIZE, inst, inst_env);
3017
            }
3018
          else
3019
            {
3020
              process_autoincrement (INST_DWORD_SIZE, inst, inst_env);
3021
            }
3022
        }
3023
    }
3024
  inst_env->slot_needed = 0;
3025
  inst_env->prefix_found = 0;
3026
  inst_env->xflag_found = 0;
3027
  inst_env->disable_interrupt = 1;
3028
}
3029
 
3030
/* Handles moves from special registers (aka P-register) when the mode
3031
   is register.  */
3032
 
3033
static void
3034
reg_mode_move_from_preg_op (unsigned short inst, inst_env_type *inst_env)
3035
{
3036
  /* Register mode move from special register can't have a prefix.  */
3037
  if (inst_env->prefix_found)
3038
    {
3039
      inst_env->invalid = 1;
3040
      return;
3041
    }
3042
 
3043
  if (cris_get_operand1 (inst) == REG_PC)
3044
    {
3045
      /* It's invalid to change the PC in a delay slot.  */
3046
      if (inst_env->slot_needed)
3047
        {
3048
          inst_env->invalid = 1;
3049
          return;
3050
        }
3051
      /* The destination is the PC, the jump will have a delay slot.  */
3052
      inst_env->delay_slot_pc = inst_env->preg[cris_get_operand2 (inst)];
3053
      inst_env->slot_needed = 1;
3054
      inst_env->delay_slot_pc_active = 1;
3055
    }
3056
  else
3057
    {
3058
      /* If the destination isn't PC, there will be no jump.  */
3059
      inst_env->slot_needed = 0;
3060
    }
3061
  inst_env->prefix_found = 0;
3062
  inst_env->xflag_found = 0;
3063
  inst_env->disable_interrupt = 1;
3064
}
3065
 
3066
/* Handles the MOVEM from memory to general register instruction.  */
3067
 
3068
static void
3069
move_mem_to_reg_movem_op (unsigned short inst, inst_env_type *inst_env)
3070
{
3071
  if (inst_env->prefix_found)
3072
    {
3073
      /* The prefix handles the problem if we are in a delay slot.  Is the
3074
         MOVEM instruction going to change the PC?  */
3075
      if (cris_get_operand2 (inst) >= REG_PC)
3076
        {
3077
          inst_env->reg[REG_PC] =
3078
            read_memory_unsigned_integer (inst_env->prefix_value,
3079
                                          4, inst_env->byte_order);
3080
        }
3081
      /* The assign value is the value after the increment.  Normally, the
3082
         assign value is the value before the increment.  */
3083
      if ((cris_get_operand1 (inst) == REG_PC)
3084
          && (cris_get_mode (inst) == PREFIX_ASSIGN_MODE))
3085
        {
3086
          inst_env->reg[REG_PC] = inst_env->prefix_value;
3087
          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
3088
        }
3089
    }
3090
  else
3091
    {
3092
      /* Is the MOVEM instruction going to change the PC?  */
3093
      if (cris_get_operand2 (inst) == REG_PC)
3094
        {
3095
          /* It's invalid to change the PC in a delay slot.  */
3096
          if (inst_env->slot_needed)
3097
            {
3098
              inst_env->invalid = 1;
3099
              return;
3100
            }
3101
          inst_env->reg[REG_PC] =
3102
            read_memory_unsigned_integer (inst_env->reg[cris_get_operand1 (inst)],
3103
                                          4, inst_env->byte_order);
3104
        }
3105
      /* The increment is not depending on the size, instead it's depending
3106
         on the number of registers loaded from memory.  */
3107
      if ((cris_get_operand1 (inst) == REG_PC) && (cris_get_mode (inst) == AUTOINC_MODE))
3108
        {
3109
          /* It's invalid to change the PC in a delay slot.  */
3110
          if (inst_env->slot_needed)
3111
            {
3112
              inst_env->invalid = 1;
3113
              return;
3114
            }
3115
          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
3116
        }
3117
    }
3118
  inst_env->slot_needed = 0;
3119
  inst_env->prefix_found = 0;
3120
  inst_env->xflag_found = 0;
3121
  inst_env->disable_interrupt = 0;
3122
}
3123
 
3124
/* Handles the MOVEM to memory from general register instruction.  */
3125
 
3126
static void
3127
move_reg_to_mem_movem_op (unsigned short inst, inst_env_type *inst_env)
3128
{
3129
  if (inst_env->prefix_found)
3130
    {
3131
      /* The assign value is the value after the increment.  Normally, the
3132
         assign value is the value before the increment.  */
3133
      if ((cris_get_operand1 (inst) == REG_PC)
3134
          && (cris_get_mode (inst) == PREFIX_ASSIGN_MODE))
3135
        {
3136
          /* The prefix handles the problem if we are in a delay slot.  */
3137
          inst_env->reg[REG_PC] = inst_env->prefix_value;
3138
          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
3139
        }
3140
    }
3141
  else
3142
    {
3143
      /* The increment is not depending on the size, instead it's depending
3144
         on the number of registers loaded to memory.  */
3145
      if ((cris_get_operand1 (inst) == REG_PC) && (cris_get_mode (inst) == AUTOINC_MODE))
3146
        {
3147
          /* It's invalid to change the PC in a delay slot.  */
3148
          if (inst_env->slot_needed)
3149
            {
3150
              inst_env->invalid = 1;
3151
              return;
3152
            }
3153
          inst_env->reg[REG_PC] += 4 * (cris_get_operand2 (inst) + 1);
3154
        }
3155
    }
3156
  inst_env->slot_needed = 0;
3157
  inst_env->prefix_found = 0;
3158
  inst_env->xflag_found = 0;
3159
  inst_env->disable_interrupt = 0;
3160
}
3161
 
3162
/* Handles the intructions that's not yet implemented, by setting
3163
   inst_env->invalid to true.  */
3164
 
3165
static void
3166
not_implemented_op (unsigned short inst, inst_env_type *inst_env)
3167
{
3168
  inst_env->invalid = 1;
3169
}
3170
 
3171
/* Handles the XOR instruction.  */
3172
 
3173
static void
3174
xor_op (unsigned short inst, inst_env_type *inst_env)
3175
{
3176
  /* XOR can't have a prefix.  */
3177
  if (inst_env->prefix_found)
3178
    {
3179
      inst_env->invalid = 1;
3180
      return;
3181
    }
3182
 
3183
  /* Check if the PC is the target.  */
3184
  if (cris_get_operand2 (inst) == REG_PC)
3185
    {
3186
      /* It's invalid to change the PC in a delay slot.  */
3187
      if (inst_env->slot_needed)
3188
        {
3189
          inst_env->invalid = 1;
3190
          return;
3191
        }
3192
      inst_env->reg[REG_PC] ^= inst_env->reg[cris_get_operand1 (inst)];
3193
    }
3194
  inst_env->slot_needed = 0;
3195
  inst_env->prefix_found = 0;
3196
  inst_env->xflag_found = 0;
3197
  inst_env->disable_interrupt = 0;
3198
}
3199
 
3200
/* Handles the MULS instruction.  */
3201
 
3202
static void
3203
muls_op (unsigned short inst, inst_env_type *inst_env)
3204
{
3205
  /* MULS/U can't have a prefix.  */
3206
  if (inst_env->prefix_found)
3207
    {
3208
      inst_env->invalid = 1;
3209
      return;
3210
    }
3211
 
3212
  /* Consider it invalid if the PC is the target.  */
3213
  if (cris_get_operand2 (inst) == REG_PC)
3214
    {
3215
      inst_env->invalid = 1;
3216
      return;
3217
    }
3218
  inst_env->slot_needed = 0;
3219
  inst_env->prefix_found = 0;
3220
  inst_env->xflag_found = 0;
3221
  inst_env->disable_interrupt = 0;
3222
}
3223
 
3224
/* Handles the MULU instruction.  */
3225
 
3226
static void
3227
mulu_op (unsigned short inst, inst_env_type *inst_env)
3228
{
3229
  /* MULS/U can't have a prefix.  */
3230
  if (inst_env->prefix_found)
3231
    {
3232
      inst_env->invalid = 1;
3233
      return;
3234
    }
3235
 
3236
  /* Consider it invalid if the PC is the target.  */
3237
  if (cris_get_operand2 (inst) == REG_PC)
3238
    {
3239
      inst_env->invalid = 1;
3240
      return;
3241
    }
3242
  inst_env->slot_needed = 0;
3243
  inst_env->prefix_found = 0;
3244
  inst_env->xflag_found = 0;
3245
  inst_env->disable_interrupt = 0;
3246
}
3247
 
3248
/* Calculate the result of the instruction for ADD, SUB, CMP AND, OR and MOVE.
3249
   The MOVE instruction is the move from source to register.  */
3250
 
3251
static void
3252
add_sub_cmp_and_or_move_action (unsigned short inst, inst_env_type *inst_env,
3253
                                unsigned long source1, unsigned long source2)
3254
{
3255
  unsigned long pc_mask;
3256
  unsigned long operation_mask;
3257
 
3258
  /* Find out how many bits the operation should apply to.  */
3259
  if (cris_get_size (inst) == INST_BYTE_SIZE)
3260
    {
3261
      pc_mask = 0xFFFFFF00;
3262
      operation_mask = 0xFF;
3263
    }
3264
  else if (cris_get_size (inst) == INST_WORD_SIZE)
3265
    {
3266
      pc_mask = 0xFFFF0000;
3267
      operation_mask = 0xFFFF;
3268
    }
3269
  else if (cris_get_size (inst) == INST_DWORD_SIZE)
3270
    {
3271
      pc_mask = 0x0;
3272
      operation_mask = 0xFFFFFFFF;
3273
    }
3274
  else
3275
    {
3276
      /* The size is out of range.  */
3277
      inst_env->invalid = 1;
3278
      return;
3279
    }
3280
 
3281
  /* The instruction just works on uw_operation_mask bits.  */
3282
  source2 &= operation_mask;
3283
  source1 &= operation_mask;
3284
 
3285
  /* Now calculate the result.  The opcode's 3 first bits separates
3286
     the different actions.  */
3287
  switch (cris_get_opcode (inst) & 7)
3288
    {
3289
    case 0:  /* add */
3290
      source1 += source2;
3291
      break;
3292
 
3293
    case 1:  /* move */
3294
      source1 = source2;
3295
      break;
3296
 
3297
    case 2:  /* subtract */
3298
      source1 -= source2;
3299
      break;
3300
 
3301
    case 3:  /* compare */
3302
      break;
3303
 
3304
    case 4:  /* and */
3305
      source1 &= source2;
3306
      break;
3307
 
3308
    case 5:  /* or */
3309
      source1 |= source2;
3310
      break;
3311
 
3312
    default:
3313
      inst_env->invalid = 1;
3314
      return;
3315
 
3316
      break;
3317
    }
3318
 
3319
  /* Make sure that the result doesn't contain more than the instruction
3320
     size bits.  */
3321
  source2 &= operation_mask;
3322
 
3323
  /* Calculate the new breakpoint address.  */
3324
  inst_env->reg[REG_PC] &= pc_mask;
3325
  inst_env->reg[REG_PC] |= source1;
3326
 
3327
}
3328
 
3329
/* Extends the value from either byte or word size to a dword.  If the mode
3330
   is zero extend then the value is extended with zero.  If instead the mode
3331
   is signed extend the sign bit of the value is taken into consideration.  */
3332
 
3333
static unsigned long
3334
do_sign_or_zero_extend (unsigned long value, unsigned short *inst)
3335
{
3336
  /* The size can be either byte or word, check which one it is.
3337
     Don't check the highest bit, it's indicating if it's a zero
3338
     or sign extend.  */
3339
  if (cris_get_size (*inst) & INST_WORD_SIZE)
3340
    {
3341
      /* Word size.  */
3342
      value &= 0xFFFF;
3343
 
3344
      /* Check if the instruction is signed extend.  If so, check if value has
3345
         the sign bit on.  */
3346
      if (cris_is_signed_extend_bit_on (*inst) && (value & SIGNED_WORD_MASK))
3347
        {
3348
          value |= SIGNED_WORD_EXTEND_MASK;
3349
        }
3350
    }
3351
  else
3352
    {
3353
      /* Byte size.  */
3354
      value &= 0xFF;
3355
 
3356
      /* Check if the instruction is signed extend.  If so, check if value has
3357
         the sign bit on.  */
3358
      if (cris_is_signed_extend_bit_on (*inst) && (value & SIGNED_BYTE_MASK))
3359
        {
3360
          value |= SIGNED_BYTE_EXTEND_MASK;
3361
        }
3362
    }
3363
  /* The size should now be dword.  */
3364
  cris_set_size_to_dword (inst);
3365
  return value;
3366
}
3367
 
3368
/* Handles the register mode for the ADD, SUB, CMP, AND, OR and MOVE
3369
   instruction.  The MOVE instruction is the move from source to register.  */
3370
 
3371
static void
3372
reg_mode_add_sub_cmp_and_or_move_op (unsigned short inst,
3373
                                     inst_env_type *inst_env)
3374
{
3375
  unsigned long operand1;
3376
  unsigned long operand2;
3377
 
3378
  /* It's invalid to have a prefix to the instruction.  This is a register
3379
     mode instruction and can't have a prefix.  */
3380
  if (inst_env->prefix_found)
3381
    {
3382
      inst_env->invalid = 1;
3383
      return;
3384
    }
3385
  /* Check if the instruction has PC as its target.  */
3386
  if (cris_get_operand2 (inst) == REG_PC)
3387
    {
3388
      if (inst_env->slot_needed)
3389
        {
3390
          inst_env->invalid = 1;
3391
          return;
3392
        }
3393
      /* The instruction has the PC as its target register.  */
3394
      operand1 = inst_env->reg[cris_get_operand1 (inst)];
3395
      operand2 = inst_env->reg[REG_PC];
3396
 
3397
      /* Check if it's a extend, signed or zero instruction.  */
3398
      if (cris_get_opcode (inst) < 4)
3399
        {
3400
          operand1 = do_sign_or_zero_extend (operand1, &inst);
3401
        }
3402
      /* Calculate the PC value after the instruction, i.e. where the
3403
         breakpoint should be.  The order of the udw_operands is vital.  */
3404
      add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand1);
3405
    }
3406
  inst_env->slot_needed = 0;
3407
  inst_env->prefix_found = 0;
3408
  inst_env->xflag_found = 0;
3409
  inst_env->disable_interrupt = 0;
3410
}
3411
 
3412
/* Returns the data contained at address.  The size of the data is derived from
3413
   the size of the operation.  If the instruction is a zero or signed
3414
   extend instruction, the size field is changed in instruction.  */
3415
 
3416
static unsigned long
3417
get_data_from_address (unsigned short *inst, CORE_ADDR address, enum bfd_endian byte_order)
3418
{
3419
  int size = cris_get_size (*inst);
3420
  unsigned long value;
3421
 
3422
  /* If it's an extend instruction we don't want the signed extend bit,
3423
     because it influences the size.  */
3424
  if (cris_get_opcode (*inst) < 4)
3425
    {
3426
      size &= ~SIGNED_EXTEND_BIT_MASK;
3427
    }
3428
  /* Is there a need for checking the size?  Size should contain the number of
3429
     bytes to read.  */
3430
  size = 1 << size;
3431
  value = read_memory_unsigned_integer (address, size, byte_order);
3432
 
3433
  /* Check if it's an extend, signed or zero instruction.  */
3434
  if (cris_get_opcode (*inst) < 4)
3435
    {
3436
      value = do_sign_or_zero_extend (value, inst);
3437
    }
3438
  return value;
3439
}
3440
 
3441
/* Handles the assign addresing mode for the ADD, SUB, CMP, AND, OR and MOVE
3442
   instructions.  The MOVE instruction is the move from source to register.  */
3443
 
3444
static void
3445
handle_prefix_assign_mode_for_aritm_op (unsigned short inst,
3446
                                        inst_env_type *inst_env)
3447
{
3448
  unsigned long operand2;
3449
  unsigned long operand3;
3450
 
3451
  check_assign (inst, inst_env);
3452
  if (cris_get_operand2 (inst) == REG_PC)
3453
    {
3454
      operand2 = inst_env->reg[REG_PC];
3455
 
3456
      /* Get the value of the third operand.  */
3457
      operand3 = get_data_from_address (&inst, inst_env->prefix_value,
3458
                                        inst_env->byte_order);
3459
 
3460
      /* Calculate the PC value after the instruction, i.e. where the
3461
         breakpoint should be.  The order of the udw_operands is vital.  */
3462
      add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand3);
3463
    }
3464
  inst_env->slot_needed = 0;
3465
  inst_env->prefix_found = 0;
3466
  inst_env->xflag_found = 0;
3467
  inst_env->disable_interrupt = 0;
3468
}
3469
 
3470
/* Handles the three-operand addressing mode for the ADD, SUB, CMP, AND and
3471
   OR instructions.  Note that for this to work as expected, the calling
3472
   function must have made sure that there is a prefix to this instruction.  */
3473
 
3474
static void
3475
three_operand_add_sub_cmp_and_or_op (unsigned short inst,
3476
                                     inst_env_type *inst_env)
3477
{
3478
  unsigned long operand2;
3479
  unsigned long operand3;
3480
 
3481
  if (cris_get_operand1 (inst) == REG_PC)
3482
    {
3483
      /* The PC will be changed by the instruction.  */
3484
      operand2 = inst_env->reg[cris_get_operand2 (inst)];
3485
 
3486
      /* Get the value of the third operand.  */
3487
      operand3 = get_data_from_address (&inst, inst_env->prefix_value,
3488
                                        inst_env->byte_order);
3489
 
3490
      /* Calculate the PC value after the instruction, i.e. where the
3491
         breakpoint should be.  */
3492
      add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand3);
3493
    }
3494
  inst_env->slot_needed = 0;
3495
  inst_env->prefix_found = 0;
3496
  inst_env->xflag_found = 0;
3497
  inst_env->disable_interrupt = 0;
3498
}
3499
 
3500
/* Handles the index addresing mode for the ADD, SUB, CMP, AND, OR and MOVE
3501
   instructions.  The MOVE instruction is the move from source to register.  */
3502
 
3503
static void
3504
handle_prefix_index_mode_for_aritm_op (unsigned short inst,
3505
                                       inst_env_type *inst_env)
3506
{
3507
  if (cris_get_operand1 (inst) != cris_get_operand2 (inst))
3508
    {
3509
      /* If the instruction is MOVE it's invalid.  If the instruction is ADD,
3510
         SUB, AND or OR something weird is going on (if everything works these
3511
         instructions should end up in the three operand version).  */
3512
      inst_env->invalid = 1;
3513
      return;
3514
    }
3515
  else
3516
    {
3517
      /* three_operand_add_sub_cmp_and_or does the same as we should do here
3518
         so use it.  */
3519
      three_operand_add_sub_cmp_and_or_op (inst, inst_env);
3520
    }
3521
  inst_env->slot_needed = 0;
3522
  inst_env->prefix_found = 0;
3523
  inst_env->xflag_found = 0;
3524
  inst_env->disable_interrupt = 0;
3525
}
3526
 
3527
/* Handles the autoincrement and indirect addresing mode for the ADD, SUB,
3528
   CMP, AND OR and MOVE instruction.  The MOVE instruction is the move from
3529
   source to register.  */
3530
 
3531
static void
3532
handle_inc_and_index_mode_for_aritm_op (unsigned short inst,
3533
                                        inst_env_type *inst_env)
3534
{
3535
  unsigned long operand1;
3536
  unsigned long operand2;
3537
  unsigned long operand3;
3538
  int size;
3539
 
3540
  /* The instruction is either an indirect or autoincrement addressing mode.
3541
     Check if the destination register is the PC.  */
3542
  if (cris_get_operand2 (inst) == REG_PC)
3543
    {
3544
      /* Must be done here, get_data_from_address may change the size
3545
         field.  */
3546
      size = cris_get_size (inst);
3547
      operand2 = inst_env->reg[REG_PC];
3548
 
3549
      /* Get the value of the third operand, i.e. the indirect operand.  */
3550
      operand1 = inst_env->reg[cris_get_operand1 (inst)];
3551
      operand3 = get_data_from_address (&inst, operand1, inst_env->byte_order);
3552
 
3553
      /* Calculate the PC value after the instruction, i.e. where the
3554
         breakpoint should be.  The order of the udw_operands is vital.  */
3555
      add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand3);
3556
    }
3557
  /* If this is an autoincrement addressing mode, check if the increment
3558
     changes the PC.  */
3559
  if ((cris_get_operand1 (inst) == REG_PC) && (cris_get_mode (inst) == AUTOINC_MODE))
3560
    {
3561
      /* Get the size field.  */
3562
      size = cris_get_size (inst);
3563
 
3564
      /* If it's an extend instruction we don't want the signed extend bit,
3565
         because it influences the size.  */
3566
      if (cris_get_opcode (inst) < 4)
3567
        {
3568
          size &= ~SIGNED_EXTEND_BIT_MASK;
3569
        }
3570
      process_autoincrement (size, inst, inst_env);
3571
    }
3572
  inst_env->slot_needed = 0;
3573
  inst_env->prefix_found = 0;
3574
  inst_env->xflag_found = 0;
3575
  inst_env->disable_interrupt = 0;
3576
}
3577
 
3578
/* Handles the two-operand addressing mode, all modes except register, for
3579
   the ADD, SUB CMP, AND and OR instruction.  */
3580
 
3581
static void
3582
none_reg_mode_add_sub_cmp_and_or_move_op (unsigned short inst,
3583
                                          inst_env_type *inst_env)
3584
{
3585
  if (inst_env->prefix_found)
3586
    {
3587
      if (cris_get_mode (inst) == PREFIX_INDEX_MODE)
3588
        {
3589
          handle_prefix_index_mode_for_aritm_op (inst, inst_env);
3590
        }
3591
      else if (cris_get_mode (inst) == PREFIX_ASSIGN_MODE)
3592
        {
3593
          handle_prefix_assign_mode_for_aritm_op (inst, inst_env);
3594
        }
3595
      else
3596
        {
3597
          /* The mode is invalid for a prefixed base instruction.  */
3598
          inst_env->invalid = 1;
3599
          return;
3600
        }
3601
    }
3602
  else
3603
    {
3604
      handle_inc_and_index_mode_for_aritm_op (inst, inst_env);
3605
    }
3606
}
3607
 
3608
/* Handles the quick addressing mode for the ADD and SUB instruction.  */
3609
 
3610
static void
3611
quick_mode_add_sub_op (unsigned short inst, inst_env_type *inst_env)
3612
{
3613
  unsigned long operand1;
3614
  unsigned long operand2;
3615
 
3616
  /* It's a bad idea to be in a prefix instruction now.  This is a quick mode
3617
     instruction and can't have a prefix.  */
3618
  if (inst_env->prefix_found)
3619
    {
3620
      inst_env->invalid = 1;
3621
      return;
3622
    }
3623
 
3624
  /* Check if the instruction has PC as its target.  */
3625
  if (cris_get_operand2 (inst) == REG_PC)
3626
    {
3627
      if (inst_env->slot_needed)
3628
        {
3629
          inst_env->invalid = 1;
3630
          return;
3631
        }
3632
      operand1 = cris_get_quick_value (inst);
3633
      operand2 = inst_env->reg[REG_PC];
3634
 
3635
      /* The size should now be dword.  */
3636
      cris_set_size_to_dword (&inst);
3637
 
3638
      /* Calculate the PC value after the instruction, i.e. where the
3639
         breakpoint should be.  */
3640
      add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand1);
3641
    }
3642
  inst_env->slot_needed = 0;
3643
  inst_env->prefix_found = 0;
3644
  inst_env->xflag_found = 0;
3645
  inst_env->disable_interrupt = 0;
3646
}
3647
 
3648
/* Handles the quick addressing mode for the CMP, AND and OR instruction.  */
3649
 
3650
static void
3651
quick_mode_and_cmp_move_or_op (unsigned short inst, inst_env_type *inst_env)
3652
{
3653
  unsigned long operand1;
3654
  unsigned long operand2;
3655
 
3656
  /* It's a bad idea to be in a prefix instruction now.  This is a quick mode
3657
     instruction and can't have a prefix.  */
3658
  if (inst_env->prefix_found)
3659
    {
3660
      inst_env->invalid = 1;
3661
      return;
3662
    }
3663
  /* Check if the instruction has PC as its target.  */
3664
  if (cris_get_operand2 (inst) == REG_PC)
3665
    {
3666
      if (inst_env->slot_needed)
3667
        {
3668
          inst_env->invalid = 1;
3669
          return;
3670
        }
3671
      /* The instruction has the PC as its target register.  */
3672
      operand1 = cris_get_quick_value (inst);
3673
      operand2 = inst_env->reg[REG_PC];
3674
 
3675
      /* The quick value is signed, so check if we must do a signed extend.  */
3676
      if (operand1 & SIGNED_QUICK_VALUE_MASK)
3677
        {
3678
          /* sign extend  */
3679
          operand1 |= SIGNED_QUICK_VALUE_EXTEND_MASK;
3680
        }
3681
      /* The size should now be dword.  */
3682
      cris_set_size_to_dword (&inst);
3683
 
3684
      /* Calculate the PC value after the instruction, i.e. where the
3685
         breakpoint should be.  */
3686
      add_sub_cmp_and_or_move_action (inst, inst_env, operand2, operand1);
3687
    }
3688
  inst_env->slot_needed = 0;
3689
  inst_env->prefix_found = 0;
3690
  inst_env->xflag_found = 0;
3691
  inst_env->disable_interrupt = 0;
3692
}
3693
 
3694
/* Translate op_type to a function and call it.  */
3695
 
3696
static void
3697
cris_gdb_func (struct gdbarch *gdbarch, enum cris_op_type op_type,
3698
               unsigned short inst, inst_env_type *inst_env)
3699
{
3700
  switch (op_type)
3701
    {
3702
    case cris_not_implemented_op:
3703
      not_implemented_op (inst, inst_env);
3704
      break;
3705
 
3706
    case cris_abs_op:
3707
      abs_op (inst, inst_env);
3708
      break;
3709
 
3710
    case cris_addi_op:
3711
      addi_op (inst, inst_env);
3712
      break;
3713
 
3714
    case cris_asr_op:
3715
      asr_op (inst, inst_env);
3716
      break;
3717
 
3718
    case cris_asrq_op:
3719
      asrq_op (inst, inst_env);
3720
      break;
3721
 
3722
    case cris_ax_ei_setf_op:
3723
      ax_ei_setf_op (inst, inst_env);
3724
      break;
3725
 
3726
    case cris_bdap_prefix:
3727
      bdap_prefix (inst, inst_env);
3728
      break;
3729
 
3730
    case cris_biap_prefix:
3731
      biap_prefix (inst, inst_env);
3732
      break;
3733
 
3734
    case cris_break_op:
3735
      break_op (inst, inst_env);
3736
      break;
3737
 
3738
    case cris_btst_nop_op:
3739
      btst_nop_op (inst, inst_env);
3740
      break;
3741
 
3742
    case cris_clearf_di_op:
3743
      clearf_di_op (inst, inst_env);
3744
      break;
3745
 
3746
    case cris_dip_prefix:
3747
      dip_prefix (inst, inst_env);
3748
      break;
3749
 
3750
    case cris_dstep_logshift_mstep_neg_not_op:
3751
      dstep_logshift_mstep_neg_not_op (inst, inst_env);
3752
      break;
3753
 
3754
    case cris_eight_bit_offset_branch_op:
3755
      eight_bit_offset_branch_op (inst, inst_env);
3756
      break;
3757
 
3758
    case cris_move_mem_to_reg_movem_op:
3759
      move_mem_to_reg_movem_op (inst, inst_env);
3760
      break;
3761
 
3762
    case cris_move_reg_to_mem_movem_op:
3763
      move_reg_to_mem_movem_op (inst, inst_env);
3764
      break;
3765
 
3766
    case cris_move_to_preg_op:
3767
      move_to_preg_op (gdbarch, inst, inst_env);
3768
      break;
3769
 
3770
    case cris_muls_op:
3771
      muls_op (inst, inst_env);
3772
      break;
3773
 
3774
    case cris_mulu_op:
3775
      mulu_op (inst, inst_env);
3776
      break;
3777
 
3778
    case cris_none_reg_mode_add_sub_cmp_and_or_move_op:
3779
      none_reg_mode_add_sub_cmp_and_or_move_op (inst, inst_env);
3780
      break;
3781
 
3782
    case cris_none_reg_mode_clear_test_op:
3783
      none_reg_mode_clear_test_op (inst, inst_env);
3784
      break;
3785
 
3786
    case cris_none_reg_mode_jump_op:
3787
      none_reg_mode_jump_op (inst, inst_env);
3788
      break;
3789
 
3790
    case cris_none_reg_mode_move_from_preg_op:
3791
      none_reg_mode_move_from_preg_op (gdbarch, inst, inst_env);
3792
      break;
3793
 
3794
    case cris_quick_mode_add_sub_op:
3795
      quick_mode_add_sub_op (inst, inst_env);
3796
      break;
3797
 
3798
    case cris_quick_mode_and_cmp_move_or_op:
3799
      quick_mode_and_cmp_move_or_op (inst, inst_env);
3800
      break;
3801
 
3802
    case cris_quick_mode_bdap_prefix:
3803
      quick_mode_bdap_prefix (inst, inst_env);
3804
      break;
3805
 
3806
    case cris_reg_mode_add_sub_cmp_and_or_move_op:
3807
      reg_mode_add_sub_cmp_and_or_move_op (inst, inst_env);
3808
      break;
3809
 
3810
    case cris_reg_mode_clear_op:
3811
      reg_mode_clear_op (inst, inst_env);
3812
      break;
3813
 
3814
    case cris_reg_mode_jump_op:
3815
      reg_mode_jump_op (inst, inst_env);
3816
      break;
3817
 
3818
    case cris_reg_mode_move_from_preg_op:
3819
      reg_mode_move_from_preg_op (inst, inst_env);
3820
      break;
3821
 
3822
    case cris_reg_mode_test_op:
3823
      reg_mode_test_op (inst, inst_env);
3824
      break;
3825
 
3826
    case cris_scc_op:
3827
      scc_op (inst, inst_env);
3828
      break;
3829
 
3830
    case cris_sixteen_bit_offset_branch_op:
3831
      sixteen_bit_offset_branch_op (inst, inst_env);
3832
      break;
3833
 
3834
    case cris_three_operand_add_sub_cmp_and_or_op:
3835
      three_operand_add_sub_cmp_and_or_op (inst, inst_env);
3836
      break;
3837
 
3838
    case cris_three_operand_bound_op:
3839
      three_operand_bound_op (inst, inst_env);
3840
      break;
3841
 
3842
    case cris_two_operand_bound_op:
3843
      two_operand_bound_op (inst, inst_env);
3844
      break;
3845
 
3846
    case cris_xor_op:
3847
      xor_op (inst, inst_env);
3848
      break;
3849
    }
3850
}
3851
 
3852
/* This wrapper is to avoid cris_get_assembler being called before
3853
   exec_bfd has been set.  */
3854
 
3855
static int
3856
cris_delayed_get_disassembler (bfd_vma addr, struct disassemble_info *info)
3857
{
3858
  int (*print_insn) (bfd_vma addr, struct disassemble_info *info);
3859
  /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS
3860
     disassembler, even when there is no BFD.  Does something like
3861
     "gdb; target remote; disassmeble *0x123" work?  */
3862
  gdb_assert (exec_bfd != NULL);
3863
  print_insn = cris_get_disassembler (exec_bfd);
3864
  gdb_assert (print_insn != NULL);
3865
  return print_insn (addr, info);
3866
}
3867
 
3868
/* Copied from <asm/elf.h>.  */
3869
typedef unsigned long elf_greg_t;
3870
 
3871
/* Same as user_regs_struct struct in <asm/user.h>.  */
3872
#define CRISV10_ELF_NGREG 35
3873
typedef elf_greg_t elf_gregset_t[CRISV10_ELF_NGREG];
3874
 
3875
#define CRISV32_ELF_NGREG 32
3876
typedef elf_greg_t crisv32_elf_gregset_t[CRISV32_ELF_NGREG];
3877
 
3878
/* Unpack an elf_gregset_t into GDB's register cache.  */
3879
 
3880
static void
3881
cris_supply_gregset (struct regcache *regcache, elf_gregset_t *gregsetp)
3882
{
3883
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
3884
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3885
  int i;
3886
  elf_greg_t *regp = *gregsetp;
3887
  static char zerobuf[4] = {0};
3888
 
3889
  /* The kernel dumps all 32 registers as unsigned longs, but supply_register
3890
     knows about the actual size of each register so that's no problem.  */
3891
  for (i = 0; i < NUM_GENREGS + NUM_SPECREGS; i++)
3892
    {
3893
      regcache_raw_supply (regcache, i, (char *)&regp[i]);
3894
    }
3895
 
3896
  if (tdep->cris_version == 32)
3897
    {
3898
      /* Needed to set pseudo-register PC for CRISv32.  */
3899
      /* FIXME: If ERP is in a delay slot at this point then the PC will
3900
         be wrong.  Issue a warning to alert the user.  */
3901
      regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch),
3902
                           (char *)&regp[ERP_REGNUM]);
3903
 
3904
      if (*(char *)&regp[ERP_REGNUM] & 0x1)
3905
        fprintf_unfiltered (gdb_stderr, "Warning: PC in delay slot\n");
3906
    }
3907
}
3908
 
3909
/*  Use a local version of this function to get the correct types for
3910
    regsets, until multi-arch core support is ready.  */
3911
 
3912
static void
3913
fetch_core_registers (struct regcache *regcache,
3914
                      char *core_reg_sect, unsigned core_reg_size,
3915
                      int which, CORE_ADDR reg_addr)
3916
{
3917
  elf_gregset_t gregset;
3918
 
3919
  switch (which)
3920
    {
3921
    case 0:
3922
      if (core_reg_size != sizeof (elf_gregset_t)
3923
          && core_reg_size != sizeof (crisv32_elf_gregset_t))
3924
        {
3925
          warning (_("wrong size gregset struct in core file"));
3926
        }
3927
      else
3928
        {
3929
          memcpy (&gregset, core_reg_sect, sizeof (gregset));
3930
          cris_supply_gregset (regcache, &gregset);
3931
        }
3932
 
3933
    default:
3934
      /* We've covered all the kinds of registers we know about here,
3935
         so this must be something we wouldn't know what to do with
3936
         anyway.  Just ignore it.  */
3937
      break;
3938
    }
3939
}
3940
 
3941
static struct core_fns cris_elf_core_fns =
3942
{
3943
  bfd_target_elf_flavour,               /* core_flavour */
3944
  default_check_format,                 /* check_format */
3945
  default_core_sniffer,                 /* core_sniffer */
3946
  fetch_core_registers,                 /* core_read_registers */
3947
  NULL                                  /* next */
3948
};
3949
 
3950
extern initialize_file_ftype _initialize_cris_tdep; /* -Wmissing-prototypes */
3951
 
3952
void
3953
_initialize_cris_tdep (void)
3954
{
3955
  static struct cmd_list_element *cris_set_cmdlist;
3956
  static struct cmd_list_element *cris_show_cmdlist;
3957
 
3958
  struct cmd_list_element *c;
3959
 
3960
  gdbarch_register (bfd_arch_cris, cris_gdbarch_init, cris_dump_tdep);
3961
 
3962
  /* CRIS-specific user-commands.  */
3963
  add_setshow_uinteger_cmd ("cris-version", class_support,
3964
                            &usr_cmd_cris_version,
3965
                            _("Set the current CRIS version."),
3966
                            _("Show the current CRIS version."),
3967
                            _("\
3968
Set to 10 for CRISv10 or 32 for CRISv32 if autodetection fails.\n\
3969
Defaults to 10. "),
3970
                            set_cris_version,
3971
                            NULL, /* FIXME: i18n: Current CRIS version is %s.  */
3972
                            &setlist, &showlist);
3973
 
3974
  add_setshow_enum_cmd ("cris-mode", class_support,
3975
                        cris_modes, &usr_cmd_cris_mode,
3976
                        _("Set the current CRIS mode."),
3977
                        _("Show the current CRIS mode."),
3978
                        _("\
3979
Set to CRIS_MODE_GURU when debugging in guru mode.\n\
3980
Makes GDB use the NRP register instead of the ERP register in certain cases."),
3981
                        set_cris_mode,
3982
                        NULL, /* FIXME: i18n: Current CRIS version is %s.  */
3983
                        &setlist, &showlist);
3984
 
3985
  add_setshow_boolean_cmd ("cris-dwarf2-cfi", class_support,
3986
                           &usr_cmd_cris_dwarf2_cfi,
3987
                           _("Set the usage of Dwarf-2 CFI for CRIS."),
3988
                           _("Show the usage of Dwarf-2 CFI for CRIS."),
3989
                           _("Set this to \"off\" if using gcc-cris < R59."),
3990
                           set_cris_dwarf2_cfi,
3991
                           NULL, /* FIXME: i18n: Usage of Dwarf-2 CFI for CRIS is %d.  */
3992
                           &setlist, &showlist);
3993
 
3994
  deprecated_add_core_fns (&cris_elf_core_fns);
3995
}
3996
 
3997
/* Prints out all target specific values.  */
3998
 
3999
static void
4000
cris_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
4001
{
4002
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4003
  if (tdep != NULL)
4004
    {
4005
      fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_version = %i\n",
4006
                          tdep->cris_version);
4007
      fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_mode = %s\n",
4008
                          tdep->cris_mode);
4009
      fprintf_unfiltered (file, "cris_dump_tdep: tdep->cris_dwarf2_cfi = %i\n",
4010
                          tdep->cris_dwarf2_cfi);
4011
    }
4012
}
4013
 
4014
static void
4015
set_cris_version (char *ignore_args, int from_tty,
4016
                  struct cmd_list_element *c)
4017
{
4018
  struct gdbarch_info info;
4019
 
4020
  usr_cmd_cris_version_valid = 1;
4021
 
4022
  /* Update the current architecture, if needed.  */
4023
  gdbarch_info_init (&info);
4024
  if (!gdbarch_update_p (info))
4025
    internal_error (__FILE__, __LINE__,
4026
                    _("cris_gdbarch_update: failed to update architecture."));
4027
}
4028
 
4029
static void
4030
set_cris_mode (char *ignore_args, int from_tty,
4031
               struct cmd_list_element *c)
4032
{
4033
  struct gdbarch_info info;
4034
 
4035
  /* Update the current architecture, if needed.  */
4036
  gdbarch_info_init (&info);
4037
  if (!gdbarch_update_p (info))
4038
    internal_error (__FILE__, __LINE__,
4039
                    "cris_gdbarch_update: failed to update architecture.");
4040
}
4041
 
4042
static void
4043
set_cris_dwarf2_cfi (char *ignore_args, int from_tty,
4044
                     struct cmd_list_element *c)
4045
{
4046
  struct gdbarch_info info;
4047
 
4048
  /* Update the current architecture, if needed.  */
4049
  gdbarch_info_init (&info);
4050
  if (!gdbarch_update_p (info))
4051
    internal_error (__FILE__, __LINE__,
4052
                    _("cris_gdbarch_update: failed to update architecture."));
4053
}
4054
 
4055
static struct gdbarch *
4056
cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
4057
{
4058
  struct gdbarch *gdbarch;
4059
  struct gdbarch_tdep *tdep;
4060
  int cris_version;
4061
 
4062
  if (usr_cmd_cris_version_valid)
4063
    {
4064
      /* Trust the user's CRIS version setting.  */
4065
      cris_version = usr_cmd_cris_version;
4066
    }
4067
  else if (info.abfd && bfd_get_mach (info.abfd) == bfd_mach_cris_v32)
4068
    {
4069
      cris_version = 32;
4070
    }
4071
  else
4072
    {
4073
      /* Assume it's CRIS version 10.  */
4074
      cris_version = 10;
4075
    }
4076
 
4077
  /* Make the current settings visible to the user.  */
4078
  usr_cmd_cris_version = cris_version;
4079
 
4080
  /* Find a candidate among the list of pre-declared architectures.  */
4081
  for (arches = gdbarch_list_lookup_by_info (arches, &info);
4082
       arches != NULL;
4083
       arches = gdbarch_list_lookup_by_info (arches->next, &info))
4084
    {
4085
      if ((gdbarch_tdep (arches->gdbarch)->cris_version
4086
           == usr_cmd_cris_version)
4087
          && (gdbarch_tdep (arches->gdbarch)->cris_mode
4088
           == usr_cmd_cris_mode)
4089
          && (gdbarch_tdep (arches->gdbarch)->cris_dwarf2_cfi
4090
              == usr_cmd_cris_dwarf2_cfi))
4091
        return arches->gdbarch;
4092
    }
4093
 
4094
  /* No matching architecture was found.  Create a new one.  */
4095
  tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
4096
  gdbarch = gdbarch_alloc (&info, tdep);
4097
 
4098
  tdep->cris_version = usr_cmd_cris_version;
4099
  tdep->cris_mode = usr_cmd_cris_mode;
4100
  tdep->cris_dwarf2_cfi = usr_cmd_cris_dwarf2_cfi;
4101
 
4102
  /* INIT shall ensure that the INFO.BYTE_ORDER is non-zero.  */
4103
  switch (info.byte_order)
4104
    {
4105
    case BFD_ENDIAN_LITTLE:
4106
      /* Ok.  */
4107
      break;
4108
 
4109
    case BFD_ENDIAN_BIG:
4110
      internal_error (__FILE__, __LINE__, _("cris_gdbarch_init: big endian byte order in info"));
4111
      break;
4112
 
4113
    default:
4114
      internal_error (__FILE__, __LINE__, _("cris_gdbarch_init: unknown byte order in info"));
4115
    }
4116
 
4117
  set_gdbarch_return_value (gdbarch, cris_return_value);
4118
 
4119
  set_gdbarch_sp_regnum (gdbarch, 14);
4120
 
4121
  /* Length of ordinary registers used in push_word and a few other
4122
     places.  register_size() is the real way to know how big a
4123
     register is.  */
4124
 
4125
  set_gdbarch_double_bit (gdbarch, 64);
4126
  /* The default definition of a long double is 2 * gdbarch_double_bit,
4127
     which means we have to set this explicitly.  */
4128
  set_gdbarch_long_double_bit (gdbarch, 64);
4129
 
4130
  /* The total amount of space needed to store (in an array called registers)
4131
     GDB's copy of the machine's register state.  Note: We can not use
4132
     cris_register_size at this point, since it relies on gdbarch
4133
     being set.  */
4134
  switch (tdep->cris_version)
4135
    {
4136
    case 0:
4137
    case 1:
4138
    case 2:
4139
    case 3:
4140
    case 8:
4141
    case 9:
4142
      /* Old versions; not supported.  */
4143
      internal_error (__FILE__, __LINE__,
4144
                      _("cris_gdbarch_init: unsupported CRIS version"));
4145
      break;
4146
 
4147
    case 10:
4148
    case 11:
4149
      /* CRIS v10 and v11, a.k.a. ETRAX 100LX.  In addition to ETRAX 100,
4150
         P7 (32 bits), and P15 (32 bits) have been implemented.  */
4151
      set_gdbarch_pc_regnum (gdbarch, 15);
4152
      set_gdbarch_register_type (gdbarch, cris_register_type);
4153
      /* There are 32 registers (some of which may not be implemented).  */
4154
      set_gdbarch_num_regs (gdbarch, 32);
4155
      set_gdbarch_register_name (gdbarch, cris_register_name);
4156
      set_gdbarch_cannot_store_register (gdbarch, cris_cannot_store_register);
4157
      set_gdbarch_cannot_fetch_register (gdbarch, cris_cannot_fetch_register);
4158
 
4159
      set_gdbarch_software_single_step (gdbarch, cris_software_single_step);
4160
      break;
4161
 
4162
    case 32:
4163
      /* CRIS v32.  General registers R0 - R15 (32 bits), special registers
4164
         P0 - P15 (32 bits) except P0, P1, P3 (8 bits) and P4 (16 bits)
4165
         and pseudo-register PC (32 bits).  */
4166
      set_gdbarch_pc_regnum (gdbarch, 32);
4167
      set_gdbarch_register_type (gdbarch, crisv32_register_type);
4168
      /* 32 registers + pseudo-register PC + 16 support registers.  */
4169
      set_gdbarch_num_regs (gdbarch, 32 + 1 + 16);
4170
      set_gdbarch_register_name (gdbarch, crisv32_register_name);
4171
 
4172
      set_gdbarch_cannot_store_register
4173
        (gdbarch, crisv32_cannot_store_register);
4174
      set_gdbarch_cannot_fetch_register
4175
        (gdbarch, crisv32_cannot_fetch_register);
4176
 
4177
      set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
4178
 
4179
      set_gdbarch_single_step_through_delay
4180
        (gdbarch, crisv32_single_step_through_delay);
4181
 
4182
      break;
4183
 
4184
    default:
4185
      internal_error (__FILE__, __LINE__,
4186
                      _("cris_gdbarch_init: unknown CRIS version"));
4187
    }
4188
 
4189
  /* Dummy frame functions (shared between CRISv10 and CRISv32 since they
4190
     have the same ABI).  */
4191
  set_gdbarch_push_dummy_code (gdbarch, cris_push_dummy_code);
4192
  set_gdbarch_push_dummy_call (gdbarch, cris_push_dummy_call);
4193
  set_gdbarch_frame_align (gdbarch, cris_frame_align);
4194
  set_gdbarch_skip_prologue (gdbarch, cris_skip_prologue);
4195
 
4196
  /* The stack grows downward.  */
4197
  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
4198
 
4199
  set_gdbarch_breakpoint_from_pc (gdbarch, cris_breakpoint_from_pc);
4200
 
4201
  set_gdbarch_unwind_pc (gdbarch, cris_unwind_pc);
4202
  set_gdbarch_unwind_sp (gdbarch, cris_unwind_sp);
4203
  set_gdbarch_dummy_id (gdbarch, cris_dummy_id);
4204
 
4205
  if (tdep->cris_dwarf2_cfi == 1)
4206
    {
4207
      /* Hook in the Dwarf-2 frame sniffer.  */
4208
      set_gdbarch_dwarf2_reg_to_regnum (gdbarch, cris_dwarf2_reg_to_regnum);
4209
      dwarf2_frame_set_init_reg (gdbarch, cris_dwarf2_frame_init_reg);
4210
      dwarf2_append_unwinders (gdbarch);
4211
    }
4212
 
4213
  if (tdep->cris_mode != cris_mode_guru)
4214
    {
4215
      frame_unwind_append_unwinder (gdbarch, &cris_sigtramp_frame_unwind);
4216
    }
4217
 
4218
  frame_unwind_append_unwinder (gdbarch, &cris_frame_unwind);
4219
  frame_base_set_default (gdbarch, &cris_frame_base);
4220
 
4221
  set_solib_svr4_fetch_link_map_offsets
4222
    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
4223
 
4224
  /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS
4225
     disassembler, even when there is no BFD.  Does something like
4226
     "gdb; target remote; disassmeble *0x123" work?  */
4227
  set_gdbarch_print_insn (gdbarch, cris_delayed_get_disassembler);
4228
 
4229
  return gdbarch;
4230
}

powered by: WebSVN 2.1.0

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