RS/6000 portability changes (for hosting cross-debuggers).
authorJohn Gilmore <gnu@cygnus>
Sat, 29 Aug 1992 00:32:58 +0000 (00:32 +0000)
committerJohn Gilmore <gnu@cygnus>
Sat, 29 Aug 1992 00:32:58 +0000 (00:32 +0000)
* breakpoint.c (fixup_breakpoints):  Re-kludge to IBM6000_TARGET.
* buildsym.c, rs6000-xdep.c, rs6000-tdep.c, tm-rs6000.h,
xcoffexec.c, xcoffread.c:  Rename aixcoff to xcoff everywhere.
* printcmd.c (print_frame_args):  Remove an RS/6000 dependency.
* stabsread.c (define_symbol):  Remove RS/6000 dependencies.
* tm-rs6000.h (ATTACH_DETACH):  Remove: host-dependent.
(PTRACE_ATTACH, PTRACE_DETACH):  Remove: host-dep.
(NO_SINGLE_STEP):  Add, target-dependent.
(loadinfotextindex):  Lowercase, remove "aix_".
* xm-rs6000.h:  Add <sys/ptrace.h> for infptrace.c.
(NO_SINGLE_STEP):  Remove, target-dependent.
* xcoffexec.c (vmap_symtab):  Cleanup #if 0'd code.
* xcoffread.c:  Only build file if RS/6000 native GDB.
(build_function_symbol):  Remove #if 0'd code.
* rs6000-tdep.c:  Cleanup.  Add static fn protos.
Use CORE_ADDR for addresses throughout.  Make void fns void.
(pop_dummy_frame):  Add FIXME about bogosity of design here.
(rs6000_struct_return_address):  Ditto.
(frameless_function_invocation, frame_get_cache_fsr,
frame_initial_stack_address, xcoff_relocate_symtab,
xcoff_init_loadinfo, free_loadinfo, xcoff_add_toc_to_loadinfo,
add_text_to_loadinfo, find_toc_address):  Move from xdep file.
Use CORE_ADDRs.  Change identifiers to lowercase.

* rs6000-xdep.c:  Make whole file conditional on native RS/6000,
supplying dummy routines if non-native.  Add prototype for
static exec_one_dummy_insn.  Move a mess of functions to
rs6000-tdep.c (as above).  Remove #if 0'd code.

* config/rs6000.mh (XDEPFILES):  Move xcoffexec.o to target side.
(XM_CLIBS):  Add -lm to circumvent AIX 3.2 libc ldexp bug.
* config/rs6000.mt (TDEPFILES):  Adopt xcoffexec.o.

gdb/ChangeLog
gdb/breakpoint.c
gdb/buildsym.c
gdb/rs6000-xdep.c
gdb/stabsread.c
gdb/tm-rs6000.h
gdb/xcoffexec.c
gdb/xcoffread.c
gdb/xm-rs6000.h

index 8f14731a5adb5e1478b63848dd81d99c78b3f861..83e7c40c2afb6c0d27b97687149af5fbcd797bb5 100644 (file)
@@ -1,5 +1,43 @@
 Fri Aug 28 13:13:33 1992  John Gilmore  (gnu@cygnus.com)
 
+       RS/6000 portability changes (for hosting cross-debuggers).
+
+       * breakpoint.c (fixup_breakpoints):  Re-kludge to IBM6000_TARGET.
+       * buildsym.c, rs6000-xdep.c, rs6000-tdep.c, tm-rs6000.h, 
+       xcoffexec.c, xcoffread.c:  Rename aixcoff to xcoff everywhere.
+       * printcmd.c (print_frame_args):  Remove an RS/6000 dependency.
+       * stabsread.c (define_symbol):  Remove RS/6000 dependencies.
+       * tm-rs6000.h (ATTACH_DETACH):  Remove: host-dependent.
+       (PTRACE_ATTACH, PTRACE_DETACH):  Remove: host-dep.
+       (NO_SINGLE_STEP):  Add, target-dependent.
+       (loadinfotextindex):  Lowercase, remove "aix_".
+       * xm-rs6000.h:  Add <sys/ptrace.h> for infptrace.c.
+       (NO_SINGLE_STEP):  Remove, target-dependent.
+       * xcoffexec.c (vmap_symtab):  Cleanup #if 0'd code.
+       * xcoffread.c:  Only build file if RS/6000 native GDB.
+       (build_function_symbol):  Remove #if 0'd code.
+       * rs6000-tdep.c:  Cleanup.  Add static fn protos.
+       Use CORE_ADDR for addresses throughout.  Make void fns void.
+       (pop_dummy_frame):  Add FIXME about bogosity of design here.
+       (rs6000_struct_return_address):  Ditto.
+       (frameless_function_invocation, frame_get_cache_fsr,
+       frame_initial_stack_address, xcoff_relocate_symtab,
+       xcoff_init_loadinfo, free_loadinfo, xcoff_add_toc_to_loadinfo,
+       add_text_to_loadinfo, find_toc_address):  Move from xdep file.
+       Use CORE_ADDRs.  Change identifiers to lowercase.
+
+       * rs6000-xdep.c:  Make whole file conditional on native RS/6000,
+       supplying dummy routines if non-native.  Add prototype for
+       static exec_one_dummy_insn.  Move a mess of functions to
+       rs6000-tdep.c (as above).  Remove #if 0'd code.
+
+       * config/rs6000.mh (XDEPFILES):  Move xcoffexec.o to target side.
+       (XM_CLIBS):  Add -lm to circumvent AIX 3.2 libc ldexp bug.
+       * config/rs6000.mt (TDEPFILES):  Adopt xcoffexec.o.
+
+       * gdbtypes.h (TYPE_ALLOC):  Parenthesize result to avoid problems
+       for callers.
+
        * vx-share/README, nindy-share/README:  New files describing
        how these directories' code is shared, and with whom.
 
