eb7256bcffee4bb35624cd56bfb5833fbe4e9858
[deliverable/binutils-gdb.git] / gdb / cris-tdep.c
1 /* Target dependent code for CRIS, for GDB, the GNU debugger.
2 Copyright 2001, 2002, 2003 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
4316 set_gdbarch_frame_saved_pc (gdbarch, cris_frame_saved_pc);
4317 set_gdbarch_saved_pc_after_call (gdbarch, cris_saved_pc_after_call);
4318
4319 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
4320
4321 /* No extra stack alignment needed. Set to 1 by default. */
4322 set_gdbarch_extra_stack_alignment_needed (gdbarch, 0);
4323
4324 /* Helpful for backtracing and returning in a call dummy. */
4325 set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
4326
4327 /* Use target_specific function to define link map offsets. */
4328 set_solib_svr4_fetch_link_map_offsets
4329 (gdbarch, cris_linux_svr4_fetch_link_map_offsets);
4330
4331 return gdbarch;
4332 }
This page took 0.117803 seconds and 4 git commands to generate.