2000-03-21 J.T. Conklin <jtc@redback.com>
[platform/upstream/binutils.git] / gdb / ultra3-xdep.c
1 /* Host-dependent code for GDB, for NYU Ultra3 running Sym1 OS.
2    Copyright (C) 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
3    Contributed by David Wood (wood@nyu.edu) at New York University.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #define DEBUG
23 #include "defs.h"
24 #include "frame.h"
25 #include "inferior.h"
26 #include "symtab.h"
27 #include "value.h"
28
29 #include <sys/types.h>
30 #include <sys/param.h>
31 #include <signal.h>
32 #include <sys/ioctl.h>
33 #include <fcntl.h>
34
35 #include "gdbcore.h"
36
37 #include <sys/file.h>
38 #include "gdb_stat.h"
39
40 /* Assorted operating system circumventions */
41
42 #ifdef SYM1
43
44 /* FIXME: Kludge this for now. It really should be system call. */
45 int
46 getpagesize ()
47 {
48   return (8192);
49 }
50
51 /* FIXME: Fake out the fcntl() call, which we don't have.  */
52 fcntl (fd, cmd, arg)
53      int fd, cmd, arg;
54 {
55
56   switch (cmd)
57     {
58     case F_GETFL:
59       return (O_RDONLY);
60       break;
61     default:
62       printf_unfiltered ("Ultra3's fcntl() failing, cmd = %d.\n", cmd);
63       return (-1);
64     }
65 }
66
67
68 /* 
69  * 4.2 Signal support, requires linking with libjobs.
70  */
71 static int _SigMask;
72 #define sigbit(s)       (1L << ((s)-1))
73
74 init_SigMask ()
75 {
76   /* Taken from the sym1 kernel in machdep.c:startup() */
77   _SigMask = sigbit (SIGTSTP) | sigbit (SIGTTOU) | sigbit (SIGTTIN) |
78     sigbit (SIGCHLD) | sigbit (SIGTINT);
79 }
80
81 sigmask (signo)
82      int signo;
83 {
84   return (1 << (signo - 1));
85 }
86
87 sigsetmask (sigmask)
88      unsigned int sigmask;
89 {
90   int i, mask = 1;
91   int lastmask = _SigMask;
92
93   for (i = 0; i < NSIG; i++)
94     {
95       if (sigmask & mask)
96         {
97           if (!(_SigMask & mask))
98             {
99               sighold (i + 1);
100               _SigMask |= mask;
101             }
102         }
103       else if (_SigMask & mask)
104         {
105           sigrelse (i + 1);
106           _SigMask &= ~mask;
107         }
108       mask <<= 1;
109     }
110   return (lastmask);
111 }
112
113 sigblock (sigmask)
114      unsigned int sigmask;
115 {
116   int i, mask = 1;
117   int lastmask = _SigMask;
118
119   for (i = 0; i < NSIG; i++)
120     {
121       if ((sigmask & mask) && !(_SigMask & mask))
122         {
123           sighold (i + 1);
124           _SigMask |= mask;
125         }
126       mask <<= 1;
127     }
128   return (lastmask);
129 }
130 #endif /* SYM1 */
131
132
133 /* Initialization code for this module.  */
134
135 void
136 _initialize_ultra3 ()
137 {
138 #ifdef SYM1
139   init_SigMask ();
140 #endif
141 }