index fa9ed106f64f48af7fea744961215aabb6686483..87e8f7c5f08bb962486a5591be90085dc7766cd8 100644 (file)
@@ -317,11 +317,8 @@ commands_command (arg, from_tty)
     if (b->number == bnum)
       {
        if (from_tty && input_from_terminal_p ())
-         {
-           printf_filtered ("Type commands for when breakpoint %d is hit, one per line.\n\
+         printf_filtered ("Type commands for when breakpoint %d is hit, one per line.\n\
 End with a line saying just \"end\".\n", bnum);
-           fflush (stdout);
-         }
        l = read_command_lines ();
        free_command_lines (&b->commands);
        b->commands = l;
@@ -1112,9 +1109,11 @@ breakpoints_info (bnum_exp, from_tty)
   breakpoint_1 (bnum, 0);
 }
 
+#if MAINTENANCE_CMDS
+
 /* ARGSUSED */
 static void
-all_breakpoints_info (bnum_exp, from_tty)
+maintenance_info_breakpoints (bnum_exp, from_tty)
      char *bnum_exp;
      int from_tty;
 {
@@ -1126,6 +1125,8 @@ all_breakpoints_info (bnum_exp, from_tty)
   breakpoint_1 (bnum, 1);
 }
 
+#endif
+
 /* Print a message describing any breakpoints set at PC.  */
 
 static void
@@ -1286,7 +1287,10 @@ enable_longjmp_breakpoint()
 
   ALL_BREAKPOINTS (b)
     if (b->type == bp_longjmp)
-      b->enable = enabled;
+      {
+       b->enable = enabled;
+       check_duplicates (b->address);
+      }
 }
 
 void
@@ -1295,9 +1299,12 @@ disable_longjmp_breakpoint()
   register struct breakpoint *b;
 
   ALL_BREAKPOINTS (b)
-    if (b->type == bp_longjmp
+    if (   b->type == bp_longjmp
        || b->type == bp_longjmp_resume)
-      b->enable = disabled;
+      {
+       b->enable = disabled;
+       check_duplicates (b->address);
+      }
 }
 
 /* Call this after hitting the longjmp() breakpoint.  Use this to set a new
@@ -1323,6 +1330,7 @@ set_longjmp_resume_breakpoint(pc, frame)
          b->frame = FRAME_FP(frame);
        else
          b->frame = 0;
+       check_duplicates (b->address);
        return;
       }
 }
@@ -2247,6 +2255,11 @@ breakpoint_re_set ()
   static char message1[] = "Error in re-setting breakpoint %d:\n";
   char message[sizeof (message1) + 30 /* slop */];
   
+  if (current_source_symtab == NULL)
+    {
+      select_source_symtab (NULL);
+    }
+
   ALL_BREAKPOINTS_SAFE (b, temp)
     {
       sprintf (message, message1, b->number);  /* Format possible error msg */
@@ -2509,15 +2522,6 @@ decode_line_spec_1 (string, funfirstline)
   return sals;
 }
 \f
-
-/* Chain containing all defined enable commands.  */
-
-extern struct cmd_list_element 
-  *enablelist, *disablelist,
-  *deletelist, *enablebreaklist;
-
-extern struct cmd_list_element *cmdlist;
-
 void
 _initialize_breakpoint ()
 {
@@ -2662,7 +2666,9 @@ are set to the address of the last breakpoint listed.\n\n\
 Convenience variable \"$bpnum\" contains the number of the last\n\
 breakpoint set.");
 
