2001-07-04 Elena Zannoni <ezannoni@redhat.com>
[deliverable/binutils-gdb.git] / gdb / mac-nat.c
index b31772da8638ead1b7010f69e7c797d31de1adf9..22f5e012091ec75c46acf566b405a606b7c67f46 100644 (file)
@@ -1,22 +1,24 @@
 /* Target-vector operations for controlling Mac applications, for GDB.
-   Copyright (C) 1995 Free Software Foundation, Inc.
+   Copyright 1995, 1996, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
    Written by Stan Shebs.  Contributed by Cygnus Support.
 
-This file is part of GDB.
+   This file is part of GDB.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without eve nthe implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without eve nthe implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 /* Note that because all the available Mac compilers are ANSI or very
    close, and this is a native-only file, the code may be purely ANSI.  */
@@ -25,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "frame.h"             /* required by inferior.h */
 #include "inferior.h"
 #include "target.h"
-#include "wait.h"
+#include "gdb_wait.h"
 #include "gdbcore.h"
 #include "command.h"
 #include <signal.h>
@@ -35,6 +37,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "gdb_string.h"
 #include "gdbthread.h"
 #include "gdbcmd.h"
+#include "regcache.h"
 
 #include <Processes.h>
 
@@ -45,7 +48,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 extern struct target_ops child_ops;
 
-static void child_stop PARAMS ((void));
+static void child_stop (void);
 
 static void
 child_fetch_inferior_registers (int r)
@@ -75,17 +78,15 @@ child_store_inferior_registers (int r)
     }
 }
 
-static int
-child_wait (int pid, struct target_waitstatus *ourstatus)
+static ptid_t
+child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
 {
 }
 
 /* Attach to process PID, then initialize for debugging it.  */
 
 static void
-child_attach (args, from_tty)
-     char *args;
-     int from_tty;
+child_attach (char *args, int from_tty)
 {
   ProcessSerialNumber psn;
   ProcessInfoRec inforec;
@@ -103,7 +104,7 @@ child_attach (args, from_tty)
   psn.highLongOfPSN = 0;
   psn.lowLongOfPSN = pid;
 
-  inforec.processInfoLength = sizeof(ProcessInfoRec);
+  inforec.processInfoLength = sizeof (ProcessInfoRec);
   inforec.processName = name;
   inforec.processAppSpec = fsspec;
 
@@ -115,23 +116,22 @@ child_attach (args, from_tty)
 
          if (exec_file)
            printf_unfiltered ("Attaching to program `%s', %s\n", exec_file,
-                              target_pid_to_str (pid));
+                              target_pid_to_str (pid_to_ptid (pid)));
          else
-           printf_unfiltered ("Attaching to %s\n", target_pid_to_str (pid));
+           printf_unfiltered ("Attaching to %s\n",
+                              target_pid_to_str (pid_to_ptid (pid)));
 
          gdb_flush (gdb_stdout);
        }
       /* Do we need to do anything special? */
       attach_flag = 1;
-      inferior_pid = pid;
+      inferior_ptid = pid_to_ptid (pid);
       push_target (&child_ops);
     }
 }
 
 static void
-child_detach (args, from_tty)
-     char *args;
-     int from_tty;
+child_detach (char *args, int from_tty)
 {
   char *exec_file;
 
@@ -141,42 +141,36 @@ child_detach (args, from_tty)
       if (exec_file == 0)
        exec_file = "";
       printf_unfiltered ("Detaching from program: %s %s\n", exec_file,
-                        target_pid_to_str (inferior_pid));
+                        target_pid_to_str (inferior_ptid));
       gdb_flush (gdb_stdout);
     }
-  inferior_pid = 0;
+  inferior_ptid = null_ptid;
   unpush_target (&child_ops);
 }
 
 /* Print status information about what we're accessing.  */
 
 static void
-child_files_info (ignore)
-     struct target_ops *ignore;
+child_files_info (struct target_ops *ignore)
 {
   printf_unfiltered ("\tUsing the running image of %s %s.\n",
-      attach_flag ? "attached" : "child", target_pid_to_str (inferior_pid));
+      attach_flag ? "attached" : "child", target_pid_to_str (inferior_ptid));
 }
 
 /* ARGSUSED */
 static void
-child_open (arg, from_tty)
-     char *arg;
-     int from_tty;
+child_open (char *arg, int from_tty)
 {
   error ("Use the \"run\" command to start a Mac application.");
 }
 
-/* Start an inferior Mac program and sets inferior_pid to its pid.
+/* Start an inferior Mac program and sets inferior_ptid to its pid.
    EXEC_FILE is the file to run.
    ALLARGS is a string containing the arguments to the program.
    ENV is the environment vector to pass.  Errors reported with error().  */
 
 static void
