2005-01-16 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / sparc-tdep.c
CommitLineData
386c036b 1/* Target-dependent code for SPARC.
cda5a58a 2
386c036b 3 Copyright 2003, 2004 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 21
c906108c 22#include "defs.h"
5af923b0 23#include "arch-utils.h"
386c036b
MK
24#include "dis-asm.h"
25#include "floatformat.h"
c906108c 26#include "frame.h"
386c036b
MK
27#include "frame-base.h"
28#include "frame-unwind.h"
29#include "gdbcore.h"
30#include "gdbtypes.h"
c906108c 31#include "inferior.h"
386c036b
MK
32#include "symtab.h"
33#include "objfiles.h"
34#include "osabi.h"
35#include "regcache.h"
c906108c
SS
36#include "target.h"
37#include "value.h"
c906108c 38
43bd9a9e 39#include "gdb_assert.h"
386c036b 40#include "gdb_string.h"
c906108c 41
386c036b 42#include "sparc-tdep.h"
c906108c 43
a54124c5
MK
44struct regset;
45
9eb42ed1
MK
46/* This file implements the SPARC 32-bit ABI as defined by the section
47 "Low-Level System Information" of the SPARC Compliance Definition
48 (SCD) 2.4.1, which is the 32-bit System V psABI for SPARC. The SCD
f2e7c15d 49 lists changes with respect to the original 32-bit psABI as defined
9eb42ed1 50 in the "System V ABI, SPARC Processor Supplement".
386c036b
MK
51
52 Note that if we talk about SunOS, we mean SunOS 4.x, which was
53 BSD-based, which is sometimes (retroactively?) referred to as
54 Solaris 1.x. If we talk about Solaris we mean Solaris 2.x and
55 above (Solaris 7, 8 and 9 are nothing but Solaris 2.7, 2.8 and 2.9
56 suffering from severe version number inflation). Solaris 2.x is
57 also known as SunOS 5.x, since that's what uname(1) says. Solaris
58 2.x is SVR4-based. */
59
60/* Please use the sparc32_-prefix for 32-bit specific code, the
61 sparc64_-prefix for 64-bit specific code and the sparc_-prefix for
62 code that can handle both. The 64-bit specific code lives in
63 sparc64-tdep.c; don't add any here. */
64
65/* The SPARC Floating-Point Quad-Precision format is similar to
66 big-endian IA-64 Quad-recision format. */
67#define floatformat_sparc_quad floatformat_ia64_quad_big
68
69/* The stack pointer is offset from the stack frame by a BIAS of 2047
70 (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC
71 hosts, so undefine it first. */
72#undef BIAS
73#define BIAS 2047
74
75/* Macros to extract fields from SPARC instructions. */
c906108c
SS
76#define X_OP(i) (((i) >> 30) & 0x3)
77#define X_RD(i) (((i) >> 25) & 0x1f)
78#define X_A(i) (((i) >> 29) & 1)
79#define X_COND(i) (((i) >> 25) & 0xf)
80#define X_OP2(i) (((i) >> 22) & 0x7)
81#define X_IMM22(i) ((i) & 0x3fffff)
82#define X_OP3(i) (((i) >> 19) & 0x3f)
075ccec8 83#define X_RS1(i) (((i) >> 14) & 0x1f)
c906108c 84#define X_I(i) (((i) >> 13) & 1)
c906108c 85/* Sign extension macros. */
c906108c 86#define X_DISP22(i) ((X_IMM22 (i) ^ 0x200000) - 0x200000)
c906108c 87#define X_DISP19(i) ((((i) & 0x7ffff) ^ 0x40000) - 0x40000)
075ccec8 88#define X_SIMM13(i) ((((i) & 0x1fff) ^ 0x1000) - 0x1000)
c906108c 89
386c036b
MK
90/* Fetch the instruction at PC. Instructions are always big-endian
91 even if the processor operates in little-endian mode. */
92
93unsigned long
94sparc_fetch_instruction (CORE_ADDR pc)
c906108c 95{
386c036b
MK
96 unsigned char buf[4];
97 unsigned long insn;
98 int i;
99
690668cc
MK
100 /* If we can't read the instruction at PC, return zero. */
101 if (target_read_memory (pc, buf, sizeof (buf)))
102 return 0;
c906108c 103
386c036b
MK
104 insn = 0;
105 for (i = 0; i < sizeof (buf); i++)
106 insn = (insn << 8) | buf[i];
107 return insn;
108}
42cdca6c
MK
109\f
110
5465445a
JB
111/* Return non-zero if the instruction corresponding to PC is an "unimp"
112 instruction. */
113
114static int
115sparc_is_unimp_insn (CORE_ADDR pc)
116{
117 const unsigned long insn = sparc_fetch_instruction (pc);
118
119 return ((insn & 0xc1c00000) == 0);
120}
121
42cdca6c
MK
122/* OpenBSD/sparc includes StackGhost, which according to the author's
123 website http://stackghost.cerias.purdue.edu "... transparently and
124 automatically protects applications' stack frames; more
125 specifically, it guards the return pointers. The protection
126 mechanisms require no application source or binary modification and
127 imposes only a negligible performance penalty."
128
129 The same website provides the following description of how
130 StackGhost works:
131
132 "StackGhost interfaces with the kernel trap handler that would
133 normally write out registers to the stack and the handler that
134 would read them back in. By XORing a cookie into the
135 return-address saved in the user stack when it is actually written
136 to the stack, and then XOR it out when the return-address is pulled
137 from the stack, StackGhost can cause attacker corrupted return
138 pointers to behave in a manner the attacker cannot predict.
139 StackGhost can also use several unused bits in the return pointer
140 to detect a smashed return pointer and abort the process."
141
142 For GDB this means that whenever we're reading %i7 from a stack
143 frame's window save area, we'll have to XOR the cookie.
144
145 More information on StackGuard can be found on in:
146
147 Mike Frantzen and Mike Shuey. "StackGhost: Hardware Facilitated
148 Stack Protection." 2001. Published in USENIX Security Symposium
149 '01. */
150
151/* Fetch StackGhost Per-Process XOR cookie. */
152
153ULONGEST
154sparc_fetch_wcookie (void)
155{
baf92889
MK
156 struct target_ops *ops = &current_target;
157 char buf[8];
158 int len;
159
160 len = target_read_partial (ops, TARGET_OBJECT_WCOOKIE, NULL, buf, 0, 8);
161 if (len == -1)
162 return 0;
42cdca6c 163
baf92889
MK
164 /* We should have either an 32-bit or an 64-bit cookie. */
165 gdb_assert (len == 4 || len == 8);
166
167 return extract_unsigned_integer (buf, len);
168}
386c036b 169\f
baf92889 170
386c036b 171/* Return the contents if register REGNUM as an address. */
c906108c 172
386c036b
MK
173static CORE_ADDR
174sparc_address_from_register (int regnum)
175{
176 ULONGEST addr;
c906108c 177
386c036b
MK
178 regcache_cooked_read_unsigned (current_regcache, regnum, &addr);
179 return addr;
180}
181\f
c906108c 182
386c036b
MK
183/* The functions on this page are intended to be used to classify
184 function arguments. */
c906108c 185
386c036b 186/* Check whether TYPE is "Integral or Pointer". */
c906108c 187
386c036b
MK
188static int
189sparc_integral_or_pointer_p (const struct type *type)
c906108c 190{
386c036b 191 switch (TYPE_CODE (type))
c906108c 192 {
386c036b
MK
193 case TYPE_CODE_INT:
194 case TYPE_CODE_BOOL:
195 case TYPE_CODE_CHAR:
196 case TYPE_CODE_ENUM:
197 case TYPE_CODE_RANGE:
198 {
199 /* We have byte, half-word, word and extended-word/doubleword
200 integral types. The doubleword is an extension to the
f2e7c15d 201 original 32-bit ABI by the SCD 2.4.x. */
386c036b
MK
202 int len = TYPE_LENGTH (type);
203 return (len == 1 || len == 2 || len == 4 || len == 8);
204 }
205 return 1;
206 case TYPE_CODE_PTR:
207 case TYPE_CODE_REF:
208 {
209 /* Allow either 32-bit or 64-bit pointers. */
210 int len = TYPE_LENGTH (type);
211 return (len == 4 || len == 8);
212 }
213 return 1;
214 default:
215 break;
216 }
c906108c 217
386c036b
MK
218 return 0;
219}
c906108c 220
386c036b 221/* Check whether TYPE is "Floating". */
c906108c 222
386c036b
MK
223static int
224sparc_floating_p (const struct type *type)
225{
226 switch (TYPE_CODE (type))
c906108c 227 {
386c036b
MK
228 case TYPE_CODE_FLT:
229 {
230 int len = TYPE_LENGTH (type);
231 return (len == 4 || len == 8 || len == 16);
232 }
233 default:
234 break;
235 }
236
237 return 0;
238}
c906108c 239
386c036b 240/* Check whether TYPE is "Structure or Union". */
c906108c 241
386c036b
MK
242static int
243sparc_structure_or_union_p (const struct type *type)
244{
245 switch (TYPE_CODE (type))
246 {
247 case TYPE_CODE_STRUCT:
248 case TYPE_CODE_UNION:
249 return 1;
250 default:
251 break;
c906108c 252 }
386c036b
MK
253
254 return 0;
c906108c 255}
386c036b
MK
256
257/* Register information. */
258
259static const char *sparc32_register_names[] =
5af923b0 260{
386c036b
MK
261 "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7",
262 "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7",
263 "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7",
264 "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7",
265
266 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
267 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
268 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
269 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
270
271 "y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
5af923b0
MS
272};
273
386c036b
MK
274/* Total number of registers. */
275#define SPARC32_NUM_REGS ARRAY_SIZE (sparc32_register_names)
c906108c 276
386c036b
MK
277/* We provide the aliases %d0..%d30 for the floating registers as
278 "psuedo" registers. */
279
280static const char *sparc32_pseudo_register_names[] =
281{
282 "d0", "d2", "d4", "d6", "d8", "d10", "d12", "d14",
283 "d16", "d18", "d20", "d22", "d24", "d26", "d28", "d30"
284};
285
286/* Total number of pseudo registers. */
287#define SPARC32_NUM_PSEUDO_REGS ARRAY_SIZE (sparc32_pseudo_register_names)
288
289/* Return the name of register REGNUM. */
290
291static const char *
292sparc32_register_name (int regnum)
293{
294 if (regnum >= 0 && regnum < SPARC32_NUM_REGS)
295 return sparc32_register_names[regnum];
296
297 if (regnum < SPARC32_NUM_REGS + SPARC32_NUM_PSEUDO_REGS)
298 return sparc32_pseudo_register_names[regnum - SPARC32_NUM_REGS];
299
300 return NULL;
301}
302
303/* Return the GDB type object for the "standard" data type of data in
304 register REGNUM. */
305
306static struct type *
307sparc32_register_type (struct gdbarch *gdbarch, int regnum)
308{
309 if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
310 return builtin_type_float;
311
312 if (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM)
313 return builtin_type_double;
314
315 if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
316 return builtin_type_void_data_ptr;
317
318 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
319 return builtin_type_void_func_ptr;
320
321 return builtin_type_int32;
322}
323
324static void
325sparc32_pseudo_register_read (struct gdbarch *gdbarch,
326 struct regcache *regcache,
327 int regnum, void *buf)
328{
329 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
330
331 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
332 regcache_raw_read (regcache, regnum, buf);
333 regcache_raw_read (regcache, regnum + 1, ((char *)buf) + 4);
334}
335
336static void
337sparc32_pseudo_register_write (struct gdbarch *gdbarch,
338 struct regcache *regcache,
339 int regnum, const void *buf)
340{
341 gdb_assert (regnum >= SPARC32_D0_REGNUM && regnum <= SPARC32_D30_REGNUM);
342
343 regnum = SPARC_F0_REGNUM + 2 * (regnum - SPARC32_D0_REGNUM);
344 regcache_raw_write (regcache, regnum, buf);
345 regcache_raw_write (regcache, regnum + 1, ((const char *)buf) + 4);
346}
347\f
348
349static CORE_ADDR
350sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
351 CORE_ADDR funcaddr, int using_gcc,
352 struct value **args, int nargs,
353 struct type *value_type,
354 CORE_ADDR *real_pc, CORE_ADDR *bp_addr)
c906108c 355{
386c036b
MK
356 *bp_addr = sp - 4;
357 *real_pc = funcaddr;
358
359 if (using_struct_return (value_type, using_gcc))
c906108c 360 {
386c036b
MK
361 char buf[4];
362
363 /* This is an UNIMP instruction. */
364 store_unsigned_integer (buf, 4, TYPE_LENGTH (value_type) & 0x1fff);
365 write_memory (sp - 8, buf, 4);
366 return sp - 8;
c906108c
SS
367 }
368
386c036b
MK
369 return sp - 4;
370}
371
372static CORE_ADDR
373sparc32_store_arguments (struct regcache *regcache, int nargs,
374 struct value **args, CORE_ADDR sp,
375 int struct_return, CORE_ADDR struct_addr)
376{
377 /* Number of words in the "parameter array". */
378 int num_elements = 0;
379 int element = 0;
380 int i;
381
382 for (i = 0; i < nargs; i++)
c906108c 383 {
4991999e 384 struct type *type = value_type (args[i]);
386c036b
MK
385 int len = TYPE_LENGTH (type);
386
387 if (sparc_structure_or_union_p (type)
388 || (sparc_floating_p (type) && len == 16))
c906108c 389 {
386c036b
MK
390 /* Structure, Union and Quad-Precision Arguments. */
391 sp -= len;
392
393 /* Use doubleword alignment for these values. That's always
394 correct, and wasting a few bytes shouldn't be a problem. */
395 sp &= ~0x7;
396
397 write_memory (sp, VALUE_CONTENTS (args[i]), len);
398 args[i] = value_from_pointer (lookup_pointer_type (type), sp);
399 num_elements++;
400 }
401 else if (sparc_floating_p (type))
402 {
403 /* Floating arguments. */
404 gdb_assert (len == 4 || len == 8);
405 num_elements += (len / 4);
c906108c 406 }
c5aa993b
JM
407 else
408 {
386c036b
MK
409 /* Integral and pointer arguments. */
410 gdb_assert (sparc_integral_or_pointer_p (type));
411
412 if (len < 4)
413 args[i] = value_cast (builtin_type_int32, args[i]);
414 num_elements += ((len + 3) / 4);
c5aa993b 415 }
c906108c 416 }
c906108c 417
386c036b
MK
418 /* Always allocate at least six words. */
419 sp -= max (6, num_elements) * 4;
c906108c 420
386c036b
MK
421 /* The psABI says that "Software convention requires space for the
422 struct/union return value pointer, even if the word is unused." */
423 sp -= 4;
c906108c 424
386c036b
MK
425 /* The psABI says that "Although software convention and the
426 operating system require every stack frame to be doubleword
427 aligned." */
428 sp &= ~0x7;
c906108c 429
386c036b 430 for (i = 0; i < nargs; i++)
c906108c 431 {
386c036b 432 char *valbuf = VALUE_CONTENTS (args[i]);
4991999e 433 struct type *type = value_type (args[i]);
386c036b 434 int len = TYPE_LENGTH (type);
c906108c 435
386c036b 436 gdb_assert (len == 4 || len == 8);
c906108c 437
386c036b
MK
438 if (element < 6)
439 {
440 int regnum = SPARC_O0_REGNUM + element;
c906108c 441
386c036b
MK
442 regcache_cooked_write (regcache, regnum, valbuf);
443 if (len > 4 && element < 5)
444 regcache_cooked_write (regcache, regnum + 1, valbuf + 4);
445 }
5af923b0 446
386c036b
MK
447 /* Always store the argument in memory. */
448 write_memory (sp + 4 + element * 4, valbuf, len);
449 element += len / 4;
450 }
c906108c 451
386c036b 452 gdb_assert (element == num_elements);
c906108c 453
386c036b 454 if (struct_return)
c906108c 455 {
386c036b 456 char buf[4];
c906108c 457
386c036b
MK
458 store_unsigned_integer (buf, 4, struct_addr);
459 write_memory (sp, buf, 4);
460 }
c906108c 461
386c036b 462 return sp;
c906108c
SS
463}
464
386c036b 465static CORE_ADDR
7d9b040b 466sparc32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
386c036b
MK
467 struct regcache *regcache, CORE_ADDR bp_addr,
468 int nargs, struct value **args, CORE_ADDR sp,
469 int struct_return, CORE_ADDR struct_addr)
c906108c 470{
386c036b
MK
471 CORE_ADDR call_pc = (struct_return ? (bp_addr - 12) : (bp_addr - 8));
472
473 /* Set return address. */
474 regcache_cooked_write_unsigned (regcache, SPARC_O7_REGNUM, call_pc);
475
476 /* Set up function arguments. */
477 sp = sparc32_store_arguments (regcache, nargs, args, sp,
478 struct_return, struct_addr);
479
480 /* Allocate the 16-word window save area. */
481 sp -= 16 * 4;
c906108c 482
386c036b
MK
483 /* Stack should be doubleword aligned at this point. */
484 gdb_assert (sp % 8 == 0);
c906108c 485
386c036b
MK
486 /* Finally, update the stack pointer. */
487 regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
488
489 return sp;
490}
491\f
c906108c 492
386c036b
MK
493/* Use the program counter to determine the contents and size of a
494 breakpoint instruction. Return a pointer to a string of bytes that
495 encode a breakpoint instruction, store the length of the string in
496 *LEN and optionally adjust *PC to point to the correct memory
497 location for inserting the breakpoint. */
498
499static const unsigned char *
500sparc_breakpoint_from_pc (CORE_ADDR *pc, int *len)
501{
502 static unsigned char break_insn[] = { 0x91, 0xd0, 0x20, 0x01 };
c5aa993b 503
386c036b
MK
504 *len = sizeof (break_insn);
505 return break_insn;
c906108c 506}
386c036b 507\f
c906108c 508
386c036b 509/* Allocate and initialize a frame cache. */
c906108c 510
386c036b
MK
511static struct sparc_frame_cache *
512sparc_alloc_frame_cache (void)
513{
514 struct sparc_frame_cache *cache;
515 int i;
c906108c 516
386c036b 517 cache = FRAME_OBSTACK_ZALLOC (struct sparc_frame_cache);
c906108c 518
386c036b
MK
519 /* Base address. */
520 cache->base = 0;
521 cache->pc = 0;
c906108c 522
386c036b
MK
523 /* Frameless until proven otherwise. */
524 cache->frameless_p = 1;
525
526 cache->struct_return_p = 0;
527
528 return cache;
529}
530
531CORE_ADDR
532sparc_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
533 struct sparc_frame_cache *cache)
c906108c 534{
386c036b
MK
535 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
536 unsigned long insn;
537 int offset = 0;
c906108c 538 int dest = -1;
c906108c 539
386c036b
MK
540 if (current_pc <= pc)
541 return current_pc;
542
543 /* We have to handle to "Procedure Linkage Table" (PLT) special. On
544 SPARC the linker usually defines a symbol (typically
545 _PROCEDURE_LINKAGE_TABLE_) at the start of the .plt section.
546 This symbol makes us end up here with PC pointing at the start of
547 the PLT and CURRENT_PC probably pointing at a PLT entry. If we
548 would do our normal prologue analysis, we would probably conclude
549 that we've got a frame when in reality we don't, since the
550 dynamic linker patches up the first PLT with some code that
551 starts with a SAVE instruction. Patch up PC such that it points
552 at the start of our PLT entry. */
553 if (tdep->plt_entry_size > 0 && in_plt_section (current_pc, NULL))
554 pc = current_pc - ((current_pc - pc) % tdep->plt_entry_size);
c906108c 555
386c036b
MK
556 insn = sparc_fetch_instruction (pc);
557
558 /* Recognize a SETHI insn and record its destination. */
559 if (X_OP (insn) == 0 && X_OP2 (insn) == 0x04)
c906108c
SS
560 {
561 dest = X_RD (insn);
386c036b
MK
562 offset += 4;
563
564 insn = sparc_fetch_instruction (pc + 4);
c906108c
SS
565 }
566
386c036b
MK
567 /* Allow for an arithmetic operation on DEST or %g1. */
568 if (X_OP (insn) == 2 && X_I (insn)
c906108c
SS
569 && (X_RD (insn) == 1 || X_RD (insn) == dest))
570 {
386c036b 571 offset += 4;
c906108c 572
386c036b 573 insn = sparc_fetch_instruction (pc + 8);
c906108c 574 }
c906108c 575
386c036b
MK
576 /* Check for the SAVE instruction that sets up the frame. */
577 if (X_OP (insn) == 2 && X_OP3 (insn) == 0x3c)
c906108c 578 {
386c036b
MK
579 cache->frameless_p = 0;
580 return pc + offset + 4;
c906108c
SS
581 }
582
583 return pc;
584}
585
386c036b
MK
586static CORE_ADDR
587sparc_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
588{
589 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
590 return frame_unwind_register_unsigned (next_frame, tdep->pc_regnum);
591}
592
593/* Return PC of first real instruction of the function starting at
594 START_PC. */
f510d44e 595
386c036b
MK
596static CORE_ADDR
597sparc32_skip_prologue (CORE_ADDR start_pc)
c906108c 598{
f510d44e
DM
599 struct symtab_and_line sal;
600 CORE_ADDR func_start, func_end;
386c036b 601 struct sparc_frame_cache cache;
f510d44e
DM
602
603 /* This is the preferred method, find the end of the prologue by
604 using the debugging information. */
605 if (find_pc_partial_function (start_pc, NULL, &func_start, &func_end))
606 {
607 sal = find_pc_line (func_start, 0);
608
609 if (sal.end < func_end
610 && start_pc <= sal.end)
611 return sal.end;
612 }
613
075ccec8
MK
614 start_pc = sparc_analyze_prologue (start_pc, 0xffffffffUL, &cache);
615
616 /* The psABI says that "Although the first 6 words of arguments
617 reside in registers, the standard stack frame reserves space for
618 them.". It also suggests that a function may use that space to
619 "write incoming arguments 0 to 5" into that space, and that's
620 indeed what GCC seems to be doing. In that case GCC will
621 generate debug information that points to the stack slots instead
622 of the registers, so we should consider the instructions that
623 write out these incoming arguments onto the stack. Of course we
624 only need to do this if we have a stack frame. */
625
626 while (!cache.frameless_p)
627 {
628 unsigned long insn = sparc_fetch_instruction (start_pc);
629
630 /* Recognize instructions that store incoming arguments in
631 %i0...%i5 into the corresponding stack slot. */
632 if (X_OP (insn) == 3 && (X_OP3 (insn) & 0x3c) == 0x04 && X_I (insn)
633 && (X_RD (insn) >= 24 && X_RD (insn) <= 29) && X_RS1 (insn) == 30
634 && X_SIMM13 (insn) == 68 + (X_RD (insn) - 24) * 4)
635 {
636 start_pc += 4;
637 continue;
638 }
639
640 break;
641 }
642
643 return start_pc;
c906108c
SS
644}
645
386c036b 646/* Normal frames. */
9319a2fe 647
386c036b
MK
648struct sparc_frame_cache *
649sparc_frame_cache (struct frame_info *next_frame, void **this_cache)
9319a2fe 650{
386c036b 651 struct sparc_frame_cache *cache;
9319a2fe 652
386c036b
MK
653 if (*this_cache)
654 return *this_cache;
c906108c 655
386c036b
MK
656 cache = sparc_alloc_frame_cache ();
657 *this_cache = cache;
c906108c 658
386c036b
MK
659 cache->pc = frame_func_unwind (next_frame);
660 if (cache->pc != 0)
c906108c 661 {
386c036b
MK
662 CORE_ADDR addr_in_block = frame_unwind_address_in_block (next_frame);
663 sparc_analyze_prologue (cache->pc, addr_in_block, cache);
c906108c 664 }
386c036b
MK
665
666 if (cache->frameless_p)
c906108c 667 {
cbeae229
MK
668 /* This function is frameless, so %fp (%i6) holds the frame
669 pointer for our calling frame. Use %sp (%o6) as this frame's
670 base address. */
671 cache->base =
672 frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM);
673 }
674 else
675 {
676 /* For normal frames, %fp (%i6) holds the frame pointer, the
677 base address for the current stack frame. */
678 cache->base =
679 frame_unwind_register_unsigned (next_frame, SPARC_FP_REGNUM);
c906108c 680 }
c906108c 681
386c036b 682 return cache;
c906108c 683}
c906108c 684
386c036b
MK
685struct sparc_frame_cache *
686sparc32_frame_cache (struct frame_info *next_frame, void **this_cache)
c906108c 687{
386c036b
MK
688 struct sparc_frame_cache *cache;
689 struct symbol *sym;
c906108c 690
386c036b
MK
691 if (*this_cache)
692 return *this_cache;
c906108c 693
386c036b 694 cache = sparc_frame_cache (next_frame, this_cache);
c906108c 695
386c036b
MK
696 sym = find_pc_function (cache->pc);
697 if (sym)
c906108c 698 {
386c036b
MK
699 struct type *type = check_typedef (SYMBOL_TYPE (sym));
700 enum type_code code = TYPE_CODE (type);
701
702 if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
703 {
704 type = check_typedef (TYPE_TARGET_TYPE (type));
705 if (sparc_structure_or_union_p (type)
706 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
707 cache->struct_return_p = 1;
708 }
c906108c 709 }
5465445a
JB
710 else
711 {
712 /* There is no debugging information for this function to
713 help us determine whether this function returns a struct
714 or not. So we rely on another heuristic which is to check
715 the instruction at the return address and see if this is
716 an "unimp" instruction. If it is, then it is a struct-return
717 function. */
718 CORE_ADDR pc;
719 int regnum = cache->frameless_p ? SPARC_O7_REGNUM : SPARC_I7_REGNUM;
720
721 pc = frame_unwind_register_unsigned (next_frame, regnum) + 8;
722 if (sparc_is_unimp_insn (pc))
723 cache->struct_return_p = 1;
724 }
c906108c 725
386c036b
MK
726 return cache;
727}
728
729static void
730sparc32_frame_this_id (struct frame_info *next_frame, void **this_cache,
731 struct frame_id *this_id)
732{
733 struct sparc_frame_cache *cache =
734 sparc32_frame_cache (next_frame, this_cache);
735
736 /* This marks the outermost frame. */
737 if (cache->base == 0)
738 return;
739
740 (*this_id) = frame_id_build (cache->base, cache->pc);
741}
c906108c 742
386c036b
MK
743static void
744sparc32_frame_prev_register (struct frame_info *next_frame, void **this_cache,
745 int regnum, int *optimizedp,
746 enum lval_type *lvalp, CORE_ADDR *addrp,
747 int *realnump, void *valuep)
748{
749 struct sparc_frame_cache *cache =
750 sparc32_frame_cache (next_frame, this_cache);
c906108c 751
386c036b 752 if (regnum == SPARC32_PC_REGNUM || regnum == SPARC32_NPC_REGNUM)
c906108c 753 {
386c036b
MK
754 *optimizedp = 0;
755 *lvalp = not_lval;
756 *addrp = 0;
757 *realnump = -1;
758 if (valuep)
c906108c 759 {
386c036b
MK
760 CORE_ADDR pc = (regnum == SPARC32_NPC_REGNUM) ? 4 : 0;
761
762 /* If this functions has a Structure, Union or
763 Quad-Precision return value, we have to skip the UNIMP
764 instruction that encodes the size of the structure. */
765 if (cache->struct_return_p)
766 pc += 4;
767
768 regnum = cache->frameless_p ? SPARC_O7_REGNUM : SPARC_I7_REGNUM;
769 pc += frame_unwind_register_unsigned (next_frame, regnum) + 8;
770 store_unsigned_integer (valuep, 4, pc);
c906108c 771 }
c906108c
SS
772 return;
773 }
774
42cdca6c
MK
775 /* Handle StackGhost. */
776 {
777 ULONGEST wcookie = sparc_fetch_wcookie ();
778
779 if (wcookie != 0 && !cache->frameless_p && regnum == SPARC_I7_REGNUM)
780 {
781 *optimizedp = 0;
782 *lvalp = not_lval;
783 *addrp = 0;
784 *realnump = -1;
785 if (valuep)
786 {
787 CORE_ADDR addr = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
7d34766b 788 ULONGEST i7;
42cdca6c
MK
789
790 /* Read the value in from memory. */
7d34766b
MK
791 i7 = get_frame_memory_unsigned (next_frame, addr, 4);
792 store_unsigned_integer (valuep, 4, i7 ^ wcookie);
42cdca6c
MK
793 }
794 return;
795 }
796 }
797
386c036b
MK
798 /* The previous frame's `local' and `in' registers have been saved
799 in the register save area. */
800 if (!cache->frameless_p
801 && regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM)
c906108c 802 {
386c036b
MK
803 *optimizedp = 0;
804 *lvalp = lval_memory;
805 *addrp = cache->base + (regnum - SPARC_L0_REGNUM) * 4;
806 *realnump = -1;
807 if (valuep)
c906108c 808 {
386c036b
MK
809 struct gdbarch *gdbarch = get_frame_arch (next_frame);
810
811 /* Read the value in from memory. */
812 read_memory (*addrp, valuep, register_size (gdbarch, regnum));
c906108c 813 }
386c036b
MK
814 return;
815 }
c906108c 816
386c036b
MK
817 /* The previous frame's `out' registers are accessable as the
818 current frame's `in' registers. */
819 if (!cache->frameless_p
820 && regnum >= SPARC_O0_REGNUM && regnum <= SPARC_O7_REGNUM)
821 regnum += (SPARC_I0_REGNUM - SPARC_O0_REGNUM);
5af923b0 822
00b25ff3
AC
823 *optimizedp = 0;
824 *lvalp = lval_register;
825 *addrp = 0;
826 *realnump = regnum;
827 if (valuep)
828 frame_unwind_register (next_frame, (*realnump), valuep);
386c036b 829}
c906108c 830
386c036b
MK
831static const struct frame_unwind sparc32_frame_unwind =
832{
833 NORMAL_FRAME,
834 sparc32_frame_this_id,
835 sparc32_frame_prev_register
836};
837
838static const struct frame_unwind *
839sparc32_frame_sniffer (struct frame_info *next_frame)
840{
841 return &sparc32_frame_unwind;
c906108c 842}
386c036b 843\f
c906108c 844
386c036b
MK
845static CORE_ADDR
846sparc32_frame_base_address (struct frame_info *next_frame, void **this_cache)
847{
848 struct sparc_frame_cache *cache =
849 sparc32_frame_cache (next_frame, this_cache);
c906108c 850
386c036b
MK
851 return cache->base;
852}
c906108c 853
386c036b
MK
854static const struct frame_base sparc32_frame_base =
855{
856 &sparc32_frame_unwind,
857 sparc32_frame_base_address,
858 sparc32_frame_base_address,
859 sparc32_frame_base_address
860};
c906108c 861
386c036b
MK
862static struct frame_id
863sparc_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
864{
865 CORE_ADDR sp;
5af923b0 866
386c036b
MK
867 sp = frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM);
868 return frame_id_build (sp, frame_pc_unwind (next_frame));
869}
870\f
c906108c 871
386c036b
MK
872/* Extract from an array REGBUF containing the (raw) register state, a
873 function return value of TYPE, and copy that into VALBUF. */
5af923b0 874
386c036b
MK
875static void
876sparc32_extract_return_value (struct type *type, struct regcache *regcache,
877 void *valbuf)
878{
879 int len = TYPE_LENGTH (type);
880 char buf[8];
c906108c 881
386c036b
MK
882 gdb_assert (!sparc_structure_or_union_p (type));
883 gdb_assert (!(sparc_floating_p (type) && len == 16));
c906108c 884
386c036b 885 if (sparc_floating_p (type))
5af923b0 886 {
386c036b
MK
887 /* Floating return values. */
888 regcache_cooked_read (regcache, SPARC_F0_REGNUM, buf);
889 if (len > 4)
890 regcache_cooked_read (regcache, SPARC_F1_REGNUM, buf + 4);
891 memcpy (valbuf, buf, len);
5af923b0
MS
892 }
893 else
894 {
386c036b
MK
895 /* Integral and pointer return values. */
896 gdb_assert (sparc_integral_or_pointer_p (type));
c906108c 897
386c036b
MK
898 regcache_cooked_read (regcache, SPARC_O0_REGNUM, buf);
899 if (len > 4)
900 {
901 regcache_cooked_read (regcache, SPARC_O1_REGNUM, buf + 4);
902 gdb_assert (len == 8);
903 memcpy (valbuf, buf, 8);
904 }
905 else
906 {
907 /* Just stripping off any unused bytes should preserve the
908 signed-ness just fine. */
909 memcpy (valbuf, buf + 4 - len, len);
910 }
911 }
912}
c906108c 913
386c036b
MK
914/* Write into the appropriate registers a function return value stored
915 in VALBUF of type TYPE. */
c906108c 916
386c036b
MK
917static void
918sparc32_store_return_value (struct type *type, struct regcache *regcache,
919 const void *valbuf)
920{
921 int len = TYPE_LENGTH (type);
922 char buf[8];
c906108c 923
386c036b
MK
924 gdb_assert (!sparc_structure_or_union_p (type));
925 gdb_assert (!(sparc_floating_p (type) && len == 16));
c906108c 926
386c036b
MK
927 if (sparc_floating_p (type))
928 {
929 /* Floating return values. */
930 memcpy (buf, valbuf, len);
931 regcache_cooked_write (regcache, SPARC_F0_REGNUM, buf);
932 if (len > 4)
933 regcache_cooked_write (regcache, SPARC_F1_REGNUM, buf + 4);
934 }
935 else
c906108c 936 {
386c036b
MK
937 /* Integral and pointer return values. */
938 gdb_assert (sparc_integral_or_pointer_p (type));
939
940 if (len > 4)
2757dd86 941 {
386c036b
MK
942 gdb_assert (len == 8);
943 memcpy (buf, valbuf, 8);
944 regcache_cooked_write (regcache, SPARC_O1_REGNUM, buf + 4);
2757dd86
AC
945 }
946 else
947 {
386c036b
MK
948 /* ??? Do we need to do any sign-extension here? */
949 memcpy (buf + 4 - len, valbuf, len);
2757dd86 950 }
386c036b 951 regcache_cooked_write (regcache, SPARC_O0_REGNUM, buf);
c906108c
SS
952 }
953}
954
b9d4c5ed
MK
955static enum return_value_convention
956sparc32_return_value (struct gdbarch *gdbarch, struct type *type,
957 struct regcache *regcache, void *readbuf,
958 const void *writebuf)
959{
960 if (sparc_structure_or_union_p (type)
961 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16))
962 return RETURN_VALUE_STRUCT_CONVENTION;
963
964 if (readbuf)
965 sparc32_extract_return_value (type, regcache, readbuf);
966 if (writebuf)
967 sparc32_store_return_value (type, regcache, writebuf);
968
969 return RETURN_VALUE_REGISTER_CONVENTION;
970}
971
931aecf5
AC
972#if 0
973/* NOTE: cagney/2004-01-17: For the moment disable this method. The
974 architecture and CORE-gdb will need new code (and a replacement for
74055713
AC
975 DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS) before this can be made to
976 work robustly. Here is a possible function signature: */
931aecf5
AC
977/* NOTE: cagney/2004-01-17: So far only the 32-bit SPARC ABI has been
978 identifed as having a way to robustly recover the address of a
979 struct-convention return-value (after the function has returned).
980 For all other ABIs so far examined, the calling convention makes no
981 guarenteed that the register containing the return-value will be
982 preserved and hence that the return-value's address can be
983 recovered. */
386c036b
MK
984/* Extract from REGCACHE, which contains the (raw) register state, the
985 address in which a function should return its structure value, as a
986 CORE_ADDR. */
c906108c 987
386c036b 988static CORE_ADDR
ca9d58e9 989sparc32_extract_struct_value_address (struct regcache *regcache)
386c036b 990{
9515395e 991 ULONGEST sp;
c906108c 992
9515395e
MK
993 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
994 return read_memory_unsigned_integer (sp + 64, 4);
386c036b 995}
931aecf5 996#endif
c906108c 997
386c036b
MK
998static int
999sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type)
c906108c 1000{
386c036b
MK
1001 return (sparc_structure_or_union_p (type)
1002 || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16));
1003}
c906108c 1004
386c036b
MK
1005\f
1006/* The SPARC Architecture doesn't have hardware single-step support,
1007 and most operating systems don't implement it either, so we provide
1008 software single-step mechanism. */
c906108c 1009
386c036b
MK
1010static CORE_ADDR
1011sparc_analyze_control_transfer (CORE_ADDR pc, CORE_ADDR *npc)
1012{
1013 unsigned long insn = sparc_fetch_instruction (pc);
1014 int conditional_p = X_COND (insn) & 0x7;
1015 int branch_p = 0;
1016 long offset = 0; /* Must be signed for sign-extend. */
c906108c 1017
386c036b 1018 if (X_OP (insn) == 0 && X_OP2 (insn) == 3 && (insn & 0x1000000) == 0)
c906108c 1019 {
386c036b
MK
1020 /* Branch on Integer Register with Prediction (BPr). */
1021 branch_p = 1;
1022 conditional_p = 1;
c906108c 1023 }
386c036b 1024 else if (X_OP (insn) == 0 && X_OP2 (insn) == 6)
c906108c 1025 {
386c036b
MK
1026 /* Branch on Floating-Point Condition Codes (FBfcc). */
1027 branch_p = 1;
1028 offset = 4 * X_DISP22 (insn);
c906108c 1029 }
386c036b
MK
1030 else if (X_OP (insn) == 0 && X_OP2 (insn) == 5)
1031 {
1032 /* Branch on Floating-Point Condition Codes with Prediction
1033 (FBPfcc). */
1034 branch_p = 1;
1035 offset = 4 * X_DISP19 (insn);
1036 }
1037 else if (X_OP (insn) == 0 && X_OP2 (insn) == 2)
1038 {
1039 /* Branch on Integer Condition Codes (Bicc). */
1040 branch_p = 1;
1041 offset = 4 * X_DISP22 (insn);
1042 }
1043 else if (X_OP (insn) == 0 && X_OP2 (insn) == 1)
c906108c 1044 {
386c036b
MK
1045 /* Branch on Integer Condition Codes with Prediction (BPcc). */
1046 branch_p = 1;
1047 offset = 4 * X_DISP19 (insn);
c906108c 1048 }
386c036b
MK
1049
1050 /* FIXME: Handle DONE and RETRY instructions. */
1051
1052 /* FIXME: Handle the Trap instruction. */
1053
1054 if (branch_p)
c906108c 1055 {
386c036b 1056 if (conditional_p)
c906108c 1057 {
386c036b
MK
1058 /* For conditional branches, return nPC + 4 iff the annul
1059 bit is 1. */
1060 return (X_A (insn) ? *npc + 4 : 0);
c906108c
SS
1061 }
1062 else
1063 {
386c036b
MK
1064 /* For unconditional branches, return the target if its
1065 specified condition is "always" and return nPC + 4 if the
1066 condition is "never". If the annul bit is 1, set *NPC to
1067 zero. */
1068 if (X_COND (insn) == 0x0)
1069 pc = *npc, offset = 4;
1070 if (X_A (insn))
1071 *npc = 0;
1072
1073 gdb_assert (offset != 0);
1074 return pc + offset;
c906108c
SS
1075 }
1076 }
386c036b
MK
1077
1078 return 0;
c906108c
SS
1079}
1080
386c036b
MK
1081void
1082sparc_software_single_step (enum target_signal sig, int insert_breakpoints_p)
1083{
1084 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1085 static CORE_ADDR npc, nnpc;
1086 static char npc_save[4], nnpc_save[4];
c906108c 1087
386c036b
MK
1088 if (insert_breakpoints_p)
1089 {
8c3900e4 1090 CORE_ADDR pc, orig_npc;
c906108c 1091
386c036b 1092 pc = sparc_address_from_register (tdep->pc_regnum);
8c3900e4 1093 orig_npc = npc = sparc_address_from_register (tdep->npc_regnum);
c906108c 1094
386c036b
MK
1095 /* Analyze the instruction at PC. */
1096 nnpc = sparc_analyze_control_transfer (pc, &npc);
1097 if (npc != 0)
1098 target_insert_breakpoint (npc, npc_save);
1099 if (nnpc != 0)
1100 target_insert_breakpoint (nnpc, nnpc_save);
c906108c 1101
386c036b 1102 /* Assert that we have set at least one breakpoint, and that
8c3900e4
DJ
1103 they're not set at the same spot - unless we're going
1104 from here straight to NULL, i.e. a call or jump to 0. */
1105 gdb_assert (npc != 0 || nnpc != 0 || orig_npc == 0);
1106 gdb_assert (nnpc != npc || orig_npc == 0);
60054393 1107 }
386c036b 1108 else
c906108c 1109 {
386c036b
MK
1110 if (npc != 0)
1111 target_remove_breakpoint (npc, npc_save);
1112 if (nnpc != 0)
1113 target_remove_breakpoint (nnpc, nnpc_save);
c906108c 1114 }
386c036b
MK
1115}
1116
1117static void
1118sparc_write_pc (CORE_ADDR pc, ptid_t ptid)
1119{
1120 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1121
1122 write_register_pid (tdep->pc_regnum, pc, ptid);
1123 write_register_pid (tdep->npc_regnum, pc + 4, ptid);
1124}
1125\f
1126/* Unglobalize NAME. */
1127
1128char *
1129sparc_stabs_unglobalize_name (char *name)
1130{
1131 /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop,
1132 SunPRO) convert file static variables into global values, a
1133 process known as globalization. In order to do this, the
1134 compiler will create a unique prefix and prepend it to each file
1135 static variable. For static variables within a function, this
1136 globalization prefix is followed by the function name (nested
1137 static variables within a function are supposed to generate a
1138 warning message, and are left alone). The procedure is
1139 documented in the Stabs Interface Manual, which is distrubuted
1140 with the compilers, although version 4.0 of the manual seems to
1141 be incorrect in some places, at least for SPARC. The
1142 globalization prefix is encoded into an N_OPT stab, with the form
1143 "G=<prefix>". The globalization prefix always seems to start
1144 with a dollar sign '$'; a dot '.' is used as a seperator. So we
1145 simply strip everything up until the last dot. */
c906108c 1146
386c036b 1147 if (name[0] == '$')
c906108c 1148 {
386c036b
MK
1149 char *p = strrchr (name, '.');
1150 if (p)
1151 return p + 1;
c906108c 1152 }
c906108c 1153
386c036b
MK
1154 return name;
1155}
1156\f
5af923b0 1157
a54124c5
MK
1158/* Return the appropriate register set for the core section identified
1159 by SECT_NAME and SECT_SIZE. */
1160
1161const struct regset *
1162sparc_regset_from_core_section (struct gdbarch *gdbarch,
1163 const char *sect_name, size_t sect_size)
1164{
1165 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1166
c558d81a 1167 if (strcmp (sect_name, ".reg") == 0 && sect_size >= tdep->sizeof_gregset)
a54124c5
MK
1168 return tdep->gregset;
1169
c558d81a 1170 if (strcmp (sect_name, ".reg2") == 0 && sect_size >= tdep->sizeof_fpregset)
a54124c5
MK
1171 return tdep->fpregset;
1172
1173 return NULL;
1174}
1175\f
1176
386c036b
MK
1177static struct gdbarch *
1178sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1179{
1180 struct gdbarch_tdep *tdep;
1181 struct gdbarch *gdbarch;
c906108c 1182
386c036b
MK
1183 /* If there is already a candidate, use it. */
1184 arches = gdbarch_list_lookup_by_info (arches, &info);
1185 if (arches != NULL)
1186 return arches->gdbarch;
c906108c 1187
386c036b
MK
1188 /* Allocate space for the new architecture. */
1189 tdep = XMALLOC (struct gdbarch_tdep);
1190 gdbarch = gdbarch_alloc (&info, tdep);
5af923b0 1191
386c036b
MK
1192 tdep->pc_regnum = SPARC32_PC_REGNUM;
1193 tdep->npc_regnum = SPARC32_NPC_REGNUM;
a54124c5 1194 tdep->gregset = NULL;
c558d81a 1195 tdep->sizeof_gregset = 0;
a54124c5 1196 tdep->fpregset = NULL;
c558d81a 1197 tdep->sizeof_fpregset = 0;
386c036b
MK
1198 tdep->plt_entry_size = 0;
1199
1200 set_gdbarch_long_double_bit (gdbarch, 128);
1201 set_gdbarch_long_double_format (gdbarch, &floatformat_sparc_quad);
1202
1203 set_gdbarch_num_regs (gdbarch, SPARC32_NUM_REGS);
1204 set_gdbarch_register_name (gdbarch, sparc32_register_name);
1205 set_gdbarch_register_type (gdbarch, sparc32_register_type);
1206 set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
1207 set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
1208 set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
1209
1210 /* Register numbers of various important registers. */
1211 set_gdbarch_sp_regnum (gdbarch, SPARC_SP_REGNUM); /* %sp */
1212 set_gdbarch_pc_regnum (gdbarch, SPARC32_PC_REGNUM); /* %pc */
1213 set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */
1214
1215 /* Call dummy code. */
1216 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
1217 set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code);
1218 set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);
1219
b9d4c5ed 1220 set_gdbarch_return_value (gdbarch, sparc32_return_value);
386c036b
MK
1221 set_gdbarch_stabs_argument_has_addr
1222 (gdbarch, sparc32_stabs_argument_has_addr);
1223
1224 set_gdbarch_skip_prologue (gdbarch, sparc32_skip_prologue);
1225
1226 /* Stack grows downward. */
1227 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
c906108c 1228
386c036b 1229 set_gdbarch_breakpoint_from_pc (gdbarch, sparc_breakpoint_from_pc);
c906108c 1230
386c036b 1231 set_gdbarch_frame_args_skip (gdbarch, 8);
5af923b0 1232
386c036b 1233 set_gdbarch_print_insn (gdbarch, print_insn_sparc);
c906108c 1234
386c036b
MK
1235 set_gdbarch_software_single_step (gdbarch, sparc_software_single_step);
1236 set_gdbarch_write_pc (gdbarch, sparc_write_pc);
c906108c 1237
386c036b 1238 set_gdbarch_unwind_dummy_id (gdbarch, sparc_unwind_dummy_id);
c906108c 1239
386c036b 1240 set_gdbarch_unwind_pc (gdbarch, sparc_unwind_pc);
c906108c 1241
386c036b
MK
1242 frame_base_set_default (gdbarch, &sparc32_frame_base);
1243
1244 /* Hook in ABI-specific overrides, if they have been registered. */
1245 gdbarch_init_osabi (info, gdbarch);
c906108c 1246
386c036b 1247 frame_unwind_append_sniffer (gdbarch, sparc32_frame_sniffer);
c906108c 1248
a54124c5 1249 /* If we have register sets, enable the generic core file support. */
4c72d57a 1250 if (tdep->gregset)
a54124c5
MK
1251 set_gdbarch_regset_from_core_section (gdbarch,
1252 sparc_regset_from_core_section);
1253
386c036b
MK
1254 return gdbarch;
1255}
1256\f
1257/* Helper functions for dealing with register windows. */
1258
1259void
1260sparc_supply_rwindow (struct regcache *regcache, CORE_ADDR sp, int regnum)
c906108c 1261{
386c036b
MK
1262 int offset = 0;
1263 char buf[8];
1264 int i;
1265
1266 if (sp & 1)
1267 {
1268 /* Registers are 64-bit. */
1269 sp += BIAS;
c906108c 1270
386c036b
MK
1271 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1272 {
1273 if (regnum == i || regnum == -1)
1274 {
1275 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1276 regcache_raw_supply (regcache, i, buf);
1277 }
1278 }
1279 }
1280 else
c906108c 1281 {
386c036b
MK
1282 /* Registers are 32-bit. Toss any sign-extension of the stack
1283 pointer. */
1284 sp &= 0xffffffffUL;
c906108c 1285
386c036b
MK
1286 /* Clear out the top half of the temporary buffer, and put the
1287 register value in the bottom half if we're in 64-bit mode. */
1288 if (gdbarch_ptr_bit (current_gdbarch) == 64)
c906108c 1289 {
386c036b
MK
1290 memset (buf, 0, 4);
1291 offset = 4;
1292 }
c906108c 1293
386c036b
MK
1294 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1295 {
1296 if (regnum == i || regnum == -1)
1297 {
1298 target_read_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1299 buf + offset, 4);
42cdca6c
MK
1300
1301 /* Handle StackGhost. */
1302 if (i == SPARC_I7_REGNUM)
1303 {
1304 ULONGEST wcookie = sparc_fetch_wcookie ();
7d34766b 1305 ULONGEST i7 = extract_unsigned_integer (buf + offset, 4);
42cdca6c 1306
7d34766b 1307 store_unsigned_integer (buf + offset, 4, i7 ^ wcookie);
42cdca6c
MK
1308 }
1309
386c036b
MK
1310 regcache_raw_supply (regcache, i, buf);
1311 }
c906108c
SS
1312 }
1313 }
c906108c 1314}
c906108c
SS
1315
1316void
386c036b
MK
1317sparc_collect_rwindow (const struct regcache *regcache,
1318 CORE_ADDR sp, int regnum)
c906108c 1319{
386c036b
MK
1320 int offset = 0;
1321 char buf[8];
1322 int i;
5af923b0 1323
386c036b 1324 if (sp & 1)
5af923b0 1325 {
386c036b
MK
1326 /* Registers are 64-bit. */
1327 sp += BIAS;
c906108c 1328
386c036b
MK
1329 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1330 {
1331 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1332 {
1333 regcache_raw_collect (regcache, i, buf);
1334 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 8), buf, 8);
1335 }
1336 }
5af923b0
MS
1337 }
1338 else
1339 {
386c036b
MK
1340 /* Registers are 32-bit. Toss any sign-extension of the stack
1341 pointer. */
1342 sp &= 0xffffffffUL;
1343
1344 /* Only use the bottom half if we're in 64-bit mode. */
1345 if (gdbarch_ptr_bit (current_gdbarch) == 64)
1346 offset = 4;
1347
1348 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1349 {
1350 if (regnum == -1 || regnum == SPARC_SP_REGNUM || regnum == i)
1351 {
1352 regcache_raw_collect (regcache, i, buf);
42cdca6c
MK
1353
1354 /* Handle StackGhost. */
1355 if (i == SPARC_I7_REGNUM)
1356 {
1357 ULONGEST wcookie = sparc_fetch_wcookie ();
7d34766b 1358 ULONGEST i7 = extract_unsigned_integer (buf + offset, 4);
42cdca6c 1359
7d34766b 1360 store_unsigned_integer (buf + offset, 4, i7 ^ wcookie);
42cdca6c
MK
1361 }
1362
386c036b
MK
1363 target_write_memory (sp + ((i - SPARC_L0_REGNUM) * 4),
1364 buf + offset, 4);
1365 }
1366 }
5af923b0 1367 }
c906108c
SS
1368}
1369
386c036b
MK
1370/* Helper functions for dealing with register sets. */
1371
c906108c 1372void
386c036b
MK
1373sparc32_supply_gregset (const struct sparc_gregset *gregset,
1374 struct regcache *regcache,
1375 int regnum, const void *gregs)
c906108c 1376{
386c036b
MK
1377 const char *regs = gregs;
1378 int i;
5af923b0 1379
386c036b
MK
1380 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1381 regcache_raw_supply (regcache, SPARC32_PSR_REGNUM,
1382 regs + gregset->r_psr_offset);
c906108c 1383
386c036b
MK
1384 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1385 regcache_raw_supply (regcache, SPARC32_PC_REGNUM,
1386 regs + gregset->r_pc_offset);
5af923b0 1387
386c036b
MK
1388 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1389 regcache_raw_supply (regcache, SPARC32_NPC_REGNUM,
1390 regs + gregset->r_npc_offset);
5af923b0 1391
386c036b
MK
1392 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1393 regcache_raw_supply (regcache, SPARC32_Y_REGNUM,
1394 regs + gregset->r_y_offset);
5af923b0 1395
386c036b
MK
1396 if (regnum == SPARC_G0_REGNUM || regnum == -1)
1397 regcache_raw_supply (regcache, SPARC_G0_REGNUM, NULL);
5af923b0 1398
386c036b 1399 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
c906108c 1400 {
386c036b
MK
1401 int offset = gregset->r_g1_offset;
1402
1403 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1404 {
1405 if (regnum == i || regnum == -1)
1406 regcache_raw_supply (regcache, i, regs + offset);
1407 offset += 4;
1408 }
c906108c 1409 }
386c036b
MK
1410
1411 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
c906108c 1412 {
386c036b
MK
1413 /* Not all of the register set variants include Locals and
1414 Inputs. For those that don't, we read them off the stack. */
1415 if (gregset->r_l0_offset == -1)
1416 {
1417 ULONGEST sp;
1418
1419 regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, &sp);
1420 sparc_supply_rwindow (regcache, sp, regnum);
1421 }
1422 else
1423 {
1424 int offset = gregset->r_l0_offset;
1425
1426 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1427 {
1428 if (regnum == i || regnum == -1)
1429 regcache_raw_supply (regcache, i, regs + offset);
1430 offset += 4;
1431 }
1432 }
c906108c
SS
1433 }
1434}
1435
c5aa993b 1436void
386c036b
MK
1437sparc32_collect_gregset (const struct sparc_gregset *gregset,
1438 const struct regcache *regcache,
1439 int regnum, void *gregs)
c906108c 1440{
386c036b
MK
1441 char *regs = gregs;
1442 int i;
c5aa993b 1443
386c036b
MK
1444 if (regnum == SPARC32_PSR_REGNUM || regnum == -1)
1445 regcache_raw_collect (regcache, SPARC32_PSR_REGNUM,
1446 regs + gregset->r_psr_offset);
60054393 1447
386c036b
MK
1448 if (regnum == SPARC32_PC_REGNUM || regnum == -1)
1449 regcache_raw_collect (regcache, SPARC32_PC_REGNUM,
1450 regs + gregset->r_pc_offset);
1451
1452 if (regnum == SPARC32_NPC_REGNUM || regnum == -1)
1453 regcache_raw_collect (regcache, SPARC32_NPC_REGNUM,
1454 regs + gregset->r_npc_offset);
5af923b0 1455
386c036b
MK
1456 if (regnum == SPARC32_Y_REGNUM || regnum == -1)
1457 regcache_raw_collect (regcache, SPARC32_Y_REGNUM,
1458 regs + gregset->r_y_offset);
1459
1460 if ((regnum >= SPARC_G1_REGNUM && regnum <= SPARC_O7_REGNUM) || regnum == -1)
5af923b0 1461 {
386c036b
MK
1462 int offset = gregset->r_g1_offset;
1463
1464 /* %g0 is always zero. */
1465 for (i = SPARC_G1_REGNUM; i <= SPARC_O7_REGNUM; i++)
1466 {
1467 if (regnum == i || regnum == -1)
1468 regcache_raw_collect (regcache, i, regs + offset);
1469 offset += 4;
1470 }
5af923b0 1471 }
386c036b
MK
1472
1473 if ((regnum >= SPARC_L0_REGNUM && regnum <= SPARC_I7_REGNUM) || regnum == -1)
5af923b0 1474 {
386c036b
MK
1475 /* Not all of the register set variants include Locals and
1476 Inputs. For those that don't, we read them off the stack. */
1477 if (gregset->r_l0_offset != -1)
1478 {
1479 int offset = gregset->r_l0_offset;
1480
1481 for (i = SPARC_L0_REGNUM; i <= SPARC_I7_REGNUM; i++)
1482 {
1483 if (regnum == i || regnum == -1)
1484 regcache_raw_collect (regcache, i, regs + offset);
1485 offset += 4;
1486 }
1487 }
5af923b0 1488 }
c906108c
SS
1489}
1490
c906108c 1491void
386c036b
MK
1492sparc32_supply_fpregset (struct regcache *regcache,
1493 int regnum, const void *fpregs)
c906108c 1494{
386c036b
MK
1495 const char *regs = fpregs;
1496 int i;
60054393 1497
386c036b 1498 for (i = 0; i < 32; i++)
c906108c 1499 {
386c036b
MK
1500 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
1501 regcache_raw_supply (regcache, SPARC_F0_REGNUM + i, regs + (i * 4));
c906108c 1502 }
5af923b0 1503
386c036b
MK
1504 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
1505 regcache_raw_supply (regcache, SPARC32_FSR_REGNUM, regs + (32 * 4) + 4);
c906108c
SS
1506}
1507
386c036b
MK
1508void
1509sparc32_collect_fpregset (const struct regcache *regcache,
1510 int regnum, void *fpregs)
c906108c 1511{
386c036b
MK
1512 char *regs = fpregs;
1513 int i;
c906108c 1514
386c036b
MK
1515 for (i = 0; i < 32; i++)
1516 {
1517 if (regnum == (SPARC_F0_REGNUM + i) || regnum == -1)
1518 regcache_raw_collect (regcache, SPARC_F0_REGNUM + i, regs + (i * 4));
1519 }
c906108c 1520
386c036b
MK
1521 if (regnum == SPARC32_FSR_REGNUM || regnum == -1)
1522 regcache_raw_collect (regcache, SPARC32_FSR_REGNUM, regs + (32 * 4) + 4);
c906108c 1523}
c906108c 1524\f
c906108c 1525
386c036b 1526/* SunOS 4. */
c906108c 1527
386c036b
MK
1528/* From <machine/reg.h>. */
1529const struct sparc_gregset sparc32_sunos4_gregset =
c906108c 1530{
386c036b
MK
1531 0 * 4, /* %psr */
1532 1 * 4, /* %pc */
1533 2 * 4, /* %npc */
1534 3 * 4, /* %y */
1535 -1, /* %wim */
1536 -1, /* %tbr */
1537 4 * 4, /* %g1 */
1538 -1 /* %l0 */
1539};
1540\f
c906108c 1541
386c036b
MK
1542/* Provide a prototype to silence -Wmissing-prototypes. */
1543void _initialize_sparc_tdep (void);
c906108c
SS
1544
1545void
386c036b 1546_initialize_sparc_tdep (void)
c906108c 1547{
386c036b 1548 register_gdbarch_init (bfd_arch_sparc, sparc32_gdbarch_init);
ef3cf062 1549}
This page took 0.944727 seconds and 4 git commands to generate.