-  add_info ("all-breakpoints", all_breakpoints_info,
+#if MAINTENANCE_CMDS
+
+  add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
            "Status of all breakpoints, or breakpoint number NUMBER.\n\
 The \"Type\" column indicates one of:\n\
 \tbreakpoint     - normal breakpoint\n\
@@ -2678,7 +2684,10 @@ address and file/line number respectively.\n\n\
 Convenience variable \"$_\" and default examine address for \"x\"\n\
 are set to the address of the last breakpoint listed.\n\n\
 Convenience variable \"$bpnum\" contains the number of the last\n\
-breakpoint set.");
+breakpoint set.",
+          &maintenanceinfolist);
+
+#endif /* MAINTENANCE_CMDS */
 
   add_com ("catch", class_breakpoint, catch_command,
          "Set breakpoints to catch exceptions that are raised.\n\
@@ -2701,7 +2710,7 @@ an expression changes.");
            "Synonym for ``info breakpoints''.");
 }
 
-#ifdef IBM6000_HOST
+#ifdef IBM6000_TARGET
 /* Where should this function go? It is used by AIX only. FIXME. */
 
 /* Breakpoint address relocation used to be done in breakpoint_re_set(). That
index 566a66f860ad83a50626e119668121c062e15f1e..a25190a6168054fd9b1e698bb85e84cf23984ce5 100644 (file)
@@ -590,7 +590,7 @@ end_symtab (end_addr, sort_pending, sort_linevec, objfile)
        }
     }
 
-  /* It is unfortunate that in aixcoff, pending blocks might not be ordered
+  /* It is unfortunate that in xcoff, pending blocks might not be ordered
      in this stage. Especially, blocks for static functions will show up at
      the end.  We need to sort them, so tools like `find_pc_function' and
      `find_pc_block' can work reliably. */
@@ -649,7 +649,7 @@ end_symtab (end_addr, sort_pending, sort_linevec, objfile)
     }
 
 #ifdef PROCESS_LINENUMBER_HOOK
-  PROCESS_LINENUMBER_HOOK ();                  /* Needed for aixcoff. */
+  PROCESS_LINENUMBER_HOOK ();                  /* Needed for xcoff. */
 #endif
 
   /* Now create the symtab objects proper, one for each subfile.  */
index b4a1851e390d564d467cbbc2638156f28219cb62..a80ee147d7af51dee9c13d164a5812ae7778a0af 100644 (file)
@@ -1,5 +1,5 @@
 /* IBM RS/6000 host-dependent code for GDB, the GNU debugger.
-   Copyright (C) 1986, 1987, 1989, 1991 Free Software Foundation, Inc.
+   Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -23,6 +23,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "symtab.h"
 #include "target.h"
 
+#ifdef RS6000_TARGET
+
 #include <sys/param.h>
 #include <sys/dir.h>
 #include <sys/user.h>
@@ -37,11 +39,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <sys/core.h>
-#include <sys/ldr.h>
-#include <sys/utsname.h>
 
 extern int errno;
-extern int attach_flag;
+
+static void
+exec_one_dummy_insn PARAMS ((void));
 
 /* Conversion from gdb-to-system special purpose register numbers.. */
 
@@ -54,13 +56,6 @@ static int special_regs[] = {
   XER,                         /* XER_REGNUM   */
   MQ                           /* MQ_REGNUM    */
 };
-
-
-/* Nonzero if we just simulated a single step break. */
-extern int one_stepped;
-
-extern struct obstack frame_cache_obstack;
-
 \f
 void
 fetch_inferior_registers (regno)
@@ -229,269 +224,10 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
 }
 
 
