1 /* IBM RS/6000 native-dependent code for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
27 #include "xcoffsolib.h"
30 #include "libbfd.h" /* For bfd_cache_lookup (FIXME) */
32 #include "gdb-stabs.h"
34 #include "arch-utils.h"
37 #include <sys/ptrace.h>
40 #include <sys/param.h>
44 #include <sys/ioctl.h>
52 #define __LDINFO_PTRACE32__ /* for __ld_info32 */
53 #define __LDINFO_PTRACE64__ /* for __ld_info64 */
55 #include <sys/systemcfg.h>
57 /* On AIX4.3+, sys/ldr.h provides different versions of struct ld_info for
58 debugging 32-bit and 64-bit processes. Define a typedef and macros for
59 accessing fields in the appropriate structures. */
61 /* In 32-bit compilation mode (which is the only mode from which ptrace()
62 works on 4.3), __ld_info32 is #defined as equivalent to ld_info. */
68 /* Return whether the current architecture is 64-bit. */
73 # define ARCH64() (REGISTER_RAW_SIZE (0) == 8)
76 /* Union of 32-bit and 64-bit ".reg" core file sections. */
80 struct __context64 r64;
87 /* Union of 32-bit and 64-bit versions of ld_info. */
94 struct __ld_info32 l32;
95 struct __ld_info64 l64;
99 /* If compiling with 32-bit and 64-bit debugging capability (e.g. AIX 4.x),
100 declare and initialize a variable named VAR suitable for use as the arch64
101 parameter to the various LDI_*() macros. */
104 # define ARCH64_DECL(var)
106 # define ARCH64_DECL(var) int var = ARCH64 ()
109 /* Return LDI's FIELD for a 64-bit process if ARCH64 and for a 32-bit process
110 otherwise. This technique only works for FIELDs with the same data type in
111 32-bit and 64-bit versions of ld_info. */
114 # define LDI_FIELD(ldi, arch64, field) (ldi)->l32.ldinfo_##field
116 # define LDI_FIELD(ldi, arch64, field) \
117 (arch64 ? (ldi)->l64.ldinfo_##field : (ldi)->l32.ldinfo_##field)
120 /* Return various LDI fields for a 64-bit process if ARCH64 and for a 32-bit
121 process otherwise. */
123 #define LDI_NEXT(ldi, arch64) LDI_FIELD(ldi, arch64, next)
124 #define LDI_FD(ldi, arch64) LDI_FIELD(ldi, arch64, fd)
125 #define LDI_FILENAME(ldi, arch64) LDI_FIELD(ldi, arch64, filename)
127 extern struct vmap *map_vmap (bfd * bf, bfd * arch);
129 extern struct target_ops exec_ops;
131 static void vmap_exec (void);
133 static void vmap_ldinfo (LdInfo *);
135 static struct vmap *add_vmap (LdInfo *);
137 static int objfile_symbol_add (void *);
139 static void vmap_symtab (struct vmap *);
141 static void fetch_core_registers (char *, unsigned int, int, CORE_ADDR);
143 static void exec_one_dummy_insn (void);
146 fixup_breakpoints (CORE_ADDR low, CORE_ADDR high, CORE_ADDR delta);
148 /* Conversion from gdb-to-system special purpose register numbers. */
150 static int special_regs[] =
156 CTR, /* CTR_REGNUM */
157 XER, /* XER_REGNUM */
161 /* Call ptrace(REQ, ID, ADDR, DATA, BUF). */
164 rs6000_ptrace32 (int req, int id, int *addr, int data, int *buf)
166 int ret = ptrace (req, id, (int *)addr, data, buf);
168 printf ("rs6000_ptrace32 (%d, %d, 0x%x, %08x, 0x%x) = 0x%x\n",
169 req, id, (unsigned int)addr, data, (unsigned int)buf, ret);
174 /* Call ptracex(REQ, ID, ADDR, DATA, BUF). */
177 rs6000_ptrace64 (int req, int id, long long addr, int data, int *buf)
180 int ret = ptracex (req, id, addr, data, buf);
185 printf ("rs6000_ptrace64 (%d, %d, 0x%llx, %08x, 0x%x) = 0x%x\n",
186 req, id, addr, data, (unsigned int)buf, ret);
191 /* Fetch register REGNO from the inferior. */
194 fetch_register (int regno)
196 int *addr = alloca (MAX_REGISTER_RAW_SIZE);
199 /* Retrieved values may be -1, so infer errors from errno. */
202 /* Floating-point registers. */
203 if (regno >= FP0_REGNUM && regno <= FPLAST_REGNUM)
205 nr = regno - FP0_REGNUM + FPR0;
206 rs6000_ptrace32 (PT_READ_FPR, PIDGET (inferior_ptid), addr, nr, 0);
209 /* Bogus register number. */
210 else if (regno > LAST_UISA_SP_REGNUM)
212 if (regno >= NUM_REGS)
213 fprintf_unfiltered (gdb_stderr,
214 "gdb error: register no %d not implemented.\n",
218 /* Fixed-point registers. */
221 if (regno >= FIRST_UISA_SP_REGNUM)
222 nr = special_regs[regno - FIRST_UISA_SP_REGNUM];
227 *addr = rs6000_ptrace32 (PT_READ_GPR, PIDGET (inferior_ptid), (int *)nr, 0, 0);
230 /* PT_READ_GPR requires the buffer parameter to point to long long,
231 even if the register is really only 32 bits. */
233 rs6000_ptrace64 (PT_READ_GPR, PIDGET (inferior_ptid), nr, 0, (int *)&buf);
234 if (REGISTER_RAW_SIZE (regno) == 8)
235 memcpy (addr, &buf, 8);
242 supply_register (regno, (char *) addr);
246 /* FIXME: this happens 3 times at the start of each 64-bit program. */
247 perror ("ptrace read");
253 /* Store register REGNO back into the inferior. */
256 store_register (int regno)
258 int *addr = alloca (MAX_REGISTER_RAW_SIZE);
261 /* Fetch the register's value from the register cache. */
262 regcache_collect (regno, addr);
264 /* -1 can be a successful return value, so infer errors from errno. */
267 /* Floating-point registers. */
268 if (regno >= FP0_REGNUM && regno <= FPLAST_REGNUM)
270 nr = regno - FP0_REGNUM + FPR0;
271 rs6000_ptrace32 (PT_WRITE_FPR, PIDGET (inferior_ptid), addr, nr, 0);
274 /* Bogus register number. */
275 else if (regno > LAST_UISA_SP_REGNUM)
277 if (regno >= NUM_REGS)
278 fprintf_unfiltered (gdb_stderr,
279 "gdb error: register no %d not implemented.\n",
283 /* Fixed-point registers. */
286 if (regno == SP_REGNUM)
287 /* Execute one dummy instruction (which is a breakpoint) in inferior
288 process to give kernel a chance to do internal housekeeping.
289 Otherwise the following ptrace(2) calls will mess up user stack
290 since kernel will get confused about the bottom of the stack
292 exec_one_dummy_insn ();
294 if (regno >= FIRST_UISA_SP_REGNUM)
295 nr = special_regs[regno - FIRST_UISA_SP_REGNUM];
299 /* The PT_WRITE_GPR operation is rather odd. For 32-bit inferiors,
300 the register's value is passed by value, but for 64-bit inferiors,
301 the address of a buffer containing the value is passed. */
303 rs6000_ptrace32 (PT_WRITE_GPR, PIDGET (inferior_ptid), (int *)nr, *addr, 0);
306 /* PT_WRITE_GPR requires the buffer parameter to point to an 8-byte
307 area, even if the register is really only 32 bits. */
309 if (REGISTER_RAW_SIZE (regno) == 8)
310 memcpy (&buf, addr, 8);
313 rs6000_ptrace64 (PT_WRITE_GPR, PIDGET (inferior_ptid), nr, 0, (int *)&buf);
319 perror ("ptrace write");
324 /* Read from the inferior all registers if REGNO == -1 and just register
328 fetch_inferior_registers (int regno)
331 fetch_register (regno);
335 /* read 32 general purpose registers. */
336 for (regno = 0; regno < 32; regno++)
337 fetch_register (regno);
339 /* read general purpose floating point registers. */
340 for (regno = FP0_REGNUM; regno <= FPLAST_REGNUM; regno++)
341 fetch_register (regno);
343 /* read special registers. */
344 for (regno = FIRST_UISA_SP_REGNUM; regno <= LAST_UISA_SP_REGNUM; regno++)
345 fetch_register (regno);
349 /* Store our register values back into the inferior.
350 If REGNO is -1, do this for all registers.
351 Otherwise, REGNO specifies which register (so we can save time). */
354 store_inferior_registers (int regno)
357 store_register (regno);
361 /* write general purpose registers first! */
362 for (regno = GPR0; regno <= GPR31; regno++)
363 store_register (regno);
365 /* write floating point registers now. */
366 for (regno = FP0_REGNUM; regno <= FPLAST_REGNUM; regno++)
367 store_register (regno);
369 /* write special registers. */
371 for (regno = FIRST_UISA_SP_REGNUM; regno <= LAST_UISA_SP_REGNUM; regno++)
372 store_register (regno);
376 /* Store in *TO the 32-bit word at 32-bit-aligned ADDR in the child
377 process, which is 64-bit if ARCH64 and 32-bit otherwise. Return
381 read_word (CORE_ADDR from, int *to, int arch64)
383 /* Retrieved values may be -1, so infer errors from errno. */
387 *to = rs6000_ptrace64 (PT_READ_I, PIDGET (inferior_ptid), from, 0, NULL);
389 *to = rs6000_ptrace32 (PT_READ_I, PIDGET (inferior_ptid), (int *)(long) from,
395 /* Copy LEN bytes to or from inferior's memory starting at MEMADDR
396 to debugger memory starting at MYADDR. Copy to inferior if
399 Returns the length copied, which is either the LEN argument or zero.
400 This xfer function does not do partial moves, since child_ops
401 doesn't allow memory operations to cross below us in the target stack
405 child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
406 int write, struct mem_attrib *attrib,
407 struct target_ops *target)
409 /* Round starting address down to 32-bit word boundary. */
410 int mask = sizeof (int) - 1;
411 CORE_ADDR addr = memaddr & ~(CORE_ADDR)mask;
413 /* Round ending address up to 32-bit word boundary. */
414 int count = ((memaddr + len - addr + mask) & ~(CORE_ADDR)mask)
417 /* Allocate word transfer buffer. */
418 /* FIXME (alloca): This code, cloned from infptrace.c, is unsafe
419 because it uses alloca to allocate a buffer of arbitrary size.
420 For very large xfers, this could crash GDB's stack. */
421 int *buf = (int *) alloca (count * sizeof (int));
423 int arch64 = ARCH64 ();
428 /* Retrieve memory a word at a time. */
429 for (i = 0; i < count; i++, addr += sizeof (int))
431 if (!read_word (addr, buf + i, arch64))
436 /* Copy memory to supplied buffer. */
437 addr -= count * sizeof (int);
438 memcpy (myaddr, (char *)buf + (memaddr - addr), len);
442 /* Fetch leading memory needed for alignment. */
444 if (!read_word (addr, buf, arch64))
447 /* Fetch trailing memory needed for alignment. */
448 if (addr + count * sizeof (int) > memaddr + len)
449 if (!read_word (addr, buf + count - 1, arch64))
452 /* Copy supplied data into memory buffer. */
453 memcpy ((char *)buf + (memaddr - addr), myaddr, len);
455 /* Store memory one word at a time. */
456 for (i = 0, errno = 0; i < count; i++, addr += sizeof (int))
459 rs6000_ptrace64 (PT_WRITE_D, PIDGET (inferior_ptid), addr, buf[i], NULL);
461 rs6000_ptrace32 (PT_WRITE_D, PIDGET (inferior_ptid), (int *)(long) addr,
473 /* Execute one dummy breakpoint instruction. This way we give the kernel
474 a chance to do some housekeeping and update inferior's internal data,
478 exec_one_dummy_insn (void)
480 #define DUMMY_INSN_ADDR (TEXT_SEGMENT_BASE)+0x200
482 char shadow_contents[BREAKPOINT_MAX]; /* Stash old bkpt addr contents */
483 int ret, status, pid;
486 /* We plant one dummy breakpoint into DUMMY_INSN_ADDR address. We
487 assume that this address will never be executed again by the real
490 target_insert_breakpoint (DUMMY_INSN_ADDR, shadow_contents);
492 /* You might think this could be done with a single ptrace call, and
493 you'd be correct for just about every platform I've ever worked
494 on. However, rs6000-ibm-aix4.1.3 seems to have screwed this up --
495 the inferior never hits the breakpoint (it's also worth noting
496 powerpc-ibm-aix4.1.3 works correctly). */
497 prev_pc = read_pc ();
498 write_pc (DUMMY_INSN_ADDR);
500 ret = rs6000_ptrace64 (PT_CONTINUE, PIDGET (inferior_ptid), 1, 0, NULL);
502 ret = rs6000_ptrace32 (PT_CONTINUE, PIDGET (inferior_ptid), (int *)1, 0, NULL);
505 perror ("pt_continue");
509 pid = wait (&status);
511 while (pid != PIDGET (inferior_ptid));
514 target_remove_breakpoint (DUMMY_INSN_ADDR, shadow_contents);
517 /* Fetch registers from the register section in core bfd. */
520 fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
521 int which, CORE_ADDR reg_addr)
525 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
531 "Gdb error: unknown parameter to fetch_core_registers().\n");
535 regs = (CoreRegs *) core_reg_sect;
537 /* Put the register values from the core file section in the regcache. */
541 for (regi = 0; regi < 32; regi++)
542 supply_register (regi, (char *) ®s->r64.gpr[regi]);
544 for (regi = 0; regi < 32; regi++)
545 supply_register (FP0_REGNUM + regi, (char *) ®s->r64.fpr[regi]);
547 supply_register (PC_REGNUM, (char *) ®s->r64.iar);
548 supply_register (tdep->ppc_ps_regnum, (char *) ®s->r64.msr);
549 supply_register (tdep->ppc_cr_regnum, (char *) ®s->r64.cr);
550 supply_register (tdep->ppc_lr_regnum, (char *) ®s->r64.lr);
551 supply_register (tdep->ppc_ctr_regnum, (char *) ®s->r64.ctr);
552 supply_register (tdep->ppc_xer_regnum, (char *) ®s->r64.xer);
556 for (regi = 0; regi < 32; regi++)
557 supply_register (regi, (char *) ®s->r32.gpr[regi]);
559 for (regi = 0; regi < 32; regi++)
560 supply_register (FP0_REGNUM + regi, (char *) ®s->r32.fpr[regi]);
562 supply_register (PC_REGNUM, (char *) ®s->r32.iar);
563 supply_register (tdep->ppc_ps_regnum, (char *) ®s->r32.msr);
564 supply_register (tdep->ppc_cr_regnum, (char *) ®s->r32.cr);
565 supply_register (tdep->ppc_lr_regnum, (char *) ®s->r32.lr);
566 supply_register (tdep->ppc_ctr_regnum, (char *) ®s->r32.ctr);
567 supply_register (tdep->ppc_xer_regnum, (char *) ®s->r32.xer);
568 if (tdep->ppc_mq_regnum >= 0)
569 supply_register (tdep->ppc_mq_regnum, (char *) ®s->r32.mq);
574 /* Copy information about text and data sections from LDI to VP for a 64-bit
575 process if ARCH64 and for a 32-bit process otherwise. */
578 vmap_secs (struct vmap *vp, LdInfo *ldi, int arch64)
582 vp->tstart = (CORE_ADDR) ldi->l64.ldinfo_textorg;
583 vp->tend = vp->tstart + ldi->l64.ldinfo_textsize;
584 vp->dstart = (CORE_ADDR) ldi->l64.ldinfo_dataorg;
585 vp->dend = vp->dstart + ldi->l64.ldinfo_datasize;
589 vp->tstart = (unsigned long) ldi->l32.ldinfo_textorg;
590 vp->tend = vp->tstart + ldi->l32.ldinfo_textsize;
591 vp->dstart = (unsigned long) ldi->l32.ldinfo_dataorg;
592 vp->dend = vp->dstart + ldi->l32.ldinfo_datasize;
595 /* The run time loader maps the file header in addition to the text
596 section and returns a pointer to the header in ldinfo_textorg.
597 Adjust the text start address to point to the real start address
598 of the text section. */
599 vp->tstart += vp->toffs;
602 /* handle symbol translation on vmapping */
605 vmap_symtab (struct vmap *vp)
607 register struct objfile *objfile;
608 struct section_offsets *new_offsets;
611 objfile = vp->objfile;
614 /* OK, it's not an objfile we opened ourselves.
615 Currently, that can only happen with the exec file, so
616 relocate the symbols for the symfile. */
617 if (symfile_objfile == NULL)
619 objfile = symfile_objfile;
621 else if (!vp->loaded)
622 /* If symbols are not yet loaded, offsets are not yet valid. */
625 new_offsets = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
627 for (i = 0; i < objfile->num_sections; ++i)
628 new_offsets->offsets[i] = ANOFFSET (objfile->section_offsets, i);
630 /* The symbols in the object file are linked to the VMA of the section,
631 relocate them VMA relative. */
632 new_offsets->offsets[SECT_OFF_TEXT (objfile)] = vp->tstart - vp->tvma;
633 new_offsets->offsets[SECT_OFF_DATA (objfile)] = vp->dstart - vp->dvma;
634 new_offsets->offsets[SECT_OFF_BSS (objfile)] = vp->dstart - vp->dvma;
636 objfile_relocate (objfile, new_offsets);
639 /* Add symbols for an objfile. */
642 objfile_symbol_add (void *arg)
644 struct objfile *obj = (struct objfile *) arg;
646 syms_from_objfile (obj, NULL, 0, 0);
647 new_symfile_objfile (obj, 0, 0);
651 /* Add symbols for a vmap. Return zero upon error. */
654 vmap_add_symbols (struct vmap *vp)
656 if (catch_errors (objfile_symbol_add, vp->objfile,
657 "Error while reading shared library symbols:\n",
660 /* Note this is only done if symbol reading was successful. */
668 /* Add a new vmap entry based on ldinfo() information.
670 If ldi->ldinfo_fd is not valid (e.g. this struct ld_info is from a
671 core file), the caller should set it to -1, and we will open the file.
673 Return the vmap new entry. */
676 add_vmap (LdInfo *ldi)
679 register char *mem, *objname, *filename;
683 ARCH64_DECL (arch64);
685 /* This ldi structure was allocated using alloca() in
686 xcoff_relocate_symtab(). Now we need to have persistent object
687 and member names, so we should save them. */
689 filename = LDI_FILENAME (ldi, arch64);
690 mem = filename + strlen (filename) + 1;
691 mem = savestring (mem, strlen (mem));
692 objname = savestring (filename, strlen (filename));
694 fd = LDI_FD (ldi, arch64);
696 /* Note that this opens it once for every member; a possible
697 enhancement would be to only open it once for every object. */
698 abfd = bfd_openr (objname, gnutarget);
700 abfd = bfd_fdopenr (objname, gnutarget, fd);
703 warning ("Could not open `%s' as an executable file: %s",
704 objname, bfd_errmsg (bfd_get_error ()));
708 /* make sure we have an object file */
710 if (bfd_check_format (abfd, bfd_object))
711 vp = map_vmap (abfd, 0);
713 else if (bfd_check_format (abfd, bfd_archive))
716 /* FIXME??? am I tossing BFDs? bfd? */
717 while ((last = bfd_openr_next_archived_file (abfd, last)))
718 if (STREQ (mem, last->filename))
723 warning ("\"%s\": member \"%s\" missing.", objname, mem);
728 if (!bfd_check_format (last, bfd_object))
730 warning ("\"%s\": member \"%s\" not in executable format: %s.",
731 objname, mem, bfd_errmsg (bfd_get_error ()));
737 vp = map_vmap (last, abfd);
741 warning ("\"%s\": not in executable format: %s.",
742 objname, bfd_errmsg (bfd_get_error ()));
746 obj = allocate_objfile (vp->bfd, 0);
749 /* Always add symbols for the main objfile. */
750 if (vp == vmap || auto_solib_add)
751 vmap_add_symbols (vp);
755 /* update VMAP info with ldinfo() information
756 Input is ptr to ldinfo() results. */
759 vmap_ldinfo (LdInfo *ldi)
762 register struct vmap *vp;
763 int got_one, retried;
764 int got_exec_file = 0;
766 int arch64 = ARCH64 ();
768 /* For each *ldi, see if we have a corresponding *vp.
769 If so, update the mapping, and symbol table.
770 If not, add an entry and symbol table. */
774 char *name = LDI_FILENAME (ldi, arch64);
775 char *memb = name + strlen (name) + 1;
776 int fd = LDI_FD (ldi, arch64);
780 if (fstat (fd, &ii) < 0)
782 /* The kernel sets ld_info to -1, if the process is still using the
783 object, and the object is removed. Keep the symbol info for the
784 removed object and issue a warning. */
785 warning ("%s (fd=%d) has disappeared, keeping its symbols",
790 for (got_one = 0, vp = vmap; vp; vp = vp->nxt)
792 struct objfile *objfile;
794 /* First try to find a `vp', which is the same as in ldinfo.
795 If not the same, just continue and grep the next `vp'. If same,
796 relocate its tstart, tend, dstart, dend values. If no such `vp'
797 found, get out of this for loop, add this ldi entry as a new vmap
798 (add_vmap) and come back, find its `vp' and so on... */
800 /* The filenames are not always sufficient to match on. */
802 if ((name[0] == '/' && !STREQ (name, vp->name))
803 || (memb[0] && !STREQ (memb, vp->member)))
806 /* See if we are referring to the same file.
807 We have to check objfile->obfd, symfile.c:reread_symbols might
808 have updated the obfd after a change. */
809 objfile = vp->objfile == NULL ? symfile_objfile : vp->objfile;
811 || objfile->obfd == NULL
812 || bfd_stat (objfile->obfd, &vi) < 0)
814 warning ("Unable to stat %s, keeping its symbols", name);
818 if (ii.st_dev != vi.st_dev || ii.st_ino != vi.st_ino)
826 /* Found a corresponding VMAP. Remap! */
828 vmap_secs (vp, ldi, arch64);
830 /* The objfile is only NULL for the exec file. */
831 if (vp->objfile == NULL)
834 /* relocate symbol table(s). */
837 /* Announce new object files. Doing this after symbol relocation
838 makes aix-thread.c's job easier. */
839 if (target_new_objfile_hook && vp->objfile)
840 target_new_objfile_hook (vp->objfile);
842 /* There may be more, so we don't break out of the loop. */
845 /* if there was no matching *vp, we must perforce create the sucker(s) */
846 if (!got_one && !retried)
853 while ((next = LDI_NEXT (ldi, arch64))
854 && (ldi = (void *) (next + (char *) ldi)));
856 /* If we don't find the symfile_objfile anywhere in the ldinfo, it
857 is unlikely that the symbol file is relocated to the proper
858 address. And we might have attached to a process which is
859 running a different copy of the same executable. */
860 if (symfile_objfile != NULL && !got_exec_file)
862 warning ("Symbol file %s\nis not mapped; discarding it.\n\
863 If in fact that file has symbols which the mapped files listed by\n\
864 \"info files\" lack, you can load symbols with the \"symbol-file\" or\n\
865 \"add-symbol-file\" commands (note that you must take care of relocating\n\
866 symbols to the proper address).",
867 symfile_objfile->name);
868 free_objfile (symfile_objfile);
869 symfile_objfile = NULL;
871 breakpoint_re_set ();
874 /* As well as symbol tables, exec_sections need relocation. After
875 the inferior process' termination, there will be a relocated symbol
876 table exist with no corresponding inferior process. At that time, we
877 need to use `exec' bfd, rather than the inferior process's memory space
880 `exec_sections' need to be relocated only once, as long as the exec
881 file remains unchanged.
890 if (execbfd == exec_bfd)
895 if (!vmap || !exec_ops.to_sections)
896 error ("vmap_exec: vmap or exec_ops.to_sections == 0\n");
898 for (i = 0; &exec_ops.to_sections[i] < exec_ops.to_sections_end; i++)
900 if (STREQ (".text", exec_ops.to_sections[i].the_bfd_section->name))
902 exec_ops.to_sections[i].addr += vmap->tstart - vmap->tvma;
903 exec_ops.to_sections[i].endaddr += vmap->tstart - vmap->tvma;
905 else if (STREQ (".data", exec_ops.to_sections[i].the_bfd_section->name))
907 exec_ops.to_sections[i].addr += vmap->dstart - vmap->dvma;
908 exec_ops.to_sections[i].endaddr += vmap->dstart - vmap->dvma;
910 else if (STREQ (".bss", exec_ops.to_sections[i].the_bfd_section->name))
912 exec_ops.to_sections[i].addr += vmap->dstart - vmap->dvma;
913 exec_ops.to_sections[i].endaddr += vmap->dstart - vmap->dvma;
918 /* Set the current architecture from the host running GDB. Called when
919 starting a child process. */
922 set_host_arch (int pid)
924 enum bfd_architecture arch;
927 struct gdbarch_info info;
931 arch = bfd_arch_rs6000;
932 mach = bfd_mach_rs6k;
936 arch = bfd_arch_powerpc;
940 /* FIXME: schauer/2002-02-25:
941 We don't know if we are executing a 32 or 64 bit executable,
942 and have no way to pass the proper word size to rs6000_gdbarch_init.
943 So we have to avoid switching to a new architecture, if the architecture
945 Blindly calling rs6000_gdbarch_init used to work in older versions of
946 GDB, as rs6000_gdbarch_init incorrectly used the previous tdep to
947 determine the wordsize. */
950 const struct bfd_arch_info *exec_bfd_arch_info;
952 exec_bfd_arch_info = bfd_get_arch_info (exec_bfd);
953 if (arch == exec_bfd_arch_info->arch)
957 bfd_default_set_arch_mach (&abfd, arch, mach);
959 gdbarch_info_init (&info);
960 info.bfd_arch_info = bfd_get_arch_info (&abfd);
962 if (!gdbarch_update_p (info))
964 internal_error (__FILE__, __LINE__,
965 "set_host_arch: failed to select architecture");
970 /* xcoff_relocate_symtab - hook for symbol table relocation.
971 also reads shared libraries.. */
974 xcoff_relocate_symtab (unsigned int pid)
976 int load_segs = 64; /* number of load segments */
979 int arch64 = ARCH64 ();
980 int ldisize = arch64 ? sizeof (ldi->l64) : sizeof (ldi->l32);
985 size = load_segs * ldisize;
986 ldi = (void *) xrealloc (ldi, size);
989 /* According to my humble theory, AIX has some timing problems and
990 when the user stack grows, kernel doesn't update stack info in time
991 and ptrace calls step on user stack. That is why we sleep here a
992 little, and give kernel to update its internals. */
997 rc = rs6000_ptrace64 (PT_LDINFO, pid, (unsigned long) ldi, size, NULL);
999 rc = rs6000_ptrace32 (PT_LDINFO, pid, (int *) ldi, size, NULL);
1003 if (errno == ENOMEM)
1006 perror_with_name ("ptrace ldinfo");
1011 vmap_exec (); /* relocate the exec and core sections as well. */
1018 /* Core file stuff. */
1020 /* Relocate symtabs and read in shared library info, based on symbols
1021 from the core file. */
1024 xcoff_relocate_core (struct target_ops *target)
1030 int arch64 = ARCH64 ();
1032 /* Size of a struct ld_info except for the variable-length filename. */
1033 int nonfilesz = (int)LDI_FILENAME ((LdInfo *)0, arch64);
1035 /* Allocated size of buffer. */
1036 int buffer_size = nonfilesz;
1037 char *buffer = xmalloc (buffer_size);
1038 struct cleanup *old = make_cleanup (free_current_contents, &buffer);
1040 ldinfo_sec = bfd_get_section_by_name (core_bfd, ".ldinfo");
1041 if (ldinfo_sec == NULL)
1044 fprintf_filtered (gdb_stderr, "Couldn't get ldinfo from core file: %s\n",
1045 bfd_errmsg (bfd_get_error ()));
1052 int names_found = 0;
1054 /* Read in everything but the name. */
1055 if (bfd_get_section_contents (core_bfd, ldinfo_sec, buffer,
1056 offset, nonfilesz) == 0)
1063 if (i == buffer_size)
1066 buffer = xrealloc (buffer, buffer_size);
1068 if (bfd_get_section_contents (core_bfd, ldinfo_sec, &buffer[i],
1069 offset + i, 1) == 0)
1071 if (buffer[i++] == '\0')
1074 while (names_found < 2);
1076 ldi = (LdInfo *) buffer;
1078 /* Can't use a file descriptor from the core file; need to open it. */
1080 ldi->l64.ldinfo_fd = -1;
1082 ldi->l32.ldinfo_fd = -1;
1084 /* The first ldinfo is for the exec file, allocated elsewhere. */
1085 if (offset == 0 && vmap != NULL)
1088 vp = add_vmap (ldi);
1090 /* Process next shared library upon error. */
1091 offset += LDI_NEXT (ldi, arch64);
1095 vmap_secs (vp, ldi, arch64);
1097 /* Unless this is the exec file,
1098 add our sections to the section table for the core target. */
1101 struct section_table *stp;
1103 target_resize_to_sections (target, 2);
1104 stp = target->to_sections_end - 2;
1107 stp->the_bfd_section = bfd_get_section_by_name (stp->bfd, ".text");
1108 stp->addr = vp->tstart;
1109 stp->endaddr = vp->tend;
1113 stp->the_bfd_section = bfd_get_section_by_name (stp->bfd, ".data");
1114 stp->addr = vp->dstart;
1115 stp->endaddr = vp->dend;
1120 if (target_new_objfile_hook && vp != vmap && vp->objfile)
1121 target_new_objfile_hook (vp->objfile);
1123 while (LDI_NEXT (ldi, arch64) != 0);
1125 breakpoint_re_set ();
1130 kernel_u_size (void)
1132 return (sizeof (struct user));
1135 /* Under AIX, we have to pass the correct TOC pointer to a function
1136 when calling functions in the inferior.
1137 We try to find the relative toc offset of the objfile containing PC
1138 and add the current load address of the data segment from the vmap. */
1141 find_toc_address (CORE_ADDR pc)
1144 extern CORE_ADDR get_toc_offset (struct objfile *); /* xcoffread.c */
1146 for (vp = vmap; vp; vp = vp->nxt)
1148 if (pc >= vp->tstart && pc < vp->tend)
1150 /* vp->objfile is only NULL for the exec file. */
1151 return vp->dstart + get_toc_offset (vp->objfile == NULL
1156 error ("Unable to find TOC entry for pc %s\n", local_hex_string (pc));
1159 /* Register that we are able to handle rs6000 core file formats. */
1161 static struct core_fns rs6000_core_fns =
1163 bfd_target_xcoff_flavour, /* core_flavour */
1164 default_check_format, /* check_format */
1165 default_core_sniffer, /* core_sniffer */
1166 fetch_core_registers, /* core_read_registers */
1171 _initialize_core_rs6000 (void)
1173 /* Initialize hook in rs6000-tdep.c for determining the TOC address when
1174 calling functions in the inferior. */
1175 rs6000_find_toc_address_hook = find_toc_address;
1177 /* Initialize hook in rs6000-tdep.c to set the current architecture when
1178 starting a child process. */
1179 rs6000_set_host_arch_hook = set_host_arch;
1181 add_core_fns (&rs6000_core_fns);