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