1 /* Native support code for PPC AIX, for GDB the GNU debugger.
3 Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "gdb_string.h"
24 #include "gdb_assert.h"
34 #include "breakpoint.h"
35 #include "rs6000-tdep.h"
38 /* Hook for determining the TOC address when calling functions in the
39 inferior under AIX. The initialization code in rs6000-nat.c sets
40 this hook to point to find_toc_address. */
42 CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
44 /* If the kernel has to deliver a signal, it pushes a sigcontext
45 structure on the stack and then calls the signal handler, passing
46 the address of the sigcontext in an argument register. Usually
47 the signal handler doesn't save this register, so we have to
48 access the sigcontext structure via an offset from the signal handler
50 The following constants were determined by experimentation on AIX 3.2. */
51 #define SIG_FRAME_PC_OFFSET 96
52 #define SIG_FRAME_LR_OFFSET 108
53 #define SIG_FRAME_FP_OFFSET 284
56 /* Core file support. */
58 static struct ppc_reg_offsets rs6000_aix32_reg_offsets =
60 /* General-purpose registers. */
72 /* Floating-point registers. */
74 56, /* fpscr_offset */
77 /* AltiVec registers. */
80 -1 /* vrsave_offset */
83 static struct ppc_reg_offsets rs6000_aix64_reg_offsets =
85 /* General-purpose registers. */
97 /* Floating-point registers. */
99 296, /* fpscr_offset */
102 /* AltiVec registers. */
104 -1, /* vscr_offset */
105 -1 /* vrsave_offset */
109 /* Supply register REGNUM in the general-purpose register set REGSET
110 from the buffer specified by GREGS and LEN to register cache
111 REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
114 rs6000_aix_supply_regset (const struct regset *regset,
115 struct regcache *regcache, int regnum,
116 const void *gregs, size_t len)
118 ppc_supply_gregset (regset, regcache, regnum, gregs, len);
119 ppc_supply_fpregset (regset, regcache, regnum, gregs, len);
122 /* Collect register REGNUM in the general-purpose register set
123 REGSET. from register cache REGCACHE into the buffer specified by
124 GREGS and LEN. If REGNUM is -1, do this for all registers in
128 rs6000_aix_collect_regset (const struct regset *regset,
129 const struct regcache *regcache, int regnum,
130 void *gregs, size_t len)
132 ppc_collect_gregset (regset, regcache, regnum, gregs, len);
133 ppc_collect_fpregset (regset, regcache, regnum, gregs, len);
136 /* AIX register set. */
138 static struct regset rs6000_aix32_regset =
140 &rs6000_aix32_reg_offsets,
141 rs6000_aix_supply_regset,
142 rs6000_aix_collect_regset,
145 static struct regset rs6000_aix64_regset =
147 &rs6000_aix64_reg_offsets,
148 rs6000_aix_supply_regset,
149 rs6000_aix_collect_regset,
152 /* Return the appropriate register set for the core section identified
153 by SECT_NAME and SECT_SIZE. */
155 static const struct regset *
156 rs6000_aix_regset_from_core_section (struct gdbarch *gdbarch,
157 const char *sect_name, size_t sect_size)
159 if (gdbarch_tdep (gdbarch)->wordsize == 4)
161 if (strcmp (sect_name, ".reg") == 0 && sect_size >= 592)
162 return &rs6000_aix32_regset;
166 if (strcmp (sect_name, ".reg") == 0 && sect_size >= 576)
167 return &rs6000_aix64_regset;
174 /* Pass the arguments in either registers, or in the stack. In RS/6000,
175 the first eight words of the argument list (that might be less than
176 eight parameters if some parameters occupy more than one word) are
177 passed in r3..r10 registers. float and double parameters are
178 passed in fpr's, in addition to that. Rest of the parameters if any
179 are passed in user stack. There might be cases in which half of the
180 parameter is copied into registers, the other half is pushed into
183 Stack must be aligned on 64-bit boundaries when synthesizing
186 If the function is returning a structure, then the return address is passed
187 in r3, then the first 7 words of the parameters can be passed in registers,
191 rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
192 struct regcache *regcache, CORE_ADDR bp_addr,
193 int nargs, struct value **args, CORE_ADDR sp,
194 int struct_return, CORE_ADDR struct_addr)
196 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
197 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
200 int argno; /* current argument number */
201 int argbytes; /* current argument byte */
202 gdb_byte tmp_buffer[50];
203 int f_argno = 0; /* current floating point argno */
204 int wordsize = gdbarch_tdep (gdbarch)->wordsize;
205 CORE_ADDR func_addr = find_function_addr (function, NULL);
207 struct value *arg = 0;
212 /* The calling convention this function implements assumes the
213 processor has floating-point registers. We shouldn't be using it
214 on PPC variants that lack them. */
215 gdb_assert (ppc_floating_point_unit_p (gdbarch));
217 /* The first eight words of ther arguments are passed in registers.
218 Copy them appropriately. */
221 /* If the function is returning a `struct', then the first word
222 (which will be passed in r3) is used for struct return address.
223 In that case we should advance one word and start from r4
224 register to copy parameters. */
227 regcache_raw_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
233 effectively indirect call... gcc does...
235 return_val example( float, int);
238 float in fp0, int in r3
239 offset of stack on overflow 8/16
240 for varargs, must go by type.
242 float in r3&r4, int in r5
243 offset of stack on overflow different
245 return in r3 or f0. If no float, must study how gcc emulates floats;
246 pay attention to arg promotion.
247 User may have to cast\args to handle promotion correctly
248 since gdb won't know if prototype supplied or not.
251 for (argno = 0, argbytes = 0; argno < nargs && ii < 8; ++ii)
253 int reg_size = register_size (gdbarch, ii + 3);
256 type = check_typedef (value_type (arg));
257 len = TYPE_LENGTH (type);
259 if (TYPE_CODE (type) == TYPE_CODE_FLT)
262 /* Floating point arguments are passed in fpr's, as well as gpr's.
263 There are 13 fpr's reserved for passing parameters. At this point
264 there is no way we would run out of them. */
266 gdb_assert (len <= 8);
268 regcache_cooked_write (regcache,
269 tdep->ppc_fp0_regnum + 1 + f_argno,
270 value_contents (arg));
277 /* Argument takes more than one register. */
278 while (argbytes < len)
280 gdb_byte word[MAX_REGISTER_SIZE];
281 memset (word, 0, reg_size);
283 ((char *) value_contents (arg)) + argbytes,
284 (len - argbytes) > reg_size
285 ? reg_size : len - argbytes);
286 regcache_cooked_write (regcache,
287 tdep->ppc_gp0_regnum + 3 + ii,
289 ++ii, argbytes += reg_size;
292 goto ran_out_of_registers_for_arguments;
299 /* Argument can fit in one register. No problem. */
300 int adj = gdbarch_byte_order (gdbarch)
301 == BFD_ENDIAN_BIG ? reg_size - len : 0;
302 gdb_byte word[MAX_REGISTER_SIZE];
304 memset (word, 0, reg_size);
305 memcpy (word, value_contents (arg), len);
306 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3 +ii, word);
311 ran_out_of_registers_for_arguments:
313 regcache_cooked_read_unsigned (regcache,
314 gdbarch_sp_regnum (gdbarch),
317 /* Location for 8 parameters are always reserved. */
320 /* Another six words for back chain, TOC register, link register, etc. */
323 /* Stack pointer must be quadword aligned. */
326 /* If there are more arguments, allocate space for them in
327 the stack, then push them starting from the ninth one. */
329 if ((argno < nargs) || argbytes)
335 space += ((len - argbytes + 3) & -4);
341 for (; jj < nargs; ++jj)
343 struct value *val = args[jj];
344 space += ((TYPE_LENGTH (value_type (val))) + 3) & -4;
347 /* Add location required for the rest of the parameters. */
348 space = (space + 15) & -16;
351 /* This is another instance we need to be concerned about
352 securing our stack space. If we write anything underneath %sp
353 (r1), we might conflict with the kernel who thinks he is free
354 to use this area. So, update %sp first before doing anything
357 regcache_raw_write_signed (regcache,
358 gdbarch_sp_regnum (gdbarch), sp);
360 /* If the last argument copied into the registers didn't fit there
361 completely, push the rest of it into stack. */
365 write_memory (sp + 24 + (ii * 4),
366 value_contents (arg) + argbytes,
369 ii += ((len - argbytes + 3) & -4) / 4;
372 /* Push the rest of the arguments into stack. */
373 for (; argno < nargs; ++argno)
377 type = check_typedef (value_type (arg));
378 len = TYPE_LENGTH (type);
381 /* Float types should be passed in fpr's, as well as in the
383 if (TYPE_CODE (type) == TYPE_CODE_FLT && f_argno < 13)
386 gdb_assert (len <= 8);
388 regcache_cooked_write (regcache,
389 tdep->ppc_fp0_regnum + 1 + f_argno,
390 value_contents (arg));
394 write_memory (sp + 24 + (ii * 4), value_contents (arg), len);
395 ii += ((len + 3) & -4) / 4;
399 /* Set the stack pointer. According to the ABI, the SP is meant to
400 be set _before_ the corresponding stack space is used. On AIX,
401 this even applies when the target has been completely stopped!
402 Not doing this can lead to conflicts with the kernel which thinks
403 that it still has control over this not-yet-allocated stack
405 regcache_raw_write_signed (regcache, gdbarch_sp_regnum (gdbarch), sp);
407 /* Set back chain properly. */
408 store_unsigned_integer (tmp_buffer, wordsize, byte_order, saved_sp);
409 write_memory (sp, tmp_buffer, wordsize);
411 /* Point the inferior function call's return address at the dummy's
413 regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr);
415 /* Set the TOC register, get the value from the objfile reader
416 which, in turn, gets it from the VMAP table. */
417 if (rs6000_find_toc_address_hook != NULL)
419 CORE_ADDR tocvalue = (*rs6000_find_toc_address_hook) (func_addr);
420 regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, tocvalue);
423 target_store_registers (regcache, -1);
427 static enum return_value_convention
428 rs6000_return_value (struct gdbarch *gdbarch, struct type *func_type,
429 struct type *valtype, struct regcache *regcache,
430 gdb_byte *readbuf, const gdb_byte *writebuf)
432 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
433 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
436 /* The calling convention this function implements assumes the
437 processor has floating-point registers. We shouldn't be using it
438 on PowerPC variants that lack them. */
439 gdb_assert (ppc_floating_point_unit_p (gdbarch));
441 /* AltiVec extension: Functions that declare a vector data type as a
442 return value place that return value in VR2. */
443 if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype)
444 && TYPE_LENGTH (valtype) == 16)
447 regcache_cooked_read (regcache, tdep->ppc_vr0_regnum + 2, readbuf);
449 regcache_cooked_write (regcache, tdep->ppc_vr0_regnum + 2, writebuf);
451 return RETURN_VALUE_REGISTER_CONVENTION;
454 /* If the called subprogram returns an aggregate, there exists an
455 implicit first argument, whose value is the address of a caller-
456 allocated buffer into which the callee is assumed to store its
457 return value. All explicit parameters are appropriately
459 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
460 || TYPE_CODE (valtype) == TYPE_CODE_UNION
461 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
462 return RETURN_VALUE_STRUCT_CONVENTION;
464 /* Scalar floating-point values are returned in FPR1 for float or
465 double, and in FPR1:FPR2 for quadword precision. Fortran
466 complex*8 and complex*16 are returned in FPR1:FPR2, and
467 complex*32 is returned in FPR1:FPR4. */
468 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
469 && (TYPE_LENGTH (valtype) == 4 || TYPE_LENGTH (valtype) == 8))
471 struct type *regtype = register_type (gdbarch, tdep->ppc_fp0_regnum);
474 /* FIXME: kettenis/2007-01-01: Add support for quadword
475 precision and complex. */
479 regcache_cooked_read (regcache, tdep->ppc_fp0_regnum + 1, regval);
480 convert_typed_floating (regval, regtype, readbuf, valtype);
484 convert_typed_floating (writebuf, valtype, regval, regtype);
485 regcache_cooked_write (regcache, tdep->ppc_fp0_regnum + 1, regval);
488 return RETURN_VALUE_REGISTER_CONVENTION;
491 /* Values of the types int, long, short, pointer, and char (length
492 is less than or equal to four bytes), as well as bit values of
493 lengths less than or equal to 32 bits, must be returned right
494 justified in GPR3 with signed values sign extended and unsigned
495 values zero extended, as necessary. */
496 if (TYPE_LENGTH (valtype) <= tdep->wordsize)
502 /* For reading we don't have to worry about sign extension. */
503 regcache_cooked_read_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
505 store_unsigned_integer (readbuf, TYPE_LENGTH (valtype), byte_order,
510 /* For writing, use unpack_long since that should handle any
511 required sign extension. */
512 regcache_cooked_write_unsigned (regcache, tdep->ppc_gp0_regnum + 3,
513 unpack_long (valtype, writebuf));
516 return RETURN_VALUE_REGISTER_CONVENTION;
519 /* Eight-byte non-floating-point scalar values must be returned in
522 if (TYPE_LENGTH (valtype) == 8)
524 gdb_assert (TYPE_CODE (valtype) != TYPE_CODE_FLT);
525 gdb_assert (tdep->wordsize == 4);
531 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 3, regval);
532 regcache_cooked_read (regcache, tdep->ppc_gp0_regnum + 4,
534 memcpy (readbuf, regval, 8);
538 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 3, writebuf);
539 regcache_cooked_write (regcache, tdep->ppc_gp0_regnum + 4,
543 return RETURN_VALUE_REGISTER_CONVENTION;
546 return RETURN_VALUE_STRUCT_CONVENTION;
549 /* Support for CONVERT_FROM_FUNC_PTR_ADDR (ARCH, ADDR, TARG).
551 Usually a function pointer's representation is simply the address
552 of the function. On the RS/6000 however, a function pointer is
553 represented by a pointer to an OPD entry. This OPD entry contains
554 three words, the first word is the address of the function, the
555 second word is the TOC pointer (r2), and the third word is the
556 static chain value. Throughout GDB it is currently assumed that a
557 function pointer contains the address of the function, which is not
558 easy to fix. In addition, the conversion of a function address to
559 a function pointer would require allocation of an OPD entry in the
560 inferior's memory space, with all its drawbacks. To be able to
561 call C++ virtual methods in the inferior (which are called via
562 function pointers), find_function_addr uses this function to get the
563 function address from a function pointer. */
565 /* Return real function address if ADDR (a function pointer) is in the data
566 space and is therefore a special function pointer. */
569 rs6000_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
571 struct target_ops *targ)
573 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
574 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
575 struct obj_section *s;
577 s = find_pc_section (addr);
579 /* Normally, functions live inside a section that is executable.
580 So, if ADDR points to a non-executable section, then treat it
581 as a function descriptor and return the target address iff
582 the target address itself points to a section that is executable. */
583 if (s && (s->the_bfd_section->flags & SEC_CODE) == 0)
586 read_memory_unsigned_integer (addr, tdep->wordsize, byte_order);
587 struct obj_section *pc_section = find_pc_section (pc);
589 if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
597 /* Calculate the destination of a branch/jump. Return -1 if not a branch. */
600 branch_dest (struct frame_info *frame, int opcode, int instr,
601 CORE_ADDR pc, CORE_ADDR safety)
603 struct gdbarch *gdbarch = get_frame_arch (frame);
604 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
605 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
611 absolute = (int) ((instr >> 1) & 1);
616 immediate = ((instr & ~3) << 6) >> 6; /* br unconditional */
620 dest = pc + immediate;
624 immediate = ((instr & ~3) << 16) >> 16; /* br conditional */
628 dest = pc + immediate;
632 ext_op = (instr >> 1) & 0x3ff;
634 if (ext_op == 16) /* br conditional register */
636 dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3;
638 /* If we are about to return from a signal handler, dest is
639 something like 0x3c90. The current frame is a signal handler
640 caller frame, upon completion of the sigreturn system call
641 execution will return to the saved PC in the frame. */
642 if (dest < AIX_TEXT_SEGMENT_BASE)
643 dest = read_memory_unsigned_integer
644 (get_frame_base (frame) + SIG_FRAME_PC_OFFSET,
645 tdep->wordsize, byte_order);
648 else if (ext_op == 528) /* br cond to count reg */
650 dest = get_frame_register_unsigned (frame, tdep->ppc_ctr_regnum) & ~3;
652 /* If we are about to execute a system call, dest is something
653 like 0x22fc or 0x3b00. Upon completion the system call
654 will return to the address in the link register. */
655 if (dest < AIX_TEXT_SEGMENT_BASE)
656 dest = get_frame_register_unsigned (frame, tdep->ppc_lr_regnum) & ~3;
665 return (dest < AIX_TEXT_SEGMENT_BASE) ? safety : dest;
668 /* AIX does not support PT_STEP. Simulate it. */
671 rs6000_software_single_step (struct frame_info *frame)
673 struct gdbarch *gdbarch = get_frame_arch (frame);
674 struct address_space *aspace = get_frame_address_space (frame);
675 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
681 loc = get_frame_pc (frame);
683 insn = read_memory_integer (loc, 4, byte_order);
685 if (ppc_deal_with_atomic_sequence (frame))
688 breaks[0] = loc + PPC_INSN_SIZE;
690 breaks[1] = branch_dest (frame, opcode, insn, loc, breaks[0]);
692 /* Don't put two breakpoints on the same address. */
693 if (breaks[1] == breaks[0])
696 for (ii = 0; ii < 2; ++ii)
698 /* ignore invalid breakpoint. */
699 if (breaks[ii] == -1)
701 insert_single_step_breakpoint (gdbarch, aspace, breaks[ii]);
704 errno = 0; /* FIXME, don't ignore errors! */
705 /* What errors? {read,write}_memory call error(). */
709 static enum gdb_osabi
710 rs6000_aix_osabi_sniffer (bfd *abfd)
713 if (bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
714 return GDB_OSABI_AIX;
716 return GDB_OSABI_UNKNOWN;
720 rs6000_aix_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch)
722 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
724 /* RS6000/AIX does not support PT_STEP. Has to be simulated. */
725 set_gdbarch_software_single_step (gdbarch, rs6000_software_single_step);
727 /* Displaced stepping is currently not supported in combination with
728 software single-stepping. */
729 set_gdbarch_displaced_step_copy_insn (gdbarch, NULL);
730 set_gdbarch_displaced_step_fixup (gdbarch, NULL);
731 set_gdbarch_displaced_step_free_closure (gdbarch, NULL);
732 set_gdbarch_displaced_step_location (gdbarch, NULL);
734 set_gdbarch_push_dummy_call (gdbarch, rs6000_push_dummy_call);
735 set_gdbarch_return_value (gdbarch, rs6000_return_value);
736 set_gdbarch_long_double_bit (gdbarch, 8 * TARGET_CHAR_BIT);
738 /* Handle RS/6000 function pointers (which are really function
740 set_gdbarch_convert_from_func_ptr_addr
741 (gdbarch, rs6000_convert_from_func_ptr_addr);
743 /* Core file support. */
744 set_gdbarch_regset_from_core_section
745 (gdbarch, rs6000_aix_regset_from_core_section);
747 if (tdep->wordsize == 8)
748 tdep->lr_frame_offset = 16;
750 tdep->lr_frame_offset = 8;
752 if (tdep->wordsize == 4)
753 /* PowerOpen / AIX 32 bit. The saved area or red zone consists of
754 19 4 byte GPRS + 18 8 byte FPRs giving a total of 220 bytes.
755 Problem is, 220 isn't frame (16 byte) aligned. Round it up to
757 set_gdbarch_frame_red_zone_size (gdbarch, 224);
759 set_gdbarch_frame_red_zone_size (gdbarch, 0);
762 /* Provide a prototype to silence -Wmissing-prototypes. */
763 extern initialize_file_ftype _initialize_rs6000_aix_tdep;
766 _initialize_rs6000_aix_tdep (void)
768 gdbarch_register_osabi_sniffer (bfd_arch_rs6000,
769 bfd_target_xcoff_flavour,
770 rs6000_aix_osabi_sniffer);
771 gdbarch_register_osabi_sniffer (bfd_arch_powerpc,
772 bfd_target_xcoff_flavour,
773 rs6000_aix_osabi_sniffer);
775 gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_AIX,
776 rs6000_aix_init_osabi);
777 gdbarch_register_osabi (bfd_arch_powerpc, 0, GDB_OSABI_AIX,
778 rs6000_aix_init_osabi);