1 /* Target-dependent code for Hitachi Super-H, for GDB.
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
3 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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. */
23 Contributed by Steve Chamberlain
37 #include "gdb_string.h"
38 #include "arch-utils.h"
39 #include "floatformat.h"
47 #include "solib-svr4.h"
51 /* registers numbers shared with the simulator */
52 #include "gdb/sim-sh.h"
54 void (*sh_show_regs) (void);
55 CORE_ADDR (*skip_prologue_hard_way) (CORE_ADDR);
57 #define SH_DEFAULT_NUM_REGS 59
59 /* Define other aspects of the stack frame.
60 we keep a copy of the worked out return pc lying around, since it
61 is a useful bit of info */
63 struct frame_extra_info
71 sh_generic_register_name (int reg_nr)
73 static char *register_names[] =
75 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
76 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
77 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
79 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
80 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
82 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
83 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
87 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
89 return register_names[reg_nr];
93 sh_sh_register_name (int reg_nr)
95 static char *register_names[] =
97 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
98 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
99 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
101 "", "", "", "", "", "", "", "",
102 "", "", "", "", "", "", "", "",
104 "", "", "", "", "", "", "", "",
105 "", "", "", "", "", "", "", "",
109 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
111 return register_names[reg_nr];
115 sh_sh3_register_name (int reg_nr)
117 static char *register_names[] =
119 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
120 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
121 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
123 "", "", "", "", "", "", "", "",
124 "", "", "", "", "", "", "", "",
126 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
127 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1"
131 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
133 return register_names[reg_nr];
137 sh_sh3e_register_name (int reg_nr)
139 static char *register_names[] =
141 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
142 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
143 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
145 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
146 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
148 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
149 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
153 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
155 return register_names[reg_nr];
159 sh_sh2e_register_name (int reg_nr)
161 static char *register_names[] =
163 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
164 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
165 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
167 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
168 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
170 "", "", "", "", "", "", "", "",
171 "", "", "", "", "", "", "", "",
175 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
177 return register_names[reg_nr];
181 sh_sh_dsp_register_name (int reg_nr)
183 static char *register_names[] =
185 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
186 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
187 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
189 "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1",
190 "y0", "y1", "", "", "", "", "", "mod",
192 "rs", "re", "", "", "", "", "", "",
193 "", "", "", "", "", "", "", "",
197 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
199 return register_names[reg_nr];
203 sh_sh3_dsp_register_name (int reg_nr)
205 static char *register_names[] =
207 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
208 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
209 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
211 "a0g", "a0", "a1g", "a1", "m0", "m1", "x0", "x1",
212 "y0", "y1", "", "", "", "", "", "mod",
214 "rs", "re", "", "", "", "", "", "",
215 "r0b", "r1b", "r2b", "r3b", "r4b", "r5b", "r6b", "r7b"
216 "", "", "", "", "", "", "", "",
220 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
222 return register_names[reg_nr];
226 sh_sh4_register_name (int reg_nr)
228 static char *register_names[] =
230 /* general registers 0-15 */
231 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
232 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
234 "pc", "pr", "gbr", "vbr", "mach", "macl", "sr",
237 /* floating point registers 25 - 40 */
238 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
239 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
243 "r0b0", "r1b0", "r2b0", "r3b0", "r4b0", "r5b0", "r6b0", "r7b0",
245 "r0b1", "r1b1", "r2b1", "r3b1", "r4b1", "r5b1", "r6b1", "r7b1",
246 /* double precision (pseudo) 59 - 66 */
247 "dr0", "dr2", "dr4", "dr6", "dr8", "dr10", "dr12", "dr14",
248 /* vectors (pseudo) 67 - 70 */
249 "fv0", "fv4", "fv8", "fv12",
250 /* FIXME: missing XF 71 - 86 */
251 /* FIXME: missing XD 87 - 94 */
255 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
257 return register_names[reg_nr];
261 sh_sh64_register_name (int reg_nr)
263 static char *register_names[] =
265 /* SH MEDIA MODE (ISA 32) */
266 /* general registers (64-bit) 0-63 */
267 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
268 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
269 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
270 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
271 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
272 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
273 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
274 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
279 /* status reg., saved status reg., saved pc reg. (64-bit) 65-67 */
282 /* target registers (64-bit) 68-75*/
283 "tr0", "tr1", "tr2", "tr3", "tr4", "tr5", "tr6", "tr7",
285 /* floating point state control register (32-bit) 76 */
288 /* single precision floating point registers (32-bit) 77-140*/
289 "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
290 "fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
291 "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",
292 "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31",
293 "fr32", "fr33", "fr34", "fr35", "fr36", "fr37", "fr38", "fr39",
294 "fr40", "fr41", "fr42", "fr43", "fr44", "fr45", "fr46", "fr47",
295 "fr48", "fr49", "fr50", "fr51", "fr52", "fr53", "fr54", "fr55",
296 "fr56", "fr57", "fr58", "fr59", "fr60", "fr61", "fr62", "fr63",
298 /* double precision registers (pseudo) 141-172 */
299 "dr0", "dr2", "dr4", "dr6", "dr8", "dr10", "dr12", "dr14",
300 "dr16", "dr18", "dr20", "dr22", "dr24", "dr26", "dr28", "dr30",
301 "dr32", "dr34", "dr36", "dr38", "dr40", "dr42", "dr44", "dr46",
302 "dr48", "dr50", "dr52", "dr54", "dr56", "dr58", "dr60", "dr62",
304 /* floating point pairs (pseudo) 173-204*/
305 "fp0", "fp2", "fp4", "fp6", "fp8", "fp10", "fp12", "fp14",
306 "fp16", "fp18", "fp20", "fp22", "fp24", "fp26", "fp28", "fp30",
307 "fp32", "fp34", "fp36", "fp38", "fp40", "fp42", "fp44", "fp46",
308 "fp48", "fp50", "fp52", "fp54", "fp56", "fp58", "fp60", "fp62",
310 /* floating point vectors (4 floating point regs) (pseudo) 205-220*/
311 "fv0", "fv4", "fv8", "fv12", "fv16", "fv20", "fv24", "fv28",
312 "fv32", "fv36", "fv40", "fv44", "fv48", "fv52", "fv56", "fv60",
314 /* SH COMPACT MODE (ISA 16) (all pseudo) 221-272*/
315 "r0_c", "r1_c", "r2_c", "r3_c", "r4_c", "r5_c", "r6_c", "r7_c",
316 "r8_c", "r9_c", "r10_c", "r11_c", "r12_c", "r13_c", "r14_c", "r15_c",
318 "gbr_c", "mach_c", "macl_c", "pr_c", "t_c",
320 "fr0_c", "fr1_c", "fr2_c", "fr3_c", "fr4_c", "fr5_c", "fr6_c", "fr7_c",
321 "fr8_c", "fr9_c", "fr10_c", "fr11_c", "fr12_c", "fr13_c", "fr14_c", "fr15_c",
322 "dr0_c", "dr2_c", "dr4_c", "dr6_c", "dr8_c", "dr10_c", "dr12_c", "dr14_c",
323 "fv0_c", "fv4_c", "fv8_c", "fv12_c",
324 /* FIXME!!!! XF0 XF15, XD0 XD14 ?????*/
329 if (reg_nr >= (sizeof (register_names) / sizeof (*register_names)))
331 return register_names[reg_nr];
334 #define NUM_PSEUDO_REGS_SH_MEDIA 80
335 #define NUM_PSEUDO_REGS_SH_COMPACT 51
337 static const unsigned char *
338 sh_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
340 /* 0xc3c3 is trapa #c3, and it works in big and little endian modes */
341 static unsigned char breakpoint[] = {0xc3, 0xc3};
343 *lenptr = sizeof (breakpoint);
348 sh_push_dummy_code (struct gdbarch *gdbarch,
349 CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc,
350 struct value **args, int nargs,
351 struct type *value_type,
352 CORE_ADDR *real_pc, CORE_ADDR *bp_addr)
354 /* Allocate space sufficient for a breakpoint. */
356 /* Store the address of that breakpoint */
358 /* sh always starts the call at the callee's entry point. */
363 /* Macros and functions for setting and testing a bit in a minimal
364 symbol that marks it as 32-bit function. The MSB of the minimal
365 symbol's "info" field is used for this purpose. This field is
366 already being used to store the symbol size, so the assumption is
367 that the symbol size cannot exceed 2^31.
369 ELF_MAKE_MSYMBOL_SPECIAL
370 tests whether an ELF symbol is "special", i.e. refers
371 to a 32-bit function, and sets a "special" bit in a
372 minimal symbol to mark it as a 32-bit function
373 MSYMBOL_IS_SPECIAL tests the "special" bit in a minimal symbol
374 MSYMBOL_SIZE returns the size of the minimal symbol, i.e.
375 the "info" field with the "special" bit masked out */
377 #define MSYMBOL_IS_SPECIAL(msym) \
378 (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
381 sh64_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
386 if (((elf_symbol_type *)(sym))->internal_elf_sym.st_other == STO_SH5_ISA32)
388 MSYMBOL_INFO (msym) = (char *) (((long) MSYMBOL_INFO (msym)) | 0x80000000);
389 SYMBOL_VALUE_ADDRESS (msym) |= 1;
393 /* ISA32 (shmedia) function addresses are odd (bit 0 is set). Here
394 are some macros to test, set, or clear bit 0 of addresses. */
395 #define IS_ISA32_ADDR(addr) ((addr) & 1)
396 #define MAKE_ISA32_ADDR(addr) ((addr) | 1)
397 #define UNMAKE_ISA32_ADDR(addr) ((addr) & ~1)
400 pc_is_isa32 (bfd_vma memaddr)
402 struct minimal_symbol *sym;
404 /* If bit 0 of the address is set, assume this is a
405 ISA32 (shmedia) address. */
406 if (IS_ISA32_ADDR (memaddr))
409 /* A flag indicating that this is a ISA32 function is stored by elfread.c in
410 the high bit of the info field. Use this to decide if the function is
412 sym = lookup_minimal_symbol_by_pc (memaddr);
414 return MSYMBOL_IS_SPECIAL (sym);
419 static const unsigned char *
420 sh_sh64_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
422 /* The BRK instruction for shmedia is
423 01101111 11110101 11111111 11110000
424 which translates in big endian mode to 0x6f, 0xf5, 0xff, 0xf0
425 and in little endian mode to 0xf0, 0xff, 0xf5, 0x6f */
427 /* The BRK instruction for shcompact is
429 which translates in big endian mode to 0x0, 0x3b
430 and in little endian mode to 0x3b, 0x0*/
432 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
434 if (pc_is_isa32 (*pcptr))
436 static unsigned char big_breakpoint_media[] = {0x6f, 0xf5, 0xff, 0xf0};
437 *pcptr = UNMAKE_ISA32_ADDR (*pcptr);
438 *lenptr = sizeof (big_breakpoint_media);
439 return big_breakpoint_media;
443 static unsigned char big_breakpoint_compact[] = {0x0, 0x3b};
444 *lenptr = sizeof (big_breakpoint_compact);
445 return big_breakpoint_compact;
450 if (pc_is_isa32 (*pcptr))
452 static unsigned char little_breakpoint_media[] = {0xf0, 0xff, 0xf5, 0x6f};
453 *pcptr = UNMAKE_ISA32_ADDR (*pcptr);
454 *lenptr = sizeof (little_breakpoint_media);
455 return little_breakpoint_media;
459 static unsigned char little_breakpoint_compact[] = {0x3b, 0x0};
460 *lenptr = sizeof (little_breakpoint_compact);
461 return little_breakpoint_compact;
466 /* Prologue looks like
467 [mov.l <regs>,@-r15]...
472 Actually it can be more complicated than this. For instance, with
490 /* PTABS/L Rn, TRa 0110101111110001nnnnnnl00aaa0000
491 with l=1 and n = 18 0110101111110001010010100aaa0000 */
492 #define IS_PTABSL_R18(x) (((x) & 0xffffff8f) == 0x6bf14a00)
494 /* STS.L PR,@-r0 0100000000100010
495 r0-4-->r0, PR-->(r0) */
496 #define IS_STS_R0(x) ((x) == 0x4022)
498 /* STS PR, Rm 0000mmmm00101010
500 #define IS_STS_PR(x) (((x) & 0xf0ff) == 0x2a)
502 /* MOV.L Rm,@(disp,r15) 00011111mmmmdddd
504 #define IS_MOV_TO_R15(x) (((x) & 0xff00) == 0x1f00)
506 /* MOV.L R14,@(disp,r15) 000111111110dddd
507 R14-->(dispx4+r15) */
508 #define IS_MOV_R14(x) (((x) & 0xfff0) == 0x1fe0)
510 /* ST.Q R14, disp, R18 101011001110dddddddddd0100100000
511 R18-->(dispx8+R14) */
512 #define IS_STQ_R18_R14(x) (((x) & 0xfff003ff) == 0xace00120)
514 /* ST.Q R15, disp, R18 101011001111dddddddddd0100100000
515 R18-->(dispx8+R15) */
516 #define IS_STQ_R18_R15(x) (((x) & 0xfff003ff) == 0xacf00120)
518 /* ST.L R15, disp, R18 101010001111dddddddddd0100100000
519 R18-->(dispx4+R15) */
520 #define IS_STL_R18_R15(x) (((x) & 0xfff003ff) == 0xa8f00120)
522 /* ST.Q R15, disp, R14 1010 1100 1111 dddd dddd dd00 1110 0000
523 R14-->(dispx8+R15) */
524 #define IS_STQ_R14_R15(x) (((x) & 0xfff003ff) == 0xacf000e0)
526 /* ST.L R15, disp, R14 1010 1000 1111 dddd dddd dd00 1110 0000
527 R14-->(dispx4+R15) */
528 #define IS_STL_R14_R15(x) (((x) & 0xfff003ff) == 0xa8f000e0)
530 /* ADDI.L R15,imm,R15 1101 0100 1111 ssss ssss ss00 1111 0000
532 #define IS_ADDIL_SP_MEDIA(x) (((x) & 0xfff003ff) == 0xd4f000f0)
534 /* ADDI R15,imm,R15 1101 0000 1111 ssss ssss ss00 1111 0000
536 #define IS_ADDI_SP_MEDIA(x) (((x) & 0xfff003ff) == 0xd0f000f0)
538 /* ADD.L R15,R63,R14 0000 0000 1111 1000 1111 1100 1110 0000
540 #define IS_ADDL_SP_FP_MEDIA(x) ((x) == 0x00f8fce0)
542 /* ADD R15,R63,R14 0000 0000 1111 1001 1111 1100 1110 0000
544 #define IS_ADD_SP_FP_MEDIA(x) ((x) == 0x00f9fce0)
546 #define IS_MOV_SP_FP_MEDIA(x) (IS_ADDL_SP_FP_MEDIA(x) || IS_ADD_SP_FP_MEDIA(x))
548 /* MOV #imm, R0 1110 0000 ssss ssss
550 #define IS_MOV_R0(x) (((x) & 0xff00) == 0xe000)
552 /* MOV.L @(disp,PC), R0 1101 0000 iiii iiii */
553 #define IS_MOVL_R0(x) (((x) & 0xff00) == 0xd000)
555 /* ADD r15,r0 0011 0000 1111 1100
557 #define IS_ADD_SP_R0(x) ((x) == 0x30fc)
559 /* MOV.L R14 @-R0 0010 0000 1110 0110
560 R14-->(R0-4), R0-4-->R0 */
561 #define IS_MOV_R14_R0(x) ((x) == 0x20e6)
563 /* ADD Rm,R63,Rn Rm+R63-->Rn 0000 00mm mmmm 1001 1111 11nn nnnn 0000
564 where Rm is one of r2-r9 which are the argument registers. */
565 /* FIXME: Recognize the float and double register moves too! */
566 #define IS_MEDIA_IND_ARG_MOV(x) \
567 ((((x) & 0xfc0ffc0f) == 0x0009fc00) && (((x) & 0x03f00000) >= 0x00200000 && ((x) & 0x03f00000) <= 0x00900000))
569 /* ST.Q Rn,0,Rm Rm-->Rn+0 1010 11nn nnnn 0000 0000 00mm mmmm 0000
570 or ST.L Rn,0,Rm Rm-->Rn+0 1010 10nn nnnn 0000 0000 00mm mmmm 0000
571 where Rm is one of r2-r9 which are the argument registers. */
572 #define IS_MEDIA_ARG_MOV(x) \
573 (((((x) & 0xfc0ffc0f) == 0xac000000) || (((x) & 0xfc0ffc0f) == 0xa8000000)) \
574 && (((x) & 0x000003f0) >= 0x00000020 && ((x) & 0x000003f0) <= 0x00000090))
576 /* ST.B R14,0,Rn Rn-->(R14+0) 1010 0000 1110 0000 0000 00nn nnnn 0000*/
577 /* ST.W R14,0,Rn Rn-->(R14+0) 1010 0100 1110 0000 0000 00nn nnnn 0000*/
578 /* ST.L R14,0,Rn Rn-->(R14+0) 1010 1000 1110 0000 0000 00nn nnnn 0000*/
579 /* FST.S R14,0,FRn Rn-->(R14+0) 1011 0100 1110 0000 0000 00nn nnnn 0000*/
580 /* FST.D R14,0,DRn Rn-->(R14+0) 1011 1100 1110 0000 0000 00nn nnnn 0000*/
581 #define IS_MEDIA_MOV_TO_R14(x) \
582 ((((x) & 0xfffffc0f) == 0xa0e00000) \
583 || (((x) & 0xfffffc0f) == 0xa4e00000) \
584 || (((x) & 0xfffffc0f) == 0xa8e00000) \
585 || (((x) & 0xfffffc0f) == 0xb4e00000) \
586 || (((x) & 0xfffffc0f) == 0xbce00000))
588 /* MOV Rm, Rn Rm-->Rn 0110 nnnn mmmm 0011
590 #define IS_COMPACT_IND_ARG_MOV(x) \
591 ((((x) & 0xf00f) == 0x6003) && (((x) & 0x00f0) >= 0x0020) && (((x) & 0x00f0) <= 0x0090))
593 /* compact direct arg move!
594 MOV.L Rn, @r14 0010 1110 mmmm 0010 */
595 #define IS_COMPACT_ARG_MOV(x) \
596 (((((x) & 0xff0f) == 0x2e02) && (((x) & 0x00f0) >= 0x0020) && ((x) & 0x00f0) <= 0x0090))
598 /* MOV.B Rm, @R14 0010 1110 mmmm 0000
599 MOV.W Rm, @R14 0010 1110 mmmm 0001 */
600 #define IS_COMPACT_MOV_TO_R14(x) \
601 ((((x) & 0xff0f) == 0x2e00) || (((x) & 0xff0f) == 0x2e01))
603 #define IS_JSR_R0(x) ((x) == 0x400b)
604 #define IS_NOP(x) ((x) == 0x0009)
607 /* STS.L PR,@-r15 0100111100100010
608 r15-4-->r15, PR-->(r15) */
609 #define IS_STS(x) ((x) == 0x4f22)
611 /* MOV.L Rm,@-r15 00101111mmmm0110
612 r15-4-->r15, Rm-->(R15) */
613 #define IS_PUSH(x) (((x) & 0xff0f) == 0x2f06)
615 #define GET_PUSHED_REG(x) (((x) >> 4) & 0xf)
617 /* MOV r15,r14 0110111011110011
619 #define IS_MOV_SP_FP(x) ((x) == 0x6ef3)
621 /* ADD #imm,r15 01111111iiiiiiii
623 #define IS_ADD_SP(x) (((x) & 0xff00) == 0x7f00)
625 #define IS_MOV_R3(x) (((x) & 0xff00) == 0x1a00)
626 #define IS_SHLL_R3(x) ((x) == 0x4300)
628 /* ADD r3,r15 0011111100111100
630 #define IS_ADD_R3SP(x) ((x) == 0x3f3c)
632 /* FMOV.S FRm,@-Rn Rn-4-->Rn, FRm-->(Rn) 1111nnnnmmmm1011
633 FMOV DRm,@-Rn Rn-8-->Rn, DRm-->(Rn) 1111nnnnmmm01011
634 FMOV XDm,@-Rn Rn-8-->Rn, XDm-->(Rn) 1111nnnnmmm11011 */
635 #define IS_FMOV(x) (((x) & 0xf00f) == 0xf00b)
637 /* MOV Rm,Rn Rm-->Rn 0110nnnnmmmm0011
638 MOV.L Rm,@(disp,Rn) Rm-->(dispx4+Rn) 0001nnnnmmmmdddd
639 MOV.L Rm,@Rn Rm-->(Rn) 0010nnnnmmmm0010
640 where Rm is one of r4,r5,r6,r7 which are the argument registers. */
641 #define IS_ARG_MOV(x) \
642 (((((x) & 0xf00f) == 0x6003) && (((x) & 0x00f0) >= 0x0040 && ((x) & 0x00f0) <= 0x0070)) \
643 || ((((x) & 0xf000) == 0x1000) && (((x) & 0x00f0) >= 0x0040 && ((x) & 0x00f0) <= 0x0070)) \
644 || ((((x) & 0xf00f) == 0x2002) && (((x) & 0x00f0) >= 0x0040 && ((x) & 0x00f0) <= 0x0070)))
646 /* MOV.L Rm,@(disp,r14) 00011110mmmmdddd
647 Rm-->(dispx4+r14) where Rm is one of r4,r5,r6,r7 */
648 #define IS_MOV_TO_R14(x) \
649 ((((x) & 0xff00) == 0x1e) && (((x) & 0x00f0) >= 0x0040 && ((x) & 0x00f0) <= 0x0070))
651 #define FPSCR_SZ (1 << 20)
653 /* Skip any prologue before the guts of a function */
655 /* Skip the prologue using the debug information. If this fails we'll
656 fall back on the 'guess' method below. */
658 after_prologue (CORE_ADDR pc)
660 struct symtab_and_line sal;
661 CORE_ADDR func_addr, func_end;
663 /* If we can not find the symbol in the partial symbol table, then
664 there is no hope we can determine the function's start address
666 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
669 /* Get the line associated with FUNC_ADDR. */
670 sal = find_pc_line (func_addr, 0);
672 /* There are only two cases to consider. First, the end of the source line
673 is within the function bounds. In that case we return the end of the
674 source line. Second is the end of the source line extends beyond the
675 bounds of the current function. We need to use the slow code to
676 examine instructions in that case. */
677 if (sal.end < func_end)
683 /* Here we look at each instruction in the function, and try to guess
684 where the prologue ends. Unfortunately this is not always
687 sh_skip_prologue_hard_way (CORE_ADDR start_pc)
695 for (here = start_pc, end = start_pc + (2 * 28); here < end;)
697 int w = read_memory_integer (here, 2);
699 if (IS_FMOV (w) || IS_PUSH (w) || IS_STS (w) || IS_MOV_R3 (w)
700 || IS_ADD_R3SP (w) || IS_ADD_SP (w) || IS_SHLL_R3 (w)
701 || IS_ARG_MOV (w) || IS_MOV_TO_R14 (w))
705 else if (IS_MOV_SP_FP (w))
711 /* Don't bail out yet, if we are before the copy of sp. */
720 look_for_args_moves (CORE_ADDR start_pc, int media_mode)
724 int insn_size = (media_mode ? 4 : 2);
726 for (here = start_pc, end = start_pc + (insn_size * 28); here < end;)
730 w = read_memory_integer (UNMAKE_ISA32_ADDR (here), insn_size);
732 if (IS_MEDIA_IND_ARG_MOV (w))
734 /* This must be followed by a store to r14, so the argument
735 is where the debug info says it is. This can happen after
736 the SP has been saved, unfortunately. */
738 int next_insn = read_memory_integer (UNMAKE_ISA32_ADDR (here),
741 if (IS_MEDIA_MOV_TO_R14 (next_insn))
744 else if (IS_MEDIA_ARG_MOV (w))
746 /* These instructions store directly the argument in r14. */
754 w = read_memory_integer (here, insn_size);
757 if (IS_COMPACT_IND_ARG_MOV (w))
759 /* This must be followed by a store to r14, so the argument
760 is where the debug info says it is. This can happen after
761 the SP has been saved, unfortunately. */
763 int next_insn = 0xffff & read_memory_integer (here, insn_size);
765 if (IS_COMPACT_MOV_TO_R14 (next_insn))
768 else if (IS_COMPACT_ARG_MOV (w))
770 /* These instructions store directly the argument in r14. */
773 else if (IS_MOVL_R0 (w))
775 /* There is a function that gcc calls to get the arguments
776 passed correctly to the function. Only after this
777 function call the arguments will be found at the place
778 where they are supposed to be. This happens in case the
779 argument has to be stored into a 64-bit register (for
780 instance doubles, long longs). SHcompact doesn't have
781 access to the full 64-bits, so we store the register in
782 stack slot and store the address of the stack slot in
783 the register, then do a call through a wrapper that
784 loads the memory value into the register. A SHcompact
785 callee calls an argument decoder
786 (GCC_shcompact_incoming_args) that stores the 64-bit
787 value in a stack slot and stores the address of the
788 stack slot in the register. GCC thinks the argument is
789 just passed by transparent reference, but this is only
790 true after the argument decoder is called. Such a call
791 needs to be considered part of the prologue. */
793 /* This must be followed by a JSR @r0 instruction and by
794 a NOP instruction. After these, the prologue is over! */
796 int next_insn = 0xffff & read_memory_integer (here, insn_size);
798 if (IS_JSR_R0 (next_insn))
800 next_insn = 0xffff & read_memory_integer (here, insn_size);
803 if (IS_NOP (next_insn))
816 sh64_skip_prologue_hard_way (CORE_ADDR start_pc)
826 if (pc_is_isa32 (start_pc) == 0)
832 for (here = start_pc, end = start_pc + (insn_size * 28); here < end;)
837 int w = read_memory_integer (UNMAKE_ISA32_ADDR (here), insn_size);
839 if (IS_STQ_R18_R14 (w) || IS_STQ_R18_R15 (w) || IS_STQ_R14_R15 (w)
840 || IS_STL_R14_R15 (w) || IS_STL_R18_R15 (w)
841 || IS_ADDIL_SP_MEDIA (w) || IS_ADDI_SP_MEDIA (w) || IS_PTABSL_R18 (w))
845 else if (IS_MOV_SP_FP (w) || IS_MOV_SP_FP_MEDIA(w))
853 /* Don't bail out yet, we may have arguments stored in
854 registers here, according to the debug info, so that
855 gdb can print the frames correctly. */
856 start_pc = look_for_args_moves (here - insn_size, media_mode);
862 int w = 0xffff & read_memory_integer (here, insn_size);
865 if (IS_STS_R0 (w) || IS_STS_PR (w)
866 || IS_MOV_TO_R15 (w) || IS_MOV_R14 (w)
867 || IS_MOV_R0 (w) || IS_ADD_SP_R0 (w) || IS_MOV_R14_R0 (w))
871 else if (IS_MOV_SP_FP (w))
879 /* Don't bail out yet, we may have arguments stored in
880 registers here, according to the debug info, so that
881 gdb can print the frames correctly. */
882 start_pc = look_for_args_moves (here - insn_size, media_mode);
892 sh_skip_prologue (CORE_ADDR pc)
894 CORE_ADDR post_prologue_pc;
896 /* See if we can determine the end of the prologue via the symbol table.
897 If so, then return either PC, or the PC after the prologue, whichever
899 post_prologue_pc = after_prologue (pc);
901 /* If after_prologue returned a useful address, then use it. Else
902 fall back on the instruction skipping code. */
903 if (post_prologue_pc != 0)
904 return max (pc, post_prologue_pc);
906 return (skip_prologue_hard_way (pc));
909 /* Immediately after a function call, return the saved pc.
910 Can't always go through the frames for this because on some machines
911 the new frame is not set up until the new function executes
914 The return address is the value saved in the PR register + 4 */
916 sh_saved_pc_after_call (struct frame_info *frame)
918 return (ADDR_BITS_REMOVE (read_register (gdbarch_tdep (current_gdbarch)->PR_REGNUM)));
921 /* Should call_function allocate stack space for a struct return? */
923 sh_use_struct_convention (int gcc_p, struct type *type)
926 return (TYPE_LENGTH (type) > 1);
928 int len = TYPE_LENGTH (type);
929 int nelem = TYPE_NFIELDS (type);
930 return ((len != 1 && len != 2 && len != 4 && len != 8) || nelem != 1) &&
931 (len != 8 || TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) != 4);
936 sh64_use_struct_convention (int gcc_p, struct type *type)
938 return (TYPE_LENGTH (type) > 8);
941 /* Store the address of the place in which to copy the structure the
942 subroutine will return. This is called from call_function.
944 We store structs through a pointer passed in R2 */
946 sh64_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
948 write_register (STRUCT_RETURN_REGNUM, (addr));
951 /* Disassemble an instruction. */
953 gdb_print_insn_sh (bfd_vma memaddr, disassemble_info *info)
955 info->endian = TARGET_BYTE_ORDER;
956 return print_insn_sh (memaddr, info);
959 /* Given a GDB frame, determine the address of the calling function's
960 frame. This will be used to create a new GDB frame struct, and
961 then DEPRECATED_INIT_EXTRA_FRAME_INFO and DEPRECATED_INIT_FRAME_PC
962 will be called for the new frame.
964 For us, the frame address is its stack pointer value, so we look up
965 the function prologue to determine the caller's sp value, and return it. */
967 sh_frame_chain (struct frame_info *frame)
969 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
970 get_frame_base (frame),
971 get_frame_base (frame)))
972 return get_frame_base (frame); /* dummy frame same as caller's frame */
973 if (get_frame_pc (frame) && !inside_entry_file (get_frame_pc (frame)))
974 return read_memory_integer (get_frame_base (frame)
975 + get_frame_extra_info (frame)->f_offset, 4);
980 /* Given a register number RN as it appears in an assembly
981 instruction, find the corresponding register number in the GDB
984 translate_insn_rn (int rn, int media_mode)
986 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
988 /* FIXME: this assumes that the number rn is for a not pseudo
994 /* These registers don't have a corresponding compact one. */
995 /* FIXME: This is probably not enough. */
997 if ((rn >= 16 && rn <= 63) || (rn >= 93 && rn <= 140))
1000 if (rn >= 0 && rn <= tdep->R0_C_REGNUM)
1001 return tdep->R0_C_REGNUM + rn;
1008 sh64_frame_chain (struct frame_info *frame)
1010 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
1011 get_frame_base (frame),
1012 get_frame_base (frame)))
1013 return get_frame_base (frame); /* dummy frame same as caller's frame */
1014 if (get_frame_pc (frame) && !inside_entry_file (get_frame_pc (frame)))
1016 int media_mode = pc_is_isa32 (get_frame_pc (frame));
1018 if (gdbarch_tdep (current_gdbarch)->sh_abi == SH_ABI_32)
1021 size = REGISTER_RAW_SIZE (translate_insn_rn (DEPRECATED_FP_REGNUM, media_mode));
1022 return read_memory_integer (get_frame_base (frame)
1023 + get_frame_extra_info (frame)->f_offset,
1030 /* Find REGNUM on the stack. Otherwise, it's in an active register. One thing
1031 we might want to do here is to check REGNUM against the clobber mask, and
1032 somehow flag it as invalid if it isn't saved on the stack somewhere. This
1033 would provide a graceful failure mode when trying to get the value of
1034 caller-saves registers for an inner frame. */
1036 sh_find_callers_reg (struct frame_info *fi, int regnum)
1038 for (; fi; fi = get_next_frame (fi))
1039 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
1040 get_frame_base (fi)))
1041 /* When the caller requests PR from the dummy frame, we return PC because
1042 that's where the previous routine appears to have done a call from. */
1043 return deprecated_read_register_dummy (get_frame_pc (fi),
1044 get_frame_base (fi), regnum);
1047 DEPRECATED_FRAME_INIT_SAVED_REGS (fi);
1048 if (!get_frame_pc (fi))
1050 if (get_frame_saved_regs (fi)[regnum] != 0)
1051 return read_memory_integer (get_frame_saved_regs (fi)[regnum],
1052 register_size (current_gdbarch, regnum));
1054 return read_register (regnum);
1058 sh64_get_saved_pr (struct frame_info *fi, int pr_regnum)
1062 for (; fi; fi = get_next_frame (fi))
1063 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
1064 get_frame_base (fi)))
1065 /* When the caller requests PR from the dummy frame, we return PC because
1066 that's where the previous routine appears to have done a call from. */
1067 return deprecated_read_register_dummy (get_frame_pc (fi),
1068 get_frame_base (fi), pr_regnum);
1071 DEPRECATED_FRAME_INIT_SAVED_REGS (fi);
1072 if (!get_frame_pc (fi))
1075 media_mode = pc_is_isa32 (get_frame_pc (fi));
1077 if (get_frame_saved_regs (fi)[pr_regnum] != 0)
1079 int gdb_reg_num = translate_insn_rn (pr_regnum, media_mode);
1080 int size = ((gdbarch_tdep (current_gdbarch)->sh_abi == SH_ABI_32)
1082 : REGISTER_RAW_SIZE (gdb_reg_num));
1083 return read_memory_integer (get_frame_saved_regs (fi)[pr_regnum], size);
1086 return read_register (pr_regnum);
1089 /* Put here the code to store, into a struct frame_saved_regs, the
1090 addresses of the saved registers of frame described by FRAME_INFO.
1091 This includes special registers such as pc and fp saved in special
1092 ways in the stack frame. sp is even more special: the address we
1093 return for it IS the sp for the next frame. */
1095 sh_nofp_frame_init_saved_regs (struct frame_info *fi)
1097 int *where = (int *) alloca ((NUM_REGS + NUM_PSEUDO_REGS) * sizeof(int));
1105 char *dummy_regs = deprecated_generic_find_dummy_frame (get_frame_pc (fi),
1106 get_frame_base (fi));
1108 if (get_frame_saved_regs (fi) == NULL)
1109 frame_saved_regs_zalloc (fi);
1111 memset (get_frame_saved_regs (fi), 0, SIZEOF_FRAME_SAVED_REGS);
1115 /* DANGER! This is ONLY going to work if the char buffer format of
1116 the saved registers is byte-for-byte identical to the
1117 CORE_ADDR regs[NUM_REGS] format used by struct frame_saved_regs! */
1118 memcpy (get_frame_saved_regs (fi), dummy_regs, SIZEOF_FRAME_SAVED_REGS);
1122 get_frame_extra_info (fi)->leaf_function = 1;
1123 get_frame_extra_info (fi)->f_offset = 0;
1125 for (rn = 0; rn < NUM_REGS + NUM_PSEUDO_REGS; rn++)
1130 /* Loop around examining the prologue insns until we find something
1131 that does not appear to be part of the prologue. But give up
1132 after 20 of them, since we're getting silly then. */
1134 pc = get_frame_func (fi);
1137 deprecated_update_frame_pc_hack (fi, 0);
1141 for (opc = pc + (2 * 28); pc < opc; pc += 2)
1143 insn = read_memory_integer (pc, 2);
1144 /* See where the registers will be saved to */
1147 rn = GET_PUSHED_REG (insn);
1151 else if (IS_STS (insn))
1153 where[gdbarch_tdep (current_gdbarch)->PR_REGNUM] = depth;
1154 /* If we're storing the pr then this isn't a leaf */
1155 get_frame_extra_info (fi)->leaf_function = 0;
1158 else if (IS_MOV_R3 (insn))
1160 r3_val = ((insn & 0xff) ^ 0x80) - 0x80;
1162 else if (IS_SHLL_R3 (insn))
1166 else if (IS_ADD_R3SP (insn))
1170 else if (IS_ADD_SP (insn))
1172 depth -= ((insn & 0xff) ^ 0x80) - 0x80;
1174 else if (IS_MOV_SP_FP (insn))
1176 #if 0 /* This used to just stop when it found an instruction that
1177 was not considered part of the prologue. Now, we just
1178 keep going looking for likely instructions. */
1184 /* Now we know how deep things are, we can work out their addresses */
1186 for (rn = 0; rn < NUM_REGS + NUM_PSEUDO_REGS; rn++)
1190 if (rn == DEPRECATED_FP_REGNUM)
1193 get_frame_saved_regs (fi)[rn] = get_frame_base (fi) - where[rn] + depth - 4;
1197 get_frame_saved_regs (fi)[rn] = 0;
1203 get_frame_saved_regs (fi)[SP_REGNUM] = read_memory_integer (get_frame_saved_regs (fi)[DEPRECATED_FP_REGNUM], 4);
1207 get_frame_saved_regs (fi)[SP_REGNUM] = get_frame_base (fi) - 4;
1210 get_frame_extra_info (fi)->f_offset = depth - where[DEPRECATED_FP_REGNUM] - 4;
1211 /* Work out the return pc - either from the saved pr or the pr
1215 /* For vectors of 4 floating point registers. */
1217 fv_reg_base_num (int fv_regnum)
1221 fp_regnum = FP0_REGNUM +
1222 (fv_regnum - gdbarch_tdep (current_gdbarch)->FV0_REGNUM) * 4;
1226 /* For double precision floating point registers, i.e 2 fp regs.*/
1228 dr_reg_base_num (int dr_regnum)
1232 fp_regnum = FP0_REGNUM +
1233 (dr_regnum - gdbarch_tdep (current_gdbarch)->DR0_REGNUM) * 2;
1237 /* For pairs of floating point registers */
1239 fpp_reg_base_num (int fpp_regnum)
1243 fp_regnum = FP0_REGNUM +
1244 (fpp_regnum - gdbarch_tdep (current_gdbarch)->FPP0_REGNUM) * 2;
1249 is_media_pseudo (int rn)
1251 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1253 return (rn >= tdep->DR0_REGNUM
1254 && rn <= tdep->FV_LAST_REGNUM);
1258 sh64_get_gdb_regnum (int gcc_regnum, CORE_ADDR pc)
1260 return translate_insn_rn (gcc_regnum, pc_is_isa32 (pc));
1264 sh64_media_reg_base_num (int reg_nr)
1266 int base_regnum = -1;
1267 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1269 if (reg_nr >= tdep->DR0_REGNUM
1270 && reg_nr <= tdep->DR_LAST_REGNUM)
1271 base_regnum = dr_reg_base_num (reg_nr);
1273 else if (reg_nr >= tdep->FPP0_REGNUM
1274 && reg_nr <= tdep->FPP_LAST_REGNUM)
1275 base_regnum = fpp_reg_base_num (reg_nr);
1277 else if (reg_nr >= tdep->FV0_REGNUM
1278 && reg_nr <= tdep->FV_LAST_REGNUM)
1279 base_regnum = fv_reg_base_num (reg_nr);
1286 SH COMPACT MODE (ISA 16) (all pseudo) 221-272
1287 GDB_REGNUM BASE_REGNUM
1347 sh64_compact_reg_base_num (int reg_nr)
1349 int base_regnum = -1;
1350 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1352 /* general register N maps to general register N */
1353 if (reg_nr >= tdep->R0_C_REGNUM
1354 && reg_nr <= tdep->R_LAST_C_REGNUM)
1355 base_regnum = reg_nr - tdep->R0_C_REGNUM;
1357 /* floating point register N maps to floating point register N */
1358 else if (reg_nr >= tdep->FP0_C_REGNUM
1359 && reg_nr <= tdep->FP_LAST_C_REGNUM)
1360 base_regnum = reg_nr - tdep->FP0_C_REGNUM + FP0_REGNUM;
1362 /* double prec register N maps to base regnum for double prec register N */
1363 else if (reg_nr >= tdep->DR0_C_REGNUM
1364 && reg_nr <= tdep->DR_LAST_C_REGNUM)
1365 base_regnum = dr_reg_base_num (tdep->DR0_REGNUM
1366 + reg_nr - tdep->DR0_C_REGNUM);
1368 /* vector N maps to base regnum for vector register N */
1369 else if (reg_nr >= tdep->FV0_C_REGNUM
1370 && reg_nr <= tdep->FV_LAST_C_REGNUM)
1371 base_regnum = fv_reg_base_num (tdep->FV0_REGNUM
1372 + reg_nr - tdep->FV0_C_REGNUM);
1374 else if (reg_nr == tdep->PC_C_REGNUM)
1375 base_regnum = PC_REGNUM;
1377 else if (reg_nr == tdep->GBR_C_REGNUM)
1380 else if (reg_nr == tdep->MACH_C_REGNUM
1381 || reg_nr == tdep->MACL_C_REGNUM)
1384 else if (reg_nr == tdep->PR_C_REGNUM)
1387 else if (reg_nr == tdep->T_C_REGNUM)
1390 else if (reg_nr == tdep->FPSCR_C_REGNUM)
1391 base_regnum = tdep->FPSCR_REGNUM; /*???? this register is a mess. */
1393 else if (reg_nr == tdep->FPUL_C_REGNUM)
1394 base_regnum = FP0_REGNUM + 32;
1399 /* Given a register number RN (according to the gdb scheme) , return
1400 its corresponding architectural register. In media mode, only a
1401 subset of the registers is pseudo registers. For compact mode, all
1402 the registers are pseudo. */
1404 translate_rn_to_arch_reg_num (int rn, int media_mode)
1409 if (!is_media_pseudo (rn))
1412 return sh64_media_reg_base_num (rn);
1415 /* All compact registers are pseudo. */
1416 return sh64_compact_reg_base_num (rn);
1420 sign_extend (int value, int bits)
1422 value = value & ((1 << bits) - 1);
1423 return (value & (1 << (bits - 1))
1424 ? value | (~((1 << bits) - 1))
1429 sh64_nofp_frame_init_saved_regs (struct frame_info *fi)
1431 int *where = (int *) alloca ((NUM_REGS + NUM_PSEUDO_REGS) * sizeof (int));
1443 int gdb_register_number;
1444 int register_number;
1445 char *dummy_regs = deprecated_generic_find_dummy_frame (get_frame_pc (fi), get_frame_base (fi));
1446 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1448 if (get_frame_saved_regs (fi) == NULL)
1449 frame_saved_regs_zalloc (fi);
1451 memset (get_frame_saved_regs (fi), 0, SIZEOF_FRAME_SAVED_REGS);
1455 /* DANGER! This is ONLY going to work if the char buffer format of
1456 the saved registers is byte-for-byte identical to the
1457 CORE_ADDR regs[NUM_REGS] format used by struct frame_saved_regs! */
1458 memcpy (get_frame_saved_regs (fi), dummy_regs, SIZEOF_FRAME_SAVED_REGS);
1462 get_frame_extra_info (fi)->leaf_function = 1;
1463 get_frame_extra_info (fi)->f_offset = 0;
1465 for (rn = 0; rn < NUM_REGS + NUM_PSEUDO_REGS; rn++)
1470 /* Loop around examining the prologue insns until we find something
1471 that does not appear to be part of the prologue. But give up
1472 after 20 of them, since we're getting silly then. */
1474 pc = get_frame_func (fi);
1477 deprecated_update_frame_pc_hack (fi, 0);
1481 if (pc_is_isa32 (pc))
1492 /* The frame pointer register is general register 14 in shmedia and
1493 shcompact modes. In sh compact it is a pseudo register. Same goes
1494 for the stack pointer register, which is register 15. */
1495 fp_regnum = translate_insn_rn (DEPRECATED_FP_REGNUM, media_mode);
1496 sp_regnum = translate_insn_rn (SP_REGNUM, media_mode);
1498 for (opc = pc + (insn_size * 28); pc < opc; pc += insn_size)
1500 insn = read_memory_integer (media_mode ? UNMAKE_ISA32_ADDR (pc) : pc,
1503 if (media_mode == 0)
1505 if (IS_STS_PR (insn))
1507 int next_insn = read_memory_integer (pc + insn_size, insn_size);
1508 if (IS_MOV_TO_R15 (next_insn))
1510 int reg_nr = tdep->PR_C_REGNUM;
1512 where[reg_nr] = depth - ((((next_insn & 0xf) ^ 0x8) - 0x8) << 2);
1513 get_frame_extra_info (fi)->leaf_function = 0;
1517 else if (IS_MOV_R14 (insn))
1519 where[fp_regnum] = depth - ((((insn & 0xf) ^ 0x8) - 0x8) << 2);
1522 else if (IS_MOV_R0 (insn))
1524 /* Put in R0 the offset from SP at which to store some
1525 registers. We are interested in this value, because it
1526 will tell us where the given registers are stored within
1528 r0_val = ((insn & 0xff) ^ 0x80) - 0x80;
1530 else if (IS_ADD_SP_R0 (insn))
1532 /* This instruction still prepares r0, but we don't care.
1533 We already have the offset in r0_val. */
1535 else if (IS_STS_R0 (insn))
1537 /* Store PR at r0_val-4 from SP. Decrement r0 by 4*/
1538 int reg_nr = tdep->PR_C_REGNUM;
1539 where[reg_nr] = depth - (r0_val - 4);
1541 get_frame_extra_info (fi)->leaf_function = 0;
1543 else if (IS_MOV_R14_R0 (insn))
1545 /* Store R14 at r0_val-4 from SP. Decrement r0 by 4 */
1546 where[fp_regnum] = depth - (r0_val - 4);
1550 else if (IS_ADD_SP (insn))
1552 depth -= ((insn & 0xff) ^ 0x80) - 0x80;
1554 else if (IS_MOV_SP_FP (insn))
1559 if (IS_ADDIL_SP_MEDIA (insn)
1560 || IS_ADDI_SP_MEDIA (insn))
1562 depth -= sign_extend ((((insn & 0xffc00) ^ 0x80000) - 0x80000) >> 10, 9);
1565 else if (IS_STQ_R18_R15 (insn))
1567 where[tdep->PR_REGNUM] =
1568 depth - (sign_extend ((insn & 0xffc00) >> 10, 9) << 3);
1569 get_frame_extra_info (fi)->leaf_function = 0;
1572 else if (IS_STL_R18_R15 (insn))
1574 where[tdep->PR_REGNUM] =
1575 depth - (sign_extend ((insn & 0xffc00) >> 10, 9) << 2);
1576 get_frame_extra_info (fi)->leaf_function = 0;
1579 else if (IS_STQ_R14_R15 (insn))
1581 where[fp_regnum] = depth - (sign_extend ((insn & 0xffc00) >> 10, 9) << 3);
1584 else if (IS_STL_R14_R15 (insn))
1586 where[fp_regnum] = depth - (sign_extend ((insn & 0xffc00) >> 10, 9) << 2);
1589 else if (IS_MOV_SP_FP_MEDIA (insn))
1594 /* Now we know how deep things are, we can work out their addresses. */
1595 for (rn = 0; rn < NUM_REGS + NUM_PSEUDO_REGS; rn++)
1597 register_number = translate_rn_to_arch_reg_num (rn, media_mode);
1601 if (rn == fp_regnum)
1604 /* Watch out! saved_regs is only for the real registers, and
1605 doesn't include space for the pseudo registers. */
1606 get_frame_saved_regs (fi)[register_number]= get_frame_base (fi) - where[rn] + depth;
1610 get_frame_saved_regs (fi)[register_number] = 0;
1615 /* SP_REGNUM is 15. For shmedia 15 is the real register. For
1616 shcompact 15 is the arch register corresponding to the pseudo
1617 register r15 which still is the SP register. */
1618 /* The place on the stack where fp is stored contains the sp of
1620 /* Again, saved_registers contains only space for the real
1621 registers, so we store in DEPRECATED_FP_REGNUM position. */
1623 if (tdep->sh_abi == SH_ABI_32)
1626 size = REGISTER_RAW_SIZE (fp_regnum);
1627 get_frame_saved_regs (fi)[sp_regnum] = read_memory_integer (get_frame_saved_regs (fi)[fp_regnum], size);
1630 get_frame_saved_regs (fi)[sp_regnum] = get_frame_base (fi);
1632 get_frame_extra_info (fi)->f_offset = depth - where[fp_regnum];
1636 sh_fp_frame_init_saved_regs (struct frame_info *fi)
1638 int *where = (int *) alloca ((NUM_REGS + NUM_PSEUDO_REGS) * sizeof (int));
1646 char *dummy_regs = deprecated_generic_find_dummy_frame (get_frame_pc (fi), get_frame_base (fi));
1647 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1649 if (get_frame_saved_regs (fi) == NULL)
1650 frame_saved_regs_zalloc (fi);
1652 memset (get_frame_saved_regs (fi), 0, SIZEOF_FRAME_SAVED_REGS);
1656 /* DANGER! This is ONLY going to work if the char buffer format of
1657 the saved registers is byte-for-byte identical to the
1658 CORE_ADDR regs[NUM_REGS] format used by struct frame_saved_regs! */
1659 memcpy (get_frame_saved_regs (fi), dummy_regs, SIZEOF_FRAME_SAVED_REGS);
1663 get_frame_extra_info (fi)->leaf_function = 1;
1664 get_frame_extra_info (fi)->f_offset = 0;
1666 for (rn = 0; rn < NUM_REGS + NUM_PSEUDO_REGS; rn++)
1671 /* Loop around examining the prologue insns until we find something
1672 that does not appear to be part of the prologue. But give up
1673 after 20 of them, since we're getting silly then. */
1675 pc = get_frame_func (fi);
1678 deprecated_update_frame_pc_hack (fi, 0);
1682 for (opc = pc + (2 * 28); pc < opc; pc += 2)
1684 insn = read_memory_integer (pc, 2);
1685 /* See where the registers will be saved to */
1688 rn = GET_PUSHED_REG (insn);
1692 else if (IS_STS (insn))
1694 where[tdep->PR_REGNUM] = depth;
1695 /* If we're storing the pr then this isn't a leaf */
1696 get_frame_extra_info (fi)->leaf_function = 0;
1699 else if (IS_MOV_R3 (insn))
1701 r3_val = ((insn & 0xff) ^ 0x80) - 0x80;
1703 else if (IS_SHLL_R3 (insn))
1707 else if (IS_ADD_R3SP (insn))
1711 else if (IS_ADD_SP (insn))
1713 depth -= ((insn & 0xff) ^ 0x80) - 0x80;
1715 else if (IS_FMOV (insn))
1717 if (read_register (tdep->FPSCR_REGNUM) & FPSCR_SZ)
1726 else if (IS_MOV_SP_FP (insn))
1728 #if 0 /* This used to just stop when it found an instruction that
1729 was not considered part of the prologue. Now, we just
1730 keep going looking for likely instructions. */
1736 /* Now we know how deep things are, we can work out their addresses */
1738 for (rn = 0; rn < NUM_REGS + NUM_PSEUDO_REGS; rn++)
1742 if (rn == DEPRECATED_FP_REGNUM)
1745 get_frame_saved_regs (fi)[rn] = get_frame_base (fi) - where[rn] + depth - 4;
1749 get_frame_saved_regs (fi)[rn] = 0;
1755 get_frame_saved_regs (fi)[SP_REGNUM] =
1756 read_memory_integer (get_frame_saved_regs (fi)[DEPRECATED_FP_REGNUM], 4);
1760 get_frame_saved_regs (fi)[SP_REGNUM] = get_frame_base (fi) - 4;
1763 get_frame_extra_info (fi)->f_offset = depth - where[DEPRECATED_FP_REGNUM] - 4;
1764 /* Work out the return pc - either from the saved pr or the pr
1768 /* Initialize the extra info saved in a FRAME */
1770 sh_init_extra_frame_info (int fromleaf, struct frame_info *fi)
1773 frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
1775 if (get_next_frame (fi))
1776 deprecated_update_frame_pc_hack (fi, DEPRECATED_FRAME_SAVED_PC (get_next_frame (fi)));
1778 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
1779 get_frame_base (fi)))
1781 /* We need to setup fi->frame here because call_function_by_hand
1782 gets it wrong by assuming it's always FP. */
1783 deprecated_update_frame_base_hack (fi, deprecated_read_register_dummy (get_frame_pc (fi), get_frame_base (fi),
1785 get_frame_extra_info (fi)->return_pc = deprecated_read_register_dummy (get_frame_pc (fi),
1786 get_frame_base (fi),
1788 get_frame_extra_info (fi)->f_offset = -(DEPRECATED_CALL_DUMMY_LENGTH + 4);
1789 get_frame_extra_info (fi)->leaf_function = 0;
1794 DEPRECATED_FRAME_INIT_SAVED_REGS (fi);
1795 get_frame_extra_info (fi)->return_pc =
1796 sh_find_callers_reg (fi, gdbarch_tdep (current_gdbarch)->PR_REGNUM);
1801 sh64_init_extra_frame_info (int fromleaf, struct frame_info *fi)
1803 int media_mode = pc_is_isa32 (get_frame_pc (fi));
1805 frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
1807 if (get_next_frame (fi))
1808 deprecated_update_frame_pc_hack (fi, DEPRECATED_FRAME_SAVED_PC (get_next_frame (fi)));
1810 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (fi), get_frame_base (fi),
1811 get_frame_base (fi)))
1813 /* We need to setup fi->frame here because call_function_by_hand
1814 gets it wrong by assuming it's always FP. */
1815 deprecated_update_frame_base_hack (fi, deprecated_read_register_dummy (get_frame_pc (fi), get_frame_base (fi), SP_REGNUM));
1816 get_frame_extra_info (fi)->return_pc =
1817 deprecated_read_register_dummy (get_frame_pc (fi),
1818 get_frame_base (fi), PC_REGNUM);
1819 get_frame_extra_info (fi)->f_offset = -(DEPRECATED_CALL_DUMMY_LENGTH + 4);
1820 get_frame_extra_info (fi)->leaf_function = 0;
1825 DEPRECATED_FRAME_INIT_SAVED_REGS (fi);
1826 get_frame_extra_info (fi)->return_pc =
1827 sh64_get_saved_pr (fi, gdbarch_tdep (current_gdbarch)->PR_REGNUM);
1832 sh64_get_saved_register (char *raw_buffer, int *optimized, CORE_ADDR *addrp,
1833 struct frame_info *frame, int regnum,
1834 enum lval_type *lval)
1837 int live_regnum = regnum;
1838 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1840 if (!target_has_registers)
1841 error ("No registers.");
1843 /* Normal systems don't optimize out things with register numbers. */
1844 if (optimized != NULL)
1847 if (addrp) /* default assumption: not found in memory */
1851 memset (raw_buffer, 0, sizeof (raw_buffer));
1853 /* We must do this here, before the following while loop changes
1854 frame, and makes it NULL. If this is a media register number,
1855 but we are in compact mode, it will become the corresponding
1856 compact pseudo register. If there is no corresponding compact
1857 pseudo-register what do we do?*/
1858 media_mode = pc_is_isa32 (get_frame_pc (frame));
1859 live_regnum = translate_insn_rn (regnum, media_mode);
1861 /* Note: since the current frame's registers could only have been
1862 saved by frames INTERIOR TO the current frame, we skip examining
1863 the current frame itself: otherwise, we would be getting the
1864 previous frame's registers which were saved by the current frame. */
1866 while (frame && ((frame = get_next_frame (frame)) != NULL))
1868 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
1869 get_frame_base (frame),
1870 get_frame_base (frame)))
1872 if (lval) /* found it in a CALL_DUMMY frame */
1876 (deprecated_generic_find_dummy_frame (get_frame_pc (frame), get_frame_base (frame))
1877 + REGISTER_BYTE (regnum)),
1878 REGISTER_RAW_SIZE (regnum));
1882 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
1883 if (get_frame_saved_regs (frame) != NULL
1884 && get_frame_saved_regs (frame)[regnum] != 0)
1886 if (lval) /* found it saved on the stack */
1887 *lval = lval_memory;
1888 if (regnum == SP_REGNUM)
1890 if (raw_buffer) /* SP register treated specially */
1891 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum),
1892 get_frame_saved_regs (frame)[regnum]);
1895 { /* any other register */
1898 *addrp = get_frame_saved_regs (frame)[regnum];
1902 if (tdep->sh_abi == SH_ABI_32
1903 && (live_regnum == DEPRECATED_FP_REGNUM
1904 || live_regnum == tdep->PR_REGNUM))
1907 size = REGISTER_RAW_SIZE (live_regnum);
1908 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
1909 read_memory (get_frame_saved_regs (frame)[regnum], raw_buffer, size);
1911 read_memory (get_frame_saved_regs (frame)[regnum],
1913 + REGISTER_RAW_SIZE (live_regnum)
1922 /* If we get thru the loop to this point, it means the register was
1923 not saved in any frame. Return the actual live-register value. */
1925 if (lval) /* found it in a live register */
1926 *lval = lval_register;
1928 *addrp = REGISTER_BYTE (live_regnum);
1930 deprecated_read_register_gen (live_regnum, raw_buffer);
1933 /* Extract from an array REGBUF containing the (raw) register state
1934 the address in which a function should return its structure value,
1935 as a CORE_ADDR (or an expression that can be used as one). */
1937 sh_extract_struct_value_address (struct regcache *regcache)
1940 /*FIXME: Is R0 really correct here? Not STRUCT_RETURN_REGNUM? */
1941 regcache_cooked_read_unsigned (regcache, STRUCT_RETURN_REGNUM, &addr);
1946 sh64_extract_struct_value_address (char *regbuf)
1948 return (extract_unsigned_integer ((regbuf + REGISTER_BYTE (STRUCT_RETURN_REGNUM)),
1949 REGISTER_RAW_SIZE (STRUCT_RETURN_REGNUM)));
1953 sh_frame_saved_pc (struct frame_info *frame)
1955 return (get_frame_extra_info (frame)->return_pc);
1958 /* Discard from the stack the innermost frame,
1959 restoring all saved registers. */
1963 register struct frame_info *frame = get_current_frame ();
1964 register CORE_ADDR fp;
1965 register int regnum;
1967 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
1968 get_frame_base (frame),
1969 get_frame_base (frame)))
1970 generic_pop_dummy_frame ();
1973 fp = get_frame_base (frame);
1974 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
1976 /* Copy regs from where they were saved in the frame */
1977 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
1978 if (get_frame_saved_regs (frame)[regnum])
1979 write_register (regnum,
1980 read_memory_integer (get_frame_saved_regs (frame)[regnum], 4));
1982 write_register (PC_REGNUM, get_frame_extra_info (frame)->return_pc);
1983 write_register (SP_REGNUM, fp + 4);
1985 flush_cached_frames ();
1988 /* Used in the 'return' command. */
1990 sh64_pop_frame (void)
1992 register struct frame_info *frame = get_current_frame ();
1993 register CORE_ADDR fp;
1994 register int regnum;
1995 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1997 int media_mode = pc_is_isa32 (get_frame_pc (frame));
1999 if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
2000 get_frame_base (frame),
2001 get_frame_base (frame)))
2002 generic_pop_dummy_frame ();
2005 fp = get_frame_base (frame);
2006 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
2008 /* Copy regs from where they were saved in the frame */
2009 for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
2010 if (get_frame_saved_regs (frame)[regnum])
2013 if (tdep->sh_abi == SH_ABI_32
2014 && (regnum == DEPRECATED_FP_REGNUM
2015 || regnum == tdep->PR_REGNUM))
2018 size = REGISTER_RAW_SIZE (translate_insn_rn (regnum,
2020 write_register (regnum,
2021 read_memory_integer (get_frame_saved_regs (frame)[regnum],
2025 write_register (PC_REGNUM, get_frame_extra_info (frame)->return_pc);
2026 write_register (SP_REGNUM, fp + 8);
2028 flush_cached_frames ();
2031 /* Function: push_arguments
2032 Setup the function arguments for calling a function in the inferior.
2034 On the Hitachi SH architecture, there are four registers (R4 to R7)
2035 which are dedicated for passing function arguments. Up to the first
2036 four arguments (depending on size) may go into these registers.
2037 The rest go on the stack.
2039 Arguments that are smaller than 4 bytes will still take up a whole
2040 register or a whole 32-bit word on the stack, and will be
2041 right-justified in the register or the stack word. This includes
2042 chars, shorts, and small aggregate types.
2044 Arguments that are larger than 4 bytes may be split between two or
2045 more registers. If there are not enough registers free, an argument
2046 may be passed partly in a register (or registers), and partly on the
2047 stack. This includes doubles, long longs, and larger aggregates.
2048 As far as I know, there is no upper limit to the size of aggregates
2049 that will be passed in this way; in other words, the convention of
2050 passing a pointer to a large aggregate instead of a copy is not used.
2052 An exceptional case exists for struct arguments (and possibly other
2053 aggregates such as arrays) if the size is larger than 4 bytes but
2054 not a multiple of 4 bytes. In this case the argument is never split
2055 between the registers and the stack, but instead is copied in its
2056 entirety onto the stack, AND also copied into as many registers as
2057 there is room for. In other words, space in registers permitting,
2058 two copies of the same argument are passed in. As far as I can tell,
2059 only the one on the stack is used, although that may be a function
2060 of the level of compiler optimization. I suspect this is a compiler
2061 bug. Arguments of these odd sizes are left-justified within the
2062 word (as opposed to arguments smaller than 4 bytes, which are
2065 If the function is to return an aggregate type such as a struct, it
2066 is either returned in the normal return value register R0 (if its
2067 size is no greater than one byte), or else the caller must allocate
2068 space into which the callee will copy the return value (if the size
2069 is greater than one byte). In this case, a pointer to the return
2070 value location is passed into the callee in register R2, which does
2071 not displace any of the other arguments passed in via registers R4
2075 sh_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
2076 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
2077 struct value **args, CORE_ADDR sp, int struct_return,
2078 CORE_ADDR struct_addr)
2081 int stack_offset, stack_alloc;
2089 int odd_sized_struct;
2090 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2092 /* first force sp to a 4-byte alignment */
2095 /* The "struct return pointer" pseudo-argument has its own dedicated
2098 regcache_cooked_write_unsigned (regcache, STRUCT_RETURN_REGNUM, struct_addr);
2100 /* Now make sure there's space on the stack */
2101 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
2102 stack_alloc += ((TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 3) & ~3);
2103 sp -= stack_alloc; /* make room on stack for args */
2105 /* Now load as many as possible of the first arguments into
2106 registers, and push the rest onto the stack. There are 16 bytes
2107 in four registers available. Loop thru args from first to last. */
2109 argreg = tdep->ARG0_REGNUM;
2110 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
2112 type = VALUE_TYPE (args[argnum]);
2113 len = TYPE_LENGTH (type);
2114 memset (valbuf, 0, sizeof (valbuf));
2117 /* value gets right-justified in the register or stack word */
2118 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2119 memcpy (valbuf + (4 - len),
2120 (char *) VALUE_CONTENTS (args[argnum]), len);
2122 memcpy (valbuf, (char *) VALUE_CONTENTS (args[argnum]), len);
2126 val = (char *) VALUE_CONTENTS (args[argnum]);
2128 if (len > 4 && (len & 3) != 0)
2129 odd_sized_struct = 1; /* such structs go entirely on stack */
2131 odd_sized_struct = 0;
2134 if (argreg > tdep->ARGLAST_REGNUM
2135 || odd_sized_struct)
2137 /* must go on the stack */
2138 write_memory (sp + stack_offset, val, 4);
2141 /* NOTE WELL!!!!! This is not an "else if" clause!!!
2142 That's because some *&^%$ things get passed on the stack
2143 AND in the registers! */
2144 if (argreg <= tdep->ARGLAST_REGNUM)
2146 /* there's room in a register */
2147 regval = extract_unsigned_integer (val, register_size (gdbarch,
2149 regcache_cooked_write_unsigned (regcache, argreg++, regval);
2151 /* Store the value 4 bytes at a time. This means that things
2152 larger than 4 bytes may go partly in registers and partly
2154 len -= register_size (gdbarch, argreg);
2155 val += register_size (gdbarch, argreg);
2159 /* Store return address. */
2160 regcache_cooked_write_unsigned (regcache, tdep->PR_REGNUM, bp_addr);
2162 /* Update stack pointer. */
2163 regcache_cooked_write_unsigned (regcache, SP_REGNUM, sp);
2168 /* R2-R9 for integer types and integer equivalent (char, pointers) and
2169 non-scalar (struct, union) elements (even if the elements are
2171 FR0-FR11 for single precision floating point (float)
2172 DR0-DR10 for double precision floating point (double)
2174 If a float is argument number 3 (for instance) and arguments number
2175 1,2, and 4 are integer, the mapping will be:
2176 arg1 -->R2, arg2 --> R3, arg3 -->FR0, arg4 --> R5. I.e. R4 is not used.
2178 If a float is argument number 10 (for instance) and arguments number
2179 1 through 10 are integer, the mapping will be:
2180 arg1->R2, arg2->R3, arg3->R4, arg4->R5, arg5->R6, arg6->R7, arg7->R8,
2181 arg8->R9, arg9->(0,SP)stack(8-byte aligned), arg10->FR0, arg11->stack(16,SP).
2182 I.e. there is hole in the stack.
2184 Different rules apply for variable arguments functions, and for functions
2185 for which the prototype is not known. */
2188 sh64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
2189 int struct_return, CORE_ADDR struct_addr)
2191 int stack_offset, stack_alloc;
2195 int float_arg_index = 0;
2196 int double_arg_index = 0;
2206 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2208 memset (fp_args, 0, sizeof (fp_args));
2210 /* first force sp to a 8-byte alignment */
2213 /* The "struct return pointer" pseudo-argument has its own dedicated
2217 write_register (STRUCT_RETURN_REGNUM, struct_addr);
2219 /* Now make sure there's space on the stack */
2220 for (argnum = 0, stack_alloc = 0; argnum < nargs; argnum++)
2221 stack_alloc += ((TYPE_LENGTH (VALUE_TYPE (args[argnum])) + 7) & ~7);
2222 sp -= stack_alloc; /* make room on stack for args */
2224 /* Now load as many as possible of the first arguments into
2225 registers, and push the rest onto the stack. There are 64 bytes
2226 in eight registers available. Loop thru args from first to last. */
2228 int_argreg = tdep->ARG0_REGNUM;
2229 float_argreg = FP0_REGNUM;
2230 double_argreg = tdep->DR0_REGNUM;
2232 for (argnum = 0, stack_offset = 0; argnum < nargs; argnum++)
2234 type = VALUE_TYPE (args[argnum]);
2235 len = TYPE_LENGTH (type);
2236 memset (valbuf, 0, sizeof (valbuf));
2238 if (TYPE_CODE (type) != TYPE_CODE_FLT)
2240 argreg_size = REGISTER_RAW_SIZE (int_argreg);
2242 if (len < argreg_size)
2244 /* value gets right-justified in the register or stack word */
2245 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2246 memcpy (valbuf + argreg_size - len,
2247 (char *) VALUE_CONTENTS (args[argnum]), len);
2249 memcpy (valbuf, (char *) VALUE_CONTENTS (args[argnum]), len);
2254 val = (char *) VALUE_CONTENTS (args[argnum]);
2258 if (int_argreg > tdep->ARGLAST_REGNUM)
2260 /* must go on the stack */
2261 write_memory (sp + stack_offset, val, argreg_size);
2262 stack_offset += 8;/*argreg_size;*/
2264 /* NOTE WELL!!!!! This is not an "else if" clause!!!
2265 That's because some *&^%$ things get passed on the stack
2266 AND in the registers! */
2267 if (int_argreg <= tdep->ARGLAST_REGNUM)
2269 /* there's room in a register */
2270 regval = extract_unsigned_integer (val, argreg_size);
2271 write_register (int_argreg, regval);
2273 /* Store the value 8 bytes at a time. This means that
2274 things larger than 8 bytes may go partly in registers
2275 and partly on the stack. FIXME: argreg is incremented
2276 before we use its size. */
2284 val = (char *) VALUE_CONTENTS (args[argnum]);
2287 /* Where is it going to be stored? */
2288 while (fp_args[float_arg_index])
2291 /* Now float_argreg points to the register where it
2292 should be stored. Are we still within the allowed
2294 if (float_arg_index <= tdep->FLOAT_ARGLAST_REGNUM)
2296 /* Goes in FR0...FR11 */
2297 deprecated_write_register_gen (FP0_REGNUM + float_arg_index,
2299 fp_args[float_arg_index] = 1;
2300 /* Skip the corresponding general argument register. */
2305 /* Store it as the integers, 8 bytes at the time, if
2306 necessary spilling on the stack. */
2311 /* Where is it going to be stored? */
2312 while (fp_args[double_arg_index])
2313 double_arg_index += 2;
2314 /* Now double_argreg points to the register
2315 where it should be stored.
2316 Are we still within the allowed register set? */
2317 if (double_arg_index < tdep->FLOAT_ARGLAST_REGNUM)
2319 /* Goes in DR0...DR10 */
2320 /* The numbering of the DRi registers is consecutive,
2321 i.e. includes odd numbers. */
2322 int double_register_offset = double_arg_index / 2;
2323 int regnum = tdep->DR0_REGNUM +
2324 double_register_offset;
2326 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
2328 memset (valbuf_tmp, 0, sizeof (valbuf_tmp));
2329 DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL (regnum,
2335 /* Note: must use write_register_gen here instead
2336 of regcache_raw_write, because
2337 regcache_raw_write works only for real
2338 registers, not pseudo. write_register_gen will
2339 call the gdbarch function to do register
2340 writes, and that will properly know how to deal
2342 deprecated_write_register_gen (regnum, val);
2343 fp_args[double_arg_index] = 1;
2344 fp_args[double_arg_index + 1] = 1;
2345 /* Skip the corresponding general argument register. */
2350 /* Store it as the integers, 8 bytes at the time, if
2351 necessary spilling on the stack. */
2358 /* Function: push_return_address (pc)
2359 Set up the return address for the inferior function call.
2360 Needed for targets where we don't actually execute a JSR/BSR instruction */
2363 sh64_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
2365 write_register (gdbarch_tdep (current_gdbarch)->PR_REGNUM,
2366 CALL_DUMMY_ADDRESS ());
2370 /* Function: fix_call_dummy
2371 Poke the callee function's address into the destination part of
2372 the CALL_DUMMY. The address is actually stored in a data word
2373 following the actualy CALL_DUMMY instructions, which will load
2374 it into a register using PC-relative addressing. This function
2375 expects the CALL_DUMMY to look like this:
2386 sh_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
2387 struct value **args, struct type *type, int gcc_p)
2389 *(unsigned long *) (dummy + 8) = fun;
2393 /* Find a function's return value in the appropriate registers (in
2394 regbuf), and copy it into valbuf. Extract from an array REGBUF
2395 containing the (raw) register state a function return value of type
2396 TYPE, and copy that, in virtual format, into VALBUF. */
2398 sh_default_extract_return_value (struct type *type, struct regcache *regcache,
2401 int len = TYPE_LENGTH (type);
2402 int return_register = R0_REGNUM;
2409 regcache_cooked_read_unsigned (regcache, R0_REGNUM, &c);
2410 store_unsigned_integer (valbuf, len, c);
2414 int i, regnum = R0_REGNUM;
2415 for (i = 0; i < len; i += 4)
2416 regcache_raw_read (regcache, regnum++, (char *)valbuf + i);
2419 error ("bad size for return value");
2423 sh3e_sh4_extract_return_value (struct type *type, struct regcache *regcache,
2426 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2428 int len = TYPE_LENGTH (type);
2429 int i, regnum = FP0_REGNUM;
2430 for (i = 0; i < len; i += 4)
2431 regcache_raw_read (regcache, regnum++, (char *)valbuf + i);
2434 sh_default_extract_return_value (type, regcache, valbuf);
2438 sh64_extract_return_value (struct type *type, char *regbuf, char *valbuf)
2441 int return_register;
2442 int len = TYPE_LENGTH (type);
2443 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2445 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2449 /* Return value stored in FP0_REGNUM */
2450 return_register = FP0_REGNUM;
2451 offset = REGISTER_BYTE (return_register);
2452 memcpy (valbuf, (char *) regbuf + offset, len);
2456 /* return value stored in DR0_REGNUM */
2459 return_register = tdep->DR0_REGNUM;
2460 offset = REGISTER_BYTE (return_register);
2462 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
2463 floatformat_to_doublest (&floatformat_ieee_double_littlebyte_bigword,
2464 (char *) regbuf + offset, &val);
2466 floatformat_to_doublest (&floatformat_ieee_double_big,
2467 (char *) regbuf + offset, &val);
2468 deprecated_store_floating (valbuf, len, val);
2475 /* Result is in register 2. If smaller than 8 bytes, it is padded
2476 at the most significant end. */
2477 return_register = tdep->RETURN_REGNUM;
2478 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2479 offset = REGISTER_BYTE (return_register) +
2480 REGISTER_RAW_SIZE (return_register) - len;
2482 offset = REGISTER_BYTE (return_register);
2483 memcpy (valbuf, (char *) regbuf + offset, len);
2486 error ("bad size for return value");
2490 /* Write into appropriate registers a function return value
2491 of type TYPE, given in virtual format.
2492 If the architecture is sh4 or sh3e, store a function's return value
2493 in the R0 general register or in the FP0 floating point register,
2494 depending on the type of the return value. In all the other cases
2495 the result is stored in r0, left-justified. */
2497 sh_default_store_return_value (struct type *type, struct regcache *regcache,
2501 int len = TYPE_LENGTH (type);
2505 val = extract_unsigned_integer (valbuf, len);
2506 regcache_cooked_write_unsigned (regcache, R0_REGNUM, val);
2510 int i, regnum = R0_REGNUM;
2511 for (i = 0; i < len; i += 4)
2512 regcache_raw_write (regcache, regnum++, (char *)valbuf + i);
2517 sh3e_sh4_store_return_value (struct type *type, struct regcache *regcache,
2520 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2522 int len = TYPE_LENGTH (type);
2523 int i, regnum = FP0_REGNUM;
2524 for (i = 0; i < len; i += 4)
2525 regcache_raw_write (regcache, regnum++, (char *)valbuf + i);
2528 sh_default_store_return_value (type, regcache, valbuf);
2532 sh64_store_return_value (struct type *type, char *valbuf)
2534 char buf[64]; /* more than enough... */
2535 int len = TYPE_LENGTH (type);
2537 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2541 /* Return value stored in FP0_REGNUM */
2542 deprecated_write_register_gen (FP0_REGNUM, valbuf);
2546 /* return value stored in DR0_REGNUM */
2547 /* FIXME: Implement */
2552 int return_register = gdbarch_tdep (current_gdbarch)->RETURN_REGNUM;
2555 if (len <= REGISTER_RAW_SIZE (return_register))
2557 /* Pad with zeros. */
2558 memset (buf, 0, REGISTER_RAW_SIZE (return_register));
2559 if (TARGET_BYTE_ORDER == BFD_ENDIAN_LITTLE)
2560 offset = 0; /*REGISTER_RAW_SIZE (return_register) - len;*/
2562 offset = REGISTER_RAW_SIZE (return_register) - len;
2564 memcpy (buf + offset, valbuf, len);
2565 deprecated_write_register_gen (return_register, buf);
2568 deprecated_write_register_gen (return_register, valbuf);
2572 /* Print the registers in a form similar to the E7000 */
2575 sh_generic_show_regs (void)
2577 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2579 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2580 paddr (read_register (PC_REGNUM)),
2581 (long) read_register (tdep->SR_REGNUM),
2582 (long) read_register (tdep->PR_REGNUM),
2583 (long) read_register (MACH_REGNUM),
2584 (long) read_register (MACL_REGNUM));
2586 printf_filtered ("GBR=%08lx VBR=%08lx",
2587 (long) read_register (GBR_REGNUM),
2588 (long) read_register (VBR_REGNUM));
2590 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2591 (long) read_register (0),
2592 (long) read_register (1),
2593 (long) read_register (2),
2594 (long) read_register (3),
2595 (long) read_register (4),
2596 (long) read_register (5),
2597 (long) read_register (6),
2598 (long) read_register (7));
2599 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2600 (long) read_register (8),
2601 (long) read_register (9),
2602 (long) read_register (10),
2603 (long) read_register (11),
2604 (long) read_register (12),
2605 (long) read_register (13),
2606 (long) read_register (14),
2607 (long) read_register (15));
2611 sh3_show_regs (void)
2613 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2615 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2616 paddr (read_register (PC_REGNUM)),
2617 (long) read_register (tdep->SR_REGNUM),
2618 (long) read_register (tdep->PR_REGNUM),
2619 (long) read_register (MACH_REGNUM),
2620 (long) read_register (MACL_REGNUM));
2622 printf_filtered ("GBR=%08lx VBR=%08lx",
2623 (long) read_register (GBR_REGNUM),
2624 (long) read_register (VBR_REGNUM));
2625 printf_filtered (" SSR=%08lx SPC=%08lx",
2626 (long) read_register (tdep->SSR_REGNUM),
2627 (long) read_register (tdep->SPC_REGNUM));
2629 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2630 (long) read_register (0),
2631 (long) read_register (1),
2632 (long) read_register (2),
2633 (long) read_register (3),
2634 (long) read_register (4),
2635 (long) read_register (5),
2636 (long) read_register (6),
2637 (long) read_register (7));
2638 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2639 (long) read_register (8),
2640 (long) read_register (9),
2641 (long) read_register (10),
2642 (long) read_register (11),
2643 (long) read_register (12),
2644 (long) read_register (13),
2645 (long) read_register (14),
2646 (long) read_register (15));
2651 sh2e_show_regs (void)
2653 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2654 paddr (read_register (PC_REGNUM)),
2655 (long) read_register (SR_REGNUM),
2656 (long) read_register (PR_REGNUM),
2657 (long) read_register (MACH_REGNUM),
2658 (long) read_register (MACL_REGNUM));
2660 printf_filtered ("GBR=%08lx VBR=%08lx",
2661 (long) read_register (GBR_REGNUM),
2662 (long) read_register (VBR_REGNUM));
2663 printf_filtered (" FPUL=%08lx FPSCR=%08lx",
2664 (long) read_register (gdbarch_tdep (current_gdbarch)->FPUL_REGNUM),
2665 (long) read_register (gdbarch_tdep (current_gdbarch)->FPSCR_REGNUM));
2667 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2668 (long) read_register (0),
2669 (long) read_register (1),
2670 (long) read_register (2),
2671 (long) read_register (3),
2672 (long) read_register (4),
2673 (long) read_register (5),
2674 (long) read_register (6),
2675 (long) read_register (7));
2676 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2677 (long) read_register (8),
2678 (long) read_register (9),
2679 (long) read_register (10),
2680 (long) read_register (11),
2681 (long) read_register (12),
2682 (long) read_register (13),
2683 (long) read_register (14),
2684 (long) read_register (15));
2686 printf_filtered (("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
2687 (long) read_register (FP0_REGNUM + 0),
2688 (long) read_register (FP0_REGNUM + 1),
2689 (long) read_register (FP0_REGNUM + 2),
2690 (long) read_register (FP0_REGNUM + 3),
2691 (long) read_register (FP0_REGNUM + 4),
2692 (long) read_register (FP0_REGNUM + 5),
2693 (long) read_register (FP0_REGNUM + 6),
2694 (long) read_register (FP0_REGNUM + 7));
2695 printf_filtered (("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
2696 (long) read_register (FP0_REGNUM + 8),
2697 (long) read_register (FP0_REGNUM + 9),
2698 (long) read_register (FP0_REGNUM + 10),
2699 (long) read_register (FP0_REGNUM + 11),
2700 (long) read_register (FP0_REGNUM + 12),
2701 (long) read_register (FP0_REGNUM + 13),
2702 (long) read_register (FP0_REGNUM + 14),
2703 (long) read_register (FP0_REGNUM + 15));
2707 sh3e_show_regs (void)
2709 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2711 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2712 paddr (read_register (PC_REGNUM)),
2713 (long) read_register (tdep->SR_REGNUM),
2714 (long) read_register (tdep->PR_REGNUM),
2715 (long) read_register (MACH_REGNUM),
2716 (long) read_register (MACL_REGNUM));
2718 printf_filtered ("GBR=%08lx VBR=%08lx",
2719 (long) read_register (GBR_REGNUM),
2720 (long) read_register (VBR_REGNUM));
2721 printf_filtered (" SSR=%08lx SPC=%08lx",
2722 (long) read_register (tdep->SSR_REGNUM),
2723 (long) read_register (tdep->SPC_REGNUM));
2724 printf_filtered (" FPUL=%08lx FPSCR=%08lx",
2725 (long) read_register (tdep->FPUL_REGNUM),
2726 (long) read_register (tdep->FPSCR_REGNUM));
2728 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2729 (long) read_register (0),
2730 (long) read_register (1),
2731 (long) read_register (2),
2732 (long) read_register (3),
2733 (long) read_register (4),
2734 (long) read_register (5),
2735 (long) read_register (6),
2736 (long) read_register (7));
2737 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2738 (long) read_register (8),
2739 (long) read_register (9),
2740 (long) read_register (10),
2741 (long) read_register (11),
2742 (long) read_register (12),
2743 (long) read_register (13),
2744 (long) read_register (14),
2745 (long) read_register (15));
2747 printf_filtered (("FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
2748 (long) read_register (FP0_REGNUM + 0),
2749 (long) read_register (FP0_REGNUM + 1),
2750 (long) read_register (FP0_REGNUM + 2),
2751 (long) read_register (FP0_REGNUM + 3),
2752 (long) read_register (FP0_REGNUM + 4),
2753 (long) read_register (FP0_REGNUM + 5),
2754 (long) read_register (FP0_REGNUM + 6),
2755 (long) read_register (FP0_REGNUM + 7));
2756 printf_filtered (("FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
2757 (long) read_register (FP0_REGNUM + 8),
2758 (long) read_register (FP0_REGNUM + 9),
2759 (long) read_register (FP0_REGNUM + 10),
2760 (long) read_register (FP0_REGNUM + 11),
2761 (long) read_register (FP0_REGNUM + 12),
2762 (long) read_register (FP0_REGNUM + 13),
2763 (long) read_register (FP0_REGNUM + 14),
2764 (long) read_register (FP0_REGNUM + 15));
2768 sh3_dsp_show_regs (void)
2770 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2772 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2773 paddr (read_register (PC_REGNUM)),
2774 (long) read_register (tdep->SR_REGNUM),
2775 (long) read_register (tdep->PR_REGNUM),
2776 (long) read_register (MACH_REGNUM),
2777 (long) read_register (MACL_REGNUM));
2779 printf_filtered ("GBR=%08lx VBR=%08lx",
2780 (long) read_register (GBR_REGNUM),
2781 (long) read_register (VBR_REGNUM));
2783 printf_filtered (" SSR=%08lx SPC=%08lx",
2784 (long) read_register (tdep->SSR_REGNUM),
2785 (long) read_register (tdep->SPC_REGNUM));
2787 printf_filtered (" DSR=%08lx",
2788 (long) read_register (tdep->DSR_REGNUM));
2790 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2791 (long) read_register (0),
2792 (long) read_register (1),
2793 (long) read_register (2),
2794 (long) read_register (3),
2795 (long) read_register (4),
2796 (long) read_register (5),
2797 (long) read_register (6),
2798 (long) read_register (7));
2799 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2800 (long) read_register (8),
2801 (long) read_register (9),
2802 (long) read_register (10),
2803 (long) read_register (11),
2804 (long) read_register (12),
2805 (long) read_register (13),
2806 (long) read_register (14),
2807 (long) read_register (15));
2809 printf_filtered ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
2810 (long) read_register (tdep->A0G_REGNUM) & 0xff,
2811 (long) read_register (tdep->A0_REGNUM),
2812 (long) read_register (tdep->M0_REGNUM),
2813 (long) read_register (tdep->X0_REGNUM),
2814 (long) read_register (tdep->Y0_REGNUM),
2815 (long) read_register (tdep->RS_REGNUM),
2816 (long) read_register (tdep->MOD_REGNUM));
2817 printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
2818 (long) read_register (tdep->A1G_REGNUM) & 0xff,
2819 (long) read_register (tdep->A1_REGNUM),
2820 (long) read_register (tdep->M1_REGNUM),
2821 (long) read_register (tdep->X1_REGNUM),
2822 (long) read_register (tdep->Y1_REGNUM),
2823 (long) read_register (tdep->RE_REGNUM));
2827 sh4_show_regs (void)
2829 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2831 int pr = read_register (tdep->FPSCR_REGNUM) & 0x80000;
2832 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2833 paddr (read_register (PC_REGNUM)),
2834 (long) read_register (tdep->SR_REGNUM),
2835 (long) read_register (tdep->PR_REGNUM),
2836 (long) read_register (MACH_REGNUM),
2837 (long) read_register (MACL_REGNUM));
2839 printf_filtered ("GBR=%08lx VBR=%08lx",
2840 (long) read_register (GBR_REGNUM),
2841 (long) read_register (VBR_REGNUM));
2842 printf_filtered (" SSR=%08lx SPC=%08lx",
2843 (long) read_register (tdep->SSR_REGNUM),
2844 (long) read_register (tdep->SPC_REGNUM));
2845 printf_filtered (" FPUL=%08lx FPSCR=%08lx",
2846 (long) read_register (tdep->FPUL_REGNUM),
2847 (long) read_register (tdep->FPSCR_REGNUM));
2849 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2850 (long) read_register (0),
2851 (long) read_register (1),
2852 (long) read_register (2),
2853 (long) read_register (3),
2854 (long) read_register (4),
2855 (long) read_register (5),
2856 (long) read_register (6),
2857 (long) read_register (7));
2858 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2859 (long) read_register (8),
2860 (long) read_register (9),
2861 (long) read_register (10),
2862 (long) read_register (11),
2863 (long) read_register (12),
2864 (long) read_register (13),
2865 (long) read_register (14),
2866 (long) read_register (15));
2868 printf_filtered ((pr
2869 ? "DR0-DR6 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
2870 : "FP0-FP7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
2871 (long) read_register (FP0_REGNUM + 0),
2872 (long) read_register (FP0_REGNUM + 1),
2873 (long) read_register (FP0_REGNUM + 2),
2874 (long) read_register (FP0_REGNUM + 3),
2875 (long) read_register (FP0_REGNUM + 4),
2876 (long) read_register (FP0_REGNUM + 5),
2877 (long) read_register (FP0_REGNUM + 6),
2878 (long) read_register (FP0_REGNUM + 7));
2879 printf_filtered ((pr
2880 ? "DR8-DR14 %08lx%08lx %08lx%08lx %08lx%08lx %08lx%08lx\n"
2881 : "FP8-FP15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"),
2882 (long) read_register (FP0_REGNUM + 8),
2883 (long) read_register (FP0_REGNUM + 9),
2884 (long) read_register (FP0_REGNUM + 10),
2885 (long) read_register (FP0_REGNUM + 11),
2886 (long) read_register (FP0_REGNUM + 12),
2887 (long) read_register (FP0_REGNUM + 13),
2888 (long) read_register (FP0_REGNUM + 14),
2889 (long) read_register (FP0_REGNUM + 15));
2893 sh_dsp_show_regs (void)
2895 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2897 printf_filtered ("PC=%s SR=%08lx PR=%08lx MACH=%08lx MACHL=%08lx\n",
2898 paddr (read_register (PC_REGNUM)),
2899 (long) read_register (tdep->SR_REGNUM),
2900 (long) read_register (tdep->PR_REGNUM),
2901 (long) read_register (MACH_REGNUM),
2902 (long) read_register (MACL_REGNUM));
2904 printf_filtered ("GBR=%08lx VBR=%08lx",
2905 (long) read_register (GBR_REGNUM),
2906 (long) read_register (VBR_REGNUM));
2908 printf_filtered (" DSR=%08lx",
2909 (long) read_register (tdep->DSR_REGNUM));
2911 printf_filtered ("\nR0-R7 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2912 (long) read_register (0),
2913 (long) read_register (1),
2914 (long) read_register (2),
2915 (long) read_register (3),
2916 (long) read_register (4),
2917 (long) read_register (5),
2918 (long) read_register (6),
2919 (long) read_register (7));
2920 printf_filtered ("R8-R15 %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2921 (long) read_register (8),
2922 (long) read_register (9),
2923 (long) read_register (10),
2924 (long) read_register (11),
2925 (long) read_register (12),
2926 (long) read_register (13),
2927 (long) read_register (14),
2928 (long) read_register (15));
2930 printf_filtered ("A0G=%02lx A0=%08lx M0=%08lx X0=%08lx Y0=%08lx RS=%08lx MOD=%08lx\n",
2931 (long) read_register (tdep->A0G_REGNUM) & 0xff,
2932 (long) read_register (tdep->A0_REGNUM),
2933 (long) read_register (tdep->M0_REGNUM),
2934 (long) read_register (tdep->X0_REGNUM),
2935 (long) read_register (tdep->Y0_REGNUM),
2936 (long) read_register (tdep->RS_REGNUM),
2937 (long) read_register (tdep->MOD_REGNUM));
2938 printf_filtered ("A1G=%02lx A1=%08lx M1=%08lx X1=%08lx Y1=%08lx RE=%08lx\n",
2939 (long) read_register (tdep->A1G_REGNUM) & 0xff,
2940 (long) read_register (tdep->A1_REGNUM),
2941 (long) read_register (tdep->M1_REGNUM),
2942 (long) read_register (tdep->X1_REGNUM),
2943 (long) read_register (tdep->Y1_REGNUM),
2944 (long) read_register (tdep->RE_REGNUM));
2948 sh64_show_media_regs (void)
2951 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2953 printf_filtered ("PC=%s SR=%016llx \n",
2954 paddr (read_register (PC_REGNUM)),
2955 (long long) read_register (tdep->SR_REGNUM));
2957 printf_filtered ("SSR=%016llx SPC=%016llx \n",
2958 (long long) read_register (tdep->SSR_REGNUM),
2959 (long long) read_register (tdep->SPC_REGNUM));
2960 printf_filtered ("FPSCR=%016lx\n ",
2961 (long) read_register (tdep->FPSCR_REGNUM));
2963 for (i = 0; i < 64; i = i + 4)
2964 printf_filtered ("\nR%d-R%d %016llx %016llx %016llx %016llx\n",
2966 (long long) read_register (i + 0),
2967 (long long) read_register (i + 1),
2968 (long long) read_register (i + 2),
2969 (long long) read_register (i + 3));
2971 printf_filtered ("\n");
2973 for (i = 0; i < 64; i = i + 8)
2974 printf_filtered ("FR%d-FR%d %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
2976 (long) read_register (FP0_REGNUM + i + 0),
2977 (long) read_register (FP0_REGNUM + i + 1),
2978 (long) read_register (FP0_REGNUM + i + 2),
2979 (long) read_register (FP0_REGNUM + i + 3),
2980 (long) read_register (FP0_REGNUM + i + 4),
2981 (long) read_register (FP0_REGNUM + i + 5),
2982 (long) read_register (FP0_REGNUM + i + 6),
2983 (long) read_register (FP0_REGNUM + i + 7));
2987 sh64_show_compact_regs (void)
2990 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2992 printf_filtered ("PC=%s \n",
2993 paddr (read_register (tdep->PC_C_REGNUM)));
2995 printf_filtered ("GBR=%08lx MACH=%08lx MACL=%08lx PR=%08lx T=%08lx\n",
2996 (long) read_register (tdep->GBR_C_REGNUM),
2997 (long) read_register (tdep->MACH_C_REGNUM),
2998 (long) read_register (tdep->MACL_C_REGNUM),
2999 (long) read_register (tdep->PR_C_REGNUM),
3000 (long) read_register (tdep->T_C_REGNUM));
3001 printf_filtered ("FPSCR=%08lx FPUL=%08lx\n",
3002 (long) read_register (tdep->FPSCR_REGNUM),
3003 (long) read_register (tdep->FPUL_REGNUM));
3005 for (i = 0; i < 16; i = i + 4)
3006 printf_filtered ("\nR%d-R%d %08lx %08lx %08lx %08lx\n",
3008 (long) read_register (i + 0),
3009 (long) read_register (i + 1),
3010 (long) read_register (i + 2),
3011 (long) read_register (i + 3));
3013 printf_filtered ("\n");
3015 for (i = 0; i < 16; i = i + 8)
3016 printf_filtered ("FR%d-FR%d %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
3018 (long) read_register (FP0_REGNUM + i + 0),
3019 (long) read_register (FP0_REGNUM + i + 1),
3020 (long) read_register (FP0_REGNUM + i + 2),
3021 (long) read_register (FP0_REGNUM + i + 3),
3022 (long) read_register (FP0_REGNUM + i + 4),
3023 (long) read_register (FP0_REGNUM + i + 5),
3024 (long) read_register (FP0_REGNUM + i + 6),
3025 (long) read_register (FP0_REGNUM + i + 7));
3028 /*FIXME!!! This only shows the registers for shmedia, excluding the
3029 pseudo registers. */
3031 sh64_show_regs (void)
3033 if (pc_is_isa32 (get_frame_pc (deprecated_selected_frame)))
3034 sh64_show_media_regs ();
3036 sh64_show_compact_regs ();
3040 sh_show_regs_command (char *args, int from_tty)
3048 SH MEDIA MODE (ISA 32)
3049 general registers (64-bit) 0-63
3050 0 r0, r1, r2, r3, r4, r5, r6, r7,
3051 64 r8, r9, r10, r11, r12, r13, r14, r15,
3052 128 r16, r17, r18, r19, r20, r21, r22, r23,
3053 192 r24, r25, r26, r27, r28, r29, r30, r31,
3054 256 r32, r33, r34, r35, r36, r37, r38, r39,
3055 320 r40, r41, r42, r43, r44, r45, r46, r47,
3056 384 r48, r49, r50, r51, r52, r53, r54, r55,
3057 448 r56, r57, r58, r59, r60, r61, r62, r63,
3062 status reg., saved status reg., saved pc reg. (64-bit) 65-67
3065 target registers (64-bit) 68-75
3066 544 tr0, tr1, tr2, tr3, tr4, tr5, tr6, tr7,
3068 floating point state control register (32-bit) 76
3071 single precision floating point registers (32-bit) 77-140
3072 612 fr0, fr1, fr2, fr3, fr4, fr5, fr6, fr7,
3073 644 fr8, fr9, fr10, fr11, fr12, fr13, fr14, fr15,
3074 676 fr16, fr17, fr18, fr19, fr20, fr21, fr22, fr23,
3075 708 fr24, fr25, fr26, fr27, fr28, fr29, fr30, fr31,
3076 740 fr32, fr33, fr34, fr35, fr36, fr37, fr38, fr39,
3077 772 fr40, fr41, fr42, fr43, fr44, fr45, fr46, fr47,
3078 804 fr48, fr49, fr50, fr51, fr52, fr53, fr54, fr55,
3079 836 fr56, fr57, fr58, fr59, fr60, fr61, fr62, fr63,
3081 TOTAL SPACE FOR REGISTERS: 868 bytes
3083 From here on they are all pseudo registers: no memory allocated.
3084 REGISTER_BYTE returns the register byte for the base register.
3086 double precision registers (pseudo) 141-172
3087 dr0, dr2, dr4, dr6, dr8, dr10, dr12, dr14,
3088 dr16, dr18, dr20, dr22, dr24, dr26, dr28, dr30,
3089 dr32, dr34, dr36, dr38, dr40, dr42, dr44, dr46,
3090 dr48, dr50, dr52, dr54, dr56, dr58, dr60, dr62,
3092 floating point pairs (pseudo) 173-204
3093 fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14,
3094 fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30,
3095 fp32, fp34, fp36, fp38, fp40, fp42, fp44, fp46,
3096 fp48, fp50, fp52, fp54, fp56, fp58, fp60, fp62,
3098 floating point vectors (4 floating point regs) (pseudo) 205-220
3099 fv0, fv4, fv8, fv12, fv16, fv20, fv24, fv28,
3100 fv32, fv36, fv40, fv44, fv48, fv52, fv56, fv60,
3102 SH COMPACT MODE (ISA 16) (all pseudo) 221-272
3103 r0_c, r1_c, r2_c, r3_c, r4_c, r5_c, r6_c, r7_c,
3104 r8_c, r9_c, r10_c, r11_c, r12_c, r13_c, r14_c, r15_c,
3106 gbr_c, mach_c, macl_c, pr_c, t_c,
3108 fr0_c, fr1_c, fr2_c, fr3_c, fr4_c, fr5_c, fr6_c, fr7_c,
3109 fr8_c, fr9_c, fr10_c, fr11_c, fr12_c, fr13_c, fr14_c, fr15_c
3110 dr0_c, dr2_c, dr4_c, dr6_c, dr8_c, dr10_c, dr12_c, dr14_c
3111 fv0_c, fv4_c, fv8_c, fv12_c
3115 sh_sh64_register_byte (int reg_nr)
3117 int base_regnum = -1;
3118 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3120 /* If it is a pseudo register, get the number of the first floating
3121 point register that is part of it. */
3122 if (reg_nr >= tdep->DR0_REGNUM
3123 && reg_nr <= tdep->DR_LAST_REGNUM)
3124 base_regnum = dr_reg_base_num (reg_nr);
3126 else if (reg_nr >= tdep->FPP0_REGNUM
3127 && reg_nr <= tdep->FPP_LAST_REGNUM)
3128 base_regnum = fpp_reg_base_num (reg_nr);
3130 else if (reg_nr >= tdep->FV0_REGNUM
3131 && reg_nr <= tdep->FV_LAST_REGNUM)
3132 base_regnum = fv_reg_base_num (reg_nr);
3134 /* sh compact pseudo register. FPSCR is a pathological case, need to
3135 treat it as special. */
3136 else if ((reg_nr >= tdep->R0_C_REGNUM
3137 && reg_nr <= tdep->FV_LAST_C_REGNUM)
3138 && reg_nr != tdep->FPSCR_C_REGNUM)
3139 base_regnum = sh64_compact_reg_base_num (reg_nr);
3141 /* Now return the offset in bytes within the register cache. */
3142 /* sh media pseudo register, i.e. any of DR, FFP, FV registers. */
3143 if (reg_nr >= tdep->DR0_REGNUM
3144 && reg_nr <= tdep->FV_LAST_REGNUM)
3145 return (base_regnum - FP0_REGNUM + 1) * 4
3146 + (tdep->TR7_REGNUM + 1) * 8;
3148 /* sh compact pseudo register: general register */
3149 if ((reg_nr >= tdep->R0_C_REGNUM
3150 && reg_nr <= tdep->R_LAST_C_REGNUM))
3151 return (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3152 ? base_regnum * 8 + 4
3155 /* sh compact pseudo register: */
3156 if (reg_nr == tdep->PC_C_REGNUM
3157 || reg_nr == tdep->GBR_C_REGNUM
3158 || reg_nr == tdep->MACL_C_REGNUM
3159 || reg_nr == tdep->PR_C_REGNUM)
3160 return (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3161 ? base_regnum * 8 + 4
3164 if (reg_nr == tdep->MACH_C_REGNUM)
3165 return base_regnum * 8;
3167 if (reg_nr == tdep->T_C_REGNUM)
3168 return base_regnum * 8; /* FIXME??? how do we get bit 0? Do we have to? */
3170 /* sh compact pseudo register: floating point register */
3171 else if (reg_nr >=tdep->FP0_C_REGNUM
3172 && reg_nr <= tdep->FV_LAST_C_REGNUM)
3173 return (base_regnum - FP0_REGNUM) * 4
3174 + (tdep->TR7_REGNUM + 1) * 8 + 4;
3176 else if (reg_nr == tdep->FPSCR_C_REGNUM)
3177 /* This is complicated, for now return the beginning of the
3178 architectural FPSCR register. */
3179 return (tdep->TR7_REGNUM + 1) * 8;
3181 else if (reg_nr == tdep->FPUL_C_REGNUM)
3182 return ((base_regnum - FP0_REGNUM) * 4 +
3183 (tdep->TR7_REGNUM + 1) * 8 + 4);
3185 /* It is not a pseudo register. */
3186 /* It is a 64 bit register. */
3187 else if (reg_nr <= tdep->TR7_REGNUM)
3190 /* It is a 32 bit register. */
3192 if (reg_nr == tdep->FPSCR_REGNUM)
3193 return (tdep->FPSCR_REGNUM * 8);
3195 /* It is floating point 32-bit register */
3197 return ((tdep->TR7_REGNUM + 1) * 8
3198 + (reg_nr - FP0_REGNUM + 1) * 4);
3202 sh_sh64_register_raw_size (int reg_nr)
3204 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3206 if ((reg_nr >= tdep->DR0_REGNUM
3207 && reg_nr <= tdep->DR_LAST_REGNUM)
3208 || (reg_nr >= tdep->FPP0_REGNUM
3209 && reg_nr <= tdep->FPP_LAST_REGNUM)
3210 || (reg_nr >= tdep->DR0_C_REGNUM
3211 && reg_nr <= tdep->DR_LAST_C_REGNUM)
3212 || (reg_nr <= tdep->TR7_REGNUM))
3215 else if ((reg_nr >= tdep->FV0_REGNUM
3216 && reg_nr <= tdep->FV_LAST_REGNUM)
3217 || (reg_nr >= tdep->FV0_C_REGNUM
3218 && reg_nr <= tdep->FV_LAST_C_REGNUM))
3221 else /* this covers also the 32-bit SH compact registers. */
3227 sh_sh64_register_virtual_size (int reg_nr)
3229 if (reg_nr >= FP0_REGNUM
3230 && reg_nr <= gdbarch_tdep (current_gdbarch)->FP_LAST_REGNUM)
3236 /* Return the GDB type object for the "standard" data type
3237 of data in register N. */
3238 static struct type *
3239 sh_sh3e_register_type (struct gdbarch *gdbarch, int reg_nr)
3241 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3243 if ((reg_nr >= FP0_REGNUM
3244 && (reg_nr <= tdep->FP_LAST_REGNUM))
3245 || (reg_nr == tdep->FPUL_REGNUM))
3246 return builtin_type_float;
3248 return builtin_type_int;
3251 static struct type *
3252 sh_sh4_build_float_register_type (int high)
3256 temp = create_range_type (NULL, builtin_type_int, 0, high);
3257 return create_array_type (NULL, builtin_type_float, temp);
3260 static struct type *
3261 sh_sh4_register_type (struct gdbarch *gdbarch, int reg_nr)
3263 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3265 if ((reg_nr >= FP0_REGNUM
3266 && (reg_nr <= tdep->FP_LAST_REGNUM))
3267 || (reg_nr == tdep->FPUL_REGNUM))
3268 return builtin_type_float;
3269 else if (reg_nr >= tdep->DR0_REGNUM
3270 && reg_nr <= tdep->DR_LAST_REGNUM)
3271 return builtin_type_double;
3272 else if (reg_nr >= tdep->FV0_REGNUM
3273 && reg_nr <= tdep->FV_LAST_REGNUM)
3274 return sh_sh4_build_float_register_type (3);
3276 return builtin_type_int;
3279 static struct type *
3280 sh_sh64_register_virtual_type (int reg_nr)
3282 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3284 if ((reg_nr >= FP0_REGNUM
3285 && reg_nr <= tdep->FP_LAST_REGNUM)
3286 || (reg_nr >= tdep->FP0_C_REGNUM
3287 && reg_nr <= tdep->FP_LAST_C_REGNUM))
3288 return builtin_type_float;
3289 else if ((reg_nr >= tdep->DR0_REGNUM
3290 && reg_nr <= tdep->DR_LAST_REGNUM)
3291 || (reg_nr >= tdep->DR0_C_REGNUM
3292 && reg_nr <= tdep->DR_LAST_C_REGNUM))
3293 return builtin_type_double;
3294 else if (reg_nr >= tdep->FPP0_REGNUM
3295 && reg_nr <= tdep->FPP_LAST_REGNUM)
3296 return sh_sh4_build_float_register_type (1);
3297 else if ((reg_nr >= tdep->FV0_REGNUM
3298 && reg_nr <= tdep->FV_LAST_REGNUM)
3299 ||(reg_nr >= tdep->FV0_C_REGNUM
3300 && reg_nr <= tdep->FV_LAST_C_REGNUM))
3301 return sh_sh4_build_float_register_type (3);
3302 else if (reg_nr == tdep->FPSCR_REGNUM)
3303 return builtin_type_int;
3304 else if (reg_nr >= tdep->R0_C_REGNUM
3305 && reg_nr < tdep->FP0_C_REGNUM)
3306 return builtin_type_int;
3308 return builtin_type_long_long;
3311 static struct type *
3312 sh_default_register_type (struct gdbarch *gdbarch, int reg_nr)
3314 return builtin_type_int;
3317 /* On the sh4, the DRi pseudo registers are problematic if the target
3318 is little endian. When the user writes one of those registers, for
3319 instance with 'ser var $dr0=1', we want the double to be stored
3321 fr0 = 0x00 0x00 0x00 0x00 0x00 0xf0 0x3f
3322 fr1 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
3324 This corresponds to little endian byte order & big endian word
3325 order. However if we let gdb write the register w/o conversion, it
3326 will write fr0 and fr1 this way:
3327 fr0 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
3328 fr1 = 0x00 0x00 0x00 0x00 0x00 0xf0 0x3f
3329 because it will consider fr0 and fr1 as a single LE stretch of memory.
3331 To achieve what we want we must force gdb to store things in
3332 floatformat_ieee_double_littlebyte_bigword (which is defined in
3333 include/floatformat.h and libiberty/floatformat.c.
3335 In case the target is big endian, there is no problem, the
3336 raw bytes will look like:
3337 fr0 = 0x3f 0xf0 0x00 0x00 0x00 0x00 0x00
3338 fr1 = 0x00 0x00 0x00 0x00 0x00 0x00 0x00
3340 The other pseudo registers (the FVs) also don't pose a problem
3341 because they are stored as 4 individual FP elements. */
3344 sh_sh4_register_convert_to_virtual (int regnum, struct type *type,
3345 char *from, char *to)
3347 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3349 if (regnum >= tdep->DR0_REGNUM
3350 && regnum <= tdep->DR_LAST_REGNUM)
3353 floatformat_to_doublest (&floatformat_ieee_double_littlebyte_bigword, from, &val);
3354 store_typed_floating (to, type, val);
3357 error ("sh_register_convert_to_virtual called with non DR register number");
3361 sh_sh64_register_convert_to_virtual (int regnum, struct type *type,
3362 char *from, char *to)
3364 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3366 if (TARGET_BYTE_ORDER != BFD_ENDIAN_LITTLE)
3368 /* It is a no-op. */
3369 memcpy (to, from, REGISTER_RAW_SIZE (regnum));
3373 if ((regnum >= tdep->DR0_REGNUM
3374 && regnum <= tdep->DR_LAST_REGNUM)
3375 || (regnum >= tdep->DR0_C_REGNUM
3376 && regnum <= tdep->DR_LAST_C_REGNUM))
3379 floatformat_to_doublest (&floatformat_ieee_double_littlebyte_bigword, from, &val);
3380 deprecated_store_floating(to, TYPE_LENGTH(type), val);
3383 error("sh_register_convert_to_virtual called with non DR register number");
3387 sh_sh4_register_convert_to_raw (struct type *type, int regnum,
3388 const void *from, void *to)
3390 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3392 if (regnum >= tdep->DR0_REGNUM
3393 && regnum <= tdep->DR_LAST_REGNUM)
3395 DOUBLEST val = extract_typed_floating (from, type);
3396 floatformat_from_doublest (&floatformat_ieee_double_littlebyte_bigword, &val, to);
3399 error("sh_register_convert_to_raw called with non DR register number");
3403 sh_sh64_register_convert_to_raw (struct type *type, int regnum,
3404 const void *from, void *to)
3406 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3408 if (TARGET_BYTE_ORDER != BFD_ENDIAN_LITTLE)
3410 /* It is a no-op. */
3411 memcpy (to, from, REGISTER_RAW_SIZE (regnum));
3415 if ((regnum >= tdep->DR0_REGNUM
3416 && regnum <= tdep->DR_LAST_REGNUM)
3417 || (regnum >= tdep->DR0_C_REGNUM
3418 && regnum <= tdep->DR_LAST_C_REGNUM))
3420 DOUBLEST val = deprecated_extract_floating (from, TYPE_LENGTH(type));
3421 floatformat_from_doublest (&floatformat_ieee_double_littlebyte_bigword, &val, to);
3424 error("sh_register_convert_to_raw called with non DR register number");
3428 sh_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
3429 int reg_nr, void *buffer)
3431 int base_regnum, portion;
3432 char temp_buffer[MAX_REGISTER_SIZE];
3433 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3435 if (reg_nr >= tdep->DR0_REGNUM
3436 && reg_nr <= tdep->DR_LAST_REGNUM)
3438 base_regnum = dr_reg_base_num (reg_nr);
3440 /* Build the value in the provided buffer. */
3441 /* Read the real regs for which this one is an alias. */
3442 for (portion = 0; portion < 2; portion++)
3443 regcache_raw_read (regcache, base_regnum + portion,
3445 + register_size (gdbarch, base_regnum) * portion));
3446 /* We must pay attention to the endiannes. */
3447 sh_sh4_register_convert_to_virtual (reg_nr,
3448 gdbarch_register_type (gdbarch, reg_nr),
3449 temp_buffer, buffer);
3451 else if (reg_nr >= tdep->FV0_REGNUM
3452 && reg_nr <= tdep->FV_LAST_REGNUM)
3454 base_regnum = fv_reg_base_num (reg_nr);
3456 /* Read the real regs for which this one is an alias. */
3457 for (portion = 0; portion < 4; portion++)
3458 regcache_raw_read (regcache, base_regnum + portion,
3460 + register_size (gdbarch, base_regnum) * portion));
3465 sh64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
3466 int reg_nr, void *buffer)
3471 char temp_buffer[MAX_REGISTER_SIZE];
3472 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3474 if (reg_nr >= tdep->DR0_REGNUM
3475 && reg_nr <= tdep->DR_LAST_REGNUM)
3477 base_regnum = dr_reg_base_num (reg_nr);
3479 /* Build the value in the provided buffer. */
3480 /* DR regs are double precision registers obtained by
3481 concatenating 2 single precision floating point registers. */
3482 for (portion = 0; portion < 2; portion++)
3483 regcache_raw_read (regcache, base_regnum + portion,
3485 + REGISTER_RAW_SIZE (base_regnum) * portion));
3487 /* We must pay attention to the endiannes. */
3488 sh_sh64_register_convert_to_virtual (reg_nr, REGISTER_VIRTUAL_TYPE (reg_nr),
3489 temp_buffer, buffer);
3493 else if (reg_nr >= tdep->FPP0_REGNUM
3494 && reg_nr <= tdep->FPP_LAST_REGNUM)
3496 base_regnum = fpp_reg_base_num (reg_nr);
3498 /* Build the value in the provided buffer. */
3499 /* FPP regs are pairs of single precision registers obtained by
3500 concatenating 2 single precision floating point registers. */
3501 for (portion = 0; portion < 2; portion++)
3502 regcache_raw_read (regcache, base_regnum + portion,
3504 + REGISTER_RAW_SIZE (base_regnum) * portion));
3507 else if (reg_nr >= tdep->FV0_REGNUM
3508 && reg_nr <= tdep->FV_LAST_REGNUM)
3510 base_regnum = fv_reg_base_num (reg_nr);
3512 /* Build the value in the provided buffer. */
3513 /* FV regs are vectors of single precision registers obtained by
3514 concatenating 4 single precision floating point registers. */
3515 for (portion = 0; portion < 4; portion++)
3516 regcache_raw_read (regcache, base_regnum + portion,
3518 + REGISTER_RAW_SIZE (base_regnum) * portion));
3521 /* sh compact pseudo registers. 1-to-1 with a shmedia register */
3522 else if (reg_nr >= tdep->R0_C_REGNUM
3523 && reg_nr <= tdep->T_C_REGNUM)
3525 base_regnum = sh64_compact_reg_base_num (reg_nr);
3527 /* Build the value in the provided buffer. */
3528 regcache_raw_read (regcache, base_regnum, temp_buffer);
3529 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
3531 memcpy (buffer, temp_buffer + offset, 4); /* get LOWER 32 bits only????*/
3534 else if (reg_nr >= tdep->FP0_C_REGNUM
3535 && reg_nr <= tdep->FP_LAST_C_REGNUM)
3537 base_regnum = sh64_compact_reg_base_num (reg_nr);
3539 /* Build the value in the provided buffer. */
3540 /* Floating point registers map 1-1 to the media fp regs,
3541 they have the same size and endienness. */
3542 regcache_raw_read (regcache, base_regnum, buffer);
3545 else if (reg_nr >= tdep->DR0_C_REGNUM
3546 && reg_nr <= tdep->DR_LAST_C_REGNUM)
3548 base_regnum = sh64_compact_reg_base_num (reg_nr);
3550 /* DR_C regs are double precision registers obtained by
3551 concatenating 2 single precision floating point registers. */
3552 for (portion = 0; portion < 2; portion++)
3553 regcache_raw_read (regcache, base_regnum + portion,
3555 + REGISTER_RAW_SIZE (base_regnum) * portion));
3557 /* We must pay attention to the endiannes. */
3558 sh_sh64_register_convert_to_virtual (reg_nr, REGISTER_VIRTUAL_TYPE (reg_nr),
3559 temp_buffer, buffer);
3562 else if (reg_nr >= tdep->FV0_C_REGNUM
3563 && reg_nr <= tdep->FV_LAST_C_REGNUM)
3565 base_regnum = sh64_compact_reg_base_num (reg_nr);
3567 /* Build the value in the provided buffer. */
3568 /* FV_C regs are vectors of single precision registers obtained by
3569 concatenating 4 single precision floating point registers. */
3570 for (portion = 0; portion < 4; portion++)
3571 regcache_raw_read (regcache, base_regnum + portion,
3573 + REGISTER_RAW_SIZE (base_regnum) * portion));
3576 else if (reg_nr == tdep->FPSCR_C_REGNUM)
3578 int fpscr_base_regnum;
3580 unsigned int fpscr_value;
3581 unsigned int sr_value;
3582 unsigned int fpscr_c_value;
3583 unsigned int fpscr_c_part1_value;
3584 unsigned int fpscr_c_part2_value;
3586 fpscr_base_regnum = tdep->FPSCR_REGNUM;
3587 sr_base_regnum = tdep->SR_REGNUM;
3589 /* Build the value in the provided buffer. */
3590 /* FPSCR_C is a very weird register that contains sparse bits
3591 from the FPSCR and the SR architectural registers.
3598 2-17 Bit 2-18 of FPSCR
3599 18-20 Bits 12,13,14 of SR
3603 /* Get FPSCR into a local buffer */
3604 regcache_raw_read (regcache, fpscr_base_regnum, temp_buffer);
3605 /* Get value as an int. */
3606 fpscr_value = extract_unsigned_integer (temp_buffer, 4);
3607 /* Get SR into a local buffer */
3608 regcache_raw_read (regcache, sr_base_regnum, temp_buffer);
3609 /* Get value as an int. */
3610 sr_value = extract_unsigned_integer (temp_buffer, 4);
3611 /* Build the new value. */
3612 fpscr_c_part1_value = fpscr_value & 0x3fffd;
3613 fpscr_c_part2_value = (sr_value & 0x7000) << 6;
3614 fpscr_c_value = fpscr_c_part1_value | fpscr_c_part2_value;
3615 /* Store that in out buffer!!! */
3616 store_unsigned_integer (buffer, 4, fpscr_c_value);
3617 /* FIXME There is surely an endianness gotcha here. */
3620 else if (reg_nr == tdep->FPUL_C_REGNUM)
3622 base_regnum = sh64_compact_reg_base_num (reg_nr);
3624 /* FPUL_C register is floating point register 32,
3625 same size, same endianness. */
3626 regcache_raw_read (regcache, base_regnum, buffer);
3631 sh_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
3632 int reg_nr, const void *buffer)
3634 int base_regnum, portion;
3635 char temp_buffer[MAX_REGISTER_SIZE];
3636 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3638 if (reg_nr >= tdep->DR0_REGNUM
3639 && reg_nr <= tdep->DR_LAST_REGNUM)
3641 base_regnum = dr_reg_base_num (reg_nr);
3643 /* We must pay attention to the endiannes. */
3644 sh_sh4_register_convert_to_raw (gdbarch_register_type (gdbarch, reg_nr), reg_nr,
3645 buffer, temp_buffer);
3647 /* Write the real regs for which this one is an alias. */
3648 for (portion = 0; portion < 2; portion++)
3649 regcache_raw_write (regcache, base_regnum + portion,
3651 + register_size (gdbarch, base_regnum) * portion));
3653 else if (reg_nr >= tdep->FV0_REGNUM
3654 && reg_nr <= tdep->FV_LAST_REGNUM)
3656 base_regnum = fv_reg_base_num (reg_nr);
3658 /* Write the real regs for which this one is an alias. */
3659 for (portion = 0; portion < 4; portion++)
3660 regcache_raw_write (regcache, base_regnum + portion,
3662 + register_size (gdbarch, base_regnum) * portion));
3667 sh64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
3668 int reg_nr, const void *buffer)
3670 int base_regnum, portion;
3672 char temp_buffer[MAX_REGISTER_SIZE];
3673 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3675 if (reg_nr >= tdep->DR0_REGNUM
3676 && reg_nr <= tdep->DR_LAST_REGNUM)
3678 base_regnum = dr_reg_base_num (reg_nr);
3679 /* We must pay attention to the endiannes. */
3680 sh_sh64_register_convert_to_raw (REGISTER_VIRTUAL_TYPE (reg_nr), reg_nr,
3681 buffer, temp_buffer);
3684 /* Write the real regs for which this one is an alias. */
3685 for (portion = 0; portion < 2; portion++)
3686 regcache_raw_write (regcache, base_regnum + portion,
3688 + REGISTER_RAW_SIZE (base_regnum) * portion));
3691 else if (reg_nr >= tdep->FPP0_REGNUM
3692 && reg_nr <= tdep->FPP_LAST_REGNUM)
3694 base_regnum = fpp_reg_base_num (reg_nr);
3696 /* Write the real regs for which this one is an alias. */
3697 for (portion = 0; portion < 2; portion++)
3698 regcache_raw_write (regcache, base_regnum + portion,
3700 + REGISTER_RAW_SIZE (base_regnum) * portion));
3703 else if (reg_nr >= tdep->FV0_REGNUM
3704 && reg_nr <= tdep->FV_LAST_REGNUM)
3706 base_regnum = fv_reg_base_num (reg_nr);
3708 /* Write the real regs for which this one is an alias. */
3709 for (portion = 0; portion < 4; portion++)
3710 regcache_raw_write (regcache, base_regnum + portion,
3712 + REGISTER_RAW_SIZE (base_regnum) * portion));
3715 /* sh compact general pseudo registers. 1-to-1 with a shmedia
3716 register but only 4 bytes of it. */
3717 else if (reg_nr >= tdep->R0_C_REGNUM
3718 && reg_nr <= tdep->T_C_REGNUM)
3720 base_regnum = sh64_compact_reg_base_num (reg_nr);
3721 /* reg_nr is 32 bit here, and base_regnum is 64 bits. */
3722 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
3726 /* Let's read the value of the base register into a temporary
3727 buffer, so that overwriting the last four bytes with the new
3728 value of the pseudo will leave the upper 4 bytes unchanged. */
3729 regcache_raw_read (regcache, base_regnum, temp_buffer);
3730 /* Write as an 8 byte quantity */
3731 memcpy (temp_buffer + offset, buffer, 4);
3732 regcache_raw_write (regcache, base_regnum, temp_buffer);
3735 /* sh floating point compact pseudo registers. 1-to-1 with a shmedia
3736 registers. Both are 4 bytes. */
3737 else if (reg_nr >= tdep->FP0_C_REGNUM
3738 && reg_nr <= tdep->FP_LAST_C_REGNUM)
3740 base_regnum = sh64_compact_reg_base_num (reg_nr);
3741 regcache_raw_write (regcache, base_regnum, buffer);
3744 else if (reg_nr >= tdep->DR0_C_REGNUM
3745 && reg_nr <= tdep->DR_LAST_C_REGNUM)
3747 base_regnum = sh64_compact_reg_base_num (reg_nr);
3748 for (portion = 0; portion < 2; portion++)
3750 /* We must pay attention to the endiannes. */
3751 sh_sh64_register_convert_to_raw (REGISTER_VIRTUAL_TYPE (reg_nr), reg_nr,
3752 buffer, temp_buffer);
3754 regcache_raw_write (regcache, base_regnum + portion,
3756 + REGISTER_RAW_SIZE (base_regnum) * portion));
3760 else if (reg_nr >= tdep->FV0_C_REGNUM
3761 && reg_nr <= tdep->FV_LAST_C_REGNUM)
3763 base_regnum = sh64_compact_reg_base_num (reg_nr);
3765 for (portion = 0; portion < 4; portion++)
3767 regcache_raw_write (regcache, base_regnum + portion,
3769 + REGISTER_RAW_SIZE (base_regnum) * portion));
3773 else if (reg_nr == tdep->FPSCR_C_REGNUM)
3775 int fpscr_base_regnum;
3777 unsigned int fpscr_value;
3778 unsigned int sr_value;
3779 unsigned int old_fpscr_value;
3780 unsigned int old_sr_value;
3781 unsigned int fpscr_c_value;
3782 unsigned int fpscr_mask;
3783 unsigned int sr_mask;
3785 fpscr_base_regnum = tdep->FPSCR_REGNUM;
3786 sr_base_regnum = tdep->SR_REGNUM;
3788 /* FPSCR_C is a very weird register that contains sparse bits
3789 from the FPSCR and the SR architectural registers.
3796 2-17 Bit 2-18 of FPSCR
3797 18-20 Bits 12,13,14 of SR
3801 /* Get value as an int. */
3802 fpscr_c_value = extract_unsigned_integer (buffer, 4);
3804 /* Build the new values. */
3805 fpscr_mask = 0x0003fffd;
3806 sr_mask = 0x001c0000;
3808 fpscr_value = fpscr_c_value & fpscr_mask;
3809 sr_value = (fpscr_value & sr_mask) >> 6;
3811 regcache_raw_read (regcache, fpscr_base_regnum, temp_buffer);
3812 old_fpscr_value = extract_unsigned_integer (temp_buffer, 4);
3813 old_fpscr_value &= 0xfffc0002;
3814 fpscr_value |= old_fpscr_value;
3815 store_unsigned_integer (temp_buffer, 4, fpscr_value);
3816 regcache_raw_write (regcache, fpscr_base_regnum, temp_buffer);
3818 regcache_raw_read (regcache, sr_base_regnum, temp_buffer);
3819 old_sr_value = extract_unsigned_integer (temp_buffer, 4);
3820 old_sr_value &= 0xffff8fff;
3821 sr_value |= old_sr_value;
3822 store_unsigned_integer (temp_buffer, 4, sr_value);
3823 regcache_raw_write (regcache, sr_base_regnum, temp_buffer);
3826 else if (reg_nr == tdep->FPUL_C_REGNUM)
3828 base_regnum = sh64_compact_reg_base_num (reg_nr);
3829 regcache_raw_write (regcache, base_regnum, buffer);
3833 /* Floating point vector of 4 float registers. */
3835 do_fv_register_info (struct gdbarch *gdbarch, struct ui_file *file,
3838 int first_fp_reg_num = fv_reg_base_num (fv_regnum);
3839 fprintf_filtered (file, "fv%d\t0x%08x\t0x%08x\t0x%08x\t0x%08x\n",
3840 fv_regnum - gdbarch_tdep (gdbarch)->FV0_REGNUM,
3841 (int) read_register (first_fp_reg_num),
3842 (int) read_register (first_fp_reg_num + 1),
3843 (int) read_register (first_fp_reg_num + 2),
3844 (int) read_register (first_fp_reg_num + 3));
3847 /* Floating point vector of 4 float registers, compact mode. */
3849 do_fv_c_register_info (int fv_regnum)
3851 int first_fp_reg_num = sh64_compact_reg_base_num (fv_regnum);
3852 printf_filtered ("fv%d_c\t0x%08x\t0x%08x\t0x%08x\t0x%08x\n",
3853 fv_regnum - gdbarch_tdep (current_gdbarch)->FV0_C_REGNUM,
3854 (int) read_register (first_fp_reg_num),
3855 (int) read_register (first_fp_reg_num + 1),
3856 (int) read_register (first_fp_reg_num + 2),
3857 (int) read_register (first_fp_reg_num + 3));
3860 /* Pairs of single regs. The DR are instead double precision
3863 do_fpp_register_info (int fpp_regnum)
3865 int first_fp_reg_num = fpp_reg_base_num (fpp_regnum);
3867 printf_filtered ("fpp%d\t0x%08x\t0x%08x\n",
3868 fpp_regnum - gdbarch_tdep (current_gdbarch)->FPP0_REGNUM,
3869 (int) read_register (first_fp_reg_num),
3870 (int) read_register (first_fp_reg_num + 1));
3873 /* Double precision registers. */
3875 do_dr_register_info (struct gdbarch *gdbarch, struct ui_file *file,
3878 int first_fp_reg_num = dr_reg_base_num (dr_regnum);
3880 fprintf_filtered (file, "dr%d\t0x%08x%08x\n",
3881 dr_regnum - gdbarch_tdep (gdbarch)->DR0_REGNUM,
3882 (int) read_register (first_fp_reg_num),
3883 (int) read_register (first_fp_reg_num + 1));
3886 /* Double precision registers, compact mode. */
3888 do_dr_c_register_info (int dr_regnum)
3890 int first_fp_reg_num = sh64_compact_reg_base_num (dr_regnum);
3892 printf_filtered ("dr%d_c\t0x%08x%08x\n",
3893 dr_regnum - gdbarch_tdep (current_gdbarch)->DR0_C_REGNUM,
3894 (int) read_register (first_fp_reg_num),
3895 (int) read_register (first_fp_reg_num +1));
3898 /* General register in compact mode. */
3900 do_r_c_register_info (int r_c_regnum)
3902 int regnum = sh64_compact_reg_base_num (r_c_regnum);
3904 printf_filtered ("r%d_c\t0x%08x\n",
3905 r_c_regnum - gdbarch_tdep (current_gdbarch)->R0_C_REGNUM,
3906 /*FIXME!!!*/ (int) read_register (regnum));
3909 /* FIXME:!! THIS SHOULD TAKE CARE OF GETTING THE RIGHT PORTION OF THE
3910 shmedia REGISTERS. */
3911 /* Control registers, compact mode. */
3913 do_cr_c_register_info (int cr_c_regnum)
3915 switch (cr_c_regnum)
3917 case 237: printf_filtered ("pc_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3919 case 238: printf_filtered ("gbr_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3921 case 239: printf_filtered ("mach_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3923 case 240: printf_filtered ("macl_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3925 case 241: printf_filtered ("pr_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3927 case 242: printf_filtered ("t_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3929 case 243: printf_filtered ("fpscr_c\t0x%08x\n", (int) read_register (cr_c_regnum));
3931 case 244: printf_filtered ("fpul_c\t0x%08x\n", (int)read_register (cr_c_regnum));
3937 sh_print_pseudo_register (struct gdbarch *gdbarch, struct ui_file *file,
3940 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3942 if (regnum < NUM_REGS || regnum >= NUM_REGS + NUM_PSEUDO_REGS)
3943 internal_error (__FILE__, __LINE__,
3944 "Invalid pseudo register number %d\n", regnum);
3945 else if (regnum >= tdep->DR0_REGNUM
3946 && regnum <= tdep->DR_LAST_REGNUM)
3947 do_dr_register_info (gdbarch, file, regnum);
3948 else if (regnum >= tdep->FV0_REGNUM
3949 && regnum <= tdep->FV_LAST_REGNUM)
3950 do_fv_register_info (gdbarch, file, regnum);
3954 sh_do_fp_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum)
3955 { /* do values for FP (float) regs */
3957 double flt; /* double extracted from raw hex data */
3961 /* Allocate space for the float. */
3962 raw_buffer = (char *) alloca (register_size (gdbarch, FP0_REGNUM));
3964 /* Get the data in raw format. */
3965 if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
3966 error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
3968 /* Get the register as a number */
3969 flt = unpack_double (builtin_type_float, raw_buffer, &inv);
3971 /* Print the name and some spaces. */
3972 fputs_filtered (REGISTER_NAME (regnum), file);
3973 print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
3975 /* Print the value. */
3977 fprintf_filtered (file, "<invalid float>");
3979 fprintf_filtered (file, "%-10.9g", flt);
3981 /* Print the fp register as hex. */
3982 fprintf_filtered (file, "\t(raw 0x");
3983 for (j = 0; j < register_size (gdbarch, regnum); j++)
3985 register int idx = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? j
3986 : register_size (gdbarch, regnum) - 1 - j;
3987 fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[idx]);
3989 fprintf_filtered (file, ")");
3990 fprintf_filtered (file, "\n");
3994 sh64_do_pseudo_register (int regnum)
3996 /* All the sh64-compact mode registers are pseudo registers. */
3997 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3999 if (regnum < NUM_REGS
4000 || regnum >= NUM_REGS + NUM_PSEUDO_REGS_SH_MEDIA + NUM_PSEUDO_REGS_SH_COMPACT)
4001 internal_error (__FILE__, __LINE__,
4002 "Invalid pseudo register number %d\n", regnum);
4004 else if ((regnum >= tdep->DR0_REGNUM
4005 && regnum <= tdep->DR_LAST_REGNUM))
4006 do_dr_register_info (current_gdbarch, gdb_stdout, regnum);
4008 else if ((regnum >= tdep->DR0_C_REGNUM
4009 && regnum <= tdep->DR_LAST_C_REGNUM))
4010 do_dr_c_register_info (regnum);
4012 else if ((regnum >= tdep->FV0_REGNUM
4013 && regnum <= tdep->FV_LAST_REGNUM))
4014 do_fv_register_info (current_gdbarch, gdb_stdout, regnum);
4016 else if ((regnum >= tdep->FV0_C_REGNUM
4017 && regnum <= tdep->FV_LAST_C_REGNUM))
4018 do_fv_c_register_info (regnum);
4020 else if (regnum >= tdep->FPP0_REGNUM
4021 && regnum <= tdep->FPP_LAST_REGNUM)
4022 do_fpp_register_info (regnum);
4024 else if (regnum >= tdep->R0_C_REGNUM
4025 && regnum <= tdep->R_LAST_C_REGNUM)
4026 do_r_c_register_info (regnum); /* FIXME, this function will not print the right format */
4028 else if (regnum >= tdep->FP0_C_REGNUM
4029 && regnum <= tdep->FP_LAST_C_REGNUM)
4030 sh_do_fp_register (current_gdbarch, gdb_stdout, regnum); /* this should work also for pseudoregs */
4032 else if (regnum >= tdep->PC_C_REGNUM
4033 && regnum <= tdep->FPUL_C_REGNUM)
4034 do_cr_c_register_info (regnum);
4039 sh_do_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum)
4041 char raw_buffer[MAX_REGISTER_SIZE];
4043 fputs_filtered (REGISTER_NAME (regnum), file);
4044 print_spaces_filtered (15 - strlen (REGISTER_NAME (regnum)), file);
4046 /* Get the data in raw format. */
4047 if (!frame_register_read (get_selected_frame (), regnum, raw_buffer))
4048 fprintf_filtered (file, "*value not available*\n");
4050 val_print (gdbarch_register_type (gdbarch, regnum), raw_buffer, 0, 0,
4051 file, 'x', 1, 0, Val_pretty_default);
4052 fprintf_filtered (file, "\t");
4053 val_print (gdbarch_register_type (gdbarch, regnum), raw_buffer, 0, 0,
4054 file, 0, 1, 0, Val_pretty_default);
4055 fprintf_filtered (file, "\n");
4059 sh_print_register (struct gdbarch *gdbarch, struct ui_file *file, int regnum)
4061 if (regnum < 0 || regnum >= NUM_REGS + NUM_PSEUDO_REGS)
4062 internal_error (__FILE__, __LINE__,
4063 "Invalid register number %d\n", regnum);
4065 else if (regnum >= 0 && regnum < NUM_REGS)
4067 if (TYPE_CODE (gdbarch_register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
4068 sh_do_fp_register (gdbarch, file, regnum); /* FP regs */
4070 sh_do_register (gdbarch, file, regnum); /* All other regs */
4073 else if (regnum < NUM_REGS + NUM_PSEUDO_REGS)
4075 if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_sh5)
4076 sh64_do_pseudo_register (regnum);
4078 sh_print_pseudo_register (gdbarch, file, regnum);
4083 sh_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
4084 struct frame_info *frame, int regnum, int fpregs)
4086 if (regnum != -1) /* do one specified register */
4088 if (*(REGISTER_NAME (regnum)) == '\0')
4089 error ("Not a valid register for the current processor type");
4091 sh_print_register (gdbarch, file, regnum);
4094 /* do all (or most) registers */
4097 while (regnum < NUM_REGS)
4099 /* If the register name is empty, it is undefined for this
4100 processor, so don't display anything. */
4101 if (REGISTER_NAME (regnum) == NULL
4102 || *(REGISTER_NAME (regnum)) == '\0')
4108 if (TYPE_CODE (gdbarch_register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
4112 /* true for "INFO ALL-REGISTERS" command */
4113 sh_do_fp_register (gdbarch, file, regnum); /* FP regs */
4117 regnum += (gdbarch_tdep (gdbarch)->FP_LAST_REGNUM - FP0_REGNUM); /* skip FP regs */
4121 sh_do_register (gdbarch, file, regnum); /* All other regs */
4127 while (regnum < NUM_REGS + NUM_PSEUDO_REGS)
4129 if (gdbarch_bfd_arch_info (gdbarch)->mach == bfd_mach_sh5)
4130 sh64_do_pseudo_register (regnum);
4132 sh_print_pseudo_register (gdbarch, file, regnum);
4139 sh_compact_do_registers_info (int regnum, int fpregs)
4141 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
4142 if (regnum != -1) /* do one specified register */
4144 if (*(REGISTER_NAME (regnum)) == '\0')
4145 error ("Not a valid register for the current processor type");
4147 if (regnum >= 0 && regnum < tdep->R0_C_REGNUM)
4148 error ("Not a valid register for the current processor mode.");
4150 sh_print_register (current_gdbarch, gdb_stdout, regnum);
4153 /* do all compact registers */
4155 regnum = tdep->R0_C_REGNUM;
4156 while (regnum < NUM_REGS + NUM_PSEUDO_REGS)
4158 sh64_do_pseudo_register (regnum);
4165 sh64_do_registers_info (int regnum, int fpregs)
4167 if (pc_is_isa32 (get_frame_pc (deprecated_selected_frame)))
4168 sh_print_registers_info (current_gdbarch, gdb_stdout,
4169 deprecated_selected_frame, regnum, fpregs);
4171 sh_compact_do_registers_info (regnum, fpregs);
4174 #ifdef SVR4_SHARED_LIBS
4176 /* Fetch (and possibly build) an appropriate link_map_offsets structure
4177 for native i386 linux targets using the struct offsets defined in
4178 link.h (but without actual reference to that file).
4180 This makes it possible to access i386-linux shared libraries from
4181 a gdb that was not built on an i386-linux host (for cross debugging).
4184 struct link_map_offsets *
4185 sh_linux_svr4_fetch_link_map_offsets (void)
4187 static struct link_map_offsets lmo;
4188 static struct link_map_offsets *lmp = 0;
4194 lmo.r_debug_size = 8; /* 20 not actual size but all we need */
4196 lmo.r_map_offset = 4;
4199 lmo.link_map_size = 20; /* 552 not actual size but all we need */
4201 lmo.l_addr_offset = 0;
4202 lmo.l_addr_size = 4;
4204 lmo.l_name_offset = 4;
4205 lmo.l_name_size = 4;
4207 lmo.l_next_offset = 12;
4208 lmo.l_next_size = 4;
4210 lmo.l_prev_offset = 16;
4211 lmo.l_prev_size = 4;
4216 #endif /* SVR4_SHARED_LIBS */
4221 DSP_DSR_REGNUM = 24,
4233 DSP_MOD_REGNUM = 40,
4238 DSP_R0_BANK_REGNUM = 51,
4239 DSP_R7_BANK_REGNUM = DSP_R0_BANK_REGNUM + 7
4243 sh_dsp_register_sim_regno (int nr)
4245 if (legacy_register_sim_regno (nr) < 0)
4246 return legacy_register_sim_regno (nr);
4247 if (nr >= DSP_DSR_REGNUM && nr <= DSP_Y1_REGNUM)
4248 return nr - DSP_DSR_REGNUM + SIM_SH_DSR_REGNUM;
4249 if (nr == DSP_MOD_REGNUM)
4250 return SIM_SH_MOD_REGNUM;
4251 if (nr == DSP_RS_REGNUM)
4252 return SIM_SH_RS_REGNUM;
4253 if (nr == DSP_RE_REGNUM)
4254 return SIM_SH_RE_REGNUM;
4255 if (nr >= DSP_R0_BANK_REGNUM && nr <= DSP_R7_BANK_REGNUM)
4256 return nr - DSP_R0_BANK_REGNUM + SIM_SH_R0_BANK_REGNUM;
4260 static gdbarch_init_ftype sh_gdbarch_init;
4262 static struct gdbarch *
4263 sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
4265 static LONGEST sh64_call_dummy_words[] = {0};
4266 struct gdbarch *gdbarch;
4267 struct gdbarch_tdep *tdep;
4269 /* If there is already a candidate, use it. */
4270 arches = gdbarch_list_lookup_by_info (arches, &info);
4272 return arches->gdbarch;
4274 /* None found, create a new architecture from the information
4276 tdep = XMALLOC (struct gdbarch_tdep);
4277 gdbarch = gdbarch_alloc (&info, tdep);
4279 /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
4280 ready to unwind the PC first (see frame.c:get_prev_frame()). */
4281 set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
4283 /* Initialize the register numbers that are not common to all the
4284 variants to -1, if necessary thse will be overwritten in the case
4286 tdep->FPUL_REGNUM = -1;
4287 tdep->FPSCR_REGNUM = -1;
4288 tdep->PR_REGNUM = 17;
4289 tdep->SR_REGNUM = 22;
4290 tdep->DSR_REGNUM = -1;
4291 tdep->FP_LAST_REGNUM = -1;
4292 tdep->A0G_REGNUM = -1;
4293 tdep->A0_REGNUM = -1;
4294 tdep->A1G_REGNUM = -1;
4295 tdep->A1_REGNUM = -1;
4296 tdep->M0_REGNUM = -1;
4297 tdep->M1_REGNUM = -1;
4298 tdep->X0_REGNUM = -1;
4299 tdep->X1_REGNUM = -1;
4300 tdep->Y0_REGNUM = -1;
4301 tdep->Y1_REGNUM = -1;
4302 tdep->MOD_REGNUM = -1;
4303 tdep->RS_REGNUM = -1;
4304 tdep->RE_REGNUM = -1;
4305 tdep->SSR_REGNUM = -1;
4306 tdep->SPC_REGNUM = -1;
4307 tdep->DR0_REGNUM = -1;
4308 tdep->DR_LAST_REGNUM = -1;
4309 tdep->FV0_REGNUM = -1;
4310 tdep->FV_LAST_REGNUM = -1;
4311 tdep->ARG0_REGNUM = 4;
4312 tdep->ARGLAST_REGNUM = 7;
4313 tdep->RETURN_REGNUM = 0;
4314 tdep->FLOAT_ARGLAST_REGNUM = -1;
4316 tdep->sh_abi = SH_ABI_UNKNOWN;
4318 set_gdbarch_short_bit (gdbarch, 2 * TARGET_CHAR_BIT);
4319 set_gdbarch_int_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4320 set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4321 set_gdbarch_long_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4322 set_gdbarch_float_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4323 set_gdbarch_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4324 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4325 set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4327 set_gdbarch_num_regs (gdbarch, SH_DEFAULT_NUM_REGS);
4328 set_gdbarch_sp_regnum (gdbarch, 15);
4329 set_gdbarch_deprecated_fp_regnum (gdbarch, 14);
4330 set_gdbarch_pc_regnum (gdbarch, 16);
4331 set_gdbarch_fp0_regnum (gdbarch, -1);
4332 set_gdbarch_num_pseudo_regs (gdbarch, 0);
4334 set_gdbarch_breakpoint_from_pc (gdbarch, sh_breakpoint_from_pc);
4335 set_gdbarch_use_struct_convention (gdbarch, sh_use_struct_convention);
4337 set_gdbarch_print_insn (gdbarch, gdb_print_insn_sh);
4338 set_gdbarch_register_sim_regno (gdbarch, legacy_register_sim_regno);
4340 set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
4342 set_gdbarch_skip_prologue (gdbarch, sh_skip_prologue);
4343 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
4344 set_gdbarch_decr_pc_after_break (gdbarch, 0);
4345 set_gdbarch_function_start_offset (gdbarch, 0);
4347 set_gdbarch_frame_args_skip (gdbarch, 0);
4348 set_gdbarch_frameless_function_invocation (gdbarch, frameless_look_for_prologue);
4349 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
4351 skip_prologue_hard_way = sh_skip_prologue_hard_way;
4353 set_gdbarch_deprecated_frame_chain (gdbarch, sh_frame_chain);
4354 set_gdbarch_deprecated_get_saved_register (gdbarch, deprecated_generic_get_saved_register);
4355 set_gdbarch_deprecated_init_extra_frame_info (gdbarch, sh_init_extra_frame_info);
4356 set_gdbarch_deprecated_pop_frame (gdbarch, sh_pop_frame);
4357 set_gdbarch_deprecated_frame_saved_pc (gdbarch, sh_frame_saved_pc);
4358 set_gdbarch_deprecated_saved_pc_after_call (gdbarch, sh_saved_pc_after_call);
4360 switch (info.bfd_arch_info->mach)
4363 set_gdbarch_register_name (gdbarch, sh_sh_register_name);
4364 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4365 sh_show_regs = sh_generic_show_regs;
4366 set_gdbarch_register_type (gdbarch, sh_default_register_type);
4367 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4368 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
4369 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
4370 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4371 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4373 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4376 set_gdbarch_register_name (gdbarch, sh_sh_register_name);
4377 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4378 sh_show_regs = sh_generic_show_regs;
4379 set_gdbarch_register_type (gdbarch, sh_default_register_type);
4380 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4381 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
4382 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
4383 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4384 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4386 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4389 /* doubles on sh2e and sh3e are actually 4 byte. */
4390 set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4392 set_gdbarch_register_name (gdbarch, sh_sh2e_register_name);
4393 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4394 sh_show_regs = sh2e_show_regs;
4395 set_gdbarch_register_type (gdbarch, sh_sh3e_register_type);
4396 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4397 set_gdbarch_fp0_regnum (gdbarch, 25);
4398 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
4399 set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value);
4400 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4401 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4402 tdep->FPUL_REGNUM = 23;
4403 tdep->FPSCR_REGNUM = 24;
4404 tdep->FP_LAST_REGNUM = 40;
4406 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4408 case bfd_mach_sh_dsp:
4409 set_gdbarch_register_name (gdbarch, sh_sh_dsp_register_name);
4410 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4411 sh_show_regs = sh_dsp_show_regs;
4412 set_gdbarch_register_type (gdbarch, sh_default_register_type);
4413 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4414 set_gdbarch_register_sim_regno (gdbarch, sh_dsp_register_sim_regno);
4415 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
4416 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
4417 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4418 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4419 tdep->DSR_REGNUM = 24;
4420 tdep->A0G_REGNUM = 25;
4421 tdep->A0_REGNUM = 26;
4422 tdep->A1G_REGNUM = 27;
4423 tdep->A1_REGNUM = 28;
4424 tdep->M0_REGNUM = 29;
4425 tdep->M1_REGNUM = 30;
4426 tdep->X0_REGNUM = 31;
4427 tdep->X1_REGNUM = 32;
4428 tdep->Y0_REGNUM = 33;
4429 tdep->Y1_REGNUM = 34;
4430 tdep->MOD_REGNUM = 40;
4431 tdep->RS_REGNUM = 43;
4432 tdep->RE_REGNUM = 44;
4434 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4437 set_gdbarch_register_name (gdbarch, sh_sh3_register_name);
4438 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4439 sh_show_regs = sh3_show_regs;
4440 set_gdbarch_register_type (gdbarch, sh_default_register_type);
4441 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4442 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
4443 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
4444 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4445 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4446 tdep->SSR_REGNUM = 41;
4447 tdep->SPC_REGNUM = 42;
4449 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4452 /* doubles on sh2e and sh3e are actually 4 byte. */
4453 set_gdbarch_double_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4455 set_gdbarch_register_name (gdbarch, sh_sh3e_register_name);
4456 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4457 sh_show_regs = sh3e_show_regs;
4458 set_gdbarch_register_type (gdbarch, sh_sh3e_register_type);
4459 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4460 set_gdbarch_fp0_regnum (gdbarch, 25);
4461 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
4462 set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value);
4463 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4464 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4465 tdep->FPUL_REGNUM = 23;
4466 tdep->FPSCR_REGNUM = 24;
4467 tdep->FP_LAST_REGNUM = 40;
4468 tdep->SSR_REGNUM = 41;
4469 tdep->SPC_REGNUM = 42;
4471 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_fp_frame_init_saved_regs);
4473 case bfd_mach_sh3_dsp:
4474 set_gdbarch_register_name (gdbarch, sh_sh3_dsp_register_name);
4475 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4476 sh_show_regs = sh3_dsp_show_regs;
4477 set_gdbarch_register_type (gdbarch, sh_default_register_type);
4478 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4479 set_gdbarch_register_sim_regno (gdbarch, sh_dsp_register_sim_regno);
4480 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
4481 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
4482 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4483 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4484 tdep->DSR_REGNUM = 24;
4485 tdep->A0G_REGNUM = 25;
4486 tdep->A0_REGNUM = 26;
4487 tdep->A1G_REGNUM = 27;
4488 tdep->A1_REGNUM = 28;
4489 tdep->M0_REGNUM = 29;
4490 tdep->M1_REGNUM = 30;
4491 tdep->X0_REGNUM = 31;
4492 tdep->X1_REGNUM = 32;
4493 tdep->Y0_REGNUM = 33;
4494 tdep->Y1_REGNUM = 34;
4495 tdep->MOD_REGNUM = 40;
4496 tdep->RS_REGNUM = 43;
4497 tdep->RE_REGNUM = 44;
4498 tdep->SSR_REGNUM = 41;
4499 tdep->SPC_REGNUM = 42;
4501 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4504 set_gdbarch_register_name (gdbarch, sh_sh4_register_name);
4505 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4506 sh_show_regs = sh4_show_regs;
4507 set_gdbarch_register_type (gdbarch, sh_sh4_register_type);
4508 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4509 set_gdbarch_fp0_regnum (gdbarch, 25);
4510 set_gdbarch_num_pseudo_regs (gdbarch, 12);
4511 set_gdbarch_pseudo_register_read (gdbarch, sh_pseudo_register_read);
4512 set_gdbarch_pseudo_register_write (gdbarch, sh_pseudo_register_write);
4513 set_gdbarch_store_return_value (gdbarch, sh3e_sh4_store_return_value);
4514 set_gdbarch_extract_return_value (gdbarch, sh3e_sh4_extract_return_value);
4515 set_gdbarch_push_dummy_call (gdbarch, sh_push_dummy_call);
4516 set_gdbarch_extract_struct_value_address (gdbarch, sh_extract_struct_value_address);
4517 tdep->FPUL_REGNUM = 23;
4518 tdep->FPSCR_REGNUM = 24;
4519 tdep->FP_LAST_REGNUM = 40;
4520 tdep->SSR_REGNUM = 41;
4521 tdep->SPC_REGNUM = 42;
4522 tdep->DR0_REGNUM = 59;
4523 tdep->DR_LAST_REGNUM = 66;
4524 tdep->FV0_REGNUM = 67;
4525 tdep->FV_LAST_REGNUM = 70;
4527 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_fp_frame_init_saved_regs);
4530 tdep->PR_REGNUM = 18;
4531 tdep->SR_REGNUM = 65;
4532 tdep->FPSCR_REGNUM = SIM_SH64_FPCSR_REGNUM;
4533 tdep->FP_LAST_REGNUM = SIM_SH64_FR0_REGNUM + SIM_SH64_NR_FP_REGS - 1;
4534 tdep->SSR_REGNUM = SIM_SH64_SSR_REGNUM;
4535 tdep->SPC_REGNUM = SIM_SH64_SPC_REGNUM;
4536 tdep->TR7_REGNUM = SIM_SH64_TR0_REGNUM + 7;
4537 tdep->FPP0_REGNUM = 173;
4538 tdep->FPP_LAST_REGNUM = 204;
4539 tdep->DR0_REGNUM = 141;
4540 tdep->DR_LAST_REGNUM = 172;
4541 tdep->FV0_REGNUM = 205;
4542 tdep->FV_LAST_REGNUM = 220;
4543 tdep->R0_C_REGNUM = 221;
4544 tdep->R_LAST_C_REGNUM = 236;
4545 tdep->PC_C_REGNUM = 237;
4546 tdep->GBR_C_REGNUM = 238;
4547 tdep->MACH_C_REGNUM = 239;
4548 tdep->MACL_C_REGNUM = 240;
4549 tdep->PR_C_REGNUM = 241;
4550 tdep->T_C_REGNUM = 242;
4551 tdep->FPSCR_C_REGNUM = 243;
4552 tdep->FPUL_C_REGNUM = 244;
4553 tdep->FP0_C_REGNUM = 245;
4554 tdep->FP_LAST_C_REGNUM = 260;
4555 tdep->DR0_C_REGNUM = 261;
4556 tdep->DR_LAST_C_REGNUM = 268;
4557 tdep->FV0_C_REGNUM = 269;
4558 tdep->FV_LAST_C_REGNUM = 272;
4559 tdep->ARG0_REGNUM = 2;
4560 tdep->ARGLAST_REGNUM = 9;
4561 tdep->RETURN_REGNUM = 2;
4562 tdep->FLOAT_ARGLAST_REGNUM = 11;
4564 set_gdbarch_num_pseudo_regs (gdbarch, NUM_PSEUDO_REGS_SH_MEDIA + NUM_PSEUDO_REGS_SH_COMPACT);
4565 set_gdbarch_fp0_regnum (gdbarch, SIM_SH64_FR0_REGNUM);
4566 set_gdbarch_pc_regnum (gdbarch, 64);
4568 /* Determine the ABI */
4569 if (bfd_get_arch_size (info.abfd) == 64)
4571 /* If the ABI is the 64-bit one, it can only be sh-media. */
4572 tdep->sh_abi = SH_ABI_64;
4573 set_gdbarch_ptr_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4574 set_gdbarch_long_bit (gdbarch, 8 * TARGET_CHAR_BIT);
4578 /* If the ABI is the 32-bit one it could be either media or
4580 tdep->sh_abi = SH_ABI_32;
4581 set_gdbarch_ptr_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4582 set_gdbarch_long_bit (gdbarch, 4 * TARGET_CHAR_BIT);
4585 /* the number of real registers is the same whether we are in
4586 ISA16(compact) or ISA32(media). */
4587 set_gdbarch_num_regs (gdbarch, SIM_SH64_NR_REGS);
4588 set_gdbarch_deprecated_register_size (gdbarch, 8); /*????*/
4589 set_gdbarch_deprecated_register_bytes (gdbarch,
4590 ((SIM_SH64_NR_FP_REGS + 1) * 4)
4591 + (SIM_SH64_NR_REGS - SIM_SH64_NR_FP_REGS -1) * 8);
4593 set_gdbarch_register_name (gdbarch, sh_sh64_register_name);
4594 sh_show_regs = sh64_show_regs;
4595 set_gdbarch_deprecated_register_virtual_type (gdbarch, sh_sh64_register_virtual_type);
4596 set_gdbarch_deprecated_store_return_value (gdbarch, sh64_store_return_value);
4597 skip_prologue_hard_way = sh64_skip_prologue_hard_way;
4598 set_gdbarch_deprecated_register_raw_size (gdbarch, sh_sh64_register_raw_size);
4599 set_gdbarch_deprecated_register_virtual_size (gdbarch, sh_sh64_register_raw_size);
4600 set_gdbarch_deprecated_register_byte (gdbarch, sh_sh64_register_byte);
4601 /* This seems awfully wrong!*/
4602 /*set_gdbarch_deprecated_max_register_raw_size (gdbarch, 8);*/
4603 /* should include the size of the pseudo regs. */
4604 set_gdbarch_deprecated_max_register_raw_size (gdbarch, 4 * 4);
4605 /* Or should that go in the virtual_size? */
4606 /*set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 8);*/
4607 set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 4 * 4);
4608 set_gdbarch_pseudo_register_read (gdbarch, sh64_pseudo_register_read);
4609 set_gdbarch_pseudo_register_write (gdbarch, sh64_pseudo_register_write);
4611 set_gdbarch_deprecated_do_registers_info (gdbarch, sh64_do_registers_info);
4612 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh64_nofp_frame_init_saved_regs);
4613 set_gdbarch_breakpoint_from_pc (gdbarch, sh_sh64_breakpoint_from_pc);
4614 set_gdbarch_deprecated_call_dummy_words (gdbarch, sh64_call_dummy_words);
4615 set_gdbarch_deprecated_sizeof_call_dummy_words (gdbarch, sizeof (sh64_call_dummy_words));
4617 set_gdbarch_deprecated_init_extra_frame_info (gdbarch, sh64_init_extra_frame_info);
4618 set_gdbarch_deprecated_frame_chain (gdbarch, sh64_frame_chain);
4619 set_gdbarch_deprecated_get_saved_register (gdbarch, sh64_get_saved_register);
4620 set_gdbarch_deprecated_extract_return_value (gdbarch, sh64_extract_return_value);
4621 set_gdbarch_deprecated_push_arguments (gdbarch, sh64_push_arguments);
4622 set_gdbarch_deprecated_push_return_address (gdbarch, sh64_push_return_address);
4623 set_gdbarch_deprecated_dummy_write_sp (gdbarch, deprecated_write_sp);
4624 set_gdbarch_deprecated_store_struct_return (gdbarch, sh64_store_struct_return);
4625 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, sh64_extract_struct_value_address);
4626 set_gdbarch_use_struct_convention (gdbarch, sh64_use_struct_convention);
4627 set_gdbarch_deprecated_pop_frame (gdbarch, sh64_pop_frame);
4628 set_gdbarch_elf_make_msymbol_special (gdbarch,
4629 sh64_elf_make_msymbol_special);
4632 set_gdbarch_register_name (gdbarch, sh_generic_register_name);
4633 set_gdbarch_print_registers_info (gdbarch, sh_print_registers_info);
4634 sh_show_regs = sh_generic_show_regs;
4635 set_gdbarch_register_type (gdbarch, sh_default_register_type);
4636 set_gdbarch_push_dummy_code (gdbarch, sh_push_dummy_code);
4637 set_gdbarch_store_return_value (gdbarch, sh_default_store_return_value);
4638 set_gdbarch_extract_return_value (gdbarch, sh_default_extract_return_value);
4640 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, sh_nofp_frame_init_saved_regs);
4644 /* Hook in ABI-specific overrides, if they have been registered. */
4645 gdbarch_init_osabi (info, gdbarch);
4651 sh_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
4653 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
4658 /* FIXME: dump the rest of gdbarch_tdep. */
4661 extern initialize_file_ftype _initialize_sh_tdep; /* -Wmissing-prototypes */
4664 _initialize_sh_tdep (void)
4666 struct cmd_list_element *c;
4668 gdbarch_register (bfd_arch_sh, sh_gdbarch_init, sh_dump_tdep);
4670 add_com ("regs", class_vars, sh_show_regs_command, "Print all registers");