1a28b748534ebc9386cc0f20cd528f42fb2688b6
[deliverable/binutils-gdb.git] / gdb / v850-tdep.c
1 /* Target-dependent code for the NEC V850 for GDB, the GNU debugger.
2 Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 #include "defs.h"
23 #include "frame.h"
24 #include "inferior.h"
25 #include "target.h"
26 #include "value.h"
27 #include "bfd.h"
28 #include "gdb_string.h"
29 #include "gdbcore.h"
30 #include "symfile.h"
31 #include "arch-utils.h"
32 #include "regcache.h"
33 #include "symtab.h"
34
35 struct gdbarch_tdep
36 {
37 /* gdbarch target dependent data here. Currently unused for v850. */
38 };
39
40 /* Extra info which is saved in each frame_info. */
41 struct frame_extra_info
42 {
43 };
44
45 enum {
46 E_R0_REGNUM,
47 E_R1_REGNUM,
48 E_R2_REGNUM, E_SAVE1_START_REGNUM = E_R2_REGNUM, E_SAVE1_END_REGNUM = E_R2_REGNUM,
49 E_R3_REGNUM, E_SP_REGNUM = E_R3_REGNUM,
50 E_R4_REGNUM,
51 E_R5_REGNUM,
52 E_R6_REGNUM, E_ARG0_REGNUM = E_R6_REGNUM,
53 E_R7_REGNUM,
54 E_R8_REGNUM,
55 E_R9_REGNUM, E_ARGLAST_REGNUM = E_R9_REGNUM,
56 E_R10_REGNUM, E_V0_REGNUM = E_R10_REGNUM,
57 E_R11_REGNUM, E_V1_REGNUM = E_R11_REGNUM,
58 E_R12_REGNUM,
59 E_R13_REGNUM,
60 E_R14_REGNUM,
61 E_R15_REGNUM,
62 E_R16_REGNUM,
63 E_R17_REGNUM,
64 E_R18_REGNUM,
65 E_R19_REGNUM,
66 E_R20_REGNUM, E_SAVE2_START_REGNUM = E_R20_REGNUM,
67 E_R21_REGNUM,
68 E_R22_REGNUM,
69 E_R23_REGNUM,
70 E_R24_REGNUM,
71 E_R25_REGNUM,
72 E_R26_REGNUM,
73 E_R27_REGNUM,
74 E_R28_REGNUM,
75 E_R29_REGNUM, E_SAVE2_END_REGNUM = E_R29_REGNUM, E_FP_RAW_REGNUM = E_R29_REGNUM,
76 E_R30_REGNUM, E_EP_REGNUM = E_R30_REGNUM,
77 E_R31_REGNUM, E_SAVE3_START_REGNUM = E_R31_REGNUM, E_SAVE3_END_REGNUM = E_R31_REGNUM, E_RP_REGNUM = E_R31_REGNUM,
78 E_R32_REGNUM, E_SR0_REGNUM = E_R32_REGNUM,
79 E_R33_REGNUM,
80 E_R34_REGNUM,
81 E_R35_REGNUM,
82 E_R36_REGNUM,
83 E_R37_REGNUM, E_PS_REGNUM = E_R37_REGNUM,
84 E_R38_REGNUM,
85 E_R39_REGNUM,
86 E_R40_REGNUM,
87 E_R41_REGNUM,
88 E_R42_REGNUM,
89 E_R43_REGNUM,
90 E_R44_REGNUM,
91 E_R45_REGNUM,
92 E_R46_REGNUM,
93 E_R47_REGNUM,
94 E_R48_REGNUM,
95 E_R49_REGNUM,
96 E_R50_REGNUM,
97 E_R51_REGNUM,
98 E_R52_REGNUM, E_CTBP_REGNUM = E_R52_REGNUM,
99 E_R53_REGNUM,
100 E_R54_REGNUM,
101 E_R55_REGNUM,
102 E_R56_REGNUM,
103 E_R57_REGNUM,
104 E_R58_REGNUM,
105 E_R59_REGNUM,
106 E_R60_REGNUM,
107 E_R61_REGNUM,
108 E_R62_REGNUM,
109 E_R63_REGNUM,
110 E_R64_REGNUM, E_PC_REGNUM = E_R64_REGNUM,
111 E_R65_REGNUM, E_FP_REGNUM = E_R65_REGNUM,
112 E_NUM_REGS
113 };
114
115 enum
116 {
117 v850_reg_size = 4
118 };
119
120 /* Size of all registers as a whole. */
121 enum
122 {
123 E_ALL_REGS_SIZE = (E_NUM_REGS) * v850_reg_size
124 };
125
126 /* Size of return datatype which fits into all return registers. */
127 enum
128 {
129 E_MAX_RETTYPE_SIZE_IN_REGS = 2 * v850_reg_size
130 };
131
132 static LONGEST call_dummy_nil[] = {0};
133
134 static char *v850_generic_reg_names[] =
135 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
136 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
137 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
138 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
139 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
140 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
141 "sr16", "sr17", "sr18", "sr19", "sr20", "sr21", "sr22", "sr23",
142 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
143 "pc", "fp"
144 };
145
146 static char *v850e_reg_names[] =
147 {
148 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
149 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
150 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
151 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
152 "eipc", "eipsw", "fepc", "fepsw", "ecr", "psw", "sr6", "sr7",
153 "sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
154 "ctpc", "ctpsw", "dbpc", "dbpsw", "ctbp", "sr21", "sr22", "sr23",
155 "sr24", "sr25", "sr26", "sr27", "sr28", "sr29", "sr30", "sr31",
156 "pc", "fp"
157 };
158
159 char **v850_register_names = v850_generic_reg_names;
160
161 struct
162 {
163 char **regnames;
164 int mach;
165 }
166 v850_processor_type_table[] =
167 {
168 {
169 v850_generic_reg_names, bfd_mach_v850
170 }
171 ,
172 {
173 v850e_reg_names, bfd_mach_v850e
174 }
175 ,
176 {
177 NULL, 0
178 }
179 };
180
181 /* Info gleaned from scanning a function's prologue. */
182
183 struct pifsr /* Info about one saved reg */
184 {
185 int framereg; /* Frame reg (SP or FP) */
186 int offset; /* Offset from framereg */
187 int cur_frameoffset; /* Current frameoffset */
188 int reg; /* Saved register number */
189 };
190
191 struct prologue_info
192 {
193 int framereg;
194 int frameoffset;
195 int start_function;
196 struct pifsr *pifsrs;
197 };
198
199 static CORE_ADDR v850_scan_prologue (CORE_ADDR pc, struct prologue_info *fs);
200
201 /* Function: v850_register_name
202 Returns the name of the v850/v850e register N. */
203
204 static const char *
205 v850_register_name (int regnum)
206 {
207 if (regnum < 0 || regnum >= E_NUM_REGS)
208 internal_error (__FILE__, __LINE__,
209 "v850_register_name: illegal register number %d",
210 regnum);
211 else
212 return v850_register_names[regnum];
213
214 }
215
216 /* Function: v850_register_byte
217 Returns the byte position in the register cache for register N. */
218
219 static int
220 v850_register_byte (int regnum)
221 {
222 if (regnum < 0 || regnum >= E_NUM_REGS)
223 internal_error (__FILE__, __LINE__,
224 "v850_register_byte: illegal register number %d",
225 regnum);
226 else
227 return regnum * v850_reg_size;
228 }
229
230 /* Function: v850_register_raw_size
231 Returns the number of bytes occupied by the register on the target. */
232
233 static int
234 v850_register_raw_size (int regnum)
235 {
236 if (regnum < 0 || regnum >= E_NUM_REGS)
237 internal_error (__FILE__, __LINE__,
238 "v850_register_raw_size: illegal register number %d",
239 regnum);
240 /* Only the PC has 4 Byte, all other registers 2 Byte. */
241 else
242 return v850_reg_size;
243 }
244
245 /* Function: v850_register_virtual_size
246 Returns the number of bytes occupied by the register as represented
247 internally by gdb. */
248
249 static int
250 v850_register_virtual_size (int regnum)
251 {
252 return v850_register_raw_size (regnum);
253 }
254
255 /* Function: v850_reg_virtual_type
256 Returns the default type for register N. */
257
258 static struct type *
259 v850_reg_virtual_type (int regnum)
260 {
261 if (regnum < 0 || regnum >= E_NUM_REGS)
262 internal_error (__FILE__, __LINE__,
263 "v850_register_virtual_type: illegal register number %d",
264 regnum);
265 else if (regnum == E_PC_REGNUM)
266 return builtin_type_uint32;
267 else
268 return builtin_type_int32;
269 }
270
271 static int
272 v850_type_is_scalar (struct type *t)
273 {
274 return (TYPE_CODE (t) != TYPE_CODE_STRUCT
275 && TYPE_CODE (t) != TYPE_CODE_UNION
276 && TYPE_CODE (t) != TYPE_CODE_ARRAY);
277 }
278
279 /* Should call_function allocate stack space for a struct return? */
280 static int
281 v850_use_struct_convention (int gcc_p, struct type *type)
282 {
283 /* According to ABI:
284 * return TYPE_LENGTH (type) > 8);
285 */
286
287 /* Current implementation in gcc: */
288
289 int i;
290 struct type *fld_type, *tgt_type;
291
292 /* 1. The value is greater than 8 bytes -> returned by copying */
293 if (TYPE_LENGTH (type) > 8)
294 return 1;
295
296 /* 2. The value is a single basic type -> returned in register */
297 if (v850_type_is_scalar (type))
298 return 0;
299
300 /* The value is a structure or union with a single element
301 * and that element is either a single basic type or an array of
302 * a single basic type whoes size is greater than or equal to 4
303 * -> returned in register */
304 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
305 || TYPE_CODE (type) == TYPE_CODE_UNION)
306 && TYPE_NFIELDS (type) == 1)
307 {
308 fld_type = TYPE_FIELD_TYPE (type, 0);
309 if (v850_type_is_scalar (fld_type) && TYPE_LENGTH (fld_type) >= 4)
310 return 0;
311
312 if (TYPE_CODE (fld_type) == TYPE_CODE_ARRAY)
313 {
314 tgt_type = TYPE_TARGET_TYPE (fld_type);
315 if (v850_type_is_scalar (tgt_type) && TYPE_LENGTH (tgt_type) >= 4)
316 return 0;
317 }
318 }
319
320 /* The value is a structure whose first element is an integer or
321 * a float, and which contains no arrays of more than two elements
322 * -> returned in register */
323 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
324 && v850_type_is_scalar (TYPE_FIELD_TYPE (type, 0))
325 && TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == 4)
326 {
327 for (i = 1; i < TYPE_NFIELDS (type); ++i)
328 {
329 fld_type = TYPE_FIELD_TYPE (type, 0);
330 if (TYPE_CODE (fld_type) == TYPE_CODE_ARRAY)
331 {
332 tgt_type = TYPE_TARGET_TYPE (fld_type);
333 if (TYPE_LENGTH (fld_type) >= 0 && TYPE_LENGTH (tgt_type) >= 0
334 && TYPE_LENGTH (fld_type) / TYPE_LENGTH (tgt_type) > 2)
335 return 1;
336 }
337 }
338 return 0;
339 }
340
341 /* The value is a union which contains at least one field which
342 * would be returned in registers according to these rules
343 * -> returned in register */
344 if (TYPE_CODE (type) == TYPE_CODE_UNION)
345 {
346 for (i = 0; i < TYPE_NFIELDS (type); ++i)
347 {
348 fld_type = TYPE_FIELD_TYPE (type, 0);
349 if (!v850_use_struct_convention (0, fld_type))
350 return 0;
351 }
352 }
353
354 return 1;
355 }
356 \f
357
358
359 /* Structure for mapping bits in register lists to register numbers. */
360 struct reg_list
361 {
362 long mask;
363 int regno;
364 };
365
366 /* Helper function for v850_scan_prologue to handle prepare instruction. */
367
368 static void
369 handle_prepare (int insn, int insn2, CORE_ADDR * current_pc_ptr,
370 struct prologue_info *pi, struct pifsr **pifsr_ptr)
371 {
372 CORE_ADDR current_pc = *current_pc_ptr;
373 struct pifsr *pifsr = *pifsr_ptr;
374 long next = insn2 & 0xffff;
375 long list12 = ((insn & 1) << 16) + (next & 0xffe0);
376 long offset = (insn & 0x3e) << 1;
377 static struct reg_list reg_table[] =
378 {
379 {0x00800, 20}, /* r20 */
380 {0x00400, 21}, /* r21 */
381 {0x00200, 22}, /* r22 */
382 {0x00100, 23}, /* r23 */
383 {0x08000, 24}, /* r24 */
384 {0x04000, 25}, /* r25 */
385 {0x02000, 26}, /* r26 */
386 {0x01000, 27}, /* r27 */
387 {0x00080, 28}, /* r28 */
388 {0x00040, 29}, /* r29 */
389 {0x10000, 30}, /* ep */
390 {0x00020, 31}, /* lp */
391 {0, 0} /* end of table */
392 };
393 int i;
394
395 if ((next & 0x1f) == 0x0b) /* skip imm16 argument */
396 current_pc += 2;
397 else if ((next & 0x1f) == 0x13) /* skip imm16 argument */
398 current_pc += 2;
399 else if ((next & 0x1f) == 0x1b) /* skip imm32 argument */
400 current_pc += 4;
401
402 /* Calculate the total size of the saved registers, and add it
403 it to the immediate value used to adjust SP. */
404 for (i = 0; reg_table[i].mask != 0; i++)
405 if (list12 & reg_table[i].mask)
406 offset += v850_register_raw_size (reg_table[i].regno);
407 pi->frameoffset -= offset;
408
409 /* Calculate the offsets of the registers relative to the value
410 the SP will have after the registers have been pushed and the
411 imm5 value has been subtracted from it. */
412 if (pifsr)
413 {
414 for (i = 0; reg_table[i].mask != 0; i++)
415 {
416 if (list12 & reg_table[i].mask)
417 {
418 int reg = reg_table[i].regno;
419 offset -= v850_register_raw_size (reg);
420 pifsr->reg = reg;
421 pifsr->offset = offset;
422 pifsr->cur_frameoffset = pi->frameoffset;
423 #ifdef DEBUG
424 printf_filtered ("\tSaved register r%d, offset %d", reg, pifsr->offset);
425 #endif
426 pifsr++;
427 }
428 }
429 }
430 #ifdef DEBUG
431 printf_filtered ("\tfound ctret after regsave func");
432 #endif
433
434 /* Set result parameters. */
435 *current_pc_ptr = current_pc;
436 *pifsr_ptr = pifsr;
437 }
438
439
440 /* Helper function for v850_scan_prologue to handle pushm/pushl instructions.
441 FIXME: the SR bit of the register list is not supported; must check
442 that the compiler does not ever generate this bit. */
443
444 static void
445 handle_pushm (int insn, int insn2, struct prologue_info *pi,
446 struct pifsr **pifsr_ptr)
447 {
448 struct pifsr *pifsr = *pifsr_ptr;
449 long list12 = ((insn & 0x0f) << 16) + (insn2 & 0xfff0);
450 long offset = 0;
451 static struct reg_list pushml_reg_table[] =
452 {
453 {0x80000, E_PS_REGNUM}, /* PSW */
454 {0x40000, 1}, /* r1 */
455 {0x20000, 2}, /* r2 */
456 {0x10000, 3}, /* r3 */
457 {0x00800, 4}, /* r4 */
458 {0x00400, 5}, /* r5 */
459 {0x00200, 6}, /* r6 */
460 {0x00100, 7}, /* r7 */
461 {0x08000, 8}, /* r8 */
462 {0x04000, 9}, /* r9 */
463 {0x02000, 10}, /* r10 */
464 {0x01000, 11}, /* r11 */
465 {0x00080, 12}, /* r12 */
466 {0x00040, 13}, /* r13 */
467 {0x00020, 14}, /* r14 */
468 {0x00010, 15}, /* r15 */
469 {0, 0} /* end of table */
470 };
471 static struct reg_list pushmh_reg_table[] =
472 {
473 {0x80000, 16}, /* r16 */
474 {0x40000, 17}, /* r17 */
475 {0x20000, 18}, /* r18 */
476 {0x10000, 19}, /* r19 */
477 {0x00800, 20}, /* r20 */
478 {0x00400, 21}, /* r21 */
479 {0x00200, 22}, /* r22 */
480 {0x00100, 23}, /* r23 */
481 {0x08000, 24}, /* r24 */
482 {0x04000, 25}, /* r25 */
483 {0x02000, 26}, /* r26 */
484 {0x01000, 27}, /* r27 */
485 {0x00080, 28}, /* r28 */
486 {0x00040, 29}, /* r29 */
487 {0x00010, 30}, /* r30 */
488 {0x00020, 31}, /* r31 */
489 {0, 0} /* end of table */
490 };
491 struct reg_list *reg_table;
492 int i;
493
494 /* Is this a pushml or a pushmh? */
495 if ((insn2 & 7) == 1)
496 reg_table = pushml_reg_table;
497 else
498 reg_table = pushmh_reg_table;
499
500 /* Calculate the total size of the saved registers, and add it
501 it to the immediate value used to adjust SP. */
502 for (i = 0; reg_table[i].mask != 0; i++)
503 if (list12 & reg_table[i].mask)
504 offset += v850_register_raw_size (reg_table[i].regno);
505 pi->frameoffset -= offset;
506
507 /* Calculate the offsets of the registers relative to the value
508 the SP will have after the registers have been pushed and the
509 imm5 value is subtracted from it. */
510 if (pifsr)
511 {
512 for (i = 0; reg_table[i].mask != 0; i++)
513 {
514 if (list12 & reg_table[i].mask)
515 {
516 int reg = reg_table[i].regno;
517 offset -= v850_register_raw_size (reg);
518 pifsr->reg = reg;
519 pifsr->offset = offset;
520 pifsr->cur_frameoffset = pi->frameoffset;
521 #ifdef DEBUG
522 printf_filtered ("\tSaved register r%d, offset %d", reg, pifsr->offset);
523 #endif
524 pifsr++;
525 }
526 }
527 }
528 #ifdef DEBUG
529 printf_filtered ("\tfound ctret after regsave func");
530 #endif
531
532 /* Set result parameters. */
533 *pifsr_ptr = pifsr;
534 }
535 \f
536
537
538
539 /* Function: scan_prologue
540 Scan the prologue of the function that contains PC, and record what
541 we find in PI. Returns the pc after the prologue. Note that the
542 addresses saved in frame->saved_regs are just frame relative (negative
543 offsets from the frame pointer). This is because we don't know the
544 actual value of the frame pointer yet. In some circumstances, the
545 frame pointer can't be determined till after we have scanned the
546 prologue. */
547
548 static CORE_ADDR
549 v850_scan_prologue (CORE_ADDR pc, struct prologue_info *pi)
550 {
551 CORE_ADDR func_addr, prologue_end, current_pc;
552 struct pifsr *pifsr, *pifsr_tmp;
553 int fp_used;
554 int ep_used;
555 int reg;
556 CORE_ADDR save_pc, save_end;
557 int regsave_func_p;
558 int r12_tmp;
559
560 /* First, figure out the bounds of the prologue so that we can limit the
561 search to something reasonable. */
562
563 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
564 {
565 struct symtab_and_line sal;
566
567 sal = find_pc_line (func_addr, 0);
568
569 if (func_addr == entry_point_address ())
570 pi->start_function = 1;
571 else
572 pi->start_function = 0;
573
574 #if 0
575 if (sal.line == 0)
576 prologue_end = pc;
577 else
578 prologue_end = sal.end;
579 #else
580 prologue_end = pc;
581 #endif
582 }
583 else
584 { /* We're in the boondocks */
585 func_addr = pc - 100;
586 prologue_end = pc;
587 }
588
589 prologue_end = min (prologue_end, pc);
590
591 /* Now, search the prologue looking for instructions that setup fp, save
592 rp, adjust sp and such. We also record the frame offset of any saved
593 registers. */
594
595 pi->frameoffset = 0;
596 pi->framereg = E_SP_REGNUM;
597 fp_used = 0;
598 ep_used = 0;
599 pifsr = pi->pifsrs;
600 regsave_func_p = 0;
601 save_pc = 0;
602 save_end = 0;
603 r12_tmp = 0;
604
605 #ifdef DEBUG
606 printf_filtered ("Current_pc = 0x%.8lx, prologue_end = 0x%.8lx\n",
607 (long) func_addr, (long) prologue_end);
608 #endif
609
610 for (current_pc = func_addr; current_pc < prologue_end;)
611 {
612 int insn;
613 int insn2 = -1; /* dummy value */
614
615 #ifdef DEBUG
616 printf_filtered ("0x%.8lx ", (long) current_pc);
617 TARGET_PRINT_INSN (current_pc, &tm_print_insn_info);
618 #endif
619
620 insn = read_memory_unsigned_integer (current_pc, 2);
621 current_pc += 2;
622 if ((insn & 0x0780) >= 0x0600) /* Four byte instruction? */
623 {
624 insn2 = read_memory_unsigned_integer (current_pc, 2);
625 current_pc += 2;
626 }
627
628 if ((insn & 0xffc0) == ((10 << 11) | 0x0780) && !regsave_func_p)
629 { /* jarl <func>,10 */
630 long low_disp = insn2 & ~(long) 1;
631 long disp = (((((insn & 0x3f) << 16) + low_disp)
632 & ~(long) 1) ^ 0x00200000) - 0x00200000;
633
634 save_pc = current_pc;
635 save_end = prologue_end;
636 regsave_func_p = 1;
637 current_pc += disp - 4;
638 prologue_end = (current_pc
639 + (2 * 3) /* moves to/from ep */
640 + 4 /* addi <const>,sp,sp */
641 + 2 /* jmp [r10] */
642 + (2 * 12) /* sst.w to save r2, r20-r29, r31 */
643 + 20); /* slop area */
644
645 #ifdef DEBUG
646 printf_filtered ("\tfound jarl <func>,r10, disp = %ld, low_disp = %ld, new pc = 0x%.8lx\n",
647 disp, low_disp, (long) current_pc + 2);
648 #endif
649 continue;
650 }
651 else if ((insn & 0xffc0) == 0x0200 && !regsave_func_p)
652 { /* callt <imm6> */
653 long ctbp = read_register (E_CTBP_REGNUM);
654 long adr = ctbp + ((insn & 0x3f) << 1);
655
656 save_pc = current_pc;
657 save_end = prologue_end;
658 regsave_func_p = 1;
659 current_pc = ctbp + (read_memory_unsigned_integer (adr, 2) & 0xffff);
660 prologue_end = (current_pc
661 + (2 * 3) /* prepare list2,imm5,sp/imm */
662 + 4 /* ctret */
663 + 20); /* slop area */
664
665 #ifdef DEBUG
666 printf_filtered ("\tfound callt, ctbp = 0x%.8lx, adr = %.8lx, new pc = 0x%.8lx\n",
667 ctbp, adr, (long) current_pc);
668 #endif
669 continue;
670 }
671 else if ((insn & 0xffc0) == 0x0780) /* prepare list2,imm5 */
672 {
673 handle_prepare (insn, insn2, &current_pc, pi, &pifsr);
674 continue;
675 }
676 else if (insn == 0x07e0 && regsave_func_p && insn2 == 0x0144)
677 { /* ctret after processing register save function */
678 current_pc = save_pc;
679 prologue_end = save_end;
680 regsave_func_p = 0;
681 #ifdef DEBUG
682 printf_filtered ("\tfound ctret after regsave func");
683 #endif
684 continue;
685 }
686 else if ((insn & 0xfff0) == 0x07e0 && (insn2 & 5) == 1)
687 { /* pushml, pushmh */
688 handle_pushm (insn, insn2, pi, &pifsr);
689 continue;
690 }
691 else if ((insn & 0xffe0) == 0x0060 && regsave_func_p)
692 { /* jmp after processing register save function */
693 current_pc = save_pc;
694 prologue_end = save_end;
695 regsave_func_p = 0;
696 #ifdef DEBUG
697 printf_filtered ("\tfound jmp after regsave func");
698 #endif
699 continue;
700 }
701 else if ((insn & 0x07c0) == 0x0780 /* jarl or jr */
702 || (insn & 0xffe0) == 0x0060 /* jmp */
703 || (insn & 0x0780) == 0x0580) /* branch */
704 {
705 #ifdef DEBUG
706 printf_filtered ("\n");
707 #endif
708 break; /* Ran into end of prologue */
709 }
710
711 else if ((insn & 0xffe0) == ((E_SP_REGNUM << 11) | 0x0240)) /* add <imm>,sp */
712 pi->frameoffset += ((insn & 0x1f) ^ 0x10) - 0x10;
713 else if (insn == ((E_SP_REGNUM << 11) | 0x0600 | E_SP_REGNUM)) /* addi <imm>,sp,sp */
714 pi->frameoffset += insn2;
715 else if (insn == ((E_FP_RAW_REGNUM << 11) | 0x0000 | E_SP_REGNUM)) /* mov sp,fp */
716 {
717 fp_used = 1;
718 pi->framereg = E_FP_RAW_REGNUM;
719 }
720
721 else if (insn == ((E_R12_REGNUM << 11) | 0x0640 | E_R0_REGNUM)) /* movhi hi(const),r0,r12 */
722 r12_tmp = insn2 << 16;
723 else if (insn == ((E_R12_REGNUM << 11) | 0x0620 | E_R12_REGNUM)) /* movea lo(const),r12,r12 */
724 r12_tmp += insn2;
725 else if (insn == ((E_SP_REGNUM << 11) | 0x01c0 | E_R12_REGNUM) && r12_tmp) /* add r12,sp */
726 pi->frameoffset = r12_tmp;
727 else if (insn == ((E_EP_REGNUM << 11) | 0x0000 | E_SP_REGNUM)) /* mov sp,ep */
728 ep_used = 1;
729 else if (insn == ((E_EP_REGNUM << 11) | 0x0000 | E_R1_REGNUM)) /* mov r1,ep */
730 ep_used = 0;
731 else if (((insn & 0x07ff) == (0x0760 | E_SP_REGNUM) /* st.w <reg>,<offset>[sp] */
732 || (fp_used
733 && (insn & 0x07ff) == (0x0760 | E_FP_RAW_REGNUM))) /* st.w <reg>,<offset>[fp] */
734 && pifsr
735 && (((reg = (insn >> 11) & 0x1f) >= E_SAVE1_START_REGNUM && reg <= E_SAVE1_END_REGNUM)
736 || (reg >= E_SAVE2_START_REGNUM && reg <= E_SAVE2_END_REGNUM)
737 || (reg >= E_SAVE3_START_REGNUM && reg <= E_SAVE3_END_REGNUM)))
738 {
739 pifsr->reg = reg;
740 pifsr->offset = insn2 & ~1;
741 pifsr->cur_frameoffset = pi->frameoffset;
742 #ifdef DEBUG
743 printf_filtered ("\tSaved register r%d, offset %d", reg, pifsr->offset);
744 #endif
745 pifsr++;
746 }
747
748 else if (ep_used /* sst.w <reg>,<offset>[ep] */
749 && ((insn & 0x0781) == 0x0501)
750 && pifsr
751 && (((reg = (insn >> 11) & 0x1f) >= E_SAVE1_START_REGNUM && reg <= E_SAVE1_END_REGNUM)
752 || (reg >= E_SAVE2_START_REGNUM && reg <= E_SAVE2_END_REGNUM)
753 || (reg >= E_SAVE3_START_REGNUM && reg <= E_SAVE3_END_REGNUM)))
754 {
755 pifsr->reg = reg;
756 pifsr->offset = (insn & 0x007e) << 1;
757 pifsr->cur_frameoffset = pi->frameoffset;
758 #ifdef DEBUG
759 printf_filtered ("\tSaved register r%d, offset %d", reg, pifsr->offset);
760 #endif
761 pifsr++;
762 }
763
764 #ifdef DEBUG
765 printf_filtered ("\n");
766 #endif
767 }
768
769 if (pifsr)
770 pifsr->framereg = 0; /* Tie off last entry */
771
772 /* Fix up any offsets to the final offset. If a frame pointer was created, use it
773 instead of the stack pointer. */
774 for (pifsr_tmp = pi->pifsrs; pifsr_tmp && pifsr_tmp != pifsr; pifsr_tmp++)
775 {
776 pifsr_tmp->offset -= pi->frameoffset - pifsr_tmp->cur_frameoffset;
777 pifsr_tmp->framereg = pi->framereg;
778
779 #ifdef DEBUG
780 printf_filtered ("Saved register r%d, offset = %d, framereg = r%d\n",
781 pifsr_tmp->reg, pifsr_tmp->offset, pifsr_tmp->framereg);
782 #endif
783 }
784
785 #ifdef DEBUG
786 printf_filtered ("Framereg = r%d, frameoffset = %d\n", pi->framereg, pi->frameoffset);
787 #endif
788
789 return current_pc;
790 }
791
792 /* Function: find_callers_reg
793 Find REGNUM on the stack. Otherwise, it's in an active register.
794 One thing we might want to do here is to check REGNUM against the
795 clobber mask, and somehow flag it as invalid if it isn't saved on
796 the stack somewhere. This would provide a graceful failure mode
797 when trying to get the value of caller-saves registers for an inner
798 frame. */
799
800 CORE_ADDR
801 v850_find_callers_reg (struct frame_info *fi, int regnum)
802 {
803 for (; fi; fi = fi->next)
804 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), fi->frame, fi->frame))
805 return deprecated_read_register_dummy (get_frame_pc (fi), fi->frame, regnum);
806 else if (get_frame_saved_regs (fi)[regnum] != 0)
807 return read_memory_unsigned_integer (get_frame_saved_regs (fi)[regnum],
808 v850_register_raw_size (regnum));
809
810 return read_register (regnum);
811 }
812
813 /* Function: frame_chain
814 Figure out the frame prior to FI. Unfortunately, this involves
815 scanning the prologue of the caller, which will also be done
816 shortly by v850_init_extra_frame_info. For the dummy frame, we
817 just return the stack pointer that was in use at the time the
818 function call was made. */
819
820 CORE_ADDR
821 v850_frame_chain (struct frame_info *fi)
822 {
823 struct prologue_info pi;
824 CORE_ADDR callers_pc, fp;
825
826 /* First, find out who called us */
827 callers_pc = FRAME_SAVED_PC (fi);
828 /* If caller is a call-dummy, then our FP bears no relation to his FP! */
829 fp = v850_find_callers_reg (fi, E_FP_RAW_REGNUM);
830 if (DEPRECATED_PC_IN_CALL_DUMMY (callers_pc, fp, fp))
831 return fp; /* caller is call-dummy: return oldest value of FP */
832
833 /* Caller is NOT a call-dummy, so everything else should just work.
834 Even if THIS frame is a call-dummy! */
835 pi.pifsrs = NULL;
836
837 v850_scan_prologue (callers_pc, &pi);
838
839 if (pi.start_function)
840 return 0; /* Don't chain beyond the start function */
841
842 if (pi.framereg == E_FP_RAW_REGNUM)
843 return v850_find_callers_reg (fi, pi.framereg);
844
845 return fi->frame - pi.frameoffset;
846 }
847
848 /* Function: skip_prologue
849 Return the address of the first code past the prologue of the function. */
850
851 CORE_ADDR
852 v850_skip_prologue (CORE_ADDR pc)
853 {
854 CORE_ADDR func_addr, func_end;
855
856 /* See what the symbol table says */
857
858 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
859 {
860 struct symtab_and_line sal;
861
862 sal = find_pc_line (func_addr, 0);
863
864 if (sal.line != 0 && sal.end < func_end)
865 return sal.end;
866 else
867 /* Either there's no line info, or the line after the prologue is after
868 the end of the function. In this case, there probably isn't a
869 prologue. */
870 return pc;
871 }
872
873 /* We can't find the start of this function, so there's nothing we can do. */
874 return pc;
875 }
876
877 /* Function: pop_frame
878 This routine gets called when either the user uses the `return'
879 command, or the call dummy breakpoint gets hit. */
880
881 void
882 v850_pop_frame (void)
883 {
884 struct frame_info *frame = get_current_frame ();
885 int regnum;
886
887 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame), frame->frame, frame->frame))
888 generic_pop_dummy_frame ();
889 else
890 {
891 write_register (E_PC_REGNUM, FRAME_SAVED_PC (frame));
892
893 for (regnum = 0; regnum < E_NUM_REGS; regnum++)
894 if (get_frame_saved_regs (frame)[regnum] != 0)
895 write_register (regnum,
896 read_memory_unsigned_integer (get_frame_saved_regs (frame)[regnum],
897 v850_register_raw_size (regnum)));
898
899 write_register (E_SP_REGNUM, get_frame_base (frame));
900 }
901
902 flush_cached_frames ();
903 }
904
905 /* Function: push_arguments
906 Setup arguments and RP for a call to the target. First four args
907 go in R6->R9, subsequent args go into sp + 16 -> sp + ... Structs
908 are passed by reference. 64 bit quantities (doubles and long
909 longs) may be split between the regs and the stack. When calling a
910 function that returns a struct, a pointer to the struct is passed
911 in as a secret first argument (always in R6).
912
913 Stack space for the args has NOT been allocated: that job is up to us.
914 */
915
916 CORE_ADDR
917 v850_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
918 int struct_return, CORE_ADDR struct_addr)
919 {
920 int argreg;
921 int argnum;
922 int len = 0;
923 int stack_offset;
924
925 /* First, just for safety, make sure stack is aligned */
926 sp &= ~3;
927
928 /* The offset onto the stack at which we will start copying parameters
929 (after the registers are used up) begins at 16 rather than at zero.
930 I don't really know why, that's just the way it seems to work. */
931 stack_offset = 16;
932
933 /* Now make space on the stack for the args. */
934 for (argnum = 0; argnum < nargs; argnum++)
935 len += ((TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3);
936 sp -= len + stack_offset; /* possibly over-allocating, but it works... */
937 /* (you might think we could allocate 16 bytes */
938 /* less, but the ABI seems to use it all! ) */
939
940 argreg = E_ARG0_REGNUM;
941 /* the struct_return pointer occupies the first parameter-passing reg */
942 if (struct_return)
943 argreg++;
944
945 /* Now load as many as possible of the first arguments into
946 registers, and push the rest onto the stack. There are 16 bytes
947 in four registers available. Loop thru args from first to last. */
948 for (argnum = 0; argnum < nargs; argnum++)
949 {
950 int len;
951 char *val;
952 char valbuf[v850_register_raw_size (E_ARG0_REGNUM)];
953
954 if (!v850_type_is_scalar (VALUE_TYPE (*args))
955 && TYPE_LENGTH (VALUE_TYPE (*args)) > E_MAX_RETTYPE_SIZE_IN_REGS)
956 {
957 store_address (valbuf, 4, VALUE_ADDRESS (*args));
958 len = 4;
959 val = valbuf;
960 }
961 else
962 {
963 len = TYPE_LENGTH (VALUE_TYPE (*args));
964 val = (char *) VALUE_CONTENTS (*args);
965 }
966
967 while (len > 0)
968 if (argreg <= E_ARGLAST_REGNUM)
969 {
970 CORE_ADDR regval;
971
972 regval = extract_address (val, v850_register_raw_size (argreg));
973 write_register (argreg, regval);
974
975 len -= v850_register_raw_size (argreg);
976 val += v850_register_raw_size (argreg);
977 argreg++;
978 }
979 else
980 {
981 write_memory (sp + stack_offset, val, 4);
982
983 len -= 4;
984 val += 4;
985 stack_offset += 4;
986 }
987 args++;
988 }
989 return sp;
990 }
991
992 /* Function: push_return_address (pc)
993 Set up the return address for the inferior function call.
994 Needed for targets where we don't actually execute a JSR/BSR instruction */
995
996 CORE_ADDR
997 v850_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
998 {
999 write_register (E_RP_REGNUM, CALL_DUMMY_ADDRESS ());
1000 return sp;
1001 }
1002
1003 /* Function: frame_saved_pc
1004 Find the caller of this frame. We do this by seeing if E_RP_REGNUM
1005 is saved in the stack anywhere, otherwise we get it from the
1006 registers. If the inner frame is a dummy frame, return its PC
1007 instead of RP, because that's where "caller" of the dummy-frame
1008 will be found. */
1009
1010 CORE_ADDR
1011 v850_frame_saved_pc (struct frame_info *fi)
1012 {
1013 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), fi->frame, fi->frame))
1014 return deprecated_read_register_dummy (get_frame_pc (fi), fi->frame, E_PC_REGNUM);
1015 else
1016 return v850_find_callers_reg (fi, E_RP_REGNUM);
1017 }
1018
1019
1020 /* Function: fix_call_dummy
1021 Pokes the callee function's address into the CALL_DUMMY assembly stub.
1022 Assumes that the CALL_DUMMY looks like this:
1023 jarl <offset24>, r31
1024 trap
1025 */
1026
1027 void
1028 v850_fix_call_dummy (char *dummy, CORE_ADDR sp, CORE_ADDR fun, int nargs,
1029 struct value **args, struct type *type, int gcc_p)
1030 {
1031 long offset24;
1032
1033 offset24 = (long) fun - (long) entry_point_address ();
1034 offset24 &= 0x3fffff;
1035 offset24 |= 0xff800000; /* jarl <offset24>, r31 */
1036
1037 store_unsigned_integer ((unsigned int *) &dummy[2], 2, offset24 & 0xffff);
1038 store_unsigned_integer ((unsigned int *) &dummy[0], 2, offset24 >> 16);
1039 }
1040
1041 static CORE_ADDR
1042 v850_saved_pc_after_call (struct frame_info *ignore)
1043 {
1044 return read_register (E_RP_REGNUM);
1045 }
1046
1047 static void
1048 v850_extract_return_value (struct type *type, char *regbuf, char *valbuf)
1049 {
1050 CORE_ADDR return_buffer;
1051
1052 if (!v850_use_struct_convention (0, type))
1053 {
1054 /* Scalar return values of <= 8 bytes are returned in
1055 E_V0_REGNUM to E_V1_REGNUM. */
1056 memcpy (valbuf,
1057 &regbuf[REGISTER_BYTE (E_V0_REGNUM)],
1058 TYPE_LENGTH (type));
1059 }
1060 else
1061 {
1062 /* Aggregates and return values > 8 bytes are returned in memory,
1063 pointed to by R6. */
1064 return_buffer =
1065 extract_address (regbuf + REGISTER_BYTE (E_V0_REGNUM),
1066 REGISTER_RAW_SIZE (E_V0_REGNUM));
1067
1068 read_memory (return_buffer, valbuf, TYPE_LENGTH (type));
1069 }
1070 }
1071
1072 const static unsigned char *
1073 v850_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
1074 {
1075 static unsigned char breakpoint[] = { 0x85, 0x05 };
1076 *lenptr = sizeof (breakpoint);
1077 return breakpoint;
1078 }
1079
1080 static CORE_ADDR
1081 v850_extract_struct_value_address (char *regbuf)
1082 {
1083 return extract_address (regbuf + v850_register_byte (E_V0_REGNUM),
1084 v850_register_raw_size (E_V0_REGNUM));
1085 }
1086
1087 static void
1088 v850_store_return_value (struct type *type, char *valbuf)
1089 {
1090 CORE_ADDR return_buffer;
1091
1092 if (!v850_use_struct_convention (0, type))
1093 deprecated_write_register_bytes (REGISTER_BYTE (E_V0_REGNUM), valbuf,
1094 TYPE_LENGTH (type));
1095 else
1096 {
1097 return_buffer = read_register (E_V0_REGNUM);
1098 write_memory (return_buffer, valbuf, TYPE_LENGTH (type));
1099 }
1100 }
1101
1102 static void
1103 v850_frame_init_saved_regs (struct frame_info *fi)
1104 {
1105 struct prologue_info pi;
1106 struct pifsr pifsrs[E_NUM_REGS + 1], *pifsr;
1107 CORE_ADDR func_addr, func_end;
1108
1109 if (!get_frame_saved_regs (fi))
1110 {
1111 frame_saved_regs_zalloc (fi);
1112
1113 /* The call dummy doesn't save any registers on the stack, so we
1114 can return now. */
1115 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), fi->frame, fi->frame))
1116 return;
1117
1118 /* Find the beginning of this function, so we can analyze its
1119 prologue. */
1120 if (find_pc_partial_function (get_frame_pc (fi), NULL, &func_addr, &func_end))
1121 {
1122 pi.pifsrs = pifsrs;
1123
1124 v850_scan_prologue (get_frame_pc (fi), &pi);
1125
1126 if (!fi->next && pi.framereg == E_SP_REGNUM)
1127 deprecated_update_frame_base_hack (fi, read_register (pi.framereg) - pi.frameoffset);
1128
1129 for (pifsr = pifsrs; pifsr->framereg; pifsr++)
1130 {
1131 get_frame_saved_regs (fi)[pifsr->reg] = pifsr->offset + fi->frame;
1132
1133 if (pifsr->framereg == E_SP_REGNUM)
1134 get_frame_saved_regs (fi)[pifsr->reg] += pi.frameoffset;
1135 }
1136 }
1137 /* Else we're out of luck (can't debug completely stripped code).
1138 FIXME. */
1139 }
1140 }
1141
1142 /* Function: init_extra_frame_info
1143 Setup the frame's frame pointer, pc, and frame addresses for saved
1144 registers. Most of the work is done in scan_prologue().
1145
1146 Note that when we are called for the last frame (currently active frame),
1147 that get_frame_pc (fi) and fi->frame will already be setup. However, fi->frame will
1148 be valid only if this routine uses FP. For previous frames, fi-frame will
1149 always be correct (since that is derived from v850_frame_chain ()).
1150
1151 We can be called with the PC in the call dummy under two circumstances.
1152 First, during normal backtracing, second, while figuring out the frame
1153 pointer just prior to calling the target function (see run_stack_dummy). */
1154
1155 static void
1156 v850_init_extra_frame_info (int fromleaf, struct frame_info *fi)
1157 {
1158 struct prologue_info pi;
1159
1160 if (fi->next)
1161 deprecated_update_frame_pc_hack (fi, FRAME_SAVED_PC (fi->next));
1162
1163 v850_frame_init_saved_regs (fi);
1164 }
1165
1166 static void
1167 v850_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1168 {
1169 write_register (E_ARG0_REGNUM, addr);
1170 }
1171
1172 static CORE_ADDR
1173 v850_target_read_fp (void)
1174 {
1175 return read_register (E_FP_RAW_REGNUM);
1176 }
1177
1178 static struct gdbarch *
1179 v850_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1180 {
1181 static LONGEST call_dummy_words[1] = { 0 };
1182 struct gdbarch_tdep *tdep = NULL;
1183 struct gdbarch *gdbarch;
1184 int i;
1185
1186 /* find a candidate among the list of pre-declared architectures. */
1187 arches = gdbarch_list_lookup_by_info (arches, &info);
1188 if (arches != NULL)
1189 return (arches->gdbarch);
1190
1191 #if 0
1192 tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
1193 #endif
1194
1195 /* Change the register names based on the current machine type. */
1196 if (info.bfd_arch_info->arch != bfd_arch_v850)
1197 return 0;
1198
1199 gdbarch = gdbarch_alloc (&info, 0);
1200
1201 /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
1202 ready to unwind the PC first (see frame.c:get_prev_frame()). */
1203 set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
1204
1205 for (i = 0; v850_processor_type_table[i].regnames != NULL; i++)
1206 {
1207 if (v850_processor_type_table[i].mach == info.bfd_arch_info->mach)
1208 {
1209 v850_register_names = v850_processor_type_table[i].regnames;
1210 tm_print_insn_info.mach = info.bfd_arch_info->mach;
1211 break;
1212 }
1213 }
1214
1215 /*
1216 * Basic register fields and methods.
1217 */
1218 set_gdbarch_num_regs (gdbarch, E_NUM_REGS);
1219 set_gdbarch_num_pseudo_regs (gdbarch, 0);
1220 set_gdbarch_sp_regnum (gdbarch, E_SP_REGNUM);
1221 set_gdbarch_fp_regnum (gdbarch, E_FP_REGNUM);
1222 set_gdbarch_pc_regnum (gdbarch, E_PC_REGNUM);
1223 set_gdbarch_register_name (gdbarch, v850_register_name);
1224 set_gdbarch_register_size (gdbarch, v850_reg_size);
1225 set_gdbarch_register_bytes (gdbarch, E_ALL_REGS_SIZE);
1226 set_gdbarch_register_byte (gdbarch, v850_register_byte);
1227 set_gdbarch_register_raw_size (gdbarch, v850_register_raw_size);
1228 set_gdbarch_max_register_raw_size (gdbarch, v850_reg_size);
1229 set_gdbarch_register_virtual_size (gdbarch, v850_register_raw_size);
1230 set_gdbarch_max_register_virtual_size (gdbarch, v850_reg_size);
1231 set_gdbarch_register_virtual_type (gdbarch, v850_reg_virtual_type);
1232
1233 set_gdbarch_read_fp (gdbarch, v850_target_read_fp);
1234
1235 /*
1236 * Frame Info
1237 */
1238 set_gdbarch_init_extra_frame_info (gdbarch, v850_init_extra_frame_info);
1239 set_gdbarch_frame_init_saved_regs (gdbarch, v850_frame_init_saved_regs);
1240 set_gdbarch_frame_chain (gdbarch, v850_frame_chain);
1241 set_gdbarch_saved_pc_after_call (gdbarch, v850_saved_pc_after_call);
1242 set_gdbarch_frame_saved_pc (gdbarch, v850_frame_saved_pc);
1243 set_gdbarch_skip_prologue (gdbarch, v850_skip_prologue);
1244
1245 /*
1246 * Miscelany
1247 */
1248 /* Stack grows up. */
1249 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1250 /* PC stops zero byte after a trap instruction
1251 (which means: exactly on trap instruction). */
1252 set_gdbarch_decr_pc_after_break (gdbarch, 0);
1253 /* This value is almost never non-zero... */
1254 set_gdbarch_function_start_offset (gdbarch, 0);
1255 /* This value is almost never non-zero... */
1256 set_gdbarch_frame_args_skip (gdbarch, 0);
1257 /* OK to default this value to 'unknown'. */
1258 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
1259
1260 /*
1261 * Call Dummies
1262 *
1263 * These values and methods are used when gdb calls a target function. */
1264 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
1265 set_gdbarch_push_return_address (gdbarch, v850_push_return_address);
1266 set_gdbarch_deprecated_extract_return_value (gdbarch, v850_extract_return_value);
1267 set_gdbarch_push_arguments (gdbarch, v850_push_arguments);
1268 set_gdbarch_pop_frame (gdbarch, v850_pop_frame);
1269 set_gdbarch_store_struct_return (gdbarch, v850_store_struct_return);
1270 set_gdbarch_deprecated_store_return_value (gdbarch, v850_store_return_value);
1271 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, v850_extract_struct_value_address);
1272 set_gdbarch_use_struct_convention (gdbarch, v850_use_struct_convention);
1273 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
1274 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
1275 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
1276 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
1277 set_gdbarch_call_dummy_length (gdbarch, 0);
1278 set_gdbarch_call_dummy_p (gdbarch, 1);
1279 set_gdbarch_call_dummy_words (gdbarch, call_dummy_nil);
1280 set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
1281 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
1282 /* set_gdbarch_call_dummy_stack_adjust */
1283 set_gdbarch_fix_call_dummy (gdbarch, v850_fix_call_dummy);
1284 set_gdbarch_breakpoint_from_pc (gdbarch, v850_breakpoint_from_pc);
1285
1286 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1287 set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1288 set_gdbarch_addr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
1289 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
1290
1291 set_gdbarch_extra_stack_alignment_needed (gdbarch, 0);
1292
1293 return gdbarch;
1294 }
1295
1296 void
1297 _initialize_v850_tdep (void)
1298 {
1299 tm_print_insn = print_insn_v850;
1300 register_gdbarch_init (bfd_arch_v850, v850_gdbarch_init);
1301 }
This page took 0.060864 seconds and 4 git commands to generate.