OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [mac-nat.c] - Diff between revs 105 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 105 Rev 1765
/* Target-vector operations for controlling Mac applications, for GDB.
/* Target-vector operations for controlling Mac applications, for GDB.
   Copyright (C) 1995 Free Software Foundation, Inc.
   Copyright (C) 1995 Free Software Foundation, Inc.
   Written by Stan Shebs.  Contributed by Cygnus Support.
   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
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without eve nthe implied warranty of
   but WITHOUT ANY WARRANTY; without eve nthe implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */
   Boston, MA 02111-1307, USA.  */
 
 
/* Note that because all the available Mac compilers are ANSI or very
/* 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.  */
   close, and this is a native-only file, the code may be purely ANSI.  */
 
 
#include "defs.h"
#include "defs.h"
#include "frame.h"              /* required by inferior.h */
#include "frame.h"              /* required by inferior.h */
#include "inferior.h"
#include "inferior.h"
#include "target.h"
#include "target.h"
#include "gdb_wait.h"
#include "gdb_wait.h"
#include "gdbcore.h"
#include "gdbcore.h"
#include "command.h"
#include "command.h"
#include <signal.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/types.h>
#include <fcntl.h>
#include <fcntl.h>
#include "buildsym.h"
#include "buildsym.h"
#include "gdb_string.h"
#include "gdb_string.h"
#include "gdbthread.h"
#include "gdbthread.h"
#include "gdbcmd.h"
#include "gdbcmd.h"
 
 
#include <Processes.h>
#include <Processes.h>
 
 
/* We call the functions "child_..." rather than "mac_..." so no one
/* We call the functions "child_..." rather than "mac_..." so no one
   is tempted to try to link this with other native-only code.  */
   is tempted to try to link this with other native-only code.  */
 
 