-child_create_inferior (exec_file, allargs, env)
-     char *exec_file;
-     char *allargs;
-     char **env;
+child_create_inferior (char *exec_file, char *allargs, char **env)
 {
   LaunchParamBlockRec launchparms;
   FSSpec fsspec;
@@ -193,14 +187,14 @@ child_create_inferior (exec_file, allargs, env)
   launchparms.launchControlFlags = launchContinue | launchNoFileFlags;
   fsspec.vRefNum = 0;
   fsspec.parID = 0;
-  strcpy(fsspec.name + 1, exec_file);
-  fsspec.name[0] = strlen(exec_file);
+  strcpy (fsspec.name + 1, exec_file);
+  fsspec.name[0] = strlen (exec_file);
   launchparms.launchAppSpec = &fsspec;
   launchparms.launchAppParameters = nil;
 
   launch_err = LaunchApplication (&launchparms);
 
-  if (launch_err == 999 /*memFullErr*/)
+  if (launch_err == 999 /*memFullErr */ )
     {
       error ("Not enough memory to launch %s\n", exec_file);
     }
@@ -209,31 +203,32 @@ child_create_inferior (exec_file, allargs, env)
       error ("Error launching %s, code %d\n", exec_file, launch_err);
     }
 
-  inferior_pid = launchparms.launchProcessSN.lowLongOfPSN;
+  inferior_ptid = pid_to_ptid (launchparms.launchProcessSN.lowLongOfPSN);
   /* FIXME be sure that high long of PSN is 0 */
 
   push_target (&child_ops);
   init_wait_for_inferior ();
   clear_proceed_status ();
 
-/*  proceed ((CORE_ADDR) - 1, TARGET_SIGNAL_0, 0);  */
+/*  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);  */
 }
 
 static void
-child_mourn_inferior ()
+child_mourn_inferior (void)
 {
   unpush_target (&child_ops);
   generic_mourn_inferior ();
 }
 
 static void
-child_stop ()
+child_stop (void)
 {
 }
 
 int
-child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
-                int write, struct target_ops *target)
+child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
+                  struct mem_attrib *attrib,
+                  struct target_ops *target)
 {
   int i;
 
@@ -257,31 +252,29 @@ child_kill_inferior (void)
 }
 
 void
-child_resume (int pid, int step, enum target_signal signal)
+child_resume (ptid_t ptid, int step, enum target_signal signal)
 {
 }
 
 static void
-child_prepare_to_store ()
+child_prepare_to_store (void)
 {
   /* Do nothing, since we can store individual regs */
 }
 
 static int
-child_can_run ()
+child_can_run (void)
 {
   return 1;
 }
 
 static void
-child_close ()
+child_close (void)
 {
 }
 
 static void
-info_proc (args, from_tty)
-     char *args;
-     int from_tty;
+info_proc (char *args, int from_tty)
 {
   ProcessSerialNumber psn;
   ProcessInfoRec inforec;
@@ -294,7 +287,7 @@ info_proc (args, from_tty)
   psn.highLongOfPSN = 0;
   psn.lowLongOfPSN = kNoProcess;
 
-  inforec.processInfoLength = sizeof(ProcessInfoRec);
+  inforec.processInfoLength = sizeof (ProcessInfoRec);
   inforec.processName = name;
   inforec.processAppSpec = fsspec;
 
@@ -310,14 +303,14 @@ info_proc (args, from_tty)
          printf_filtered (" %c%c%c%c",
                           (code >> 24) & 0xff,
                           (code >> 16) & 0xff,
-                          (code >>  8) & 0xff,
-                          (code >>  0) & 0xff);
+                          (code >> 8) & 0xff,
+                          (code >> 0) & 0xff);
          code = inforec.processType;
          printf_filtered (" %c%c%c%c",
                           (code >> 24) & 0xff,
                           (code >> 16) & 0xff,
-                          (code >>  8) & 0xff,
-                          (code >>  0) & 0xff);
+                          (code >> 8) & 0xff,
+                          (code >> 0) & 0xff);
          if (psn.highLongOfPSN == 0)
            printf_filtered (" %9d", psn.lowLongOfPSN);
          else
@@ -332,54 +325,79 @@ info_proc (args, from_tty)
     }
 }
 
