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