/* Native definitions for alpha running OSF/1-2.x, using procfs.
   Copyright 1995, 1996, 2000 Free Software Foundation, Inc.

   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 distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the 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.  */

/* Get generic OSF/1 definitions.  */
#include "alpha/nm-osf.h"

/* OSF/1-2.x has optional /proc support, try to use it instead of ptrace.  */
#define USE_PROC_FS
#define HAVE_OPTIONAL_PROC_FS

/* Don't trace faults under OSF/1, rely on the posting of the appropriate
   signal if fault tracing is disabled.
   Tracing T_IFAULT under Alpha OSF/1 causes a `floating point enable'
   fault from which we cannot continue (except by disabling the
   tracing).
   And as OSF/1 doesn't provide the standard fault definitions, the
   mapping of faults to appropriate signals in procfs_wait is difficult.  */
#define PROCFS_DONT_TRACE_FAULTS

/* Work around some peculiarities in the OSF/1 procfs implementation.  */
#define PROCFS_NEED_PIOCSSIG_FOR_KILL
#define PROCFS_DONT_PIOCSSIG_CURSIG

/* Return sizeof user struct to callers in less machine dependent routines */

#define KERNEL_U_SIZE kernel_u_size()
extern int kernel_u_size (void);