-struct target_ops child_ops =
+struct target_ops child_ops;
+
+static void
+init_child_ops (void)
 {
-  "mac",                       /* to_shortname */
-  "MacOS application",         /* to_longname */
-  "MacOS application (started by the \"run\" command).",       /* to_doc */
-  child_open,                  /* to_open */
-  child_close,                 /* to_close */
-  child_attach,                        /* to_attach */
-  child_detach,                        /* to_detach */
-  child_resume,                        /* to_resume */
-  child_wait,                  /* to_wait */
-  child_fetch_inferior_registers,/* to_fetch_registers */
-  child_store_inferior_registers,/* to_store_registers */
-  child_prepare_to_store,      /* to_prepare_to_store */
-  child_xfer_memory,           /* to_xfer_memory */
-  child_files_info,            /* to_files_info */
-  memory_insert_breakpoint,    /* to_insert_breakpoint */
-  memory_remove_breakpoint,    /* to_remove_breakpoint */
-  0,                           /* to_terminal_init */
-  0,                           /* to_terminal_inferior */
-  0,                           /* to_terminal_ours_for_output */
-  0,                           /* to_terminal_ours */
-  0,                           /* to_terminal_info */
-  child_kill_inferior,         /* to_kill */
-  0,                           /* to_load */
-  0,                           /* to_lookup_symbol */
-  child_create_inferior,       /* to_create_inferior */
-  child_mourn_inferior,                /* to_mourn_inferior */
-  child_can_run,               /* to_can_run */
-  0,                           /* to_notice_signals */
-  0,                           /* to_thread_alive */
-  child_stop,                  /* to_stop */
-  process_stratum,             /* to_stratum */
-  0,                           /* to_next */
-  1,                           /* to_has_all_memory */
-  1,                           /* to_has_memory */
-  1,                           /* to_has_stack */
-  1,                           /* to_has_registers */
-  1,                           /* to_has_execution */
-  0,                           /* to_sections */
-  0,                           /* to_sections_end */
-  OPS_MAGIC                    /* to_magic */
+  child_ops.to_shortname = "mac";
+  child_ops.to_longname = "MacOS application";
+  child_ops.to_doc = "MacOS application (started by the \"run\" command).";
+  child_ops.to_open = child_open;
+  child_ops.to_close = child_close;
+  child_ops.to_attach = child_attach;
+  child_ops.to_post_attach = NULL;
+  child_ops.to_require_attach = NULL;  /* to_require_attach */
+  child_ops.to_detach = child_detach;
+  child_ops.to_require_detach = NULL;  /* to_require_detach */
+  child_ops.to_resume = child_resume;
+  child_ops.to_wait = child_wait;
+  child_ops.to_post_wait = NULL;       /* to_post_wait */
+  child_ops.to_fetch_registers = child_fetch_inferior_registers;
+  child_ops.to_store_registers = child_store_inferior_registers;
+  child_ops.to_prepare_to_store = child_prepare_to_store;
+  child_ops.to_xfer_memory = child_xfer_memory;
+  child_ops.to_files_info = child_files_info;
+  child_ops.to_insert_breakpoint = memory_insert_breakpoint;
+  child_ops.to_remove_breakpoint = memory_remove_breakpoint;
+  child_ops.to_terminal_init = 0;
+  child_ops.to_terminal_inferior = 0;
+  child_ops.to_terminal_ours_for_output = 0;
+  child_ops.to_terminal_ours = 0;
+  child_ops.to_terminal_info = 0;
+  child_ops.to_kill = child_kill_inferior;
+  child_ops.to_load = 0;
+  child_ops.to_lookup_symbol = 0;
+  child_ops.to_create_inferior = child_create_inferior;
+  child_ops.to_post_startup_inferior = NULL;   /* to_post_startup_inferior */
+  child_ops.to_acknowledge_created_inferior = NULL;    /* to_acknowledge_created_inferior */
+  child_ops.to_clone_and_follow_inferior = NULL;       /* to_clone_and_follow_inferior */
+  child_ops.to_post_follow_inferior_by_clone = NULL;   /* to_post_follow_inferior_by_clone */
+  child_ops.to_insert_fork_catchpoint = NULL;
+  child_ops.to_remove_fork_catchpoint = NULL;
+  child_ops.to_insert_vfork_catchpoint = NULL;
+  child_ops.to_remove_vfork_catchpoint = NULL;
+  child_ops.to_has_forked = NULL;      /* to_has_forked */
+  child_ops.to_has_vforked = NULL;     /* to_has_vforked */
+  child_ops.to_can_follow_vfork_prior_to_exec = NULL;
+  child_ops.to_post_follow_vfork = NULL;       /* to_post_follow_vfork */
+  child_ops.to_insert_exec_catchpoint = NULL;
+  child_ops.to_remove_exec_catchpoint = NULL;
+  child_ops.to_has_execd = NULL;
+  child_ops.to_reported_exec_events_per_exec_call = NULL;
+  child_ops.to_has_exited = NULL;
+  child_ops.to_mourn_inferior = child_mourn_inferior;
+  child_ops.to_can_run = child_can_run;
+  child_ops.to_notice_signals = 0;
+  child_ops.to_thread_alive = 0;
+  child_ops.to_stop = child_stop;
+  child_ops.to_pid_to_exec_file = NULL;                /* to_pid_to_exec_file */
+  child_ops.to_stratum = process_stratum;
+  child_ops.DONT_USE = 0;
+  child_ops.to_has_all_memory = 1;
+  child_ops.to_has_memory = 1;
+  child_ops.to_has_stack = 1;
+  child_ops.to_has_registers = 1;
+  child_ops.to_has_execution = 1;
+  child_ops.to_sections = 0;
+  child_ops.to_sections_end = 0;
+  child_ops.to_magic = OPS_MAGIC;
 };
 
 void
-_initialize_mac_nat ()
+_initialize_mac_nat (void)
 {
-  add_target (&child_ops);
+  init_child_ops ();
 
   add_info ("proc", info_proc,
            "Show information about processes.");
This page took 0.029729 seconds and 4 git commands to generate.