* sh-tdep.c (SH_NUM_REGS): Define as 67.
[binutils-gdb.git] / gdb / sh-tdep.c
1 /* Target-dependent code for Renesas Super-H, for GDB.
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004 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 /*
23 Contributed by Steve Chamberlain
24 sac@cygnus.com
25 */
26
27 #include "defs.h"
28 #include "frame.h"
29 #include "frame-base.h"
30 #include "frame-unwind.h"
31 #include "dwarf2-frame.h"
32 #include "symtab.h"
33 #include "gdbtypes.h"
34 #include "gdbcmd.h"
35 #include "gdbcore.h"
36 #include "value.h"
37 #include "dis-asm.h"
38 #include "inferior.h"
39 #include "gdb_string.h"
40 #include "gdb_assert.h"
41 #include "arch-utils.h"
42 #include "floatformat.h"
43 #include "regcache.h"
44 #include "doublest.h"
45 #include "osabi.h"
46
47 #include "sh-tdep.h"
48
49 #include "elf-bfd.h"
50 #include "solib-svr4.h"
51
52 /* sh flags */
53 #include "elf/sh.h"
54 /* registers numbers shared with the simulator */
55 #include "gdb/sim-sh.h"
56
57 static void (*sh_show_regs) (void);
58
59 #define SH_NUM_REGS 67
60
61 struct sh_frame_cache
62 {
63 /* Base address. */
64 CORE_ADDR base;
65 LONGEST sp_offset;
66 CORE_ADDR pc;
67
68 /* Flag showing that a frame has been created in the prologue code. */
69 int uses_fp;
70
71 /* Saved registers. */
72 CORE_ADDR saved_regs[SH_NUM_REGS];
73 CORE_ADDR saved_sp;
74 };
75
76 static const char *
77 sh_sh_register_name (int reg_nr)
78 {
79 static char *register_names[] = {
80 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
81 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
82 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
83 "", "",
84 "", "", "", "", "", "", "", "",
85 "", "", "", "", "", "", "", "",
86 "", "",
87 "", "", "", "", "", "", "", "",
88 "", "", "", "", "", "", "", "",
89 "", "", "", "", "", "", "", "",
90 };
91 if (reg_nr < 0)
92 return NULL;
93 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
94 return NULL;
95 return register_names[reg_nr];
96 }
97
98 static const char *
99 sh_sh3_register_name (int reg_nr)
100 {
101 static char *register_names[] = {
102 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
103 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
104 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
105 "", "",
106 "", "", "", "", "", "", "", "",
107 "", "", "", "", "", "", "", "",
108 "ssr", "spc",
109 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
110 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1"
111 "", "", "", "", "", "", "", "",
112 };
113 if (reg_nr < 0)
114 return NULL;
115 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
116 return NULL;
117 return register_names[reg_nr];
118 }
119
120 static const char *
121 sh_sh3e_register_name (int reg_nr)
122 {
123 static char *register_names[] = {
124 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
125 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
126 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
127 "fpul", "fpscr",
128 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
129 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
130 "ssr", "spc",
131 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
132 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
133 "", "", "", "", "", "", "", "",
134 };
135 if (reg_nr < 0)
136 return NULL;
137 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
138 return NULL;
139 return register_names[reg_nr];
140 }
141
142 static const char *
143 sh_sh2e_register_name (int reg_nr)
144 {
145 static char *register_names[] = {
146 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
147 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
148 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
149 "fpul", "fpscr",
150 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
151 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
152 "", "",
153 "", "", "", "", "", "", "", "",
154 "", "", "", "", "", "", "", "",
155 "", "", "", "", "", "", "", "",
156 };
157 if (reg_nr < 0)
158 return NULL;
159 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
160 return NULL;
161 return register_names[reg_nr];
162 }
163
164 static const char *
165 sh_sh2a_register_name (int reg_nr)
166 {
167 static char *register_names[] = {
168 /* general registers 0-15 */
169 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
170 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
171 /* 16 - 22 */
172 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
173 /* 23, 24 */
174 "fpul", "fpscr",
175 /* floating point registers 25 - 40 */
176 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
177 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
178 /* 41, 42 */
179 "", "",
180 /* 43 - 62. Banked registers. The bank number used is determined by
181 the bank register (63). */
182 "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b",
183 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b",
184 "machb", "ivnb", "prb", "gbrb", "maclb",
185 /* 63: register bank number, not a real register but used to
186 communicate the register bank currently get/set. This register
187 is hidden to the user, who manipulates it using the pseudo
188 register called "bank" (67). See below. */
189 "",
190 /* 64 - 66 */
191 "ibcr", "ibnr", "tbr",
192 /* 67: register bank number, the user visible pseudo register. */
193 "bank",
194 /* double precision (pseudo) 68 - 75 */
195 "dr0", "dr2", "dr4", "dr6", "dr8", "dr10", "dr12", "dr14",
196 };
197 if (reg_nr < 0)
198 return NULL;
199 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
200 return NULL;
201 return register_names[reg_nr];
202 }
203
204 static const char *
205 sh_sh2a_nofpu_register_name (int reg_nr)
206 {
207 static char *register_names[] = {
208 /* general registers 0-15 */
209 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
210 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
211 /* 16 - 22 */
212 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
213 /* 23, 24 */
214 "", "",
215 /* floating point registers 25 - 40 */
216 "", "", "", "", "", "", "", "",
217 "", "", "", "", "", "", "", "",
218 /* 41, 42 */
219 "", "",
220 /* 43 - 62. Banked registers. The bank number used is determined by
221 the bank register (63). */
222 "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b",
223 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b",
224 "machb", "ivnb", "prb", "gbrb", "maclb",
225 /* 63: register bank number, not a real register but used to
226 communicate the register bank currently get/set. This register
227 is hidden to the user, who manipulates it using the pseudo
228 register called "bank" (67). See below. */
229 "",
230 /* 64 - 66 */
231 "ibcr", "ibnr", "tbr",
232 /* 67: register bank number, the user visible pseudo register. */
233 "bank",
234 /* double precision (pseudo) 68 - 75 */
235 "", "", "", "", "", "", "", "",
236 };
237 if (reg_nr < 0)
238 return NULL;
239 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
240 return NULL;
241 return register_names[reg_nr];
242 }
243
244 static const char *
245 sh_sh_dsp_register_name (int reg_nr)
246 {
247 static char *register_names[] = {
248 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
249 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
250 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
251 "", "dsr",
252 "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1",
253 "y0", "y1", "", "", "", "", "", "mod",
254 "", "",
255 "rs", "re", "", "", "", "", "", "",
256 "", "", "", "", "", "", "", "",
257 "", "", "", "", "", "", "", "",
258 };
259 if (reg_nr < 0)
260 return NULL;
261 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
262 return NULL;
263 return register_names[reg_nr];
264 }
265
266 static const char *
267 sh_sh3_dsp_register_name (int reg_nr)
268 {
269 static char *register_names[] = {
270 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
271 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
272 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
273 "", "dsr",
274 "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1",
275 "y0", "y1", "", "", "", "", "", "mod",
276 "ssr", "spc",
277 "rs", "re", "", "", "", "", "", "",
278 "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b",
279 "", "", "", "", "", "", "", "",
280 "", "", "", "", "", "", "", "",
281 };
282 if (reg_nr < 0)
283 return NULL;
284 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
285 return NULL;
286 return register_names[reg_nr];
287 }
288
289 static const char *
290 sh_sh4_register_name (int reg_nr)
291 {
292 static char *register_names[] = {
293 /* general registers 0-15 */
294 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
295 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
296 /* 16 - 22 */
297 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
298 /* 23, 24 */
299 "fpul", "fpscr",
300 /* floating point registers 25 - 40 */
301 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
302 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
303 /* 41, 42 */
304 "ssr", "spc",
305 /* bank 0 43 - 50 */
306 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
307 /* bank 1 51 - 58 */
308 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
309 "", "", "", "", "", "", "", "",
310 /* pseudo bank register. */
311 "",
312 /* double precision (pseudo) 59 - 66 */
313 "dr0", "dr2", "dr4", "dr6", "dr8", "dr10", "dr12", "dr14",
314 /* vectors (pseudo) 67 - 70 */
315 "fv0", "fv4", "fv8", "fv12",
316 /* FIXME: missing XF 71 - 86 */
317 /* FIXME: missing XD 87 - 94 */
318 };
319 if (reg_nr < 0)
320 return NULL;
321 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
322 return NULL;
323 return register_names[reg_nr];
324 }
325
326 static const char *
327 sh_sh4_nofpu_register_name (int reg_nr)
328 {
329 static char *register_names[] = {
330 /* general registers 0-15 */
331 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
332 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
333 /* 16 - 22 */
334 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
335 /* 23, 24 */
336 "", "",
337 /* floating point registers 25 - 40 -- not for nofpu target */
338 "", "", "", "", "", "", "", "",
339 "", "", "", "", "", "", "", "",
340 /* 41, 42 */
341 "ssr", "spc",
342 /* bank 0 43 - 50 */
343 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
344 /* bank 1 51 - 58 */
345 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
346 "", "", "", "", "", "", "", "",
347 /* pseudo bank register. */
348 "",
349 /* double precision (pseudo) 59 - 66 -- not for nofpu target */
350 "", "", "", "", "", "", "", "",
351 /* vectors (pseudo) 67 - 70 -- not for nofpu target */
352 "", "", "", "",
353 };
354 if (reg_nr < 0)
355 return NULL;
356 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
357 return NULL;
358 return register_names[reg_nr];
359 }
360
361 static const char *
362 sh_sh4al_dsp_register_name (int reg_nr)
363 {
364 static char *register_names[] = {
365 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
366 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
367 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
368 "", "dsr",
369 "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1",
370 "y0", "y1", "", "", "", "", "", "mod",
371 "ssr", "spc",
372 "rs", "re", "", "", "", "", "", "",
373 "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b",
374 "", "", "", "", "", "", "", "",
375 "", "", "", "", "", "", "", "",
376 };
377 if (reg_nr < 0)
378 return NULL;
379 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
380 return NULL;
381 return register_names[reg_nr];
382 }
383
384 static const unsigned char *
385 sh_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
386 {
387 /* 0xc3c3 is trapa #c3, and it works in big and little endian modes */
388 static unsigned char breakpoint[] = { 0xc3, 0xc3 };
389
390 *lenptr = sizeof (breakpoint);
391 return breakpoint;
392 }
393
394 /* Prologue looks like
395 mov.l r14,@-r15
396 sts.l pr,@-r15
397 mov.l <regs>,@-r15
398 sub <room_for_loca_vars>,r15
399 mov r15,r14
400
401 Actually it can be more complicated than this but that's it, basically.
402 */
403
404 #define GET_SOURCE_REG(x) (((x) >> 4) & 0xf)
405 #define GET_TARGET_REG(x) (((x) >> 8) & 0xf)
406
407 /* JSR @Rm 0100mmmm00001011 */
408 #define IS_JSR(x) (((x) & 0xf0ff) == 0x400b)
409
410 /* STS.L PR,@-r15 0100111100100010
411 r15-4-->r15, PR-->(r15) */
412 #define IS_STS(x) ((x) == 0x4f22)
413
414 /* MOV.L Rm,@-r15 00101111mmmm0110
415 r15-4-->r15, Rm-->(R15) */
416 #define IS_PUSH(x) (((x) & 0xff0f) == 0x2f06)
417
418 /* MOV r15,r14 0110111011110011
419 r15-->r14 */
420 #define IS_MOV_SP_FP(x) ((x) == 0x6ef3)
421
422 /* ADD #imm,r15 01111111iiiiiiii
423 r15+imm-->r15 */
424 #define IS_ADD_IMM_SP(x) (((x) & 0xff00) == 0x7f00)
425
426 #define IS_MOV_R3(x) (((x) & 0xff00) == 0x1a00)
427 #define IS_SHLL_R3(x) ((x) == 0x4300)
428
429 /* ADD r3,r15 0011111100111100
430 r15+r3-->r15 */
431 #define IS_ADD_R3SP(x) ((x) == 0x3f3c)
432
433 /* FMOV.S FRm,@-Rn Rn-4-->Rn, FRm-->(Rn) 1111nnnnmmmm1011
434 FMOV DRm,@-Rn Rn-8-->Rn, DRm-->(Rn) 1111nnnnmmm01011
435 FMOV XDm,@-Rn Rn-8-->Rn, XDm-->(Rn) 1111nnnnmmm11011 */
436 /* CV, 2003-08-28: Only suitable with Rn == SP, therefore name changed to
437 make this entirely clear. */
438 /* #define IS_FMOV(x) (((x) & 0xf00f) == 0xf00b) */
439 #define IS_FPUSH(x) (((x) & 0xff0f) == 0xff0b)
440
441 /* MOV Rm,Rn Rm-->Rn 0110nnnnmmmm0011 4 <= m <= 7 */
442 #define IS_MOV_ARG_TO_REG(x) \
443 (((x) & 0xf00f) == 0x6003 && \
444 ((x) & 0x00f0) >= 0x0040 && \
445 ((x) & 0x00f0) <= 0x0070)
446 /* MOV.L Rm,@Rn 0010nnnnmmmm0010 n = 14, 4 <= m <= 7 */
447 #define IS_MOV_ARG_TO_IND_R14(x) \
448 (((x) & 0xff0f) == 0x2e02 && \
449 ((x) & 0x00f0) >= 0x0040 && \
450 ((x) & 0x00f0) <= 0x0070)
451 /* MOV.L Rm,@(disp*4,Rn) 00011110mmmmdddd n = 14, 4 <= m <= 7 */
452 #define IS_MOV_ARG_TO_IND_R14_WITH_DISP(x) \
453 (((x) & 0xff00) == 0x1e00 && \
454 ((x) & 0x00f0) >= 0x0040 && \
455 ((x) & 0x00f0) <= 0x0070)
456
457 /* MOV.W @(disp*2,PC),Rn 1001nnnndddddddd */
458 #define IS_MOVW_PCREL_TO_REG(x) (((x) & 0xf000) == 0x9000)
459 /* MOV.L @(disp*4,PC),Rn 1101nnnndddddddd */
460 #define IS_MOVL_PCREL_TO_REG(x) (((x) & 0xf000) == 0xd000)
461 /* SUB Rn,R15 00111111nnnn1000 */
462 #define IS_SUB_REG_FROM_SP(x) (((x) & 0xff0f) == 0x3f08)
463
464 #define FPSCR_SZ (1 << 20)
465
466 /* The following instructions are used for epilogue testing. */
467 #define IS_RESTORE_FP(x) ((x) == 0x6ef6)
468 #define IS_RTS(x) ((x) == 0x000b)
469 #define IS_LDS(x) ((x) == 0x4f26)
470 #define IS_MOV_FP_SP(x) ((x) == 0x6fe3)
471 #define IS_ADD_REG_TO_FP(x) (((x) & 0xff0f) == 0x3e0c)
472 #define IS_ADD_IMM_FP(x) (((x) & 0xff00) == 0x7e00)
473
474 /* Disassemble an instruction. */
475 static int
476 gdb_print_insn_sh (bfd_vma memaddr, disassemble_info * info)
477 {
478 info->endian = TARGET_BYTE_ORDER;
479 return print_insn_sh (memaddr, info);
480 }
481
482 static CORE_ADDR
483 sh_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
484 struct sh_frame_cache *cache)
485 {
486 ULONGEST inst;
487 CORE_ADDR opc;
488 int offset;
489 int sav_offset = 0;
490 int r3_val = 0;
491 int reg, sav_reg = -1;
492
493 if (pc >= current_pc)
494 return current_pc;
495
496 cache->uses_fp = 0;
497 for (opc = pc + (2 * 28); pc < opc; pc += 2)
498 {
499 inst = read_memory_unsigned_integer (pc, 2);
500 /* See where the registers will be saved to */
501 if (IS_PUSH (inst))
502 {
503 cache->saved_regs[GET_SOURCE_REG (inst)] = cache->sp_offset;
504 cache->sp_offset += 4;
505 }
506 else if (IS_STS (inst))
507 {
508 cache->saved_regs[PR_REGNUM] = cache->sp_offset;
509 cache->sp_offset += 4;
510 }
511 else if (IS_MOV_R3 (inst))
512 {
513 r3_val = ((inst & 0xff) ^ 0x80) - 0x80;
514 }
515 else if (IS_SHLL_R3 (inst))
516 {
517 r3_val <<= 1;
518 }
519 else if (IS_ADD_R3SP (inst))
520 {
521 cache->sp_offset += -r3_val;
522 }
523 else if (IS_ADD_IMM_SP (inst))
524 {
525 offset = ((inst & 0xff) ^ 0x80) - 0x80;
526 cache->sp_offset -= offset;
527 }
528 else if (IS_MOVW_PCREL_TO_REG (inst))
529 {
530 if (sav_reg < 0)
531 {
532 reg = GET_TARGET_REG (inst);
533 if (reg < 14)
534 {
535 sav_reg = reg;
536 offset = (inst & 0xff) << 1;
537 sav_offset =
538 read_memory_integer ((pc + 4) + offset, 2);
539 }
540 }
541 }
542 else if (IS_MOVL_PCREL_TO_REG (inst))
543 {
544 if (sav_reg < 0)
545 {
546 reg = GET_TARGET_REG (inst);
547 if (reg < 14)
548 {
549 sav_reg = reg;
550 offset = (inst & 0xff) << 2;
551 sav_offset =
552 read_memory_integer (((pc & 0xfffffffc) + 4) + offset, 4);
553 }
554 }
555 }
556 else if (IS_SUB_REG_FROM_SP (inst))
557 {
558 reg = GET_SOURCE_REG (inst);
559 if (sav_reg > 0 && reg == sav_reg)
560 {
561 sav_reg = -1;
562 }
563 cache->sp_offset += sav_offset;
564 }
565 else if (IS_FPUSH (inst))
566 {
567 if (read_register (FPSCR_REGNUM) & FPSCR_SZ)
568 {
569 cache->sp_offset += 8;
570 }
571 else
572 {
573 cache->sp_offset += 4;
574 }
575 }
576 else if (IS_MOV_SP_FP (inst))
577 {
578 cache->uses_fp = 1;
579 /* At this point, only allow argument register moves to other
580 registers or argument register moves to @(X,fp) which are
581 moving the register arguments onto the stack area allocated
582 by a former add somenumber to SP call. Don't allow moving
583 to an fp indirect address above fp + cache->sp_offset. */
584 pc += 2;
585 for (opc = pc + 12; pc < opc; pc += 2)
586 {
587 inst = read_memory_integer (pc, 2);
588 if (IS_MOV_ARG_TO_IND_R14 (inst))
589 {
590 reg = GET_SOURCE_REG (inst);
591 if (cache->sp_offset > 0)
592 cache->saved_regs[reg] = cache->sp_offset;
593 }
594 else if (IS_MOV_ARG_TO_IND_R14_WITH_DISP (inst))
595 {
596 reg = GET_SOURCE_REG (inst);
597 offset = (inst & 0xf) * 4;
598 if (cache->sp_offset > offset)
599 cache->saved_regs[reg] = cache->sp_offset - offset;
600 }
601 else if (IS_MOV_ARG_TO_REG (inst))
602 continue;
603 else
604 break;
605 }
606 break;
607 }
608 else if (IS_JSR (inst))
609 {
610 /* We have found a jsr that has been scheduled into the prologue.
611 If we continue the scan and return a pc someplace after this,
612 then setting a breakpoint on this function will cause it to
613 appear to be called after the function it is calling via the
614 jsr, which will be very confusing. Most likely the next
615 instruction is going to be IS_MOV_SP_FP in the delay slot. If
616 so, note that before returning the current pc. */
617 inst = read_memory_integer (pc + 2, 2);
618 if (IS_MOV_SP_FP (inst))
619 cache->uses_fp = 1;
620 break;
621 }
622 #if 0 /* This used to just stop when it found an instruction that
623 was not considered part of the prologue. Now, we just
624 keep going looking for likely instructions. */
625 else
626 break;
627 #endif
628 }
629
630 return pc;
631 }
632
633 /* Skip any prologue before the guts of a function */
634
635 /* Skip the prologue using the debug information. If this fails we'll
636 fall back on the 'guess' method below. */
637 static CORE_ADDR
638 after_prologue (CORE_ADDR pc)
639 {
640 struct symtab_and_line sal;
641 CORE_ADDR func_addr, func_end;
642
643 /* If we can not find the symbol in the partial symbol table, then
644 there is no hope we can determine the function's start address
645 with this code. */
646 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
647 return 0;
648
649 /* Get the line associated with FUNC_ADDR. */
650 sal = find_pc_line (func_addr, 0);
651
652 /* There are only two cases to consider. First, the end of the source line
653 is within the function bounds. In that case we return the end of the
654 source line. Second is the end of the source line extends beyond the
655 bounds of the current function. We need to use the slow code to
656 examine instructions in that case. */
657 if (sal.end < func_end)
658 return sal.end;
659 else
660 return 0;
661 }
662
663 static CORE_ADDR
664 sh_skip_prologue (CORE_ADDR start_pc)
665 {
666 CORE_ADDR pc;
667 struct sh_frame_cache cache;
668
669 /* See if we can determine the end of the prologue via the symbol table.
670 If so, then return either PC, or the PC after the prologue, whichever
671 is greater. */
672 pc = after_prologue (start_pc);
673
674 /* If after_prologue returned a useful address, then use it. Else
675 fall back on the instruction skipping code. */
676 if (pc)
677 return max (pc, start_pc);
678
679 cache.sp_offset = -4;
680 pc = sh_analyze_prologue (start_pc, (CORE_ADDR) -1, &cache);
681 if (!cache.uses_fp)
682 return start_pc;
683
684 return pc;
685 }
686
687 /* The ABI says:
688
689 Aggregate types not bigger than 8 bytes that have the same size and
690 alignment as one of the integer scalar types are returned in the
691 same registers as the integer type they match.
692
693 For example, a 2-byte aligned structure with size 2 bytes has the
694 same size and alignment as a short int, and will be returned in R0.
695 A 4-byte aligned structure with size 8 bytes has the same size and
696 alignment as a long long int, and will be returned in R0 and R1.
697
698 When an aggregate type is returned in R0 and R1, R0 contains the
699 first four bytes of the aggregate, and R1 contains the
700 remainder. If the size of the aggregate type is not a multiple of 4
701 bytes, the aggregate is tail-padded up to a multiple of 4
702 bytes. The value of the padding is undefined. For little-endian
703 targets the padding will appear at the most significant end of the
704 last element, for big-endian targets the padding appears at the
705 least significant end of the last element.
706
707 All other aggregate types are returned by address. The caller
708 function passes the address of an area large enough to hold the
709 aggregate value in R2. The called function stores the result in
710 this location.
711
712 To reiterate, structs smaller than 8 bytes could also be returned
713 in memory, if they don't pass the "same size and alignment as an
714 integer type" rule.
715
716 For example, in
717
718 struct s { char c[3]; } wibble;
719 struct s foo(void) { return wibble; }
720
721 the return value from foo() will be in memory, not
722 in R0, because there is no 3-byte integer type.
723
724 Similarly, in
725
726 struct s { char c[2]; } wibble;
727 struct s foo(void) { return wibble; }
728
729 because a struct containing two chars has alignment 1, that matches
730 type char, but size 2, that matches type short. There's no integer
731 type that has alignment 1 and size 2, so the struct is returned in
732 memory.
733
734 */
735
736 static int
737 sh_use_struct_convention (int gcc_p, struct type *type)
738 {
739 int len = TYPE_LENGTH (type);
740 int nelem = TYPE_NFIELDS (type);
741
742 /* Non-power of 2 length types and types bigger than 8 bytes (which don't
743 fit in two registers anyway) use struct convention. */
744 if (len != 1 && len != 2 && len != 4 && len != 8)
745 return 1;
746
747 /* Scalar types and aggregate types with exactly one field are aligned
748 by definition. They are returned in registers. */
749 if (nelem <= 1)
750 return 0;
751
752 /* If the first field in the aggregate has the same length as the entire
753 aggregate type, the type is returned in registers. */
754 if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == len)
755 return 0;
756
757 /* If the size of the aggregate is 8 bytes and the first field is
758 of size 4 bytes its alignment is equal to long long's alignment,
759 so it's returned in registers. */
760 if (len == 8 && TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == 4)
761 return 0;
762
763 /* Otherwise use struct convention. */
764 return 1;
765 }
766
767 /* Extract from an array REGBUF containing the (raw) register state
768 the address in which a function should return its structure value,
769 as a CORE_ADDR (or an expression that can be used as one). */
770 static CORE_ADDR
771 sh_extract_struct_value_address (struct regcache *regcache)
772 {
773 ULONGEST addr;
774
775 regcache_cooked_read_unsigned (regcache, STRUCT_RETURN_REGNUM, &addr);
776 return addr;
777 }
778
779 static CORE_ADDR
780 sh_frame_align (struct gdbarch *ignore, CORE_ADDR sp)
781 {
782 return sp & ~3;
783 }
784
785 /* Function: push_dummy_call (formerly push_arguments)
786 Setup the function arguments for calling a function in the inferior.
787
788 On the Renesas SH architecture, there are four registers (R4 to R7)
789 which are dedicated for passing function arguments. Up to the first
790 four arguments (depending on size) may go into these registers.
791 The rest go on the stack.
792
793 MVS: Except on SH variants that have floating point registers.
794 In that case, float and double arguments are passed in the same
795 manner, but using FP registers instead of GP registers.
796
797 Arguments that are smaller than 4 bytes will still take up a whole
798 register or a whole 32-bit word on the stack, and will be
799 right-justified in the register or the stack word. This includes
800 chars, shorts, and small aggregate types.
801
802 Arguments that are larger than 4 bytes may be split between two or
803 more registers. If there are not enough registers free, an argument
804 may be passed partly in a register (or registers), and partly on the
805 stack. This includes doubles, long longs, and larger aggregates.
806 As far as I know, there is no upper limit to the size of aggregates
807 that will be passed in this way; in other words, the convention of
808 passing a pointer to a large aggregate instead of a copy is not used.
809
810 MVS: The above appears to be true for the SH variants that do not
811 have an FPU, however those that have an FPU appear to copy the
812 aggregate argument onto the stack (and not place it in registers)
813 if it is larger than 16 bytes (four GP registers).
814
815 An exceptional case exists for struct arguments (and possibly other
816 aggregates such as arrays) if the size is larger than 4 bytes but
817 not a multiple of 4 bytes. In this case the argument is never split
818 between the registers and the stack, but instead is copied in its
819 entirety onto the stack, AND also copied into as many registers as
820 there is room for. In other words, space in registers permitting,
821 two copies of the same argument are passed in. As far as I can tell,
822 only the one on the stack is used, although that may be a function
823 of the level of compiler optimization. I suspect this is a compiler
824 bug. Arguments of these odd sizes are left-justified within the
825 word (as opposed to arguments smaller than 4 bytes, which are
826 right-justified).
827
828 If the function is to return an aggregate type such as a struct, it
829 is either returned in the normal return value register R0 (if its
830 size is no greater than one byte), or else the caller must allocate
831 space into which the callee will copy the return value (if the size
832 is greater than one byte). In this case, a pointer to the return
833 value location is passed into the callee in register R2, which does
834 not displace any of the other arguments passed in via registers R4
835 to R7. */
836
837 /* Helper function to justify value in register according to endianess. */
838 static char *
839 sh_justify_value_in_reg (struct value *val, int len)
840 {
841 static char valbuf[4];
842
843 memset (valbuf, 0, sizeof (valbuf));
844 if (len < 4)
845 {
846 /* value gets right-justified in the register or stack word */
847 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
848 memcpy (valbuf + (4 - len), (char *) VALUE_CONTENTS (val), len);
849 else
850 memcpy (valbuf, (char *) VALUE_CONTENTS (val), len);
851 return valbuf;
852 }
853 return (char *) VALUE_CONTENTS (val);
854 }
855
856 /* Helper function to eval number of bytes to allocate on stack. */
857 static CORE_ADDR
858 sh_stack_allocsize (int nargs, struct value **args)
859 {
860 int stack_alloc = 0;
861 while (nargs-- > 0)
862 stack_alloc += ((TYPE_LENGTH (VALUE_TYPE (args[nargs])) + 3) & ~3);
863 return stack_alloc;
864 }
865
866 /* Helper functions for getting the float arguments right. Registers usage
867 depends on the ABI and the endianess. The comments should enlighten how
868 it's intended to work. */
869
870 /* This array stores which of the float arg registers are already in use. */
871 static int flt_argreg_array[FLOAT_ARGLAST_REGNUM - FLOAT_ARG0_REGNUM + 1];
872
873 /* This function just resets the above array to "no reg used so far". */
874 static void
875 sh_init_flt_argreg (void)
876 {
877 memset (flt_argreg_array, 0, sizeof flt_argreg_array);
878 }
879
880 /* This function returns the next register to use for float arg passing.
881 It returns either a valid value between FLOAT_ARG0_REGNUM and
882 FLOAT_ARGLAST_REGNUM if a register is available, otherwise it returns
883 FLOAT_ARGLAST_REGNUM + 1 to indicate that no register is available.
884
885 Note that register number 0 in flt_argreg_array corresponds with the
886 real float register fr4. In contrast to FLOAT_ARG0_REGNUM (value is
887 29) the parity of the register number is preserved, which is important
888 for the double register passing test (see the "argreg & 1" test below). */
889 static int
890 sh_next_flt_argreg (int len)
891 {
892 int argreg;
893
894 /* First search for the next free register. */
895 for (argreg = 0; argreg <= FLOAT_ARGLAST_REGNUM - FLOAT_ARG0_REGNUM;
896 ++argreg)
897 if (!flt_argreg_array[argreg])
898 break;
899
900 /* No register left? */
901 if (argreg > FLOAT_ARGLAST_REGNUM - FLOAT_ARG0_REGNUM)
902 return FLOAT_ARGLAST_REGNUM + 1;
903
904 if (len == 8)
905 {
906 /* Doubles are always starting in a even register number. */
907 if (argreg & 1)
908 {
909 flt_argreg_array[argreg] = 1;
910
911 ++argreg;
912
913 /* No register left? */
914 if (argreg > FLOAT_ARGLAST_REGNUM - FLOAT_ARG0_REGNUM)
915 return FLOAT_ARGLAST_REGNUM + 1;
916 }
917 /* Also mark the next register as used. */
918 flt_argreg_array[argreg + 1] = 1;
919 }
920 else if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
921 {
922 /* In little endian, gcc passes floats like this: f5, f4, f7, f6, ... */
923 if (!flt_argreg_array[argreg + 1])
924 ++argreg;
925 }
926 flt_argreg_array[argreg] = 1;
927 return FLOAT_ARG0_REGNUM + argreg;
928 }
929
930 /* Helper function which figures out, if a type is treated like a float type.
931
932 The FPU ABIs have a special way how to treat types as float types.
933 Structures with exactly one member, which is of type float or double, are
934 treated exactly as the base types float or double:
935
936 struct sf {
937 float f;
938 };
939
940 struct sd {
941 double d;
942 };
943
944 are handled the same way as just
945
946 float f;
947
948 double d;
949
950 As a result, arguments of these struct types are pushed into floating point
951 registers exactly as floats or doubles, using the same decision algorithm.
952
953 The same is valid if these types are used as function return types. The
954 above structs are returned in fr0 resp. fr0,fr1 instead of in r0, r0,r1
955 or even using struct convention as it is for other structs. */
956
957 static int
958 sh_treat_as_flt_p (struct type *type)
959 {
960 int len = TYPE_LENGTH (type);
961
962 /* Ordinary float types are obviously treated as float. */
963 if (TYPE_CODE (type) == TYPE_CODE_FLT)
964 return 1;
965 /* Otherwise non-struct types are not treated as float. */
966 if (TYPE_CODE (type) != TYPE_CODE_STRUCT)
967 return 0;
968 /* Otherwise structs with more than one memeber are not treated as float. */
969 if (TYPE_NFIELDS (type) != 1)
970 return 0;
971 /* Otherwise if the type of that member is float, the whole type is
972 treated as float. */
973 if (TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_FLT)
974 return 1;
975 /* Otherwise it's not treated as float. */
976 return 0;
977 }
978
979 static CORE_ADDR
980 sh_push_dummy_call_fpu (struct gdbarch *gdbarch,
981 struct value *function,
982 struct regcache *regcache,
983 CORE_ADDR bp_addr, int nargs,
984 struct value **args,
985 CORE_ADDR sp, int struct_return,
986 CORE_ADDR struct_addr)
987 {
988 int stack_offset = 0;
989 int argreg = ARG0_REGNUM;
990 int flt_argreg = 0;
991 int argnum;
992 struct type *type;
993 CORE_ADDR regval;
994 char *val;
995 int len, reg_size = 0;
996 int pass_on_stack = 0;
997 int treat_as_flt;
998
999 /* first force sp to a 4-byte alignment */
1000 sp = sh_frame_align (gdbarch, sp);
1001
1002 if (struct_return)
1003 regcache_cooked_write_unsigned (regcache,
1004 STRUCT_RETURN_REGNUM, struct_addr);
1005
1006 /* make room on stack for args */
1007 sp -= sh_stack_allocsize (nargs, args);
1008
1009 /* Initialize float argument mechanism. */
1010 sh_init_flt_argreg ();
1011
1012 /* Now load as many as possible of the first arguments into
1013 registers, and push the rest onto the stack. There are 16 bytes
1014 in four registers available. Loop thru args from first to last. */
1015 for (argnum = 0; argnum < nargs; argnum++)
1016 {
1017 type = VALUE_TYPE (args[argnum]);
1018 len = TYPE_LENGTH (type);
1019 val = sh_justify_value_in_reg (args[argnum], len);
1020
1021 /* Some decisions have to be made how various types are handled.
1022 This also differs in different ABIs. */
1023 pass_on_stack = 0;
1024
1025 /* Find out the next register to use for a floating point value. */
1026 treat_as_flt = sh_treat_as_flt_p (type);
1027 if (treat_as_flt)
1028 flt_argreg = sh_next_flt_argreg (len);
1029 /* In contrast to non-FPU CPUs, arguments are never split between
1030 registers and stack. If an argument doesn't fit in the remaining
1031 registers it's always pushed entirely on the stack. */
1032 else if (len > ((ARGLAST_REGNUM - argreg + 1) * 4))
1033 pass_on_stack = 1;
1034
1035 while (len > 0)
1036 {
1037 if ((treat_as_flt && flt_argreg > FLOAT_ARGLAST_REGNUM)
1038 || (!treat_as_flt && (argreg > ARGLAST_REGNUM
1039 || pass_on_stack)))
1040 {
1041 /* The data goes entirely on the stack, 4-byte aligned. */
1042 reg_size = (len + 3) & ~3;
1043 write_memory (sp + stack_offset, val, reg_size);
1044 stack_offset += reg_size;
1045 }
1046 else if (treat_as_flt && flt_argreg <= FLOAT_ARGLAST_REGNUM)
1047 {
1048 /* Argument goes in a float argument register. */
1049 reg_size = register_size (gdbarch, flt_argreg);
1050 regval = extract_unsigned_integer (val, reg_size);
1051 /* In little endian mode, float types taking two registers
1052 (doubles on sh4, long doubles on sh2e, sh3e and sh4) must
1053 be stored swapped in the argument registers. The below
1054 code first writes the first 32 bits in the next but one
1055 register, increments the val and len values accordingly
1056 and then proceeds as normal by writing the second 32 bits
1057 into the next register. */
1058 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE
1059 && TYPE_LENGTH (type) == 2 * reg_size)
1060 {
1061 regcache_cooked_write_unsigned (regcache, flt_argreg + 1,
1062 regval);
1063 val += reg_size;
1064 len -= reg_size;
1065 regval = extract_unsigned_integer (val, reg_size);
1066 }
1067 regcache_cooked_write_unsigned (regcache, flt_argreg++, regval);
1068 }
1069 else if (!treat_as_flt && argreg <= ARGLAST_REGNUM)
1070 {
1071 /* there's room in a register */
1072 reg_size = register_size (gdbarch, argreg);
1073 regval = extract_unsigned_integer (val, reg_size);
1074 regcache_cooked_write_unsigned (regcache, argreg++, regval);
1075 }
1076 /* Store the value one register at a time or in one step on stack. */
1077 len -= reg_size;
1078 val += reg_size;
1079 }
1080 }
1081
1082 /* Store return address. */
1083 regcache_cooked_write_unsigned (regcache, PR_REGNUM, bp_addr);
1084
1085 /* Update stack pointer. */
1086 regcache_cooked_write_unsigned (regcache, SP_REGNUM, sp);
1087
1088 return sp;
1089 }
1090
1091 static CORE_ADDR
1092 sh_push_dummy_call_nofpu (struct gdbarch *gdbarch,
1093 struct value *function,
1094 struct regcache *regcache,
1095 CORE_ADDR bp_addr,
1096 int nargs, struct value **args,
1097 CORE_ADDR sp, int struct_return,
1098 CORE_ADDR struct_addr)
1099 {
1100 int stack_offset = 0;
1101 int argreg = ARG0_REGNUM;
1102 int argnum;
1103 struct type *type;
1104 CORE_ADDR regval;
1105 char *val;
1106 int len, reg_size;
1107
1108 /* first force sp to a 4-byte alignment */
1109 sp = sh_frame_align (gdbarch, sp);
1110
1111 if (struct_return)
1112 regcache_cooked_write_unsigned (regcache,
1113 STRUCT_RETURN_REGNUM, struct_addr);
1114
1115 /* make room on stack for args */
1116 sp -= sh_stack_allocsize (nargs, args);
1117
1118 /* Now load as many as possible of the first arguments into
1119 registers, and push the rest onto the stack. There are 16 bytes
1120 in four registers available. Loop thru args from first to last. */
1121 for (argnum = 0; argnum < nargs; argnum++)
1122 {
1123 type = VALUE_TYPE (args[argnum]);
1124 len = TYPE_LENGTH (type);
1125 val = sh_justify_value_in_reg (args[argnum], len);
1126
1127 while (len > 0)
1128 {
1129 if (argreg > ARGLAST_REGNUM)
1130 {
1131 /* The remainder of the data goes entirely on the stack,
1132 4-byte aligned. */
1133 reg_size = (len + 3) & ~3;
1134 write_memory (sp + stack_offset, val, reg_size);
1135 stack_offset += reg_size;
1136 }
1137 else if (argreg <= ARGLAST_REGNUM)
1138 {
1139 /* there's room in a register */
1140 reg_size = register_size (gdbarch, argreg);
1141 regval = extract_unsigned_integer (val, reg_size);
1142 regcache_cooked_write_unsigned (regcache, argreg++, regval);
1143 }
1144 /* Store the value reg_size bytes at a time. This means that things
1145 larger than reg_size bytes may go partly in registers and partly
1146 on the stack. */
1147 len -= reg_size;
1148 val += reg_size;
1149 }
1150 }
1151
1152 /* Store return address. */
1153 regcache_cooked_write_unsigned (regcache, PR_REGNUM, bp_addr);
1154
1155 /* Update stack pointer. */
1156 regcache_cooked_write_unsigned (regcache, SP_REGNUM, sp);
1157
1158 return sp;
1159 }
1160
1161 /* Find a function's return value in the appropriate registers (in
1162 regbuf), and copy it into valbuf. Extract from an array REGBUF
1163 containing the (raw) register state a function return value of type
1164 TYPE, and copy that, in virtual format, into VALBUF. */
1165 static void
1166 sh_default_extract_return_value (struct type *type, struct regcache *regcache,
1167 void *valbuf)
1168 {
1169 int len = TYPE_LENGTH (type);
1170 int return_register = R0_REGNUM;
1171 int offset;
1172
1173 if (len <= 4)
1174 {
1175 ULONGEST c;
1176
1177 regcache_cooked_read_unsigned (regcache, R0_REGNUM, &c);
1178 store_unsigned_integer (valbuf, len, c);
1179 }
1180 else if (len == 8)
1181 {
1182 int i, regnum = R0_REGNUM;
1183 for (i = 0; i < len; i += 4)
1184 regcache_raw_read (regcache, regnum++, (char *) valbuf + i);
1185 }
1186 else
1187 error ("bad size for return value");
1188 }
1189
1190 static void
1191 sh3e_sh4_extract_return_value (struct type *type, struct regcache *regcache,
1192 void *valbuf)
1193 {
1194 if (sh_treat_as_flt_p (type))
1195 {
1196 int len = TYPE_LENGTH (type);
1197 int i, regnum = FP0_REGNUM;
1198 for (i = 0; i < len; i += 4)
1199 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
1200 regcache_raw_read (regcache, regnum++, (char *) valbuf + len - 4 - i);
1201 else
1202 regcache_raw_read (regcache, regnum++, (char *) valbuf + i);
1203 }
1204 else
1205 sh_default_extract_return_value (type, regcache, valbuf);
1206 }
1207
1208 /* Write into appropriate registers a function return value
1209 of type TYPE, given in virtual format.
1210 If the architecture is sh4 or sh3e, store a function's return value
1211 in the R0 general register or in the FP0 floating point register,
1212 depending on the type of the return value. In all the other cases
1213 the result is stored in r0, left-justified. */
1214 static void
1215 sh_default_store_return_value (struct type *type, struct regcache *regcache,
1216 const void *valbuf)
1217 {
1218 ULONGEST val;
1219 int len = TYPE_LENGTH (type);
1220
1221 if (len <= 4)
1222 {
1223 val = extract_unsigned_integer (valbuf, len);
1224 regcache_cooked_write_unsigned (regcache, R0_REGNUM, val);
1225 }
1226 else
1227 {
1228 int i, regnum = R0_REGNUM;
1229 for (i = 0; i < len; i += 4)
1230 regcache_raw_write (regcache, regnum++, (char *) valbuf + i);
1231 }
1232 }
1233
1234 static void
1235 sh3e_sh4_store_return_value (struct type *type, struct regcache *regcache,
1236 const void *valbuf)
1237 {
1238 if (sh_treat_as_flt_p (type))
1239 {
1240 int len = TYPE_LENGTH (type);
1241 int i, regnum = FP0_REGNUM;
1242 for (i = 0; i < len; i += 4)
1243 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
1244 regcache_raw_write (regcache, regnum++,
1245 (char *) valbuf + len - 4 - i);
1246 else
1247 regcache_raw_write (regcache, regnum++, (char *) valbuf + i);
1248 }
1249 else
1250 sh_default_store_return_value (type, regcache, valbuf);
1251 }
1252
1253 /* Print the registers in a form similar to the E7000 */
1254
1255 static void
1256 sh_generic_show_regs (void)
1257 {
1258 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1259 paddr (read_register (PC_REGNUM)),
1260 (long) read_register (SR_REGNUM),
1261 (long) read_register (PR_REGNUM),
1262 (long) read_register (MACH_REGNUM),
1263 (long) read_register (MACL_REGNUM));
1264
1265 printf_filtered ("GBR=%08lx VBR=%08lx",
1266 (long) read_register (GBR_REGNUM),
1267 (long) read_register (VBR_REGNUM));
1268
1269 printf_filtered
1270 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1271 (long) read_register (0), (long) read_register (1),
1272 (long) read_register (2), (long) read_register (3),
1273 (long) read_register (4), (long) read_register (5),
1274 (long) read_register (6), (long) read_register (7));
1275 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1276 (long) read_register (8), (long) read_register (9),
1277 (long) read_register (10), (long) read_register (11),
1278 (long) read_register (12), (long) read_register (13),
1279 (long) read_register (14), (long) read_register (15));
1280 }
1281
1282 static void
1283 sh3_show_regs (void)
1284 {
1285 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1286 paddr (read_register (PC_REGNUM)),
1287 (long) read_register (SR_REGNUM),
1288 (long) read_register (PR_REGNUM),
1289 (long) read_register (MACH_REGNUM),
1290 (long) read_register (MACL_REGNUM));
1291
1292 printf_filtered ("GBR=%08lx VBR=%08lx",
1293 (long) read_register (GBR_REGNUM),
1294 (long) read_register (VBR_REGNUM));
1295 printf_filtered (" SSR=%08lx SPC=%08lx",
1296 (long) read_register (SSR_REGNUM),
1297 (long) read_register (SPC_REGNUM));
1298
1299 printf_filtered
1300 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1301 (long) read_register (0), (long) read_register (1),
1302 (long) read_register (2), (long) read_register (3),
1303 (long) read_register (4), (long) read_register (5),
1304 (long) read_register (6), (long) read_register (7));
1305 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1306 (long) read_register (8), (long) read_register (9),
1307 (long) read_register (10), (long) read_register (11),
1308 (long) read_register (12), (long) read_register (13),
1309 (long) read_register (14), (long) read_register (15));
1310 }
1311
1312
1313 static void
1314 sh2e_show_regs (void)
1315 {
1316 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1317 paddr (read_register (PC_REGNUM)),
1318 (long) read_register (SR_REGNUM),
1319 (long) read_register (PR_REGNUM),
1320 (long) read_register (MACH_REGNUM),
1321 (long) read_register (MACL_REGNUM));
1322
1323 printf_filtered ("GBR=%08lx VBR=%08lx",
1324 (long) read_register (GBR_REGNUM),
1325 (long) read_register (VBR_REGNUM));
1326 printf_filtered (" FPUL=%08lx FPSCR=%08lx",
1327 (long) read_register (FPUL_REGNUM),
1328 (long) read_register (FPSCR_REGNUM));
1329
1330 printf_filtered
1331 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1332 (long) read_register (0), (long) read_register (1),
1333 (long) read_register (2), (long) read_register (3),
1334 (long) read_register (4), (long) read_register (5),
1335 (long) read_register (6), (long) read_register (7));
1336 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1337 (long) read_register (8), (long) read_register (9),
1338 (long) read_register (10), (long) read_register (11),
1339 (long) read_register (12), (long) read_register (13),
1340 (long) read_register (14), (long) read_register (15));
1341
1342 printf_filtered (("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), (long) read_register (FP0_REGNUM + 0), (long) read_register (FP0_REGNUM + 1), (long) read_register (FP0_REGNUM + 2), (long) read_register (FP0_REGNUM + 3), (long) read_register (FP0_REGNUM + 4), (long) read_register (FP0_REGNUM + 5), (long) read_register (FP0_REGNUM + 6), (long) read_register (FP0_REGNUM + 7));
1343 printf_filtered (("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), (long) read_register (FP0_REGNUM + 8), (long) read_register (FP0_REGNUM + 9), (long) read_register (FP0_REGNUM + 10), (long) read_register (FP0_REGNUM + 11), (long) read_register (FP0_REGNUM + 12), (long) read_register (FP0_REGNUM + 13), (long) read_register (FP0_REGNUM + 14), (long) read_register (FP0_REGNUM + 15));
1344 }
1345
1346 static void
1347 sh2a_show_regs (void)
1348 {
1349 int pr = read_register (FPSCR_REGNUM) & 0x80000;
1350 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1351 paddr (read_register (PC_REGNUM)),
1352 (long) read_register (SR_REGNUM),
1353 (long) read_register (PR_REGNUM),
1354 (long) read_register (MACH_REGNUM),
1355 (long) read_register (MACL_REGNUM));
1356
1357 printf_filtered ("GBR=%08lx VBR=%08lx TBR=%08lx",
1358 (long) read_register (GBR_REGNUM),
1359 (long) read_register (VBR_REGNUM),
1360 (long) read_register (TBR_REGNUM));
1361 printf_filtered (" FPUL=%08lx FPSCR=%08lx\n",
1362 (long) read_register (FPUL_REGNUM),
1363 (long) read_register (FPSCR_REGNUM));
1364
1365 printf_filtered ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1366 (long) read_register (0), (long) read_register (1),
1367 (long) read_register (2), (long) read_register (3),
1368 (long) read_register (4), (long) read_register (5),
1369 (long) read_register (6), (long) read_register (7));
1370 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1371 (long) read_register (8), (long) read_register (9),
1372 (long) read_register (10), (long) read_register (11),
1373 (long) read_register (12), (long) read_register (13),
1374 (long) read_register (14), (long) read_register (15));
1375
1376 printf_filtered ((pr
1377 ? "DR0-DR6 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
1378 :
1379 "FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
1380 (long) read_register (FP0_REGNUM + 0),
1381 (long) read_register (FP0_REGNUM + 1),
1382 (long) read_register (FP0_REGNUM + 2),
1383 (long) read_register (FP0_REGNUM + 3),
1384 (long) read_register (FP0_REGNUM + 4),
1385 (long) read_register (FP0_REGNUM + 5),
1386 (long) read_register (FP0_REGNUM + 6),
1387 (long) read_register (FP0_REGNUM + 7));
1388 printf_filtered ((pr ?
1389 "DR8-DR14 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n" :
1390 "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
1391 (long) read_register (FP0_REGNUM + 8),
1392 (long) read_register (FP0_REGNUM + 9),
1393 (long) read_register (FP0_REGNUM + 10),
1394 (long) read_register (FP0_REGNUM + 11),
1395 (long) read_register (FP0_REGNUM + 12),
1396 (long) read_register (FP0_REGNUM + 13),
1397 (long) read_register (FP0_REGNUM + 14),
1398 (long) read_register (FP0_REGNUM + 15));
1399 printf_filtered ("BANK=%-3d\n", (int) read_register (BANK_REGNUM));
1400 printf_filtered ("R0b - R7b %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1401 (long) read_register (R0_BANK0_REGNUM + 0),
1402 (long) read_register (R0_BANK0_REGNUM + 1),
1403 (long) read_register (R0_BANK0_REGNUM + 2),
1404 (long) read_register (R0_BANK0_REGNUM + 3),
1405 (long) read_register (R0_BANK0_REGNUM + 4),
1406 (long) read_register (R0_BANK0_REGNUM + 5),
1407 (long) read_register (R0_BANK0_REGNUM + 6),
1408 (long) read_register (R0_BANK0_REGNUM + 7));
1409 printf_filtered ("R8b - R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1410 (long) read_register (R0_BANK0_REGNUM + 8),
1411 (long) read_register (R0_BANK0_REGNUM + 9),
1412 (long) read_register (R0_BANK0_REGNUM + 10),
1413 (long) read_register (R0_BANK0_REGNUM + 11),
1414 (long) read_register (R0_BANK0_REGNUM + 12),
1415 (long) read_register (R0_BANK0_REGNUM + 13),
1416 (long) read_register (R0_BANK0_REGNUM + 14));
1417 printf_filtered ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
1418 (long) read_register (R0_BANK0_REGNUM + 15),
1419 (long) read_register (R0_BANK0_REGNUM + 16),
1420 (long) read_register (R0_BANK0_REGNUM + 17),
1421 (long) read_register (R0_BANK0_REGNUM + 18),
1422 (long) read_register (R0_BANK0_REGNUM + 19));
1423 }
1424
1425 static void
1426 sh2a_nofpu_show_regs (void)
1427 {
1428 int pr = read_register (FPSCR_REGNUM) & 0x80000;
1429 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1430 paddr (read_register (PC_REGNUM)),
1431 (long) read_register (SR_REGNUM),
1432 (long) read_register (PR_REGNUM),
1433 (long) read_register (MACH_REGNUM),
1434 (long) read_register (MACL_REGNUM));
1435
1436 printf_filtered ("GBR=%08lx VBR=%08lx TBR=%08lx",
1437 (long) read_register (GBR_REGNUM),
1438 (long) read_register (VBR_REGNUM),
1439 (long) read_register (TBR_REGNUM));
1440 printf_filtered (" FPUL=%08lx FPSCR=%08lx\n",
1441 (long) read_register (FPUL_REGNUM),
1442 (long) read_register (FPSCR_REGNUM));
1443
1444 printf_filtered ("R0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1445 (long) read_register (0), (long) read_register (1),
1446 (long) read_register (2), (long) read_register (3),
1447 (long) read_register (4), (long) read_register (5),
1448 (long) read_register (6), (long) read_register (7));
1449 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1450 (long) read_register (8), (long) read_register (9),
1451 (long) read_register (10), (long) read_register (11),
1452 (long) read_register (12), (long) read_register (13),
1453 (long) read_register (14), (long) read_register (15));
1454
1455 printf_filtered ("BANK=%-3d\n", (int) read_register (BANK_REGNUM));
1456 printf_filtered ("R0b - R7b %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1457 (long) read_register (R0_BANK0_REGNUM + 0),
1458 (long) read_register (R0_BANK0_REGNUM + 1),
1459 (long) read_register (R0_BANK0_REGNUM + 2),
1460 (long) read_register (R0_BANK0_REGNUM + 3),
1461 (long) read_register (R0_BANK0_REGNUM + 4),
1462 (long) read_register (R0_BANK0_REGNUM + 5),
1463 (long) read_register (R0_BANK0_REGNUM + 6),
1464 (long) read_register (R0_BANK0_REGNUM + 7));
1465 printf_filtered ("R8b - R14b %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1466 (long) read_register (R0_BANK0_REGNUM + 8),
1467 (long) read_register (R0_BANK0_REGNUM + 9),
1468 (long) read_register (R0_BANK0_REGNUM + 10),
1469 (long) read_register (R0_BANK0_REGNUM + 11),
1470 (long) read_register (R0_BANK0_REGNUM + 12),
1471 (long) read_register (R0_BANK0_REGNUM + 13),
1472 (long) read_register (R0_BANK0_REGNUM + 14));
1473 printf_filtered ("MACHb=%08lx IVNb=%08lx PRb=%08lx GBRb=%08lx MACLb=%08lx\n",
1474 (long) read_register (R0_BANK0_REGNUM + 15),
1475 (long) read_register (R0_BANK0_REGNUM + 16),
1476 (long) read_register (R0_BANK0_REGNUM + 17),
1477 (long) read_register (R0_BANK0_REGNUM + 18),
1478 (long) read_register (R0_BANK0_REGNUM + 19));
1479 }
1480
1481 static void
1482 sh3e_show_regs (void)
1483 {
1484 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1485 paddr (read_register (PC_REGNUM)),
1486 (long) read_register (SR_REGNUM),
1487 (long) read_register (PR_REGNUM),
1488 (long) read_register (MACH_REGNUM),
1489 (long) read_register (MACL_REGNUM));
1490
1491 printf_filtered ("GBR=%08lx VBR=%08lx",
1492 (long) read_register (GBR_REGNUM),
1493 (long) read_register (VBR_REGNUM));
1494 printf_filtered (" SSR=%08lx SPC=%08lx",
1495 (long) read_register (SSR_REGNUM),
1496 (long) read_register (SPC_REGNUM));
1497 printf_filtered (" FPUL=%08lx FPSCR=%08lx",
1498 (long) read_register (FPUL_REGNUM),
1499 (long) read_register (FPSCR_REGNUM));
1500
1501 printf_filtered
1502 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1503 (long) read_register (0), (long) read_register (1),
1504 (long) read_register (2), (long) read_register (3),
1505 (long) read_register (4), (long) read_register (5),
1506 (long) read_register (6), (long) read_register (7));
1507 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1508 (long) read_register (8), (long) read_register (9),
1509 (long) read_register (10), (long) read_register (11),
1510 (long) read_register (12), (long) read_register (13),
1511 (long) read_register (14), (long) read_register (15));
1512
1513 printf_filtered (("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), (long) read_register (FP0_REGNUM + 0), (long) read_register (FP0_REGNUM + 1), (long) read_register (FP0_REGNUM + 2), (long) read_register (FP0_REGNUM + 3), (long) read_register (FP0_REGNUM + 4), (long) read_register (FP0_REGNUM + 5), (long) read_register (FP0_REGNUM + 6), (long) read_register (FP0_REGNUM + 7));
1514 printf_filtered (("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), (long) read_register (FP0_REGNUM + 8), (long) read_register (FP0_REGNUM + 9), (long) read_register (FP0_REGNUM + 10), (long) read_register (FP0_REGNUM + 11), (long) read_register (FP0_REGNUM + 12), (long) read_register (FP0_REGNUM + 13), (long) read_register (FP0_REGNUM + 14), (long) read_register (FP0_REGNUM + 15));
1515 }
1516
1517 static void
1518 sh3_dsp_show_regs (void)
1519 {
1520 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1521 paddr (read_register (PC_REGNUM)),
1522 (long) read_register (SR_REGNUM),
1523 (long) read_register (PR_REGNUM),
1524 (long) read_register (MACH_REGNUM),
1525 (long) read_register (MACL_REGNUM));
1526
1527 printf_filtered ("GBR=%08lx VBR=%08lx",
1528 (long) read_register (GBR_REGNUM),
1529 (long) read_register (VBR_REGNUM));
1530
1531 printf_filtered (" SSR=%08lx SPC=%08lx",
1532 (long) read_register (SSR_REGNUM),
1533 (long) read_register (SPC_REGNUM));
1534
1535 printf_filtered (" DSR=%08lx", (long) read_register (DSR_REGNUM));
1536
1537 printf_filtered
1538 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1539 (long) read_register (0), (long) read_register (1),
1540 (long) read_register (2), (long) read_register (3),
1541 (long) read_register (4), (long) read_register (5),
1542 (long) read_register (6), (long) read_register (7));
1543 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1544 (long) read_register (8), (long) read_register (9),
1545 (long) read_register (10), (long) read_register (11),
1546 (long) read_register (12), (long) read_register (13),
1547 (long) read_register (14), (long) read_register (15));
1548
1549 printf_filtered
1550 ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
1551 (long) read_register (A0G_REGNUM) & 0xff,
1552 (long) read_register (A0_REGNUM), (long) read_register (M0_REGNUM),
1553 (long) read_register (X0_REGNUM), (long) read_register (Y0_REGNUM),
1554 (long) read_register (RS_REGNUM), (long) read_register (MOD_REGNUM));
1555 printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
1556 (long) read_register (A1G_REGNUM) & 0xff,
1557 (long) read_register (A1_REGNUM),
1558 (long) read_register (M1_REGNUM),
1559 (long) read_register (X1_REGNUM),
1560 (long) read_register (Y1_REGNUM),
1561 (long) read_register (RE_REGNUM));
1562 }
1563
1564 static void
1565 sh4_show_regs (void)
1566 {
1567 int pr = read_register (FPSCR_REGNUM) & 0x80000;
1568 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1569 paddr (read_register (PC_REGNUM)),
1570 (long) read_register (SR_REGNUM),
1571 (long) read_register (PR_REGNUM),
1572 (long) read_register (MACH_REGNUM),
1573 (long) read_register (MACL_REGNUM));
1574
1575 printf_filtered ("GBR=%08lx VBR=%08lx",
1576 (long) read_register (GBR_REGNUM),
1577 (long) read_register (VBR_REGNUM));
1578 printf_filtered (" SSR=%08lx SPC=%08lx",
1579 (long) read_register (SSR_REGNUM),
1580 (long) read_register (SPC_REGNUM));
1581 printf_filtered (" FPUL=%08lx FPSCR=%08lx",
1582 (long) read_register (FPUL_REGNUM),
1583 (long) read_register (FPSCR_REGNUM));
1584
1585 printf_filtered
1586 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1587 (long) read_register (0), (long) read_register (1),
1588 (long) read_register (2), (long) read_register (3),
1589 (long) read_register (4), (long) read_register (5),
1590 (long) read_register (6), (long) read_register (7));
1591 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1592 (long) read_register (8), (long) read_register (9),
1593 (long) read_register (10), (long) read_register (11),
1594 (long) read_register (12), (long) read_register (13),
1595 (long) read_register (14), (long) read_register (15));
1596
1597 printf_filtered ((pr
1598 ? "DR0-DR6 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
1599 :
1600 "FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
1601 (long) read_register (FP0_REGNUM + 0),
1602 (long) read_register (FP0_REGNUM + 1),
1603 (long) read_register (FP0_REGNUM + 2),
1604 (long) read_register (FP0_REGNUM + 3),
1605 (long) read_register (FP0_REGNUM + 4),
1606 (long) read_register (FP0_REGNUM + 5),
1607 (long) read_register (FP0_REGNUM + 6),
1608 (long) read_register (FP0_REGNUM + 7));
1609 printf_filtered ((pr ?
1610 "DR8-DR14 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n" :
1611 "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
1612 (long) read_register (FP0_REGNUM + 8),
1613 (long) read_register (FP0_REGNUM + 9),
1614 (long) read_register (FP0_REGNUM + 10),
1615 (long) read_register (FP0_REGNUM + 11),
1616 (long) read_register (FP0_REGNUM + 12),
1617 (long) read_register (FP0_REGNUM + 13),
1618 (long) read_register (FP0_REGNUM + 14),
1619 (long) read_register (FP0_REGNUM + 15));
1620 }
1621
1622 static void
1623 sh4_nofpu_show_regs (void)
1624 {
1625 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1626 paddr (read_register (PC_REGNUM)),
1627 (long) read_register (SR_REGNUM),
1628 (long) read_register (PR_REGNUM),
1629 (long) read_register (MACH_REGNUM),
1630 (long) read_register (MACL_REGNUM));
1631
1632 printf_filtered ("GBR=%08lx VBR=%08lx",
1633 (long) read_register (GBR_REGNUM),
1634 (long) read_register (VBR_REGNUM));
1635 printf_filtered (" SSR=%08lx SPC=%08lx",
1636 (long) read_register (SSR_REGNUM),
1637 (long) read_register (SPC_REGNUM));
1638
1639 printf_filtered
1640 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1641 (long) read_register (0), (long) read_register (1),
1642 (long) read_register (2), (long) read_register (3),
1643 (long) read_register (4), (long) read_register (5),
1644 (long) read_register (6), (long) read_register (7));
1645 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1646 (long) read_register (8), (long) read_register (9),
1647 (long) read_register (10), (long) read_register (11),
1648 (long) read_register (12), (long) read_register (13),
1649 (long) read_register (14), (long) read_register (15));
1650 }
1651
1652 static void
1653 sh_dsp_show_regs (void)
1654 {
1655 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
1656 paddr (read_register (PC_REGNUM)),
1657 (long) read_register (SR_REGNUM),
1658 (long) read_register (PR_REGNUM),
1659 (long) read_register (MACH_REGNUM),
1660 (long) read_register (MACL_REGNUM));
1661
1662 printf_filtered ("GBR=%08lx VBR=%08lx",
1663 (long) read_register (GBR_REGNUM),
1664 (long) read_register (VBR_REGNUM));
1665
1666 printf_filtered (" DSR=%08lx", (long) read_register (DSR_REGNUM));
1667
1668 printf_filtered
1669 ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1670 (long) read_register (0), (long) read_register (1),
1671 (long) read_register (2), (long) read_register (3),
1672 (long) read_register (4), (long) read_register (5),
1673 (long) read_register (6), (long) read_register (7));
1674 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
1675 (long) read_register (8), (long) read_register (9),
1676 (long) read_register (10), (long) read_register (11),
1677 (long) read_register (12), (long) read_register (13),
1678 (long) read_register (14), (long) read_register (15));
1679
1680 printf_filtered
1681 ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
1682 (long) read_register (A0G_REGNUM) & 0xff,
1683 (long) read_register (A0_REGNUM), (long) read_register (M0_REGNUM),
1684 (long) read_register (X0_REGNUM), (long) read_register (Y0_REGNUM),
1685 (long) read_register (RS_REGNUM), (long) read_register (MOD_REGNUM));
1686 printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
1687 (long) read_register (A1G_REGNUM) & 0xff,
1688 (long) read_register (A1_REGNUM),
1689 (long) read_register (M1_REGNUM),
1690 (long) read_register (X1_REGNUM),
1691 (long) read_register (Y1_REGNUM),
1692 (long) read_register (RE_REGNUM));
1693 }
1694
1695 static void
1696 sh_show_regs_command (char *args, int from_tty)
1697 {
1698 if (sh_show_regs)
1699 (*sh_show_regs) ();
1700 }
1701
1702 static struct type *
1703 sh_sh2a_register_type (struct gdbarch *gdbarch, int reg_nr)
1704 {
1705 if ((reg_nr >= FP0_REGNUM
1706 && (reg_nr <= FP_LAST_REGNUM)) || (reg_nr == FPUL_REGNUM))
1707 return builtin_type_float;
1708 else if (reg_nr >= DR0_REGNUM && reg_nr <= DR_LAST_REGNUM)
1709 return builtin_type_double;
1710 else
1711 return builtin_type_int;
1712 }
1713
1714 /* Return the GDB type object for the "standard" data type
1715 of data in register N. */
1716 static struct type *
1717 sh_sh3e_register_type (struct gdbarch *gdbarch, int reg_nr)
1718 {
1719 if ((reg_nr >= FP0_REGNUM
1720 && (reg_nr <= FP_LAST_REGNUM)) || (reg_nr == FPUL_REGNUM))
1721 return builtin_type_float;
1722 else
1723 return builtin_type_int;
1724 }
1725
1726 static struct type *
1727 sh_sh4_build_float_register_type (int high)
1728 {
1729 struct type *temp;
1730
1731 temp = create_range_type (NULL, builtin_type_int, 0, high);
1732 return create_array_type (NULL, builtin_type_float, temp);
1733 }
1734
1735 static struct type *
1736 sh_sh4_register_type (struct gdbarch *gdbarch, int reg_nr)
1737 {
1738 if ((reg_nr >= FP0_REGNUM
1739 && (reg_nr <= FP_LAST_REGNUM)) || (reg_nr == FPUL_REGNUM))
1740 return builtin_type_float;
1741 else if (reg_nr >= DR0_REGNUM && reg_nr <= DR_LAST_REGNUM)
1742 return builtin_type_double;
1743 else if (reg_nr >= FV0_REGNUM && reg_nr <= FV_LAST_REGNUM)
1744 return sh_sh4_build_float_register_type (3);
1745 else
1746 return builtin_type_int;
1747 }
1748
1749 static struct type *
1750 sh_default_register_type (struct gdbarch *gdbarch, int reg_nr)
1751 {
1752 return builtin_type_int;
1753 }
1754
1755 /* On the sh4, the DRi pseudo registers are problematic if the target
1756 is little endian. When the user writes one of those registers, for
1757 instance with 'ser var $dr0=1', we want the double to be stored
1758 like this:
1759 fr0 = 0x00 0x00 0x00 0x00 0x00 0xf0 0x3f
1760 fr1 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
1761
1762 This corresponds to little endian byte order & big endian word
1763 order. However if we let gdb write the register w/o conversion, it
1764 will write fr0 and fr1 this way:
1765 fr0 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
1766 fr1 = 0x00 0x00 0x00 0x00 0x00 0xf0 0x3f
1767 because it will consider fr0 and fr1 as a single LE stretch of memory.
1768
1769 To achieve what we want we must force gdb to store things in
1770 floatformat_ieee_double_littlebyte_bigword (which is defined in
1771 include/floatformat.h and libiberty/floatformat.c.
1772
1773 In case the target is big endian, there is no problem, the
1774 raw bytes will look like:
1775 fr0 = 0x3f 0xf0 0x00 0x00 0x00 0x00 0x00
1776 fr1 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
1777
1778 The other pseudo registers (the FVs) also don't pose a problem
1779 because they are stored as 4 individual FP elements. */
1780
1781 static void
1782 sh_register_convert_to_virtual (int regnum, struct type *type,
1783 char *from, char *to)
1784 {
1785 if (regnum >= DR0_REGNUM && regnum <= DR_LAST_REGNUM)
1786 {
1787 DOUBLEST val;
1788 floatformat_to_doublest (&floatformat_ieee_double_littlebyte_bigword,
1789 from, &val);
1790 store_typed_floating (to, type, val);
1791 }
1792 else
1793 error
1794 ("sh_register_convert_to_virtual called with non DR register number");
1795 }
1796
1797 static void
1798 sh_register_convert_to_raw (struct type *type, int regnum,
1799 const void *from, void *to)
1800 {
1801 if (regnum >= DR0_REGNUM && regnum <= DR_LAST_REGNUM)
1802 {
1803 DOUBLEST val = extract_typed_floating (from, type);
1804 floatformat_from_doublest (&floatformat_ieee_double_littlebyte_bigword,
1805 &val, to);
1806 }
1807 else
1808 error ("sh_register_convert_to_raw called with non DR register number");
1809 }
1810
1811 /* For vectors of 4 floating point registers. */
1812 static int
1813 fv_reg_base_num (int fv_regnum)
1814 {
1815 int fp_regnum;
1816
1817 fp_regnum = FP0_REGNUM + (fv_regnum - FV0_REGNUM) * 4;
1818 return fp_regnum;
1819 }
1820
1821 /* For double precision floating point registers, i.e 2 fp regs.*/
1822 static int
1823 dr_reg_base_num (int dr_regnum)
1824 {
1825 int fp_regnum;
1826
1827 fp_regnum = FP0_REGNUM + (dr_regnum - DR0_REGNUM) * 2;
1828 return fp_regnum;
1829 }
1830
1831 static void
1832 sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
1833 int reg_nr, void *buffer)
1834 {
1835 int base_regnum, portion;
1836 char temp_buffer[MAX_REGISTER_SIZE];
1837
1838 if (reg_nr >= DR0_REGNUM && reg_nr <= DR_LAST_REGNUM)
1839 {
1840 base_regnum = dr_reg_base_num (reg_nr);
1841
1842 /* Build the value in the provided buffer. */
1843 /* Read the real regs for which this one is an alias. */
1844 for (portion = 0; portion < 2; portion++)
1845 regcache_raw_read (regcache, base_regnum + portion,
1846 (temp_buffer
1847 + register_size (gdbarch,
1848 base_regnum) * portion));
1849 /* We must pay attention to the endiannes. */
1850 sh_register_convert_to_virtual (reg_nr,
1851 gdbarch_register_type (gdbarch, reg_nr),
1852 temp_buffer, buffer);
1853 }
1854 else if (reg_nr >= FV0_REGNUM && reg_nr <= FV_LAST_REGNUM)
1855 {
1856 base_regnum = fv_reg_base_num (reg_nr);
1857
1858 /* Read the real regs for which this one is an alias. */
1859 for (portion = 0; portion < 4; portion++)
1860 regcache_raw_read (regcache, base_regnum + portion,
1861 ((char *) buffer
1862 + register_size (gdbarch,
1863 base_regnum) * portion));
1864 }
1865 }
1866
1867 static void
1868 sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
1869 int reg_nr, const void *buffer)
1870 {
1871 int base_regnum, portion;
1872 char temp_buffer[MAX_REGISTER_SIZE];
1873
1874 if (reg_nr >= DR0_REGNUM && reg_nr <= DR_LAST_REGNUM)
1875 {
1876 base_regnum = dr_reg_base_num (reg_nr);
1877
1878 /* We must pay attention to the endiannes. */
1879 sh_register_convert_to_raw (gdbarch_register_type (gdbarch, reg_nr),
1880 reg_nr, buffer, temp_buffer);
1881
1882 /* Write the real regs for which this one is an alias. */
1883 for (portion = 0; portion < 2; portion++)
1884 regcache_raw_write (regcache, base_regnum + portion,
1885 (temp_buffer
1886 + register_size (gdbarch,
1887 base_regnum) * portion));
1888 }
1889 else if (reg_nr >= FV0_REGNUM && reg_nr <= FV_LAST_REGNUM)
1890 {
1891 base_regnum = fv_reg_base_num (reg_nr);
1892
1893 /* Write the real regs for which this one is an alias. */
1894 for (portion = 0; portion < 4; portion++)
1895 regcache_raw_write (regcache, base_regnum + portion,
1896 ((char *) buffer
1897 + register_size (gdbarch,
1898 base_regnum) * portion));
1899 }
1900 }
1901
1902 /* Floating point vector of 4 float registers. */
1903 static void
1904 do_fv_register_info (struct gdbarch *gdbarch, struct ui_file *file,
1905 int fv_regnum)
1906 {
1907 int first_fp_reg_num = fv_reg_base_num (fv_regnum);
1908 fprintf_filtered (file, "fv%d\t0x%08x\t0x%08x\t0x%08x\t0x%08x\n",
1909 fv_regnum - FV0_REGNUM,
1910 (int) read_register (first_fp_reg_num),
1911 (int) read_register (first_fp_reg_num + 1),
1912 (int) read_register (first_fp_reg_num + 2),
1913 (int) read_register (first_fp_reg_num + 3));
1914 }
1915
1916 /* Double precision registers. */
1917 static void
1918 do_dr_register_info (struct gdbarch *gdbarch, struct ui_file *file,
1919 int dr_regnum)
1920 {
1921 int first_fp_reg_num = dr_reg_base_num (dr_regnum);
1922
1923 fprintf_filtered (file, "dr%d\t0x%08x%08x\n",
1924 dr_regnum - DR0_REGNUM,
1925 (int) read_register (first_fp_reg_num),
1926 (int) read_register (first_fp_reg_num + 1));
1927 }
1928 static void
1929 do_bank_register_info (struct gdbarch *gdbarch, struct ui_file *file)
1930 {
1931 fprintf_filtered (file, "bank %d\n",
1932 (int) read_register (BANK_REGNUM));
1933 }
1934
1935 static void
1936 sh_print_pseudo_register (struct gdbarch *gdbarch, struct ui_file *file,
1937 int regnum)
1938 {
1939 if (regnum < NUM_REGS || regnum >= NUM_REGS + NUM_PSEUDO_REGS)
1940 internal_error (__FILE__, __LINE__,
1941 "Invalid pseudo register number %d\n", regnum);
1942 else if (regnum == PSEUDO_BANK_REGNUM)
1943 do_bank_register_info (gdbarch, file);
1944 else if (regnum >= DR0_REGNUM && regnum <= DR_LAST_REGNUM)
1945 do_dr_register_info (gdbarch, file, regnum);
1946 else if (regnum >= FV0_REGNUM && regnum <= FV_LAST_REGNUM)
1947 do_fv_register_info (gdbarch, file, regnum);
1948 }
1949
1950 static void
1951 sh_do_fp_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum)
1952 { /* do values for FP (float) regs */
1953 char *raw_buffer;
1954 double flt; /* double extracted from raw hex data */
1955 int inv;
1956 int j;
1957
1958 /* Allocate space for the float. */
1959 raw_buffer = (char *) alloca (register_size (gdbarch, FP0_REGNUM));
1960
1961 /* Get the data in raw format. */
1962 if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
1963 error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
1964
1965 /* Get the register as a number */
1966 flt = unpack_double (builtin_type_float, raw_buffer, &inv);
1967
1968 /* Print the name and some spaces. */
1969 fputs_filtered (REGISTER_NAME (regnum), file);
1970 print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
1971
1972 /* Print the value. */
1973 if (inv)
1974 fprintf_filtered (file, "<invalid float>");
1975 else
1976 fprintf_filtered (file, "%-10.9g", flt);
1977
1978 /* Print the fp register as hex. */
1979 fprintf_filtered (file, "\t(raw 0x");
1980 for (j = 0; j < register_size (gdbarch, regnum); j++)
1981 {
1982 int idx = (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
1983 ? j
1984 : register_size (gdbarch, regnum) - 1 - j);
1985 fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[idx]);
1986 }
1987 fprintf_filtered (file, ")");
1988 fprintf_filtered (file, "\n");
1989 }
1990
1991 static void
1992 sh_do_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum)
1993 {
1994 char raw_buffer[MAX_REGISTER_SIZE];
1995
1996 fputs_filtered (REGISTER_NAME (regnum), file);
1997 print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
1998
1999 /* Get the data in raw format. */
2000 if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
2001 fprintf_filtered (file, "*value not available*\n");
2002
2003 val_print (gdbarch_register_type (gdbarch, regnum), raw_buffer, 0, 0,
2004 file, 'x', 1, 0, Val_pretty_default);
2005 fprintf_filtered (file, "\t");
2006 val_print (gdbarch_register_type (gdbarch, regnum), raw_buffer, 0, 0,
2007 file, 0, 1, 0, Val_pretty_default);
2008 fprintf_filtered (file, "\n");
2009 }
2010
2011 static void
2012 sh_print_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum)
2013 {
2014 if (regnum < 0 || regnum >= NUM_REGS + NUM_PSEUDO_REGS)
2015 internal_error (__FILE__, __LINE__,
2016 "Invalid register number %d\n", regnum);
2017
2018 else if (regnum >= 0 && regnum < NUM_REGS)
2019 {
2020 if (TYPE_CODE (gdbarch_register_type (gdbarch, regnum)) ==
2021 TYPE_CODE_FLT)
2022 sh_do_fp_register (gdbarch, file, regnum); /* FP regs */
2023 else
2024 sh_do_register (gdbarch, file, regnum); /* All other regs */
2025 }
2026
2027 else if (regnum < NUM_REGS + NUM_PSEUDO_REGS)
2028 {
2029 sh_print_pseudo_register (gdbarch, file, regnum);
2030 }
2031 }
2032
2033 static void
2034 sh_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
2035 struct frame_info *frame, int regnum, int fpregs)
2036 {
2037 if (regnum != -1) /* do one specified register */
2038 {
2039 if (*(REGISTER_NAME (regnum)) == '\0')
2040 error ("Not a valid register for the current processor type");
2041
2042 sh_print_register (gdbarch, file, regnum);
2043 }
2044 else
2045 /* do all (or most) registers */
2046 {
2047 for (regnum = 0; regnum < NUM_REGS; ++regnum)
2048 {
2049 /* If the register name is empty, it is undefined for this
2050 processor, so don't display anything. */
2051 if (REGISTER_NAME (regnum) == NULL
2052 || *(REGISTER_NAME (regnum)) == '\0')
2053 continue;
2054
2055 if (TYPE_CODE (gdbarch_register_type (gdbarch, regnum)) ==
2056 TYPE_CODE_FLT)
2057 {
2058 /* true for "INFO ALL-REGISTERS" command */
2059 if (fpregs)
2060 sh_do_fp_register (gdbarch, file, regnum); /* FP regs */
2061 }
2062 else
2063 sh_do_register (gdbarch, file, regnum); /* All other regs */
2064 }
2065
2066 if (regnum == PSEUDO_BANK_REGNUM
2067 && REGISTER_NAME (regnum)
2068 && *REGISTER_NAME (regnum))
2069 sh_print_pseudo_register (gdbarch, file, regnum++);
2070
2071 if (fpregs)
2072 while (regnum < NUM_REGS + NUM_PSEUDO_REGS)
2073 {
2074 sh_print_pseudo_register (gdbarch, file, regnum);
2075 regnum++;
2076 }
2077 }
2078 }
2079
2080 /* Fetch (and possibly build) an appropriate link_map_offsets structure
2081 for native i386 linux targets using the struct offsets defined in
2082 link.h (but without actual reference to that file).
2083
2084 This makes it possible to access i386-linux shared libraries from
2085 a gdb that was not built on an i386-linux host (for cross debugging).
2086 */
2087
2088 struct link_map_offsets *
2089 sh_linux_svr4_fetch_link_map_offsets (void)
2090 {
2091 static struct link_map_offsets lmo;
2092 static struct link_map_offsets *lmp = 0;
2093
2094 if (lmp == 0)
2095 {
2096 lmp = &lmo;
2097
2098 lmo.r_debug_size = 8; /* 20 not actual size but all we need */
2099
2100 lmo.r_map_offset = 4;
2101 lmo.r_map_size = 4;
2102
2103 lmo.link_map_size = 20; /* 552 not actual size but all we need */
2104
2105 lmo.l_addr_offset = 0;
2106 lmo.l_addr_size = 4;
2107
2108 lmo.l_name_offset = 4;
2109 lmo.l_name_size = 4;
2110
2111 lmo.l_next_offset = 12;
2112 lmo.l_next_size = 4;
2113
2114 lmo.l_prev_offset = 16;
2115 lmo.l_prev_size = 4;
2116 }
2117
2118 return lmp;
2119 }
2120
2121 static int
2122 sh_dsp_register_sim_regno (int nr)
2123 {
2124 if (legacy_register_sim_regno (nr) < 0)
2125 return legacy_register_sim_regno (nr);
2126 if (nr >= DSR_REGNUM && nr <= Y1_REGNUM)
2127 return nr - DSR_REGNUM + SIM_SH_DSR_REGNUM;
2128 if (nr == MOD_REGNUM)
2129 return SIM_SH_MOD_REGNUM;
2130 if (nr == RS_REGNUM)
2131 return SIM_SH_RS_REGNUM;
2132 if (nr == RE_REGNUM)
2133 return SIM_SH_RE_REGNUM;
2134 if (nr >= DSP_R0_BANK_REGNUM && nr <= DSP_R7_BANK_REGNUM)
2135 return nr - DSP_R0_BANK_REGNUM + SIM_SH_R0_BANK_REGNUM;
2136 return nr;
2137 }
2138
2139 static int
2140 sh_sh2a_register_sim_regno (int nr)
2141 {
2142 switch (nr)
2143 {
2144 case TBR_REGNUM:
2145 return SIM_SH_TBR_REGNUM;
2146 case IBNR_REGNUM:
2147 return SIM_SH_IBNR_REGNUM;
2148 case IBCR_REGNUM:
2149 return SIM_SH_IBCR_REGNUM;
2150 case BANK_REGNUM:
2151 return SIM_SH_BANK_REGNUM;
2152 case MACLB_REGNUM:
2153 return SIM_SH_BANK_MACL_REGNUM;
2154 case GBRB_REGNUM:
2155 return SIM_SH_BANK_GBR_REGNUM;
2156 case PRB_REGNUM:
2157 return SIM_SH_BANK_PR_REGNUM;
2158 case IVNB_REGNUM:
2159 return SIM_SH_BANK_IVN_REGNUM;
2160 case MACHB_REGNUM:
2161 return SIM_SH_BANK_MACH_REGNUM;
2162 default:
2163 break;
2164 }
2165 return legacy_register_sim_regno (nr);
2166 }
2167
2168 static struct sh_frame_cache *
2169 sh_alloc_frame_cache (void)
2170 {
2171 struct sh_frame_cache *cache;
2172 int i;
2173
2174 cache = FRAME_OBSTACK_ZALLOC (struct sh_frame_cache);
2175
2176 /* Base address. */
2177 cache->base = 0;
2178 cache->saved_sp = 0;
2179 cache->sp_offset = 0;
2180 cache->pc = 0;
2181
2182 /* Frameless until proven otherwise. */
2183 cache->uses_fp = 0;
2184
2185 /* Saved registers. We initialize these to -1 since zero is a valid
2186 offset (that's where fp is supposed to be stored). */
2187 for (i = 0; i < SH_NUM_REGS; i++)
2188 {
2189 cache->saved_regs[i] = -1;
2190 }
2191
2192 return cache;
2193 }
2194
2195 static struct sh_frame_cache *
2196 sh_frame_cache (struct frame_info *next_frame, void **this_cache)
2197 {
2198 struct sh_frame_cache *cache;
2199 CORE_ADDR current_pc;
2200 int i;
2201
2202 if (*this_cache)
2203 return *this_cache;
2204
2205 cache = sh_alloc_frame_cache ();
2206 *this_cache = cache;
2207
2208 /* In principle, for normal frames, fp holds the frame pointer,
2209 which holds the base address for the current stack frame.
2210 However, for functions that don't need it, the frame pointer is
2211 optional. For these "frameless" functions the frame pointer is
2212 actually the frame pointer of the calling frame. */
2213 cache->base = frame_unwind_register_unsigned (next_frame, FP_REGNUM);
2214 if (cache->base == 0)
2215 return cache;
2216
2217 cache->pc = frame_func_unwind (next_frame);
2218 current_pc = frame_pc_unwind (next_frame);
2219 if (cache->pc != 0)
2220 sh_analyze_prologue (cache->pc, current_pc, cache);
2221
2222 if (!cache->uses_fp)
2223 {
2224 /* We didn't find a valid frame, which means that CACHE->base
2225 currently holds the frame pointer for our calling frame. If
2226 we're at the start of a function, or somewhere half-way its
2227 prologue, the function's frame probably hasn't been fully
2228 setup yet. Try to reconstruct the base address for the stack
2229 frame by looking at the stack pointer. For truly "frameless"
2230 functions this might work too. */
2231 cache->base = frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2232 }
2233
2234 /* Now that we have the base address for the stack frame we can
2235 calculate the value of sp in the calling frame. */
2236 cache->saved_sp = cache->base + cache->sp_offset;
2237
2238 /* Adjust all the saved registers such that they contain addresses
2239 instead of offsets. */
2240 for (i = 0; i < SH_NUM_REGS; i++)
2241 if (cache->saved_regs[i] != -1)
2242 cache->saved_regs[i] = cache->saved_sp - cache->saved_regs[i] - 4;
2243
2244 return cache;
2245 }
2246
2247 static void
2248 sh_frame_prev_register (struct frame_info *next_frame, void **this_cache,
2249 int regnum, int *optimizedp,
2250 enum lval_type *lvalp, CORE_ADDR *addrp,
2251 int *realnump, void *valuep)
2252 {
2253 struct sh_frame_cache *cache = sh_frame_cache (next_frame, this_cache);
2254
2255 gdb_assert (regnum >= 0);
2256
2257 if (regnum == SP_REGNUM && cache->saved_sp)
2258 {
2259 *optimizedp = 0;
2260 *lvalp = not_lval;
2261 *addrp = 0;
2262 *realnump = -1;
2263 if (valuep)
2264 {
2265 /* Store the value. */
2266 store_unsigned_integer (valuep, 4, cache->saved_sp);
2267 }
2268 return;
2269 }
2270
2271 /* The PC of the previous frame is stored in the PR register of
2272 the current frame. Frob regnum so that we pull the value from
2273 the correct place. */
2274 if (regnum == PC_REGNUM)
2275 regnum = PR_REGNUM;
2276
2277 if (regnum < SH_NUM_REGS && cache->saved_regs[regnum] != -1)
2278 {
2279 *optimizedp = 0;
2280 *lvalp = lval_memory;
2281 *addrp = cache->saved_regs[regnum];
2282 *realnump = -1;
2283 if (valuep)
2284 {
2285 /* Read the value in from memory. */
2286 read_memory (*addrp, valuep,
2287 register_size (current_gdbarch, regnum));
2288 }
2289 return;
2290 }
2291
2292 frame_register_unwind (next_frame, regnum,
2293 optimizedp, lvalp, addrp, realnump, valuep);
2294 }
2295
2296 static void
2297 sh_frame_this_id (struct frame_info *next_frame, void **this_cache,
2298 struct frame_id *this_id)
2299 {
2300 struct sh_frame_cache *cache = sh_frame_cache (next_frame, this_cache);
2301
2302 /* This marks the outermost frame. */
2303 if (cache->base == 0)
2304 return;
2305
2306 *this_id = frame_id_build (cache->saved_sp, cache->pc);
2307 }
2308
2309 static const struct frame_unwind sh_frame_unwind = {
2310 NORMAL_FRAME,
2311 sh_frame_this_id,
2312 sh_frame_prev_register
2313 };
2314
2315 static const struct frame_unwind *
2316 sh_frame_sniffer (struct frame_info *next_frame)
2317 {
2318 return &sh_frame_unwind;
2319 }
2320
2321 static CORE_ADDR
2322 sh_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
2323 {
2324 return frame_unwind_register_unsigned (next_frame, SP_REGNUM);
2325 }
2326
2327 static CORE_ADDR
2328 sh_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
2329 {
2330 return frame_unwind_register_unsigned (next_frame, PC_REGNUM);
2331 }
2332
2333 static struct frame_id
2334 sh_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
2335 {
2336 return frame_id_build (sh_unwind_sp (gdbarch, next_frame),
2337 frame_pc_unwind (next_frame));
2338 }
2339
2340 static CORE_ADDR
2341 sh_frame_base_address (struct frame_info *next_frame, void **this_cache)
2342 {
2343 struct sh_frame_cache *cache = sh_frame_cache (next_frame, this_cache);
2344
2345 return cache->base;
2346 }
2347
2348 static const struct frame_base sh_frame_base = {
2349 &sh_frame_unwind,
2350 sh_frame_base_address,
2351 sh_frame_base_address,
2352 sh_frame_base_address
2353 };
2354
2355 /* The epilogue is defined here as the area at the end of a function,
2356 either on the `ret' instruction itself or after an instruction which
2357 destroys the function's stack frame. */
2358 static int
2359 sh_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
2360 {
2361 CORE_ADDR func_addr = 0, func_end = 0;
2362
2363 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
2364 {
2365 ULONGEST inst;
2366 /* The sh epilogue is max. 14 bytes long. Give another 14 bytes
2367 for a nop and some fixed data (e.g. big offsets) which are
2368 unfortunately also treated as part of the function (which
2369 means, they are below func_end. */
2370 CORE_ADDR addr = func_end - 28;
2371 if (addr < func_addr + 4)
2372 addr = func_addr + 4;
2373 if (pc < addr)
2374 return 0;
2375
2376 /* First search forward until hitting an rts. */
2377 while (addr < func_end
2378 && !IS_RTS (read_memory_unsigned_integer (addr, 2)))
2379 addr += 2;
2380 if (addr >= func_end)
2381 return 0;
2382
2383 /* At this point we should find a mov.l @r15+,r14 instruction,
2384 either before or after the rts. If not, then the function has
2385 probably no "normal" epilogue and we bail out here. */
2386 inst = read_memory_unsigned_integer (addr - 2, 2);
2387 if (IS_RESTORE_FP (read_memory_unsigned_integer (addr - 2, 2)))
2388 addr -= 2;
2389 else if (!IS_RESTORE_FP (read_memory_unsigned_integer (addr + 2, 2)))
2390 return 0;
2391
2392 /* Step over possible lds.l @r15+,pr. */
2393 inst = read_memory_unsigned_integer (addr - 2, 2);
2394 if (IS_LDS (inst))
2395 {
2396 addr -= 2;
2397 inst = read_memory_unsigned_integer (addr - 2, 2);
2398 }
2399
2400 /* Step over possible mov r14,r15. */
2401 if (IS_MOV_FP_SP (inst))
2402 {
2403 addr -= 2;
2404 inst = read_memory_unsigned_integer (addr - 2, 2);
2405 }
2406
2407 /* Now check for FP adjustments, using add #imm,r14 or add rX, r14
2408 instructions. */
2409 while (addr > func_addr + 4
2410 && (IS_ADD_REG_TO_FP (inst) || IS_ADD_IMM_FP (inst)))
2411 {
2412 addr -= 2;
2413 inst = read_memory_unsigned_integer (addr - 2, 2);
2414 }
2415
2416 if (pc >= addr)
2417 return 1;
2418 }
2419 return 0;
2420 }
2421
2422 static gdbarch_init_ftype sh_gdbarch_init;
2423
2424 static struct gdbarch *
2425 sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2426 {
2427 struct gdbarch *gdbarch;
2428
2429 sh_show_regs = sh_generic_show_regs;
2430 switch (info.bfd_arch_info->mach)
2431 {
2432 case bfd_mach_sh2e:
2433 sh_show_regs = sh2e_show_regs;
2434 break;
2435 case bfd_mach_sh2a:
2436 sh_show_regs = sh2a_show_regs;
2437 break;
2438 case bfd_mach_sh2a_nofpu:
2439 sh_show_regs = sh2a_nofpu_show_regs;
2440 break;
2441 case bfd_mach_sh_dsp:
2442 sh_show_regs = sh_dsp_show_regs;
2443 break;
2444
2445 case bfd_mach_sh3:
2446 sh_show_regs = sh3_show_regs;
2447 break;
2448
2449 case bfd_mach_sh3e:
2450 sh_show_regs = sh3e_show_regs;
2451 break;
2452
2453 case bfd_mach_sh3_dsp:
2454 case bfd_mach_sh4al_dsp:
2455 sh_show_regs = sh3_dsp_show_regs;
2456 break;
2457
2458 case bfd_mach_sh4:
2459 case bfd_mach_sh4a:
2460 sh_show_regs = sh4_show_regs;
2461 break;
2462
2463 case bfd_mach_sh4_nofpu:
2464 case bfd_mach_sh4a_nofpu:
2465 sh_show_regs = sh4_nofpu_show_regs;
2466 break;
2467
2468 #if 0
2469 case bfd_mach_sh5:
2470 sh_show_regs = sh64_show_regs;
2471 /* SH5 is handled entirely in sh64-tdep.c */
2472 return sh64_gdbarch_init (info, arches);
2473 #endif
2474 }
2475
2476 /* If there is already a candidate, use it. */
2477 arches = gdbarch_list_lookup_by_info (arches, &info);
2478 if (arches != NULL)
2479 return arches->gdbarch;
2480
2481 /* None found, create a new architecture from the information
2482 provided. */
2483 gdbarch = gdbarch_alloc (&info, NULL);
2484
2485 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
2486 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2487 set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2488 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
2489 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2490 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
2491 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
2492 set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2493
2494 set_gdbarch_num_regs (gdbarch, SH_NUM_REGS);
2495 set_gdbarch_sp_regnum (gdbarch, 15);
2496 set_gdbarch_pc_regnum (gdbarch, 16);
2497 set_gdbarch_fp0_regnum (gdbarch, -1);
2498 set_gdbarch_num_pseudo_regs (gdbarch, 0);
2499
2500 set_gdbarch_register_type (gdbarch, sh_default_register_type);
2501
2502 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
2503
2504 set_gdbarch_breakpoint_from_pc (gdbarch, sh_breakpoint_from_pc);
2505 set_gdbarch_deprecated_use_struct_convention (gdbarch, sh_use_struct_convention);
2506
2507 set_gdbarch_print_insn (gdbarch, gdb_print_insn_sh);
2508 set_gdbarch_register_sim_regno (gdbarch, legacy_register_sim_regno);
2509
2510 set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
2511
2512 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
2513 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
2514 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
2515
2516 set_gdbarch_skip_prologue (gdbarch, sh_skip_prologue);
2517 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2518
2519 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_nofpu);
2520
2521 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2522
2523 set_gdbarch_frame_align (gdbarch, sh_frame_align);
2524 set_gdbarch_unwind_sp (gdbarch, sh_unwind_sp);
2525 set_gdbarch_unwind_pc (gdbarch, sh_unwind_pc);
2526 set_gdbarch_unwind_dummy_id (gdbarch, sh_unwind_dummy_id);
2527 frame_base_set_default (gdbarch, &sh_frame_base);
2528
2529 set_gdbarch_in_function_epilogue_p (gdbarch, sh_in_function_epilogue_p);
2530
2531 switch (info.bfd_arch_info->mach)
2532 {
2533 case bfd_mach_sh:
2534 set_gdbarch_register_name (gdbarch, sh_sh_register_name);
2535 break;
2536
2537 case bfd_mach_sh2:
2538 set_gdbarch_register_name (gdbarch, sh_sh_register_name);
2539 break;
2540
2541 case bfd_mach_sh2e:
2542 /* doubles on sh2e and sh3e are actually 4 byte. */
2543 set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2544
2545 set_gdbarch_register_name (gdbarch, sh_sh2e_register_name);
2546 set_gdbarch_register_type (gdbarch, sh_sh3e_register_type);
2547 set_gdbarch_fp0_regnum (gdbarch, 25);
2548 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
2549 set_gdbarch_extract_return_value (gdbarch,
2550 sh3e_sh4_extract_return_value);
2551 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu);
2552 break;
2553
2554 case bfd_mach_sh2a:
2555 set_gdbarch_register_name (gdbarch, sh_sh2a_register_name);
2556 set_gdbarch_register_type (gdbarch, sh_sh2a_register_type);
2557 set_gdbarch_register_sim_regno (gdbarch, sh_sh2a_register_sim_regno);
2558
2559 set_gdbarch_fp0_regnum (gdbarch, 25);
2560 set_gdbarch_num_pseudo_regs (gdbarch, 9);
2561 set_gdbarch_pseudo_register_read (gdbarch, sh_pseudo_register_read);
2562 set_gdbarch_pseudo_register_write (gdbarch, sh_pseudo_register_write);
2563 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
2564 set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value);
2565 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu);
2566 break;
2567
2568 case bfd_mach_sh2a_nofpu:
2569 set_gdbarch_register_name (gdbarch, sh_sh2a_nofpu_register_name);
2570 set_gdbarch_register_sim_regno (gdbarch, sh_sh2a_register_sim_regno);
2571
2572 set_gdbarch_num_pseudo_regs (gdbarch, 1);
2573 set_gdbarch_pseudo_register_read (gdbarch, sh_pseudo_register_read);
2574 set_gdbarch_pseudo_register_write (gdbarch, sh_pseudo_register_write);
2575 break;
2576
2577 case bfd_mach_sh_dsp:
2578 set_gdbarch_register_name (gdbarch, sh_sh_dsp_register_name);
2579 set_gdbarch_register_sim_regno (gdbarch, sh_dsp_register_sim_regno);
2580 break;
2581
2582 case bfd_mach_sh3:
2583 set_gdbarch_register_name (gdbarch, sh_sh3_register_name);
2584 break;
2585
2586 case bfd_mach_sh3e:
2587 /* doubles on sh2e and sh3e are actually 4 byte. */
2588 set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
2589
2590 set_gdbarch_register_name (gdbarch, sh_sh3e_register_name);
2591 set_gdbarch_register_type (gdbarch, sh_sh3e_register_type);
2592 set_gdbarch_fp0_regnum (gdbarch, 25);
2593 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
2594 set_gdbarch_extract_return_value (gdbarch,
2595 sh3e_sh4_extract_return_value);
2596 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu);
2597 break;
2598
2599 case bfd_mach_sh3_dsp:
2600 set_gdbarch_register_name (gdbarch, sh_sh3_dsp_register_name);
2601 set_gdbarch_register_sim_regno (gdbarch, sh_dsp_register_sim_regno);
2602 break;
2603
2604 case bfd_mach_sh4:
2605 case bfd_mach_sh4a:
2606 set_gdbarch_register_name (gdbarch, sh_sh4_register_name);
2607 set_gdbarch_register_type (gdbarch, sh_sh4_register_type);
2608 set_gdbarch_fp0_regnum (gdbarch, 25);
2609 set_gdbarch_num_pseudo_regs (gdbarch, 13);
2610 set_gdbarch_pseudo_register_read (gdbarch, sh_pseudo_register_read);
2611 set_gdbarch_pseudo_register_write (gdbarch, sh_pseudo_register_write);
2612 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
2613 set_gdbarch_extract_return_value (gdbarch,
2614 sh3e_sh4_extract_return_value);
2615 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call_fpu);
2616 break;
2617
2618 case bfd_mach_sh4_nofpu:
2619 case bfd_mach_sh4a_nofpu:
2620 set_gdbarch_register_name (gdbarch, sh_sh4_nofpu_register_name);
2621 break;
2622
2623 case bfd_mach_sh4al_dsp:
2624 set_gdbarch_register_name (gdbarch, sh_sh4al_dsp_register_name);
2625 set_gdbarch_register_sim_regno (gdbarch, sh_dsp_register_sim_regno);
2626 break;
2627
2628 default:
2629 set_gdbarch_register_name (gdbarch, sh_sh_register_name);
2630 break;
2631 }
2632
2633 /* Hook in ABI-specific overrides, if they have been registered. */
2634 gdbarch_init_osabi (info, gdbarch);
2635
2636 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
2637 frame_unwind_append_sniffer (gdbarch, sh_frame_sniffer);
2638
2639 return gdbarch;
2640 }
2641
2642 extern initialize_file_ftype _initialize_sh_tdep; /* -Wmissing-prototypes */
2643
2644 void
2645 _initialize_sh_tdep (void)
2646 {
2647 struct cmd_list_element *c;
2648
2649 gdbarch_register (bfd_arch_sh, sh_gdbarch_init, NULL);
2650
2651 add_com ("regs", class_vars, sh_show_regs_command, "Print all registers");
2652 }