Rename gdbarch_update() to gdbarch_update_p()
[deliverable/binutils-gdb.git] / gdb / rs6000-nat.c
1 /* IBM RS/6000 native-dependent code for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1992, 1994, 1995, 1996, 1997, 1998
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 #include "defs.h"
23 #include "inferior.h"
24 #include "target.h"
25 #include "gdbcore.h"
26 #include "xcoffsolib.h"
27 #include "symfile.h"
28 #include "objfiles.h"
29 #include "libbfd.h" /* For bfd_cache_lookup (FIXME) */
30 #include "bfd.h"
31 #include "gdb-stabs.h"
32
33 #include <sys/ptrace.h>
34 #include <sys/reg.h>
35
36 #include <sys/param.h>
37 #include <sys/dir.h>
38 #include <sys/user.h>
39 #include <signal.h>
40 #include <sys/ioctl.h>
41 #include <fcntl.h>
42 #include <errno.h>
43
44 #include <a.out.h>
45 #include <sys/file.h>
46 #include "gdb_stat.h"
47 #include <sys/core.h>
48 #define __LDINFO_PTRACE32__ /* for __ld_info32 */
49 #define __LDINFO_PTRACE64__ /* for __ld_info64 */
50 #include <sys/ldr.h>
51 #include <sys/systemcfg.h>
52
53 /* On AIX4.3+, sys/ldr.h provides different versions of struct ld_info for
54 debugging 32-bit and 64-bit processes. Define a typedef and macros for
55 accessing fields in the appropriate structures. */
56
57 /* In 32-bit compilation mode (which is the only mode from which ptrace()
58 works on 4.3), __ld_info32 is #defined as equivalent to ld_info. */
59
60 #ifdef __ld_info32
61 # define ARCH3264
62 #endif
63
64 /* Return whether the current architecture is 64-bit. */
65
66 #ifndef ARCH3264
67 # define ARCH64() 0
68 #else
69 # define ARCH64() (REGISTER_RAW_SIZE (0) == 8)
70 #endif
71
72 /* Union of 32-bit and 64-bit ".reg" core file sections. */
73
74 typedef union {
75 #ifdef ARCH3264
76 struct __context64 r64;
77 #else
78 struct mstsave r64;
79 #endif
80 struct mstsave r32;
81 } CoreRegs;
82
83 /* Union of 32-bit and 64-bit versions of ld_info. */
84
85 typedef union {
86 #ifndef ARCH3264
87 struct ld_info l32;
88 struct ld_info l64;
89 #else
90 struct __ld_info32 l32;
91 struct __ld_info64 l64;
92 #endif
93 } LdInfo;
94
95 /* If compiling with 32-bit and 64-bit debugging capability (e.g. AIX 4.x),
96 declare and initialize a variable named VAR suitable for use as the arch64
97 parameter to the various LDI_*() macros. */
98
99 #ifndef ARCH3264
100 # define ARCH64_DECL(var)
101 #else
102 # define ARCH64_DECL(var) int var = ARCH64 ()
103 #endif
104
105 /* Return LDI's FIELD for a 64-bit process if ARCH64 and for a 32-bit process
106 otherwise. This technique only works for FIELDs with the same data type in
107 32-bit and 64-bit versions of ld_info. */
108
109 #ifndef ARCH3264
110 # define LDI_FIELD(ldi, arch64, field) (ldi)->l32.ldinfo_##field
111 #else
112 # define LDI_FIELD(ldi, arch64, field) \
113 (arch64 ? (ldi)->l64.ldinfo_##field : (ldi)->l32.ldinfo_##field)
114 #endif
115
116 /* Return various LDI fields for a 64-bit process if ARCH64 and for a 32-bit
117 process otherwise. */
118
119 #define LDI_NEXT(ldi, arch64) LDI_FIELD(ldi, arch64, next)
120 #define LDI_FD(ldi, arch64) LDI_FIELD(ldi, arch64, fd)
121 #define LDI_FILENAME(ldi, arch64) LDI_FIELD(ldi, arch64, filename)
122
123 extern struct vmap *map_vmap (bfd * bf, bfd * arch);
124
125 extern struct target_ops exec_ops;
126
127 static void vmap_exec (void);
128
129 static void vmap_ldinfo (LdInfo *);
130
131 static struct vmap *add_vmap (LdInfo *);
132
133 static int objfile_symbol_add (void *);
134
135 static void vmap_symtab (struct vmap *);
136
137 static void fetch_core_registers (char *, unsigned int, int, CORE_ADDR);
138
139 static void exec_one_dummy_insn (void);
140
141 extern void
142 fixup_breakpoints (CORE_ADDR low, CORE_ADDR high, CORE_ADDR delta);
143
144 /* Conversion from gdb-to-system special purpose register numbers. */
145
146 static int special_regs[] =
147 {
148 IAR, /* PC_REGNUM */
149 MSR, /* PS_REGNUM */
150 CR, /* CR_REGNUM */
151 LR, /* LR_REGNUM */
152 CTR, /* CTR_REGNUM */
153 XER, /* XER_REGNUM */
154 MQ /* MQ_REGNUM */
155 };
156
157 /* Call ptrace(REQ, ID, ADDR, DATA, BUF). */
158
159 static int
160 ptrace32 (int req, int id, int *addr, int data, int *buf)
161 {
162 int ret = ptrace (req, id, (int *)addr, data, buf);
163 #if 0
164 printf ("ptrace32 (%d, %d, 0x%x, %08x, 0x%x) = 0x%x\n",
165 req, id, (unsigned int)addr, data, (unsigned int)buf, ret);
166 #endif
167 return ret;
168 }
169
170 /* Call ptracex(REQ, ID, ADDR, DATA, BUF). */
171
172 static int
173 ptrace64 (int req, int id, long long addr, int data, int *buf)
174 {
175 #ifdef ARCH3264
176 int ret = ptracex (req, id, addr, data, buf);
177 #else
178 int ret = 0;
179 #endif
180 #if 0
181 printf ("ptrace64 (%d, %d, 0x%llx, %08x, 0x%x) = 0x%x\n",
182 req, id, addr, data, (unsigned int)buf, ret);
183 #endif
184 return ret;
185 }
186
187 /* Fetch register REGNO from the inferior. */
188
189 static void
190 fetch_register (int regno)
191 {
192 int *addr = (int *) &registers[REGISTER_BYTE (regno)];
193 int nr;
194
195 /* Retrieved values may be -1, so infer errors from errno. */
196 errno = 0;
197
198 /* Floating-point registers. */
199 if (regno >= FP0_REGNUM && regno <= FPLAST_REGNUM)
200 {
201 nr = regno - FP0_REGNUM + FPR0;
202 ptrace32 (PT_READ_FPR, inferior_pid, addr, nr, 0);
203 }
204
205 /* Bogus register number. */
206 else if (regno > LAST_UISA_SP_REGNUM)
207 fprintf_unfiltered (gdb_stderr,
208 "gdb error: register no %d not implemented.\n",
209 regno);
210
211 /* Fixed-point registers. */
212 else
213 {
214 if (regno >= FIRST_UISA_SP_REGNUM)
215 nr = special_regs[regno - FIRST_UISA_SP_REGNUM];
216 else
217 nr = regno;
218
219 if (!ARCH64 ())
220 *addr = ptrace32 (PT_READ_GPR, inferior_pid, (int *)nr, 0, 0);
221 else
222 {
223 /* PT_READ_GPR requires the buffer parameter to point to long long,
224 even if the register is really only 32 bits. */
225 long long buf;
226 ptrace64 (PT_READ_GPR, inferior_pid, nr, 0, (int *)&buf);
227 if (REGISTER_RAW_SIZE (regno) == 8)
228 memcpy (addr, &buf, 8);
229 else
230 *addr = buf;
231 }
232 }
233
234 if (!errno)
235 register_valid[regno] = 1;
236 else
237 {
238 #if 0
239 /* FIXME: this happens 3 times at the start of each 64-bit program. */
240 perror ("ptrace read");
241 #endif
242 errno = 0;
243 }
244 }
245
246 /* Store register REGNO back into the inferior. */
247
248 static void
249 store_register (int regno)
250 {
251 int *addr = (int *) &registers[REGISTER_BYTE (regno)];
252 int nr;
253
254 /* -1 can be a successful return value, so infer errors from errno. */
255 errno = 0;
256
257 /* Floating-point registers. */
258 if (regno >= FP0_REGNUM && regno <= FPLAST_REGNUM)
259 {
260 nr = regno - FP0_REGNUM + FPR0;
261 ptrace32 (PT_WRITE_FPR, inferior_pid, addr, nr, 0);
262 }
263
264 /* Bogus register number. */
265 else if (regno > LAST_UISA_SP_REGNUM)
266 {
267 if (regno >= NUM_REGS)
268 fprintf_unfiltered (gdb_stderr,
269 "gdb error: register no %d not implemented.\n",
270 regno);
271 }
272
273 /* Fixed-point registers. */
274 else
275 {
276 if (regno == SP_REGNUM)
277 /* Execute one dummy instruction (which is a breakpoint) in inferior
278 process to give kernel a chance to do internal housekeeping.
279 Otherwise the following ptrace(2) calls will mess up user stack
280 since kernel will get confused about the bottom of the stack
281 (%sp). */
282 exec_one_dummy_insn ();
283
284 if (regno >= FIRST_UISA_SP_REGNUM)
285 nr = special_regs[regno - FIRST_UISA_SP_REGNUM];
286 else
287 nr = regno;
288
289 if (!ARCH64 ())
290 ptrace32 (PT_WRITE_GPR, inferior_pid, (int *)nr, *addr, 0);
291 else
292 {
293 /* PT_WRITE_GPR requires the buffer parameter to point to an 8-byte
294 area, even if the register is really only 32 bits. */
295 long long buf;
296 if (REGISTER_RAW_SIZE (regno) == 8)
297 memcpy (&buf, addr, 8);
298 else
299 buf = *addr;
300 ptrace64 (PT_WRITE_GPR, inferior_pid, nr, 0, (int *)&buf);
301 }
302 }
303
304 if (errno)
305 {
306 perror ("ptrace write");
307 errno = 0;
308 }
309 }
310
311 /* Read from the inferior all registers if REGNO == -1 and just register
312 REGNO otherwise. */
313
314 void
315 fetch_inferior_registers (int regno)
316 {
317 if (regno != -1)
318 fetch_register (regno);
319
320 else
321 {
322 /* read 32 general purpose registers. */
323 for (regno = 0; regno < 32; regno++)
324 fetch_register (regno);
325
326 /* read general purpose floating point registers. */
327 for (regno = FP0_REGNUM; regno <= FPLAST_REGNUM; regno++)
328 fetch_register (regno);
329
330 /* read special registers. */
331 for (regno = FIRST_UISA_SP_REGNUM; regno <= LAST_UISA_SP_REGNUM; regno++)
332 fetch_register (regno);
333 }
334 }
335
336 /* Store our register values back into the inferior.
337 If REGNO is -1, do this for all registers.
338 Otherwise, REGNO specifies which register (so we can save time). */
339
340 void
341 store_inferior_registers (int regno)
342 {
343 if (regno != -1)
344 store_register (regno);
345
346 else
347 {
348 /* write general purpose registers first! */
349 for (regno = GPR0; regno <= GPR31; regno++)
350 store_register (regno);
351
352 /* write floating point registers now. */
353 for (regno = FP0_REGNUM; regno <= FPLAST_REGNUM; regno++)
354 store_register (regno);
355
356 /* write special registers. */
357
358 for (regno = FIRST_UISA_SP_REGNUM; regno <= LAST_UISA_SP_REGNUM; regno++)
359 store_register (regno);
360 }
361 }
362
363 /* Store in *TO the 32-bit word at 32-bit-aligned ADDR in the child
364 process, which is 64-bit if ARCH64 and 32-bit otherwise. Return
365 success. */
366
367 static int
368 read_word (CORE_ADDR from, int *to, int arch64)
369 {
370 /* Retrieved values may be -1, so infer errors from errno. */
371 errno = 0;
372
373 if (arch64)
374 *to = ptrace64 (PT_READ_I, inferior_pid, from, 0, NULL);
375 else
376 *to = ptrace32 (PT_READ_I, inferior_pid, (int *)(long) from, 0, NULL);
377
378 return !errno;
379 }
380
381 /* Copy LEN bytes to or from inferior's memory starting at MEMADDR
382 to debugger memory starting at MYADDR. Copy to inferior if
383 WRITE is nonzero.
384
385 Returns the length copied, which is either the LEN argument or zero.
386 This xfer function does not do partial moves, since child_ops
387 doesn't allow memory operations to cross below us in the target stack
388 anyway. */
389
390 int
391 child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
392 int write, struct target_ops *target)
393 {
394 /* Round starting address down to 32-bit word boundary. */
395 int mask = sizeof (int) - 1;
396 CORE_ADDR addr = memaddr & ~(CORE_ADDR)mask;
397
398 /* Round ending address up to 32-bit word boundary. */
399 int count = ((memaddr + len - addr + mask) & ~(CORE_ADDR)mask)
400 / sizeof (int);
401
402 /* Allocate word transfer buffer. */
403 int *buf = (int *) alloca (count * sizeof (int));
404
405 int arch64 = ARCH64 ();
406 int i;
407
408 if (!write)
409 {
410 /* Retrieve memory a word at a time. */
411 for (i = 0; i < count; i++, addr += sizeof (int))
412 {
413 if (!read_word (addr, buf + i, arch64))
414 return 0;
415 QUIT;
416 }
417
418 /* Copy memory to supplied buffer. */
419 addr -= count * sizeof (int);
420 memcpy (myaddr, (char *)buf + (memaddr - addr), len);
421 }
422 else
423 {
424 /* Fetch leading memory needed for alignment. */
425 if (addr < memaddr)
426 if (!read_word (addr, buf, arch64))
427 return 0;
428
429 /* Fetch trailing memory needed for alignment. */
430 if (addr + count * sizeof (int) > memaddr + len)
431 if (!read_word (addr, buf + count - 1, arch64))
432 return 0;
433
434 /* Copy supplied data into memory buffer. */
435 memcpy ((char *)buf + (memaddr - addr), myaddr, len);
436
437 /* Store memory one word at a time. */
438 for (i = 0, errno = 0; i < count; i++, addr += sizeof (int))
439 {
440 if (arch64)
441 ptrace64 (PT_WRITE_D, inferior_pid, addr, buf[i], NULL);
442 else
443 ptrace32 (PT_WRITE_D, inferior_pid, (int *)(long) addr,
444 buf[i], NULL);
445
446 if (errno)
447 return 0;
448 QUIT;
449 }
450 }
451
452 return len;
453 }
454
455 /* Execute one dummy breakpoint instruction. This way we give the kernel
456 a chance to do some housekeeping and update inferior's internal data,
457 including u_area. */
458
459 static void
460 exec_one_dummy_insn (void)
461 {
462 #define DUMMY_INSN_ADDR (TEXT_SEGMENT_BASE)+0x200
463
464 char shadow_contents[BREAKPOINT_MAX]; /* Stash old bkpt addr contents */
465 int ret, status, pid;
466 CORE_ADDR prev_pc;
467
468 /* We plant one dummy breakpoint into DUMMY_INSN_ADDR address. We
469 assume that this address will never be executed again by the real
470 code. */
471
472 target_insert_breakpoint (DUMMY_INSN_ADDR, shadow_contents);
473
474 /* You might think this could be done with a single ptrace call, and
475 you'd be correct for just about every platform I've ever worked
476 on. However, rs6000-ibm-aix4.1.3 seems to have screwed this up --
477 the inferior never hits the breakpoint (it's also worth noting
478 powerpc-ibm-aix4.1.3 works correctly). */
479 prev_pc = read_pc ();
480 write_pc (DUMMY_INSN_ADDR);
481 if (ARCH64 ())
482 ret = ptrace64 (PT_CONTINUE, inferior_pid, 1, 0, NULL);
483 else
484 ret = ptrace32 (PT_CONTINUE, inferior_pid, (int *)1, 0, NULL);
485
486 if (ret != 0)
487 perror ("pt_continue");
488
489 do
490 {
491 pid = wait (&status);
492 }
493 while (pid != inferior_pid);
494
495 write_pc (prev_pc);
496 target_remove_breakpoint (DUMMY_INSN_ADDR, shadow_contents);
497 }
498
499 /* Fetch registers from the register section in core bfd. */
500
501 static void
502 fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
503 int which, CORE_ADDR reg_addr)
504 {
505 CoreRegs *regs;
506 double *fprs;
507 int arch64, i, size;
508 void *gprs, *sprs[7];
509
510 if (which != 0)
511 {
512 fprintf_unfiltered
513 (gdb_stderr,
514 "Gdb error: unknown parameter to fetch_core_registers().\n");
515 return;
516 }
517
518 arch64 = ARCH64 ();
519 regs = (CoreRegs *) core_reg_sect;
520
521 /* Retrieve register pointers. */
522
523 if (arch64)
524 {
525 gprs = regs->r64.gpr;
526 fprs = regs->r64.fpr;
527 sprs[0] = &regs->r64.iar;
528 sprs[1] = &regs->r64.msr;
529 sprs[2] = &regs->r64.cr;
530 sprs[3] = &regs->r64.lr;
531 sprs[4] = &regs->r64.ctr;
532 sprs[5] = &regs->r64.xer;
533 }
534 else
535 {
536 gprs = regs->r32.gpr;
537 fprs = regs->r32.fpr;
538 sprs[0] = &regs->r32.iar;
539 sprs[1] = &regs->r32.msr;
540 sprs[2] = &regs->r32.cr;
541 sprs[3] = &regs->r32.lr;
542 sprs[4] = &regs->r32.ctr;
543 sprs[5] = &regs->r32.xer;
544 sprs[6] = &regs->r32.mq;
545 }
546
547 /* Copy from pointers to registers[]. */
548
549 memcpy (registers, gprs, 32 * (arch64 ? 8 : 4));
550 memcpy (registers + REGISTER_BYTE (FP0_REGNUM), fprs, 32 * 8);
551 for (i = FIRST_UISA_SP_REGNUM; i <= LAST_UISA_SP_REGNUM; i++)
552 {
553 size = REGISTER_RAW_SIZE (i);
554 if (size)
555 memcpy (registers + REGISTER_BYTE (i),
556 sprs[i - FIRST_UISA_SP_REGNUM], size);
557 }
558 }
559 \f
560
561 /* Copy information about text and data sections from LDI to VP for a 64-bit
562 process if ARCH64 and for a 32-bit process otherwise. */
563
564 static void
565 vmap_secs (struct vmap *vp, LdInfo *ldi, int arch64)
566 {
567 if (arch64)
568 {
569 vp->tstart = (CORE_ADDR) ldi->l64.ldinfo_textorg;
570 vp->tend = vp->tstart + ldi->l64.ldinfo_textsize;
571 vp->dstart = (CORE_ADDR) ldi->l64.ldinfo_dataorg;
572 vp->dend = vp->dstart + ldi->l64.ldinfo_datasize;
573 }
574 else
575 {
576 vp->tstart = (unsigned long) ldi->l32.ldinfo_textorg;
577 vp->tend = vp->tstart + ldi->l32.ldinfo_textsize;
578 vp->dstart = (unsigned long) ldi->l32.ldinfo_dataorg;
579 vp->dend = vp->dstart + ldi->l32.ldinfo_datasize;
580 }
581
582 /* The run time loader maps the file header in addition to the text
583 section and returns a pointer to the header in ldinfo_textorg.
584 Adjust the text start address to point to the real start address
585 of the text section. */
586 vp->tstart += vp->toffs;
587 }
588
589 /* handle symbol translation on vmapping */
590
591 static void
592 vmap_symtab (struct vmap *vp)
593 {
594 register struct objfile *objfile;
595 struct section_offsets *new_offsets;
596 int i;
597
598 objfile = vp->objfile;
599 if (objfile == NULL)
600 {
601 /* OK, it's not an objfile we opened ourselves.
602 Currently, that can only happen with the exec file, so
603 relocate the symbols for the symfile. */
604 if (symfile_objfile == NULL)
605 return;
606 objfile = symfile_objfile;
607 }
608
609 new_offsets = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
610
611 for (i = 0; i < objfile->num_sections; ++i)
612 ANOFFSET (new_offsets, i) = ANOFFSET (objfile->section_offsets, i);
613
614 /* The symbols in the object file are linked to the VMA of the section,
615 relocate them VMA relative. */
616 ANOFFSET (new_offsets, SECT_OFF_TEXT (objfile)) = vp->tstart - vp->tvma;
617 ANOFFSET (new_offsets, SECT_OFF_DATA (objfile)) = vp->dstart - vp->dvma;
618 ANOFFSET (new_offsets, SECT_OFF_BSS (objfile)) = vp->dstart - vp->dvma;
619
620 objfile_relocate (objfile, new_offsets);
621 }
622 \f
623 /* Add symbols for an objfile. */
624
625 static int
626 objfile_symbol_add (void *arg)
627 {
628 struct objfile *obj = (struct objfile *) arg;
629
630 syms_from_objfile (obj, NULL, 0, 0);
631 new_symfile_objfile (obj, 0, 0);
632 return 1;
633 }
634
635 /* Add a new vmap entry based on ldinfo() information.
636
637 If ldi->ldinfo_fd is not valid (e.g. this struct ld_info is from a
638 core file), the caller should set it to -1, and we will open the file.
639
640 Return the vmap new entry. */
641
642 static struct vmap *
643 add_vmap (LdInfo *ldi)
644 {
645 bfd *abfd, *last;
646 register char *mem, *objname, *filename;
647 struct objfile *obj;
648 struct vmap *vp;
649 int fd;
650 ARCH64_DECL (arch64);
651
652 /* This ldi structure was allocated using alloca() in
653 xcoff_relocate_symtab(). Now we need to have persistent object
654 and member names, so we should save them. */
655
656 filename = LDI_FILENAME (ldi, arch64);
657 mem = filename + strlen (filename) + 1;
658 mem = savestring (mem, strlen (mem));
659 objname = savestring (filename, strlen (filename));
660
661 fd = LDI_FD (ldi, arch64);
662 if (fd < 0)
663 /* Note that this opens it once for every member; a possible
664 enhancement would be to only open it once for every object. */
665 abfd = bfd_openr (objname, gnutarget);
666 else
667 abfd = bfd_fdopenr (objname, gnutarget, fd);
668 if (!abfd)
669 error ("Could not open `%s' as an executable file: %s",
670 objname, bfd_errmsg (bfd_get_error ()));
671
672 /* make sure we have an object file */
673
674 if (bfd_check_format (abfd, bfd_object))
675 vp = map_vmap (abfd, 0);
676
677 else if (bfd_check_format (abfd, bfd_archive))
678 {
679 last = 0;
680 /* FIXME??? am I tossing BFDs? bfd? */
681 while ((last = bfd_openr_next_archived_file (abfd, last)))
682 if (STREQ (mem, last->filename))
683 break;
684
685 if (!last)
686 {
687 bfd_close (abfd);
688 /* FIXME -- should be error */
689 warning ("\"%s\": member \"%s\" missing.", abfd->filename, mem);
690 return 0;
691 }
692
693 if (!bfd_check_format (last, bfd_object))
694 {
695 bfd_close (last); /* XXX??? */
696 goto obj_err;
697 }
698
699 vp = map_vmap (last, abfd);
700 }
701 else
702 {
703 obj_err:
704 bfd_close (abfd);
705 error ("\"%s\": not in executable format: %s.",
706 objname, bfd_errmsg (bfd_get_error ()));
707 /*NOTREACHED */
708 }
709 obj = allocate_objfile (vp->bfd, 0);
710 vp->objfile = obj;
711
712 #ifndef SOLIB_SYMBOLS_MANUAL
713 if (catch_errors (objfile_symbol_add, obj,
714 "Error while reading shared library symbols:\n",
715 RETURN_MASK_ALL))
716 {
717 /* Note this is only done if symbol reading was successful. */
718 vmap_symtab (vp);
719 vp->loaded = 1;
720 }
721 #endif
722 return vp;
723 }
724 \f
725 /* update VMAP info with ldinfo() information
726 Input is ptr to ldinfo() results. */
727
728 static void
729 vmap_ldinfo (LdInfo *ldi)
730 {
731 struct stat ii, vi;
732 register struct vmap *vp;
733 int got_one, retried;
734 int got_exec_file = 0;
735 uint next;
736 int arch64 = ARCH64 ();
737
738 /* For each *ldi, see if we have a corresponding *vp.
739 If so, update the mapping, and symbol table.
740 If not, add an entry and symbol table. */
741
742 do
743 {
744 char *name = LDI_FILENAME (ldi, arch64);
745 char *memb = name + strlen (name) + 1;
746 int fd = LDI_FD (ldi, arch64);
747
748 retried = 0;
749
750 if (fstat (fd, &ii) < 0)
751 {
752 /* The kernel sets ld_info to -1, if the process is still using the
753 object, and the object is removed. Keep the symbol info for the
754 removed object and issue a warning. */
755 warning ("%s (fd=%d) has disappeared, keeping its symbols",
756 name, fd);
757 continue;
758 }
759 retry:
760 for (got_one = 0, vp = vmap; vp; vp = vp->nxt)
761 {
762 struct objfile *objfile;
763
764 /* First try to find a `vp', which is the same as in ldinfo.
765 If not the same, just continue and grep the next `vp'. If same,
766 relocate its tstart, tend, dstart, dend values. If no such `vp'
767 found, get out of this for loop, add this ldi entry as a new vmap
768 (add_vmap) and come back, find its `vp' and so on... */
769
770 /* The filenames are not always sufficient to match on. */
771
772 if ((name[0] == '/' && !STREQ (name, vp->name))
773 || (memb[0] && !STREQ (memb, vp->member)))
774 continue;
775
776 /* See if we are referring to the same file.
777 We have to check objfile->obfd, symfile.c:reread_symbols might
778 have updated the obfd after a change. */
779 objfile = vp->objfile == NULL ? symfile_objfile : vp->objfile;
780 if (objfile == NULL
781 || objfile->obfd == NULL
782 || bfd_stat (objfile->obfd, &vi) < 0)
783 {
784 warning ("Unable to stat %s, keeping its symbols", name);
785 continue;
786 }
787
788 if (ii.st_dev != vi.st_dev || ii.st_ino != vi.st_ino)
789 continue;
790
791 if (!retried)
792 close (fd);
793
794 ++got_one;
795
796 /* Found a corresponding VMAP. Remap! */
797
798 vmap_secs (vp, ldi, arch64);
799
800 /* The objfile is only NULL for the exec file. */
801 if (vp->objfile == NULL)
802 got_exec_file = 1;
803
804 /* relocate symbol table(s). */
805 vmap_symtab (vp);
806
807 /* There may be more, so we don't break out of the loop. */
808 }
809
810 /* if there was no matching *vp, we must perforce create the sucker(s) */
811 if (!got_one && !retried)
812 {
813 add_vmap (ldi);
814 ++retried;
815 goto retry;
816 }
817 }
818 while ((next = LDI_NEXT (ldi, arch64))
819 && (ldi = (void *) (next + (char *) ldi)));
820
821 /* If we don't find the symfile_objfile anywhere in the ldinfo, it
822 is unlikely that the symbol file is relocated to the proper
823 address. And we might have attached to a process which is
824 running a different copy of the same executable. */
825 if (symfile_objfile != NULL && !got_exec_file)
826 {
827 warning_begin ();
828 fputs_unfiltered ("Symbol file ", gdb_stderr);
829 fputs_unfiltered (symfile_objfile->name, gdb_stderr);
830 fputs_unfiltered ("\nis not mapped; discarding it.\n\
831 If in fact that file has symbols which the mapped files listed by\n\
832 \"info files\" lack, you can load symbols with the \"symbol-file\" or\n\
833 \"add-symbol-file\" commands (note that you must take care of relocating\n\
834 symbols to the proper address).\n", gdb_stderr);
835 free_objfile (symfile_objfile);
836 symfile_objfile = NULL;
837 }
838 breakpoint_re_set ();
839 }
840 \f
841 /* As well as symbol tables, exec_sections need relocation. After
842 the inferior process' termination, there will be a relocated symbol
843 table exist with no corresponding inferior process. At that time, we
844 need to use `exec' bfd, rather than the inferior process's memory space
845 to look up symbols.
846
847 `exec_sections' need to be relocated only once, as long as the exec
848 file remains unchanged.
849 */
850
851 static void
852 vmap_exec (void)
853 {
854 static bfd *execbfd;
855 int i;
856
857 if (execbfd == exec_bfd)
858 return;
859
860 execbfd = exec_bfd;
861
862 if (!vmap || !exec_ops.to_sections)
863 error ("vmap_exec: vmap or exec_ops.to_sections == 0\n");
864
865 for (i = 0; &exec_ops.to_sections[i] < exec_ops.to_sections_end; i++)
866 {
867 if (STREQ (".text", exec_ops.to_sections[i].the_bfd_section->name))
868 {
869 exec_ops.to_sections[i].addr += vmap->tstart - vmap->tvma;
870 exec_ops.to_sections[i].endaddr += vmap->tstart - vmap->tvma;
871 }
872 else if (STREQ (".data", exec_ops.to_sections[i].the_bfd_section->name))
873 {
874 exec_ops.to_sections[i].addr += vmap->dstart - vmap->dvma;
875 exec_ops.to_sections[i].endaddr += vmap->dstart - vmap->dvma;
876 }
877 else if (STREQ (".bss", exec_ops.to_sections[i].the_bfd_section->name))
878 {
879 exec_ops.to_sections[i].addr += vmap->dstart - vmap->dvma;
880 exec_ops.to_sections[i].endaddr += vmap->dstart - vmap->dvma;
881 }
882 }
883 }
884
885 /* Set the current architecture from the host running GDB. Called when
886 starting a child process. */
887
888 static void
889 set_host_arch (int pid)
890 {
891 enum bfd_architecture arch;
892 unsigned long mach;
893 bfd abfd;
894 struct gdbarch_info info;
895
896 if (__power_rs ())
897 {
898 arch = bfd_arch_rs6000;
899 mach = bfd_mach_rs6k;
900 }
901 else
902 {
903 arch = bfd_arch_powerpc;
904 mach = bfd_mach_ppc;
905 }
906 bfd_default_set_arch_mach (&abfd, arch, mach);
907
908 memset (&info, 0, sizeof info);
909 info.bfd_arch_info = bfd_get_arch_info (&abfd);
910
911 if (!gdbarch_update_p (info))
912 {
913 internal_error ("set_host_arch: failed to select architecture");
914 }
915 }
916
917 \f
918 /* xcoff_relocate_symtab - hook for symbol table relocation.
919 also reads shared libraries.. */
920
921 void
922 xcoff_relocate_symtab (unsigned int pid)
923 {
924 int load_segs = 64; /* number of load segments */
925 int rc;
926 LdInfo *ldi = NULL;
927 int arch64 = ARCH64 ();
928 int ldisize = arch64 ? sizeof (ldi->l64) : sizeof (ldi->l32);
929 int size;
930
931 do
932 {
933 size = load_segs * ldisize;
934 ldi = (void *) xrealloc (ldi, load_segs * size);
935
936 #if 0
937 /* According to my humble theory, AIX has some timing problems and
938 when the user stack grows, kernel doesn't update stack info in time
939 and ptrace calls step on user stack. That is why we sleep here a
940 little, and give kernel to update its internals. */
941 usleep (36000);
942 #endif
943
944 if (arch64)
945 rc = ptrace64 (PT_LDINFO, pid, (unsigned long) ldi, size, NULL);
946 else
947 rc = ptrace32 (PT_LDINFO, pid, (int *) ldi, size, NULL);
948
949 if (rc == -1)
950 {
951 if (errno == ENOMEM)
952 load_segs *= 2;
953 else
954 perror_with_name ("ptrace ldinfo");
955 }
956 else
957 {
958 vmap_ldinfo (ldi);
959 vmap_exec (); /* relocate the exec and core sections as well. */
960 }
961 } while (rc == -1);
962 if (ldi)
963 free (ldi);
964 }
965 \f
966 /* Core file stuff. */
967
968 /* Relocate symtabs and read in shared library info, based on symbols
969 from the core file. */
970
971 void
972 xcoff_relocate_core (struct target_ops *target)
973 {
974 sec_ptr ldinfo_sec;
975 int offset = 0;
976 LdInfo *ldi;
977 struct vmap *vp;
978 int arch64 = ARCH64 ();
979
980 /* Size of a struct ld_info except for the variable-length filename. */
981 int nonfilesz = (int)LDI_FILENAME ((LdInfo *)0, arch64);
982
983 /* Allocated size of buffer. */
984 int buffer_size = nonfilesz;
985 char *buffer = xmalloc (buffer_size);
986 struct cleanup *old = make_cleanup (free_current_contents, &buffer);
987
988 /* FIXME, this restriction should not exist. For now, though I'll
989 avoid coredumps with error() pending a real fix. */
990 if (vmap == NULL)
991 error
992 ("Can't debug a core file without an executable file (on the RS/6000)");
993
994 ldinfo_sec = bfd_get_section_by_name (core_bfd, ".ldinfo");
995 if (ldinfo_sec == NULL)
996 {
997 bfd_err:
998 fprintf_filtered (gdb_stderr, "Couldn't get ldinfo from core file: %s\n",
999 bfd_errmsg (bfd_get_error ()));
1000 do_cleanups (old);
1001 return;
1002 }
1003 do
1004 {
1005 int i;
1006 int names_found = 0;
1007
1008 /* Read in everything but the name. */
1009 if (bfd_get_section_contents (core_bfd, ldinfo_sec, buffer,
1010 offset, nonfilesz) == 0)
1011 goto bfd_err;
1012
1013 /* Now the name. */
1014 i = nonfilesz;
1015 do
1016 {
1017 if (i == buffer_size)
1018 {
1019 buffer_size *= 2;
1020 buffer = xrealloc (buffer, buffer_size);
1021 }
1022 if (bfd_get_section_contents (core_bfd, ldinfo_sec, &buffer[i],
1023 offset + i, 1) == 0)
1024 goto bfd_err;
1025 if (buffer[i++] == '\0')
1026 ++names_found;
1027 }
1028 while (names_found < 2);
1029
1030 ldi = (LdInfo *) buffer;
1031
1032 /* Can't use a file descriptor from the core file; need to open it. */
1033 if (arch64)
1034 ldi->l64.ldinfo_fd = -1;
1035 else
1036 ldi->l32.ldinfo_fd = -1;
1037
1038 /* The first ldinfo is for the exec file, allocated elsewhere. */
1039 if (offset == 0)
1040 vp = vmap;
1041 else
1042 vp = add_vmap (ldi);
1043
1044 offset += LDI_NEXT (ldi, arch64);
1045 vmap_secs (vp, ldi, arch64);
1046
1047 /* Unless this is the exec file,
1048 add our sections to the section table for the core target. */
1049 if (vp != vmap)
1050 {
1051 struct section_table *stp;
1052
1053 target_resize_to_sections (target, 2);
1054 stp = target->to_sections_end - 2;
1055
1056 stp->bfd = vp->bfd;
1057 stp->the_bfd_section = bfd_get_section_by_name (stp->bfd, ".text");
1058 stp->addr = vp->tstart;
1059 stp->endaddr = vp->tend;
1060 stp++;
1061
1062 stp->bfd = vp->bfd;
1063 stp->the_bfd_section = bfd_get_section_by_name (stp->bfd, ".data");
1064 stp->addr = vp->dstart;
1065 stp->endaddr = vp->dend;
1066 }
1067
1068 vmap_symtab (vp);
1069 }
1070 while (LDI_NEXT (ldi, arch64) != 0);
1071 vmap_exec ();
1072 breakpoint_re_set ();
1073 do_cleanups (old);
1074 }
1075
1076 int
1077 kernel_u_size (void)
1078 {
1079 return (sizeof (struct user));
1080 }
1081 \f
1082 /* Under AIX, we have to pass the correct TOC pointer to a function
1083 when calling functions in the inferior.
1084 We try to find the relative toc offset of the objfile containing PC
1085 and add the current load address of the data segment from the vmap. */
1086
1087 static CORE_ADDR
1088 find_toc_address (CORE_ADDR pc)
1089 {
1090 struct vmap *vp;
1091 extern CORE_ADDR get_toc_offset (struct objfile *); /* xcoffread.c */
1092
1093 for (vp = vmap; vp; vp = vp->nxt)
1094 {
1095 if (pc >= vp->tstart && pc < vp->tend)
1096 {
1097 /* vp->objfile is only NULL for the exec file. */
1098 return vp->dstart + get_toc_offset (vp->objfile == NULL
1099 ? symfile_objfile
1100 : vp->objfile);
1101 }
1102 }
1103 error ("Unable to find TOC entry for pc 0x%x\n", pc);
1104 }
1105 \f
1106 /* Register that we are able to handle rs6000 core file formats. */
1107
1108 static struct core_fns rs6000_core_fns =
1109 {
1110 bfd_target_xcoff_flavour, /* core_flavour */
1111 default_check_format, /* check_format */
1112 default_core_sniffer, /* core_sniffer */
1113 fetch_core_registers, /* core_read_registers */
1114 NULL /* next */
1115 };
1116
1117 void
1118 _initialize_core_rs6000 (void)
1119 {
1120 /* Initialize hook in rs6000-tdep.c for determining the TOC address when
1121 calling functions in the inferior. */
1122 rs6000_find_toc_address_hook = find_toc_address;
1123
1124 /* Initialize hook in rs6000-tdep.c to set the current architecture when
1125 starting a child process. */
1126 rs6000_set_host_arch_hook = set_host_arch;
1127
1128 /* For native configurations, where this module is included, inform
1129 the xcoffsolib module where it can find the function for symbol table
1130 relocation at runtime. */
1131 xcoff_relocate_symtab_hook = xcoff_relocate_symtab;
1132 add_core_fns (&rs6000_core_fns);
1133 }
This page took 0.07099 seconds and 4 git commands to generate.