/* Forward declaration */
/* Forward declaration */
 
 
extern struct target_ops child_ops;
extern struct target_ops child_ops;
 
 
static void child_stop PARAMS ((void));
static void child_stop PARAMS ((void));
 
 
static void
static void
child_fetch_inferior_registers (int r)
child_fetch_inferior_registers (int r)
{
{
  if (r < 0)
  if (r < 0)
    {
    {
      for (r = 0; r < NUM_REGS; r++)
      for (r = 0; r < NUM_REGS; r++)
        child_fetch_inferior_registers (r);
        child_fetch_inferior_registers (r);
    }
    }
  else
  else
    {
    {
      supply_register (r, 0);
      supply_register (r, 0);
    }
    }
}
}
 
 
static void
static void
child_store_inferior_registers (int r)
child_store_inferior_registers (int r)
{
{
  if (r < 0)
  if (r < 0)
    {
    {
      for (r = 0; r < NUM_REGS; r++)
      for (r = 0; r < NUM_REGS; r++)
        child_store_inferior_registers (r);
        child_store_inferior_registers (r);
    }
    }
  else
  else
    {
    {
      read_register_gen (r, 0);
      read_register_gen (r, 0);
    }
    }
}
}
 
 
static int
static int
child_wait (int pid, struct target_waitstatus *ourstatus)
child_wait (int pid, struct target_waitstatus *ourstatus)
{
{
}
}
 
 
/* Attach to process PID, then initialize for debugging it.  */
/* Attach to process PID, then initialize for debugging it.  */
 
 
static void
static void
child_attach (args, from_tty)
child_attach (args, from_tty)
     char *args;
     char *args;
     int from_tty;
     int from_tty;
{
{
  ProcessSerialNumber psn;
  ProcessSerialNumber psn;
  ProcessInfoRec inforec;
  ProcessInfoRec inforec;
  Str31 name;
  Str31 name;
  FSSpecPtr fsspec;
  FSSpecPtr fsspec;
  OSType code;
  OSType code;
  int pid;
  int pid;
  char *exec_file;
  char *exec_file;
 
 
  if (!args)
  if (!args)
    error_no_arg ("process-id to attach");
    error_no_arg ("process-id to attach");
 
 
  pid = atoi (args);
  pid = atoi (args);
 
 
  psn.highLongOfPSN = 0;
  psn.highLongOfPSN = 0;
  psn.lowLongOfPSN = pid;
  psn.lowLongOfPSN = pid;
 
 
  inforec.processInfoLength = sizeof (ProcessInfoRec);
  inforec.processInfoLength = sizeof (ProcessInfoRec);
  inforec.processName = name;
  inforec.processName = name;
  inforec.processAppSpec = fsspec;
  inforec.processAppSpec = fsspec;
 
 
  if (GetProcessInformation (&psn, &inforec) == noErr)
  if (GetProcessInformation (&psn, &inforec) == noErr)
    {
    {
      if (from_tty)
      if (from_tty)
        {
        {
          exec_file = (char *) get_exec_file (0);
          exec_file = (char *) get_exec_file (0);
 
 
          if (exec_file)
          if (exec_file)
            printf_unfiltered ("Attaching to program `%s', %s\n", exec_file,
            printf_unfiltered ("Attaching to program `%s', %s\n", exec_file,
                               target_pid_to_str (pid));
                               target_pid_to_str (pid));
          else
          else
            printf_unfiltered ("Attaching to %s\n", target_pid_to_str (pid));
            printf_unfiltered ("Attaching to %s\n", target_pid_to_str (pid));
 
 
          gdb_flush (gdb_stdout);
          gdb_flush (gdb_stdout);
        }
        }
      /* Do we need to do anything special? */
      /* Do we need to do anything special? */
      attach_flag = 1;
      attach_flag = 1;
      inferior_pid = pid;
      inferior_pid = pid;
      push_target (&child_ops);
      push_target (&child_ops);
    }
    }
}
}
 
 
static void
static void
child_detach (args, from_tty)
child_detach (args, from_tty)
     char *args;
     char *args;
     int from_tty;
     int from_tty;
{
{
  char *exec_file;
  char *exec_file;
 
 
  if (from_tty)
  if (from_tty)
    {
    {
      exec_file = get_exec_file (0);
      exec_file = get_exec_file (0);
      if (exec_file == 0)
      if (exec_file == 0)
        exec_file = "";
        exec_file = "";
      printf_unfiltered ("Detaching from program: %s %s\n", exec_file,
      printf_unfiltered ("Detaching from program: %s %s\n", exec_file,
                         target_pid_to_str (inferior_pid));
                         target_pid_to_str (inferior_pid));
      gdb_flush (gdb_stdout);
      gdb_flush (gdb_stdout);
    }
    }
  inferior_pid = 0;
  inferior_pid = 0;
  unpush_target (&child_ops);
  unpush_target (&child_ops);
}
}
 
 
/* Print status information about what we're accessing.  */
/* Print status information about what we're accessing.  */
 
 
static void
static void
child_files_info (ignore)
child_files_info (ignore)
     struct target_ops *ignore;
     struct target_ops *ignore;
{
{
  printf_unfiltered ("\tUsing the running image of %s %s.\n",
  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_pid));
}
}
 
 
/* ARGSUSED */
/* ARGSUSED */
static void
static void
child_open (arg, from_tty)
child_open (arg, from_tty)
     char *arg;
     char *arg;
     int from_tty;
     int from_tty;
{
{
  error ("Use the \"run\" command to start a Mac application.");
  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_pid to its pid.
   EXEC_FILE is the file to run.
   EXEC_FILE is the file to run.
   ALLARGS is a string containing the arguments to the program.
   ALLARGS is a string containing the arguments to the program.
   ENV is the environment vector to pass.  Errors reported with error().  */
   ENV is the environment vector to pass.  Errors reported with error().  */
 
 
static void
static void
child_create_inferior (exec_file, allargs, env)
child_create_inferior (exec_file, allargs, env)
     char *exec_file;
     char *exec_file;
     char *allargs;
     char *allargs;
     char **env;
     char **env;
{
{
  LaunchParamBlockRec launchparms;
  LaunchParamBlockRec launchparms;
  FSSpec fsspec;
  FSSpec fsspec;
  OSErr launch_err;
  OSErr launch_err;
 
 
  if (!exec_file)
  if (!exec_file)
    {
    {
      error ("No executable specified, use `target exec'.\n");
      error ("No executable specified, use `target exec'.\n");
    }
    }
 
 
  launchparms.launchBlockID = extendedBlock;
  launchparms.launchBlockID = extendedBlock;
  launchparms.launchEPBLength = extendedBlockLen;
  launchparms.launchEPBLength = extendedBlockLen;
  launchparms.launchFileFlags = 0;
  launchparms.launchFileFlags = 0;
  launchparms.launchControlFlags = launchContinue | launchNoFileFlags;
  launchparms.launchControlFlags = launchContinue | launchNoFileFlags;
  fsspec.vRefNum = 0;
  fsspec.vRefNum = 0;
  fsspec.parID = 0;
  fsspec.parID = 0;
  strcpy (fsspec.name + 1, exec_file);
  strcpy (fsspec.name + 1, exec_file);
  fsspec.name[0] = strlen (exec_file);
  fsspec.name[0] = strlen (exec_file);
  launchparms.launchAppSpec = &fsspec;
  launchparms.launchAppSpec = &fsspec;
  launchparms.launchAppParameters = nil;
  launchparms.launchAppParameters = nil;
 
 
  launch_err = LaunchApplication (&launchparms);
  launch_err = LaunchApplication (&launchparms);
 
 
  if (launch_err == 999 /*memFullErr */ )
  if (launch_err == 999 /*memFullErr */ )
    {
    {
      error ("Not enough memory to launch %s\n", exec_file);
      error ("Not enough memory to launch %s\n", exec_file);
    }
    }
  else if (launch_err != noErr)
  else if (launch_err != noErr)
    {
    {
      error ("Error launching %s, code %d\n", exec_file, launch_err);
      error ("Error launching %s, code %d\n", exec_file, launch_err);
    }
    }
 
 
  inferior_pid = launchparms.launchProcessSN.lowLongOfPSN;
  inferior_pid = launchparms.launchProcessSN.lowLongOfPSN;
  /* FIXME be sure that high long of PSN is 0 */
  /* FIXME be sure that high long of PSN is 0 */
 
 
  push_target (&child_ops);
  push_target (&child_ops);
  init_wait_for_inferior ();
  init_wait_for_inferior ();
  clear_proceed_status ();
  clear_proceed_status ();
 
 
/*  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);  */
/*  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);  */
}
}
 
 
static void
static void
child_mourn_inferior ()
child_mourn_inferior ()
{
{
  unpush_target (&child_ops);
  unpush_target (&child_ops);
  generic_mourn_inferior ();
  generic_mourn_inferior ();
}
}
 
 
static void
static void
child_stop ()
child_stop ()
{
{
}
}
 
 
int
int
child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
child_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
                   int write, struct target_ops *target)
                   int write, struct target_ops *target)
{
{
  int i;
  int i;
 
 
  for (i = 0; i < len; ++i)
  for (i = 0; i < len; ++i)
    {
    {
      if (write)
      if (write)
        {
        {
          ((char *) memaddr)[i] = myaddr[i];
          ((char *) memaddr)[i] = myaddr[i];
        }
        }
      else
      else
        {
        {
          myaddr[i] = ((char *) memaddr)[i];
          myaddr[i] = ((char *) memaddr)[i];
        }
        }
    }
    }
  return len;
  return len;
}
}
 
 
void
void
child_kill_inferior (void)
child_kill_inferior (void)
{
{
}
}
 
 
void
void
child_resume (int pid, int step, enum target_signal signal)
child_resume (int pid, int step, enum target_signal signal)
{
{
}
}
 
 
static void
static void
child_prepare_to_store ()
child_prepare_to_store ()
{
{
  /* Do nothing, since we can store individual regs */
  /* Do nothing, since we can store individual regs */
}
}
 
 
static int
static int
child_can_run ()
child_can_run ()
{
{
  return 1;
  return 1;
}
}
 
 
static void
static void
child_close ()
child_close ()
{
{
}
}
 
 
static void
static void
info_proc (args, from_tty)
info_proc (args, from_tty)
     char *args;
     char *args;
     int from_tty;
     int from_tty;
{
{
  ProcessSerialNumber psn;
  ProcessSerialNumber psn;
  ProcessInfoRec inforec;
  ProcessInfoRec inforec;
  Str31 name;
  Str31 name;
  FSSpecPtr fsspec;
  FSSpecPtr fsspec;
  OSType code;
  OSType code;
 
 
  /* Eventually use args, but not right now. */
  /* Eventually use args, but not right now. */
 
 
  psn.highLongOfPSN = 0;
  psn.highLongOfPSN = 0;
  psn.lowLongOfPSN = kNoProcess;
  psn.lowLongOfPSN = kNoProcess;
 
 
  inforec.processInfoLength = sizeof (ProcessInfoRec);
  inforec.processInfoLength = sizeof (ProcessInfoRec);
  inforec.processName = name;
  inforec.processName = name;
  inforec.processAppSpec = fsspec;
  inforec.processAppSpec = fsspec;
 
 
  printf_filtered ("Process Name                     Sgnt Type    PSN   Loc Size FreeMem Time\n");
  printf_filtered ("Process Name                     Sgnt Type    PSN   Loc Size FreeMem Time\n");
 
 
  while (GetNextProcess (&psn) == noErr)
  while (GetNextProcess (&psn) == noErr)
    {
    {
      if (GetProcessInformation (&psn, &inforec) == noErr)
      if (GetProcessInformation (&psn, &inforec) == noErr)
        {
        {
          name[name[0] + 1] = '\0';
          name[name[0] + 1] = '\0';
          printf_filtered ("%-32.32s", name + 1);
          printf_filtered ("%-32.32s", name + 1);
          code = inforec.processSignature;
          code = inforec.processSignature;
          printf_filtered (" %c%c%c%c",
          printf_filtered (" %c%c%c%c",
                           (code >> 24) & 0xff,
                           (code >> 24) & 0xff,
                           (code >> 16) & 0xff,
                           (code >> 16) & 0xff,
                           (code >> 8) & 0xff,
                           (code >> 8) & 0xff,
                           (code >> 0) & 0xff);
                           (code >> 0) & 0xff);
          code = inforec.processType;
          code = inforec.processType;
          printf_filtered (" %c%c%c%c",
          printf_filtered (" %c%c%c%c",
                           (code >> 24) & 0xff,
                           (code >> 24) & 0xff,
                           (code >> 16) & 0xff,
                           (code >> 16) & 0xff,
                           (code >> 8) & 0xff,
                           (code >> 8) & 0xff,
                           (code >> 0) & 0xff);
                           (code >> 0) & 0xff);
          if (psn.highLongOfPSN == 0)
          if (psn.highLongOfPSN == 0)
            printf_filtered (" %9d", psn.lowLongOfPSN);
            printf_filtered (" %9d", psn.lowLongOfPSN);
          else
          else
            printf_filtered (" %9d,%9d\n",
            printf_filtered (" %9d,%9d\n",
                             psn.highLongOfPSN, psn.lowLongOfPSN);
                             psn.highLongOfPSN, psn.lowLongOfPSN);
          printf_filtered (" 0x%x", inforec.processLocation);
          printf_filtered (" 0x%x", inforec.processLocation);
          printf_filtered (" %9d", inforec.processSize);
          printf_filtered (" %9d", inforec.processSize);
          printf_filtered (" %9d", inforec.processFreeMem);
          printf_filtered (" %9d", inforec.processFreeMem);
          printf_filtered (" %9d", inforec.processActiveTime);
          printf_filtered (" %9d", inforec.processActiveTime);
          printf_filtered ("\n");
          printf_filtered ("\n");
        }
        }
    }
    }
}
}
 
 
struct target_ops child_ops;
struct target_ops child_ops;
 
 
static void
static void
init_child_ops (void)
init_child_ops (void)
{
{
  child_ops.to_shortname = "mac";
  child_ops.to_shortname = "mac";
  child_ops.to_longname = "MacOS application";
  child_ops.to_longname = "MacOS application";
  child_ops.to_doc = "MacOS application (started by the \"run\" command).";
  child_ops.to_doc = "MacOS application (started by the \"run\" command).";
  child_ops.to_open = child_open;
  child_ops.to_open = child_open;
  child_ops.to_close = child_close;
  child_ops.to_close = child_close;
  child_ops.to_attach = child_attach;
  child_ops.to_attach = child_attach;
  child_ops.to_post_attach = NULL;
  child_ops.to_post_attach = NULL;
  child_ops.to_require_attach = NULL;   /* to_require_attach */
  child_ops.to_require_attach = NULL;   /* to_require_attach */
  child_ops.to_detach = child_detach;
  child_ops.to_detach = child_detach;
  child_ops.to_require_detach = NULL;   /* to_require_detach */
  child_ops.to_require_detach = NULL;   /* to_require_detach */
  child_ops.to_resume = child_resume;
  child_ops.to_resume = child_resume;
  child_ops.to_wait = child_wait;
  child_ops.to_wait = child_wait;
  child_ops.to_post_wait = NULL;        /* to_post_wait */
  child_ops.to_post_wait = NULL;        /* to_post_wait */
  child_ops.to_fetch_registers = child_fetch_inferior_registers;
  child_ops.to_fetch_registers = child_fetch_inferior_registers;
  child_ops.to_store_registers = child_store_inferior_registers;
  child_ops.to_store_registers = child_store_inferior_registers;
  child_ops.to_prepare_to_store = child_prepare_to_store;
  child_ops.to_prepare_to_store = child_prepare_to_store;
  child_ops.to_xfer_memory = child_xfer_memory;
  child_ops.to_xfer_memory = child_xfer_memory;
  child_ops.to_files_info = child_files_info;
  child_ops.to_files_info = child_files_info;
  child_ops.to_insert_breakpoint = memory_insert_breakpoint;
  child_ops.to_insert_breakpoint = memory_insert_breakpoint;
  child_ops.to_remove_breakpoint = memory_remove_breakpoint;
  child_ops.to_remove_breakpoint = memory_remove_breakpoint;
  child_ops.to_terminal_init = 0;
  child_ops.to_terminal_init = 0;
  child_ops.to_terminal_inferior = 0;
  child_ops.to_terminal_inferior = 0;
  child_ops.to_terminal_ours_for_output = 0;
  child_ops.to_terminal_ours_for_output = 0;
  child_ops.to_terminal_ours = 0;
  child_ops.to_terminal_ours = 0;
  child_ops.to_terminal_info = 0;
  child_ops.to_terminal_info = 0;
  child_ops.to_kill = child_kill_inferior;
  child_ops.to_kill = child_kill_inferior;
  child_ops.to_load = 0;
  child_ops.to_load = 0;
  child_ops.to_lookup_symbol = 0;
  child_ops.to_lookup_symbol = 0;
  child_ops.to_create_inferior = child_create_inferior;
  child_ops.to_create_inferior = child_create_inferior;
  child_ops.to_post_startup_inferior = NULL;    /* to_post_startup_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_acknowledge_created_inferior = NULL;     /* to_acknowledge_created_inferior */
  child_ops.to_clone_and_follow_inferior = NULL;        /* to_clone_and_follow_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_post_follow_inferior_by_clone = NULL;    /* to_post_follow_inferior_by_clone */
  child_ops.to_insert_fork_catchpoint = NULL;
  child_ops.to_insert_fork_catchpoint = NULL;
  child_ops.to_remove_fork_catchpoint = NULL;
  child_ops.to_remove_fork_catchpoint = NULL;
  child_ops.to_insert_vfork_catchpoint = NULL;
  child_ops.to_insert_vfork_catchpoint = NULL;
  child_ops.to_remove_vfork_catchpoint = NULL;
  child_ops.to_remove_vfork_catchpoint = NULL;
  child_ops.to_has_forked = NULL;       /* to_has_forked */
  child_ops.to_has_forked = NULL;       /* to_has_forked */
  child_ops.to_has_vforked = NULL;      /* to_has_vforked */
  child_ops.to_has_vforked = NULL;      /* to_has_vforked */
  child_ops.to_can_follow_vfork_prior_to_exec = NULL;
  child_ops.to_can_follow_vfork_prior_to_exec = NULL;
  child_ops.to_post_follow_vfork = NULL;        /* to_post_follow_vfork */
  child_ops.to_post_follow_vfork = NULL;        /* to_post_follow_vfork */
  child_ops.to_insert_exec_catchpoint = NULL;
  child_ops.to_insert_exec_catchpoint = NULL;
  child_ops.to_remove_exec_catchpoint = NULL;
  child_ops.to_remove_exec_catchpoint = NULL;
  child_ops.to_has_execd = NULL;
  child_ops.to_has_execd = NULL;
  child_ops.to_reported_exec_events_per_exec_call = NULL;
  child_ops.to_reported_exec_events_per_exec_call = NULL;
  child_ops.to_has_exited = NULL;
  child_ops.to_has_exited = NULL;
  child_ops.to_mourn_inferior = child_mourn_inferior;
  child_ops.to_mourn_inferior = child_mourn_inferior;
  child_ops.to_can_run = child_can_run;
  child_ops.to_can_run = child_can_run;
  child_ops.to_notice_signals = 0;
  child_ops.to_notice_signals = 0;
  child_ops.to_thread_alive = 0;
  child_ops.to_thread_alive = 0;
  child_ops.to_stop = child_stop;
  child_ops.to_stop = child_stop;
  child_ops.to_pid_to_exec_file = NULL;         /* to_pid_to_exec_file */
  child_ops.to_pid_to_exec_file = NULL;         /* to_pid_to_exec_file */
  child_ops.to_core_file_to_sym_file = NULL;
  child_ops.to_core_file_to_sym_file = NULL;
  child_ops.to_stratum = process_stratum;
  child_ops.to_stratum = process_stratum;
  child_ops.DONT_USE = 0;
  child_ops.DONT_USE = 0;
  child_ops.to_has_all_memory = 1;
  child_ops.to_has_all_memory = 1;
  child_ops.to_has_memory = 1;
  child_ops.to_has_memory = 1;
  child_ops.to_has_stack = 1;
  child_ops.to_has_stack = 1;
  child_ops.to_has_registers = 1;
  child_ops.to_has_registers = 1;
  child_ops.to_has_execution = 1;
  child_ops.to_has_execution = 1;
  child_ops.to_sections = 0;
  child_ops.to_sections = 0;
  child_ops.to_sections_end = 0;
  child_ops.to_sections_end = 0;
  child_ops.to_magic = OPS_MAGIC;
  child_ops.to_magic = OPS_MAGIC;
};
};
 
 
void
void
_initialize_mac_nat ()
_initialize_mac_nat ()
{
{
  init_child_ops ();
  init_child_ops ();
 
 
  add_info ("proc", info_proc,
  add_info ("proc", info_proc,
            "Show information about processes.");
            "Show information about processes.");
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.