binutils-gdb/gdb/ultra3-xdep.c

139 lines
2.8 KiB
C
Raw Normal View History

/* Host-dependent code for GDB, for NYU Ultra3 running Sym1 OS.
2001-03-06 16:22:02 +08:00
Copyright 1988, 1989, 1991, 1992, 1993, 1995, 2000
Free Software Foundation, Inc.
Contributed by David Wood (wood@nyu.edu) at New York University.
1999-07-08 04:19:36 +08:00
This file is part of GDB.
1999-07-08 04:19:36 +08:00
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.
1999-07-08 04:19:36 +08:00
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.
1999-07-08 04:19:36 +08:00
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. */
#define DEBUG
#include "defs.h"
#include "frame.h"
#include "inferior.h"
#include "symtab.h"
#include "value.h"
#include <sys/types.h>
#include <sys/param.h>
#include <signal.h>
#include <sys/ioctl.h>
1999-07-08 04:19:36 +08:00
#include <fcntl.h>
#include "gdbcore.h"
#include <sys/file.h>
#include "gdb_stat.h"
/* Assorted operating system circumventions */
#ifdef SYM1
/* FIXME: Kludge this for now. It really should be system call. */
int
2000-07-30 09:48:28 +08:00
getpagesize (void)
1999-07-08 04:19:36 +08:00
{
return (8192);
}
/* FIXME: Fake out the fcntl() call, which we don't have. */
2000-07-30 09:48:28 +08:00
fcntl (int fd, int cmd, int arg)
{
1999-07-08 04:19:36 +08:00
switch (cmd)
{
case F_GETFL:
return (O_RDONLY);
break;
default:
printf_unfiltered ("Ultra3's fcntl() failing, cmd = %d.\n", cmd);
return (-1);
}
}
/*
* 4.2 Signal support, requires linking with libjobs.
*/
1999-07-08 04:19:36 +08:00
static int _SigMask;
#define sigbit(s) (1L << ((s)-1))
2000-07-30 09:48:28 +08:00
init_SigMask (void)
{
1999-07-08 04:19:36 +08:00
/* Taken from the sym1 kernel in machdep.c:startup() */
_SigMask = sigbit (SIGTSTP) | sigbit (SIGTTOU) | sigbit (SIGTTIN) |
sigbit (SIGCHLD) | sigbit (SIGTINT);
}
2000-07-30 09:48:28 +08:00
sigmask (int signo)
{
1999-07-08 04:19:36 +08:00
return (1 << (signo - 1));
}
2000-07-30 09:48:28 +08:00
sigsetmask (unsigned int sigmask)
{
1999-07-08 04:19:36 +08:00
int i, mask = 1;
int lastmask = _SigMask;
for (i = 0; i < NSIG; i++)
{
if (sigmask & mask)
{
if (!(_SigMask & mask))
{
sighold (i + 1);
_SigMask |= mask;
}
}
else if (_SigMask & mask)
{
sigrelse (i + 1);
_SigMask &= ~mask;
}
1999-07-08 04:19:36 +08:00
mask <<= 1;
}
return (lastmask);
}
2000-07-30 09:48:28 +08:00
sigblock (unsigned int sigmask)
{
1999-07-08 04:19:36 +08:00
int i, mask = 1;
int lastmask = _SigMask;
for (i = 0; i < NSIG; i++)
{
if ((sigmask & mask) && !(_SigMask & mask))
{
sighold (i + 1);
_SigMask |= mask;
}
1999-07-08 04:19:36 +08:00
mask <<= 1;
}
return (lastmask);
}
#endif /* SYM1 */
/* Initialization code for this module. */
void
2000-07-30 09:48:28 +08:00
_initialize_ultra3 (void)
{
#ifdef SYM1
1999-07-08 04:19:36 +08:00
init_SigMask ();
#endif
}