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