-frameless_function_invocation (fi)
-struct frame_info *fi;
-{
-  CORE_ADDR func_start;
-  struct aix_framedata fdata;
-
-  func_start = get_pc_function_start (fi->pc) + FUNCTION_START_OFFSET;
-
-  /* If we failed to find the start of the function, it is a mistake
-     to inspect the instructions. */
-
-  if (!func_start)
-    return 0;
-
-  function_frame_info (func_start, &fdata);
-  return fdata.frameless;
-}
-
-
-/* If saved registers of frame FI are not known yet, read and cache them.
-   &FDATAP contains aix_framedata; TDATAP can be NULL,
-   in which case the framedata are read.
- */
-
-static void
-frame_get_cache_fsr (fi, fdatap)
-     struct frame_info *fi;
-     struct aix_framedata *fdatap;
-{
-  int ii;
-  CORE_ADDR frame_addr; 
-  struct aix_framedata work_fdata;
-  if (fi->cache_fsr)
-    return;
-  
-  if (fdatap == NULL) {
-    fdatap = &work_fdata;
-    function_frame_info (get_pc_function_start (fi->pc), fdatap);
-  }
-
-  fi->cache_fsr = (struct frame_saved_regs *)
-      obstack_alloc (&frame_cache_obstack, sizeof (struct frame_saved_regs));
-  bzero (fi->cache_fsr, sizeof (struct frame_saved_regs));
-
-  if (fi->prev && fi->prev->frame)
-    frame_addr = fi->prev->frame;
-  else
-    frame_addr = read_memory_integer (fi->frame, 4);
-  
-  /* if != -1, fdatap->saved_fpr is the smallest number of saved_fpr.
-     All fpr's from saved_fpr to fp31 are saved right underneath caller
-     stack pointer, starting from fp31 first. */
-
-  if (fdatap->saved_fpr >= 0) {
-    for (ii=31; ii >= fdatap->saved_fpr; --ii)
-      fi->cache_fsr->regs [FP0_REGNUM + ii] = frame_addr - ((32 - ii) * 8);
-    frame_addr -= (32 - fdatap->saved_fpr) * 8;
-  }
-
-  /* if != -1, fdatap->saved_gpr is the smallest number of saved_gpr.
-     All gpr's from saved_gpr to gpr31 are saved right under saved fprs,
-     starting from r31 first. */
-  
-  if (fdatap->saved_gpr >= 0)
-    for (ii=31; ii >= fdatap->saved_gpr; --ii)
-      fi->cache_fsr->regs [ii] = frame_addr - ((32 - ii) * 4);
-}
-
-/* Return the address of a frame. This is the inital %sp value when the frame
-   was first allocated. For functions calling alloca(), it might be saved in
-   an alloca register. */
-
-CORE_ADDR
-frame_initial_stack_address (fi)
-     struct frame_info *fi;
-{
-  CORE_ADDR tmpaddr;
-  struct aix_framedata fdata;
-  struct frame_info *callee_fi;
-
-  /* if the initial stack pointer (frame address) of this frame is known,
-     just return it. */
-
-  if (fi->initial_sp)
-    return fi->initial_sp;
-
-  /* find out if this function is using an alloca register.. */
-
-  function_frame_info (get_pc_function_start (fi->pc), &fdata);
-
-  /* if saved registers of this frame are not known yet, read and cache them. */
-
-  if (!fi->cache_fsr)
-    frame_get_cache_fsr (fi, &fdata);
-
-  /* If no alloca register used, then fi->frame is the value of the %sp for
-     this frame, and it is good enough. */
-
-  if (fdata.alloca_reg < 0) {
-    fi->initial_sp = fi->frame;
-    return fi->initial_sp;
-  }
-
-  /* This function has an alloca register. If this is the top-most frame
-     (with the lowest address), the value in alloca register is good. */
-
-  if (!fi->next)
-    return fi->initial_sp = read_register (fdata.alloca_reg);     
-
-  /* Otherwise, this is a caller frame. Callee has usually already saved
-     registers, but there are exceptions (such as when the callee
-     has no parameters). Find the address in which caller's alloca
-     register is saved. */
-
-  for (callee_fi = fi->next; callee_fi; callee_fi = callee_fi->next) {
-
-    if (!callee_fi->cache_fsr)
-      frame_get_cache_fsr (fi, NULL);
-
-    /* this is the address in which alloca register is saved. */
-
-    tmpaddr = callee_fi->cache_fsr->regs [fdata.alloca_reg];
-    if (tmpaddr) {
-      fi->initial_sp = read_memory_integer (tmpaddr, 4); 
-      return fi->initial_sp;
-    }
-
-    /* Go look into deeper levels of the frame chain to see if any one of
-       the callees has saved alloca register. */
-  }
-
-  /* If alloca register was not saved, by the callee (or any of its callees)
-     then the value in the register is still good. */
-
-  return fi->initial_sp = read_register (fdata.alloca_reg);     
-}
-
-
-
-/* aixcoff_relocate_symtab -   hook for symbol table relocation.
-   also reads shared libraries.. */
-
-aixcoff_relocate_symtab (pid)
-unsigned int pid;
-{
-#define        MAX_LOAD_SEGS 64                /* maximum number of load segments */
-
-    struct ld_info *ldi;
-    int temp;
-
-    ldi = (void *) alloca(MAX_LOAD_SEGS * sizeof (*ldi));
-
-    /* According to my humble theory, aixcoff has some timing problems and
-       when the user stack grows, kernel doesn't update stack info in time
-       and ptrace calls step on user stack. That is why we sleep here a little,
-       and give kernel to update its internals. */
-
-    usleep (36000);
-
-    errno = 0;
-    ptrace(PT_LDINFO, pid, (PTRACE_ARG3_TYPE) ldi,
-          MAX_LOAD_SEGS * sizeof(*ldi), ldi);
-    if (errno) {
-      perror_with_name ("ptrace ldinfo");
-      return 0;
-    }
-
-    vmap_ldinfo(ldi);
-
-   do {
-     add_text_to_loadinfo (ldi->ldinfo_textorg, ldi->ldinfo_dataorg);
-    } while (ldi->ldinfo_next
-            && (ldi = (void *) (ldi->ldinfo_next + (char *) ldi)));
-
-#if 0
-  /* Now that we've jumbled things around, re-sort them.  */
-  sort_minimal_symbols ();
-#endif
-
-  /* relocate the exec and core sections as well. */
-  vmap_exec ();
-}
-
-
-/* Keep an array of load segment information and their TOC table addresses.
-   This info will be useful when calling a shared library function by hand. */
-   
-typedef struct {
-  unsigned long textorg, dataorg, toc_offset;
-} LoadInfo;
-
-#define        LOADINFOLEN     10
-
-static LoadInfo *loadInfo = NULL;
-static int     loadInfoLen = 0;
-static int     loadInfoTocIndex = 0;
-int    aix_loadInfoTextIndex = 0;
-
-
-xcoff_init_loadinfo ()
-{
-  loadInfoTocIndex = 0;
-  aix_loadInfoTextIndex = 0;
-
-  if (loadInfoLen == 0) {
-    loadInfo = (void*) xmalloc (sizeof (LoadInfo) * LOADINFOLEN);
-    loadInfoLen = LOADINFOLEN;
-  }
-}
-
-
-free_loadinfo ()
-{
-  if (loadInfo)
-    free (loadInfo);
-  loadInfo = NULL;
-  loadInfoLen = 0;
-  loadInfoTocIndex = 0;
-  aix_loadInfoTextIndex = 0;
-}
-
-
-xcoff_add_toc_to_loadinfo (unsigned long tocaddr)
-{
-  while (loadInfoTocIndex >= loadInfoLen) {
-    loadInfoLen += LOADINFOLEN;
-    loadInfo = (void*) xrealloc (loadInfo, sizeof(LoadInfo) * loadInfoLen);
-  }
-  loadInfo [loadInfoTocIndex++].toc_offset = tocaddr;
-}
-
-
-add_text_to_loadinfo (unsigned long textaddr, unsigned long dataaddr)
-{
-  while (aix_loadInfoTextIndex >= loadInfoLen) {
-    loadInfoLen += LOADINFOLEN;
-    loadInfo = (void*) xrealloc (loadInfo, sizeof(LoadInfo) * loadInfoLen);
-  }
-  loadInfo [aix_loadInfoTextIndex].textorg = textaddr;
-  loadInfo [aix_loadInfoTextIndex].dataorg = dataaddr;
-  ++aix_loadInfoTextIndex;
-}
-
-
-unsigned long
-find_toc_address (unsigned long pc)
-{
-  int ii, toc_entry, tocbase = 0;
-
-  for (ii=0; ii < aix_loadInfoTextIndex; ++ii)
-    if (pc > loadInfo [ii].textorg && loadInfo [ii].textorg > tocbase) {
-      toc_entry = ii;
-      tocbase =  loadInfo [ii].textorg;
-    }
-
-  return loadInfo [toc_entry].dataorg + loadInfo [toc_entry].toc_offset;
-}
-
-
-/* execute one dummy breakpoint instruction. This way we give kernel
+/* Execute one dummy breakpoint instruction.  This way we give the kernel
    a chance to do some housekeeping and update inferior's internal data,
    including u_area. */
