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