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