-
+static void
 exec_one_dummy_insn ()
 {
 #define        DUMMY_INSN_ADDR (TEXT_SEGMENT_BASE)+0x200
@@ -517,28 +253,29 @@ exec_one_dummy_insn ()
 }
 
 
-#if 0
+#else /* RS6000_TARGET */
 
-   *** not needed anymore ***
+/* FIXME: Kludge this til we separate host vs. target vs. native code. */
 
-/* Return the number of initial trap signals we need to ignore once the inferior
-   process starts running. This will be `2' for aix-3.1, `3' for aix-3.2 */
-
-int
-aix_starting_inferior_traps ()
+void
+fetch_inferior_registers (regno)
+  int regno;
 {
-  struct utsname unamebuf;
+}
 
-  if (uname (&unamebuf) == -1)
-    fatal ("uname(3) failed.");
+void
+store_inferior_registers (regno)
+     int regno;
+{
+}
 
-  /* Assume the future versions will behave like 3.2 and return '3' for
-     anything other than 3.1x. The extra trap in 3.2 is the "trap after the
-     program is loaded" signal. */
-  
-  if (unamebuf.version[0] == '3' && unamebuf.release[0] == '1')
-    return 2;
-  else
-    return 3;
+void
+fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
+     char *core_reg_sect;
+     unsigned core_reg_size;
+     int which;
+     unsigned int reg_addr;    /* Unused in this version */
+{
 }
-#endif
+
+#endif /* RS6000_TARGET */
index f74e435a96bc6062d9511b8da1698eeb247bb83f..832d9c3c1c4d3678e9e54c79147f05c952a4edef 100644 (file)
@@ -447,26 +447,12 @@ define_symbol (valu, string, desc, type, objfile)
       }
     }
   p++;
+
   /* Determine the type of name being defined.  */
   /* The Acorn RISC machine's compiler can put out locals that don't
      start with "234=" or "(3,4)=", so assume anything other than the
      deftypes we know how to handle is a local.  */
-  /* (Peter Watkins @ Computervision)
-     Handle Sun-style local fortran array types 'ar...' . 
-     (gnu@cygnus.com) -- this strchr() handles them properly?
-     (tiemann@cygnus.com) -- 'C' is for catch.  */
-
-#ifdef IBM6000_TARGET
-
-  /* 'R' is for register parameters. */
-
   if (!strchr ("cfFGpPrStTvVXCR", *p))
