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