-
-#else
-
-  if (!strchr ("cfFGpPrStTvVXC", *p))
-
-#endif
     deftype = 'l';
   else
     deftype = *p++;
@@ -543,12 +529,6 @@ define_symbol (valu, string, desc, type, objfile)
       SYMBOL_TYPE (sym)
        = lookup_pointer_type (lookup_function_type (read_type (&p, objfile)));
     }
-
-#ifdef IBM6000_TARGET
-  else if (deftype == 'R')
-      SYMBOL_TYPE (sym) = read_type (&p, objfile);
-#endif
-
   else
     {
       /* The symbol class letter is followed by a type (typically the
@@ -754,9 +734,7 @@ define_symbol (valu, string, desc, type, objfile)
       add_symbol_to_list (sym, &local_symbols);
       break;
 
-#ifdef IBM6000_TARGET
     case 'R':
-#endif
     case 'r':
       /* Register variable (either global or local).  */
       SYMBOL_CLASS (sym) = LOC_REGISTER;
@@ -2970,7 +2948,6 @@ void end_stabs ()
 
 void
 finish_global_stabs (objfile)
-
      struct objfile *objfile;
 {
   if (global_stabs)
index 43eb2d3ebb1fcecaad80c64b412204face41decf..34d26065b70cd1bb870f99b473f253e7bd627fa7 100644 (file)
@@ -133,12 +133,12 @@ struct aix_framedata {
    figured out where they go. But we want to do this relocation just
    once. */
 
-extern int aix_loadInfoTextIndex;
+extern int loadinfotextindex;
 
 #define        SOLIB_CREATE_INFERIOR_HOOK(PID) \
   do {                                 \
-    if (aix_loadInfoTextIndex == 0)    \
-       aixcoff_relocate_symtab (PID);  \
+    if (loadinfotextindex == 0)        \
+       xcoff_relocate_symtab (PID);    \
   } while (0)
        
 
@@ -164,7 +164,7 @@ extern int aix_loadInfoTextIndex;
    continue;                           \
  }
 
-/* In aixcoff, we cannot process line numbers when we see them. This is
+/* In xcoff, we cannot process line numbers when we see them. This is
    mainly because we don't know the boundaries of the include files. So,
    we postpone that, and then enter and sort(?) the whole line table at
    once, when we are closing the current symbol table in end_symtab(). */
@@ -179,7 +179,7 @@ extern int aix_loadInfoTextIndex;
    load segments. */
 
 #define        SOLIB_ADD(a, b, c)      \
-   if (inferior_pid)   aixcoff_relocate_symtab (inferior_pid)
+   if (inferior_pid)   xcoff_relocate_symtab (inferior_pid)
 
 /* Immediately after a function call, return the saved pc.
    Can't go through the frames for this because on some machines
@@ -413,17 +413,6 @@ extern unsigned int rs6000_struct_return_address;
    as a CORE_ADDR (or an expression that can be used as one).  */
 
 #define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF)   rs6000_struct_return_address
-
-
-/* Do implement the attach and detach commands.  */
-
-#define ATTACH_DETACH
-
-/* infptrace.c requires those. */
-
-#define PTRACE_ATTACH 30
-#define        PTRACE_DETACH 31
-
 \f
 /* Describe the pointer in each stack frame to the previous stack frame
    (its caller).  */
@@ -638,3 +627,7 @@ aix_resizewindow ()                         \
 
 /* Flag for machine-specific stuff in shared files.  FIXME */
 #define IBM6000_TARGET
+
+/* RS6000/AIX does not support PT_STEP.  Has to be simulated.  */
+
+#define NO_SINGLE_STEP
index f9b9e3238f28c28e5033d3b8e1c2e76923ded693..d4586ee8288cb328b39ddc691c17cb219cf124d7 100644 (file)
@@ -445,16 +445,6 @@ struct stat *vip;
     }
 
   if (vp->tstart != old_start) {
-
-#if 0
-  We don't have a valid `objfile' at this point. This is moved into the
-  previous statement; ALL_OBJFILES() for-loop.
-
-    ALL_MSYMBOLS (objfile, msymbol)
-      if (msymbol->address < TEXT_SEGMENT_BASE)
-       msymbol -> address += vp->tstart - old_start;
-#endif /* 0 */
-
     /* breakpoints need to be relocated as well. */
     fixup_breakpoints (0, TEXT_SEGMENT_BASE, vp->tstart - old_start);
   }
@@ -565,7 +555,7 @@ register struct ld_info *ldi; {
        register char *mem, *objname;
 
        /* This ldi structure was allocated using alloca() in 
-          aixcoff_relocate_symtab(). Now we need to have persistent object 
+          xcoff_relocate_symtab(). Now we need to have persistent object 
           and member names, so we should save them. */
 
        mem = ldi->ldinfo_filename + strlen(ldi->ldinfo_filename) + 1;
index 77197855e753fc0df3f512bce3b1f9e68f8caf1d..579ed3083e383b2dbe6d889b29c423d666e277f3 100644 (file)
@@ -1,5 +1,6 @@
-/* Read AIXcoff symbol tables and convert to internal format, for GDB.
-   Copyright (C) 1986-1991 Free Software Foundation, Inc.
+/* Read AIX xcoff symbol tables and convert to internal format, for GDB.
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992
+            Free Software Foundation, Inc.
    Derived from coffread.c, dbxread.c, and a lot of hacking.
    Contributed by IBM Corporation.
 
@@ -22,10 +23,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "defs.h"
 #include "bfd.h"
 
-#ifdef IBM6000_HOST
-/* Native only:  Need struct tbtable in <sys/debug.h>. */
+#if defined(IBM6000_HOST) && defined(IBM6000_TARGET)
+/* Native only:  Need struct tbtable in <sys/debug.h> from host, and 
+                need xcoff_add_toc_to_loadinfo in rs6000-tdep.c from target. */
 
-/* AIX COFF names have a preceeding dot `.' */
+/* AIX XCOFF names have a preceeding dot `.' */
 #define NAMES_HAVE_DOT 1
 
 #include <sys/types.h>
@@ -175,21 +177,21 @@ static int
 init_stringtab PARAMS ((bfd *, long, struct objfile *));
 
 static void
-aixcoff_symfile_init PARAMS ((struct objfile *));
+xcoff_symfile_init PARAMS ((struct objfile *));
 
 static void
-aixcoff_new_init PARAMS ((struct objfile *));
+xcoff_new_init PARAMS ((struct objfile *));
 
 struct section_offset;
 
 static void
-aixcoff_symfile_read PARAMS ((struct objfile *, struct section_offset *, int));
+xcoff_symfile_read PARAMS ((struct objfile *, struct section_offset *, int));
 
 static void
-aixcoff_symfile_finish PARAMS ((struct objfile *));
+xcoff_symfile_finish PARAMS ((struct objfile *));
 
 static struct section_offsets *
-aixcoff_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
+xcoff_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
 
 static int
 init_lineno PARAMS ((bfd *, long, int));
@@ -453,11 +455,11 @@ static void
 record_include_begin (cs)
 struct coff_symbol *cs;
 {
-  /* In aixcoff, we assume include files cannot be nested (not in .c files
+  /* In xcoff, we assume include files cannot be nested (not in .c files
      of course, but in corresponding .s files.) */
 
   if (inclDepth)
-    fatal ("aix internal: pending include file exists.");
+    fatal ("xcoff internal: pending include file exists.");
 
   ++inclDepth;
 
@@ -489,7 +491,7 @@ struct coff_symbol *cs;
   InclTable *pTbl;  
 
   if (inclDepth == 0)
-    fatal ("aix internal: Mismatch C_BINCL/C_EINCL pair found.");
+    fatal ("xcoff internal: Mismatch C_BINCL/C_EINCL pair found.");
 
   pTbl = &inclTable [inclIndx];
   pTbl->end = cs->c_value;
@@ -979,7 +981,7 @@ static struct symbol parmsym = {            /* default parameter symbol */
 }
 
 
-/* aixcoff has static blocks marked in `.bs', `.es' pairs. They cannot be
+/* xcoff has static blocks marked in `.bs', `.es' pairs. They cannot be
    nested. At any given time, a symbol can only be in one static block.
    This is the base address of current static block, zero if non exists. */
    
@@ -1073,7 +1075,7 @@ read_xcoff_symtab (objfile, nsyms)
     /* READ_ONE_SYMBOL (symbol, cs, symname_alloced); */
     /* read one symbol into `cs' structure. After processing the whole symbol
        table, only string table will be kept in memory, symbol table and debug
-       section of aixcoff will be freed. Thus we can mark symbols with names
+       section of xcoff will be freed. Thus we can mark symbols with names
        in string table as `alloced'. */
     {
       int ii;
@@ -2030,7 +2032,7 @@ init_lineno (abfd, offset, size)
    (a \ at the end of the text of a name)
    call this function to get the continuation.  */
 /* So far, I haven't seen this happenning xlc output. I doubt we'll need this
-   for aixcoff. */
+   for xcoff. */
 
 #undef next_symbol_text
 #define        next_symbol_text() \
@@ -2100,42 +2102,14 @@ char **pp;
   }
 }
 
-#if 0  /* Seems to be unused, don't bother converting from old misc function
-          vector usage to new minimal symbol tables.  FIXME:  Delete this? */
-
-/* if we now nothing about a function but its address, make a function symbol
-   out of it with the limited knowladge you have. This will be used when
-   somebody refers to a function, which doesn't exist in the symbol table,
-   but is in the minimal symbol table. */
-
-struct symbol *
-build_function_symbol (ind, objfile)
-     int ind;
-     struct objfile *objfile;
-{
-  struct symbol *sym =
-  (struct symbol *) obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol));
-  SYMBOL_NAME (sym) = misc_function_vector[ind].name;
-  /*   SYMBOL_VALUE (sym) = misc_function_vector[ind].address; */
-  SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
-  SYMBOL_CLASS (sym) = LOC_BLOCK;
-  SYMBOL_TYPE (sym) = lookup_function_type (lookup_fundamental_type (current_objfile, FT_INTEGER));
-  SYMBOL_BLOCK_VALUE (sym) = (struct block *)
-      obstack_alloc (&objfile->symbol_obstack, sizeof (struct block));
-  BLOCK_START (SYMBOL_BLOCK_VALUE (sym)) = misc_function_vector[ind].address;
-  return sym;
-}
-
-#endif
-
 static void
-aixcoff_new_init (objfile)
+xcoff_new_init (objfile)
      struct objfile *objfile;
 {
 }
 
 static void
-aixcoff_symfile_init (objfile)
+xcoff_symfile_init (objfile)
   struct objfile *objfile;
 {
   bfd *abfd = objfile->obfd;
@@ -2152,7 +2126,7 @@ aixcoff_symfile_init (objfile)
    objfile struct from the global list of known objfiles. */
 
 static void
-aixcoff_symfile_finish (objfile)
+xcoff_symfile_finish (objfile)
      struct objfile *objfile;
 {
   if (objfile -> sym_private != NULL)
@@ -2251,10 +2225,10 @@ free_debugsection()
 }
 
 
-/* aixcoff version of symbol file read. */
+/* xcoff version of symbol file read. */
 
 static void
-aixcoff_symfile_read (objfile, section_offset, mainline)
+xcoff_symfile_read (objfile, section_offset, mainline)
   struct objfile *objfile;
   struct section_offset *section_offset;
   int mainline;
@@ -2341,7 +2315,7 @@ aixcoff_symfile_read (objfile, section_offset, mainline)
 
 static
 struct section_offsets *
-aixcoff_symfile_offsets (objfile, addr)
+xcoff_symfile_offsets (objfile, addr)
      struct objfile *objfile;
      CORE_ADDR addr;
 {
@@ -2358,24 +2332,24 @@ aixcoff_symfile_offsets (objfile, addr)
   
   return section_offsets;
 }
-/* Register our ability to parse symbols for aixcoff BFD files. */
+/* Register our ability to parse symbols for xcoff BFD files. */
 
-static struct sym_fns aixcoff_sym_fns =
+static struct sym_fns xcoff_sym_fns =
 {
   "aixcoff-rs6000",    /* sym_name: name or name prefix of BFD target type */
   15,                  /* sym_namelen: number of significant sym_name chars */
-  aixcoff_new_init,    /* sym_new_init: init anything gbl to entire symtab */
-  aixcoff_symfile_init,        /* sym_init: read initial info, setup for sym_read() */
-  aixcoff_symfile_read,        /* sym_read: read a symbol file into symtab */
-  aixcoff_symfile_finish, /* sym_finish: finished with file, cleanup */
-  aixcoff_symfile_offsets, /* sym_offsets: xlate offsets ext->int form */
+  xcoff_new_init,      /* sym_new_init: init anything gbl to entire symtab */
+  xcoff_symfile_init,  /* sym_init: read initial info, setup for sym_read() */
+  xcoff_symfile_read,  /* sym_read: read a symbol file into symtab */
+  xcoff_symfile_finish, /* sym_finish: finished with file, cleanup */
+  xcoff_symfile_offsets, /* sym_offsets: xlate offsets ext->int form */
   NULL                 /* next: pointer to next struct sym_fns */
 };
 
 void
 _initialize_xcoffread ()
 {
-  add_symtab_fns(&aixcoff_sym_fns);
+  add_symtab_fns(&xcoff_sym_fns);
 }
 
 #else /* IBM6000_HOST */
index 9c093410dcb60de5cd4fb943320b516c4c8f36d9..9c820f43f5cd3ea1a33f987098465adcde6ff851 100644 (file)
@@ -19,6 +19,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include <sys/select.h>
+#include <sys/ptrace.h>
 
 /* Big end is at the low address */
 
@@ -49,6 +50,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* The IBM compiler requires this in order to properly compile alloca().  */
 #pragma alloca
 
+/* There is no vfork.  */
+
 #define        vfork   fork
 
 /* Do implement the attach and detach commands.  */
@@ -63,10 +66,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #define        SETPGRP_ARGS 1
 
-/* RS6000/AIXCOFF does not support PT_STEP. Has to be simulated. */
-
-#define NO_SINGLE_STEP
-
 /* Flag for machine-specific stuff in shared files.  FIXME */
 #define IBM6000_HOST