OSDN Git Service

Eliminate use of sigframe and sigthread throughout.
authorcgf <cgf>
Fri, 28 Nov 2003 20:55:57 +0000 (20:55 +0000)
committercgf <cgf>
Fri, 28 Nov 2003 20:55:57 +0000 (20:55 +0000)
* Makefile.in (DLL_OFILES): Add sigfe.o.  Remove reliance on cygwin.def from
cygwin0.dll dependency since dependence on sigfe.o implies that.  Generate def
file on the fly using 'gendef'.
* configure.in: Don't auto-generate cygwin.def.
* configure: Regenerate.
* cygwin.din: Add SIGFE stuff where appropriate.
* dcrt0.cc (dll_crt0_1): Initialize cygwin tls early in process startup.  Set
_main_tls to address of the main thread's cygwin tls.
* debug.h: Remove now unneeded WFSO and WFMO declarations.
* exceptions.cc (_last_thread): Define.
(set_thread_state_for_signals): New function.
(reset_thread_exception_for_signals): Ditto.
(init_thread_for_signals): Ditto.
(delete_thread_for_signals): Ditto.
(capture_thread_for_signals): Ditto.
(handle_exceptions): Set return address explicitly for exceptions prior to
calling sig_send.
(interrupt_on_return): Eliminate.
(setup_handler): Add preliminary implementation for dealing with
thread-specific signals by querying _main_tls.
(signal_exit): Use cygthread::main_thread_id instead of mainthread.id.
(call_signal_handler_now): For now, just handle the main thread.
* fork.cc (vfork): Save and restore main _my_tls.
* gendef: New file.  Generates def file and sigfe.s file.
* gentls_offsets: New file.  Generates offsets for perl to use in sigfe.s.
* how-signals-work.txt: Mention that info is obsolete.
* init.cc (dll_entry): Initialize cygwin tls storage here.
* miscfuncs.cc (low_priority_sleep): Make a C function for easier calling from
asm.
* perthread.h (vfork_save::tls): New element.
* signal.cc (nanosleep): Replace previous use of
sigframe.call_signal_handler_now with straight call to call_signal_handler_now.
(abort): Ditto.
* syscalls.cc (readv): Ditto.
* termios.cc (tcsetattr): Ditto.
* wait.cc (wait4): Ditto.
* sigproc.cc (sig_dispatch_pending): Ditto.
(sig_send): Ditto.
* sigproc.h: Declare call_signal_handler_now.
* thread.cc (pthread::thread_init_wrapper): Initialize cygwin tls.  Remove
obsolete and unworking signal stuff.
* thread.h (verifyable_object::sigs): Eliminate.
(verifyable_object::sigmask): Eliminate.
(verifyable_object::sigtodo): Eliminate.
(verifyable_object::exit): Make attribute noreturn.
(verifyable_object::thread_init_wrapper): Ditto.
(pthread_null::exit): Ditto.
* winbase.h (__stackbase): Always define.
* winsup.h (low_priority_sleep): Declare as a "C" function.
* include/cygwin/version.h: Bump API version to reflect sigwait export.
* include/sys/queue.h: Protect SLIST_ENTRY from previous declaration.
* signal.cc (sigwait): Implement.
* select.cc (fhandler_base::ready_for_read): Add debugging output.
* devices.h: Define more device pointers via their storage.
* devices.in: Don't parse things like /dev/inet/tcp, as they really have no
meaning.
* devices.cc: Regenerate.
* gendevices: Set proper protection for output file.
* cygtls.h: New file.
* gendef: New file.
* gentls_offsets: New file.
* tlsoffsets.h: New file.  Autogenerated.
* config/i386/longjmp.c: Remove.  File subsumed by gendef output.
* config/i386/makefrag: Remove obsolete file.
* fhandler.cc: Remove spurious access_worker declaration.
* spawn.cc (spawnve): Make debugging output more accurate.
* cygwin-gperf: Remove.
* devices.cc: Remove.

50 files changed:
winsup/cygwin/ChangeLog
winsup/cygwin/Makefile.in
winsup/cygwin/config/i386/longjmp.c [deleted file]
winsup/cygwin/config/i386/makefrag [deleted file]
winsup/cygwin/configure
winsup/cygwin/configure.in
winsup/cygwin/cygtls.h [new file with mode: 0644]
winsup/cygwin/cygwin-gperf [deleted file]
winsup/cygwin/cygwin.din
winsup/cygwin/dcrt0.cc
winsup/cygwin/debug.h
winsup/cygwin/devices.cc
winsup/cygwin/devices.h
winsup/cygwin/devices.in
winsup/cygwin/exceptions.cc
winsup/cygwin/external.cc
winsup/cygwin/fhandler.cc
winsup/cygwin/fork.cc
winsup/cygwin/gendef [new file with mode: 0755]
winsup/cygwin/gendevices
winsup/cygwin/gentls_offsets [new file with mode: 0755]
winsup/cygwin/heap.cc
winsup/cygwin/how-signals-work.txt
winsup/cygwin/include/cygwin/version.h
winsup/cygwin/include/sys/queue.h
winsup/cygwin/init.cc
winsup/cygwin/ioctl.cc
winsup/cygwin/miscfuncs.cc
winsup/cygwin/mmap.cc
winsup/cygwin/msg.cc
winsup/cygwin/net.cc
winsup/cygwin/path.cc
winsup/cygwin/perthread.h
winsup/cygwin/pinfo.cc
winsup/cygwin/poll.cc
winsup/cygwin/select.cc
winsup/cygwin/sem.cc
winsup/cygwin/shm.cc
winsup/cygwin/signal.cc
winsup/cygwin/sigproc.cc
winsup/cygwin/sigproc.h
winsup/cygwin/spawn.cc
winsup/cygwin/syscalls.cc
winsup/cygwin/termios.cc
winsup/cygwin/thread.cc
winsup/cygwin/thread.h
winsup/cygwin/uinfo.cc
winsup/cygwin/wait.cc
winsup/cygwin/winbase.h
winsup/cygwin/winsup.h

index a4b9eeb..558cbc7 100644 (file)
@@ -1,5 +1,87 @@
 2003-11-28  Christopher Faylor  <cgf@redhat.com>
 
+       Eliminate use of sigframe and sigthread throughout.
+       * Makefile.in (DLL_OFILES): Add sigfe.o.  Remove reliance on cygwin.def
+       from cygwin0.dll dependency since dependence on sigfe.o implies that.
+       Generate def file on the fly using 'gendef'.
+       * configure.in: Don't auto-generate cygwin.def.
+       * configure: Regenerate.
+       * cygwin.din: Add SIGFE stuff where appropriate.
+       * dcrt0.cc (dll_crt0_1): Initialize cygwin tls early in process
+       startup.  Set _main_tls to address of the main thread's cygwin tls.
+       * debug.h: Remove now unneeded WFSO and WFMO declarations.
+       * exceptions.cc (_last_thread): Define.
+       (set_thread_state_for_signals): New function.
+       (reset_thread_exception_for_signals): Ditto.
+       (init_thread_for_signals): Ditto.
+       (delete_thread_for_signals): Ditto.
+       (capture_thread_for_signals): Ditto.
+       (handle_exceptions): Set return address explicitly for exceptions prior
+       to calling sig_send.
+       (interrupt_on_return): Eliminate.
+       (setup_handler): Add preliminary implementation for dealing with
+       thread-specific signals by querying _main_tls.
+       (signal_exit): Use cygthread::main_thread_id instead of mainthread.id.
+       (call_signal_handler_now): For now, just handle the main thread.
+       * fork.cc (vfork): Save and restore main _my_tls.
+       * gendef: New file.  Generates def file and sigfe.s file.
+       * gentls_offsets: New file.  Generates offsets for perl to use in
+       sigfe.s.
+       * how-signals-work.txt: Mention that info is obsolete.
+       * init.cc (dll_entry): Initialize cygwin tls storage here.
+       * miscfuncs.cc (low_priority_sleep): Make a C function for easier
+       calling from asm.
+       * perthread.h (vfork_save::tls): New element.
+       * signal.cc (nanosleep): Replace previous use of
+       sigframe.call_signal_handler_now with straight call to
+       call_signal_handler_now.
+       (abort): Ditto.
+       * syscalls.cc (readv): Ditto.
+       * termios.cc (tcsetattr): Ditto.
+       * wait.cc (wait4): Ditto.
+       * sigproc.cc (sig_dispatch_pending): Ditto.
+       (sig_send): Ditto.
+       * sigproc.h: Declare call_signal_handler_now.
+       * thread.cc (pthread::thread_init_wrapper): Initialize cygwin tls.
+       Remove obsolete and unworking signal stuff.
+       * thread.h (verifyable_object::sigs): Eliminate.
+       (verifyable_object::sigmask): Eliminate.
+       (verifyable_object::sigtodo): Eliminate.
+       (verifyable_object::exit): Make attribute noreturn.
+       (verifyable_object::thread_init_wrapper): Ditto.
+       (pthread_null::exit): Ditto.
+       * winbase.h (__stackbase): Always define.
+       * winsup.h (low_priority_sleep): Declare as a "C" function.
+       * include/cygwin/version.h: Bump API version to reflect sigwait export.
+
+       * include/sys/queue.h: Protect SLIST_ENTRY from previous declaration.
+
+       * signal.cc (sigwait): Implement.
+
+       * select.cc (fhandler_base::ready_for_read): Add debugging output.
+
+       * devices.h: Define more device pointers via their storage.
+       * devices.in: Don't parse things like /dev/inet/tcp, as they really
+       have no meaning.
+       * devices.cc: Regenerate.
+       * gendevices: Set proper protection for output file.
+
+       * cygtls.h: New file.
+       * gendef: New file.
+       * gentls_offsets: New file.
+       * tlsoffsets.h: New file.  Autogenerated.
+       * config/i386/longjmp.c: Remove.  File subsumed by gendef output.
+       * config/i386/makefrag: Remove obsolete file.
+
+       * fhandler.cc: Remove spurious access_worker declaration.
+
+       * spawn.cc (spawnve): Make debugging output more accurate.
+
+       * cygwin-gperf: Remove.
+       * devices.cc: Remove.
+
+2003-11-28  Christopher Faylor  <cgf@redhat.com>
+
        * speclib: Use correct EOF marker.  Ensure that directory is actually
        deleted when running under Windows.
 
index e8737ad..e285d0b 100644 (file)
@@ -51,10 +51,10 @@ DEFS:=@DEFS@
 CC:=@CC@
 # FIXME: Which is it, CC or CC_FOR_TARGET?
 CC_FOR_TARGET:=$(CC)
-CFLAGS=@CFLAGS@
+CFLAGS=@CFLAGS@ -fmerge-constants -ftracer
 override CFLAGS+=-MMD ${$(*F)_CFLAGS}
 CXX=@CXX@
-CXXFLAGS=@CXXFLAGS@
+CXXFLAGS=@CXXFLAGS@ -fmerge-constants
 
 AR:=@AR@
 AR_FLAGS:=qv
@@ -117,6 +117,7 @@ DLL_IMPORTS:=$(w32api_lib)/libkernel32.a
 
 MT_SAFE_OBJECTS:=
 # Please maintain this list in sorted order, with maximum files per 80 col line
+#
 DLL_OFILES:=assert.o autoload.o bsdlib.o cxx.o cygheap.o cygthread.o dcrt0.o \
        debug.o delqueue.o devices.o dir.o dlfcn.o dll_init.o dtable.o environ.o \
        errno.o exceptions.o exec.o external.o fcntl.o fhandler.o \
@@ -131,10 +132,10 @@ DLL_OFILES:=assert.o autoload.o bsdlib.o cxx.o cygheap.o cygthread.o dcrt0.o \
        mmap.o msg.o net.o netdb.o ntea.o passwd.o path.o pinfo.o pipe.o \
        poll.o pthread.o regcomp.o regerror.o regexec.o regfree.o registry.o \
        resource.o scandir.o sched.o sec_acl.o sec_helper.o security.o \
-       select.o sem.o shared.o shm.o signal.o sigproc.o smallprint.o spawn.o \
-       strace.o strsep.o sync.o syscalls.o sysconf.o syslog.o termios.o \
-       thread.o times.o tty.o uinfo.o uname.o v8_regexp.o v8_regerror.o \
-       v8_regsub.o wait.o wincap.o window.o \
+       select.o sem.o shared.o shm.o sigfe.o signal.o sigproc.o smallprint.o \
+       spawn.o strace.o strsep.o sync.o syscalls.o sysconf.o syslog.o \
+       termios.o thread.o times.o tty.o uinfo.o uname.o v8_regexp.o \
+       v8_regerror.o v8_regsub.o wait.o wincap.o window.o \
        $(EXTRA_DLL_OFILES) $(EXTRA_OFILES) $(MALLOC_OFILES) $(MT_SAFE_OBJECTS)
 
 GMON_OFILES:=gmon.o mcount.o profil.o
@@ -305,7 +306,6 @@ install_target:
 
 install_host:
 
-
 uninstall-libs: $(TARGET_LIBS)
        rm -f $(bindir)/$(DLL_NAME); \
        for i in $^; do \
@@ -346,7 +346,7 @@ maintainer-clean realclean: clean
 
 
 # Rule to build cygwin.dll
-$(TEST_DLL_NAME): $(LDSCRIPT) $(DLL_OFILES) $(DEF_FILE) $(DLL_IMPORTS) $(LIBSERVER) $(LIBC) $(LIBM) $(API_VER) Makefile winver_stamp
+$(TEST_DLL_NAME): $(LDSCRIPT) $(DLL_OFILES) $(DLL_IMPORTS) $(LIBSERVER) $(LIBC) $(LIBM) $(API_VER) Makefile winver_stamp
        $(CXX) $(CXXFLAGS) $(nostdlib) -Wl,-T$(firstword $^) -Wl,--out-implib,cygdll.a -shared -o $@ \
        -e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) version.o winver.o \
        $(MALLOC_OBJ) $(LIBSERVER) $(LIBM) $(LIBC) \
@@ -376,7 +376,7 @@ $(LIBGMON_A): $(GMON_OFILES) $(GMON_START)
 
 $(API_VER): $(srcdir)/cygwin.din
        @echo Error: Version info is older than DLL API!
-       @false
+#      @false
 
 version.cc winver.o: winver_stamp
        @ :
@@ -422,8 +422,17 @@ winver_stamp: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES)
 
 Makefile: cygwin.din
 
-$(DEF_FILE): cygwin.din config.status
-       $(SHELL) config.status
+$(DEF_FILE): gendef cygwin.din $(srcdir)/tlsoffsets.h
+       $^ $@ sigfe.s
+
+$(srcdir)/tlsoffsets.h: gentls_offsets cygtls.h
+       $^ $@ $(COMPILE_CXX)
+
+sigfe.s: $(DEF_FILE)
+       @touch $@
+
+sigfe.o: sigfe.s
+       $(CC) -c -o $@ $?
 
 winsup.h: config.h
 
diff --git a/winsup/cygwin/config/i386/longjmp.c b/winsup/cygwin/config/i386/longjmp.c
deleted file mode 100644 (file)
index 62c52aa..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* longjmp.c
-
-   Copyright 1996, 1998, 1999, 2000, 2001 Red Hat, Inc.
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#ifdef __i386__
-#if 1
-asm (" .globl  _longjmp          \n"
-"_longjmp:                        \n"
-"      pushl   %ebp              \n"
-"      movl    %esp,%ebp         \n"
-"      movl    8(%ebp),%edi      \n"
-"      movl    12(%ebp),%eax     \n"
-"      testl   %eax,%eax         \n"
-"      jne     0f                \n"
-"      incl    %eax              \n"
-"0:                              \n"
-"      movl    %eax,0(%edi)      \n"
-"      movl    24(%edi),%ebp     \n"
-"      pushfl                    \n"
-"      popl    %ebx              \n"
-"      movw    42(%edi),%ax      \n"
-"      movw    %ax,%ss           \n"
-"      movl    28(%edi),%esp     \n"
-"      pushl   32(%edi)          \n"
-"       pushl  %ebx              \n"
-"      movw    36(%edi),%ax      \n"
-"      movw    %ax,%es           \n"
-#if 0
-/* fs is a system register in windows; don't muck with it */
-"      movw    38(%edi),%ax      \n"
-"      movw    %ax,%fs           \n"
-#endif
-"      movw    40(%edi),%ax      \n"
-"      movw    %ax,%gs           \n"
-"      movl    0(%edi),%eax      \n"
-"      movl    4(%edi),%ebx      \n"
-"      movl    8(%edi),%ecx      \n"
-"      movl    12(%edi),%edx     \n"
-"      movl    16(%edi),%esi     \n"
-"      movl    20(%edi),%edi     \n"
-"      popfl                     \n"
-"      ret                       \n");
-#endif
-
-#endif /* __i386__ */
diff --git a/winsup/cygwin/config/i386/makefrag b/winsup/cygwin/config/i386/makefrag
deleted file mode 100644 (file)
index c7f6b2d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# makefrag: included by the main Cygwin Makefile.in
-
-# Copyright 1996, 1998, 1999, 2001 Red Hat, Inc.
-
-# This file is part of Cygwin.
-
-# This software is a copyrighted work licensed under the terms of the
-# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
-# details.
-
-EXTRA_DLL_OFILES=setjmp.o longjmp.o
-
-setjmp.o:config/i386/setjmp.c
-       $(CC) -c $(ALL_CFLAGS) $<
-
-longjmp.o:config/i386/longjmp.c
-       $(CC) -c $(ALL_CFLAGS) $<
index 61d694f..2773536 100755 (executable)
@@ -2068,7 +2068,7 @@ done
 ac_given_srcdir=$srcdir
 ac_given_INSTALL="$INSTALL"
 
-trap 'rm -fr `echo "Makefile cygwin.def:cygwin.din config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
 EOF
 cat >> $CONFIG_STATUS <<EOF
 
@@ -2178,7 +2178,7 @@ EOF
 
 cat >> $CONFIG_STATUS <<EOF
 
-CONFIG_FILES=\${CONFIG_FILES-"Makefile cygwin.def:cygwin.din"}
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
 EOF
 cat >> $CONFIG_STATUS <<\EOF
 for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
index 04c961c..351284e 100644 (file)
@@ -197,4 +197,4 @@ AC_SUBST(DLL_ENTRY)
 AC_SUBST(DEF_DLL_ENTRY)
 AC_SUBST(ALLOCA)
 AC_SUBST(CONFIG_DIR)
-AC_OUTPUT(Makefile cygwin.def:cygwin.din)
+AC_OUTPUT(Makefile)
diff --git a/winsup/cygwin/cygtls.h b/winsup/cygwin/cygtls.h
new file mode 100644 (file)
index 0000000..8f900e9
--- /dev/null
@@ -0,0 +1,61 @@
+/* cygtls.h
+
+   Copyright 2003 Red Hat, Inc.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _CYGTLS_H
+#define _CYGTLS_H
+
+#include <cygwin/signal.h>
+
+#define CYGTLS_INITIALIZED 0x43227
+#define CYGTLS_EXCEPTION (0x43227 + true)
+
+/* Please keep this file simple.  Changes to the below structure may require
+   acompanying changes to the very simple parser in the perl script
+   'gentls_offsets'.  */
+
+#pragma pack(push,4)
+typedef __uint32_t __stack_t;
+struct _threadinfo
+{
+  void (*func) /*gentls_offsets*/(int)/*gentls_offsets*/;
+  int saved_errno;
+  int sa_flags;
+  sigset_t oldmask;
+  sigset_t newmask;
+  HANDLE event;
+  int *errno_addr;
+  unsigned initialized;
+  sigset_t sigmask;
+  sigset_t sigwait_mask;
+  siginfo_t *sigwait_info;
+  siginfo_t infodata;
+  void *tid;
+  struct _threadinfo *prev, *next;
+  __stack_t stack[8];
+  int sig;
+  __stack_t *stackptr;
+
+  struct _threadinfo *init (void *, void * = NULL);
+  void remove ();
+  void push (__stack_t, bool = false);
+  __stack_t pop ();
+  bool isinitialized () {return initialized == CYGTLS_INITIALIZED || initialized == CYGTLS_EXCEPTION;}
+  void set_state (bool);
+  void reset_exception ();
+  bool interrupt_now (CONTEXT *, int, void *, struct sigaction&)
+    __attribute__((regparm(3)));
+  void __stdcall interrupt_setup (int sig, void *handler, struct sigaction& siga, __stack_t retaddr)
+    __attribute__((regparm(3)));
+};
+#pragma pack(pop)
+
+extern _threadinfo *_tlsbase __asm__ ("%fs:4");
+#define _my_tls (_tlsbase[-1])
+
+#define CYGTLS_PADSIZE (sizeof (_threadinfo) + 64)
+#endif /*_CYGTLS_H*/
diff --git a/winsup/cygwin/cygwin-gperf b/winsup/cygwin/cygwin-gperf
deleted file mode 100755 (executable)
index 4599e90..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/perl
-use strict;
-sub read_devices($%);
-my $infile = shift;
-my $incfile = shift;
-open(GPERF, "gperf  -c --key-positions='5-8,1-2,9-10' -r -t -C -E " .
-            "-T -L 'ANSI-C' -Hdevhash -N'device::lookup' -Z devstring " .
-           "-7 -G $infile |");
-my @lines = <GPERF>;
-my $ix = 0;
-my $i = 0;
-my $n = -1;
-my $findclose = 0;
-my $add_device = '';
-my %fh_static;
-my %fh_declare = (
-    'cygdrive' => 'dev_cygdrive_storage',
-    'fs' => 'dev_fs_storage',
-    'proc' => 'dev_proc_storage',
-    'registry' => 'dev_registry_storage',
-    'process' => 'dev_process_storage',
-    'piper' => 'dev_piper_storage',
-    'pipew' => 'dev_pipew_storage',
-    'tcp' => 'dev_tcp_storage',
-    'udp' => 'dev_udp_storage',
-    'icmp' => 'dev_icmp_storage',
-    'unix' => 'dev_unix_storage',
-    'stream' => 'dev_stream_storage',
-    'dgram' => 'dev_dgram_storage'
-);
-
-foreach (@lines) {
-    $i++;
-    s/\[(str\[[^\]]*\])\]/[(unsigned) cyg_tolower ($1)]/o and next;
-    s/static (.* )wordlist/static NO_COPY $1wordlist/o and do {
-       $findclose = 1;
-    };
-    s/([   ]*)if \(\*str.*$/$1if (strncasematch (str, s, len))/o and next;
-    $findclose and /};/o and do {
-        $_ .= "\n";
-       $_ .=<<'EOF';
-const device dev_cygdrive_storage =
-  {"/cygdrive", FH_CYGDRIVE, "/cygdrive", 0, 0, 0, 0};
-
-const device dev_fs_storage =
-  {"", FH_FS, "", 0, 0, 0, 0};
-
-const device dev_proc_storage =
-  {"", FH_PROC, "", 0, 0, 0, 0};
-
-const device dev_registry_storage =
-  {"", FH_REGISTRY, "", 0, 0, 0, 0};
-
-const device dev_process_storage =
-  {"", FH_PROCESS, "", 0, 0, 0, 0};
-
-const device dev_tcp_storage =
-  {"/dev/inet/tcp", FH_TCP, "", 0, 0, 0, 0};
-
-const device dev_udp_storage =
-  {"/dev/inet/udp", FH_UCP, "", 0, 0, 0, 0};
-
-const device dev_icmp_storage =
-  {"/dev/inet/icmp", FH_ICMP, "", 0, 0, 0, 0};
-
-const device dev_unix_storage =
-  {"/dev/inet/unix", FH_UNIX, "", 0, 0, 0, 0};
-
-const device dev_stream_storage =
-  {"/dev/inet/stream", FH_STREAM, "", 0, 0, 0, 0};
-
-const device dev_dgram_storage =
-  {"/dev/inet/dgram", FH_DGRAM, "", 0, 0, 0, 0};
-
-const device dev_piper_storage =
-  {"", FH_PIPER, "", 0, 0, 0, 0};
-
-const device dev_pipew_storage =
-  {"", FH_PIPEW, "", 0, 0, 0, 0};
-
-const device dev_fs =
-  {"", FH_FS, "", 0, 0, 0, 0};
-EOF
-        for my $f (sort keys %fh_declare) {
-           $_ .= 'const device dev_' . $f . "_storage = $fh_declare{$f};\n"
-             if $fh_declare{$f} !~ /_storage/;
-       }
-       $_ .= "\n";
-       $_ .= read_devices($incfile, %fh_declare);
-       $findclose = 0;
-    };
-    /^(\s+)(\{".*)/ or next;
-    my $indent = $1;
-    my $rest = $2;
-    for my $f ($rest =~ /\{([^}]+)\}/g) {
-       $f eq '""' and do {
-           $ix++;
-           next;
-       };
-       my ($str, $fh) = (split(/, /, $f))[0..1];
-       if ($str !~ m!^"(?:/dev|:bad:)!) {
-           $ix++;
-       } else {
-           my $what = lc(($fh =~ /FH_(.+)/o)[0]);
-           my $addon = '';
-           while (defined $fh_static{$what . $addon} &&
-                  $fh_static{$what . $addon} ne $f) {
-               $addon++;
-           }
-           $what .= $addon;
-           $fh_static{$what} = $f;
-           $fh_declare{$what} = "wordlist[$ix]";
-           $ix++;
-       }
-    }
-}
-
-print @lines;
-
-sub read_devices($%) {
-    my $fn = shift;
-    my %fh_declare = @_;
-    open(F, "$fn") or die "$0: couldn't open $fn - $!\n";
-    my (%dev, %fh);
-    local $_;
-    while (<F>) {
-       /^\s*DEV_([A-Z_0-9]+)_MAJOR\s*=\s*(\d+)/ and do {
-           my $dev = lc($1);
-           next unless $fh_declare{$dev};
-           my $a = sprintf "%08d", $2;
-           $dev{$2} = '&' . $fh_declare{$dev} . " /* \L$1 */";
-           next;
-       };
-       /^\s*FH_([A-Z_0-9]+)\s*=\s*FHDEV\s*\((\d+),\s*(\d+)\)/ and do {
-             my $a = sprintf "%08d.%08d", $2, $3;
-             $fh{$a} = '&' . $fh_declare{lc($1)} . " /* \L$1 */";
-       };
-    };
-    close F;
-    my $toprint = '';
-    $toprint = "const device *unit_devices[] =\n{";
-    for my $f (sort keys %dev) {
-       $toprint .= "\n  $dev{$f}," if length($dev{$f});
-    }
-    chop $toprint;
-    $toprint .= "\n};\n\nconst device *uniq_devices[] = \n{";
-    for my $f (sort keys %fh) {
-       $toprint .= "\n  $fh{$f},";
-    }
-    chop $toprint;
-    $toprint .= "\n};\n";
-    return $toprint;
-}
index d4fff57..f4be987 100644 (file)
@@ -25,1527 +25,1504 @@ optind DATA
 optopt DATA
 optreset DATA
 reent_data DATA
-@ALLOCA@
-@DEF_DLL_ENTRY@
-__assert
-__assertfail
-__eprintf
-__errno
-__fpclassifyd
-__fpclassifyf
-__getreent
-__infinity
-__main
-__signbitd
-__signbitf
-__signgam
-__srget
-__swbuf
-_asprintf_r
-asprintf_r = _asprintf_r
-_dll_crt0@0
-_exit
-_f_atan2
-__f_atan2 = _f_atan2
-_f_atan2f
-__f_atan2f = _f_atan2f
-_f_exp
-__f_exp = _f_exp
-_f_expf
-__f_expf = _f_expf
-_f_frexp
-__f_frexp = _f_frexp
-_f_frexpf
-__f_frexpf = _f_frexpf
-_f_ldexp
-__f_ldexp = _f_ldexp
-_f_ldexpf
-__f_ldexpf = _f_ldexpf
-_f_log
-__f_log = _f_log
-_f_log10
-__f_log10 = _f_log10
-_f_log10f
-__f_log10f = _f_log10f
-_f_logf
-__f_logf = _f_logf
-_f_pow
-__f_pow = _f_pow
-_f_powf
-__f_powf = _f_powf
-_f_tan
-__f_tan = _f_tan
-_f_tanf
-__f_tanf = _f_tanf
-_fcloseall_r
-fcloseall_r = _fcloseall_r
-_fscanf_r
-fscanf_r = _fscanf_r
-fstat
-_fstat = fstat
-_pipe
-_pthread_cleanup_pop
-_pthread_cleanup_push
-_scanf_r
-scanf_r = _scanf_r
-_sscanf_r
-sscanf_r = _sscanf_r
-stat
-_stat = stat
-_strtold
-trunc
-_vasprintf_r
-vasprintf_r = _vasprintf_r
-_vfscanf_r
-vfscanf_r = _vfscanf_r
-_vscanf_r
-vscanf_r = _vscanf_r
-_vsscanf_r
-vsscanf_r = _vsscanf_r
-a64l
-abort
-_abort = abort
-abs
-_abs = abs
-access
-_access = access
-acl
-_acl = acl
-_acl32 = acl32
-aclcheck
-_aclcheck = aclcheck
-_aclcheck32 = aclcheck32
-aclfrommode
-_aclfrommode = aclfrommode
-_aclfrommode32 = aclfrommode32
-aclfrompbits
-_aclfrompbits = aclfrompbits
-_aclfrompbits32 = aclfrompbits32
-aclfromtext
-_aclfromtext = aclfromtext
-_aclfromtext32 = aclfromtext32
-aclsort
-_aclsort = aclsort
-_aclsort32 = aclsort32
-acltomode
-_acltomode = acltomode
-_acltomode32 = acltomode32
-acltopbits
-_acltopbits = acltopbits
-_acltopbits32 = acltopbits32
-acltotext
-_acltotext = acltotext
-_acltotext32 = acltotext32
-acos
-_acos = acos
-acosf
-_acosf = acosf
-acosh
-_acosh = acosh
-acoshf
-_acoshf = acoshf
-alarm
-_alarm = alarm
-alphasort
-_alphasort = alphasort
-argz_add
-__argz_add = argz_add
-argz_add_sep
-__argz_add_sep = argz_add_sep
-argz_append
-__argz_append = argz_append
-argz_count
-__argz_count = argz_count
-argz_create
-__argz_create = argz_create
-argz_create_sep
-__argz_create_sep = argz_create_sep
-argz_delete
-__argz_delete = argz_delete
-argz_extract
-__argz_extract = argz_extract
-argz_insert
-__argz_insert = argz_insert
-argz_next
-__argz_next = argz_next
-argz_replace
-__argz_replace = argz_replace
-argz_stringify
-__argz_stringify = argz_stringify
-asctime
-_asctime = asctime
-asctime_r
-_asctime_r = asctime_r
-asin
-_asin = asin
-asinf
-_asinf = asinf
-asinh
-_asinh = asinh
-asinhf
-_asinhf = asinhf
-asprintf
-_asprintf = asprintf
-atan
-_atan = atan
-atan2
-_atan2 = atan2
-atan2f
-_atan2f = atan2f
-atanf
-_atanf = atanf
-atanh
-_atanh = atanh
-atanhf
-_atanhf = atanhf
-atexit = cygwin_atexit
-_atexit = cygwin_atexit
-atof
-_atof = atof
-atoff
-_atoff = atoff
-atoi
-_atoi = atoi
-atol
-_atol = atol
-bcmp
-_bcmp = bcmp
-bcopy
-_bcopy = bcopy
-bsearch
-_bsearch = bsearch
-btowc
-bzero
-_bzero = bzero
-cabs
-_cabs = cabs
-cabsf
-_cabsf = cabsf
-calloc
-_calloc = calloc
-cbrt
-_cbrt = cbrt
-cbrtf
-_cbrtf = cbrtf
-ceil
-_ceil = ceil
-ceilf
-_ceilf = ceilf
-cfgetispeed
-cfgetospeed
-cfsetispeed
-cfsetospeed
-chdir
-_chdir = chdir
-chmod
-_chmod = chmod
-chown
-_chown = chown
-_chown32 = chown32
-chroot
-_chroot = chroot
-cleanup_glue
-clearerr
-_clearerr = clearerr
-clock
-_clock = clock
-close
-_close = close
-closedir
-_closedir = closedir
-closelog
-_closelog = closelog
-copysign
-_copysign = copysign
-copysignf
-_copysignf = copysignf
-cos
-_cos = cos
-cosf
-_cosf = cosf
-cosh
-_cosh = cosh
-coshf
-_coshf = coshf
-creat
-_creat = creat
-ctermid
-ctime
-_ctime = ctime
-ctime_r
-_ctime_r = ctime_r
-cuserid
-_cuserid = cuserid
-cwait
-_cwait = cwait
-accept = cygwin_accept
-cygwin_attach_handle_to_fd
-cygwin32_attach_handle_to_fd = cygwin_attach_handle_to_fd
-bind = cygwin_bind
-connect = cygwin_connect
-cygwin_conv_to_full_posix_path
-cygwin32_conv_to_full_posix_path = cygwin_conv_to_full_posix_path
-cygwin_conv_to_full_win32_path
-cygwin32_conv_to_full_win32_path = cygwin_conv_to_full_win32_path
-cygwin_conv_to_posix_path
-cygwin32_conv_to_posix_path = cygwin_conv_to_posix_path
-cygwin_conv_to_win32_path
-cygwin32_conv_to_win32_path = cygwin_conv_to_win32_path
-cygwin_detach_dll
-cygwin32_detach_dll = cygwin_detach_dll
-cygwin_dll_init
-endprotoent = cygwin_endprotoent
-endservent = cygwin_endservent
-endusershell
-gethostbyaddr = cygwin_gethostbyaddr
-gethostbyname = cygwin_gethostbyname
-_gethostname = cygwin_gethostname
-gethostname = cygwin_gethostname
-getpeername = cygwin_getpeername
-getprotobyname = cygwin_getprotobyname
-getprotobynumber = cygwin_getprotobynumber
-getprotoent = cygwin_getprotoent
-getservbyname = cygwin_getservbyname
-getservbyport = cygwin_getservbyport
-getservent = cygwin_getservent
-getsockname = cygwin_getsockname
-getsockopt = cygwin_getsockopt
-getusershell
-herror = cygwin_herror
-hstrerror = cygwin_hstrerror
-inet_addr = cygwin_inet_addr
-inet_aton = cygwin_inet_aton
-inet_network = cygwin_inet_network
-inet_ntoa = cygwin_inet_ntoa
-cygwin_internal
-cygwin32_internal = cygwin_internal
-listen = cygwin_listen
-cygwin_logon_user
-lstat
-_lstat = lstat
-cygwin_posix_path_list_p
-cygwin32_posix_path_list_p = cygwin_posix_path_list_p
-cygwin_posix_to_win32_path_list
-cygwin32_posix_to_win32_path_list = cygwin_posix_to_win32_path_list
-cygwin_posix_to_win32_path_list_buf_size
-cygwin32_posix_to_win32_path_list_buf_size = cygwin_posix_to_win32_path_list_buf_size
-rcmd = cygwin_rcmd
-recv = cygwin_recv
-recvfrom = cygwin_recvfrom
-recvmsg = cygwin_recvmsg
-rexec = cygwin_rexec
-rresvport = cygwin_rresvport
-_select = cygwin_select
-select = cygwin_select
-send = cygwin_send
-sendmsg = cygwin_sendmsg
-sendto = cygwin_sendto
-cygwin_set_impersonation_token
-setprotoent = cygwin_setprotoent
-setservent = cygwin_setservent
-setsockopt = cygwin_setsockopt
-setusershell
-shutdown = cygwin_shutdown
-socket = cygwin_socket
-cygwin_split_path
-cygwin32_split_path = cygwin_split_path
-cygwin_stackdump
-cygwin_umount
-cygwin_win32_to_posix_path_list
-cygwin32_win32_to_posix_path_list = cygwin_win32_to_posix_path_list
-cygwin_win32_to_posix_path_list_buf_size
-cygwin32_win32_to_posix_path_list_buf_size = cygwin_win32_to_posix_path_list_buf_size
-cygwin_winpid_to_pid
-cygwin32_winpid_to_pid = cygwin_winpid_to_pid
-daemon
-difftime
-_difftime = difftime
-dirfd
-_dirfd = dirfd
-div
-_div = div
-dlclose
-dlerror
-dlfork
-dll_crt0__FP11per_process
-dll_dllcrt0
-dll_noncygwin_dllcrt0
-dlopen
-dlsym
-drand48
-_drand48 = drand48
-drem
-_drem = drem
-dremf
-_dremf = dremf
-dup
-_dup = dup
-dup2
-_dup2 = dup2
-ecvt
-_ecvt = ecvt
-ecvtbuf
-_ecvtbuf = ecvtbuf
-ecvtf
-_ecvtf = ecvtf
-endgrent
-_endgrent = endgrent
-endhostent
-endmntent
-_endmntent = endmntent
-endpwent
-_endpwent = endpwent
-endutent
-_endutent = endutent
-envz_add
-__envz_add = envz_add
-envz_entry
-__envz_entry = envz_entry
-envz_get
-__envz_get = envz_get
-envz_merge
-__envz_merge = envz_merge
-envz_remove
-__envz_remove = envz_remove
-envz_strip
-__envz_strip = envz_strip
-erand48
-_erand48 = erand48
-erf
-_erf = erf
-erfc
-_erfc = erfc
-erfcf
-_erfcf = erfcf
-erff
-_erff = erff
-err
-errx
-verr
-verrx
-warn
-warnx
-vwarn
-vwarnx
-execl
-_execl = execl
-execle
-_execle = execle
-execlp
-_execlp = execlp
-execv
-_execv = execv
-execve
-_execve = execve
-execvp
-_execvp = execvp
-exit = cygwin_exit
-exp
-_exp = exp
-exp2
-exp2f
-expf
-_expf = expf
-expm1
-_expm1 = expm1
-expm1f
-_expm1f = expm1f
-fabs
-_fabs = fabs
-fabsf
-_fabsf = fabsf
-facl
-_facl = facl
-_facl32 = facl32
-fchdir
-_fchdir = fchdir
-fchmod
-_fchmod = fchmod
-fchown
-_fchown = fchown
-_fchown32 = fchown32
-fclose
-_fclose = fclose
-fcloseall
-_fcloseall = fcloseall
-fcntl
-_fcntl = fcntl
-fcvt
-_fcvt = fcvt
-fcvtbuf
-_fcvtbuf = fcvtbuf
-fcvtf
-_fcvtf = fcvtf
-fdim
-fdimf
-fdopen
-_fdopen = fdopen
-_fdopen64 = fdopen64
-feof
-_feof = feof
-ferror
-_ferror = ferror
-fflush
-_fflush = fflush
-ffs
-_ffs = ffs
-fgetc
-_fgetc = fgetc
-fgetpos
-_fgetpos = fgetpos
-_fgetpos64 = fgetpos64
-fgets
-_fgets = fgets
-fileno
-_fileno = fileno
-finite
-_finite = finite
-finitef
-_finitef = finitef
-fiprintf
-_fiprintf = fiprintf
-floor
-_floor = floor
-floorf
-_floorf = floorf
-fma
-fmaf
-fmax
-fmaxf
-fmin
-fminf
-fmod
-_fmod = fmod
-fmodf
-_fmodf = fmodf
-fnmatch
-_fnmatch = fnmatch
-fopen
-_fopen = fopen
-_fopen64 = fopen64
-fork
-_fork = fork
-forkpty
-fpathconf
-fprintf
-_fprintf = fprintf
-fputc
-_fputc = fputc
-fputs
-_fputs = fputs
-fread
-_fread = fread
-free
-_free = free
-freopen
-_freopen = freopen
-_freopen64 = freopen64
-frexp
-_frexp = frexp
-frexpf
-_frexpf = frexpf
-fscanf
-_fscanf = fscanf
-fseek
-_fseek = fseek
-fseeko
-_fseeko = fseeko
-_fseeko64 = fseeko64
-fsetpos
-_fsetpos = fsetpos
-_fsetpos64 = fsetpos64
-_fstat64 = fstat64
-fstatfs
-_fstatfs = fstatfs
-fsync
-_fsync = fsync
-ftell
-_ftell = ftell
-ftello
-_ftello = ftello
-_ftello64 = ftello64
-ftime
-_ftime = ftime
-ftok
-_ftok = ftok
-ftruncate
-_ftruncate = ftruncate
-_ftruncate64 = ftruncate64
-fwrite
-_fwrite = fwrite
-gamma
-_gamma = gamma
-gamma_r
-_gamma_r = gamma_r
-gammaf
-_gammaf = gammaf
-gammaf_r
-_gammaf_r = gammaf_r
-gcvt
-_gcvt = gcvt
-gcvtf
-_gcvtf = gcvtf
-get_osfhandle
-_get_osfhandle = get_osfhandle
-getc
-_getc = getc
-getc_unlocked
-_getc_unlocked = getc_unlocked
-getchar
-_getchar = getchar
-getchar_unlocked
-_getchar_unlocked = getchar_unlocked
-getcwd
-_getcwd = getcwd
-getdomainname
-_getdomainname = getdomainname
-getdtablesize
-_getdtablesize = getdtablesize
-getegid
-_getegid = getegid
-_getegid32 = getegid32
-getenv
-_getenv = getenv
-geteuid
-_geteuid = geteuid
-_geteuid32 = geteuid32
-getgid
-_getgid = getgid
-_getgid32 = getgid32
-getgrent
-_getgrent = getgrent
-_getgrent32 = getgrent32
-getgrgid
-_getgrgid = getgrgid
-_getgrgid32 = getgrgid32
-getgrnam
-_getgrnam = getgrnam
-_getgrnam32 = getgrnam32
-getgroups
-_getgroups = getgroups
-_getgroups32 = getgroups32
-gethostid
-getitimer
-getlogin
-_getlogin = getlogin
-getmntent
-_getmntent = getmntent
-getmode
-_getmode = getmode
-getopt
-getopt_long
-getpagesize
-_getpagesize = getpagesize
-getpass
-_getpass = getpass
-getpgid
-getpgrp
-_getpgrp = getpgrp
-getpid
-_getpid = getpid
-getppid
-_getppid = getppid
-getprogname
-getpwduid
-_getpwduid = getpwduid
-getpwent
-_getpwent = getpwent
-getpwnam
-_getpwnam = getpwnam
-getpwnam_r
-getpwuid
-_getpwuid = getpwuid
-_getpwuid32 = getpwuid32
-getpwuid_r
-_getpwuid_r32 = getpwuid_r32
-getrlimit
-_getrlimit = getrlimit
-getrusage
-_getrusage = getrusage
-gets
-_gets = gets
-getsid
-gettimeofday
-_gettimeofday = gettimeofday
-getuid
-_getuid = getuid
-_getuid32 = getuid32
-getutent
-_getutent = getutent
-getutid
-_getutid = getutid
-getutline
-_getutline = getutline
-getw
-_getw = getw
-getwd
-_getwd = getwd
-glob
-_glob = glob
-globfree
-_globfree = globfree
-gmtime
-_gmtime = gmtime
-gmtime_r
-_gmtime_r = gmtime_r
-grantpt
-hcreate
-hcreate_r
-hdestroy
-hdestroy_r
-hsearch
-hsearch_r
-htonl
-_htonl = htonl
-htons
-_htons = htons
-hypot
-_hypot = hypot
-hypotf
-_hypotf = hypotf
-ilogb
-_ilogb = ilogb
-ilogbf
-_ilogbf = ilogbf
-index
-_index = index
-inet_makeaddr
-inet_netof
-infinity
-_infinity = infinity
-infinityf
-_infinityf = infinityf
-initgroups
-_initgroups32 = initgroups32
-initstate
-ioctl
-_ioctl = ioctl
-iprintf
-_iprintf = iprintf
-iruserok
-ruserok
-isalnum
-_isalnum = isalnum
-isalpha
-_isalpha = isalpha
-isascii
-_isascii = isascii
-isatty
-_isatty = isatty
-isblank
-iscntrl
-_iscntrl = iscntrl
-isdigit
-_isdigit = isdigit
-isgraph
-_isgraph = isgraph
-isinf
-_isinf = isinf
-isinff
-_isinff = isinff
-islower
-_islower = islower
-isnan
-_isnan = isnan
-isnanf
-_isnanf = isnanf
-isprint
-_isprint = isprint
-ispunct
-_ispunct = ispunct
-isspace
-_isspace = isspace
-isupper
-_isupper = isupper
-iswalnum
-iswalpha
-iswblank
-iswcntrl
-iswctype
-iswdigit
-iswgraph
-iswlower
-iswprint
-iswpunct
-iswspace
-iswupper
-iswxdigit
-isxdigit
-_isxdigit = isxdigit
-j0
-_j0 = j0
-j0f
-_j0f = j0f
-j1
-_j1 = j1
-j1f
-_j1f = j1f
-jn
-_jn = jn
-jnf
-_jnf = jnf
-jrand48
-_jrand48 = jrand48
-kill
-_kill = kill
-killpg
-l64a
-labs
-_labs = labs
-lacl
-_lacl = lacl
-lchown
-_lchown = lchown
-_lchown32 = lchown32
-lcong48
-_lcong48 = lcong48
-ldexp
-_ldexp = ldexp
-ldexpf
-_ldexpf = ldexpf
-ldiv
-_ldiv = ldiv
-lgamma
-_lgamma = lgamma
-lgamma_r
-_lgamma_r = lgamma_r
-lgammaf
-_lgammaf = lgammaf
-lgammaf_r
-_lgammaf_r = lgammaf_r
-link
-_link = link
-localeconv
-_localeconv = localeconv
-localtime
-_localtime = localtime
-localtime_r
-_localtime_r = localtime_r
-log
-_log = log
-log10
-_log10 = log10
-log10f
-_log10f = log10f
-log1p
-_log1p = log1p
-log1pf
-_log1pf = log1pf
-logb
-_logb = logb
-logbf
-_logbf = logbf
-logf
-_logf = logf
-login
-login_tty
-logout
-logwtmp
-updwtmp
-longjmp
-_longjmp = longjmp
-lrand48
-_lrand48 = lrand48
-lrint
-lrintf
-lround
-lroundf
-lseek
-_lseek = lseek
-_lseek64 = lseek64
-_lstat64 = lstat64
-mallinfo
-malloc
-_malloc = malloc
-malloc_stats
-malloc_trim
-malloc_usable_size
-mallopt
-matherr
-_matherr = matherr
-mblen
-_mblen = mblen
-mbrlen
-mbrtowc
-mbsinit
-mbsrtowcs
-mbstowcs
-_mbstowcs = mbstowcs
-mbtowc
-_mbtowc = mbtowc
-memalign
-memccpy
-_memccpy = memccpy
-memchr
-_memchr = memchr
-memcmp
-_memcmp = memcmp
-memcpy
-_memcpy = memcpy
-memmove
-_memmove = memmove
-mempcpy
-__mempcpy = mempcpy
-memset
-_memset = memset
-mkdir
-_mkdir = mkdir
-mkfifo
-mknod
-_mknod = mknod
-_mknod32 = mknod32
-mkstemp
-_mkstemp = mkstemp
-mktemp
-_mktemp = mktemp
-mktime
-_mktime = mktime
-mmap
-_mmap64 = mmap64
-modf
-_modf = modf
-modff
-_modff = modff
-mount
-_mount = mount
-mprotect
-mrand48
-msgctl
-msgget
-msgrcv
-msgsnd
-msync
-munmap
-nan
-_nan = nan
-nanf
-_nanf = nanf
-nanosleep
-_nanosleep = nanosleep
-nearbyint
-nearbyintf
-nextafter
-_nextafter = nextafter
-nextafterf
-_nextafterf = nextafterf
-nice
-_nice = nice
-nl_langinfo
-_nl_langinfo = nl_langinfo
-nrand48
-_nrand48 = nrand48
-ntohl
-_ntohl = ntohl
-ntohs
-_ntohs = ntohs
-on_exit
-open
-_open = open
+_alloca NOSIGFE
+dll_entry@12 NOSIGFE
+__assert SIGFE
+__assertfail SIGFE
+__eprintf SIGFE
+__errno NOSIGFE
+__fpclassifyd NOSIGFE
+__fpclassifyf NOSIGFE
+__getreent NOSIGFE
+__infinity NOSIGFE
+__main SIGFE
+__signbitd NOSIGFE
+__signbitf NOSIGFE
+__signgam NOSIGFE
+__srget SIGFE
+__swbuf SIGFE
+_asprintf_r SIGFE
+asprintf_r = _asprintf_r SIGFE
+_dll_crt0@0 NOSIGFE
+_exit SIGFE
+_f_atan2 NOSIGFE
+__f_atan2 = _f_atan2 NOSIGFE
+_f_atan2f NOSIGFE
+__f_atan2f = _f_atan2f NOSIGFE
+_f_exp NOSIGFE
+__f_exp = _f_exp NOSIGFE
+_f_expf NOSIGFE
+__f_expf = _f_expf NOSIGFE
+_f_frexp NOSIGFE
+__f_frexp = _f_frexp NOSIGFE
+_f_frexpf NOSIGFE
+__f_frexpf = _f_frexpf NOSIGFE
+_f_ldexp NOSIGFE
+__f_ldexp = _f_ldexp NOSIGFE
+_f_ldexpf NOSIGFE
+__f_ldexpf = _f_ldexpf NOSIGFE
+_f_log NOSIGFE
+__f_log = _f_log NOSIGFE
+_f_log10 NOSIGFE
+__f_log10 = _f_log10 NOSIGFE
+_f_log10f NOSIGFE
+__f_log10f = _f_log10f NOSIGFE
+_f_logf NOSIGFE
+__f_logf = _f_logf NOSIGFE
+_f_pow NOSIGFE
+__f_pow = _f_pow NOSIGFE
+_f_powf NOSIGFE
+__f_powf = _f_powf NOSIGFE
+_f_tan NOSIGFE
+__f_tan = _f_tan NOSIGFE
+_f_tanf NOSIGFE
+__f_tanf = _f_tanf NOSIGFE
+_fcloseall_r SIGFE
+fcloseall_r = _fcloseall_r SIGFE
+_fscanf_r SIGFE
+fscanf_r = _fscanf_r SIGFE
+fstat SIGFE
+_fstat = fstat SIGFE
+_pipe SIGFE
+_pthread_cleanup_pop NOSIGFE
+_pthread_cleanup_push NOSIGFE
+_scanf_r SIGFE
+scanf_r = _scanf_r SIGFE
+_sscanf_r SIGFE
+sscanf_r = _sscanf_r SIGFE
+stat SIGFE
+_stat = stat SIGFE
+_strtold SIGFE
+trunc NOSIGFE
+_vasprintf_r SIGFE
+vasprintf_r = _vasprintf_r SIGFE
+_vfscanf_r NOSIGFE
+vfscanf_r = _vfscanf_r NOSIGFE
+_vscanf_r SIGFE
+vscanf_r = _vscanf_r SIGFE
+_vsscanf_r SIGFE
+vsscanf_r = _vsscanf_r SIGFE
+a64l NOSIGFE
+abort SIGFE
+_abort = abort SIGFE
+abs NOSIGFE
+_abs = abs NOSIGFE
+access SIGFE
+_access = access SIGFE
+acl SIGFE
+_acl = acl SIGFE
+_acl32 = acl32 SIGFE
+aclcheck NOSIGFE
+_aclcheck = aclcheck NOSIGFE
+_aclcheck32 = aclcheck32 NOSIGFE
+aclfrommode SIGFE
+_aclfrommode = aclfrommode SIGFE
+_aclfrommode32 = aclfrommode32 SIGFE
+aclfrompbits SIGFE
+_aclfrompbits = aclfrompbits SIGFE
+_aclfrompbits32 = aclfrompbits32 SIGFE
+aclfromtext SIGFE
+_aclfromtext = aclfromtext SIGFE
+_aclfromtext32 = aclfromtext32 SIGFE
+aclsort SIGFE
+_aclsort = aclsort SIGFE
+_aclsort32 = aclsort32 SIGFE
+acltomode SIGFE
+_acltomode = acltomode SIGFE
+_acltomode32 = acltomode32 SIGFE
+acltopbits SIGFE
+_acltopbits = acltopbits SIGFE
+_acltopbits32 = acltopbits32 SIGFE
+acltotext SIGFE
+_acltotext = acltotext SIGFE
+_acltotext32 = acltotext32 SIGFE
+acos NOSIGFE
+_acos = acos NOSIGFE
+acosf NOSIGFE
+_acosf = acosf NOSIGFE
+acosh NOSIGFE
+_acosh = acosh NOSIGFE
+acoshf NOSIGFE
+_acoshf = acoshf NOSIGFE
+alarm SIGFE
+_alarm = alarm SIGFE
+alphasort NOSIGFE
+_alphasort = alphasort NOSIGFE
+argz_add SIGFE
+__argz_add = argz_add SIGFE
+argz_add_sep SIGFE
+__argz_add_sep = argz_add_sep SIGFE
+argz_append SIGFE
+__argz_append = argz_append SIGFE
+argz_count NOSIGFE
+__argz_count = argz_count NOSIGFE
+argz_create SIGFE
+__argz_create = argz_create SIGFE
+argz_create_sep SIGFE
+__argz_create_sep = argz_create_sep SIGFE
+argz_delete SIGFE
+__argz_delete = argz_delete SIGFE
+argz_extract NOSIGFE
+__argz_extract = argz_extract NOSIGFE
+argz_insert SIGFE
+__argz_insert = argz_insert SIGFE
+argz_next NOSIGFE
+__argz_next = argz_next NOSIGFE
+argz_replace SIGFE
+__argz_replace = argz_replace SIGFE
+argz_stringify NOSIGFE
+__argz_stringify = argz_stringify NOSIGFE
+asctime SIGFE
+_asctime = asctime SIGFE
+asctime_r SIGFE
+_asctime_r = asctime_r SIGFE
+asin NOSIGFE
+_asin = asin NOSIGFE
+asinf NOSIGFE
+_asinf = asinf NOSIGFE
+asinh NOSIGFE
+_asinh = asinh NOSIGFE
+asinhf NOSIGFE
+_asinhf = asinhf NOSIGFE
+asprintf SIGFE
+_asprintf = asprintf SIGFE
+atan NOSIGFE
+_atan = atan NOSIGFE
+atan2 NOSIGFE
+_atan2 = atan2 NOSIGFE
+atan2f NOSIGFE
+_atan2f = atan2f NOSIGFE
+atanf NOSIGFE
+_atanf = atanf NOSIGFE
+atanh NOSIGFE
+_atanh = atanh NOSIGFE
+atanhf NOSIGFE
+_atanhf = atanhf NOSIGFE
+atexit = cygwin_atexit SIGFE
+_atexit = cygwin_atexit SIGFE
+atof SIGFE
+_atof = atof SIGFE
+atoff SIGFE
+_atoff = atoff SIGFE
+atoi NOSIGFE
+_atoi = atoi NOSIGFE
+atol NOSIGFE
+_atol = atol NOSIGFE
+bcmp NOSIGFE
+_bcmp = bcmp NOSIGFE
+bcopy NOSIGFE
+_bcopy = bcopy NOSIGFE
+bsearch NOSIGFE
+_bsearch = bsearch NOSIGFE
+btowc NOSIGFE
+bzero NOSIGFE
+_bzero = bzero NOSIGFE
+cabs NOSIGFE
+_cabs = cabs NOSIGFE
+cabsf NOSIGFE
+_cabsf = cabsf NOSIGFE
+calloc SIGFE
+_calloc = calloc SIGFE
+cbrt NOSIGFE
+_cbrt = cbrt NOSIGFE
+cbrtf NOSIGFE
+_cbrtf = cbrtf NOSIGFE
+ceil NOSIGFE
+_ceil = ceil NOSIGFE
+ceilf NOSIGFE
+_ceilf = ceilf NOSIGFE
+cfgetispeed NOSIGFE
+cfgetospeed NOSIGFE
+cfsetispeed SIGFE
+cfsetospeed SIGFE
+chdir SIGFE
+_chdir = chdir SIGFE
+chmod SIGFE
+_chmod = chmod SIGFE
+chown SIGFE
+_chown = chown SIGFE
+_chown32 = chown32 SIGFE
+chroot SIGFE
+_chroot = chroot SIGFE
+cleanup_glue NOSIGFE
+clearerr NOSIGFE
+_clearerr = clearerr NOSIGFE
+clock NOSIGFE
+_clock = clock NOSIGFE
+close SIGFE
+_close = close SIGFE
+closedir SIGFE
+_closedir = closedir SIGFE
+closelog NOSIGFE
+_closelog = closelog NOSIGFE
+copysign NOSIGFE
+_copysign = copysign NOSIGFE
+copysignf NOSIGFE
+_copysignf = copysignf NOSIGFE
+cos NOSIGFE
+_cos = cos NOSIGFE
+cosf NOSIGFE
+_cosf = cosf NOSIGFE
+cosh NOSIGFE
+_cosh = cosh NOSIGFE
+coshf NOSIGFE
+_coshf = coshf NOSIGFE
+creat SIGFE
+_creat = creat SIGFE
+ctermid NOSIGFE
+ctime SIGFE
+_ctime = ctime SIGFE
+ctime_r SIGFE
+_ctime_r = ctime_r SIGFE
+cuserid NOSIGFE
+_cuserid = cuserid NOSIGFE
+cwait SIGFE
+_cwait = cwait SIGFE
+accept = cygwin_accept SIGFE
+cygwin_attach_handle_to_fd SIGFE
+cygwin32_attach_handle_to_fd = cygwin_attach_handle_to_fd SIGFE
+bind = cygwin_bind SIGFE
+connect = cygwin_connect SIGFE
+cygwin_conv_to_full_posix_path SIGFE
+cygwin32_conv_to_full_posix_path = cygwin_conv_to_full_posix_path SIGFE
+cygwin_conv_to_full_win32_path SIGFE
+cygwin32_conv_to_full_win32_path = cygwin_conv_to_full_win32_path SIGFE
+cygwin_conv_to_posix_path SIGFE
+cygwin32_conv_to_posix_path = cygwin_conv_to_posix_path SIGFE
+cygwin_conv_to_win32_path SIGFE
+cygwin32_conv_to_win32_path = cygwin_conv_to_win32_path SIGFE
+cygwin_detach_dll SIGFE
+cygwin32_detach_dll = cygwin_detach_dll SIGFE
+cygwin_dll_init SIGFE
+endprotoent = cygwin_endprotoent SIGFE
+endservent = cygwin_endservent SIGFE
+endusershell SIGFE
+err SIGFE
+errx SIGFE
+gethostbyaddr = cygwin_gethostbyaddr SIGFE
+gethostbyname = cygwin_gethostbyname SIGFE
+_gethostname = cygwin_gethostname SIGFE
+gethostname = cygwin_gethostname SIGFE
+getpeername = cygwin_getpeername SIGFE
+getprogname NOSIGFE
+getprotobyname = cygwin_getprotobyname SIGFE
+getprotobynumber = cygwin_getprotobynumber SIGFE
+getprotoent = cygwin_getprotoent SIGFE
+getservbyname = cygwin_getservbyname SIGFE
+getservbyport = cygwin_getservbyport SIGFE
+getservent = cygwin_getservent SIGFE
+getsockname = cygwin_getsockname SIGFE
+getsockopt = cygwin_getsockopt SIGFE
+getusershell SIGFE
+herror = cygwin_herror SIGFE
+hstrerror = cygwin_hstrerror NOSIGFE
+inet_addr = cygwin_inet_addr SIGFE
+inet_aton = cygwin_inet_aton SIGFE
+inet_network = cygwin_inet_network SIGFE
+inet_ntoa = cygwin_inet_ntoa SIGFE
+cygwin_internal SIGFE
+cygwin32_internal = cygwin_internal SIGFE
+listen = cygwin_listen SIGFE
+cygwin_logon_user SIGFE
+lstat SIGFE
+_lstat = lstat SIGFE
+cygwin_posix_path_list_p NOSIGFE
+cygwin32_posix_path_list_p = cygwin_posix_path_list_p NOSIGFE
+cygwin_posix_to_win32_path_list NOSIGFE
+cygwin32_posix_to_win32_path_list = cygwin_posix_to_win32_path_list NOSIGFE
+cygwin_posix_to_win32_path_list_buf_size SIGFE
+cygwin32_posix_to_win32_path_list_buf_size = cygwin_posix_to_win32_path_list_buf_size SIGFE
+rcmd = cygwin_rcmd SIGFE
+recv = cygwin_recv SIGFE
+recvfrom = cygwin_recvfrom SIGFE
+recvmsg = cygwin_recvmsg SIGFE
+rexec = cygwin_rexec SIGFE
+rresvport = cygwin_rresvport SIGFE
+_select = cygwin_select SIGFE
+select = cygwin_select SIGFE
+send = cygwin_send SIGFE
+sendmsg = cygwin_sendmsg SIGFE
+sendto = cygwin_sendto SIGFE
+cygwin_set_impersonation_token SIGFE
+setprogname SIGFE
+setprotoent = cygwin_setprotoent SIGFE
+setservent = cygwin_setservent SIGFE
+setsockopt = cygwin_setsockopt SIGFE
+setusershell SIGFE
+shutdown = cygwin_shutdown SIGFE
+socket = cygwin_socket SIGFE
+cygwin_split_path NOSIGFE
+cygwin32_split_path = cygwin_split_path NOSIGFE
+cygwin_stackdump SIGFE
+cygwin_umount SIGFE
+cygwin_win32_to_posix_path_list NOSIGFE
+cygwin32_win32_to_posix_path_list = cygwin_win32_to_posix_path_list NOSIGFE
+cygwin_win32_to_posix_path_list_buf_size SIGFE
+cygwin32_win32_to_posix_path_list_buf_size = cygwin_win32_to_posix_path_list_buf_size SIGFE
+cygwin_winpid_to_pid SIGFE
+cygwin32_winpid_to_pid = cygwin_winpid_to_pid SIGFE
+daemon SIGFE
+difftime NOSIGFE
+_difftime = difftime NOSIGFE
+dirfd SIGFE
+_dirfd = dirfd SIGFE
+div NOSIGFE
+_div = div NOSIGFE
+dlclose SIGFE
+dlerror NOSIGFE
+dlfork NOSIGFE
+dll_crt0__FP11per_process SIGFE
+dll_dllcrt0 SIGFE
+dll_noncygwin_dllcrt0 SIGFE
+dlopen SIGFE
+dlsym SIGFE
+drand48 NOSIGFE
+_drand48 = drand48 NOSIGFE
+drem NOSIGFE
+_drem = drem NOSIGFE
+dremf NOSIGFE
+_dremf = dremf NOSIGFE
+dup SIGFE
+_dup = dup SIGFE
+dup2 SIGFE
+_dup2 = dup2 SIGFE
+ecvt SIGFE
+_ecvt = ecvt SIGFE
+ecvtbuf SIGFE
+_ecvtbuf = ecvtbuf SIGFE
+ecvtf SIGFE
+_ecvtf = ecvtf SIGFE
+endgrent NOSIGFE
+_endgrent = endgrent NOSIGFE
+endhostent NOSIGFE
+endmntent NOSIGFE
+_endmntent = endmntent NOSIGFE
+endpwent NOSIGFE
+_endpwent = endpwent NOSIGFE
+endutent SIGFE
+_endutent = endutent SIGFE
+envz_add SIGFE
+__envz_add = envz_add SIGFE
+envz_entry NOSIGFE
+__envz_entry = envz_entry NOSIGFE
+envz_get NOSIGFE
+__envz_get = envz_get NOSIGFE
+envz_merge SIGFE
+__envz_merge = envz_merge SIGFE
+envz_remove SIGFE
+__envz_remove = envz_remove SIGFE
+envz_strip SIGFE
+__envz_strip = envz_strip SIGFE
+erand48 NOSIGFE
+_erand48 = erand48 NOSIGFE
+erf NOSIGFE
+_erf = erf NOSIGFE
+erfc NOSIGFE
+_erfc = erfc NOSIGFE
+erfcf NOSIGFE
+_erfcf = erfcf NOSIGFE
+erff NOSIGFE
+_erff = erff NOSIGFE
+execl SIGFE
+_execl = execl SIGFE
+execle SIGFE
+_execle = execle SIGFE
+execlp SIGFE
+_execlp = execlp SIGFE
+execv SIGFE
+_execv = execv SIGFE
+execve SIGFE
+_execve = execve SIGFE
+execvp SIGFE
+_execvp = execvp SIGFE
+exit = cygwin_exit SIGFE
+exp NOSIGFE
+_exp = exp NOSIGFE
+exp2 NOSIGFE
+exp2f NOSIGFE
+expf NOSIGFE
+_expf = expf NOSIGFE
+expm1 NOSIGFE
+_expm1 = expm1 NOSIGFE
+expm1f NOSIGFE
+_expm1f = expm1f NOSIGFE
+fabs NOSIGFE
+_fabs = fabs NOSIGFE
+fabsf NOSIGFE
+_fabsf = fabsf NOSIGFE
+facl SIGFE
+_facl = facl SIGFE
+_facl32 = facl32 SIGFE
+fchdir SIGFE
+_fchdir = fchdir SIGFE
+fchmod SIGFE
+_fchmod = fchmod SIGFE
+fchown SIGFE
+_fchown = fchown SIGFE
+_fchown32 = fchown32 SIGFE
+fclose SIGFE
+_fclose = fclose SIGFE
+fcloseall SIGFE
+_fcloseall = fcloseall SIGFE
+fcntl NOSIGFE
+_fcntl = fcntl NOSIGFE
+fcvt SIGFE
+_fcvt = fcvt SIGFE
+fcvtbuf SIGFE
+_fcvtbuf = fcvtbuf SIGFE
+fcvtf SIGFE
+_fcvtf = fcvtf SIGFE
+fdim NOSIGFE
+fdimf NOSIGFE
+fdopen SIGFE
+_fdopen = fdopen SIGFE
+_fdopen64 = fdopen64 SIGFE
+feof NOSIGFE
+_feof = feof NOSIGFE
+ferror NOSIGFE
+_ferror = ferror NOSIGFE
+fflush NOSIGFE
+_fflush = fflush NOSIGFE
+ffs NOSIGFE
+_ffs = ffs NOSIGFE
+fgetc SIGFE
+_fgetc = fgetc SIGFE
+fgetpos NOSIGFE
+_fgetpos = fgetpos NOSIGFE
+_fgetpos64 = fgetpos64 NOSIGFE
+fgets SIGFE
+_fgets = fgets SIGFE
+fileno NOSIGFE
+_fileno = fileno NOSIGFE
+finite NOSIGFE
+_finite = finite NOSIGFE
+finitef NOSIGFE
+_finitef = finitef NOSIGFE
+fiprintf SIGFE
+_fiprintf = fiprintf SIGFE
+floor NOSIGFE
+_floor = floor NOSIGFE
+floorf NOSIGFE
+_floorf = floorf NOSIGFE
+fma NOSIGFE
+fmaf NOSIGFE
+fmax NOSIGFE
+fmaxf NOSIGFE
+fmin NOSIGFE
+fminf NOSIGFE
+fmod NOSIGFE
+_fmod = fmod NOSIGFE
+fmodf NOSIGFE
+_fmodf = fmodf NOSIGFE
+fnmatch NOSIGFE
+_fnmatch = fnmatch NOSIGFE
+fopen SIGFE
+_fopen = fopen SIGFE
+_fopen64 = fopen64 SIGFE
+fork SIGFE
+_fork = fork SIGFE
+forkpty SIGFE
+fpathconf SIGFE
+fprintf SIGFE
+_fprintf = fprintf SIGFE
+fputc NOSIGFE
+_fputc = fputc NOSIGFE
+fputs SIGFE
+_fputs = fputs SIGFE
+fread SIGFE
+_fread = fread SIGFE
+free SIGFE
+_free = free SIGFE
+freopen SIGFE
+_freopen = freopen SIGFE
+_freopen64 = freopen64 SIGFE
+frexp NOSIGFE
+_frexp = frexp NOSIGFE
+frexpf NOSIGFE
+_frexpf = frexpf NOSIGFE
+fscanf SIGFE
+_fscanf = fscanf SIGFE
+fseek SIGFE
+_fseek = fseek SIGFE
+fseeko SIGFE
+_fseeko = fseeko SIGFE
+_fseeko64 = fseeko64 SIGFE
+fsetpos SIGFE
+_fsetpos = fsetpos SIGFE
+_fsetpos64 = fsetpos64 SIGFE
+_fstat64 = fstat64 SIGFE
+fstatfs SIGFE
+_fstatfs = fstatfs SIGFE
+fsync SIGFE
+_fsync = fsync SIGFE
+ftell NOSIGFE
+_ftell = ftell NOSIGFE
+ftello NOSIGFE
+_ftello = ftello NOSIGFE
+_ftello64 = ftello64 NOSIGFE
+ftime SIGFE
+_ftime = ftime SIGFE
+ftok SIGFE
+_ftok = ftok SIGFE
+ftruncate SIGFE
+_ftruncate = ftruncate SIGFE
+_ftruncate64 = ftruncate64 SIGFE
+fwrite SIGFE
+_fwrite = fwrite SIGFE
+gamma NOSIGFE
+_gamma = gamma NOSIGFE
+gamma_r NOSIGFE
+_gamma_r = gamma_r NOSIGFE
+gammaf NOSIGFE
+_gammaf = gammaf NOSIGFE
+gammaf_r NOSIGFE
+_gammaf_r = gammaf_r NOSIGFE
+gcvt SIGFE
+_gcvt = gcvt SIGFE
+gcvtf SIGFE
+_gcvtf = gcvtf SIGFE
+get_osfhandle SIGFE
+_get_osfhandle = get_osfhandle SIGFE
+getc SIGFE
+_getc = getc SIGFE
+getc_unlocked SIGFE
+_getc_unlocked = getc_unlocked SIGFE
+getchar NOSIGFE
+_getchar = getchar NOSIGFE
+getchar_unlocked NOSIGFE
+_getchar_unlocked = getchar_unlocked NOSIGFE
+getcwd SIGFE
+_getcwd = getcwd SIGFE
+getdomainname SIGFE
+_getdomainname = getdomainname SIGFE
+getdtablesize NOSIGFE
+_getdtablesize = getdtablesize NOSIGFE
+getegid NOSIGFE
+_getegid = getegid NOSIGFE
+_getegid32 = getegid32 NOSIGFE
+getenv NOSIGFE
+_getenv = getenv NOSIGFE
+geteuid NOSIGFE
+_geteuid = geteuid NOSIGFE
+_geteuid32 = geteuid32 NOSIGFE
+getgid NOSIGFE
+_getgid = getgid NOSIGFE
+_getgid32 = getgid32 NOSIGFE
+getgrent SIGFE
+_getgrent = getgrent SIGFE
+_getgrent32 = getgrent32 SIGFE
+getgrgid SIGFE
+_getgrgid = getgrgid SIGFE
+_getgrgid32 = getgrgid32 SIGFE
+getgrnam SIGFE
+_getgrnam = getgrnam SIGFE
+_getgrnam32 = getgrnam32 SIGFE
+getgroups SIGFE
+_getgroups = getgroups SIGFE
+_getgroups32 = getgroups32 SIGFE
+gethostid SIGFE
+getitimer SIGFE
+getlogin NOSIGFE
+_getlogin = getlogin NOSIGFE
+getmntent SIGFE
+_getmntent = getmntent SIGFE
+getmode SIGFE
+_getmode = getmode SIGFE
+getopt SIGFE
+getopt_long SIGFE
+getpagesize SIGFE
+_getpagesize = getpagesize SIGFE
+getpass SIGFE
+_getpass = getpass SIGFE
+getpgid SIGFE
+getpgrp SIGFE
+_getpgrp = getpgrp SIGFE
+getpid NOSIGFE
+_getpid = getpid NOSIGFE
+getppid NOSIGFE
+_getppid = getppid NOSIGFE
+getpwduid NOSIGFE
+_getpwduid = getpwduid NOSIGFE
+getpwent SIGFE
+_getpwent = getpwent SIGFE
+getpwnam SIGFE
+_getpwnam = getpwnam SIGFE
+getpwnam_r SIGFE
+getpwuid SIGFE
+_getpwuid = getpwuid SIGFE
+_getpwuid32 = getpwuid32 SIGFE
+getpwuid_r SIGFE
+_getpwuid_r32 = getpwuid_r32 SIGFE
+getrlimit SIGFE
+_getrlimit = getrlimit SIGFE
+getrusage SIGFE
+_getrusage = getrusage SIGFE
+gets NOSIGFE
+_gets = gets NOSIGFE
+getsid SIGFE
+gettimeofday SIGFE
+_gettimeofday = gettimeofday SIGFE
+getuid NOSIGFE
+_getuid = getuid NOSIGFE
+_getuid32 = getuid32 NOSIGFE
+getutent SIGFE
+_getutent = getutent SIGFE
+getutid SIGFE
+_getutid = getutid SIGFE
+getutline SIGFE
+_getutline = getutline SIGFE
+getw SIGFE
+_getw = getw SIGFE
+getwd SIGFE
+_getwd = getwd SIGFE
+glob SIGFE
+_glob = glob SIGFE
+globfree SIGFE
+_globfree = globfree SIGFE
+gmtime SIGFE
+_gmtime = gmtime SIGFE
+gmtime_r SIGFE
+_gmtime_r = gmtime_r SIGFE
+grantpt NOSIGFE
+hcreate SIGFE
+hcreate_r SIGFE
+hdestroy SIGFE
+hdestroy_r SIGFE
+hsearch SIGFE
+hsearch_r SIGFE
+htonl NOSIGFE
+_htonl = htonl NOSIGFE
+htons NOSIGFE
+_htons = htons NOSIGFE
+hypot NOSIGFE
+_hypot = hypot NOSIGFE
+hypotf NOSIGFE
+_hypotf = hypotf NOSIGFE
+ilogb NOSIGFE
+_ilogb = ilogb NOSIGFE
+ilogbf NOSIGFE
+_ilogbf = ilogbf NOSIGFE
+index NOSIGFE
+_index = index NOSIGFE
+inet_makeaddr NOSIGFE
+inet_netof NOSIGFE
+infinity NOSIGFE
+_infinity = infinity NOSIGFE
+infinityf NOSIGFE
+_infinityf = infinityf NOSIGFE
+initgroups SIGFE
+_initgroups32 = initgroups32 SIGFE
+initstate NOSIGFE
+ioctl SIGFE
+_ioctl = ioctl SIGFE
+iprintf SIGFE
+_iprintf = iprintf SIGFE
+iruserok SIGFE
+ruserok SIGFE
+isalnum NOSIGFE
+_isalnum = isalnum NOSIGFE
+isalpha NOSIGFE
+_isalpha = isalpha NOSIGFE
+isascii NOSIGFE
+_isascii = isascii NOSIGFE
+isatty SIGFE
+_isatty = isatty SIGFE
+isblank NOSIGFE
+iscntrl NOSIGFE
+_iscntrl = iscntrl NOSIGFE
+isdigit NOSIGFE
+_isdigit = isdigit NOSIGFE
+isgraph NOSIGFE
+_isgraph = isgraph NOSIGFE
+isinf NOSIGFE
+_isinf = isinf NOSIGFE
+isinff NOSIGFE
+_isinff = isinff NOSIGFE
+islower NOSIGFE
+_islower = islower NOSIGFE
+isnan NOSIGFE
+_isnan = isnan NOSIGFE
+isnanf NOSIGFE
+_isnanf = isnanf NOSIGFE
+isprint NOSIGFE
+_isprint = isprint NOSIGFE
+ispunct NOSIGFE
+_ispunct = ispunct NOSIGFE
+isspace NOSIGFE
+_isspace = isspace NOSIGFE
+isupper NOSIGFE
+_isupper = isupper NOSIGFE
+iswalnum NOSIGFE
+iswalpha NOSIGFE
+iswblank NOSIGFE
+iswcntrl NOSIGFE
+iswctype NOSIGFE
+iswdigit NOSIGFE
+iswgraph NOSIGFE
+iswlower NOSIGFE
+iswprint NOSIGFE
+iswpunct NOSIGFE
+iswspace NOSIGFE
+iswupper NOSIGFE
+iswxdigit NOSIGFE
+isxdigit NOSIGFE
+_isxdigit = isxdigit NOSIGFE
+j0 NOSIGFE
+_j0 = j0 NOSIGFE
+j0f NOSIGFE
+_j0f = j0f NOSIGFE
+j1 NOSIGFE
+_j1 = j1 NOSIGFE
+j1f NOSIGFE
+_j1f = j1f NOSIGFE
+jn NOSIGFE
+_jn = jn NOSIGFE
+jnf NOSIGFE
+_jnf = jnf NOSIGFE
+jrand48 NOSIGFE
+_jrand48 = jrand48 NOSIGFE
+kill SIGFE
+_kill = kill SIGFE
+killpg SIGFE
+l64a NOSIGFE
+labs NOSIGFE
+_labs = labs NOSIGFE
+lacl SIGFE
+_lacl = lacl SIGFE
+lchown SIGFE
+_lchown = lchown SIGFE
+_lchown32 = lchown32 SIGFE
+lcong48 NOSIGFE
+_lcong48 = lcong48 NOSIGFE
+ldexp NOSIGFE
+_ldexp = ldexp NOSIGFE
+ldexpf NOSIGFE
+_ldexpf = ldexpf NOSIGFE
+ldiv NOSIGFE
+_ldiv = ldiv NOSIGFE
+lgamma NOSIGFE
+_lgamma = lgamma NOSIGFE
+lgamma_r NOSIGFE
+_lgamma_r = lgamma_r NOSIGFE
+lgammaf NOSIGFE
+_lgammaf = lgammaf NOSIGFE
+lgammaf_r NOSIGFE
+_lgammaf_r = lgammaf_r NOSIGFE
+link SIGFE
+_link = link SIGFE
+localeconv NOSIGFE
+_localeconv = localeconv NOSIGFE
+localtime SIGFE
+_localtime = localtime SIGFE
+localtime_r NOSIGFE
+_localtime_r = localtime_r NOSIGFE
+log NOSIGFE
+_log = log NOSIGFE
+log10 NOSIGFE
+_log10 = log10 NOSIGFE
+log10f NOSIGFE
+_log10f = log10f NOSIGFE
+log1p NOSIGFE
+_log1p = log1p NOSIGFE
+log1pf NOSIGFE
+_log1pf = log1pf NOSIGFE
+logb NOSIGFE
+_logb = logb NOSIGFE
+logbf NOSIGFE
+_logbf = logbf NOSIGFE
+logf NOSIGFE
+_logf = logf NOSIGFE
+login SIGFE
+login_tty SIGFE
+logout SIGFE
+logwtmp SIGFE
+updwtmp SIGFE
+longjmp NOSIGFE
+_longjmp = longjmp NOSIGFE
+lrand48 NOSIGFE
+_lrand48 = lrand48 NOSIGFE
+lrint NOSIGFE
+lrintf NOSIGFE
+lround NOSIGFE
+lroundf NOSIGFE
+lseek SIGFE
+_lseek = lseek SIGFE
+_lseek64 = lseek64 SIGFE
+_lstat64 = lstat64 SIGFE
+mallinfo SIGFE
+malloc SIGFE
+_malloc = malloc SIGFE
+malloc_stats SIGFE
+malloc_trim SIGFE
+malloc_usable_size SIGFE
+mallopt SIGFE
+matherr NOSIGFE
+_matherr = matherr NOSIGFE
+mblen NOSIGFE
+_mblen = mblen NOSIGFE
+mbrlen NOSIGFE
+mbrtowc NOSIGFE
+mbsinit NOSIGFE
+mbsrtowcs NOSIGFE
+mbstowcs NOSIGFE
+_mbstowcs = mbstowcs NOSIGFE
+mbtowc NOSIGFE
+_mbtowc = mbtowc NOSIGFE
+memalign SIGFE
+memccpy NOSIGFE
+_memccpy = memccpy NOSIGFE
+memchr NOSIGFE
+_memchr = memchr NOSIGFE
+memcmp NOSIGFE
+_memcmp = memcmp NOSIGFE
+memcpy NOSIGFE
+_memcpy = memcpy NOSIGFE
+memmove NOSIGFE
+_memmove = memmove NOSIGFE
+mempcpy NOSIGFE
+__mempcpy = mempcpy NOSIGFE
+memset NOSIGFE
+_memset = memset NOSIGFE
+mkdir SIGFE
+_mkdir = mkdir SIGFE
+mkfifo SIGFE
+mknod SIGFE
+_mknod = mknod SIGFE
+_mknod32 = mknod32 SIGFE
+mkstemp SIGFE
+_mkstemp = mkstemp SIGFE
+mktemp SIGFE
+_mktemp = mktemp SIGFE
+mktime SIGFE
+_mktime = mktime SIGFE
+mmap SIGFE
+_mmap64 = mmap64 SIGFE
+modf NOSIGFE
+_modf = modf NOSIGFE
+modff NOSIGFE
+_modff = modff NOSIGFE
+mount SIGFE
+_mount = mount SIGFE
+mprotect SIGFE
+mrand48 NOSIGFE
+msync SIGFE
+munmap SIGFE
+nan NOSIGFE
+_nan = nan NOSIGFE
+nanf NOSIGFE
+_nanf = nanf NOSIGFE
+nanosleep SIGFE
+_nanosleep = nanosleep SIGFE
+nearbyint NOSIGFE
+nearbyintf NOSIGFE
+nextafter NOSIGFE
+_nextafter = nextafter NOSIGFE
+nextafterf NOSIGFE
+_nextafterf = nextafterf NOSIGFE
+nice SIGFE
+_nice = nice SIGFE
+nl_langinfo SIGFE
+_nl_langinfo = nl_langinfo SIGFE
+nrand48 NOSIGFE
+_nrand48 = nrand48 NOSIGFE
+ntohl NOSIGFE
+_ntohl = ntohl NOSIGFE
+ntohs NOSIGFE
+_ntohs = ntohs NOSIGFE
+on_exit SIGFE
+open SIGFE
+_open = open SIGFE
 _open64
-opendir
-_opendir = opendir
-openlog
-_openlog = openlog
-openpty
-pathconf
-_pathconf = pathconf
-pause
-pclose
-_pclose = pclose
-perror
-_perror = perror
-pipe
-poll
-_poll = poll
-popen
-_popen = popen
-posix_regcomp
-posix_regerror
-posix_regexec
-posix_regfree
-pow
-_pow = pow
-powf
-_powf = powf
-printf
-_printf = printf
-pthread_atfork
-pthread_attr_destroy
-pthread_attr_getdetachstate
-pthread_attr_getinheritsched
-pthread_attr_getschedparam
-pthread_attr_getschedpolicy
-pthread_attr_getscope
-pthread_attr_getstacksize
-pthread_attr_init
-pthread_attr_setdetachstate
-pthread_attr_setinheritsched
-pthread_attr_setschedparam
-pthread_attr_setschedpolicy
-pthread_attr_setscope
-pthread_attr_setstacksize
-pthread_cancel
-pthread_cond_broadcast
-pthread_cond_destroy
-pthread_cond_init
-pthread_cond_signal
-pthread_cond_timedwait
-pthread_cond_wait
-pthread_condattr_destroy
-pthread_condattr_getpshared
-pthread_condattr_init
-pthread_condattr_setpshared
-pthread_continue
-pthread_create
-pthread_detach
-pthread_equal
-pthread_exit
-pthread_getconcurrency
-pthread_getschedparam
-pthread_getsequence_np
-pthread_getspecific
-pthread_join
-pthread_key_create
-pthread_key_delete
-pthread_kill
-pthread_mutex_destroy
-pthread_mutex_getprioceiling
-pthread_mutex_init
-pthread_mutex_lock
-pthread_mutex_setprioceiling
-pthread_mutex_trylock
-pthread_mutex_unlock
-pthread_mutexattr_destroy
-pthread_mutexattr_getprioceiling
-pthread_mutexattr_getprotocol
-pthread_mutexattr_getpshared
-pthread_mutexattr_gettype
-pthread_mutexattr_init
-pthread_mutexattr_setprioceiling
-pthread_mutexattr_setprotocol
-pthread_mutexattr_setpshared
-pthread_mutexattr_settype
-pthread_once
-pthread_rwlock_destroy
-pthread_rwlock_init
-pthread_rwlock_rdlock
-pthread_rwlock_tryrdlock
-pthread_rwlock_wrlock
-pthread_rwlock_trywrlock
-pthread_rwlock_unlock
-pthread_rwlockattr_init
-pthread_rwlockattr_getpshared
-pthread_rwlockattr_setpshared
-pthread_rwlockattr_destroy
-pthread_self
-pthread_setcancelstate
-pthread_setcanceltype
-pthread_setconcurrency
-pthread_setschedparam
-pthread_setspecific
-pthread_sigmask
-pthread_suspend
-pthread_testcancel
-ptsname
-putc
-_putc = putc
-putc_unlocked
-_putc_unlocked = putc_unlocked
-putchar
-_putchar = putchar
-putchar_unlocked
-_putchar_unlocked = putchar_unlocked
-putenv
-_putenv = putenv
-puts
-_puts = puts
-pututline
-_pututline = pututline
-putw
-_putw = putw
-qsort
-_qsort = qsort
-raise
-_raise = raise
-rand
-_rand = rand
-random
-read
-_read = read
-readdir
-_readdir = readdir
-readlink
-_readlink = readlink
-readv
-_readv = readv
-realloc
-_realloc = realloc
-realpath
-remainder
-_remainder = remainder
-remainderf
-_remainderf = remainderf
-remove
-_remove = remove
-remquo
-remquof
-rename
-_rename = rename
-revoke
-rewind
-_rewind = rewind
-rewinddir
-_rewinddir = rewinddir
-rindex
-_rindex = rindex
-rint
-_rint = rint
-rintf
-_rintf = rintf
-rmdir
-_rmdir = rmdir
-round
-roundf
-sbrk
-_sbrk = sbrk
-scalb
-_scalb = scalb
-scalbf
-_scalbf = scalbf
-scalbln
-scalblnf
-scalbn
-_scalbn = scalbn
-scalbnf
-_scalbnf = scalbnf
-scandir
-_scandir = scandir
-scanf
-_scanf = scanf
-sched_get_priority_max
-sched_get_priority_min
-sched_getparam
-sched_getscheduler
-sched_rr_get_interval
-sched_setparam
-sched_setscheduler
-sched_yield
-seed48
-_seed48 = seed48
-seekdir
-_seekdir = seekdir
-_seekdir64 = seekdir64
-semctl
-semget
-semop
-sem_close
-sem_destroy
-sem_getvalue
-sem_init
-sem_open
-sem_post
-sem_timedwait
-sem_trywait
-sem_wait
-setbuf
-_setbuf = setbuf
-setbuffer
-setdtablesize
-_setdtablesize = setdtablesize
-setegid
-_setegid = setegid
-_setegid32 = setegid32
-setenv
-_setenv = setenv
-seteuid
-_seteuid = seteuid
-_seteuid32 = seteuid32
-setgid
-_setgid = setgid
-_setgid32 = setgid32
-setgrent
-_setgrent = setgrent
-setgroups
-_setgroups = setgroups
-_setgroups32 = setgroups32
-sethostent
-setitimer
-setjmp
-_setjmp = setjmp
-setlinebuf
-setlocale
-_setlocale = setlocale
-setlogmask
-setmntent
-_setmntent = setmntent
-setmode
-_setmode = setmode
-setpassent
-_setpassent = setpassent
-setpgid
-_setpgid = setpgid
-setpgrp
-_setpgrp = setpgrp
-setprogname
-setpwent
-_setpwent = setpwent
-setregid
-_setregid = setregid
-setregid32
-_setregid32 = setregid32
-setreuid
-_setreuid = setreuid
-setreuid32
-_setreuid32 = setreuid32
-setrlimit
-_setrlimit = setrlimit
-setsid
-_setsid = setsid
-setstate
-settimeofday
-_settimeofday = settimeofday
-setuid
-_setuid = setuid
-_setuid32 = setuid32
-setutent
-_setutent = setutent
-setvbuf
-_setvbuf = setvbuf
-sexecl = sexecve_is_bad
-sexecle = sexecve_is_bad
-sexeclp = sexecve_is_bad
-sexeclpe = sexecve_is_bad
-sexecp = sexecve_is_bad
-sexecv = sexecve_is_bad
-sexecve = sexecve_is_bad
-sexecvpe = sexecve_is_bad
-shmat
-shmctl
-shmdt
-shmget
-sigaction
-_sigaction = sigaction
-sigaddset
-_sigaddset = sigaddset
-sigdelset
-_sigdelset = sigdelset
-sigemptyset
-_sigemptyset = sigemptyset
-sigfillset
-_sigfillset = sigfillset
-siginterrupt
-_siginterrupt = siginterrupt
-sigismember
-_sigismember = sigismember
-signal
-_signal = signal
-significand
-_significand = significand
-significandf
-_significandf = significandf
-sigpause
-sigpending
-_sigpending = sigpending
-sigprocmask
-_sigprocmask = sigprocmask
-sigsuspend
-_sigsuspend = sigsuspend
-sin
-_sin = sin
-sincos
-sincosf
-sinf
-_sinf = sinf
-sinh
-_sinh = sinh
-sinhf
-_sinhf = sinhf
-siprintf
-_siprintf = siprintf
-sleep
-_sleep = sleep
-snprintf
-_snprintf = snprintf
-socketpair
-spawnl
-_spawnl = spawnl
-spawnle
-_spawnle = spawnle
-spawnlp
-_spawnlp = spawnlp
-spawnlpe
-_spawnlpe = spawnlpe
-spawnv
-_spawnv = spawnv
-spawnve
-_spawnve = spawnve
-spawnvp
-_spawnvp = spawnvp
-spawnvpe
-_spawnvpe = spawnvpe
-sprintf
-_sprintf = sprintf
-sqrt
-_sqrt = sqrt
-sqrtf
-_sqrtf = sqrtf
-srand
-_srand = srand
-srand48
-_srand48 = srand48
-srandom
-sscanf
-_sscanf = sscanf
-_stat64 = stat64
-statfs
-_statfs = statfs
-strcasecmp
-_strcasecmp = strcasecmp
-strcat
-_strcat = strcat
-strchr
-_strchr = strchr
-strcmp
-_strcmp = strcmp
-strcoll
-_strcoll = strcoll
-strcpy
-_strcpy = strcpy
-strcspn
-_strcspn = strcspn
-strdup
-_strdup = strdup
-strerror
-_strerror = strerror
-strerror_r
-_strerror_r = strerror_r
-strftime
-_strftime = strftime
-strlcat
-_strlcat = strlcat
-strlcpy
-_strlcpy = strlcpy
-strlen
-_strlen = strlen
-strlwr
-_strlwr = strlwr
-strncasecmp
-_strncasecmp = strncasecmp
-strncat
-_strncat = strncat
-strncmp
-_strncmp = strncmp
-strncpy
-_strncpy = strncpy
-strndup
-strnlen
-strpbrk
-_strpbrk = strpbrk
-strptime
-_strptime = strptime
-strrchr
-_strrchr = strrchr
-strsep
-_strsep = strsep
-strsignal
-strspn
-_strspn = strspn
-strstr
-_strstr = strstr
-strtod
-_strtod = strtod
-strtof
-_strtodf = strtof
-strtodf = strtof
-strtok
-_strtok = strtok
-strtok_r
-_strtok_r = strtok_r
-strtol
-_strtol = strtol
-strtoll
-_strtoll = strtoll
-strtosigno
-strtoul
-_strtoul = strtoul
-strtoull
-_strtoull = strtoull
-strupr
-_strupr = strupr
-strxfrm
-_strxfrm = strxfrm
-swab
-_swab = swab
-symlink
-_symlink = symlink
-sync
-_sync = sync
-sysconf
-_sysconf = sysconf
-syslog
-_syslog = syslog
-vsyslog
-system
-_system = system
-tan
-_tan = tan
-tanf
-_tanf = tanf
-tanh
-_tanh = tanh
-tanhf
-_tanhf = tanhf
-tcdrain
-_tcdrain = tcdrain
-tcflow
-_tcflow = tcflow
-tcflush
-_tcflush = tcflush
-tcgetattr
-_tcgetattr = tcgetattr
-tcgetpgrp
-_tcgetpgrp = tcgetpgrp
-tcsendbreak
-_tcsendbreak = tcsendbreak
-tcsetattr
-_tcsetattr = tcsetattr
-tcsetpgrp
-_tcsetpgrp = tcsetpgrp
-tdelete
-tdestroy
-telldir
-_telldir = telldir
-_telldir64 = telldir64
-tempnam
-_tempnam = tempnam
-tfind
-tgamma
-tgammaf
-time
-_time = time
-times
-_times = times
-timezone
-tmpfile
-_tmpfile = tmpfile
-_tmpfile64 = tmpfile64
-tmpnam
-_tmpnam = tmpnam
-toascii
-_toascii = toascii
-tolower
-_tolower = tolower
-toupper
-_toupper = toupper
-towctrans
-towlower
-towupper
-truncate
-_truncate = truncate
-_truncate64 = truncate64
-truncf
-tsearch
-ttyname
-_ttyname = ttyname
-ttyslot
-twalk
-tzset
-_tzset = tzset
-ualarm
-_ualarm = ualarm
-umask
-_umask = umask
-umount
-_umount = umount
-uname
-_uname = uname
-ungetc
-_ungetc = ungetc
-unlink
-_unlink = unlink
-unlockpt
-unsetenv
-_unsetenv = unsetenv
-usleep
-_usleep = usleep
-utime
-_utime = utime
-utimes
-_utimes = utimes
-utmpname
-_utmpname = utmpname
-valloc
-vasprintf
-_vasprintf = vasprintf
-vfiprintf
-_vfiprintf = vfiprintf
-vfork
-_vfork = vfork
-vfprintf
-_vfprintf = vfprintf
-vfscanf
-_vfscanf = vfscanf
-vhangup
-_vhangup = vhangup
-vprintf
-_vprintf = vprintf
-vscanf
-_vscanf = vscanf
-vsnprintf
-_vsnprintf = vsnprintf
-vsprintf
-_vsprintf = vsprintf
-vsscanf
-_vsscanf = vsscanf
-wait
-_wait = wait
-wait3
-wait4
-waitpid
-_waitpid = waitpid
-wcrtomb
-wcscat
-wcschr
-wcscmp
-_wcscmp = wcscmp
-wcscoll
-wcscpy
-wcscspn
-wcslcat
-wcslcpy
-wcslen
-_wcslen = wcslen
-wcsncat
-wcsncmp
-wcsncpy
-wcspbrk
-wcsrchr
-wcsrtombs
-wcsspn
-wcsstr
-wcstombs
-_wcstombs = wcstombs
-wcswidth
-wctob
-wctomb
-_wctomb = wctomb
-wctrans
-wctype
-wcwidth
-wmemchr
-wmemcmp
-wmemcpy
-wmemmove
-wmemset
-wprintf
-_wprintf = wprintf
-write
-_write = write
-writev
-_writev = writev
-y0
-y0f
-y1
-y1f
-yn
-ynf
+opendir SIGFE
+_opendir = opendir SIGFE
+openlog SIGFE
+_openlog = openlog SIGFE
+openpty SIGFE
+pathconf SIGFE
+_pathconf = pathconf SIGFE
+pause SIGFE
+pclose SIGFE
+_pclose = pclose SIGFE
+perror SIGFE
+_perror = perror SIGFE
+pipe SIGFE
+poll SIGFE
+_poll = poll SIGFE
+popen SIGFE
+_popen = popen SIGFE
+posix_regcomp SIGFE
+posix_regerror SIGFE
+posix_regexec SIGFE
+posix_regfree SIGFE
+pow NOSIGFE
+_pow = pow NOSIGFE
+powf NOSIGFE
+_powf = powf NOSIGFE
+printf SIGFE
+_printf = printf SIGFE
+pthread_atfork SIGFE
+pthread_attr_destroy NOSIGFE
+pthread_attr_getdetachstate NOSIGFE
+pthread_attr_getinheritsched NOSIGFE
+pthread_attr_getschedparam NOSIGFE
+pthread_attr_getschedpolicy NOSIGFE
+pthread_attr_getscope NOSIGFE
+pthread_attr_getstacksize NOSIGFE
+pthread_attr_init SIGFE
+pthread_attr_setdetachstate NOSIGFE
+pthread_attr_setinheritsched NOSIGFE
+pthread_attr_setschedparam NOSIGFE
+pthread_attr_setschedpolicy NOSIGFE
+pthread_attr_setscope NOSIGFE
+pthread_attr_setstacksize NOSIGFE
+pthread_cancel NOSIGFE
+pthread_cond_broadcast SIGFE
+pthread_cond_destroy NOSIGFE
+pthread_cond_init SIGFE
+pthread_cond_signal SIGFE
+pthread_cond_timedwait SIGFE
+pthread_cond_wait SIGFE
+pthread_condattr_destroy NOSIGFE
+pthread_condattr_getpshared NOSIGFE
+pthread_condattr_init SIGFE
+pthread_condattr_setpshared NOSIGFE
+pthread_continue SIGFE
+pthread_create SIGFE
+pthread_detach SIGFE
+pthread_equal NOSIGFE
+pthread_exit NOSIGFE
+pthread_getconcurrency NOSIGFE
+pthread_getschedparam NOSIGFE
+pthread_getsequence_np NOSIGFE
+pthread_getspecific NOSIGFE
+pthread_join SIGFE
+pthread_key_create SIGFE
+pthread_key_delete NOSIGFE
+pthread_kill SIGFE
+pthread_mutex_destroy NOSIGFE
+pthread_mutex_getprioceiling SIGFE
+pthread_mutex_init SIGFE
+pthread_mutex_lock SIGFE
+pthread_mutex_setprioceiling SIGFE
+pthread_mutex_trylock SIGFE
+pthread_mutex_unlock SIGFE
+pthread_mutexattr_destroy NOSIGFE
+pthread_mutexattr_getprioceiling NOSIGFE
+pthread_mutexattr_getprotocol NOSIGFE
+pthread_mutexattr_getpshared NOSIGFE
+pthread_mutexattr_gettype NOSIGFE
+pthread_mutexattr_init SIGFE
+pthread_mutexattr_setprioceiling NOSIGFE
+pthread_mutexattr_setprotocol NOSIGFE
+pthread_mutexattr_setpshared NOSIGFE
+pthread_mutexattr_settype NOSIGFE
+pthread_once SIGFE
+pthread_rwlock_destroy NOSIGFE
+pthread_rwlock_init SIGFE
+pthread_rwlock_rdlock SIGFE
+pthread_rwlock_tryrdlock SIGFE
+pthread_rwlock_wrlock SIGFE
+pthread_rwlock_trywrlock SIGFE
+pthread_rwlock_unlock SIGFE
+pthread_rwlockattr_init SIGFE
+pthread_rwlockattr_getpshared NOSIGFE
+pthread_rwlockattr_setpshared NOSIGFE
+pthread_rwlockattr_destroy NOSIGFE
+pthread_self NOSIGFE
+pthread_setcancelstate NOSIGFE
+pthread_setcanceltype NOSIGFE
+pthread_setconcurrency NOSIGFE
+pthread_setschedparam SIGFE
+pthread_setspecific NOSIGFE
+pthread_sigmask SIGFE
+pthread_suspend SIGFE
+pthread_testcancel NOSIGFE
+ptsname SIGFE
+putc SIGFE
+_putc = putc SIGFE
+putc_unlocked SIGFE
+_putc_unlocked = putc_unlocked SIGFE
+putchar NOSIGFE
+_putchar = putchar NOSIGFE
+putchar_unlocked NOSIGFE
+_putchar_unlocked = putchar_unlocked NOSIGFE
+putenv SIGFE
+_putenv = putenv SIGFE
+puts SIGFE
+_puts = puts SIGFE
+pututline SIGFE
+_pututline = pututline SIGFE
+putw SIGFE
+_putw = putw SIGFE
+qsort NOSIGFE
+_qsort = qsort NOSIGFE
+raise SIGFE
+_raise = raise SIGFE
+rand NOSIGFE
+_rand = rand NOSIGFE
+random NOSIGFE
+read SIGFE
+_read = read SIGFE
+readdir SIGFE
+_readdir = readdir SIGFE
+readlink SIGFE
+_readlink = readlink SIGFE
+readv SIGFE
+_readv = readv SIGFE
+realloc SIGFE
+_realloc = realloc SIGFE
+realpath SIGFE
+remainder NOSIGFE
+_remainder = remainder NOSIGFE
+remainderf NOSIGFE
+_remainderf = remainderf NOSIGFE
+remove SIGFE
+_remove = remove SIGFE
+remquo NOSIGFE
+remquof NOSIGFE
+rename SIGFE
+_rename = rename SIGFE
+revoke SIGFE
+rewind SIGFE
+_rewind = rewind SIGFE
+rewinddir SIGFE
+_rewinddir = rewinddir SIGFE
+rindex NOSIGFE
+_rindex = rindex NOSIGFE
+rint NOSIGFE
+_rint = rint NOSIGFE
+rintf NOSIGFE
+_rintf = rintf NOSIGFE
+rmdir SIGFE
+_rmdir = rmdir SIGFE
+round NOSIGFE
+roundf NOSIGFE
+sbrk SIGFE
+_sbrk = sbrk SIGFE
+scalb NOSIGFE
+_scalb = scalb NOSIGFE
+scalbf NOSIGFE
+_scalbf = scalbf NOSIGFE
+scalbln NOSIGFE
+scalblnf NOSIGFE
+scalbn NOSIGFE
+_scalbn = scalbn NOSIGFE
+scalbnf NOSIGFE
+_scalbnf = scalbnf NOSIGFE
+scandir SIGFE
+_scandir = scandir SIGFE
+scanf SIGFE
+_scanf = scanf SIGFE
+sched_get_priority_max SIGFE
+sched_get_priority_min SIGFE
+sched_getparam SIGFE
+sched_getscheduler NOSIGFE
+sched_rr_get_interval SIGFE
+sched_setparam SIGFE
+sched_setscheduler SIGFE
+sched_yield SIGFE
+seed48 NOSIGFE
+_seed48 = seed48 NOSIGFE
+seekdir SIGFE
+_seekdir = seekdir SIGFE
+_seekdir64 = seekdir64 SIGFE
+sem_destroy NOSIGFE
+sem_init SIGFE
+sem_post SIGFE
+sem_trywait SIGFE
+sem_wait SIGFE
+setbuf SIGFE
+_setbuf = setbuf SIGFE
+setbuffer SIGFE
+setdtablesize SIGFE
+_setdtablesize = setdtablesize SIGFE
+setegid SIGFE
+_setegid = setegid SIGFE
+_setegid32 = setegid32 SIGFE
+setenv SIGFE
+_setenv = setenv SIGFE
+seteuid SIGFE
+_seteuid = seteuid SIGFE
+_seteuid32 = seteuid32 SIGFE
+setgid SIGFE
+_setgid = setgid SIGFE
+_setgid32 = setgid32 SIGFE
+setgrent NOSIGFE
+_setgrent = setgrent NOSIGFE
+setgroups SIGFE
+_setgroups = setgroups SIGFE
+_setgroups32 = setgroups32 SIGFE
+sethostent NOSIGFE
+setitimer SIGFE
+setjmp NOSIGFE
+_setjmp = setjmp NOSIGFE
+setlinebuf SIGFE
+setlocale NOSIGFE
+_setlocale = setlocale NOSIGFE
+setlogmask NOSIGFE
+setmntent SIGFE
+_setmntent = setmntent SIGFE
+setmode SIGFE
+_setmode = setmode SIGFE
+setpassent NOSIGFE
+_setpassent = setpassent NOSIGFE
+setpgid SIGFE
+_setpgid = setpgid SIGFE
+setpgrp SIGFE
+_setpgrp = setpgrp SIGFE
+setpwent NOSIGFE
+_setpwent = setpwent NOSIGFE
+setregid SIGFE
+_setregid = setregid SIGFE
+setregid32 SIGFE
+_setregid32 = setregid32 SIGFE
+setreuid SIGFE
+_setreuid = setreuid SIGFE
+setreuid32 SIGFE
+_setreuid32 = setreuid32 SIGFE
+setrlimit SIGFE
+_setrlimit = setrlimit SIGFE
+setsid SIGFE
+_setsid = setsid SIGFE
+setstate NOSIGFE
+settimeofday SIGFE
+_settimeofday = settimeofday SIGFE
+setuid SIGFE
+_setuid = setuid SIGFE
+_setuid32 = setuid32 SIGFE
+setutent SIGFE
+_setutent = setutent SIGFE
+setvbuf SIGFE
+_setvbuf = setvbuf SIGFE
+sexecl = sexecve_is_bad SIGFE
+sexecle = sexecve_is_bad SIGFE
+sexeclp = sexecve_is_bad SIGFE
+sexeclpe = sexecve_is_bad SIGFE
+sexecp = sexecve_is_bad SIGFE
+sexecv = sexecve_is_bad SIGFE
+sexecve = sexecve_is_bad SIGFE
+sexecvpe = sexecve_is_bad SIGFE
+shmat SIGFE
+shmctl SIGFE
+shmdt SIGFE
+shmget SIGFE
+sigaction SIGFE
+sigaddset SIGFE
+sigdelset SIGFE
+sigemptyset NOSIGFE
+sigfillset NOSIGFE
+siginterrupt SIGFE
+sigismember SIGFE
+signal SIGFE
+significand NOSIGFE
+significandf NOSIGFE
+sigpause SIGFE
+sigpending SIGFE
+sigprocmask SIGFE
+sigsuspend SIGFE
+sigwait SIGFE
+sin NOSIGFE
+_sin = sin NOSIGFE
+sincos NOSIGFE
+sincosf NOSIGFE
+sinf NOSIGFE
+_sinf = sinf NOSIGFE
+sinh NOSIGFE
+_sinh = sinh NOSIGFE
+sinhf NOSIGFE
+_sinhf = sinhf NOSIGFE
+siprintf SIGFE
+_siprintf = siprintf SIGFE
+sleep SIGFE
+_sleep = sleep SIGFE
+snprintf SIGFE
+_snprintf = snprintf SIGFE
+socketpair SIGFE
+spawnl SIGFE
+_spawnl = spawnl SIGFE
+spawnle SIGFE
+_spawnle = spawnle SIGFE
+spawnlp SIGFE
+_spawnlp = spawnlp SIGFE
+spawnlpe SIGFE
+_spawnlpe = spawnlpe SIGFE
+spawnv SIGFE
+_spawnv = spawnv SIGFE
+spawnve SIGFE
+_spawnve = spawnve SIGFE
+spawnvp SIGFE
+_spawnvp = spawnvp SIGFE
+spawnvpe SIGFE
+_spawnvpe = spawnvpe SIGFE
+sprintf SIGFE
+_sprintf = sprintf SIGFE
+sqrt NOSIGFE
+_sqrt = sqrt NOSIGFE
+sqrtf NOSIGFE
+_sqrtf = sqrtf NOSIGFE
+srand NOSIGFE
+_srand = srand NOSIGFE
+srand48 NOSIGFE
+_srand48 = srand48 NOSIGFE
+srandom NOSIGFE
+sscanf SIGFE
+_sscanf = sscanf SIGFE
+_stat64 = stat64 SIGFE
+statfs SIGFE
+_statfs = statfs SIGFE
+strcasecmp NOSIGFE
+_strcasecmp = strcasecmp NOSIGFE
+strcat NOSIGFE
+_strcat = strcat NOSIGFE
+strchr NOSIGFE
+_strchr = strchr NOSIGFE
+strcmp NOSIGFE
+_strcmp = strcmp NOSIGFE
+strcoll NOSIGFE
+_strcoll = strcoll NOSIGFE
+strcpy NOSIGFE
+_strcpy = strcpy NOSIGFE
+strcspn NOSIGFE
+_strcspn = strcspn NOSIGFE
+strdup SIGFE
+_strdup = strdup SIGFE
+strerror NOSIGFE
+_strerror = strerror NOSIGFE
+strerror_r NOSIGFE
+_strerror_r = strerror_r NOSIGFE
+strftime SIGFE
+_strftime = strftime SIGFE
+strlcat NOSIGFE
+_strlcat = strlcat NOSIGFE
+strlcpy NOSIGFE
+_strlcpy = strlcpy NOSIGFE
+strlen NOSIGFE
+_strlen = strlen NOSIGFE
+strlwr NOSIGFE
+_strlwr = strlwr NOSIGFE
+strncasecmp NOSIGFE
+_strncasecmp = strncasecmp NOSIGFE
+strncat NOSIGFE
+_strncat = strncat NOSIGFE
+strncmp NOSIGFE
+_strncmp = strncmp NOSIGFE
+strncpy NOSIGFE
+_strncpy = strncpy NOSIGFE
+strndup SIGFE
+strnlen NOSIGFE
+strpbrk NOSIGFE
+_strpbrk = strpbrk NOSIGFE
+strptime SIGFE
+_strptime = strptime SIGFE
+strrchr NOSIGFE
+_strrchr = strrchr NOSIGFE
+strsep NOSIGFE
+_strsep = strsep NOSIGFE
+strsignal SIGFE
+strspn NOSIGFE
+_strspn = strspn NOSIGFE
+strstr NOSIGFE
+_strstr = strstr NOSIGFE
+strtod SIGFE
+_strtod = strtod SIGFE
+strtof SIGFE
+_strtodf = strtof SIGFE
+strtodf = strtof SIGFE
+strtok NOSIGFE
+_strtok = strtok NOSIGFE
+strtok_r NOSIGFE
+_strtok_r = strtok_r NOSIGFE
+strtol NOSIGFE
+_strtol = strtol NOSIGFE
+strtoll NOSIGFE
+_strtoll = strtoll NOSIGFE
+strtosigno SIGFE
+strtoul NOSIGFE
+_strtoul = strtoul NOSIGFE
+strtoull NOSIGFE
+_strtoull = strtoull NOSIGFE
+strupr NOSIGFE
+_strupr = strupr NOSIGFE
+strxfrm NOSIGFE
+_strxfrm = strxfrm NOSIGFE
+swab NOSIGFE
+_swab = swab NOSIGFE
+symlink SIGFE
+_symlink = symlink SIGFE
+sync NOSIGFE
+_sync = sync NOSIGFE
+sysconf SIGFE
+_sysconf = sysconf SIGFE
+syslog SIGFE
+_syslog = syslog SIGFE
+vsyslog SIGFE
+system SIGFE
+_system = system SIGFE
+tan NOSIGFE
+_tan = tan NOSIGFE
+tanf NOSIGFE
+_tanf = tanf NOSIGFE
+tanh NOSIGFE
+_tanh = tanh NOSIGFE
+tanhf NOSIGFE
+_tanhf = tanhf NOSIGFE
+tcdrain SIGFE
+_tcdrain = tcdrain SIGFE
+tcflow SIGFE
+_tcflow = tcflow SIGFE
+tcflush SIGFE
+_tcflush = tcflush SIGFE
+tcgetattr SIGFE
+_tcgetattr = tcgetattr SIGFE
+tcgetpgrp SIGFE
+_tcgetpgrp = tcgetpgrp SIGFE
+tcsendbreak SIGFE
+_tcsendbreak = tcsendbreak SIGFE
+tcsetattr SIGFE
+_tcsetattr = tcsetattr SIGFE
+tcsetpgrp SIGFE
+_tcsetpgrp = tcsetpgrp SIGFE
+tdelete SIGFE
+tdestroy NOSIGFE
+telldir SIGFE
+_telldir = telldir SIGFE
+_telldir64 = telldir64 SIGFE
+tempnam SIGFE
+_tempnam = tempnam SIGFE
+tfind NOSIGFE
+tgamma NOSIGFE
+tgammaf NOSIGFE
+time SIGFE
+_time = time SIGFE
+times SIGFE
+_times = times SIGFE
+timezone SIGFE
+tmpfile SIGFE
+_tmpfile = tmpfile SIGFE
+_tmpfile64 = tmpfile64 SIGFE
+tmpnam SIGFE
+_tmpnam = tmpnam SIGFE
+toascii NOSIGFE
+_toascii = toascii NOSIGFE
+tolower NOSIGFE
+_tolower = tolower NOSIGFE
+toupper NOSIGFE
+_toupper = toupper NOSIGFE
+towctrans NOSIGFE
+towlower NOSIGFE
+towupper NOSIGFE
+truncate SIGFE
+_truncate = truncate SIGFE
+_truncate64 = truncate64 SIGFE
+truncf NOSIGFE
+tsearch SIGFE
+ttyname SIGFE
+_ttyname = ttyname SIGFE
+ttyslot NOSIGFE
+twalk NOSIGFE
+tzset SIGFE
+_tzset = tzset SIGFE
+ualarm SIGFE
+_ualarm = ualarm SIGFE
+umask NOSIGFE
+_umask = umask NOSIGFE
+umount SIGFE
+_umount = umount SIGFE
+uname SIGFE
+_uname = uname SIGFE
+ungetc SIGFE
+_ungetc = ungetc SIGFE
+unlink SIGFE
+_unlink = unlink SIGFE
+unlockpt NOSIGFE
+unsetenv NOSIGFE
+_unsetenv = unsetenv NOSIGFE
+usleep SIGFE
+_usleep = usleep SIGFE
+utime SIGFE
+_utime = utime SIGFE
+utimes SIGFE
+_utimes = utimes SIGFE
+utmpname SIGFE
+_utmpname = utmpname SIGFE
+valloc SIGFE
+vasprintf SIGFE
+_vasprintf = vasprintf SIGFE
+verr SIGFE
+verrx SIGFE
+vwarn SIGFE
+vwarnx SIGFE
+vfiprintf SIGFE
+_vfiprintf = vfiprintf SIGFE
+vfork SIGFE
+_vfork = vfork SIGFE
+vfprintf SIGFE
+_vfprintf = vfprintf SIGFE
+vfscanf SIGFE
+_vfscanf = vfscanf SIGFE
+vhangup SIGFE
+_vhangup = vhangup SIGFE
+vprintf SIGFE
+_vprintf = vprintf SIGFE
+vscanf SIGFE
+_vscanf = vscanf SIGFE
+vsnprintf SIGFE
+_vsnprintf = vsnprintf SIGFE
+vsprintf SIGFE
+_vsprintf = vsprintf SIGFE
+vsscanf SIGFE
+_vsscanf = vsscanf SIGFE
+wait SIGFE
+_wait = wait SIGFE
+wait3 SIGFE
+wait4 SIGFE
+waitpid SIGFE
+_waitpid = waitpid SIGFE
+warn SIGFE
+warnx SIGFE
+wcrtomb NOSIGFE
+wcscat NOSIGFE
+wcschr NOSIGFE
+wcscmp NOSIGFE
+_wcscmp = wcscmp NOSIGFE
+wcscoll NOSIGFE
+wcscpy NOSIGFE
+wcscspn NOSIGFE
+wcslcat NOSIGFE
+wcslcpy NOSIGFE
+wcslen NOSIGFE
+_wcslen = wcslen NOSIGFE
+wcsncat NOSIGFE
+wcsncmp NOSIGFE
+wcsncpy NOSIGFE
+wcspbrk NOSIGFE
+wcsrchr NOSIGFE
+wcsrtombs NOSIGFE
+wcsspn NOSIGFE
+wcsstr NOSIGFE
+wcstombs NOSIGFE
+_wcstombs = wcstombs NOSIGFE
+wcswidth NOSIGFE
+wctob NOSIGFE
+wctomb NOSIGFE
+_wctomb = wctomb NOSIGFE
+wctrans NOSIGFE
+wctype NOSIGFE
+wcwidth NOSIGFE
+wmemchr NOSIGFE
+wmemcmp NOSIGFE
+wmemcpy NOSIGFE
+wmemmove NOSIGFE
+wmemset NOSIGFE
+wprintf SIGFE
+_wprintf = wprintf SIGFE
+write SIGFE
+_write = write SIGFE
+writev SIGFE
+_writev = writev SIGFE
+y0 NOSIGFE
+y0f NOSIGFE
+y1 NOSIGFE
+y1f NOSIGFE
+yn NOSIGFE
+ynf NOSIGFE
index 2418e8b..1ca549e 100644 (file)
@@ -42,15 +42,11 @@ details. */
 HANDLE NO_COPY hMainProc = (HANDLE) -1;
 HANDLE NO_COPY hMainThread;
 
-sigthread NO_COPY mainthread;          // ID of the main thread
-
 per_thread_waitq NO_COPY waitq_storage;
 per_thread_vfork NO_COPY vfork_storage;
-per_thread_signal_dispatch NO_COPY signal_dispatch_storage;
 
 per_thread NO_COPY *threadstuff[] = {&waitq_storage,
                                     &vfork_storage,
-                                    &signal_dispatch_storage,
                                     NULL};
 
 bool display_title;
@@ -72,7 +68,6 @@ ResourceLocks _reslock NO_COPY;
 MTinterface _mtinterf;
 
 bool NO_COPY _cygwin_testing;
-unsigned NO_COPY _cygwin_testing_magic;
 
 char NO_COPY almost_null[1];
 
@@ -526,15 +521,10 @@ int _declspec(dllexport) __argc;
 char _declspec(dllexport) **__argv;
 vfork_save NO_COPY *main_vfork = NULL;
 
-void
-sigthread::init (const char *s)
-{
-  InitializeCriticalSection (&lock);
-  id = GetCurrentThreadId ();
-}
-
 extern "C" void __sinit (_reent *);
 
+_threadinfo NO_COPY *_main_tls;
+
 /* Take over from libc's crt0.o and start the application. Note the
    various special cases when Cygwin DLL is being runtime loaded (as
    opposed to being link-time loaded by Cygwin apps) from a non
@@ -542,6 +532,9 @@ extern "C" void __sinit (_reent *);
 static void
 dll_crt0_1 ()
 {
+  __uint64_t padding[CYGTLS_PADSIZE];
+  _main_tls = _my_tls.init (padding);
+
   /* According to onno@stack.urc.tue.nl, the exception handler record must
      be on the stack.  */
   /* FIXME: Verify forked children get their exception handler set up ok. */
@@ -568,9 +561,6 @@ dll_crt0_1 ()
   user_data->resourcelocks->Init ();
   user_data->threadinterface->Init ();
 
-  mainthread.init ("mainthread"); // For use in determining if signals
-                                 //  should be blocked.
-
   winpids::init ();
 
   int envc = 0;
@@ -632,7 +622,7 @@ dll_crt0_1 ()
   ProtectHandle (hMainThread);
   cygthread::init ();
 
-  /* Initialize pthread mainthread when not forked and it is save to call new,
+  /* Initialize pthread mainthread when not forked and it is safe to call new,
      otherwise it is reinitalized in fixup_after_fork */
   if (!user_data->forkee)
     {
@@ -804,9 +794,9 @@ break_here ()
 void
 initial_env ()
 {
-  DWORD len;
   char buf[CYG_MAX_PATH + 1];
 #ifdef DEBUGGING
+  DWORD len;
   if (GetEnvironmentVariable ("CYGWIN_SLEEP", buf, sizeof (buf) - 1))
     {
       DWORD ms = atoi (buf);
@@ -836,14 +826,7 @@ initial_env ()
 #endif
 
   if (GetEnvironmentVariable ("CYGWIN_TESTING", buf, sizeof (buf) - 1))
-    {
-      _cygwin_testing = 1;
-      if ((len = GetModuleFileName (cygwin_hmodule, buf, CYG_MAX_PATH))
-         && len > sizeof ("new-cygwin1.dll")
-         && strcasematch (buf + len - sizeof ("new-cygwin1.dll"),
-                          "\\new-cygwin1.dll"))
-       _cygwin_testing_magic = 0x10;
-    }
+    _cygwin_testing = 1;
 }
 
 /* Wrap the real one, otherwise gdb gets confused about
index 09a74e9..91f13d1 100644 (file)
@@ -17,14 +17,6 @@ details. */
 })
 #endif
 
-extern "C" {
-DWORD __stdcall WFSO (HANDLE, DWORD) __attribute__ ((regparm(2)));
-DWORD __stdcall WFMO (DWORD, CONST HANDLE *, BOOL, DWORD) __attribute__ ((regparm(3)));
-}
-
-#define WaitForSingleObject WFSO
-#define WaitForMultipleObjects WFMO
-
 #if !defined(_DEBUG_H_)
 #define _DEBUG_H_
 
index 73b3089..e2819c1 100644 (file)
@@ -34,8 +34,20 @@ const device dev_piper_storage =
 const device dev_pipew_storage =
   {"", FH_PIPEW, ""};
 
+const device dev_tcp_storage =
+  {"", FH_TCP, ""};
+
+const device dev_udp_storage =
+  {"", FH_UDP, ""};
+
+const device dev_stream_storage =
+  {"", FH_STREAM, ""};
+
+const device dev_dgram_storage =
+  {"", FH_DGRAM, ""};
+
 const device dev_bad_storage =
-  {":bad:", FH_BAD, ""};
+  {"", FH_BAD, ""};
 
 static const device dev_storage[] =
 {
@@ -78,12 +90,6 @@ static const device dev_storage[] =
   {"/dev/fd14", FHDEV(DEV_FLOPPY_MAJOR, 14), "\\Device\\Floppy14"},
   {"/dev/fd15", FHDEV(DEV_FLOPPY_MAJOR, 15), "\\Device\\Floppy15"},
   {"/dev/fifo", FH_FIFO, "\\dev\\fifo"},
-  {"/dev/inet/dgram", FH_DGRAM, ""},
-  {"/dev/inet/icmp", FH_ICMP, ""},
-  {"/dev/inet/stream", FH_STREAM, ""},
-  {"/dev/inet/tcp", FH_TCP, ""},
-  {"/dev/inet/udp", FH_UDP, ""},
-  {"/dev/inet/unix", FH_UNIX, ""},
   {"/dev/kmem", FH_KMEM, "\\dev\\mem"},
   {"/dev/mem", FH_MEM, "\\dev\\mem"},
   {"/dev/nst0", FHDEV(DEV_TAPE_MAJOR, 128), "\\Device\\Tape0"},
@@ -883,15 +889,9 @@ static const device dev_storage[] =
 };
 
 const device *console_dev = dev_storage + 20;
-const device *dgram_dev = dev_storage + 39;
-const device *icmp_dev = dev_storage + 40;
-const device *stream_dev = dev_storage + 41;
-const device *tcp_dev = dev_storage + 42;
-const device *ttym_dev = dev_storage + 837;
-const device *ttys_dev = dev_storage + 757;
-const device *udp_dev = dev_storage + 43;
-const device *unix_dev = dev_storage + 44;
-const device *urandom_dev = dev_storage + 838;
+const device *ttym_dev = dev_storage + 831;
+const device *ttys_dev = dev_storage + 751;
+const device *urandom_dev = dev_storage + 832;
 
 
 static KR_device_t KR_find_keyword (const char *KR_keyword, int KR_length)
@@ -906,7 +906,7 @@ static KR_device_t KR_find_keyword (const char *KR_keyword, int KR_length)
           if (strncmp (KR_keyword, "/dev/sdz", 8) == 0)
             {
 {
-return dev_storage + 221;
+return dev_storage + 215;
 
 }
             }
@@ -924,7 +924,7 @@ return      NULL;
               if (strncmp (KR_keyword, "/dev/tty", 8) == 0)
                 {
 {
-return dev_storage + 756;
+return dev_storage + 750;
 
 }
                 }
@@ -939,7 +939,7 @@ return      NULL;
               if (strncmp (KR_keyword, "/dev/sdy", 8) == 0)
                 {
 {
-return dev_storage + 220;
+return dev_storage + 214;
 
 }
                 }
@@ -960,7 +960,7 @@ return      NULL;
           if (strncmp (KR_keyword, "/dev/sdx", 8) == 0)
             {
 {
-return dev_storage + 219;
+return dev_storage + 213;
 
 }
             }
@@ -975,7 +975,7 @@ return      NULL;
           if (strncmp (KR_keyword, "/dev/sdw", 8) == 0)
             {
 {
-return dev_storage + 218;
+return dev_storage + 212;
 
 }
             }
@@ -990,7 +990,7 @@ return      NULL;
           if (strncmp (KR_keyword, "/dev/sdv", 8) == 0)
             {
 {
-return dev_storage + 217;
+return dev_storage + 211;
 
 }
             }
@@ -1005,7 +1005,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdu", 8) == 0)
             {
 {
-return dev_storage + 216;
+return dev_storage + 210;
 
 }
             }
@@ -1020,7 +1020,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdt", 8) == 0)
             {
 {
-return dev_storage + 215;
+return dev_storage + 209;
 
 }
             }
@@ -1035,7 +1035,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sds", 8) == 0)
             {
 {
-return dev_storage + 214;
+return dev_storage + 208;
 
 }
             }
@@ -1050,7 +1050,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdr", 8) == 0)
             {
 {
-return dev_storage + 213;
+return dev_storage + 207;
 
 }
             }
@@ -1065,7 +1065,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdq", 8) == 0)
             {
 {
-return dev_storage + 212;
+return dev_storage + 206;
 
 }
             }
@@ -1083,7 +1083,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp", 8) == 0)
                 {
 {
-return dev_storage + 211;
+return dev_storage + 205;
 
 }
                 }
@@ -1119,7 +1119,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdo", 8) == 0)
             {
 {
-return dev_storage + 210;
+return dev_storage + 204;
 
 }
             }
@@ -1134,7 +1134,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdn", 8) == 0)
             {
 {
-return dev_storage + 209;
+return dev_storage + 203;
 
 }
             }
@@ -1152,7 +1152,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdm", 8) == 0)
                 {
 {
-return dev_storage + 208;
+return dev_storage + 202;
 
 }
                 }
@@ -1167,7 +1167,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/mem", 8) == 0)
                 {
 {
-return dev_storage + 46;
+return dev_storage + 40;
 
 }
                 }
@@ -1188,7 +1188,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdl", 8) == 0)
             {
 {
-return dev_storage + 207;
+return dev_storage + 201;
 
 }
             }
@@ -1203,7 +1203,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdk", 8) == 0)
             {
 {
-return dev_storage + 206;
+return dev_storage + 200;
 
 }
             }
@@ -1218,7 +1218,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdj", 8) == 0)
             {
 {
-return dev_storage + 205;
+return dev_storage + 199;
 
 }
             }
@@ -1233,7 +1233,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdi", 8) == 0)
             {
 {
-return dev_storage + 204;
+return dev_storage + 198;
 
 }
             }
@@ -1248,7 +1248,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdh", 8) == 0)
             {
 {
-return dev_storage + 203;
+return dev_storage + 197;
 
 }
             }
@@ -1263,7 +1263,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdg", 8) == 0)
             {
 {
-return dev_storage + 202;
+return dev_storage + 196;
 
 }
             }
@@ -1278,7 +1278,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdf", 8) == 0)
             {
 {
-return dev_storage + 201;
+return dev_storage + 195;
 
 }
             }
@@ -1293,7 +1293,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sde", 8) == 0)
             {
 {
-return dev_storage + 200;
+return dev_storage + 194;
 
 }
             }
@@ -1308,7 +1308,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdd", 8) == 0)
             {
 {
-return dev_storage + 199;
+return dev_storage + 193;
 
 }
             }
@@ -1323,7 +1323,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdc", 8) == 0)
             {
 {
-return dev_storage + 198;
+return dev_storage + 192;
 
 }
             }
@@ -1338,7 +1338,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sdb", 8) == 0)
             {
 {
-return dev_storage + 197;
+return dev_storage + 191;
 
 }
             }
@@ -1353,7 +1353,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/sda", 8) == 0)
             {
 {
-return dev_storage + 196;
+return dev_storage + 190;
 
 }
             }
@@ -1371,7 +1371,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st9", 8) == 0)
                 {
 {
-return dev_storage + 637;
+return dev_storage + 631;
 
 }
                 }
@@ -1386,7 +1386,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr9", 8) == 0)
                 {
 {
-return dev_storage + 621;
+return dev_storage + 615;
 
 }
                 }
@@ -1425,7 +1425,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st8", 8) == 0)
                 {
 {
-return dev_storage + 636;
+return dev_storage + 630;
 
 }
                 }
@@ -1440,7 +1440,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr8", 8) == 0)
                 {
 {
-return dev_storage + 620;
+return dev_storage + 614;
 
 }
                 }
@@ -1479,7 +1479,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st7", 8) == 0)
                 {
 {
-return dev_storage + 635;
+return dev_storage + 629;
 
 }
                 }
@@ -1494,7 +1494,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr7", 8) == 0)
                 {
 {
-return dev_storage + 619;
+return dev_storage + 613;
 
 }
                 }
@@ -1533,7 +1533,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st6", 8) == 0)
                 {
 {
-return dev_storage + 634;
+return dev_storage + 628;
 
 }
                 }
@@ -1548,7 +1548,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr6", 8) == 0)
                 {
 {
-return dev_storage + 618;
+return dev_storage + 612;
 
 }
                 }
@@ -1587,7 +1587,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st5", 8) == 0)
                 {
 {
-return dev_storage + 633;
+return dev_storage + 627;
 
 }
                 }
@@ -1602,7 +1602,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr5", 8) == 0)
                 {
 {
-return dev_storage + 617;
+return dev_storage + 611;
 
 }
                 }
@@ -1641,7 +1641,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st4", 8) == 0)
                 {
 {
-return dev_storage + 632;
+return dev_storage + 626;
 
 }
                 }
@@ -1656,7 +1656,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr4", 8) == 0)
                 {
 {
-return dev_storage + 616;
+return dev_storage + 610;
 
 }
                 }
@@ -1695,7 +1695,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st3", 8) == 0)
                 {
 {
-return dev_storage + 631;
+return dev_storage + 625;
 
 }
                 }
@@ -1710,7 +1710,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr3", 8) == 0)
                 {
 {
-return dev_storage + 615;
+return dev_storage + 609;
 
 }
                 }
@@ -1749,7 +1749,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st2", 8) == 0)
                 {
 {
-return dev_storage + 630;
+return dev_storage + 624;
 
 }
                 }
@@ -1764,7 +1764,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr2", 8) == 0)
                 {
 {
-return dev_storage + 614;
+return dev_storage + 608;
 
 }
                 }
@@ -1803,7 +1803,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st1", 8) == 0)
                 {
 {
-return dev_storage + 629;
+return dev_storage + 623;
 
 }
                 }
@@ -1818,7 +1818,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr1", 8) == 0)
                 {
 {
-return dev_storage + 613;
+return dev_storage + 607;
 
 }
                 }
@@ -1857,7 +1857,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st0", 8) == 0)
                 {
 {
-return dev_storage + 628;
+return dev_storage + 622;
 
 }
                 }
@@ -1872,7 +1872,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sr0", 8) == 0)
                 {
 {
-return dev_storage + 612;
+return dev_storage + 606;
 
 }
                 }
@@ -1917,7 +1917,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/ptmx", 9) == 0)
             {
 {
-return dev_storage + 178;
+return dev_storage + 172;
 
 }
             }
@@ -1932,7 +1932,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/port", 9) == 0)
             {
 {
-return dev_storage + 177;
+return dev_storage + 171;
 
 }
             }
@@ -1950,7 +1950,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/zero", 9) == 0)
                 {
 {
-return dev_storage + 840;
+return dev_storage + 834;
 
 }
                 }
@@ -1989,7 +1989,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/ttym", 9) == 0)
                 {
 {
-return dev_storage + 837;
+return dev_storage + 831;
 
 }
                 }
@@ -2004,7 +2004,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/kmem", 9) == 0)
                 {
 {
-return dev_storage + 45;
+return dev_storage + 39;
 
 }
                 }
@@ -2025,7 +2025,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/null", 9) == 0)
             {
 {
-return dev_storage + 175;
+return dev_storage + 169;
 
 }
             }
@@ -2040,7 +2040,7 @@ return    NULL;
           if (strncmp (KR_keyword, "/dev/pipe", 9) == 0)
             {
 {
-return dev_storage + 176;
+return dev_storage + 170;
 
 }
             }
@@ -2058,7 +2058,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz9", 9) == 0)
                 {
 {
-return dev_storage + 605;
+return dev_storage + 599;
 
 }
                 }
@@ -2076,7 +2076,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty9", 9) == 0)
                     {
 {
-return dev_storage + 766;
+return dev_storage + 760;
 
 }
                     }
@@ -2091,7 +2091,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy9", 9) == 0)
                     {
 {
-return dev_storage + 590;
+return dev_storage + 584;
 
 }
                     }
@@ -2112,7 +2112,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx9", 9) == 0)
                 {
 {
-return dev_storage + 575;
+return dev_storage + 569;
 
 }
                 }
@@ -2127,7 +2127,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw9", 9) == 0)
                 {
 {
-return dev_storage + 560;
+return dev_storage + 554;
 
 }
                 }
@@ -2142,7 +2142,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv9", 9) == 0)
                 {
 {
-return dev_storage + 545;
+return dev_storage + 539;
 
 }
                 }
@@ -2157,7 +2157,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu9", 9) == 0)
                 {
 {
-return dev_storage + 530;
+return dev_storage + 524;
 
 }
                 }
@@ -2175,7 +2175,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt9", 9) == 0)
                     {
 {
-return dev_storage + 515;
+return dev_storage + 509;
 
 }
                     }
@@ -2190,7 +2190,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst9", 9) == 0)
                     {
 {
-return dev_storage + 56;
+return dev_storage + 50;
 
 }
                     }
@@ -2211,7 +2211,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds9", 9) == 0)
                 {
 {
-return dev_storage + 500;
+return dev_storage + 494;
 
 }
                 }
@@ -2226,7 +2226,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr9", 9) == 0)
                 {
 {
-return dev_storage + 485;
+return dev_storage + 479;
 
 }
                 }
@@ -2241,7 +2241,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq9", 9) == 0)
                 {
 {
-return dev_storage + 470;
+return dev_storage + 464;
 
 }
                 }
@@ -2256,7 +2256,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp9", 9) == 0)
                 {
 {
-return dev_storage + 455;
+return dev_storage + 449;
 
 }
                 }
@@ -2271,7 +2271,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo9", 9) == 0)
                 {
 {
-return dev_storage + 440;
+return dev_storage + 434;
 
 }
                 }
@@ -2286,7 +2286,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn9", 9) == 0)
                 {
 {
-return dev_storage + 425;
+return dev_storage + 419;
 
 }
                 }
@@ -2304,7 +2304,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm9", 9) == 0)
                     {
 {
-return dev_storage + 410;
+return dev_storage + 404;
 
 }
                     }
@@ -2340,7 +2340,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl9", 9) == 0)
                 {
 {
-return dev_storage + 395;
+return dev_storage + 389;
 
 }
                 }
@@ -2355,7 +2355,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk9", 9) == 0)
                 {
 {
-return dev_storage + 380;
+return dev_storage + 374;
 
 }
                 }
@@ -2370,7 +2370,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj9", 9) == 0)
                 {
 {
-return dev_storage + 365;
+return dev_storage + 359;
 
 }
                 }
@@ -2385,7 +2385,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi9", 9) == 0)
                 {
 {
-return dev_storage + 350;
+return dev_storage + 344;
 
 }
                 }
@@ -2400,7 +2400,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh9", 9) == 0)
                 {
 {
-return dev_storage + 335;
+return dev_storage + 329;
 
 }
                 }
@@ -2415,7 +2415,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg9", 9) == 0)
                 {
 {
-return dev_storage + 320;
+return dev_storage + 314;
 
 }
                 }
@@ -2430,7 +2430,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf9", 9) == 0)
                 {
 {
-return dev_storage + 305;
+return dev_storage + 299;
 
 }
                 }
@@ -2445,7 +2445,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde9", 9) == 0)
                 {
 {
-return dev_storage + 290;
+return dev_storage + 284;
 
 }
                 }
@@ -2463,7 +2463,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd9", 9) == 0)
                     {
 {
-return dev_storage + 275;
+return dev_storage + 269;
 
 }
                     }
@@ -2478,7 +2478,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd9", 9) == 0)
                     {
 {
-return dev_storage + 189;
+return dev_storage + 183;
 
 }
                     }
@@ -2499,7 +2499,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc9", 9) == 0)
                 {
 {
-return dev_storage + 260;
+return dev_storage + 254;
 
 }
                 }
@@ -2514,7 +2514,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb9", 9) == 0)
                 {
 {
-return dev_storage + 245;
+return dev_storage + 239;
 
 }
                 }
@@ -2529,7 +2529,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda9", 9) == 0)
                 {
 {
-return dev_storage + 230;
+return dev_storage + 224;
 
 }
                 }
@@ -2544,7 +2544,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st99", 9) == 0)
                 {
 {
-return dev_storage + 727;
+return dev_storage + 721;
 
 }
                 }
@@ -2559,7 +2559,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st89", 9) == 0)
                 {
 {
-return dev_storage + 717;
+return dev_storage + 711;
 
 }
                 }
@@ -2574,7 +2574,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st79", 9) == 0)
                 {
 {
-return dev_storage + 707;
+return dev_storage + 701;
 
 }
                 }
@@ -2589,7 +2589,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st69", 9) == 0)
                 {
 {
-return dev_storage + 697;
+return dev_storage + 691;
 
 }
                 }
@@ -2604,7 +2604,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st59", 9) == 0)
                 {
 {
-return dev_storage + 687;
+return dev_storage + 681;
 
 }
                 }
@@ -2619,7 +2619,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st49", 9) == 0)
                 {
 {
-return dev_storage + 677;
+return dev_storage + 671;
 
 }
                 }
@@ -2634,7 +2634,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st39", 9) == 0)
                 {
 {
-return dev_storage + 667;
+return dev_storage + 661;
 
 }
                 }
@@ -2649,7 +2649,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st29", 9) == 0)
                 {
 {
-return dev_storage + 657;
+return dev_storage + 651;
 
 }
                 }
@@ -2664,7 +2664,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st19", 9) == 0)
                 {
 {
-return dev_storage + 647;
+return dev_storage + 641;
 
 }
                 }
@@ -2688,7 +2688,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz8", 9) == 0)
                 {
 {
-return dev_storage + 604;
+return dev_storage + 598;
 
 }
                 }
@@ -2706,7 +2706,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty8", 9) == 0)
                     {
 {
-return dev_storage + 765;
+return dev_storage + 759;
 
 }
                     }
@@ -2721,7 +2721,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy8", 9) == 0)
                     {
 {
-return dev_storage + 589;
+return dev_storage + 583;
 
 }
                     }
@@ -2742,7 +2742,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx8", 9) == 0)
                 {
 {
-return dev_storage + 574;
+return dev_storage + 568;
 
 }
                 }
@@ -2757,7 +2757,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw8", 9) == 0)
                 {
 {
-return dev_storage + 559;
+return dev_storage + 553;
 
 }
                 }
@@ -2772,7 +2772,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv8", 9) == 0)
                 {
 {
-return dev_storage + 544;
+return dev_storage + 538;
 
 }
                 }
@@ -2787,7 +2787,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu8", 9) == 0)
                 {
 {
-return dev_storage + 529;
+return dev_storage + 523;
 
 }
                 }
@@ -2805,7 +2805,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt8", 9) == 0)
                     {
 {
-return dev_storage + 514;
+return dev_storage + 508;
 
 }
                     }
@@ -2820,7 +2820,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst8", 9) == 0)
                     {
 {
-return dev_storage + 55;
+return dev_storage + 49;
 
 }
                     }
@@ -2841,7 +2841,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds8", 9) == 0)
                 {
 {
-return dev_storage + 499;
+return dev_storage + 493;
 
 }
                 }
@@ -2856,7 +2856,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr8", 9) == 0)
                 {
 {
-return dev_storage + 484;
+return dev_storage + 478;
 
 }
                 }
@@ -2871,7 +2871,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq8", 9) == 0)
                 {
 {
-return dev_storage + 469;
+return dev_storage + 463;
 
 }
                 }
@@ -2886,7 +2886,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp8", 9) == 0)
                 {
 {
-return dev_storage + 454;
+return dev_storage + 448;
 
 }
                 }
@@ -2901,7 +2901,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo8", 9) == 0)
                 {
 {
-return dev_storage + 439;
+return dev_storage + 433;
 
 }
                 }
@@ -2916,7 +2916,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn8", 9) == 0)
                 {
 {
-return dev_storage + 424;
+return dev_storage + 418;
 
 }
                 }
@@ -2934,7 +2934,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm8", 9) == 0)
                     {
 {
-return dev_storage + 409;
+return dev_storage + 403;
 
 }
                     }
@@ -2970,7 +2970,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl8", 9) == 0)
                 {
 {
-return dev_storage + 394;
+return dev_storage + 388;
 
 }
                 }
@@ -2985,7 +2985,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk8", 9) == 0)
                 {
 {
-return dev_storage + 379;
+return dev_storage + 373;
 
 }
                 }
@@ -3000,7 +3000,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj8", 9) == 0)
                 {
 {
-return dev_storage + 364;
+return dev_storage + 358;
 
 }
                 }
@@ -3015,7 +3015,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi8", 9) == 0)
                 {
 {
-return dev_storage + 349;
+return dev_storage + 343;
 
 }
                 }
@@ -3030,7 +3030,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh8", 9) == 0)
                 {
 {
-return dev_storage + 334;
+return dev_storage + 328;
 
 }
                 }
@@ -3045,7 +3045,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg8", 9) == 0)
                 {
 {
-return dev_storage + 319;
+return dev_storage + 313;
 
 }
                 }
@@ -3060,7 +3060,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf8", 9) == 0)
                 {
 {
-return dev_storage + 304;
+return dev_storage + 298;
 
 }
                 }
@@ -3075,7 +3075,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde8", 9) == 0)
                 {
 {
-return dev_storage + 289;
+return dev_storage + 283;
 
 }
                 }
@@ -3093,7 +3093,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd8", 9) == 0)
                     {
 {
-return dev_storage + 274;
+return dev_storage + 268;
 
 }
                     }
@@ -3108,7 +3108,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd8", 9) == 0)
                     {
 {
-return dev_storage + 188;
+return dev_storage + 182;
 
 }
                     }
@@ -3129,7 +3129,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc8", 9) == 0)
                 {
 {
-return dev_storage + 259;
+return dev_storage + 253;
 
 }
                 }
@@ -3144,7 +3144,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb8", 9) == 0)
                 {
 {
-return dev_storage + 244;
+return dev_storage + 238;
 
 }
                 }
@@ -3159,7 +3159,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda8", 9) == 0)
                 {
 {
-return dev_storage + 229;
+return dev_storage + 223;
 
 }
                 }
@@ -3174,7 +3174,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st98", 9) == 0)
                 {
 {
-return dev_storage + 726;
+return dev_storage + 720;
 
 }
                 }
@@ -3189,7 +3189,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st88", 9) == 0)
                 {
 {
-return dev_storage + 716;
+return dev_storage + 710;
 
 }
                 }
@@ -3204,7 +3204,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st78", 9) == 0)
                 {
 {
-return dev_storage + 706;
+return dev_storage + 700;
 
 }
                 }
@@ -3219,7 +3219,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st68", 9) == 0)
                 {
 {
-return dev_storage + 696;
+return dev_storage + 690;
 
 }
                 }
@@ -3234,7 +3234,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st58", 9) == 0)
                 {
 {
-return dev_storage + 686;
+return dev_storage + 680;
 
 }
                 }
@@ -3249,7 +3249,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st48", 9) == 0)
                 {
 {
-return dev_storage + 676;
+return dev_storage + 670;
 
 }
                 }
@@ -3264,7 +3264,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st38", 9) == 0)
                 {
 {
-return dev_storage + 666;
+return dev_storage + 660;
 
 }
                 }
@@ -3279,7 +3279,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st28", 9) == 0)
                 {
 {
-return dev_storage + 656;
+return dev_storage + 650;
 
 }
                 }
@@ -3294,7 +3294,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st18", 9) == 0)
                 {
 {
-return dev_storage + 646;
+return dev_storage + 640;
 
 }
                 }
@@ -3318,7 +3318,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz7", 9) == 0)
                 {
 {
-return dev_storage + 603;
+return dev_storage + 597;
 
 }
                 }
@@ -3336,7 +3336,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty7", 9) == 0)
                     {
 {
-return dev_storage + 764;
+return dev_storage + 758;
 
 }
                     }
@@ -3351,7 +3351,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy7", 9) == 0)
                     {
 {
-return dev_storage + 588;
+return dev_storage + 582;
 
 }
                     }
@@ -3372,7 +3372,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx7", 9) == 0)
                 {
 {
-return dev_storage + 573;
+return dev_storage + 567;
 
 }
                 }
@@ -3387,7 +3387,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw7", 9) == 0)
                 {
 {
-return dev_storage + 558;
+return dev_storage + 552;
 
 }
                 }
@@ -3402,7 +3402,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv7", 9) == 0)
                 {
 {
-return dev_storage + 543;
+return dev_storage + 537;
 
 }
                 }
@@ -3417,7 +3417,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu7", 9) == 0)
                 {
 {
-return dev_storage + 528;
+return dev_storage + 522;
 
 }
                 }
@@ -3435,7 +3435,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt7", 9) == 0)
                     {
 {
-return dev_storage + 513;
+return dev_storage + 507;
 
 }
                     }
@@ -3450,7 +3450,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst7", 9) == 0)
                     {
 {
-return dev_storage + 54;
+return dev_storage + 48;
 
 }
                     }
@@ -3471,7 +3471,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds7", 9) == 0)
                 {
 {
-return dev_storage + 498;
+return dev_storage + 492;
 
 }
                 }
@@ -3486,7 +3486,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr7", 9) == 0)
                 {
 {
-return dev_storage + 483;
+return dev_storage + 477;
 
 }
                 }
@@ -3501,7 +3501,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq7", 9) == 0)
                 {
 {
-return dev_storage + 468;
+return dev_storage + 462;
 
 }
                 }
@@ -3516,7 +3516,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp7", 9) == 0)
                 {
 {
-return dev_storage + 453;
+return dev_storage + 447;
 
 }
                 }
@@ -3531,7 +3531,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo7", 9) == 0)
                 {
 {
-return dev_storage + 438;
+return dev_storage + 432;
 
 }
                 }
@@ -3546,7 +3546,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn7", 9) == 0)
                 {
 {
-return dev_storage + 423;
+return dev_storage + 417;
 
 }
                 }
@@ -3564,7 +3564,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm7", 9) == 0)
                     {
 {
-return dev_storage + 408;
+return dev_storage + 402;
 
 }
                     }
@@ -3600,7 +3600,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl7", 9) == 0)
                 {
 {
-return dev_storage + 393;
+return dev_storage + 387;
 
 }
                 }
@@ -3615,7 +3615,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk7", 9) == 0)
                 {
 {
-return dev_storage + 378;
+return dev_storage + 372;
 
 }
                 }
@@ -3630,7 +3630,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj7", 9) == 0)
                 {
 {
-return dev_storage + 363;
+return dev_storage + 357;
 
 }
                 }
@@ -3645,7 +3645,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi7", 9) == 0)
                 {
 {
-return dev_storage + 348;
+return dev_storage + 342;
 
 }
                 }
@@ -3660,7 +3660,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh7", 9) == 0)
                 {
 {
-return dev_storage + 333;
+return dev_storage + 327;
 
 }
                 }
@@ -3675,7 +3675,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg7", 9) == 0)
                 {
 {
-return dev_storage + 318;
+return dev_storage + 312;
 
 }
                 }
@@ -3690,7 +3690,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf7", 9) == 0)
                 {
 {
-return dev_storage + 303;
+return dev_storage + 297;
 
 }
                 }
@@ -3705,7 +3705,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde7", 9) == 0)
                 {
 {
-return dev_storage + 288;
+return dev_storage + 282;
 
 }
                 }
@@ -3723,7 +3723,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd7", 9) == 0)
                     {
 {
-return dev_storage + 273;
+return dev_storage + 267;
 
 }
                     }
@@ -3738,7 +3738,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd7", 9) == 0)
                     {
 {
-return dev_storage + 187;
+return dev_storage + 181;
 
 }
                     }
@@ -3759,7 +3759,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc7", 9) == 0)
                 {
 {
-return dev_storage + 258;
+return dev_storage + 252;
 
 }
                 }
@@ -3774,7 +3774,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb7", 9) == 0)
                 {
 {
-return dev_storage + 243;
+return dev_storage + 237;
 
 }
                 }
@@ -3789,7 +3789,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda7", 9) == 0)
                 {
 {
-return dev_storage + 228;
+return dev_storage + 222;
 
 }
                 }
@@ -3804,7 +3804,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st97", 9) == 0)
                 {
 {
-return dev_storage + 725;
+return dev_storage + 719;
 
 }
                 }
@@ -3819,7 +3819,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st87", 9) == 0)
                 {
 {
-return dev_storage + 715;
+return dev_storage + 709;
 
 }
                 }
@@ -3834,7 +3834,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st77", 9) == 0)
                 {
 {
-return dev_storage + 705;
+return dev_storage + 699;
 
 }
                 }
@@ -3849,7 +3849,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st67", 9) == 0)
                 {
 {
-return dev_storage + 695;
+return dev_storage + 689;
 
 }
                 }
@@ -3864,7 +3864,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st57", 9) == 0)
                 {
 {
-return dev_storage + 685;
+return dev_storage + 679;
 
 }
                 }
@@ -3879,7 +3879,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st47", 9) == 0)
                 {
 {
-return dev_storage + 675;
+return dev_storage + 669;
 
 }
                 }
@@ -3894,7 +3894,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st37", 9) == 0)
                 {
 {
-return dev_storage + 665;
+return dev_storage + 659;
 
 }
                 }
@@ -3909,7 +3909,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st27", 9) == 0)
                 {
 {
-return dev_storage + 655;
+return dev_storage + 649;
 
 }
                 }
@@ -3924,7 +3924,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st17", 9) == 0)
                 {
 {
-return dev_storage + 645;
+return dev_storage + 639;
 
 }
                 }
@@ -3948,7 +3948,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz6", 9) == 0)
                 {
 {
-return dev_storage + 602;
+return dev_storage + 596;
 
 }
                 }
@@ -3966,7 +3966,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty6", 9) == 0)
                     {
 {
-return dev_storage + 763;
+return dev_storage + 757;
 
 }
                     }
@@ -3981,7 +3981,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy6", 9) == 0)
                     {
 {
-return dev_storage + 587;
+return dev_storage + 581;
 
 }
                     }
@@ -4002,7 +4002,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx6", 9) == 0)
                 {
 {
-return dev_storage + 572;
+return dev_storage + 566;
 
 }
                 }
@@ -4017,7 +4017,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw6", 9) == 0)
                 {
 {
-return dev_storage + 557;
+return dev_storage + 551;
 
 }
                 }
@@ -4032,7 +4032,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv6", 9) == 0)
                 {
 {
-return dev_storage + 542;
+return dev_storage + 536;
 
 }
                 }
@@ -4047,7 +4047,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu6", 9) == 0)
                 {
 {
-return dev_storage + 527;
+return dev_storage + 521;
 
 }
                 }
@@ -4065,7 +4065,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt6", 9) == 0)
                     {
 {
-return dev_storage + 512;
+return dev_storage + 506;
 
 }
                     }
@@ -4080,7 +4080,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst6", 9) == 0)
                     {
 {
-return dev_storage + 53;
+return dev_storage + 47;
 
 }
                     }
@@ -4101,7 +4101,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds6", 9) == 0)
                 {
 {
-return dev_storage + 497;
+return dev_storage + 491;
 
 }
                 }
@@ -4116,7 +4116,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr6", 9) == 0)
                 {
 {
-return dev_storage + 482;
+return dev_storage + 476;
 
 }
                 }
@@ -4131,7 +4131,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq6", 9) == 0)
                 {
 {
-return dev_storage + 467;
+return dev_storage + 461;
 
 }
                 }
@@ -4146,7 +4146,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp6", 9) == 0)
                 {
 {
-return dev_storage + 452;
+return dev_storage + 446;
 
 }
                 }
@@ -4161,7 +4161,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo6", 9) == 0)
                 {
 {
-return dev_storage + 437;
+return dev_storage + 431;
 
 }
                 }
@@ -4176,7 +4176,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn6", 9) == 0)
                 {
 {
-return dev_storage + 422;
+return dev_storage + 416;
 
 }
                 }
@@ -4194,7 +4194,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm6", 9) == 0)
                     {
 {
-return dev_storage + 407;
+return dev_storage + 401;
 
 }
                     }
@@ -4230,7 +4230,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl6", 9) == 0)
                 {
 {
-return dev_storage + 392;
+return dev_storage + 386;
 
 }
                 }
@@ -4245,7 +4245,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk6", 9) == 0)
                 {
 {
-return dev_storage + 377;
+return dev_storage + 371;
 
 }
                 }
@@ -4260,7 +4260,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj6", 9) == 0)
                 {
 {
-return dev_storage + 362;
+return dev_storage + 356;
 
 }
                 }
@@ -4275,7 +4275,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi6", 9) == 0)
                 {
 {
-return dev_storage + 347;
+return dev_storage + 341;
 
 }
                 }
@@ -4290,7 +4290,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh6", 9) == 0)
                 {
 {
-return dev_storage + 332;
+return dev_storage + 326;
 
 }
                 }
@@ -4305,7 +4305,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg6", 9) == 0)
                 {
 {
-return dev_storage + 317;
+return dev_storage + 311;
 
 }
                 }
@@ -4320,7 +4320,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf6", 9) == 0)
                 {
 {
-return dev_storage + 302;
+return dev_storage + 296;
 
 }
                 }
@@ -4335,7 +4335,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde6", 9) == 0)
                 {
 {
-return dev_storage + 287;
+return dev_storage + 281;
 
 }
                 }
@@ -4353,7 +4353,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd6", 9) == 0)
                     {
 {
-return dev_storage + 272;
+return dev_storage + 266;
 
 }
                     }
@@ -4368,7 +4368,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd6", 9) == 0)
                     {
 {
-return dev_storage + 186;
+return dev_storage + 180;
 
 }
                     }
@@ -4389,7 +4389,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc6", 9) == 0)
                 {
 {
-return dev_storage + 257;
+return dev_storage + 251;
 
 }
                 }
@@ -4404,7 +4404,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb6", 9) == 0)
                 {
 {
-return dev_storage + 242;
+return dev_storage + 236;
 
 }
                 }
@@ -4419,7 +4419,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda6", 9) == 0)
                 {
 {
-return dev_storage + 227;
+return dev_storage + 221;
 
 }
                 }
@@ -4434,7 +4434,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st96", 9) == 0)
                 {
 {
-return dev_storage + 724;
+return dev_storage + 718;
 
 }
                 }
@@ -4449,7 +4449,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st86", 9) == 0)
                 {
 {
-return dev_storage + 714;
+return dev_storage + 708;
 
 }
                 }
@@ -4464,7 +4464,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st76", 9) == 0)
                 {
 {
-return dev_storage + 704;
+return dev_storage + 698;
 
 }
                 }
@@ -4479,7 +4479,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st66", 9) == 0)
                 {
 {
-return dev_storage + 694;
+return dev_storage + 688;
 
 }
                 }
@@ -4494,7 +4494,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st56", 9) == 0)
                 {
 {
-return dev_storage + 684;
+return dev_storage + 678;
 
 }
                 }
@@ -4509,7 +4509,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st46", 9) == 0)
                 {
 {
-return dev_storage + 674;
+return dev_storage + 668;
 
 }
                 }
@@ -4524,7 +4524,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st36", 9) == 0)
                 {
 {
-return dev_storage + 664;
+return dev_storage + 658;
 
 }
                 }
@@ -4539,7 +4539,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st26", 9) == 0)
                 {
 {
-return dev_storage + 654;
+return dev_storage + 648;
 
 }
                 }
@@ -4554,7 +4554,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st16", 9) == 0)
                 {
 {
-return dev_storage + 644;
+return dev_storage + 638;
 
 }
                 }
@@ -4578,7 +4578,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz5", 9) == 0)
                 {
 {
-return dev_storage + 601;
+return dev_storage + 595;
 
 }
                 }
@@ -4596,7 +4596,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty5", 9) == 0)
                     {
 {
-return dev_storage + 762;
+return dev_storage + 756;
 
 }
                     }
@@ -4611,7 +4611,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy5", 9) == 0)
                     {
 {
-return dev_storage + 586;
+return dev_storage + 580;
 
 }
                     }
@@ -4632,7 +4632,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx5", 9) == 0)
                 {
 {
-return dev_storage + 571;
+return dev_storage + 565;
 
 }
                 }
@@ -4647,7 +4647,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw5", 9) == 0)
                 {
 {
-return dev_storage + 556;
+return dev_storage + 550;
 
 }
                 }
@@ -4662,7 +4662,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv5", 9) == 0)
                 {
 {
-return dev_storage + 541;
+return dev_storage + 535;
 
 }
                 }
@@ -4677,7 +4677,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu5", 9) == 0)
                 {
 {
-return dev_storage + 526;
+return dev_storage + 520;
 
 }
                 }
@@ -4695,7 +4695,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt5", 9) == 0)
                     {
 {
-return dev_storage + 511;
+return dev_storage + 505;
 
 }
                     }
@@ -4710,7 +4710,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst5", 9) == 0)
                     {
 {
-return dev_storage + 52;
+return dev_storage + 46;
 
 }
                     }
@@ -4731,7 +4731,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds5", 9) == 0)
                 {
 {
-return dev_storage + 496;
+return dev_storage + 490;
 
 }
                 }
@@ -4746,7 +4746,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr5", 9) == 0)
                 {
 {
-return dev_storage + 481;
+return dev_storage + 475;
 
 }
                 }
@@ -4761,7 +4761,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq5", 9) == 0)
                 {
 {
-return dev_storage + 466;
+return dev_storage + 460;
 
 }
                 }
@@ -4776,7 +4776,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp5", 9) == 0)
                 {
 {
-return dev_storage + 451;
+return dev_storage + 445;
 
 }
                 }
@@ -4791,7 +4791,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo5", 9) == 0)
                 {
 {
-return dev_storage + 436;
+return dev_storage + 430;
 
 }
                 }
@@ -4806,7 +4806,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn5", 9) == 0)
                 {
 {
-return dev_storage + 421;
+return dev_storage + 415;
 
 }
                 }
@@ -4824,7 +4824,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm5", 9) == 0)
                     {
 {
-return dev_storage + 406;
+return dev_storage + 400;
 
 }
                     }
@@ -4860,7 +4860,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl5", 9) == 0)
                 {
 {
-return dev_storage + 391;
+return dev_storage + 385;
 
 }
                 }
@@ -4875,7 +4875,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk5", 9) == 0)
                 {
 {
-return dev_storage + 376;
+return dev_storage + 370;
 
 }
                 }
@@ -4890,7 +4890,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj5", 9) == 0)
                 {
 {
-return dev_storage + 361;
+return dev_storage + 355;
 
 }
                 }
@@ -4905,7 +4905,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi5", 9) == 0)
                 {
 {
-return dev_storage + 346;
+return dev_storage + 340;
 
 }
                 }
@@ -4920,7 +4920,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh5", 9) == 0)
                 {
 {
-return dev_storage + 331;
+return dev_storage + 325;
 
 }
                 }
@@ -4935,7 +4935,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg5", 9) == 0)
                 {
 {
-return dev_storage + 316;
+return dev_storage + 310;
 
 }
                 }
@@ -4950,7 +4950,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf5", 9) == 0)
                 {
 {
-return dev_storage + 301;
+return dev_storage + 295;
 
 }
                 }
@@ -4965,7 +4965,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde5", 9) == 0)
                 {
 {
-return dev_storage + 286;
+return dev_storage + 280;
 
 }
                 }
@@ -4983,7 +4983,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd5", 9) == 0)
                     {
 {
-return dev_storage + 271;
+return dev_storage + 265;
 
 }
                     }
@@ -4998,7 +4998,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd5", 9) == 0)
                     {
 {
-return dev_storage + 185;
+return dev_storage + 179;
 
 }
                     }
@@ -5019,7 +5019,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc5", 9) == 0)
                 {
 {
-return dev_storage + 256;
+return dev_storage + 250;
 
 }
                 }
@@ -5034,7 +5034,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb5", 9) == 0)
                 {
 {
-return dev_storage + 241;
+return dev_storage + 235;
 
 }
                 }
@@ -5049,7 +5049,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda5", 9) == 0)
                 {
 {
-return dev_storage + 226;
+return dev_storage + 220;
 
 }
                 }
@@ -5064,7 +5064,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st95", 9) == 0)
                 {
 {
-return dev_storage + 723;
+return dev_storage + 717;
 
 }
                 }
@@ -5079,7 +5079,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st85", 9) == 0)
                 {
 {
-return dev_storage + 713;
+return dev_storage + 707;
 
 }
                 }
@@ -5094,7 +5094,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st75", 9) == 0)
                 {
 {
-return dev_storage + 703;
+return dev_storage + 697;
 
 }
                 }
@@ -5109,7 +5109,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st65", 9) == 0)
                 {
 {
-return dev_storage + 693;
+return dev_storage + 687;
 
 }
                 }
@@ -5124,7 +5124,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st55", 9) == 0)
                 {
 {
-return dev_storage + 683;
+return dev_storage + 677;
 
 }
                 }
@@ -5139,7 +5139,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st45", 9) == 0)
                 {
 {
-return dev_storage + 673;
+return dev_storage + 667;
 
 }
                 }
@@ -5154,7 +5154,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st35", 9) == 0)
                 {
 {
-return dev_storage + 663;
+return dev_storage + 657;
 
 }
                 }
@@ -5169,7 +5169,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st25", 9) == 0)
                 {
 {
-return dev_storage + 653;
+return dev_storage + 647;
 
 }
                 }
@@ -5187,7 +5187,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st15", 9) == 0)
                     {
 {
-return dev_storage + 643;
+return dev_storage + 637;
 
 }
                     }
@@ -5202,7 +5202,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sr15", 9) == 0)
                     {
 {
-return dev_storage + 627;
+return dev_storage + 621;
 
 }
                     }
@@ -5247,7 +5247,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz4", 9) == 0)
                 {
 {
-return dev_storage + 600;
+return dev_storage + 594;
 
 }
                 }
@@ -5265,7 +5265,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty4", 9) == 0)
                     {
 {
-return dev_storage + 761;
+return dev_storage + 755;
 
 }
                     }
@@ -5280,7 +5280,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy4", 9) == 0)
                     {
 {
-return dev_storage + 585;
+return dev_storage + 579;
 
 }
                     }
@@ -5301,7 +5301,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx4", 9) == 0)
                 {
 {
-return dev_storage + 570;
+return dev_storage + 564;
 
 }
                 }
@@ -5316,7 +5316,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw4", 9) == 0)
                 {
 {
-return dev_storage + 555;
+return dev_storage + 549;
 
 }
                 }
@@ -5331,7 +5331,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv4", 9) == 0)
                 {
 {
-return dev_storage + 540;
+return dev_storage + 534;
 
 }
                 }
@@ -5346,7 +5346,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu4", 9) == 0)
                 {
 {
-return dev_storage + 525;
+return dev_storage + 519;
 
 }
                 }
@@ -5364,7 +5364,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt4", 9) == 0)
                     {
 {
-return dev_storage + 510;
+return dev_storage + 504;
 
 }
                     }
@@ -5379,7 +5379,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst4", 9) == 0)
                     {
 {
-return dev_storage + 51;
+return dev_storage + 45;
 
 }
                     }
@@ -5400,7 +5400,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds4", 9) == 0)
                 {
 {
-return dev_storage + 495;
+return dev_storage + 489;
 
 }
                 }
@@ -5415,7 +5415,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr4", 9) == 0)
                 {
 {
-return dev_storage + 480;
+return dev_storage + 474;
 
 }
                 }
@@ -5430,7 +5430,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq4", 9) == 0)
                 {
 {
-return dev_storage + 465;
+return dev_storage + 459;
 
 }
                 }
@@ -5445,7 +5445,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp4", 9) == 0)
                 {
 {
-return dev_storage + 450;
+return dev_storage + 444;
 
 }
                 }
@@ -5460,7 +5460,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo4", 9) == 0)
                 {
 {
-return dev_storage + 435;
+return dev_storage + 429;
 
 }
                 }
@@ -5475,7 +5475,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn4", 9) == 0)
                 {
 {
-return dev_storage + 420;
+return dev_storage + 414;
 
 }
                 }
@@ -5493,7 +5493,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm4", 9) == 0)
                     {
 {
-return dev_storage + 405;
+return dev_storage + 399;
 
 }
                     }
@@ -5529,7 +5529,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl4", 9) == 0)
                 {
 {
-return dev_storage + 390;
+return dev_storage + 384;
 
 }
                 }
@@ -5544,7 +5544,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk4", 9) == 0)
                 {
 {
-return dev_storage + 375;
+return dev_storage + 369;
 
 }
                 }
@@ -5559,7 +5559,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj4", 9) == 0)
                 {
 {
-return dev_storage + 360;
+return dev_storage + 354;
 
 }
                 }
@@ -5574,7 +5574,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi4", 9) == 0)
                 {
 {
-return dev_storage + 345;
+return dev_storage + 339;
 
 }
                 }
@@ -5589,7 +5589,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh4", 9) == 0)
                 {
 {
-return dev_storage + 330;
+return dev_storage + 324;
 
 }
                 }
@@ -5604,7 +5604,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg4", 9) == 0)
                 {
 {
-return dev_storage + 315;
+return dev_storage + 309;
 
 }
                 }
@@ -5619,7 +5619,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf4", 9) == 0)
                 {
 {
-return dev_storage + 300;
+return dev_storage + 294;
 
 }
                 }
@@ -5634,7 +5634,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde4", 9) == 0)
                 {
 {
-return dev_storage + 285;
+return dev_storage + 279;
 
 }
                 }
@@ -5652,7 +5652,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd4", 9) == 0)
                     {
 {
-return dev_storage + 270;
+return dev_storage + 264;
 
 }
                     }
@@ -5667,7 +5667,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd4", 9) == 0)
                     {
 {
-return dev_storage + 184;
+return dev_storage + 178;
 
 }
                     }
@@ -5688,7 +5688,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc4", 9) == 0)
                 {
 {
-return dev_storage + 255;
+return dev_storage + 249;
 
 }
                 }
@@ -5703,7 +5703,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb4", 9) == 0)
                 {
 {
-return dev_storage + 240;
+return dev_storage + 234;
 
 }
                 }
@@ -5718,7 +5718,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda4", 9) == 0)
                 {
 {
-return dev_storage + 225;
+return dev_storage + 219;
 
 }
                 }
@@ -5733,7 +5733,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st94", 9) == 0)
                 {
 {
-return dev_storage + 722;
+return dev_storage + 716;
 
 }
                 }
@@ -5748,7 +5748,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st84", 9) == 0)
                 {
 {
-return dev_storage + 712;
+return dev_storage + 706;
 
 }
                 }
@@ -5763,7 +5763,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st74", 9) == 0)
                 {
 {
-return dev_storage + 702;
+return dev_storage + 696;
 
 }
                 }
@@ -5778,7 +5778,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st64", 9) == 0)
                 {
 {
-return dev_storage + 692;
+return dev_storage + 686;
 
 }
                 }
@@ -5793,7 +5793,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st54", 9) == 0)
                 {
 {
-return dev_storage + 682;
+return dev_storage + 676;
 
 }
                 }
@@ -5808,7 +5808,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st44", 9) == 0)
                 {
 {
-return dev_storage + 672;
+return dev_storage + 666;
 
 }
                 }
@@ -5823,7 +5823,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st34", 9) == 0)
                 {
 {
-return dev_storage + 662;
+return dev_storage + 656;
 
 }
                 }
@@ -5838,7 +5838,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st24", 9) == 0)
                 {
 {
-return dev_storage + 652;
+return dev_storage + 646;
 
 }
                 }
@@ -5856,7 +5856,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st14", 9) == 0)
                     {
 {
-return dev_storage + 642;
+return dev_storage + 636;
 
 }
                     }
@@ -5871,7 +5871,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sr14", 9) == 0)
                     {
 {
-return dev_storage + 626;
+return dev_storage + 620;
 
 }
                     }
@@ -5916,7 +5916,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz3", 9) == 0)
                 {
 {
-return dev_storage + 599;
+return dev_storage + 593;
 
 }
                 }
@@ -5934,7 +5934,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty3", 9) == 0)
                     {
 {
-return dev_storage + 760;
+return dev_storage + 754;
 
 }
                     }
@@ -5949,7 +5949,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy3", 9) == 0)
                     {
 {
-return dev_storage + 584;
+return dev_storage + 578;
 
 }
                     }
@@ -5970,7 +5970,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx3", 9) == 0)
                 {
 {
-return dev_storage + 569;
+return dev_storage + 563;
 
 }
                 }
@@ -5985,7 +5985,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw3", 9) == 0)
                 {
 {
-return dev_storage + 554;
+return dev_storage + 548;
 
 }
                 }
@@ -6000,7 +6000,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv3", 9) == 0)
                 {
 {
-return dev_storage + 539;
+return dev_storage + 533;
 
 }
                 }
@@ -6015,7 +6015,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu3", 9) == 0)
                 {
 {
-return dev_storage + 524;
+return dev_storage + 518;
 
 }
                 }
@@ -6033,7 +6033,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt3", 9) == 0)
                     {
 {
-return dev_storage + 509;
+return dev_storage + 503;
 
 }
                     }
@@ -6048,7 +6048,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst3", 9) == 0)
                     {
 {
-return dev_storage + 50;
+return dev_storage + 44;
 
 }
                     }
@@ -6069,7 +6069,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds3", 9) == 0)
                 {
 {
-return dev_storage + 494;
+return dev_storage + 488;
 
 }
                 }
@@ -6084,7 +6084,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr3", 9) == 0)
                 {
 {
-return dev_storage + 479;
+return dev_storage + 473;
 
 }
                 }
@@ -6099,7 +6099,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq3", 9) == 0)
                 {
 {
-return dev_storage + 464;
+return dev_storage + 458;
 
 }
                 }
@@ -6114,7 +6114,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp3", 9) == 0)
                 {
 {
-return dev_storage + 449;
+return dev_storage + 443;
 
 }
                 }
@@ -6129,7 +6129,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo3", 9) == 0)
                 {
 {
-return dev_storage + 434;
+return dev_storage + 428;
 
 }
                 }
@@ -6144,7 +6144,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn3", 9) == 0)
                 {
 {
-return dev_storage + 419;
+return dev_storage + 413;
 
 }
                 }
@@ -6162,7 +6162,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm3", 9) == 0)
                     {
 {
-return dev_storage + 404;
+return dev_storage + 398;
 
 }
                     }
@@ -6198,7 +6198,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl3", 9) == 0)
                 {
 {
-return dev_storage + 389;
+return dev_storage + 383;
 
 }
                 }
@@ -6213,7 +6213,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk3", 9) == 0)
                 {
 {
-return dev_storage + 374;
+return dev_storage + 368;
 
 }
                 }
@@ -6228,7 +6228,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj3", 9) == 0)
                 {
 {
-return dev_storage + 359;
+return dev_storage + 353;
 
 }
                 }
@@ -6243,7 +6243,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi3", 9) == 0)
                 {
 {
-return dev_storage + 344;
+return dev_storage + 338;
 
 }
                 }
@@ -6258,7 +6258,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh3", 9) == 0)
                 {
 {
-return dev_storage + 329;
+return dev_storage + 323;
 
 }
                 }
@@ -6273,7 +6273,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg3", 9) == 0)
                 {
 {
-return dev_storage + 314;
+return dev_storage + 308;
 
 }
                 }
@@ -6288,7 +6288,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf3", 9) == 0)
                 {
 {
-return dev_storage + 299;
+return dev_storage + 293;
 
 }
                 }
@@ -6303,7 +6303,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde3", 9) == 0)
                 {
 {
-return dev_storage + 284;
+return dev_storage + 278;
 
 }
                 }
@@ -6321,7 +6321,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd3", 9) == 0)
                     {
 {
-return dev_storage + 269;
+return dev_storage + 263;
 
 }
                     }
@@ -6336,7 +6336,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd3", 9) == 0)
                     {
 {
-return dev_storage + 183;
+return dev_storage + 177;
 
 }
                     }
@@ -6357,7 +6357,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc3", 9) == 0)
                 {
 {
-return dev_storage + 254;
+return dev_storage + 248;
 
 }
                 }
@@ -6372,7 +6372,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb3", 9) == 0)
                 {
 {
-return dev_storage + 239;
+return dev_storage + 233;
 
 }
                 }
@@ -6387,7 +6387,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda3", 9) == 0)
                 {
 {
-return dev_storage + 224;
+return dev_storage + 218;
 
 }
                 }
@@ -6402,7 +6402,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st93", 9) == 0)
                 {
 {
-return dev_storage + 721;
+return dev_storage + 715;
 
 }
                 }
@@ -6417,7 +6417,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st83", 9) == 0)
                 {
 {
-return dev_storage + 711;
+return dev_storage + 705;
 
 }
                 }
@@ -6432,7 +6432,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st73", 9) == 0)
                 {
 {
-return dev_storage + 701;
+return dev_storage + 695;
 
 }
                 }
@@ -6447,7 +6447,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st63", 9) == 0)
                 {
 {
-return dev_storage + 691;
+return dev_storage + 685;
 
 }
                 }
@@ -6462,7 +6462,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st53", 9) == 0)
                 {
 {
-return dev_storage + 681;
+return dev_storage + 675;
 
 }
                 }
@@ -6477,7 +6477,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st43", 9) == 0)
                 {
 {
-return dev_storage + 671;
+return dev_storage + 665;
 
 }
                 }
@@ -6492,7 +6492,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st33", 9) == 0)
                 {
 {
-return dev_storage + 661;
+return dev_storage + 655;
 
 }
                 }
@@ -6507,7 +6507,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st23", 9) == 0)
                 {
 {
-return dev_storage + 651;
+return dev_storage + 645;
 
 }
                 }
@@ -6525,7 +6525,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st13", 9) == 0)
                     {
 {
-return dev_storage + 641;
+return dev_storage + 635;
 
 }
                     }
@@ -6540,7 +6540,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sr13", 9) == 0)
                     {
 {
-return dev_storage + 625;
+return dev_storage + 619;
 
 }
                     }
@@ -6585,7 +6585,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz2", 9) == 0)
                 {
 {
-return dev_storage + 598;
+return dev_storage + 592;
 
 }
                 }
@@ -6603,7 +6603,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty2", 9) == 0)
                     {
 {
-return dev_storage + 759;
+return dev_storage + 753;
 
 }
                     }
@@ -6618,7 +6618,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy2", 9) == 0)
                     {
 {
-return dev_storage + 583;
+return dev_storage + 577;
 
 }
                     }
@@ -6639,7 +6639,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx2", 9) == 0)
                 {
 {
-return dev_storage + 568;
+return dev_storage + 562;
 
 }
                 }
@@ -6654,7 +6654,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw2", 9) == 0)
                 {
 {
-return dev_storage + 553;
+return dev_storage + 547;
 
 }
                 }
@@ -6669,7 +6669,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv2", 9) == 0)
                 {
 {
-return dev_storage + 538;
+return dev_storage + 532;
 
 }
                 }
@@ -6684,7 +6684,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu2", 9) == 0)
                 {
 {
-return dev_storage + 523;
+return dev_storage + 517;
 
 }
                 }
@@ -6702,7 +6702,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt2", 9) == 0)
                     {
 {
-return dev_storage + 508;
+return dev_storage + 502;
 
 }
                     }
@@ -6717,7 +6717,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst2", 9) == 0)
                     {
 {
-return dev_storage + 49;
+return dev_storage + 43;
 
 }
                     }
@@ -6738,7 +6738,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds2", 9) == 0)
                 {
 {
-return dev_storage + 493;
+return dev_storage + 487;
 
 }
                 }
@@ -6753,7 +6753,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr2", 9) == 0)
                 {
 {
-return dev_storage + 478;
+return dev_storage + 472;
 
 }
                 }
@@ -6768,7 +6768,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq2", 9) == 0)
                 {
 {
-return dev_storage + 463;
+return dev_storage + 457;
 
 }
                 }
@@ -6783,7 +6783,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp2", 9) == 0)
                 {
 {
-return dev_storage + 448;
+return dev_storage + 442;
 
 }
                 }
@@ -6798,7 +6798,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo2", 9) == 0)
                 {
 {
-return dev_storage + 433;
+return dev_storage + 427;
 
 }
                 }
@@ -6813,7 +6813,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn2", 9) == 0)
                 {
 {
-return dev_storage + 418;
+return dev_storage + 412;
 
 }
                 }
@@ -6831,7 +6831,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm2", 9) == 0)
                     {
 {
-return dev_storage + 403;
+return dev_storage + 397;
 
 }
                     }
@@ -6867,7 +6867,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl2", 9) == 0)
                 {
 {
-return dev_storage + 388;
+return dev_storage + 382;
 
 }
                 }
@@ -6882,7 +6882,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk2", 9) == 0)
                 {
 {
-return dev_storage + 373;
+return dev_storage + 367;
 
 }
                 }
@@ -6897,7 +6897,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj2", 9) == 0)
                 {
 {
-return dev_storage + 358;
+return dev_storage + 352;
 
 }
                 }
@@ -6912,7 +6912,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi2", 9) == 0)
                 {
 {
-return dev_storage + 343;
+return dev_storage + 337;
 
 }
                 }
@@ -6927,7 +6927,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh2", 9) == 0)
                 {
 {
-return dev_storage + 328;
+return dev_storage + 322;
 
 }
                 }
@@ -6942,7 +6942,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg2", 9) == 0)
                 {
 {
-return dev_storage + 313;
+return dev_storage + 307;
 
 }
                 }
@@ -6957,7 +6957,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf2", 9) == 0)
                 {
 {
-return dev_storage + 298;
+return dev_storage + 292;
 
 }
                 }
@@ -6972,7 +6972,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde2", 9) == 0)
                 {
 {
-return dev_storage + 283;
+return dev_storage + 277;
 
 }
                 }
@@ -6990,7 +6990,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd2", 9) == 0)
                     {
 {
-return dev_storage + 268;
+return dev_storage + 262;
 
 }
                     }
@@ -7005,7 +7005,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd2", 9) == 0)
                     {
 {
-return dev_storage + 182;
+return dev_storage + 176;
 
 }
                     }
@@ -7026,7 +7026,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc2", 9) == 0)
                 {
 {
-return dev_storage + 253;
+return dev_storage + 247;
 
 }
                 }
@@ -7041,7 +7041,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb2", 9) == 0)
                 {
 {
-return dev_storage + 238;
+return dev_storage + 232;
 
 }
                 }
@@ -7056,7 +7056,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda2", 9) == 0)
                 {
 {
-return dev_storage + 223;
+return dev_storage + 217;
 
 }
                 }
@@ -7071,7 +7071,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st92", 9) == 0)
                 {
 {
-return dev_storage + 720;
+return dev_storage + 714;
 
 }
                 }
@@ -7086,7 +7086,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st82", 9) == 0)
                 {
 {
-return dev_storage + 710;
+return dev_storage + 704;
 
 }
                 }
@@ -7101,7 +7101,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st72", 9) == 0)
                 {
 {
-return dev_storage + 700;
+return dev_storage + 694;
 
 }
                 }
@@ -7116,7 +7116,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st62", 9) == 0)
                 {
 {
-return dev_storage + 690;
+return dev_storage + 684;
 
 }
                 }
@@ -7131,7 +7131,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st52", 9) == 0)
                 {
 {
-return dev_storage + 680;
+return dev_storage + 674;
 
 }
                 }
@@ -7146,7 +7146,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st42", 9) == 0)
                 {
 {
-return dev_storage + 670;
+return dev_storage + 664;
 
 }
                 }
@@ -7161,7 +7161,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st32", 9) == 0)
                 {
 {
-return dev_storage + 660;
+return dev_storage + 654;
 
 }
                 }
@@ -7176,7 +7176,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st22", 9) == 0)
                 {
 {
-return dev_storage + 650;
+return dev_storage + 644;
 
 }
                 }
@@ -7194,7 +7194,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st12", 9) == 0)
                     {
 {
-return dev_storage + 640;
+return dev_storage + 634;
 
 }
                     }
@@ -7209,7 +7209,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sr12", 9) == 0)
                     {
 {
-return dev_storage + 624;
+return dev_storage + 618;
 
 }
                     }
@@ -7254,7 +7254,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz1", 9) == 0)
                 {
 {
-return dev_storage + 597;
+return dev_storage + 591;
 
 }
                 }
@@ -7272,7 +7272,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty1", 9) == 0)
                     {
 {
-return dev_storage + 758;
+return dev_storage + 752;
 
 }
                     }
@@ -7287,7 +7287,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdy1", 9) == 0)
                     {
 {
-return dev_storage + 582;
+return dev_storage + 576;
 
 }
                     }
@@ -7308,7 +7308,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx1", 9) == 0)
                 {
 {
-return dev_storage + 567;
+return dev_storage + 561;
 
 }
                 }
@@ -7323,7 +7323,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw1", 9) == 0)
                 {
 {
-return dev_storage + 552;
+return dev_storage + 546;
 
 }
                 }
@@ -7338,7 +7338,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv1", 9) == 0)
                 {
 {
-return dev_storage + 537;
+return dev_storage + 531;
 
 }
                 }
@@ -7353,7 +7353,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu1", 9) == 0)
                 {
 {
-return dev_storage + 522;
+return dev_storage + 516;
 
 }
                 }
@@ -7371,7 +7371,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdt1", 9) == 0)
                     {
 {
-return dev_storage + 507;
+return dev_storage + 501;
 
 }
                     }
@@ -7386,7 +7386,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst1", 9) == 0)
                     {
 {
-return dev_storage + 48;
+return dev_storage + 42;
 
 }
                     }
@@ -7407,7 +7407,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds1", 9) == 0)
                 {
 {
-return dev_storage + 492;
+return dev_storage + 486;
 
 }
                 }
@@ -7422,7 +7422,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr1", 9) == 0)
                 {
 {
-return dev_storage + 477;
+return dev_storage + 471;
 
 }
                 }
@@ -7437,7 +7437,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq1", 9) == 0)
                 {
 {
-return dev_storage + 462;
+return dev_storage + 456;
 
 }
                 }
@@ -7452,7 +7452,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp1", 9) == 0)
                 {
 {
-return dev_storage + 447;
+return dev_storage + 441;
 
 }
                 }
@@ -7467,7 +7467,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo1", 9) == 0)
                 {
 {
-return dev_storage + 432;
+return dev_storage + 426;
 
 }
                 }
@@ -7482,7 +7482,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn1", 9) == 0)
                 {
 {
-return dev_storage + 417;
+return dev_storage + 411;
 
 }
                 }
@@ -7500,7 +7500,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm1", 9) == 0)
                     {
 {
-return dev_storage + 402;
+return dev_storage + 396;
 
 }
                     }
@@ -7536,7 +7536,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl1", 9) == 0)
                 {
 {
-return dev_storage + 387;
+return dev_storage + 381;
 
 }
                 }
@@ -7551,7 +7551,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk1", 9) == 0)
                 {
 {
-return dev_storage + 372;
+return dev_storage + 366;
 
 }
                 }
@@ -7566,7 +7566,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj1", 9) == 0)
                 {
 {
-return dev_storage + 357;
+return dev_storage + 351;
 
 }
                 }
@@ -7581,7 +7581,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdi1", 9) == 0)
                 {
 {
-return dev_storage + 342;
+return dev_storage + 336;
 
 }
                 }
@@ -7596,7 +7596,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdh1", 9) == 0)
                 {
 {
-return dev_storage + 327;
+return dev_storage + 321;
 
 }
                 }
@@ -7611,7 +7611,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdg1", 9) == 0)
                 {
 {
-return dev_storage + 312;
+return dev_storage + 306;
 
 }
                 }
@@ -7626,7 +7626,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdf1", 9) == 0)
                 {
 {
-return dev_storage + 297;
+return dev_storage + 291;
 
 }
                 }
@@ -7641,7 +7641,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sde1", 9) == 0)
                 {
 {
-return dev_storage + 282;
+return dev_storage + 276;
 
 }
                 }
@@ -7659,7 +7659,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdd1", 9) == 0)
                     {
 {
-return dev_storage + 267;
+return dev_storage + 261;
 
 }
                     }
@@ -7674,7 +7674,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/scd1", 9) == 0)
                     {
 {
-return dev_storage + 181;
+return dev_storage + 175;
 
 }
                     }
@@ -7695,7 +7695,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdc1", 9) == 0)
                 {
 {
-return dev_storage + 252;
+return dev_storage + 246;
 
 }
                 }
@@ -7710,7 +7710,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdb1", 9) == 0)
                 {
 {
-return dev_storage + 237;
+return dev_storage + 231;
 
 }
                 }
@@ -7725,7 +7725,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sda1", 9) == 0)
                 {
 {
-return dev_storage + 222;
+return dev_storage + 216;
 
 }
                 }
@@ -7740,7 +7740,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st91", 9) == 0)
                 {
 {
-return dev_storage + 719;
+return dev_storage + 713;
 
 }
                 }
@@ -7755,7 +7755,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st81", 9) == 0)
                 {
 {
-return dev_storage + 709;
+return dev_storage + 703;
 
 }
                 }
@@ -7770,7 +7770,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st71", 9) == 0)
                 {
 {
-return dev_storage + 699;
+return dev_storage + 693;
 
 }
                 }
@@ -7785,7 +7785,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st61", 9) == 0)
                 {
 {
-return dev_storage + 689;
+return dev_storage + 683;
 
 }
                 }
@@ -7800,7 +7800,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st51", 9) == 0)
                 {
 {
-return dev_storage + 679;
+return dev_storage + 673;
 
 }
                 }
@@ -7815,7 +7815,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st41", 9) == 0)
                 {
 {
-return dev_storage + 669;
+return dev_storage + 663;
 
 }
                 }
@@ -7830,7 +7830,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st31", 9) == 0)
                 {
 {
-return dev_storage + 659;
+return dev_storage + 653;
 
 }
                 }
@@ -7845,7 +7845,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st21", 9) == 0)
                 {
 {
-return dev_storage + 649;
+return dev_storage + 643;
 
 }
                 }
@@ -7863,7 +7863,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st11", 9) == 0)
                     {
 {
-return dev_storage + 639;
+return dev_storage + 633;
 
 }
                     }
@@ -7878,7 +7878,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sr11", 9) == 0)
                     {
 {
-return dev_storage + 623;
+return dev_storage + 617;
 
 }
                     }
@@ -7923,7 +7923,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/tty0", 9) == 0)
                 {
 {
-return dev_storage + 757;
+return dev_storage + 751;
 
 }
                 }
@@ -7938,7 +7938,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst0", 9) == 0)
                 {
 {
-return dev_storage + 47;
+return dev_storage + 41;
 
 }
                 }
@@ -7968,7 +7968,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/scd0", 9) == 0)
                 {
 {
-return dev_storage + 180;
+return dev_storage + 174;
 
 }
                 }
@@ -7983,7 +7983,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st90", 9) == 0)
                 {
 {
-return dev_storage + 718;
+return dev_storage + 712;
 
 }
                 }
@@ -7998,7 +7998,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st80", 9) == 0)
                 {
 {
-return dev_storage + 708;
+return dev_storage + 702;
 
 }
                 }
@@ -8013,7 +8013,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st70", 9) == 0)
                 {
 {
-return dev_storage + 698;
+return dev_storage + 692;
 
 }
                 }
@@ -8028,7 +8028,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st60", 9) == 0)
                 {
 {
-return dev_storage + 688;
+return dev_storage + 682;
 
 }
                 }
@@ -8043,7 +8043,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st50", 9) == 0)
                 {
 {
-return dev_storage + 678;
+return dev_storage + 672;
 
 }
                 }
@@ -8058,7 +8058,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st40", 9) == 0)
                 {
 {
-return dev_storage + 668;
+return dev_storage + 662;
 
 }
                 }
@@ -8073,7 +8073,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st30", 9) == 0)
                 {
 {
-return dev_storage + 658;
+return dev_storage + 652;
 
 }
                 }
@@ -8088,7 +8088,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st20", 9) == 0)
                 {
 {
-return dev_storage + 648;
+return dev_storage + 642;
 
 }
                 }
@@ -8106,7 +8106,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st10", 9) == 0)
                     {
 {
-return dev_storage + 638;
+return dev_storage + 632;
 
 }
                     }
@@ -8121,7 +8121,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sr10", 9) == 0)
                     {
 {
-return dev_storage + 622;
+return dev_storage + 616;
 
 }
                     }
@@ -8190,7 +8190,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/ttyS9", 10) == 0)
                 {
 {
-return dev_storage + 830;
+return dev_storage + 824;
 
 }
                 }
@@ -8205,7 +8205,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst99", 10) == 0)
                 {
 {
-return dev_storage + 146;
+return dev_storage + 140;
 
 }
                 }
@@ -8220,7 +8220,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst89", 10) == 0)
                 {
 {
-return dev_storage + 136;
+return dev_storage + 130;
 
 }
                 }
@@ -8235,7 +8235,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst79", 10) == 0)
                 {
 {
-return dev_storage + 126;
+return dev_storage + 120;
 
 }
                 }
@@ -8250,7 +8250,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst69", 10) == 0)
                 {
 {
-return dev_storage + 116;
+return dev_storage + 110;
 
 }
                 }
@@ -8268,7 +8268,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty59", 10) == 0)
                     {
 {
-return dev_storage + 816;
+return dev_storage + 810;
 
 }
                     }
@@ -8283,7 +8283,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst59", 10) == 0)
                     {
 {
-return dev_storage + 106;
+return dev_storage + 100;
 
 }
                     }
@@ -8307,7 +8307,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty49", 10) == 0)
                     {
 {
-return dev_storage + 806;
+return dev_storage + 800;
 
 }
                     }
@@ -8322,7 +8322,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst49", 10) == 0)
                     {
 {
-return dev_storage + 96;
+return dev_storage + 90;
 
 }
                     }
@@ -8346,7 +8346,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty39", 10) == 0)
                     {
 {
-return dev_storage + 796;
+return dev_storage + 790;
 
 }
                     }
@@ -8361,7 +8361,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst39", 10) == 0)
                     {
 {
-return dev_storage + 86;
+return dev_storage + 80;
 
 }
                     }
@@ -8385,7 +8385,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty29", 10) == 0)
                     {
 {
-return dev_storage + 786;
+return dev_storage + 780;
 
 }
                     }
@@ -8400,7 +8400,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst29", 10) == 0)
                     {
 {
-return dev_storage + 76;
+return dev_storage + 70;
 
 }
                     }
@@ -8424,7 +8424,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty19", 10) == 0)
                     {
 {
-return dev_storage + 776;
+return dev_storage + 770;
 
 }
                     }
@@ -8439,7 +8439,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st119", 10) == 0)
                     {
 {
-return dev_storage + 747;
+return dev_storage + 741;
 
 }
                     }
@@ -8454,7 +8454,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst19", 10) == 0)
                     {
 {
-return dev_storage + 66;
+return dev_storage + 60;
 
 }
                     }
@@ -8475,7 +8475,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st109", 10) == 0)
                 {
 {
-return dev_storage + 737;
+return dev_storage + 731;
 
 }
                 }
@@ -8499,7 +8499,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/ttyS8", 10) == 0)
                 {
 {
-return dev_storage + 829;
+return dev_storage + 823;
 
 }
                 }
@@ -8514,7 +8514,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst98", 10) == 0)
                 {
 {
-return dev_storage + 145;
+return dev_storage + 139;
 
 }
                 }
@@ -8529,7 +8529,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst88", 10) == 0)
                 {
 {
-return dev_storage + 135;
+return dev_storage + 129;
 
 }
                 }
@@ -8544,7 +8544,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst78", 10) == 0)
                 {
 {
-return dev_storage + 125;
+return dev_storage + 119;
 
 }
                 }
@@ -8559,7 +8559,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst68", 10) == 0)
                 {
 {
-return dev_storage + 115;
+return dev_storage + 109;
 
 }
                 }
@@ -8577,7 +8577,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty58", 10) == 0)
                     {
 {
-return dev_storage + 815;
+return dev_storage + 809;
 
 }
                     }
@@ -8592,7 +8592,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst58", 10) == 0)
                     {
 {
-return dev_storage + 105;
+return dev_storage + 99;
 
 }
                     }
@@ -8616,7 +8616,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty48", 10) == 0)
                     {
 {
-return dev_storage + 805;
+return dev_storage + 799;
 
 }
                     }
@@ -8631,7 +8631,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst48", 10) == 0)
                     {
 {
-return dev_storage + 95;
+return dev_storage + 89;
 
 }
                     }
@@ -8655,7 +8655,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty38", 10) == 0)
                     {
 {
-return dev_storage + 795;
+return dev_storage + 789;
 
 }
                     }
@@ -8670,7 +8670,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst38", 10) == 0)
                     {
 {
-return dev_storage + 85;
+return dev_storage + 79;
 
 }
                     }
@@ -8694,7 +8694,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty28", 10) == 0)
                     {
 {
-return dev_storage + 785;
+return dev_storage + 779;
 
 }
                     }
@@ -8709,7 +8709,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst28", 10) == 0)
                     {
 {
-return dev_storage + 75;
+return dev_storage + 69;
 
 }
                     }
@@ -8733,7 +8733,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty18", 10) == 0)
                     {
 {
-return dev_storage + 775;
+return dev_storage + 769;
 
 }
                     }
@@ -8748,7 +8748,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st118", 10) == 0)
                     {
 {
-return dev_storage + 746;
+return dev_storage + 740;
 
 }
                     }
@@ -8763,7 +8763,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst18", 10) == 0)
                     {
 {
-return dev_storage + 65;
+return dev_storage + 59;
 
 }
                     }
@@ -8784,7 +8784,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st108", 10) == 0)
                 {
 {
-return dev_storage + 736;
+return dev_storage + 730;
 
 }
                 }
@@ -8808,7 +8808,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/ttyS7", 10) == 0)
                 {
 {
-return dev_storage + 828;
+return dev_storage + 822;
 
 }
                 }
@@ -8823,7 +8823,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst97", 10) == 0)
                 {
 {
-return dev_storage + 144;
+return dev_storage + 138;
 
 }
                 }
@@ -8838,7 +8838,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst87", 10) == 0)
                 {
 {
-return dev_storage + 134;
+return dev_storage + 128;
 
 }
                 }
@@ -8853,7 +8853,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst77", 10) == 0)
                 {
 {
-return dev_storage + 124;
+return dev_storage + 118;
 
 }
                 }
@@ -8868,7 +8868,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst67", 10) == 0)
                 {
 {
-return dev_storage + 114;
+return dev_storage + 108;
 
 }
                 }
@@ -8886,7 +8886,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty57", 10) == 0)
                     {
 {
-return dev_storage + 814;
+return dev_storage + 808;
 
 }
                     }
@@ -8901,7 +8901,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst57", 10) == 0)
                     {
 {
-return dev_storage + 104;
+return dev_storage + 98;
 
 }
                     }
@@ -8925,7 +8925,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty47", 10) == 0)
                     {
 {
-return dev_storage + 804;
+return dev_storage + 798;
 
 }
                     }
@@ -8940,7 +8940,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst47", 10) == 0)
                     {
 {
-return dev_storage + 94;
+return dev_storage + 88;
 
 }
                     }
@@ -8964,7 +8964,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty37", 10) == 0)
                     {
 {
-return dev_storage + 794;
+return dev_storage + 788;
 
 }
                     }
@@ -8979,7 +8979,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst37", 10) == 0)
                     {
 {
-return dev_storage + 84;
+return dev_storage + 78;
 
 }
                     }
@@ -9003,7 +9003,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty27", 10) == 0)
                     {
 {
-return dev_storage + 784;
+return dev_storage + 778;
 
 }
                     }
@@ -9018,7 +9018,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st127", 10) == 0)
                     {
 {
-return dev_storage + 755;
+return dev_storage + 749;
 
 }
                     }
@@ -9033,7 +9033,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst27", 10) == 0)
                     {
 {
-return dev_storage + 74;
+return dev_storage + 68;
 
 }
                     }
@@ -9057,7 +9057,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty17", 10) == 0)
                     {
 {
-return dev_storage + 774;
+return dev_storage + 768;
 
 }
                     }
@@ -9072,7 +9072,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st117", 10) == 0)
                     {
 {
-return dev_storage + 745;
+return dev_storage + 739;
 
 }
                     }
@@ -9087,7 +9087,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst17", 10) == 0)
                     {
 {
-return dev_storage + 64;
+return dev_storage + 58;
 
 }
                     }
@@ -9108,7 +9108,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st107", 10) == 0)
                 {
 {
-return dev_storage + 735;
+return dev_storage + 729;
 
 }
                 }
@@ -9132,7 +9132,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/ttyS6", 10) == 0)
                 {
 {
-return dev_storage + 827;
+return dev_storage + 821;
 
 }
                 }
@@ -9147,7 +9147,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst96", 10) == 0)
                 {
 {
-return dev_storage + 143;
+return dev_storage + 137;
 
 }
                 }
@@ -9162,7 +9162,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst86", 10) == 0)
                 {
 {
-return dev_storage + 133;
+return dev_storage + 127;
 
 }
                 }
@@ -9177,7 +9177,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst76", 10) == 0)
                 {
 {
-return dev_storage + 123;
+return dev_storage + 117;
 
 }
                 }
@@ -9192,7 +9192,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/nst66", 10) == 0)
                 {
 {
-return dev_storage + 113;
+return dev_storage + 107;
 
 }
                 }
@@ -9210,7 +9210,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty56", 10) == 0)
                     {
 {
-return dev_storage + 813;
+return dev_storage + 807;
 
 }
                     }
@@ -9225,7 +9225,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst56", 10) == 0)
                     {
 {
-return dev_storage + 103;
+return dev_storage + 97;
 
 }
                     }
@@ -9249,7 +9249,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty46", 10) == 0)
                     {
 {
-return dev_storage + 803;
+return dev_storage + 797;
 
 }
                     }
@@ -9264,7 +9264,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst46", 10) == 0)
                     {
 {
-return dev_storage + 93;
+return dev_storage + 87;
 
 }
                     }
@@ -9288,7 +9288,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty36", 10) == 0)
                     {
 {
-return dev_storage + 793;
+return dev_storage + 787;
 
 }
                     }
@@ -9303,7 +9303,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst36", 10) == 0)
                     {
 {
-return dev_storage + 83;
+return dev_storage + 77;
 
 }
                     }
@@ -9327,7 +9327,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty26", 10) == 0)
                     {
 {
-return dev_storage + 783;
+return dev_storage + 777;
 
 }
                     }
@@ -9342,7 +9342,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st126", 10) == 0)
                     {
 {
-return dev_storage + 754;
+return dev_storage + 748;
 
 }
                     }
@@ -9357,7 +9357,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst26", 10) == 0)
                     {
 {
-return dev_storage + 73;
+return dev_storage + 67;
 
 }
                     }
@@ -9381,7 +9381,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty16", 10) == 0)
                     {
 {
-return dev_storage + 773;
+return dev_storage + 767;
 
 }
                     }
@@ -9396,7 +9396,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/st116", 10) == 0)
                     {
 {
-return dev_storage + 744;
+return dev_storage + 738;
 
 }
                     }
@@ -9411,7 +9411,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst16", 10) == 0)
                     {
 {
-return dev_storage + 63;
+return dev_storage + 57;
 
 }
                     }
@@ -9447,7 +9447,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/st106", 10) == 0)
                 {
 {
-return dev_storage + 734;
+return dev_storage + 728;
 
 }
                 }
@@ -9471,7 +9471,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdz15", 10) == 0)
                 {
 {
-return dev_storage + 611;
+return dev_storage + 605;
 
 }
                 }
@@ -9489,7 +9489,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS5", 10) == 0)
                     {
 {
-return dev_storage + 826;
+return dev_storage + 820;
 
 }
                     }
@@ -9504,7 +9504,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty55", 10) == 0)
                     {
 {
-return dev_storage + 812;
+return dev_storage + 806;
 
 }
                     }
@@ -9519,7 +9519,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty45", 10) == 0)
                     {
 {
-return dev_storage + 802;
+return dev_storage + 796;
 
 }
                     }
@@ -9534,7 +9534,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty35", 10) == 0)
                     {
 {
-return dev_storage + 792;
+return dev_storage + 786;
 
 }
                     }
@@ -9549,7 +9549,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/tty25", 10) == 0)
                     {
 {
-return dev_storage + 782;
+return dev_storage + 776;
 
 }
                     }
@@ -9567,7 +9567,7 @@ return    NULL;
                       if (strncmp (KR_keyword, "/dev/tty15", 10) == 0)
                         {
 {
-return dev_storage + 772;
+return dev_storage + 766;
 
 }
                         }
@@ -9582,7 +9582,7 @@ return    NULL;
                       if (strncmp (KR_keyword, "/dev/sdy15", 10) == 0)
                         {
 {
-return dev_storage + 596;
+return dev_storage + 590;
 
 }
                         }
@@ -9609,7 +9609,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdx15", 10) == 0)
                 {
 {
-return dev_storage + 581;
+return dev_storage + 575;
 
 }
                 }
@@ -9624,7 +9624,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdw15", 10) == 0)
                 {
 {
-return dev_storage + 566;
+return dev_storage + 560;
 
 }
                 }
@@ -9639,7 +9639,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdv15", 10) == 0)
                 {
 {
-return dev_storage + 551;
+return dev_storage + 545;
 
 }
                 }
@@ -9654,7 +9654,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdu15", 10) == 0)
                 {
 {
-return dev_storage + 536;
+return dev_storage + 530;
 
 }
                 }
@@ -9672,7 +9672,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst95", 10) == 0)
                     {
 {
-return dev_storage + 142;
+return dev_storage + 136;
 
 }
                     }
@@ -9687,7 +9687,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst85", 10) == 0)
                     {
 {
-return dev_storage + 132;
+return dev_storage + 126;
 
 }
                     }
@@ -9702,7 +9702,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst75", 10) == 0)
                     {
 {
-return dev_storage + 122;
+return dev_storage + 116;
 
 }
                     }
@@ -9717,7 +9717,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst65", 10) == 0)
                     {
 {
-return dev_storage + 112;
+return dev_storage + 106;
 
 }
                     }
@@ -9732,7 +9732,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst55", 10) == 0)
                     {
 {
-return dev_storage + 102;
+return dev_storage + 96;
 
 }
                     }
@@ -9747,7 +9747,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst45", 10) == 0)
                     {
 {
-return dev_storage + 92;
+return dev_storage + 86;
 
 }
                     }
@@ -9762,7 +9762,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst35", 10) == 0)
                     {
 {
-return dev_storage + 82;
+return dev_storage + 76;
 
 }
                     }
@@ -9777,7 +9777,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/nst25", 10) == 0)
                     {
 {
-return dev_storage + 72;
+return dev_storage + 66;
 
 }
                     }
@@ -9795,7 +9795,7 @@ return    NULL;
                       if (strncmp (KR_keyword, "/dev/sdt15", 10) == 0)
                         {
 {
-return dev_storage + 521;
+return dev_storage + 515;
 
 }
                         }
@@ -9810,7 +9810,7 @@ return    NULL;
                       if (strncmp (KR_keyword, "/dev/nst15", 10) == 0)
                         {
 {
-return dev_storage + 62;
+return dev_storage + 56;
 
 }
                         }
@@ -9837,7 +9837,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sds15", 10) == 0)
                 {
 {
-return dev_storage + 506;
+return dev_storage + 500;
 
 }
                 }
@@ -9852,7 +9852,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdr15", 10) == 0)
                 {
 {
-return dev_storage + 491;
+return dev_storage + 485;
 
 }
                 }
@@ -9867,7 +9867,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdq15", 10) == 0)
                 {
 {
-return dev_storage + 476;
+return dev_storage + 470;
 
 }
                 }
@@ -9882,7 +9882,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdp15", 10) == 0)
                 {
 {
-return dev_storage + 461;
+return dev_storage + 455;
 
 }
                 }
@@ -9897,7 +9897,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdo15", 10) == 0)
                 {
 {
-return dev_storage + 446;
+return dev_storage + 440;
 
 }
                 }
@@ -9912,7 +9912,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdn15", 10) == 0)
                 {
 {
-return dev_storage + 431;
+return dev_storage + 425;
 
 }
                 }
@@ -9930,7 +9930,7 @@ return    NULL;
                   if (strncmp (KR_keyword, "/dev/sdm15", 10) == 0)
                     {
 {
-return dev_storage + 416;
+return dev_storage + 410;
 
 }
                     }
@@ -9966,7 +9966,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdl15", 10) == 0)
                 {
 {
-return dev_storage + 401;
+return dev_storage + 395;
 
 }
                 }
@@ -9981,7 +9981,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdk15", 10) == 0)
                 {
 {
-return dev_storage + 386;
+return dev_storage + 380;
 
 }
                 }
@@ -9996,7 +9996,7 @@ return    NULL;
               if (strncmp (KR_keyword, "/dev/sdj15", 10) == 0)
                 {
 {
-return dev_storage + 371;
+return dev_storage + 365;
 
 }
                 }
@@ -10011,7 +10011,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdi15", 10) == 0)
                 {
 {
-return dev_storage + 356;
+return dev_storage + 350;
 
 }
                 }
@@ -10026,7 +10026,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdh15", 10) == 0)
                 {
 {
-return dev_storage + 341;
+return dev_storage + 335;
 
 }
                 }
@@ -10041,7 +10041,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdg15", 10) == 0)
                 {
 {
-return dev_storage + 326;
+return dev_storage + 320;
 
 }
                 }
@@ -10056,7 +10056,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdf15", 10) == 0)
                 {
 {
-return dev_storage + 311;
+return dev_storage + 305;
 
 }
                 }
@@ -10071,7 +10071,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sde15", 10) == 0)
                 {
 {
-return dev_storage + 296;
+return dev_storage + 290;
 
 }
                 }
@@ -10089,7 +10089,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdd15", 10) == 0)
                     {
 {
-return dev_storage + 281;
+return dev_storage + 275;
 
 }
                     }
@@ -10104,7 +10104,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/scd15", 10) == 0)
                     {
 {
-return dev_storage + 195;
+return dev_storage + 189;
 
 }
                     }
@@ -10125,7 +10125,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdc15", 10) == 0)
                 {
 {
-return dev_storage + 266;
+return dev_storage + 260;
 
 }
                 }
@@ -10140,7 +10140,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdb15", 10) == 0)
                 {
 {
-return dev_storage + 251;
+return dev_storage + 245;
 
 }
                 }
@@ -10155,7 +10155,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sda15", 10) == 0)
                 {
 {
-return dev_storage + 236;
+return dev_storage + 230;
 
 }
                 }
@@ -10173,7 +10173,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st125", 10) == 0)
                     {
 {
-return dev_storage + 753;
+return dev_storage + 747;
 
 }
                     }
@@ -10188,7 +10188,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st115", 10) == 0)
                     {
 {
-return dev_storage + 743;
+return dev_storage + 737;
 
 }
                     }
@@ -10203,7 +10203,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st105", 10) == 0)
                     {
 {
-return dev_storage + 733;
+return dev_storage + 727;
 
 }
                     }
@@ -10233,7 +10233,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdz14", 10) == 0)
                 {
 {
-return dev_storage + 610;
+return dev_storage + 604;
 
 }
                 }
@@ -10251,7 +10251,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS4", 10) == 0)
                     {
 {
-return dev_storage + 825;
+return dev_storage + 819;
 
 }
                     }
@@ -10266,7 +10266,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty54", 10) == 0)
                     {
 {
-return dev_storage + 811;
+return dev_storage + 805;
 
 }
                     }
@@ -10281,7 +10281,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty44", 10) == 0)
                     {
 {
-return dev_storage + 801;
+return dev_storage + 795;
 
 }
                     }
@@ -10296,7 +10296,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty34", 10) == 0)
                     {
 {
-return dev_storage + 791;
+return dev_storage + 785;
 
 }
                     }
@@ -10311,7 +10311,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty24", 10) == 0)
                     {
 {
-return dev_storage + 781;
+return dev_storage + 775;
 
 }
                     }
@@ -10329,7 +10329,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/tty14", 10) == 0)
                         {
 {
-return dev_storage + 771;
+return dev_storage + 765;
 
 }
                         }
@@ -10344,7 +10344,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdy14", 10) == 0)
                         {
 {
-return dev_storage + 595;
+return dev_storage + 589;
 
 }
                         }
@@ -10371,7 +10371,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdx14", 10) == 0)
                 {
 {
-return dev_storage + 580;
+return dev_storage + 574;
 
 }
                 }
@@ -10386,7 +10386,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdw14", 10) == 0)
                 {
 {
-return dev_storage + 565;
+return dev_storage + 559;
 
 }
                 }
@@ -10401,7 +10401,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdv14", 10) == 0)
                 {
 {
-return dev_storage + 550;
+return dev_storage + 544;
 
 }
                 }
@@ -10416,7 +10416,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdu14", 10) == 0)
                 {
 {
-return dev_storage + 535;
+return dev_storage + 529;
 
 }
                 }
@@ -10434,7 +10434,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst94", 10) == 0)
                     {
 {
-return dev_storage + 141;
+return dev_storage + 135;
 
 }
                     }
@@ -10449,7 +10449,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst84", 10) == 0)
                     {
 {
-return dev_storage + 131;
+return dev_storage + 125;
 
 }
                     }
@@ -10464,7 +10464,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst74", 10) == 0)
                     {
 {
-return dev_storage + 121;
+return dev_storage + 115;
 
 }
                     }
@@ -10479,7 +10479,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst64", 10) == 0)
                     {
 {
-return dev_storage + 111;
+return dev_storage + 105;
 
 }
                     }
@@ -10494,7 +10494,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst54", 10) == 0)
                     {
 {
-return dev_storage + 101;
+return dev_storage + 95;
 
 }
                     }
@@ -10509,7 +10509,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst44", 10) == 0)
                     {
 {
-return dev_storage + 91;
+return dev_storage + 85;
 
 }
                     }
@@ -10524,7 +10524,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst34", 10) == 0)
                     {
 {
-return dev_storage + 81;
+return dev_storage + 75;
 
 }
                     }
@@ -10539,7 +10539,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst24", 10) == 0)
                     {
 {
-return dev_storage + 71;
+return dev_storage + 65;
 
 }
                     }
@@ -10557,7 +10557,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdt14", 10) == 0)
                         {
 {
-return dev_storage + 520;
+return dev_storage + 514;
 
 }
                         }
@@ -10572,7 +10572,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/nst14", 10) == 0)
                         {
 {
-return dev_storage + 61;
+return dev_storage + 55;
 
 }
                         }
@@ -10599,7 +10599,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sds14", 10) == 0)
                 {
 {
-return dev_storage + 505;
+return dev_storage + 499;
 
 }
                 }
@@ -10614,7 +10614,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdr14", 10) == 0)
                 {
 {
-return dev_storage + 490;
+return dev_storage + 484;
 
 }
                 }
@@ -10629,7 +10629,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdq14", 10) == 0)
                 {
 {
-return dev_storage + 475;
+return dev_storage + 469;
 
 }
                 }
@@ -10644,7 +10644,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdp14", 10) == 0)
                 {
 {
-return dev_storage + 460;
+return dev_storage + 454;
 
 }
                 }
@@ -10659,7 +10659,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdo14", 10) == 0)
                 {
 {
-return dev_storage + 445;
+return dev_storage + 439;
 
 }
                 }
@@ -10674,7 +10674,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdn14", 10) == 0)
                 {
 {
-return dev_storage + 430;
+return dev_storage + 424;
 
 }
                 }
@@ -10692,7 +10692,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdm14", 10) == 0)
                     {
 {
-return dev_storage + 415;
+return dev_storage + 409;
 
 }
                     }
@@ -10728,7 +10728,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdl14", 10) == 0)
                 {
 {
-return dev_storage + 400;
+return dev_storage + 394;
 
 }
                 }
@@ -10743,7 +10743,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdk14", 10) == 0)
                 {
 {
-return dev_storage + 385;
+return dev_storage + 379;
 
 }
                 }
@@ -10758,7 +10758,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdj14", 10) == 0)
                 {
 {
-return dev_storage + 370;
+return dev_storage + 364;
 
 }
                 }
@@ -10773,7 +10773,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdi14", 10) == 0)
                 {
 {
-return dev_storage + 355;
+return dev_storage + 349;
 
 }
                 }
@@ -10788,7 +10788,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdh14", 10) == 0)
                 {
 {
-return dev_storage + 340;
+return dev_storage + 334;
 
 }
                 }
@@ -10803,7 +10803,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdg14", 10) == 0)
                 {
 {
-return dev_storage + 325;
+return dev_storage + 319;
 
 }
                 }
@@ -10818,7 +10818,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdf14", 10) == 0)
                 {
 {
-return dev_storage + 310;
+return dev_storage + 304;
 
 }
                 }
@@ -10833,7 +10833,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sde14", 10) == 0)
                 {
 {
-return dev_storage + 295;
+return dev_storage + 289;
 
 }
                 }
@@ -10851,7 +10851,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdd14", 10) == 0)
                     {
 {
-return dev_storage + 280;
+return dev_storage + 274;
 
 }
                     }
@@ -10866,7 +10866,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/scd14", 10) == 0)
                     {
 {
-return dev_storage + 194;
+return dev_storage + 188;
 
 }
                     }
@@ -10887,7 +10887,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdc14", 10) == 0)
                 {
 {
-return dev_storage + 265;
+return dev_storage + 259;
 
 }
                 }
@@ -10902,7 +10902,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdb14", 10) == 0)
                 {
 {
-return dev_storage + 250;
+return dev_storage + 244;
 
 }
                 }
@@ -10917,7 +10917,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sda14", 10) == 0)
                 {
 {
-return dev_storage + 235;
+return dev_storage + 229;
 
 }
                 }
@@ -10935,7 +10935,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st124", 10) == 0)
                     {
 {
-return dev_storage + 752;
+return dev_storage + 746;
 
 }
                     }
@@ -10950,7 +10950,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st114", 10) == 0)
                     {
 {
-return dev_storage + 742;
+return dev_storage + 736;
 
 }
                     }
@@ -10965,7 +10965,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st104", 10) == 0)
                     {
 {
-return dev_storage + 732;
+return dev_storage + 726;
 
 }
                     }
@@ -10995,7 +10995,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdz13", 10) == 0)
                 {
 {
-return dev_storage + 609;
+return dev_storage + 603;
 
 }
                 }
@@ -11013,7 +11013,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS3", 10) == 0)
                     {
 {
-return dev_storage + 824;
+return dev_storage + 818;
 
 }
                     }
@@ -11028,7 +11028,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty63", 10) == 0)
                     {
 {
-return dev_storage + 820;
+return dev_storage + 814;
 
 }
                     }
@@ -11043,7 +11043,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty53", 10) == 0)
                     {
 {
-return dev_storage + 810;
+return dev_storage + 804;
 
 }
                     }
@@ -11058,7 +11058,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty43", 10) == 0)
                     {
 {
-return dev_storage + 800;
+return dev_storage + 794;
 
 }
                     }
@@ -11073,7 +11073,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty33", 10) == 0)
                     {
 {
-return dev_storage + 790;
+return dev_storage + 784;
 
 }
                     }
@@ -11088,7 +11088,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty23", 10) == 0)
                     {
 {
-return dev_storage + 780;
+return dev_storage + 774;
 
 }
                     }
@@ -11106,7 +11106,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/tty13", 10) == 0)
                         {
 {
-return dev_storage + 770;
+return dev_storage + 764;
 
 }
                         }
@@ -11121,7 +11121,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdy13", 10) == 0)
                         {
 {
-return dev_storage + 594;
+return dev_storage + 588;
 
 }
                         }
@@ -11148,7 +11148,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdx13", 10) == 0)
                 {
 {
-return dev_storage + 579;
+return dev_storage + 573;
 
 }
                 }
@@ -11163,7 +11163,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdw13", 10) == 0)
                 {
 {
-return dev_storage + 564;
+return dev_storage + 558;
 
 }
                 }
@@ -11178,7 +11178,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdv13", 10) == 0)
                 {
 {
-return dev_storage + 549;
+return dev_storage + 543;
 
 }
                 }
@@ -11193,7 +11193,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdu13", 10) == 0)
                 {
 {
-return dev_storage + 534;
+return dev_storage + 528;
 
 }
                 }
@@ -11211,7 +11211,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst93", 10) == 0)
                     {
 {
-return dev_storage + 140;
+return dev_storage + 134;
 
 }
                     }
@@ -11226,7 +11226,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst83", 10) == 0)
                     {
 {
-return dev_storage + 130;
+return dev_storage + 124;
 
 }
                     }
@@ -11241,7 +11241,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst73", 10) == 0)
                     {
 {
-return dev_storage + 120;
+return dev_storage + 114;
 
 }
                     }
@@ -11256,7 +11256,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst63", 10) == 0)
                     {
 {
-return dev_storage + 110;
+return dev_storage + 104;
 
 }
                     }
@@ -11271,7 +11271,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst53", 10) == 0)
                     {
 {
-return dev_storage + 100;
+return dev_storage + 94;
 
 }
                     }
@@ -11286,7 +11286,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst43", 10) == 0)
                     {
 {
-return dev_storage + 90;
+return dev_storage + 84;
 
 }
                     }
@@ -11301,7 +11301,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst33", 10) == 0)
                     {
 {
-return dev_storage + 80;
+return dev_storage + 74;
 
 }
                     }
@@ -11316,7 +11316,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst23", 10) == 0)
                     {
 {
-return dev_storage + 70;
+return dev_storage + 64;
 
 }
                     }
@@ -11334,7 +11334,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdt13", 10) == 0)
                         {
 {
-return dev_storage + 519;
+return dev_storage + 513;
 
 }
                         }
@@ -11349,7 +11349,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/nst13", 10) == 0)
                         {
 {
-return dev_storage + 60;
+return dev_storage + 54;
 
 }
                         }
@@ -11376,7 +11376,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sds13", 10) == 0)
                 {
 {
-return dev_storage + 504;
+return dev_storage + 498;
 
 }
                 }
@@ -11391,7 +11391,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdr13", 10) == 0)
                 {
 {
-return dev_storage + 489;
+return dev_storage + 483;
 
 }
                 }
@@ -11406,7 +11406,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdq13", 10) == 0)
                 {
 {
-return dev_storage + 474;
+return dev_storage + 468;
 
 }
                 }
@@ -11421,7 +11421,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdp13", 10) == 0)
                 {
 {
-return dev_storage + 459;
+return dev_storage + 453;
 
 }
                 }
@@ -11436,7 +11436,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdo13", 10) == 0)
                 {
 {
-return dev_storage + 444;
+return dev_storage + 438;
 
 }
                 }
@@ -11451,7 +11451,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdn13", 10) == 0)
                 {
 {
-return dev_storage + 429;
+return dev_storage + 423;
 
 }
                 }
@@ -11469,7 +11469,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdm13", 10) == 0)
                     {
 {
-return dev_storage + 414;
+return dev_storage + 408;
 
 }
                     }
@@ -11505,7 +11505,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdl13", 10) == 0)
                 {
 {
-return dev_storage + 399;
+return dev_storage + 393;
 
 }
                 }
@@ -11520,7 +11520,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdk13", 10) == 0)
                 {
 {
-return dev_storage + 384;
+return dev_storage + 378;
 
 }
                 }
@@ -11535,7 +11535,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdj13", 10) == 0)
                 {
 {
-return dev_storage + 369;
+return dev_storage + 363;
 
 }
                 }
@@ -11550,7 +11550,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdi13", 10) == 0)
                 {
 {
-return dev_storage + 354;
+return dev_storage + 348;
 
 }
                 }
@@ -11565,7 +11565,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdh13", 10) == 0)
                 {
 {
-return dev_storage + 339;
+return dev_storage + 333;
 
 }
                 }
@@ -11580,7 +11580,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdg13", 10) == 0)
                 {
 {
-return dev_storage + 324;
+return dev_storage + 318;
 
 }
                 }
@@ -11595,7 +11595,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdf13", 10) == 0)
                 {
 {
-return dev_storage + 309;
+return dev_storage + 303;
 
 }
                 }
@@ -11610,7 +11610,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sde13", 10) == 0)
                 {
 {
-return dev_storage + 294;
+return dev_storage + 288;
 
 }
                 }
@@ -11628,7 +11628,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdd13", 10) == 0)
                     {
 {
-return dev_storage + 279;
+return dev_storage + 273;
 
 }
                     }
@@ -11643,7 +11643,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/scd13", 10) == 0)
                     {
 {
-return dev_storage + 193;
+return dev_storage + 187;
 
 }
                     }
@@ -11664,7 +11664,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdc13", 10) == 0)
                 {
 {
-return dev_storage + 264;
+return dev_storage + 258;
 
 }
                 }
@@ -11679,7 +11679,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdb13", 10) == 0)
                 {
 {
-return dev_storage + 249;
+return dev_storage + 243;
 
 }
                 }
@@ -11694,7 +11694,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sda13", 10) == 0)
                 {
 {
-return dev_storage + 234;
+return dev_storage + 228;
 
 }
                 }
@@ -11712,7 +11712,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st123", 10) == 0)
                     {
 {
-return dev_storage + 751;
+return dev_storage + 745;
 
 }
                     }
@@ -11727,7 +11727,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st113", 10) == 0)
                     {
 {
-return dev_storage + 741;
+return dev_storage + 735;
 
 }
                     }
@@ -11742,7 +11742,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st103", 10) == 0)
                     {
 {
-return dev_storage + 731;
+return dev_storage + 725;
 
 }
                     }
@@ -11772,7 +11772,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdz12", 10) == 0)
                 {
 {
-return dev_storage + 608;
+return dev_storage + 602;
 
 }
                 }
@@ -11790,7 +11790,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS2", 10) == 0)
                     {
 {
-return dev_storage + 823;
+return dev_storage + 817;
 
 }
                     }
@@ -11805,7 +11805,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty62", 10) == 0)
                     {
 {
-return dev_storage + 819;
+return dev_storage + 813;
 
 }
                     }
@@ -11820,7 +11820,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty52", 10) == 0)
                     {
 {
-return dev_storage + 809;
+return dev_storage + 803;
 
 }
                     }
@@ -11835,7 +11835,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty42", 10) == 0)
                     {
 {
-return dev_storage + 799;
+return dev_storage + 793;
 
 }
                     }
@@ -11850,7 +11850,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty32", 10) == 0)
                     {
 {
-return dev_storage + 789;
+return dev_storage + 783;
 
 }
                     }
@@ -11865,7 +11865,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty22", 10) == 0)
                     {
 {
-return dev_storage + 779;
+return dev_storage + 773;
 
 }
                     }
@@ -11883,7 +11883,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/tty12", 10) == 0)
                         {
 {
-return dev_storage + 769;
+return dev_storage + 763;
 
 }
                         }
@@ -11898,7 +11898,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdy12", 10) == 0)
                         {
 {
-return dev_storage + 593;
+return dev_storage + 587;
 
 }
                         }
@@ -11925,7 +11925,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdx12", 10) == 0)
                 {
 {
-return dev_storage + 578;
+return dev_storage + 572;
 
 }
                 }
@@ -11940,7 +11940,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdw12", 10) == 0)
                 {
 {
-return dev_storage + 563;
+return dev_storage + 557;
 
 }
                 }
@@ -11955,7 +11955,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdv12", 10) == 0)
                 {
 {
-return dev_storage + 548;
+return dev_storage + 542;
 
 }
                 }
@@ -11970,7 +11970,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdu12", 10) == 0)
                 {
 {
-return dev_storage + 533;
+return dev_storage + 527;
 
 }
                 }
@@ -11988,7 +11988,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst92", 10) == 0)
                     {
 {
-return dev_storage + 139;
+return dev_storage + 133;
 
 }
                     }
@@ -12003,7 +12003,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst82", 10) == 0)
                     {
 {
-return dev_storage + 129;
+return dev_storage + 123;
 
 }
                     }
@@ -12018,7 +12018,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst72", 10) == 0)
                     {
 {
-return dev_storage + 119;
+return dev_storage + 113;
 
 }
                     }
@@ -12033,7 +12033,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst62", 10) == 0)
                     {
 {
-return dev_storage + 109;
+return dev_storage + 103;
 
 }
                     }
@@ -12048,7 +12048,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst52", 10) == 0)
                     {
 {
-return dev_storage + 99;
+return dev_storage + 93;
 
 }
                     }
@@ -12063,7 +12063,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst42", 10) == 0)
                     {
 {
-return dev_storage + 89;
+return dev_storage + 83;
 
 }
                     }
@@ -12078,7 +12078,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst32", 10) == 0)
                     {
 {
-return dev_storage + 79;
+return dev_storage + 73;
 
 }
                     }
@@ -12093,7 +12093,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst22", 10) == 0)
                     {
 {
-return dev_storage + 69;
+return dev_storage + 63;
 
 }
                     }
@@ -12111,7 +12111,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdt12", 10) == 0)
                         {
 {
-return dev_storage + 518;
+return dev_storage + 512;
 
 }
                         }
@@ -12126,7 +12126,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/nst12", 10) == 0)
                         {
 {
-return dev_storage + 59;
+return dev_storage + 53;
 
 }
                         }
@@ -12153,7 +12153,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sds12", 10) == 0)
                 {
 {
-return dev_storage + 503;
+return dev_storage + 497;
 
 }
                 }
@@ -12168,7 +12168,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdr12", 10) == 0)
                 {
 {
-return dev_storage + 488;
+return dev_storage + 482;
 
 }
                 }
@@ -12183,7 +12183,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdq12", 10) == 0)
                 {
 {
-return dev_storage + 473;
+return dev_storage + 467;
 
 }
                 }
@@ -12198,7 +12198,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdp12", 10) == 0)
                 {
 {
-return dev_storage + 458;
+return dev_storage + 452;
 
 }
                 }
@@ -12213,7 +12213,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdo12", 10) == 0)
                 {
 {
-return dev_storage + 443;
+return dev_storage + 437;
 
 }
                 }
@@ -12228,7 +12228,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdn12", 10) == 0)
                 {
 {
-return dev_storage + 428;
+return dev_storage + 422;
 
 }
                 }
@@ -12246,7 +12246,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdm12", 10) == 0)
                     {
 {
-return dev_storage + 413;
+return dev_storage + 407;
 
 }
                     }
@@ -12282,7 +12282,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdl12", 10) == 0)
                 {
 {
-return dev_storage + 398;
+return dev_storage + 392;
 
 }
                 }
@@ -12297,7 +12297,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdk12", 10) == 0)
                 {
 {
-return dev_storage + 383;
+return dev_storage + 377;
 
 }
                 }
@@ -12312,7 +12312,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdj12", 10) == 0)
                 {
 {
-return dev_storage + 368;
+return dev_storage + 362;
 
 }
                 }
@@ -12327,7 +12327,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdi12", 10) == 0)
                 {
 {
-return dev_storage + 353;
+return dev_storage + 347;
 
 }
                 }
@@ -12342,7 +12342,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdh12", 10) == 0)
                 {
 {
-return dev_storage + 338;
+return dev_storage + 332;
 
 }
                 }
@@ -12357,7 +12357,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdg12", 10) == 0)
                 {
 {
-return dev_storage + 323;
+return dev_storage + 317;
 
 }
                 }
@@ -12372,7 +12372,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdf12", 10) == 0)
                 {
 {
-return dev_storage + 308;
+return dev_storage + 302;
 
 }
                 }
@@ -12387,7 +12387,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sde12", 10) == 0)
                 {
 {
-return dev_storage + 293;
+return dev_storage + 287;
 
 }
                 }
@@ -12405,7 +12405,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdd12", 10) == 0)
                     {
 {
-return dev_storage + 278;
+return dev_storage + 272;
 
 }
                     }
@@ -12420,7 +12420,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/scd12", 10) == 0)
                     {
 {
-return dev_storage + 192;
+return dev_storage + 186;
 
 }
                     }
@@ -12441,7 +12441,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdc12", 10) == 0)
                 {
 {
-return dev_storage + 263;
+return dev_storage + 257;
 
 }
                 }
@@ -12456,7 +12456,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdb12", 10) == 0)
                 {
 {
-return dev_storage + 248;
+return dev_storage + 242;
 
 }
                 }
@@ -12471,7 +12471,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sda12", 10) == 0)
                 {
 {
-return dev_storage + 233;
+return dev_storage + 227;
 
 }
                 }
@@ -12489,7 +12489,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st122", 10) == 0)
                     {
 {
-return dev_storage + 750;
+return dev_storage + 744;
 
 }
                     }
@@ -12504,7 +12504,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st112", 10) == 0)
                     {
 {
-return dev_storage + 740;
+return dev_storage + 734;
 
 }
                     }
@@ -12519,7 +12519,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st102", 10) == 0)
                     {
 {
-return dev_storage + 730;
+return dev_storage + 724;
 
 }
                     }
@@ -12549,7 +12549,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdz11", 10) == 0)
                 {
 {
-return dev_storage + 607;
+return dev_storage + 601;
 
 }
                 }
@@ -12567,7 +12567,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS1", 10) == 0)
                     {
 {
-return dev_storage + 822;
+return dev_storage + 816;
 
 }
                     }
@@ -12582,7 +12582,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty61", 10) == 0)
                     {
 {
-return dev_storage + 818;
+return dev_storage + 812;
 
 }
                     }
@@ -12597,7 +12597,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty51", 10) == 0)
                     {
 {
-return dev_storage + 808;
+return dev_storage + 802;
 
 }
                     }
@@ -12612,7 +12612,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty41", 10) == 0)
                     {
 {
-return dev_storage + 798;
+return dev_storage + 792;
 
 }
                     }
@@ -12627,7 +12627,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty31", 10) == 0)
                     {
 {
-return dev_storage + 788;
+return dev_storage + 782;
 
 }
                     }
@@ -12642,7 +12642,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty21", 10) == 0)
                     {
 {
-return dev_storage + 778;
+return dev_storage + 772;
 
 }
                     }
@@ -12660,7 +12660,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/tty11", 10) == 0)
                         {
 {
-return dev_storage + 768;
+return dev_storage + 762;
 
 }
                         }
@@ -12675,7 +12675,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdy11", 10) == 0)
                         {
 {
-return dev_storage + 592;
+return dev_storage + 586;
 
 }
                         }
@@ -12702,7 +12702,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdx11", 10) == 0)
                 {
 {
-return dev_storage + 577;
+return dev_storage + 571;
 
 }
                 }
@@ -12717,7 +12717,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdw11", 10) == 0)
                 {
 {
-return dev_storage + 562;
+return dev_storage + 556;
 
 }
                 }
@@ -12732,7 +12732,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdv11", 10) == 0)
                 {
 {
-return dev_storage + 547;
+return dev_storage + 541;
 
 }
                 }
@@ -12747,7 +12747,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdu11", 10) == 0)
                 {
 {
-return dev_storage + 532;
+return dev_storage + 526;
 
 }
                 }
@@ -12765,7 +12765,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst91", 10) == 0)
                     {
 {
-return dev_storage + 138;
+return dev_storage + 132;
 
 }
                     }
@@ -12780,7 +12780,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst81", 10) == 0)
                     {
 {
-return dev_storage + 128;
+return dev_storage + 122;
 
 }
                     }
@@ -12795,7 +12795,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst71", 10) == 0)
                     {
 {
-return dev_storage + 118;
+return dev_storage + 112;
 
 }
                     }
@@ -12810,7 +12810,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst61", 10) == 0)
                     {
 {
-return dev_storage + 108;
+return dev_storage + 102;
 
 }
                     }
@@ -12825,7 +12825,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst51", 10) == 0)
                     {
 {
-return dev_storage + 98;
+return dev_storage + 92;
 
 }
                     }
@@ -12840,7 +12840,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst41", 10) == 0)
                     {
 {
-return dev_storage + 88;
+return dev_storage + 82;
 
 }
                     }
@@ -12855,7 +12855,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst31", 10) == 0)
                     {
 {
-return dev_storage + 78;
+return dev_storage + 72;
 
 }
                     }
@@ -12870,7 +12870,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst21", 10) == 0)
                     {
 {
-return dev_storage + 68;
+return dev_storage + 62;
 
 }
                     }
@@ -12888,7 +12888,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdt11", 10) == 0)
                         {
 {
-return dev_storage + 517;
+return dev_storage + 511;
 
 }
                         }
@@ -12903,7 +12903,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/nst11", 10) == 0)
                         {
 {
-return dev_storage + 58;
+return dev_storage + 52;
 
 }
                         }
@@ -12930,7 +12930,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sds11", 10) == 0)
                 {
 {
-return dev_storage + 502;
+return dev_storage + 496;
 
 }
                 }
@@ -12945,7 +12945,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdr11", 10) == 0)
                 {
 {
-return dev_storage + 487;
+return dev_storage + 481;
 
 }
                 }
@@ -12960,7 +12960,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdq11", 10) == 0)
                 {
 {
-return dev_storage + 472;
+return dev_storage + 466;
 
 }
                 }
@@ -12975,7 +12975,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdp11", 10) == 0)
                 {
 {
-return dev_storage + 457;
+return dev_storage + 451;
 
 }
                 }
@@ -12990,7 +12990,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdo11", 10) == 0)
                 {
 {
-return dev_storage + 442;
+return dev_storage + 436;
 
 }
                 }
@@ -13005,7 +13005,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdn11", 10) == 0)
                 {
 {
-return dev_storage + 427;
+return dev_storage + 421;
 
 }
                 }
@@ -13023,7 +13023,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdm11", 10) == 0)
                     {
 {
-return dev_storage + 412;
+return dev_storage + 406;
 
 }
                     }
@@ -13059,7 +13059,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdl11", 10) == 0)
                 {
 {
-return dev_storage + 397;
+return dev_storage + 391;
 
 }
                 }
@@ -13074,7 +13074,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdk11", 10) == 0)
                 {
 {
-return dev_storage + 382;
+return dev_storage + 376;
 
 }
                 }
@@ -13089,7 +13089,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdj11", 10) == 0)
                 {
 {
-return dev_storage + 367;
+return dev_storage + 361;
 
 }
                 }
@@ -13104,7 +13104,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdi11", 10) == 0)
                 {
 {
-return dev_storage + 352;
+return dev_storage + 346;
 
 }
                 }
@@ -13119,7 +13119,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdh11", 10) == 0)
                 {
 {
-return dev_storage + 337;
+return dev_storage + 331;
 
 }
                 }
@@ -13134,7 +13134,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdg11", 10) == 0)
                 {
 {
-return dev_storage + 322;
+return dev_storage + 316;
 
 }
                 }
@@ -13149,7 +13149,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdf11", 10) == 0)
                 {
 {
-return dev_storage + 307;
+return dev_storage + 301;
 
 }
                 }
@@ -13164,7 +13164,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sde11", 10) == 0)
                 {
 {
-return dev_storage + 292;
+return dev_storage + 286;
 
 }
                 }
@@ -13182,7 +13182,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdd11", 10) == 0)
                     {
 {
-return dev_storage + 277;
+return dev_storage + 271;
 
 }
                     }
@@ -13197,7 +13197,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/scd11", 10) == 0)
                     {
 {
-return dev_storage + 191;
+return dev_storage + 185;
 
 }
                     }
@@ -13218,7 +13218,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdc11", 10) == 0)
                 {
 {
-return dev_storage + 262;
+return dev_storage + 256;
 
 }
                 }
@@ -13233,7 +13233,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdb11", 10) == 0)
                 {
 {
-return dev_storage + 247;
+return dev_storage + 241;
 
 }
                 }
@@ -13248,7 +13248,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sda11", 10) == 0)
                 {
 {
-return dev_storage + 232;
+return dev_storage + 226;
 
 }
                 }
@@ -13266,7 +13266,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st121", 10) == 0)
                     {
 {
-return dev_storage + 749;
+return dev_storage + 743;
 
 }
                     }
@@ -13281,7 +13281,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st111", 10) == 0)
                     {
 {
-return dev_storage + 739;
+return dev_storage + 733;
 
 }
                     }
@@ -13296,7 +13296,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st101", 10) == 0)
                     {
 {
-return dev_storage + 729;
+return dev_storage + 723;
 
 }
                     }
@@ -13326,7 +13326,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdz10", 10) == 0)
                 {
 {
-return dev_storage + 606;
+return dev_storage + 600;
 
 }
                 }
@@ -13344,7 +13344,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS0", 10) == 0)
                     {
 {
-return dev_storage + 821;
+return dev_storage + 815;
 
 }
                     }
@@ -13359,7 +13359,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty60", 10) == 0)
                     {
 {
-return dev_storage + 817;
+return dev_storage + 811;
 
 }
                     }
@@ -13374,7 +13374,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty50", 10) == 0)
                     {
 {
-return dev_storage + 807;
+return dev_storage + 801;
 
 }
                     }
@@ -13389,7 +13389,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty40", 10) == 0)
                     {
 {
-return dev_storage + 797;
+return dev_storage + 791;
 
 }
                     }
@@ -13404,7 +13404,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty30", 10) == 0)
                     {
 {
-return dev_storage + 787;
+return dev_storage + 781;
 
 }
                     }
@@ -13419,7 +13419,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/tty20", 10) == 0)
                     {
 {
-return dev_storage + 777;
+return dev_storage + 771;
 
 }
                     }
@@ -13437,7 +13437,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/tty10", 10) == 0)
                         {
 {
-return dev_storage + 767;
+return dev_storage + 761;
 
 }
                         }
@@ -13452,7 +13452,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdy10", 10) == 0)
                         {
 {
-return dev_storage + 591;
+return dev_storage + 585;
 
 }
                         }
@@ -13479,7 +13479,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdx10", 10) == 0)
                 {
 {
-return dev_storage + 576;
+return dev_storage + 570;
 
 }
                 }
@@ -13494,7 +13494,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdw10", 10) == 0)
                 {
 {
-return dev_storage + 561;
+return dev_storage + 555;
 
 }
                 }
@@ -13509,7 +13509,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdv10", 10) == 0)
                 {
 {
-return dev_storage + 546;
+return dev_storage + 540;
 
 }
                 }
@@ -13524,7 +13524,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdu10", 10) == 0)
                 {
 {
-return dev_storage + 531;
+return dev_storage + 525;
 
 }
                 }
@@ -13542,7 +13542,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst90", 10) == 0)
                     {
 {
-return dev_storage + 137;
+return dev_storage + 131;
 
 }
                     }
@@ -13557,7 +13557,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst80", 10) == 0)
                     {
 {
-return dev_storage + 127;
+return dev_storage + 121;
 
 }
                     }
@@ -13572,7 +13572,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst70", 10) == 0)
                     {
 {
-return dev_storage + 117;
+return dev_storage + 111;
 
 }
                     }
@@ -13587,7 +13587,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst60", 10) == 0)
                     {
 {
-return dev_storage + 107;
+return dev_storage + 101;
 
 }
                     }
@@ -13602,7 +13602,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst50", 10) == 0)
                     {
 {
-return dev_storage + 97;
+return dev_storage + 91;
 
 }
                     }
@@ -13617,7 +13617,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst40", 10) == 0)
                     {
 {
-return dev_storage + 87;
+return dev_storage + 81;
 
 }
                     }
@@ -13632,7 +13632,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst30", 10) == 0)
                     {
 {
-return dev_storage + 77;
+return dev_storage + 71;
 
 }
                     }
@@ -13647,7 +13647,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst20", 10) == 0)
                     {
 {
-return dev_storage + 67;
+return dev_storage + 61;
 
 }
                     }
@@ -13665,7 +13665,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/sdt10", 10) == 0)
                         {
 {
-return dev_storage + 516;
+return dev_storage + 510;
 
 }
                         }
@@ -13680,7 +13680,7 @@ return  NULL;
                       if (strncmp (KR_keyword, "/dev/nst10", 10) == 0)
                         {
 {
-return dev_storage + 57;
+return dev_storage + 51;
 
 }
                         }
@@ -13707,7 +13707,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sds10", 10) == 0)
                 {
 {
-return dev_storage + 501;
+return dev_storage + 495;
 
 }
                 }
@@ -13722,7 +13722,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdr10", 10) == 0)
                 {
 {
-return dev_storage + 486;
+return dev_storage + 480;
 
 }
                 }
@@ -13737,7 +13737,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdq10", 10) == 0)
                 {
 {
-return dev_storage + 471;
+return dev_storage + 465;
 
 }
                 }
@@ -13752,7 +13752,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdp10", 10) == 0)
                 {
 {
-return dev_storage + 456;
+return dev_storage + 450;
 
 }
                 }
@@ -13767,7 +13767,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdo10", 10) == 0)
                 {
 {
-return dev_storage + 441;
+return dev_storage + 435;
 
 }
                 }
@@ -13782,7 +13782,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdn10", 10) == 0)
                 {
 {
-return dev_storage + 426;
+return dev_storage + 420;
 
 }
                 }
@@ -13800,7 +13800,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdm10", 10) == 0)
                     {
 {
-return dev_storage + 411;
+return dev_storage + 405;
 
 }
                     }
@@ -13836,7 +13836,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdl10", 10) == 0)
                 {
 {
-return dev_storage + 396;
+return dev_storage + 390;
 
 }
                 }
@@ -13851,7 +13851,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdk10", 10) == 0)
                 {
 {
-return dev_storage + 381;
+return dev_storage + 375;
 
 }
                 }
@@ -13866,7 +13866,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdj10", 10) == 0)
                 {
 {
-return dev_storage + 366;
+return dev_storage + 360;
 
 }
                 }
@@ -13881,7 +13881,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdi10", 10) == 0)
                 {
 {
-return dev_storage + 351;
+return dev_storage + 345;
 
 }
                 }
@@ -13896,7 +13896,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdh10", 10) == 0)
                 {
 {
-return dev_storage + 336;
+return dev_storage + 330;
 
 }
                 }
@@ -13911,7 +13911,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdg10", 10) == 0)
                 {
 {
-return dev_storage + 321;
+return dev_storage + 315;
 
 }
                 }
@@ -13926,7 +13926,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdf10", 10) == 0)
                 {
 {
-return dev_storage + 306;
+return dev_storage + 300;
 
 }
                 }
@@ -13941,7 +13941,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sde10", 10) == 0)
                 {
 {
-return dev_storage + 291;
+return dev_storage + 285;
 
 }
                 }
@@ -13959,7 +13959,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/sdd10", 10) == 0)
                     {
 {
-return dev_storage + 276;
+return dev_storage + 270;
 
 }
                     }
@@ -13974,7 +13974,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/scd10", 10) == 0)
                     {
 {
-return dev_storage + 190;
+return dev_storage + 184;
 
 }
                     }
@@ -13995,7 +13995,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdc10", 10) == 0)
                 {
 {
-return dev_storage + 261;
+return dev_storage + 255;
 
 }
                 }
@@ -14010,7 +14010,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sdb10", 10) == 0)
                 {
 {
-return dev_storage + 246;
+return dev_storage + 240;
 
 }
                 }
@@ -14025,7 +14025,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/sda10", 10) == 0)
                 {
 {
-return dev_storage + 231;
+return dev_storage + 225;
 
 }
                 }
@@ -14043,7 +14043,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st120", 10) == 0)
                     {
 {
-return dev_storage + 748;
+return dev_storage + 742;
 
 }
                     }
@@ -14058,7 +14058,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st110", 10) == 0)
                     {
 {
-return dev_storage + 738;
+return dev_storage + 732;
 
 }
                     }
@@ -14073,7 +14073,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/st100", 10) == 0)
                     {
 {
-return dev_storage + 728;
+return dev_storage + 722;
 
 }
                     }
@@ -14124,7 +14124,7 @@ return  NULL;
           if (strncmp (KR_keyword, "/dev/random", 11) == 0)
             {
 {
-return dev_storage + 179;
+return dev_storage + 173;
 
 }
             }
@@ -14142,7 +14142,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst127", 11) == 0)
                 {
 {
-return dev_storage + 174;
+return dev_storage + 168;
 
 }
                 }
@@ -14157,7 +14157,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst126", 11) == 0)
                 {
 {
-return dev_storage + 173;
+return dev_storage + 167;
 
 }
                 }
@@ -14172,7 +14172,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst125", 11) == 0)
                 {
 {
-return dev_storage + 172;
+return dev_storage + 166;
 
 }
                 }
@@ -14187,7 +14187,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst124", 11) == 0)
                 {
 {
-return dev_storage + 171;
+return dev_storage + 165;
 
 }
                 }
@@ -14202,7 +14202,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst123", 11) == 0)
                 {
 {
-return dev_storage + 170;
+return dev_storage + 164;
 
 }
                 }
@@ -14217,7 +14217,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst122", 11) == 0)
                 {
 {
-return dev_storage + 169;
+return dev_storage + 163;
 
 }
                 }
@@ -14232,7 +14232,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst121", 11) == 0)
                 {
 {
-return dev_storage + 168;
+return dev_storage + 162;
 
 }
                 }
@@ -14247,7 +14247,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst120", 11) == 0)
                 {
 {
-return dev_storage + 167;
+return dev_storage + 161;
 
 }
                 }
@@ -14271,7 +14271,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst119", 11) == 0)
                 {
 {
-return dev_storage + 166;
+return dev_storage + 160;
 
 }
                 }
@@ -14286,7 +14286,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst118", 11) == 0)
                 {
 {
-return dev_storage + 165;
+return dev_storage + 159;
 
 }
                 }
@@ -14301,7 +14301,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst117", 11) == 0)
                 {
 {
-return dev_storage + 164;
+return dev_storage + 158;
 
 }
                 }
@@ -14316,7 +14316,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst116", 11) == 0)
                 {
 {
-return dev_storage + 163;
+return dev_storage + 157;
 
 }
                 }
@@ -14334,7 +14334,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS15", 11) == 0)
                     {
 {
-return dev_storage + 836;
+return dev_storage + 830;
 
 }
                     }
@@ -14349,7 +14349,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst115", 11) == 0)
                     {
 {
-return dev_storage + 162;
+return dev_storage + 156;
 
 }
                     }
@@ -14373,7 +14373,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS14", 11) == 0)
                     {
 {
-return dev_storage + 835;
+return dev_storage + 829;
 
 }
                     }
@@ -14388,7 +14388,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst114", 11) == 0)
                     {
 {
-return dev_storage + 161;
+return dev_storage + 155;
 
 }
                     }
@@ -14412,7 +14412,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS13", 11) == 0)
                     {
 {
-return dev_storage + 834;
+return dev_storage + 828;
 
 }
                     }
@@ -14427,7 +14427,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst113", 11) == 0)
                     {
 {
-return dev_storage + 160;
+return dev_storage + 154;
 
 }
                     }
@@ -14451,7 +14451,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS12", 11) == 0)
                     {
 {
-return dev_storage + 833;
+return dev_storage + 827;
 
 }
                     }
@@ -14466,7 +14466,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst112", 11) == 0)
                     {
 {
-return dev_storage + 159;
+return dev_storage + 153;
 
 }
                     }
@@ -14490,7 +14490,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS11", 11) == 0)
                     {
 {
-return dev_storage + 832;
+return dev_storage + 826;
 
 }
                     }
@@ -14505,7 +14505,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst111", 11) == 0)
                     {
 {
-return dev_storage + 158;
+return dev_storage + 152;
 
 }
                     }
@@ -14529,7 +14529,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/ttyS10", 11) == 0)
                     {
 {
-return dev_storage + 831;
+return dev_storage + 825;
 
 }
                     }
@@ -14544,7 +14544,7 @@ return  NULL;
                   if (strncmp (KR_keyword, "/dev/nst110", 11) == 0)
                     {
 {
-return dev_storage + 157;
+return dev_storage + 151;
 
 }
                     }
@@ -14574,7 +14574,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst109", 11) == 0)
                 {
 {
-return dev_storage + 156;
+return dev_storage + 150;
 
 }
                 }
@@ -14589,7 +14589,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst108", 11) == 0)
                 {
 {
-return dev_storage + 155;
+return dev_storage + 149;
 
 }
                 }
@@ -14604,7 +14604,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst107", 11) == 0)
                 {
 {
-return dev_storage + 154;
+return dev_storage + 148;
 
 }
                 }
@@ -14619,7 +14619,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst106", 11) == 0)
                 {
 {
-return dev_storage + 153;
+return dev_storage + 147;
 
 }
                 }
@@ -14634,7 +14634,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst105", 11) == 0)
                 {
 {
-return dev_storage + 152;
+return dev_storage + 146;
 
 }
                 }
@@ -14649,7 +14649,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst104", 11) == 0)
                 {
 {
-return dev_storage + 151;
+return dev_storage + 145;
 
 }
                 }
@@ -14664,7 +14664,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst103", 11) == 0)
                 {
 {
-return dev_storage + 150;
+return dev_storage + 144;
 
 }
                 }
@@ -14679,7 +14679,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst102", 11) == 0)
                 {
 {
-return dev_storage + 149;
+return dev_storage + 143;
 
 }
                 }
@@ -14694,7 +14694,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst101", 11) == 0)
                 {
 {
-return dev_storage + 148;
+return dev_storage + 142;
 
 }
                 }
@@ -14709,7 +14709,7 @@ return  NULL;
               if (strncmp (KR_keyword, "/dev/nst100", 11) == 0)
                 {
 {
-return dev_storage + 147;
+return dev_storage + 141;
 
 }
                 }
@@ -14739,7 +14739,7 @@ return  NULL;
           if (strncmp (KR_keyword, "/dev/windows", 12) == 0)
             {
 {
-return dev_storage + 839;
+return dev_storage + 833;
 
 }
             }
@@ -14754,7 +14754,7 @@ return  NULL;
           if (strncmp (KR_keyword, "/dev/urandom", 12) == 0)
             {
 {
-return dev_storage + 838;
+return dev_storage + 832;
 
 }
             }
@@ -14786,64 +14786,7 @@ return NULL;
 
 }
         }
-    case 13:
-      switch (KR_keyword [10])
-        {
-        case 'u':
-          if (strncmp (KR_keyword, "/dev/inet/udp", 13) == 0)
-            {
-{
-return dev_storage + 43;
-
-}
-            }
-          else
-            {
-{
-return NULL;
-
-}
-            }
-        case 't':
-          if (strncmp (KR_keyword, "/dev/inet/tcp", 13) == 0)
-            {
-{
-return dev_storage + 42;
-
-}
-            }
-          else
-            {
-{
-return NULL;
-
-}
-            }
-        default:
-{
-return NULL;
-
-}
-        }
     case 14:
-      switch (KR_keyword [10])
-        {
-        case 'u':
-          if (strncmp (KR_keyword, "/dev/inet/unix", 14) == 0)
-            {
-{
-return dev_storage + 44;
-
-}
-            }
-          else
-            {
-{
-return NULL;
-
-}
-            }
-        case 'o':
           if (strncmp (KR_keyword, "/dev/clipboard", 14) == 0)
             {
 {
@@ -14858,57 +14801,6 @@ return NULL;
 
 }
             }
-        case 'i':
-          if (strncmp (KR_keyword, "/dev/inet/icmp", 14) == 0)
-            {
-{
-return dev_storage + 40;
-
-}
-            }
-          else
-            {
-{
-return NULL;
-
-}
-            }
-        default:
-{
-return NULL;
-
-}
-        }
-    case 15:
-          if (strncmp (KR_keyword, "/dev/inet/dgram", 15) == 0)
-            {
-{
-return dev_storage + 39;
-
-}
-            }
-          else
-            {
-{
-return NULL;
-
-}
-            }
-    case 16:
-          if (strncmp (KR_keyword, "/dev/inet/stream", 16) == 0)
-            {
-{
-return dev_storage + 41;
-
-}
-            }
-          else
-            {
-{
-return NULL;
-
-}
-            }
     default:
 {
 return NULL;
index 9b1a826..137fcd8 100644 (file)
@@ -148,16 +148,19 @@ struct device
 };
 
 extern const device *console_dev;
-extern const device *dgram_dev;
-extern const device *icmp_dev;
-extern const device *stream_dev;
-extern const device *tcp_dev;
 extern const device *ttym_dev;
 extern const device *ttys_dev;
-extern const device *udp_dev;
-extern const device *unix_dev;
 extern const device *urandom_dev;
 
+extern const device dev_dgram_storage;
+#define dgram_dev (&dev_dgram_storage)
+extern const device dev_stream_storage;
+#define stream_dev (&dev_stream_storage)
+extern const device dev_tcp_storage;
+#define tcp_dev (&dev_tcp_storage)
+extern const device dev_udp_storage;
+#define udp_dev (&dev_udp_storage)
+
 extern const device dev_piper_storage;
 #define piper_dev (&dev_piper_storage)
 extern const device dev_pipew_storage;
index 44deacb..95ac5f3 100644 (file)
@@ -30,18 +30,24 @@ const device dev_piper_storage =
 const device dev_pipew_storage =
   {"", FH_PIPEW, ""};
 
+const device dev_tcp_storage =
+  {"", FH_TCP, ""};
+
+const device dev_udp_storage =
+  {"", FH_UDP, ""};
+
+const device dev_stream_storage =
+  {"", FH_STREAM, ""};
+
+const device dev_dgram_storage =
+  {"", FH_DGRAM, ""};
+
 const device dev_bad_storage =
-  {":bad:", FH_BAD, ""};
+  {"", FH_BAD, ""};
 
 %storage_here
 }
 %%
-"/dev/inet/tcp", FH_TCP, "", tcp_dev
-"/dev/inet/udp", FH_UDP, "", udp_dev
-"/dev/inet/icmp", FH_ICMP, "", icmp_dev
-"/dev/inet/unix", FH_UNIX, "", unix_dev
-"/dev/inet/stream", FH_STREAM, "", stream_dev
-"/dev/inet/dgram", FH_DGRAM, "", dgram_dev
 "/dev/tty", FH_TTY, "\\dev\\tty"
 "/dev/tty%(0-63)d", FHDEV(DEV_TTYS_MAJOR, {$1}), "\\dev\\tty{$1}", ttys_dev
 "/dev/console", FH_CONSOLE, "\\dev\\console", console_dev
index 4baa505..a15e761 100644 (file)
@@ -12,19 +12,20 @@ details. */
 #include <imagehlp.h>
 #include <stdlib.h>
 #include <setjmp.h>
-#include <wingdi.h>
-#include <winuser.h>
+#include <assert.h>
 
 #include "exceptions.h"
 #include "sync.h"
-#include "sigproc.h"
 #include "pinfo.h"
+#include "cygtls.h"
+#include "sigproc.h"
 #include "cygerrno.h"
 #define NEED_VFORK
 #include "perthread.h"
 #include "shared_info.h"
 #include "perprocess.h"
 #include "security.h"
+#include "cygthread.h"
 
 #define CALL_HANDLER_RETRY 20
 
@@ -32,13 +33,13 @@ char debugger_command[2 * CYG_MAX_PATH + 20];
 
 extern "C" {
 static int handle_exceptions (EXCEPTION_RECORD *, void *, CONTEXT *, void *);
-extern void sigreturn ();
 extern void sigdelayed ();
-extern void sigdelayed0 ();
-extern void siglast ();
-extern DWORD __no_sig_start, __no_sig_end;
 };
 
+_threadinfo NO_COPY dummy_thread;
+_threadinfo NO_COPY *_last_thread = &dummy_thread;
+extern _threadinfo *_main_tls;
+
 extern DWORD sigtid;
 
 extern HANDLE hExeced;
@@ -54,8 +55,6 @@ static size_t windows_system_directory_length;
 static NO_COPY int exit_already = 0;
 static NO_COPY muto *mask_sync = NULL;
 
-HMODULE NO_COPY cygwin_hmodule;
-
 NO_COPY static struct
 {
   unsigned int code;
@@ -97,8 +96,6 @@ NO_COPY static struct
 
 /* Initialization code.  */
 
-#ifdef __i386__
-
 // Set up the exception handler for the current thread.  The PowerPC & Mips
 // use compiler generated tables to set up the exception handlers for each
 // region of code, and the kernel walks the call list until it finds a region
@@ -116,7 +113,6 @@ init_exception_handler (exception_list *el)
   el->prev = _except_list;
   _except_list = el;
 }
-#endif
 
 void
 init_console_handler ()
@@ -132,6 +128,74 @@ init_exceptions (exception_list *el)
   init_exception_handler (el);
 }
 
+void
+_threadinfo::set_state (bool is_exception)
+{
+  initialized = CYGTLS_INITIALIZED + is_exception;
+}
+
+void
+_threadinfo::reset_exception ()
+{
+  if (initialized == CYGTLS_EXCEPTION)
+    {
+#ifdef DEBUGGING
+      debug_printf ("resetting stack after an exception stack %p, stackptr %p", stack, stackptr);
+#endif
+      set_state (false);
+      stackptr--;
+    }
+}
+
+_threadinfo *
+_threadinfo::init (void *, void *thread)
+{
+  memset (this, 0, sizeof (*this));
+  stackptr = stack;
+  prev = _last_thread;
+  _last_thread->next = this;
+  _last_thread = this;
+  set_state (false);
+  errno_addr = &errno;
+  return this;
+}
+
+void
+_threadinfo::remove ()
+{
+  _threadinfo *t;
+  for (t = _last_thread; t && t != this; t = t->prev)
+    continue;
+  if (!t)
+    return;
+  t->prev->next = t->next;
+  if (t->next)
+    t->next->prev = t->prev;
+  if (t == _last_thread)
+    _last_thread = t->prev;
+}
+
+void
+_threadinfo::push (__stack_t addr, bool exception)
+{
+  *stackptr++ = (__stack_t) addr;
+  set_state (exception);
+}
+
+__stack_t
+_threadinfo::pop ()
+{
+#ifdef DEBUGGING
+  assert (stackptr > stack);
+#endif
+  __stack_t res = *--stackptr;
+#ifndef DEBUGGING
+  _my_tls.stackptr = 0;
+  debug_printf ("popped %p, stack %p, stackptr %p", res, stack, stackptr);
+#endif
+  return res;
+}
+
 extern "C" void
 error_start_init (const char *buf)
 {
@@ -241,7 +305,6 @@ public:
 
 /* This is the main stack frame info for this process. */
 static NO_COPY stack_info thestack;
-static signal_dispatch sigsave;
 
 /* Initialize everything needed to start iterating. */
 void
@@ -392,22 +455,19 @@ try_to_debug (bool waitloop)
        Sleep (0);
       Sleep (2000);
       small_printf ("*** continuing from debugger call\n");
-      SetThreadPriority (GetCurrentThread (), prio);
     }
 
-  /* FIXME: need to know handles of all running threads to
-    resume_all_threads_except (current_thread_id);
-  */
+  SetThreadPriority (GetCurrentThread (), prio);
   return 0;
 }
 
 /* Main exception handler. */
 
+extern "C" DWORD __stdcall RtlUnwind (void *, void *, void *, DWORD);
 static int
-handle_exceptions (EXCEPTION_RECORD *e, void *, CONTEXT *in, void *)
+handle_exceptions (EXCEPTION_RECORD *e0, void *frame, CONTEXT *in0, void *)
 {
-  int sig;
-  static int NO_COPY debugging = 0;
+  static bool NO_COPY debugging = false;
   static int NO_COPY recursed = 0;
 
   if (debugging && ++debugging < 500000)
@@ -421,8 +481,16 @@ handle_exceptions (EXCEPTION_RECORD *e, void *, CONTEXT *in, void *)
   if (exit_already)
     return 1;
 
+  EXCEPTION_RECORD e = *e0;
+  CONTEXT in = *in0;
+
+  extern DWORD ret_here[];
+  RtlUnwind (frame, ret_here, e0, 0);
+  __asm__ volatile (".equ _ret_here,.");
+
+  int sig;
   /* Coerce win32 value to posix value.  */
-  switch (e->ExceptionCode)
+  switch (e.ExceptionCode)
     {
     case STATUS_FLOAT_DENORMAL_OPERAND:
     case STATUS_FLOAT_DIVIDE_BY_ZERO:
@@ -476,8 +544,8 @@ handle_exceptions (EXCEPTION_RECORD *e, void *, CONTEXT *in, void *)
       return 1;
     }
 
-  debug_printf ("In cygwin_except_handler exc %p at %p sp %p", e->ExceptionCode, in->Eip, in->Esp);
-  debug_printf ("In cygwin_except_handler sig = %d at %p", sig, in->Eip);
+  debug_printf ("In cygwin_except_handler exc %p at %p sp %p", e.ExceptionCode, in.Eip, in.Esp);
+  debug_printf ("In cygwin_except_handler sig = %d at %p", sig, in.Eip);
 
   if (myself->getsig (sig).sa_mask & SIGTOMASK (sig))
     syscall_printf ("signal %d, masked %p", sig, myself->getsig (sig).sa_mask);
@@ -485,9 +553,9 @@ handle_exceptions (EXCEPTION_RECORD *e, void *, CONTEXT *in, void *)
   debug_printf ("In cygwin_except_handler calling %p",
                 myself->getsig (sig).sa_handler);
 
-  DWORD *ebp = (DWORD *)in->Esp;
+  DWORD *ebp = (DWORD *)in.Esp;
   for (DWORD *bpend = (DWORD *) __builtin_frame_address (0); ebp > bpend; ebp--)
-    if (*ebp == in->SegCs && ebp[-1] == in->Eip)
+    if (*ebp == in.SegCs && ebp[-1] == in.Eip)
       {
        ebp -= 2;
        break;
@@ -500,11 +568,11 @@ handle_exceptions (EXCEPTION_RECORD *e, void *, CONTEXT *in, void *)
       || (void *) myself->getsig (sig).sa_handler == (void *) SIG_ERR)
     {
       /* Print the exception to the console */
-      if (e)
+      if (1)
        {
          for (int i = 0; status_info[i].name; i++)
            {
-             if (status_info[i].code == e->ExceptionCode)
+             if (status_info[i].code == e.ExceptionCode)
                {
                  if (!myself->ppid_handle)
                    system_printf ("Exception: %s", status_info[i].name);
@@ -521,20 +589,21 @@ handle_exceptions (EXCEPTION_RECORD *e, void *, CONTEXT *in, void *)
        {
          if (try_to_debug (0))
            {
-             debugging = 1;
+             debugging = true;
              return 0;
            }
 
          open_stackdumpfile ();
-         exception (e, in);
+         exception (&e, &in);
          stackdump ((DWORD) ebp, 0, 1);
        }
 
       signal_exit (0x80 | sig);        // Flag signal + core dump
     }
 
-  sig_send (NULL, sig, (DWORD) ebp, 1);                // Signal myself
-  return 0;
+  _my_tls.push ((__stack_t) ebp, true);
+  sig_send (NULL, sig, &_my_tls);      // Signal myself
+  return 1;
 }
 #endif /* __i386__ */
 
@@ -564,10 +633,9 @@ int __stdcall
 handle_sigsuspend (sigset_t tempmask)
 {
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   sigset_t oldmask = myself->getsigmask ();    // Remember for restoration
 
-  set_process_mask (tempmask & ~SIG_NONMASKABLE);// Let signals we're
+  set_signal_mask (tempmask & ~SIG_NONMASKABLE);// Let signals we're
                                //  interested in through.
   sigproc_printf ("old mask %x, new mask %x", oldmask, tempmask);
 
@@ -580,7 +648,7 @@ handle_sigsuspend (sigset_t tempmask)
      be hit eventually.  Set the old mask to be restored when the signal
      handler returns. */
 
-  sigsave.oldmask = oldmask;   // Will be restored by signal handler
+  _my_tls.oldmask = oldmask;   // Will be restored by signal handler
   return -1;
 }
 
@@ -617,7 +685,7 @@ sig_handle_tty_stop (int sig)
 }
 
 int
-interruptible (DWORD pc, int testvalid = 0)
+interruptible (DWORD pc)
 {
   int res;
   MEMORY_BASIC_INFORMATION m;
@@ -635,75 +703,47 @@ interruptible (DWORD pc, int testvalid = 0)
      These should *never* be treated as interruptible. */
   if (!h || m.State != MEM_COMMIT)
     res = 0;
-  else if (testvalid)
-    res = 1;   /* All we wanted to know was if this was a valid module. */
   else if (h == user_data->hmodule)
     res = 1;
-  else if (h == cygwin_hmodule)
-    res = 0;
   else if (!GetModuleFileName (h, checkdir, windows_system_directory_length + 2))
     res = 0;
   else
     res = !strncasematch (windows_system_directory, checkdir,
                          windows_system_directory_length);
-  sigproc_printf ("pc %p, h %p, interruptible %d, testvalid %d", pc, h, res, testvalid);
+  sigproc_printf ("pc %p, h %p, interruptible %d", pc, h, res);
 # undef h
   return res;
 }
-
-bool
-sigthread::get_winapi_lock (int test)
-{
-  if (test)
-    return !InterlockedExchange (&winapi_lock, 1);
-
-  /* Need to do a busy loop because we can't block or a potential SuspendThread
-     will hang. */
-  while (InterlockedExchange (&winapi_lock, 1))
-    low_priority_sleep (0);
-  return 1;
-}
-
-void
-sigthread::release_winapi_lock ()
-{
-  /* Assumes that we have the lock. */
-  InterlockedExchange (&winapi_lock, 0);
-}
-
-static void __stdcall interrupt_setup (int sig, void *handler, DWORD retaddr,
-                                      DWORD *retaddr_on_stack,
-                                      struct sigaction& siga)
-                     __attribute__((regparm(3)));
-static void __stdcall
-interrupt_setup (int sig, void *handler, DWORD retaddr, DWORD *retaddr_on_stack,
-                struct sigaction& siga)
+void __stdcall
+_threadinfo::interrupt_setup (int sig, void *handler,
+                             struct sigaction& siga, __stack_t retaddr)
 {
-  sigsave.retaddr = retaddr;
-  sigsave.retaddr_on_stack = retaddr_on_stack;
-  /* FIXME: Not multi-thread aware */
-  sigsave.oldmask = myself->getsigmask ();
-  sigsave.newmask = sigsave.oldmask | siga.sa_mask | SIGTOMASK (sig);
-  sigsave.sa_flags = siga.sa_flags;
-  sigsave.func = (void (*)(int)) handler;
-  sigsave.saved_errno = -1;            // Flag: no errno to save
+  __stack_t *retaddr_in_tls = stackptr - 1;
+  push ((__stack_t) sigdelayed);
+  oldmask = myself->getsigmask ();
+  newmask = oldmask | siga.sa_mask | SIGTOMASK (sig);
+  sa_flags = siga.sa_flags;
+  func = (void (*) (int)) handler;
+  saved_errno = -1;            // Flag: no errno to save
   if (handler == sig_handle_tty_stop)
     {
       myself->stopsig = 0;
       myself->process_state |= PID_STOPPED;
     }
+  this->sig = sig;                     // Should ALWAYS be second to last setting set to avoid a race
+  *retaddr_in_tls = retaddr;
   /* Clear any waiting threads prior to dispatching to handler function */
-  proc_subproc (PROC_CLEARWAIT, 1);
   int res = SetEvent (signal_arrived); // For an EINTR case
-  sigsave.sig = sig;                   // Should ALWAYS be last thing set to avoid a race
+  proc_subproc (PROC_CLEARWAIT, 1);
   sigproc_printf ("armed signal_arrived %p, res %d", signal_arrived, res);
 }
 
-static bool interrupt_now (CONTEXT *, int, void *, struct sigaction&) __attribute__((regparm(3)));
-static bool
-interrupt_now (CONTEXT *ctx, int sig, void *handler, struct sigaction& siga)
+bool
+_threadinfo::interrupt_now (CONTEXT *ctx, int sig, void *handler,
+                           struct sigaction& siga)
 {
-  interrupt_setup (sig, handler, ctx->Eip, 0, siga);
+  push (0);
+  interrupt_setup (sig, handler, siga, (__stack_t) ctx->Eip);
   ctx->Eip = (DWORD) sigdelayed;
   SetThreadContext (myself->getthread2signal (), ctx); /* Restart the thread in a new location */
   return 1;
@@ -712,167 +752,112 @@ interrupt_now (CONTEXT *ctx, int sig, void *handler, struct sigaction& siga)
 void __stdcall
 signal_fixup_after_fork ()
 {
-  if (sigsave.sig)
+  if (_my_tls.sig)
     {
-      sigsave.sig = 0;
-      if (sigsave.retaddr_on_stack)
-       {
-         *sigsave.retaddr_on_stack = sigsave.retaddr;
-         set_process_mask (sigsave.oldmask);
-       }
+      _my_tls.sig = 0;
+      _my_tls.stackptr = _my_tls.stack + 1;    // FIXME?
+      set_signal_mask (_my_tls.oldmask);
     }
   sigproc_init ();
 }
 
-static int interrupt_on_return (sigthread *, int, void *, struct sigaction&) __attribute__((regparm(3)));
-static int
-interrupt_on_return (sigthread *th, int sig, void *handler, struct sigaction& siga)
-{
-  int i;
-  DWORD ebp = th->frame;
-
-  if (!ebp)
-    return 0;
-
-  thestack.init (ebp, 0, 1);  /* Initialize from the input CONTEXT */
-  for (i = 0; i < 32 && thestack++ ; i++)
-    if (th->exception || interruptible (thestack.sf.AddrReturn.Offset))
-      {
-       DWORD *addr_retaddr = ((DWORD *)thestack.sf.AddrFrame.Offset) + 1;
-       if (*addr_retaddr  == thestack.sf.AddrReturn.Offset)
-         {
-           interrupt_setup (sig, handler, *addr_retaddr, addr_retaddr, siga);
-           *addr_retaddr = (DWORD) sigdelayed;
-         }
-       return 1;
-      }
-
-  sigproc_printf ("couldn't find a stack frame, i %d", i);
-  return 0;
-}
-
 extern "C" void __stdcall
 set_sig_errno (int e)
 {
   set_errno (e);
-  sigsave.saved_errno = e;
+  _my_tls.saved_errno = e;
   // sigproc_printf ("errno %d", e);
 }
 
-static int setup_handler (int, void *, struct sigaction&) __attribute__((regparm(3)));
+static int setup_handler (int, void *, struct sigaction&, _threadinfo *tls)
+  __attribute__((regparm(3)));
 static int
-setup_handler (int sig, void *handler, struct sigaction& siga)
+setup_handler (int sig, void *handler, struct sigaction& siga, _threadinfo *tls)
 {
   CONTEXT cx;
   bool interrupted = false;
-  sigthread *th = NULL;                // Initialization needed to shut up gcc
 
-  if (sigsave.sig)
+  if (tls->sig)
     goto out;
 
   for (int i = 0; i < CALL_HANDLER_RETRY; i++)
     {
-      DWORD res;
-      HANDLE hth;
-
-      EnterCriticalSection (&mainthread.lock);
-      if (mainthread.frame)
+      __stack_t retaddr;
+      __stack_t *retaddr_on_stack = tls->stackptr - 1;
+#ifdef DEBUGGING
+      if (tls->stackptr > (tls->stack + 1))
+       try_to_debug ();
+#endif
+      if (retaddr_on_stack >= tls->stack
+         && (retaddr = InterlockedExchange ((LONG *) retaddr_on_stack, 0)))
        {
-         hth = NULL;
-         th = &mainthread;
+         if (!retaddr)
+           continue;
+         tls->reset_exception ();
+         tls->interrupt_setup (sig, handler, siga, retaddr);
+         sigproc_printf ("interrupted known cygwin routine");
+         interrupted = true;
+         break;
        }
-      else
-       {
-         LeaveCriticalSection (&mainthread.lock);
 
-         if (!mainthread.get_winapi_lock (1))
-           continue;
+      DWORD res;
+      HANDLE hth = myself->getthread2signal ();
+
+      /* Suspend the thread which will receive the signal.  But first ensure that
+        this thread doesn't have any mutos.  (FIXME: Someday we should just grab
+        all of the mutos rather than checking for them)
+        For Windows 95, we also have to ensure that the addresses returned by GetThreadContext
+        are valid.
+        If one of these conditions is not true we loop for a fixed number of times
+        since we don't want to stall the signal handler.  FIXME: Will this result in
+        noticeable delays?
+        If the thread is already suspended (which can occur when a program has called
+        SuspendThread on itself then just queue the signal. */
 
-         hth = myself->getthread2signal ();
-         th = NULL;
-
-         /* Suspend the thread which will receive the signal.  But first ensure that
-            this thread doesn't have any mutos.  (FIXME: Someday we should just grab
-            all of the mutos rather than checking for them)
-            For Windows 95, we also have to ensure that the addresses returned by GetThreadContext
-            are valid.
-            If one of these conditions is not true we loop for a fixed number of times
-            since we don't want to stall the signal handler.  FIXME: Will this result in
-            noticeable delays?
-            If the thread is already suspended (which can occur when a program has called
-            SuspendThread on itself then just queue the signal. */
-
-         EnterCriticalSection (&mainthread.lock);
 #ifndef DEBUGGING
-         sigproc_printf ("suspending mainthread");
+      sigproc_printf ("suspending mainthread");
 #else
-         cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
-         if (!GetThreadContext (hth, &cx))
-           memset (&cx, 0, sizeof cx);
-#if 0
-         if ((cx.Eip & 0xff000000) == 0x77000000)
-           try_to_debug ();
-#endif
-         sigproc_printf ("suspending mainthread PC %p", cx.Eip);
+      cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
+      if (!GetThreadContext (hth, &cx))
+       memset (&cx, 0, sizeof cx);
+      sigproc_printf ("suspending mainthread PC %p", cx.Eip);
 #endif
-         res = SuspendThread (hth);
-         /* Just release the lock now since we hav suspended the main thread and it
-            definitely can't be grabbing it now.  This will have to change, of course,
-            if/when we can send signals to other than the main thread. */
-         LeaveCriticalSection (&mainthread.lock);
-
-         /* Just set pending if thread is already suspended */
-         if (res)
-           {
-             mainthread.release_winapi_lock ();
-             (void) ResumeThread (hth);
-             break;
-           }
+      res = SuspendThread (hth);
+      /* Just release the lock now since we hav suspended the main thread and it
+        definitely can't be grabbing it now.  This will have to change, of course,
+        if/when we can send signals to other than the main thread. */
 
-         mainthread.release_winapi_lock ();
-         if (mainthread.frame)
-           goto resume_thread; /* We just got the frame.  What are the odds?
-                                  Just loop and we'll hopefully pick it up on
-                                  the next pass through. */
-
-         muto *m;
-         /* FIXME: Make multi-thread aware */
-         for (m = muto_start.next;  m != NULL; m = m->next)
-           if (m->unstable () || m->owner () == mainthread.id)
-             {
-               sigproc_printf ("suspended thread owns a muto (%s)", m->name);
-               goto resume_thread;
-             }
-
-         if (mainthread.frame)
-           th = &mainthread;
-         else
-           {
-             cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
-             if (!GetThreadContext (hth, &cx))
-               {
-                 system_printf ("couldn't get context of main thread, %E");
-                 goto resume_thread;
-               }
-           }
-       }
-
-      if (th)
+      /* Just set pending if thread is already suspended */
+      if (res)
        {
-         interrupted = interrupt_on_return (th, sig, handler, siga);
-         LeaveCriticalSection (&th->lock);
+         (void) ResumeThread (hth);
+         break;
        }
+
+      // FIXME - add check for reentering of DLL here
+
+      muto *m;
+      /* FIXME: Make multi-thread aware */
+      for (m = muto_start.next;  m != NULL; m = m->next)
+       if (m->unstable () || m->owner () == cygthread::main_thread_id)
+         {
+           sigproc_printf ("suspended thread owns a muto (%s)", m->name);
+           goto resume_thread;
+         }
+
+      cx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
+      if (!GetThreadContext (hth, &cx))
+       system_printf ("couldn't get context of main thread, %E");
       else if (interruptible (cx.Eip))
-       interrupted = interrupt_now (&cx, sig, handler, siga);
+       interrupted = tls->interrupt_now (&cx, sig, handler, siga);
 
     resume_thread:
-      if (hth)
-       res = ResumeThread (hth);
+      res = ResumeThread (hth);
 
       if (interrupted)
        break;
-
       sigproc_printf ("couldn't interrupt.  trying again.");
+      low_priority_sleep (0);
     }
 
 out:
@@ -921,7 +906,7 @@ ctrl_c_handler (DWORD type)
             window station, one which actually represents a visible desktop.
             If not, the CTRL_LOGOFF_EVENT doesn't concern this process. */
          if (has_visible_window_station ())
-           sig_send (NULL, SIGHUP);
+           sig_send (myself_nowait, SIGHUP);
          return FALSE;
        }
     }
@@ -954,14 +939,19 @@ ctrl_c_handler (DWORD type)
   return TRUE;
 }
 
+/* Function used by low level sig wrappers. */
+extern "C" void __stdcall
+set_process_mask (sigset_t newmask)
+{
+  set_signal_mask (newmask);
+}
+
 /* Set the signal mask for this process.
    Note that some signals are unmaskable, as in UNIX.  */
 extern "C" void __stdcall
-set_process_mask (sigset_t newmask)
+set_signal_mask (sigset_t newmask, sigset_t& oldmask)
 {
-  sigframe thisframe (mainthread);
   mask_sync->acquire (INFINITE);
-  sigset_t oldmask = myself->getsigmask ();
   newmask &= ~SIG_NONMASKABLE;
   sigproc_printf ("old mask = %x, new mask = %x", myself->getsigmask (), newmask);
   myself->setsigmask (newmask);        // Set a new mask
@@ -969,13 +959,21 @@ set_process_mask (sigset_t newmask)
   if (oldmask & ~newmask)
     sig_dispatch_pending ();
   else
-    sigproc_printf ("not calling sig_dispatch_pending.  sigtid %p current %p",
-                   sigtid, GetCurrentThreadId ());
+    sigproc_printf ("not calling sig_dispatch_pending");
   return;
 }
 
+_threadinfo *
+find_tls (int sig)
+{
+  for (_threadinfo *t = _last_thread; t ; t = t->prev)
+    if (sigismember (&t->sigwait_mask, sig))
+      return t;
+  return NULL;
+}
+
 int __stdcall
-sig_handle (int sig, sigset_t mask)
+sig_handle (int sig, sigset_t mask, int pid, _threadinfo *tls)
 {
   if (sig == SIGCONT)
     {
@@ -991,26 +989,33 @@ sig_handle (int sig, sigset_t mask)
        SetEvent (sigCONT);
     }
 
+  int rc = 1;
+  bool insigwait_mask = tls ? sigismember (&tls->sigwait_mask, sig) : false;
   if (sig != SIGKILL && sig != SIGSTOP
-      && (sigismember (&mask, sig) || main_vfork->pid
+      && (sigismember (&mask, sig)
+         || (tls
+             && (insigwait_mask || sigismember (&tls->sigmask, sig)))
+         || main_vfork->pid
          || ISSTATE (myself, PID_STOPPED)))
     {
       sigproc_printf ("signal %d blocked", sig);
-      return -1;
+      if (insigwait_mask || (tls = find_tls (sig)) != NULL)
+       goto thread_specific;
+      rc = -1;
+      goto done;
     }
 
-  int rc = 1;
+  /* Clear pending SIGCONT on stop signals */
+  if (sig == SIGSTOP || sig == SIGTSTP || sig == SIGTTIN || sig == SIGTTOU)
+    sig_clear (SIGCONT);
 
   sigproc_printf ("signal %d processing", sig);
   struct sigaction thissig = myself->getsig (sig);
-  void *handler = (void *) thissig.sa_handler;
+  void *handler;
+  handler = (void *) thissig.sa_handler;
 
   myself->rusage_self.ru_nsignals++;
 
-  /* Clear pending SIGCONT on stop signals */
-  if (sig == SIGSTOP || sig == SIGTSTP || sig == SIGTTIN || sig == SIGTTOU)
-    sig_clear (SIGCONT);
-
   if (sig == SIGKILL)
     goto exit_sig;
 
@@ -1025,6 +1030,8 @@ sig_handle (int sig, sigset_t mask)
 
   if (handler == (void *) SIG_DFL)
     {
+      if (insigwait_mask)
+       goto thread_specific;
       if (sig == SIGCHLD || sig == SIGIO || sig == SIGCONT || sig == SIGWINCH
          || sig == SIGURG)
        {
@@ -1059,12 +1066,18 @@ stop:
 dosig:
   /* Dispatch to the appropriate function. */
   sigproc_printf ("signal %d, about to call %p", sig, handler);
-  rc = setup_handler (sig, handler, thissig);
+  rc = setup_handler (sig, handler, thissig, tls ?: _main_tls);
 
 done:
   sigproc_printf ("returning %d", rc);
   return rc;
 
+thread_specific:
+  tls->sig = sig;
+  sigproc_printf ("releasing sigwait for thread");
+  SetEvent (tls->event);
+  goto done;
+
 exit_sig:
   if (sig == SIGQUIT || sig == SIGABRT)
     {
@@ -1102,7 +1115,7 @@ signal_exit (int rc)
   /* Unlock any main thread mutos since we're executing with prejudice. */
   muto *m;
   for (m = muto_start.next;  m != NULL; m = m->next)
-    if (m->unstable () || m->owner () == mainthread.id)
+    if (m->unstable () || m->owner () == cygthread::main_thread_id)
       m->reset ();
 
   user_data->resourcelocks->Delete ();
@@ -1149,7 +1162,6 @@ events_init (void)
   windows_system_directory_length = end - windows_system_directory;
   debug_printf ("windows_system_directory '%s', windows_system_directory_length %d",
                windows_system_directory, windows_system_directory_length);
-  debug_printf ("cygwin_hmodule %p", cygwin_hmodule);
   InitializeCriticalSection (&exit_lock);
 }
 
@@ -1160,114 +1172,39 @@ events_terminate (void)
 }
 
 extern "C" {
-static int __stdcall
+int __stdcall
 call_signal_handler_now ()
 {
-  if (!sigsave.sig)
+  int sa_flags = 0;
+  while (_my_tls.sig && _my_tls.stackptr > _my_tls.stack)
     {
-      sigproc_printf ("call_signal_handler_now called when no signal active");
-      return 0;
+      sa_flags = _my_tls.sa_flags;
+      int sig = _my_tls.sig;
+      void (*sigfunc) (int) = _my_tls.func;
+      (void) _my_tls.pop ();
+#ifdef DEBUGGING
+      if (_my_tls.stackptr > (_my_tls.stack + 1))
+       try_to_debug ();
+#endif
+      reset_signal_arrived ();
+      sigset_t oldmask = _my_tls.oldmask;
+      int this_errno = _my_tls.saved_errno;
+      set_process_mask (_my_tls.newmask);
+      _my_tls.sig = 0;
+      sigfunc (sig);
+      set_process_mask (oldmask);
+      if (this_errno >= 0)
+       set_errno (this_errno);
     }
 
-  int sa_flags = sigsave.sa_flags;
-  sigproc_printf ("sa_flags %p", sa_flags);
-  *sigsave.retaddr_on_stack = sigsave.retaddr;
-  sigdelayed0 ();
   return sa_flags & SA_RESTART;
 }
-/* This kludge seems to keep a copy of call_signal_handler_now around
-   even when compiling with -finline-functions. */
-static int __stdcall call_signal_handler_now_dummy ()
-  __attribute__((alias ("call_signal_handler_now")));
-};
-
-int
-sigframe::call_signal_handler ()
-{
-  return unregister () ? call_signal_handler_now () : 0;
-}
 
 #define pid_offset (unsigned)(((_pinfo *)NULL)->pid)
-extern "C" {
 void __stdcall
 reset_signal_arrived ()
 {
   (void) ResetEvent (signal_arrived);
   sigproc_printf ("reset signal_arrived");
 }
-
-#undef errno
-#define errno ((DWORD volatile) _impure_ptr) + (((char *) &_impure_ptr->_errno) - ((char *) _impure_ptr))
-
-__attribute__((const, used, noinline)) static void
-unused_sig_wrapper ()
-{
-/* Signal cleanup stuff.  Cleans up stack (too bad that we didn't
-   prototype signal handlers as __stdcall), calls _set_process_mask
-   to restore any mask, restores any potentially clobbered registers
-   and returns to original caller. */
-__asm__ volatile ("\n\
-       .text                                                           \n\
-_sigreturn:                                                            \n\
-       addl    $4,%%esp        # Remove argument                       \n\
-       call    _set_process_mask@4                                     \n\
-                                                                       \n\
-       cmpl    $0,%4           # Did a signal come in?                 \n\
-       jz      1f              # No, if zero                           \n\
-       movl    %2,%%eax                                                \n\
-       movl    %8,%%ebx        # Where return address lives            \n\
-       movl    %%eax,(%%ebx)   # Restore return address of             \n\
-                               # most recent caller                    \n\
-       jmp     3f                                                      \n\
-                                                                       \n\
-1:     popl    %%eax           # saved errno                           \n\
-       testl   %%eax,%%eax     # Is it < 0                             \n\
-       jl      2f              # yup.  ignore it                       \n\
-       movl    %1,%%ebx                                                \n\
-       movl    %%eax,(%%ebx)                                           \n\
-2:     popl    %%eax                                                   \n\
-       popl    %%ebx                                                   \n\
-       popl    %%ecx                                                   \n\
-       popl    %%edx                                                   \n\
-       popl    %%edi                                                   \n\
-       popl    %%esi                                                   \n\
-       popf                                                            \n\
-       popl    %%ebp                                                   \n\
-       ret                                                             \n\
-                                                                       \n\
-__no_sig_start:                                                                \n\
-_sigdelayed:                                                           \n\
-       pushl   %2                      # original return address       \n\
-_sigdelayed0:                                                          \n\
-       pushl   %%ebp                                                   \n\
-       movl    %%esp,%%ebp                                             \n\
-       pushf                                                           \n\
-       pushl   %%esi                                                   \n\
-       pushl   %%edi                                                   \n\
-       pushl   %%edx                                                   \n\
-       pushl   %%ecx                                                   \n\
-       pushl   %%ebx                                                   \n\
-       pushl   %%eax                                                   \n\
-       pushl   %6                      # saved errno                   \n\
-3:     pushl   %3                      # oldmask                       \n\
-       pushl   %4                      # signal argument               \n\
-       pushl   $_sigreturn                                             \n\
-                                                                       \n\
-       call    _reset_signal_arrived@0                                 \n\
-       pushl   %5                      # signal number                 \n\
-       pushl   %7                      # newmask                       \n\
-                                                                       \n\
-       call    _set_process_mask@4                                     \n\
-       movl    $0,%0                   # zero the signal number as a   \n\
-                                       # flag to the signal handler thread\n\
-                                       # that it is ok to set up sigsave\n\
-       popl    %%eax                                                   \n\
-       jmp     *%%eax                                                  \n\
-__no_sig_end:                                                          \n\
-" : "=m" (sigsave.sig)/*0*/:  "X" ((char *) &_impure_ptr->_errno)/*1*/,
-  "g" (sigsave.retaddr)/*2*/, "g" (sigsave.oldmask)/*3*/, "g" (sigsave.sig)/*4*/,
-    "g" (sigsave.func)/*5*/, "g" (sigsave.saved_errno)/*6*/, "g" (sigsave.newmask)/*7*/,
-    "g" (sigsave.retaddr_on_stack)/*8*/
-);
-}
 }
index cfe5528..c209104 100644 (file)
@@ -1,6 +1,6 @@
 /* external.cc: Interface to Cygwin internals from external programs.
 
-   Copyright 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+   Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
 
    Written by Christopher Faylor <cgf@cygnus.com>
 
index 12881bd..afd5ffd 100644 (file)
@@ -320,7 +320,6 @@ bool
 fhandler_base::device_access_denied (int flags)
 {
   int mode = 0;
-  int access_worker (path_conv&, int);
 
   if (flags & O_RDWR)
     mode |= R_OK | W_OK;
index 00f296b..309f3df 100644 (file)
@@ -634,7 +634,6 @@ fork ()
   } grouped;
 
   MALLOC_CHECK;
-  sigframe thisframe (mainthread);
 
   debug_printf ("entering");
   grouped.hParent = grouped.first_dll = NULL;
@@ -688,7 +687,6 @@ vfork ()
 #ifndef NEWVFORK
   return fork ();
 #else
-  sigframe thisframe;
   vfork_save *vf = get_vfork_val ();
   char **esp, **pp;
 
@@ -697,12 +695,14 @@ vfork ()
   else if (vf->pid)
     return fork ();
 
+  // FIXME the tls stuff could introduce a signal race if a child process
+  // exits quickly.
   if (!setjmp (vf->j))
     {
       vf->pid = -1;
       __asm__ volatile ("movl %%esp,%0": "=r" (vf->vfork_esp):);
       __asm__ volatile ("movl %%ebp,%0": "=r" (vf->vfork_ebp):);
-      for (pp = (char **)vf->frame, esp = vf->vfork_esp;
+      for (pp = (char **) vf->frame, esp = vf->vfork_esp;
           esp <= vf->vfork_ebp + 2; pp++, esp++)
        *pp = *esp;
       vf->ctty = myself->ctty;
@@ -710,16 +710,17 @@ vfork ()
       vf->pgid = myself->pgid;
       int res = cygheap->fdtab.vfork_child_dup () ? 0 : -1;
       debug_printf ("%d = vfork()", res);
+      call_signal_handler_now (); // FIXME: racy
+      vf->tls = _my_tls;
       return res;
     }
 
   vf = get_vfork_val ();
 
-  for (pp = (char **)vf->frame, esp = vf->vfork_esp;
+  for (pp = (char **) vf->frame, esp = vf->vfork_esp;
        esp <= vf->vfork_ebp + 2; pp++, esp++)
     *esp = *pp;
 
-  thisframe.init (mainthread);
   cygheap->fdtab.vfork_parent_restore ();
 
   myself->ctty = vf->ctty;
@@ -738,6 +739,9 @@ vfork ()
   vf->pid = 0;
   debug_printf ("exiting vfork, pid %d", pid);
   sig_dispatch_pending ();
+
+  call_signal_handler_now (); // FIXME: racy
+  _my_tls = vf->tls;
   return pid;
 #endif
 }
diff --git a/winsup/cygwin/gendef b/winsup/cygwin/gendef
new file mode 100755 (executable)
index 0000000..df810cb
--- /dev/null
@@ -0,0 +1,223 @@
+#!/usr/bin/perl
+use strict;
+my $in = shift;
+my $tls_offsets = shift;
+my $out = shift;
+my $sigfe = shift;
+
+$main::first = 0;
+if (!defined($in) || !defined($out) || !defined($sigfe)) {
+    die "usage: $0 deffile.in cygtls.h deffile.def sigfe.s\n";
+}
+
+require $tls_offsets;
+
+open(IN, $in) or die "$0: couldn't open \"$in\" - $!\n";
+my @top = ();
+while (<IN>) {
+    push(@top, $_);
+    last if /^\s*exports\s*$/i;
+}
+my $libline = <IN>;
+my @in = <IN>;
+close(IN);
+
+my %sigfe = ();
+my @data = ();
+my @nosigfuncs = ();
+my @out = ();
+for (@in) {
+    /\sDATA$/o and do {
+       push(@data, $_);
+       next;
+    };
+    chomp;
+    if (/=/o) {
+       if (s/\s+NOSIGFE\s*$//) {
+       } elsif (s/ SIGFE$//) {
+         my $func = (split(' '))[2];
+         $sigfe{$func} = '_sigfe_' . $func;
+       }
+    } else {
+       my ($func, $sigfe) = m%^\s*(\S+)(?:\s+((?:NO)?SIGR?FE))?$%o;
+       if (defined($sigfe) && $sigfe =~ /^NO/o) {
+           $_ = $func;
+       } else {
+           $sigfe ||= 'sigfe';
+           $_ = '_' . lc($sigfe) . '_' . $func;
+           $sigfe{$func} = $_;
+           $_ = $func . ' = ' . $_;
+       }
+    }
+    s/(\S)\s+(\S)/$1 $2/go;
+    s/(\S)\s+$/$1/o;
+    s/^\s+(\S)/$1/o;
+    push(@out, $_ . "\n");
+}
+
+for (@out) {
+    my ($alias, $func) = /^(\S+) = (\S+)\s*$/o;
+    $_ = $alias . ' = ' . $sigfe{$func} . "\n"
+      if defined($func) && $sigfe{$func};
+}
+open(OUT, '>', $out) or die "$0: couldn't open \"$out\" - $!\n";
+print OUT @top, @data, @out;
+close OUT;
+
+open(SIGFE, '>', $sigfe) or die "$0: couldn't open sigfe file \"$sigfe\" - $!\n";
+
+for my $k (sort keys %sigfe) {
+    print SIGFE fefunc($k, $sigfe{$k});
+}
+close SIGFE;
+
+sub fefunc {
+    my $func = '_' . shift;
+    my $fe = '_' . shift;
+    my $extra;
+    my $res = <<EOF;
+       .extern _siglist_index
+       .extern _siglist
+       .extern $func
+       .global $fe
+$fe:
+       pushl   \$$func
+       jmp     __sigfe
+
+EOF
+    if (!$main::first++) {
+       $res = <<EOF . longjmp () . $res;
+       .text
+       .global __sigbe
+       .global _sigreturn
+       .global _sigdelayed
+
+       .stabs  "_sigfe:F(0,1)",36,0,0,__sigbe
+__sigfe:
+       pushl   %edx
+       movl    %fs:4,%eax
+       movl    \$4,%edx
+       xadd    %edx,$tls::stackptr(%eax)
+       leal    __sigbe,%eax
+       xchg    %eax,8(%esp)
+       movl    %eax,(%edx)
+       popl    %edx
+       ret
+
+       .stabs  "_sigbe:F(0,1)",36,0,0,__sigbe
+__sigbe:
+       pushl   %eax
+       pushl   %edx
+       movl    \$-4,%edx
+1:     movl    %fs:4,%eax
+       xadd    %edx,$tls::stackptr(%eax)
+       xorl    %eax,%eax
+       lock    xchg %eax,-4(%edx)
+       testl   %eax,%eax
+       jnz     2f
+       call    _low_priority_sleep
+       xorl    %edx,%edx
+       jmp     1b
+2:     xchg    %eax,4(%esp)
+       popl    %edx
+       ret
+
+       .stabs  "sigreturn:F(0,1)",36,0,0,_sigreturn
+_sigreturn:
+       addl    \$4,%esp                        # Remove argument
+       call    _set_process_mask\@4
+
+       movl    %fs:4,%eax
+
+       cmpl    \$0,$tls::sig(%eax)     # Did a signal come in?
+       jnz     3f                      # Yes, if non-zero
+
+1:     popl    %edx                    # saved errno
+       testl   %edx,%edx               # Is it < 0
+       jl      2f                      # yup.  ignore it
+       movl    $tls::errno_addr(%eax),%eax
+       movl    %edx,(%eax)
+2:     popl    %eax
+       popl    %ebx
+       popl    %ecx
+       popl    %edx
+       popl    %edi
+       popl    %esi
+       popf
+       popl    %ebp
+       jmp     __sigbe
+
+       .stabs  "sigdelayed:F(0,1)",36,0,0,_sigdelayed
+_sigdelayed:
+       pushl   %ebp
+       movl    %esp,%ebp
+       pushf
+       pushl   %esi
+       pushl   %edi
+       pushl   %edx
+       pushl   %ecx
+       pushl   %ebx
+       pushl   %eax
+       movl    %fs:4,%ebx
+       pushl   $tls::saved_errno(%ebx) # saved errno
+3:     pushl   $tls::oldmask(%ebx)     # oldmask
+       pushl   $tls::sig(%ebx)         # signal argument
+       pushl   \$_sigreturn
+
+       call    _reset_signal_arrived\@0
+       pushl   $tls::func(%ebx)        # signal func
+       pushl   $tls::newmask(%ebx)     # newmask - eaten by set_process_mask
+
+       call    _set_process_mask\@4
+       movl    \$0,$tls::sig(%ebx)     # zero the signal number as a
+                                       # flag to the signal handler thread
+                                       # that it is ok to set up sigsave
+       popl    %ebx
+       jmp     *%ebx
+
+EOF
+    }
+    return $res;
+}
+
+sub longjmp {
+    return <<EOF;
+
+       .globl  _longjmp
+
+_longjmp:
+       pushl   %ebp
+       movl    %esp,%ebp
+       movl    8(%ebp),%edi
+       movl    12(%ebp),%eax
+       testl   %eax,%eax
+       jne     0f
+       incl    %eax
+0:
+       movl    %eax,0(%edi)
+       movl    24(%edi),%ebp
+       pushfl
+       popl    %ebx
+       movw    42(%edi),%ax
+       movw    %ax,%ss
+       movl    28(%edi),%esp
+       pushl   32(%edi)
+       pushl   %ebx
+       movw    36(%edi),%ax
+       movw    %ax,%es
+       movw    40(%edi),%ax
+       movw    %ax,%gs
+       movl    %fs:4,%eax
+       leal    ($tls::stack)(%eax),%edx
+       movl    %edx,($tls::stackptr)(%eax)
+       movl    0(%edi),%eax
+       movl    4(%edi),%ebx
+       movl    8(%edi),%ecx
+       movl    12(%edi),%edx
+       movl    16(%edi),%esi
+       movl    20(%edi),%edi
+       popfl
+       ret
+
+EOF
+}
index 0b2271e..cd7a53b 100755 (executable)
@@ -73,7 +73,13 @@ for (my $i = 0; $i < @lines; $i++) {
        redo;
     };
 }
-open(OUTPUT, '>', $output) or die "$0: couldn't open $output - $!\n";
+open(OUTPUT, '>', $output) or do {{
+    if (chmod(0664, $output)) {
+       open(OUTPUT, '>', $output);
+       last;
+    }
+    die "$0: couldn't open $output - $!\n";
+}};
 print OUTPUT @lines;
 close OUTPUT;
 
diff --git a/winsup/cygwin/gentls_offsets b/winsup/cygwin/gentls_offsets
new file mode 100755 (executable)
index 0000000..fe5fab9
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/perl -s
+my $tls = shift;
+my $tls_out = shift;
+open(TLS, $tls) or die "$0: couldn't open tls file \"$tls\" - $!\n";
+my $struct = '';
+my @fields = ();
+my $def = '';
+while (<TLS>) {
+    next if $struct && (!/gentls_offsets/o && /\(/o);
+    $def .= $_ if $struct;
+    last if /^};/o;
+    /^\s*typedef/o and do {
+       $def .= $_ ;
+       next;
+    };
+    if (!s/;.*$//o) {
+       if (!$struct && /^\s*(?:struct|class)\s*([a-z_0-9]+)/o) {
+           $def .= $_;
+           $struct = $1 
+       }
+       next;
+    }
+    s%/\*\s*gentls_offsets.*/\*\s*gentls_offsets\s*\*/%%og;
+    s/(?:\[[^\]]*\]|struct|class)//o;
+    s/^\s+\S+\s+//o;
+    s/[\*\s()]+//go;
+    for my $f (split(/,/)) {
+       push(@fields, $f);
+    }
+}
+close TLS;
+open(TMP, '>', "/tmp/$$.cc") or die "$0: couldn't open temporary index file \"/tmp/$$.c\" - $!\n";
+print TMP <<EOF;
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+typedef void *HANDLE;
+$def
+int
+main(int argc, char **argv)
+{
+  $struct foo[1];
+# define foo_end ((char *) (foo + 1))
+# define offset(f) (((char *) &(foo->f)) - foo_end)
+EOF
+    print TMP 'puts ("//;# autogenerated:  Do not edit.\n");', "\n\n";
+    for my $f (@fields) {
+       print TMP '  printf ("//; $tls::', $f, ' = %d;\n", ', "offset($f));\n";
+    }
+    print TMP '  puts ("//; __DATA__\n");', "\n";
+    for my $f (@fields) {
+       print TMP '  printf ("#define tls_', $f, ' (%d)\n", ', "offset($f));\n";
+    }
+
+    print TMP <<EOF;
+
+  exit (0);
+}
+EOF
+close TMP;
+system @ARGV, '-o', "/tmp/$$-1.cc", '-E', "/tmp/$$.cc";
+system 'g++', '-o', "/tmp/$$.a.out", "/tmp/$$-1.cc" and
+($? == 127 && system 'c++',  '-o', "/tmp/$$.a.out", "/tmp/$$-1.cc") and
+die "$0: couldn't generate executable for offset calculation \"/tmp/$$.a.out\" - $!\n";
+open(TLS_OUT, '>', $tls_out) or die "$0: couldn't open tls index file \"tls_out\" - $!\n";
+open(OFFS, "/tmp/$$.a.out|") or die "$0: couldn't run \"/tmp/$$.a.out\" - $!\n";
+print TLS_OUT <OFFS>;
+close OFFS;
+close TLS_OUT;
+# unlink "/tmp/$$.cc", "/tmp/$$.a.out";
+exit(0);
index 1bbac31..95d9b17 100644 (file)
@@ -97,7 +97,6 @@ heap_init ()
 extern "C" void *
 sbrk (int n)
 {
-  sigframe thisframe (mainthread);
   char *newtop, *newbrk;
   unsigned commitbytes, newbrksize;
 
index 3b36bad..aab65f6 100644 (file)
@@ -1,5 +1,6 @@
 Copyright 2001 Red Hat Inc., Christopher Faylor
 
+[this information is currently obsolete -- sorry]
 How do signals work?
 
 On process startup, cygwin starts a secondary thread that deals with signals.
index bea535e..52ddb5b 100644 (file)
@@ -229,13 +229,13 @@ details. */
       102: CW_GET_UID_FROM_SID and CW_GET_GID_FROM_SID addition to external.cc.
       103: Export getprogname, setprogname.
       104: Export msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop.
-
+      105: Export sigwait.
      */
 
      /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
 
 #define CYGWIN_VERSION_API_MAJOR 0
-#define CYGWIN_VERSION_API_MINOR 104
+#define CYGWIN_VERSION_API_MINOR 105
 
      /* There is also a compatibity version number associated with the
        shared memory regions.  It is incremented when incompatible
index 49d9b68..92fa56b 100644 (file)
@@ -149,6 +149,7 @@ struct name {                                                               \
 #define        SLIST_HEAD_INITIALIZER(head)                                    \
        { NULL }
 
+#undef SLIST_ENTRY
 #define        SLIST_ENTRY(type)                                               \
 struct {                                                               \
        struct type *sle_next;  /* next element */                      \
index f740dce..7a5e65c 100644 (file)
@@ -1,6 +1,6 @@
 /* init.cc
 
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -12,6 +12,7 @@ details. */
 #include <stdlib.h>
 #include "thread.h"
 #include "perprocess.h"
+#include "cygtls.h"
 
 int NO_COPY dynamically_loaded;
 
@@ -21,17 +22,18 @@ WINAPI dll_entry (HANDLE h, DWORD reason, void *static_load)
   switch (reason)
     {
     case DLL_PROCESS_ATTACH:
-      cygwin_hmodule = (HMODULE) h;
+      _my_tls.stackptr = _my_tls.stack;
       dynamically_loaded = (static_load == NULL);
       break;
     case DLL_PROCESS_DETACH:
       break;
     case DLL_THREAD_ATTACH:
+      _my_tls.stackptr = _my_tls.stack;
       if (MT_INTERFACE->reent_key.set (&MT_INTERFACE->reents))
            api_fatal ("thread initialization failed");
       break;
     case DLL_THREAD_DETACH:
-      /* not invoked */;
+      _my_tls.remove ();
       break;
     }
   return 1;
index 3991790..bd9b3ca 100644 (file)
@@ -1,6 +1,6 @@
 /* ioctl.cc: ioctl routines.
 
-   Copyright 1996, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+   Copyright 1996, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
 
    Written by Doug Evans of Cygnus Support
    dje@cygnus.com
@@ -25,7 +25,6 @@ details. */
 extern "C" int
 ioctl (int fd, int cmd, ...)
 {
-  sigframe thisframe (mainthread);
 
   cygheap_fdget cfd (fd);
   if (cfd < 0)
index 5fdef4d..8d0c5b3 100644 (file)
@@ -302,7 +302,7 @@ sys_mbstowcs (WCHAR *tgt, const char *src, int len)
   return MultiByteToWideChar (get_cp (), 0, src, -1, tgt, len);
 }
 
-extern "C" int __stdcall
+extern "C" int
 low_priority_sleep (DWORD secs)
 {
   HANDLE thisthread = GetCurrentThread ();
index fe67978..a553345 100644 (file)
@@ -39,9 +39,9 @@ static fhandler_disk_file fh_paging_file;
    for duplicating all mmaps after fork() since mmaps are not propagated
    to child processes by Windows.  All information must be duplicated
    by hand, see fixup_mmaps_after_fork().
-  
+
    The class structure:
-  
+
    One member of class map per process, global variable mmapped_areas.
    Contains a dynamic class list array.  Each list entry represents all
    mapping to a file, keyed by file descriptor and file name hash.
@@ -318,13 +318,13 @@ list::add_record (mmap_record r, _off64_t off, DWORD len)
     {
       mmap_record *new_recs;
       if (maxrecs == 0)
-        new_recs = (mmap_record *)
+       new_recs = (mmap_record *)
                        cmalloc (HEAP_MMAP, 5 * sizeof (mmap_record));
       else
        new_recs = (mmap_record *)
                        crealloc (recs, (maxrecs + 5) * sizeof (mmap_record));
       if (!new_recs)
-        return NULL;
+       return NULL;
       maxrecs += 5;
       recs = new_recs;
     }
@@ -425,11 +425,11 @@ map::add_list (int fd)
     {
       list *new_lists;
       if (maxlists == 0)
-        new_lists = (list *) cmalloc (HEAP_MMAP, 5 * sizeof (list));
+       new_lists = (list *) cmalloc (HEAP_MMAP, 5 * sizeof (list));
       else
        new_lists = (list *) crealloc (lists, (maxlists + 5) * sizeof (list));
       if (!new_lists)
-        return NULL;
+       return NULL;
       maxlists += 5;
       lists = new_lists;
     }
@@ -444,7 +444,7 @@ map::del_list (int i)
     {
       lists[i].free_recs ();
       for (; i < nlists - 1; i++)
-        lists[i] = lists[i + 1];
+       lists[i] = lists[i + 1];
       nlists--;
     }
 }
@@ -668,16 +668,16 @@ munmap (void *addr, size_t len)
       DWORD u_len;
 
       while ((record_idx = map_list->search_record((caddr_t)addr, len, u_addr,
-                                                  u_len, record_idx)) >= 0)
+                                                  u_len, record_idx)) >= 0)
        {
          mmap_record *rec = map_list->get_record (record_idx);
          if (rec->unmap_pages (u_addr, u_len))
            {
              /* The whole record has been unmapped, so we now actually
-                unmap it from the system in full length... */
+                unmap it from the system in full length... */
              fhandler_base *fh = rec->alloc_fh ();
              fh->munmap (rec->get_handle (),
-                         rec->get_address (),
+                         rec->get_address (),
                          rec->get_size ());
              rec->free_fh (fh);
 
@@ -735,7 +735,7 @@ msync (void *addr, size_t len, int flags)
     {
       mmap_record *rec;
       for (int record_idx = 0;
-          (rec = map_list->get_record (record_idx));
+          (rec = map_list->get_record (record_idx));
           ++record_idx)
        {
          if (rec->access ((caddr_t)addr))
@@ -746,7 +746,7 @@ msync (void *addr, size_t len, int flags)
                  goto invalid_address_range;
              fhandler_base *fh = rec->alloc_fh ();
              int ret = fh->msync (rec->get_handle (), (caddr_t)addr, len,
-                                  flags);
+                                  flags);
              rec->free_fh (fh);
 
              if (ret)
@@ -1012,7 +1012,7 @@ fixup_mmaps_after_fork (HANDLE parent)
     {
       mmap_record *rec;
       for (int record_idx = 0;
-          (rec = map_list->get_record (record_idx));
+          (rec = map_list->get_record (record_idx));
           ++record_idx)
        {
 
index 9b842b8..7e80f66 100644 (file)
@@ -98,7 +98,6 @@ extern "C" int
 msgctl (int msqid, int cmd, struct msqid_ds *buf)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("msgctl (msqid = %d, cmd = 0x%x, buf = %p)",
                  msqid, cmd, buf);
   switch (cmd)
@@ -153,7 +152,6 @@ extern "C" int
 msgget (key_t key, int msgflg)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("msgget (key = %U, msgflg = 0x%x)", key, msgflg);
   client_request_msg request (key, msgflg);
   if (request.make_request () == -1 || request.retval () == -1)
@@ -176,7 +174,6 @@ extern "C" ssize_t
 msgrcv (int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("msgrcv (msqid = %d, msgp = %p, msgsz = %d, "
                  "msgtyp = %d, msgflg = 0x%x)",
                  msqid, msgp, msgsz, msgtyp, msgflg);
@@ -203,7 +200,6 @@ extern "C" int
 msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("msgsnd (msqid = %d, msgp = %p, msgsz = %d, msgflg = 0x%x)",
                  msqid, msgp, msgsz, msgflg);
   if (__check_invalid_read_ptr_errno (msgp, msgsz))
index 835885b..f93c9ef 100644 (file)
@@ -695,7 +695,6 @@ cygwin_sendto (int fd, const void *buf, int len, int flags,
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -719,7 +718,6 @@ cygwin_recvfrom (int fd, void *buf, int len, int flags,
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -876,7 +874,6 @@ cygwin_connect (int fd, const struct sockaddr *name, int namelen)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -950,7 +947,6 @@ extern "C" struct servent *
 cygwin_getservbyname (const char *name, const char *proto)
 {
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (check_null_str_errno (name)
       || (proto != NULL && check_null_str_errno (proto)))
     return NULL;
@@ -969,7 +965,6 @@ extern "C" struct servent *
 cygwin_getservbyport (int port, const char *proto)
 {
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (proto != NULL && check_null_str_errno (proto))
     return NULL;
 
@@ -986,7 +981,6 @@ extern "C" int
 cygwin_gethostname (char *name, size_t len)
 {
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (__check_null_invalid_struct_errno (name, len))
     return -1;
 
@@ -1022,7 +1016,6 @@ cygwin_gethostbyname (const char *name)
   static int a, b, c, d;
 
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (check_null_str_errno (name))
     return NULL;
 
@@ -1063,7 +1056,6 @@ extern "C" struct hostent *
 cygwin_gethostbyaddr (const char *addr, int len, int type)
 {
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (__check_invalid_read_ptr_errno (addr, len))
     return NULL;
 
@@ -1089,7 +1081,6 @@ cygwin_accept (int fd, struct sockaddr *peer, int *len)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -1122,7 +1113,6 @@ cygwin_bind (int fd, const struct sockaddr *my_addr, int addrlen)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   fhandler_socket *fh = get (fd);
 
   if (__check_invalid_read_ptr_errno (my_addr, addrlen) || !fh)
@@ -1140,7 +1130,6 @@ cygwin_getsockname (int fd, struct sockaddr *addr, int *namelen)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -1161,7 +1150,6 @@ cygwin_listen (int fd, int backlog)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   fhandler_socket *fh = get (fd);
 
   if (!fh)
@@ -1179,7 +1167,6 @@ cygwin_shutdown (int fd, int how)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -1245,7 +1232,6 @@ cygwin_getpeername (int fd, struct sockaddr *name, int *len)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -1286,7 +1272,6 @@ getdomainname (char *domain, size_t len)
    * Punt for now and assume MS-TCP on Win95.
    */
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (__check_null_invalid_struct_errno (domain, len))
     return -1;
 
@@ -1900,7 +1885,6 @@ get_ifconf (struct ifconf *ifc, int what)
   struct sockaddr_in *sa;
 
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (check_null_invalid_struct_errno (ifc))
     return -1;
 
@@ -1979,7 +1963,6 @@ cygwin_rcmd (char **ahost, unsigned short inport, char *locuser,
   SOCKET fd2s;
 
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   if (check_null_invalid_struct_errno (ahost) ||
       check_null_empty_str_errno (*ahost) ||
@@ -2032,7 +2015,6 @@ cygwin_rresvport (int *port)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   if (check_null_invalid_struct_errno (port))
     return -1;
@@ -2061,7 +2043,6 @@ cygwin_rexec (char **ahost, unsigned short inport, char *locuser,
   int res = -1;
   SOCKET fd2s;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   if (check_null_invalid_struct_errno (ahost) ||
       check_null_empty_str_errno (*ahost) ||
@@ -2119,7 +2100,6 @@ socketpair (int family, int type, int protocol, int *sb)
   int len;
 
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   if (__check_null_invalid_struct_errno (sb, 2 * sizeof (int)))
     return -1;
 
@@ -2314,7 +2294,6 @@ cygwin_recvmsg (int fd, struct msghdr *msg, int flags)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
@@ -2341,7 +2320,6 @@ cygwin_sendmsg (int fd, const struct msghdr *msg, int flags)
 {
   int res;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   fhandler_socket *fh = get (fd);
 
index 4fe66ac..ea8009a 100644 (file)
@@ -459,7 +459,6 @@ path_conv::check (const char *src, unsigned opt,
   bool saw_symlinks = 0;
   int is_relpath;
   char *tail;
-  sigframe thisframe (mainthread);
 
 #if 0
   static path_conv last_path_conv;
@@ -3337,8 +3336,6 @@ extern "C" int
 fchdir (int fd)
 {
   int res;
-  sigframe thisframe (mainthread);
-
   cygheap_fdget cfd (fd);
   if (cfd >= 0)
     res = chdir (cfd->get_win32_name ());
index cfca5ae..0c3b49b 100644 (file)
@@ -48,6 +48,7 @@ public:
 };
 
 #if defined (NEED_VFORK)
+#include "cygtls.h"
 class vfork_save
 {
   jmp_buf j;
@@ -55,6 +56,7 @@ class vfork_save
  public:
   int pid;
   DWORD frame[100];
+  _threadinfo tls;
   char **vfork_ebp;
   char **vfork_esp;
   int ctty;
@@ -85,29 +87,6 @@ extern per_thread_vfork vfork_storage;
 extern vfork_save *main_vfork;
 #endif
 
-extern "C" {
-struct signal_dispatch
-{
-  int arg;
-  void (*func) (int);
-  int sig;
-  int saved_errno;
-  int sa_flags;
-  DWORD oldmask;
-  DWORD newmask;
-  DWORD retaddr;
-  DWORD *retaddr_on_stack;
-};
-};
-
-struct per_thread_signal_dispatch : public per_thread
-{
-  signal_dispatch *get () { return (signal_dispatch *) per_thread::get (); }
-  signal_dispatch *create () {return (signal_dispatch *) per_thread::create ();}
-  size_t size () {return sizeof (signal_dispatch);}
-};
-
 extern per_thread_waitq waitq_storage;
-extern per_thread_signal_dispatch signal_dispatch_storage;
 
 extern per_thread *threadstuff[];
index faf6b86..b7d4bd5 100644 (file)
@@ -142,7 +142,7 @@ pinfo::init (pid_t n, DWORD flag, HANDLE in_h)
 
   int createit = flag & (PID_IN_USE | PID_EXECED);
   DWORD access = FILE_MAP_READ
-                 | (flag & (PID_IN_USE | PID_EXECED | PID_MAP_RW) ? FILE_MAP_WRITE : 0);
+                | (flag & (PID_IN_USE | PID_EXECED | PID_MAP_RW) ? FILE_MAP_WRITE : 0);
   for (int i = 0; i < 10; i++)
     {
       int created;
@@ -243,14 +243,14 @@ pinfo::set_acl()
 {
   char sa_buf[1024];
   SECURITY_DESCRIPTOR sd;
-  
-  sec_acl ((PACL) sa_buf, true, true, cygheap->user.sid (), 
+
+  sec_acl ((PACL) sa_buf, true, true, cygheap->user.sid (),
           well_known_world_sid, FILE_MAP_READ);
-  if (!InitializeSecurityDescriptor&sd, SECURITY_DESCRIPTOR_REVISION))
-    debug_printf("InitializeSecurityDescriptor %E");
-  else if (!SetSecurityDescriptorDacl(&sd, TRUE, (PACL) sa_buf, FALSE)) 
-    debug_printf("SetSecurityDescriptorDacl %E");
-  else if (!SetKernelObjectSecurity(h, DACL_SECURITY_INFORMATION, &sd))
+  if (!InitializeSecurityDescriptor (&sd, SECURITY_DESCRIPTOR_REVISION))
+    debug_printf ("InitializeSecurityDescriptor %E");
+  else if (!SetSecurityDescriptorDacl (&sd, TRUE, (PACL) sa_buf, FALSE))
+    debug_printf ("SetSecurityDescriptorDacl %E");
+  else if (!SetKernelObjectSecurity (h, DACL_SECURITY_INFORMATION, &sd))
     debug_printf ("SetKernelObjectSecurity %E");
 }
 
index da650ff..8f9bda9 100644 (file)
@@ -32,7 +32,6 @@ poll (struct pollfd *fds, unsigned int nfds, int timeout)
   int max_fd = 0;
   fd_set *read_fds, *write_fds, *except_fds;
   struct timeval tv = { timeout / 1000, (timeout % 1000) * 1000 };
-  sigframe thisframe (mainthread);
 
   for (unsigned int i = 0; i < nfds; ++i)
     if (fds[i].fd > max_fd)
index 48cb56c..7203e0c 100644 (file)
@@ -1,6 +1,6 @@
 /* select.cc
 
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
 
    Written by Christopher Faylor of Cygnus Solutions
    cgf@cygnus.com
@@ -102,7 +102,6 @@ cygwin_select (int maxfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
   fd_set *dummy_readfds = allocfd_set (maxfds);
   fd_set *dummy_writefds = allocfd_set (maxfds);
   fd_set *dummy_exceptfds = allocfd_set (maxfds);
-  sigframe thisframe (mainthread);
 
   select_printf ("%d, %p, %p, %p, %p", maxfds, readfds, writefds, exceptfds, to);
 
@@ -1086,6 +1085,7 @@ fhandler_base::ready_for_read (int fd, DWORD howlong)
 
       if (WaitForSingleObject (signal_arrived, avail ? 0 : 10) == WAIT_OBJECT_0)
        {
+         debug_printf ("interrupted");
          set_sig_errno (EINTR);
          avail = 0;
          break;
index f7823b0..3dfaf42 100644 (file)
@@ -82,7 +82,6 @@ extern "C" int
 semctl (int semid, int semnum, int cmd, ...)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   union semun arg = {0};
   if (cmd == IPC_STAT || cmd == IPC_SET || cmd == IPC_INFO || cmd == SEM_INFO
       || cmd == GETALL || cmd == SETALL || cmd == SETVAL)
@@ -132,7 +131,6 @@ extern "C" int
 semget (key_t key, int nsems, int semflg)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("semget (key = %U, nsems = %d, semflg = 0x%x)",
                  key, nsems, semflg);
   client_request_sem request (key, nsems, semflg);
@@ -156,7 +154,6 @@ extern "C" int
 semop (int semid, struct sembuf *sops, size_t nsops)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("semop (semid = %d, sops = %p, nsops = %d)",
                  semid, sops, nsops);
   if (__check_null_invalid_struct_errno (sops, nsops * sizeof (struct sembuf)))
index 34fb6e1..92ea20f 100644 (file)
@@ -149,7 +149,6 @@ extern "C" void *
 shmat (int shmid, const void *shmaddr, int shmflg)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("shmat (shmid = %d, shmaddr = %p, shmflg = 0x%x)",
                  shmid, shmaddr, shmflg);
 
@@ -226,7 +225,6 @@ extern "C" int
 shmctl (int shmid, int cmd, struct shmid_ds *buf)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("shmctl (shmid = %d, cmd = %d, buf = 0x%x)",
                  shmid, cmd, buf);
   switch (cmd)
@@ -288,7 +286,6 @@ extern "C" int
 shmdt (const void *shmaddr)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("shmget (shmaddr = %p)", shmaddr);
   client_request_shm request (shmaddr);
   if (request.make_request () == -1 || request.retval () == -1)
@@ -324,7 +321,6 @@ extern "C" int
 shmget (key_t key, size_t size, int shmflg)
 {
 #ifdef USE_SERVER
-  sigframe thisframe (mainthread);
   syscall_printf ("shmget (key = %U, size = %d, shmflg = 0x%x)",
                  key, size, shmflg);
   /* Try allocating memory before calling cygserver. */
index 7f6fcbe..9bf9eb0 100644 (file)
@@ -15,9 +15,11 @@ details. */
 #include <stdlib.h>
 #include "cygerrno.h"
 #include <sys/cygwin.h>
-#include "sigproc.h"
 #include "pinfo.h"
+#include "sigproc.h"
 #include "hires.h"
+#include "security.h"
+#include "cygtls.h"
 
 int sigcatchers;       /* FIXME: Not thread safe. */
 
@@ -71,7 +73,6 @@ nanosleep (const struct timespec *rqtp, struct timespec *rmtp)
 {
   int res = 0;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   pthread_testcancel ();
 
   if ((unsigned int) rqtp->tv_sec > (HIRES_DELAY_MAX / 1000 - 1)
@@ -92,7 +93,7 @@ nanosleep (const struct timespec *rqtp, struct timespec *rmtp)
     rem = 0;
   if (rc == WAIT_OBJECT_0)
     {
-      (void) thisframe.call_signal_handler ();
+      (void) call_signal_handler_now ();
       set_errno (EINTR);
       res = -1;
     }
@@ -130,20 +131,33 @@ usleep (unsigned int useconds)
 extern "C" int
 sigprocmask (int sig, const sigset_t *set, sigset_t *oldset)
 {
+  return handle_sigprocmask (sig, set, oldset, myself->getsigmask ());
+}
+
+int __stdcall
+handle_sigprocmask (int sig, const sigset_t *set, sigset_t *oldset, sigset_t& opmask)
+{
   sig_dispatch_pending ();
   /* check that sig is in right range */
   if (sig < 0 || sig >= NSIG)
     {
-      set_errno (EINVAL);
+      set_errno (ESRCH);
       syscall_printf ("SIG_ERR = sigprocmask signal %d out of range", sig);
       return -1;
     }
 
   if (oldset)
-    *oldset = myself->getsigmask ();
+    {
+      if (check_null_invalid_struct_errno (oldset))
+       return -1;
+      *oldset = opmask;
+    }
+
   if (set)
     {
-      sigset_t newmask = myself->getsigmask ();
+      if (check_invalid_read_struct_errno (set))
+       return -1;
+      sigset_t newmask = opmask;
       switch (sig)
        {
        case SIG_BLOCK:
@@ -162,7 +176,7 @@ sigprocmask (int sig, const sigset_t *set, sigset_t *oldset)
          set_errno (EINVAL);
          return -1;
        }
-      (void) set_process_mask (newmask);
+      (void) set_signal_mask (newmask, opmask);
     }
   return 0;
 }
@@ -185,10 +199,7 @@ kill_worker (pid_t pid, int sig)
   if ((sendSIGCONT = (sig < 0)))
     sig = -sig;
 
-#if 0
-  if (dest == myself && !sendSIGCONT)
-    dest = myself_nowait_nonmain;
-#endif
+  DWORD process_state = dest->process_state;
   if (sig == 0)
     {
       res = proc_exists (dest) ? 0 : -1;
@@ -203,7 +214,7 @@ kill_worker (pid_t pid, int sig)
   else if (sendSIGCONT)
     (void) sig_send (dest, SIGCONT);
 
-  syscall_printf ("%d = kill_worker (%d, %d)", res, pid, sig);
+  syscall_printf ("%d = kill_worker (%d, %d), process_state %p", res, pid, sig, process_state);
   return res;
 }
 
@@ -216,7 +227,6 @@ raise (int sig)
 int
 kill (pid_t pid, int sig)
 {
-  sigframe thisframe (mainthread);
   syscall_printf ("kill (%d, %d)", pid, sig);
   /* check that sig is in right range */
   if (sig < 0 || sig >= NSIG)
@@ -241,7 +251,6 @@ kill_pgrp (pid_t pid, int sig)
   int res = 0;
   int found = 0;
   int killself = 0;
-  sigframe thisframe (mainthread);
 
   sigproc_printf ("pid %d, signal %d", pid, sig);
 
@@ -289,7 +298,6 @@ extern "C" void
 abort (void)
 {
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
   /* Flush all streams as per SUSv2.
      From my reading of this document, this isn't strictly correct.
      The streams are supposed to be flushed prior to exit.  However,
@@ -304,10 +312,10 @@ abort (void)
   sigset_t sig_mask;
   sigfillset (&sig_mask);
   sigdelset (&sig_mask, SIGABRT);
-  set_process_mask (sig_mask);
+  set_signal_mask (sig_mask);
 
   raise (SIGABRT);
-  (void) thisframe.call_signal_handler (); /* Call any signal handler */
+  (void) call_signal_handler_now (); /* Call any signal handler */
   do_exit (1); /* signal handler didn't exit.  Goodbye. */
 }
 
@@ -436,11 +444,38 @@ extern "C" int
 siginterrupt (int sig, int flag)
 {
   struct sigaction act;
-  (void)sigaction(sig, NULL, &act);
+  (void) sigaction(sig, NULL, &act);
   if (flag)
     act.sa_flags &= ~SA_RESTART;
   else
     act.sa_flags |= SA_RESTART;
-  return sigaction(sig, &act, NULL);
+  return sigaction (sig, &act, NULL);
 }
 
+
+extern "C" int
+sigwait (const sigset_t *set, int *sig)
+{
+  pthread_testcancel ();
+  _my_tls.event = CreateEvent (&sec_none_nih, FALSE, FALSE, NULL);
+  if (!_my_tls.event)
+    {
+      __seterrno ();
+      return -1;
+    }
+
+  _my_tls.sigwait_mask = *set;
+
+  switch (WaitForSingleObject (_my_tls.event, INFINITE))
+    {
+    case WAIT_OBJECT_0:
+      CloseHandle (_my_tls.event);
+      _my_tls.event = NULL;
+      *sig = InterlockedExchange ((LONG *) &_my_tls.sig, (LONG) 0);
+      break;
+    default:
+      __seterrno ();
+      return -1;
+    }
+  return 0;
+}
index cecbe70..9840004 100644 (file)
@@ -20,6 +20,7 @@ details. */
 #include <sys/signal.h>
 #include "cygerrno.h"
 #include "sync.h"
+#include "cygtls.h"
 #include "sigproc.h"
 #include "pinfo.h"
 #include "security.h"
@@ -37,10 +38,6 @@ details. */
  */
 #define WSSC              60000 // Wait for signal completion
 #define WPSP              40000 // Wait for proc_subproc mutex
-#define WSPX              20000 // Wait for wait_sig to terminate
-#define WWSP              20000 // Wait for wait_subproc to terminate
-
-#define TOTSIGS        (NSIG + __SIGOFFSET)
 
 #define wake_wait_subproc() SetEvent (events[0])
 
@@ -48,9 +45,11 @@ details. */
 
 #define NZOMBIES       256
 
-class sigelem
+struct sigelem
 {
   int sig;
+  int pid;
+  _threadinfo *tls;
   class sigelem *next;
   friend class pending_signals;
   friend int __stdcall sig_dispatch_pending ();
@@ -66,9 +65,9 @@ class pending_signals
   int empty;
 public:
   void reset () {curr = &start; prev = &start;}
-  void add (int sig);
+  void add (int sig, int pid, _threadinfo *tls);
   void del ();
-  int next ();
+  sigelem *next ();
   friend int __stdcall sig_dispatch_pending ();
 };
 
@@ -78,6 +77,7 @@ struct sigpacket
   pid_t pid;
   HANDLE wakeup;
   sigset_t *mask;
+  _threadinfo *tls;
 };
 
 static pending_signals sigqueue;
@@ -112,10 +112,6 @@ int __sp_ln;
 
 char NO_COPY myself_nowait_dummy[1] = {'0'};// Flag to sig_send that signal goes to
                                        //  current process but no wait is required
-char NO_COPY myself_nowait_nonmain_dummy[1] = {'1'};// Flag to sig_send that signal goes to
-                                       //  current process but no wait is required
-                                       //  if this is the main thread.
-
 HANDLE NO_COPY signal_arrived;         // Event signaled when a signal has
                                        //  resulted in a user-specified
                                        //  function call
@@ -244,7 +240,7 @@ get_proc_lock (DWORD what, DWORD val)
 static BOOL __stdcall
 proc_can_be_signalled (_pinfo *p)
 {
-  if (p == myself_nowait || p == myself_nowait_nonmain || p == myself)
+  if (p == myself_nowait || p == myself)
     {
       assert (!wait_sig_inited);
       return 1;
@@ -549,10 +545,10 @@ sig_clear (int target_sig)
     sig_send (myself, -target_sig);
   else
     {
-      int sig;
       sigqueue.reset ();
-      while ((sig = sigqueue.next ()))
-       if (sig == target_sig)
+      sigelem *q;
+      while ((q = sigqueue.next ()))
+       if (q->sig == target_sig)
          {
            sigqueue.del ();
            break;
@@ -578,9 +574,8 @@ sig_dispatch_pending ()
   if (exit_state || GetCurrentThreadId () == sigtid || !sigqueue.start.next)
     return 0;
 
-  sigframe thisframe (mainthread);
   (void) sig_send (myself, __SIGFLUSH);
-  return thisframe.call_signal_handler ();
+  return call_signal_handler_now ();
 }
 
 /* Message initialization.  Called from dll_crt0_1
@@ -654,18 +649,15 @@ sigproc_terminate (void)
  * completed before returning.
  */
 int __stdcall
-sig_send (_pinfo *p, int sig, DWORD ebp, bool exception)
+sig_send (_pinfo *p, int sig, void *tls)
 {
   int rc = 1;
-  DWORD tid = GetCurrentThreadId ();
   BOOL its_me;
   HANDLE sendsig;
-  bool wait_for_completion;
-  sigframe thisframe;
   sigpacket pack;
 
-  if (p == myself_nowait_nonmain)
-    p = (tid == mainthread.id) ? (_pinfo *) myself : myself_nowait;
+  bool wait_for_completion;
+  // FIXMENOW: Avoid using main thread's completion event!
   if (!(its_me = (p == NULL || p == myself || p == myself_nowait)))
     wait_for_completion = false;
   else
@@ -674,7 +666,7 @@ sig_send (_pinfo *p, int sig, DWORD ebp, bool exception)
        goto out;               // Either exiting or not yet initializing
       if (wait_sig_inited)
        wait_for_sigthread ();
-      wait_for_completion = p != myself_nowait;
+      wait_for_completion = p != myself_nowait && _my_tls.isinitialized ();
       p = myself;
     }
 
@@ -695,11 +687,7 @@ sig_send (_pinfo *p, int sig, DWORD ebp, bool exception)
     {
       sendsig = myself->sendsig;
       if (wait_for_completion)
-       {
-         if (tid == mainthread.id)
-           thisframe.init (mainthread, ebp, exception);
-         pack.wakeup = sigcomplete_main;
-       }
+       pack.wakeup = sigcomplete_main;
     }
   else
     {
@@ -735,6 +723,7 @@ sig_send (_pinfo *p, int sig, DWORD ebp, bool exception)
 
   pack.sig = sig;
   pack.pid = myself->pid;
+  pack.tls = (_threadinfo *) tls;
   DWORD nb;
   if (!WriteFile (sendsig, &pack, sizeof (pack), &nb, NULL) || nb != sizeof (pack))
     {
@@ -790,7 +779,7 @@ sig_send (_pinfo *p, int sig, DWORD ebp, bool exception)
     }
 
   if (wait_for_completion)
-    thisframe.call_signal_handler ();
+    call_signal_handler_now ();
 
 out:
   if (sig != __SIGPENDING)
@@ -995,7 +984,7 @@ talktome ()
    has been handled, as per POSIX.  */
 
 void
-pending_signals::add (int sig)
+pending_signals::add (int sig, int pid, _threadinfo *tls)
 {
   sigelem *se;
   for (se = start.next; se; se = se->next)
@@ -1007,6 +996,8 @@ pending_signals::add (int sig)
   se = sigs + empty;
   se->sig = sig;
   se->next = NULL;
+  se->tls = tls;
+  se->pid = pid;
   if (end)
     end->next = se;
   end = se;
@@ -1030,16 +1021,16 @@ pending_signals::del ()
   curr = next;
 }
 
-int
+sigelem *
 pending_signals::next ()
 {
-  int sig;
+  sigelem *res;
   prev = curr;
   if (!curr || !(curr = curr->next))
-    sig = 0;
+    res = NULL;
   else
-    sig = curr->sig;
-  return sig;
+    res = curr;
+  return res;
 }
 
 /* Process signals by waiting for signal data to arrive in a pipe.
@@ -1105,7 +1096,12 @@ wait_sig (VOID *self)
        }
 
       if (!pack.sig)
-       continue;               /* Just checking to see if we exist */
+       {
+#ifdef DEBUGGING
+         system_printf ("zero signal?");
+#endif
+         continue;
+       }
 
       sigset_t dummy_mask;
       if (!pack.mask)
@@ -1114,40 +1110,39 @@ wait_sig (VOID *self)
          pack.mask = &dummy_mask;
        }
 
+      sigelem *q;
       switch (pack.sig)
        {
        case __SIGCOMMUNE:
          talktome ();
-         continue;
+         break;
        case __SIGSTRACE:
          strace.hello ();
-         continue;
+         break;
        case __SIGPENDING:
          *pack.mask = 0;
          unsigned bit;
          sigqueue.reset ();
-         while ((pack.sig = sigqueue.next ()))
-           if (myself->getsigmask () & (bit = SIGTOMASK (pack.sig)))
+         while ((q = sigqueue.next ()))
+           if (myself->getsigmask () & (bit = SIGTOMASK (q->sig)))
              *pack.mask |= bit;
          break;
+       case __SIGFLUSH:
+         sigqueue.reset ();
+         while ((q = sigqueue.next ()))
+           if (sig_handle (q->sig, *pack.mask, q->pid, q->tls) > 0)
+             sigqueue.del ();
+         break;
        default:
          if (pack.sig < 0)
            sig_clear (-pack.sig);
          else
            {
-             int sh;
-             for (int i = 0; !(sh = sig_handle (pack.sig, *pack.mask)) && i < 100 ; i++)
-               low_priority_sleep (0);         // hopefully a temporary condition
-             if (sh <= 0)
-               sigqueue.add (pack.sig);        // FIXME: Shouldn't add this in !sh condition
+             if (sig_handle (pack.sig, *pack.mask, pack.pid, pack.tls) <= 0)
+               sigqueue.add (pack.sig, pack.pid, pack.tls);// FIXME: Shouldn't add this in !sh condition
              if (pack.sig == SIGCHLD)
                proc_subproc (PROC_CLEARWAIT, 0);
            }
-       case __SIGFLUSH:
-         sigqueue.reset ();
-         while ((pack.sig = sigqueue.next ()))
-           if (sig_handle (pack.sig, *pack.mask) > 0)
-             sigqueue.del ();
          break;
        }
       if (pack.wakeup)
@@ -1231,29 +1226,3 @@ wait_subproc (VOID *)
   sigproc_printf ("done");
   ExitThread (0);
 }
-
-extern "C" {
-/* Provide a stack frame when calling WaitFor* functions */
-
-#undef WaitForSingleObject
-
-DWORD __stdcall
-WFSO (HANDLE hHandle, DWORD dwMilliseconds)
-{
-  DWORD ret;
-  sigframe thisframe (mainthread);
-  ret = WaitForSingleObject (hHandle, dwMilliseconds);
-  return ret;
-}
-
-#undef WaitForMultipleObjects
-
-DWORD __stdcall
-WFMO (DWORD nCount, CONST HANDLE *lpHandles, BOOL fWaitAll, DWORD dwMilliseconds)
-{
-  DWORD ret;
-  sigframe thisframe (mainthread);
-  ret = WaitForMultipleObjects (nCount, lpHandles, fWaitAll, dwMilliseconds);
-  return ret;
-}
-}
index 4bc9615..834a569 100644 (file)
@@ -1,6 +1,6 @@
 /* sigproc.h
 
-   Copyright 1997, 1998, 2000, 2001, 2002 Red Hat, Inc.
+   Copyright 1997, 1998, 2000, 2001, 2002, 2003 Red Hat, Inc.
 
 This file is part of Cygwin.
 
@@ -48,72 +48,23 @@ typedef struct struct_waitq
   HANDLE thread_ev;
 } waitq;
 
-struct sigthread
-{
-  DWORD id;
-  DWORD frame;
-  CRITICAL_SECTION lock;
-  LONG winapi_lock;
-  BOOL exception;
-  bool get_winapi_lock (int test = 0);
-  void release_winapi_lock ();
-  void init (const char *s);
-};
-
-class sigframe
-{
-private:
-  sigthread *st;
-  inline bool unregister ()
-  {
-    if (!st)
-      return 0;
-    EnterCriticalSection (&st->lock);
-    st->frame = 0;
-    st->exception = 0;
-    st->release_winapi_lock ();
-    LeaveCriticalSection (&st->lock);
-    st = NULL;
-    return 1;
-  }
-
-public:
-  inline void set (sigthread &t, DWORD ebp, bool is_exception = 0)
-  {
-    DWORD oframe = t.frame;
-    st = &t;
-    t.frame = ebp;
-    t.exception = is_exception;
-    if (!oframe)
-      t.get_winapi_lock ();
-  }
-  inline void init (sigthread &t, DWORD ebp = (DWORD) __builtin_frame_address (0), bool is_exception = 0)
-  {
-    if (is_exception || (!t.frame && t.id == GetCurrentThreadId ()))
-      set (t, ebp, is_exception);
-    else
-      st = NULL;
-  }
-
-  sigframe (): st (NULL) {}
-  sigframe (sigthread &t, DWORD ebp = (DWORD) __builtin_frame_address (0)) {init (t, ebp);}
-  ~sigframe ()
-  {
-    unregister ();
-  }
-
-  int call_signal_handler ();
-};
-
-extern sigthread mainthread;
 extern HANDLE signal_arrived;
 extern HANDLE sigCONT;
 
 BOOL __stdcall my_parent_is_alive ();
 int __stdcall sig_dispatch_pending ();
-extern "C" void __stdcall set_process_mask (sigset_t newmask);
+#ifdef _PINFO_H
+extern "C" void __stdcall set_signal_mask (sigset_t newmask, sigset_t& = myself->getsigmask ());
+#endif
+int __stdcall handle_sigprocmask (int sig, const sigset_t *set,
+                                 sigset_t *oldset, sigset_t& opmask)
+  __attribute__ ((regparm (3)));
+
 extern "C" void __stdcall reset_signal_arrived ();
-int __stdcall sig_handle (int, sigset_t) __attribute__ ((regparm (2)));
+extern "C" int __stdcall call_signal_handler_now ();
+#ifdef _CYGTLS_H
+int __stdcall sig_handle (int, sigset_t, int, _threadinfo *) __attribute__ ((regparm (3)));
+#endif
 void __stdcall sig_clear (int) __attribute__ ((regparm (1)));
 void __stdcall sig_set_pending (int) __attribute__ ((regparm (1)));
 int __stdcall handle_sigsuspend (sigset_t);
@@ -127,18 +78,15 @@ void __stdcall subproc_init ();
 void __stdcall sigproc_terminate ();
 BOOL __stdcall proc_exists (_pinfo *) __attribute__ ((regparm(1)));
 BOOL __stdcall pid_exists (pid_t) __attribute__ ((regparm(1)));
-int __stdcall sig_send (_pinfo *, int, DWORD ebp = (DWORD) __builtin_frame_address (0),
-                       bool exception = 0)  __attribute__ ((regparm(3)));
+int __stdcall sig_send (_pinfo *, int, void * = NULL) __attribute__ ((regparm(3)));
 void __stdcall signal_fixup_after_fork ();
 void __stdcall signal_fixup_after_exec ();
 void __stdcall wait_for_sigthread ();
 void __stdcall sigalloc ();
 
 extern char myself_nowait_dummy[];
-extern char myself_nowait_nonmain_dummy[];
 
 #define WAIT_SIG_PRIORITY THREAD_PRIORITY_TIME_CRITICAL
 
 #define myself_nowait ((_pinfo *)myself_nowait_dummy)
-#define myself_nowait_nonmain ((_pinfo *)myself_nowait_nonmain_dummy)
 #endif /*_SIGPROC_H*/
index 02afbf3..b22e8c7 100644 (file)
@@ -351,7 +351,6 @@ spawn_guts (const char * prog_arg, const char *const *argv,
 {
   BOOL rc;
   pid_t cygpid;
-  sigframe thisframe (mainthread);
 
   MALLOC_CHECK;
 
@@ -987,9 +986,11 @@ spawnve (int mode, const char *path, const char *const *argv,
       ret = spawn_guts (path, argv, envp, mode);
       if (vf)
        {
-         debug_printf ("longjmping due to vfork");
          if (ret > 0)
-           vf->restore_pid (ret);
+           {
+             debug_printf ("longjmping due to vfork");
+             vf->restore_pid (ret);
+           }
        }
       break;
     default:
index adf19e2..06cffa0 100644 (file)
@@ -118,7 +118,6 @@ unlink (const char *ourname)
 {
   int res = -1;
   DWORD devn;
-  sigframe thisframe (mainthread);
 
   path_conv win32_name (ourname, PC_SYM_NOFOLLOW | PC_FULL);
 
@@ -396,7 +395,6 @@ readv (int fd, const struct iovec *const iov, const int iovcnt)
   while (1)
     {
       sig_dispatch_pending ();
-      sigframe thisframe (mainthread);
 
       cygheap_fdget cfd (fd);
       if (cfd < 0)
@@ -451,7 +449,7 @@ readv (int fd, const struct iovec *const iov, const int iovcnt)
        }
 
     out:
-      if (res >= 0 || get_errno () != EINTR || !thisframe.call_signal_handler ())
+      if (res >= 0 || get_errno () != EINTR || !call_signal_handler_now ())
        break;
       set_errno (e);
     }
@@ -470,7 +468,6 @@ writev (const int fd, const struct iovec *const iov, const int iovcnt)
   sig_dispatch_pending ();
   const ssize_t tot = check_iovec_for_write (iov, iovcnt);
 
-  sigframe thisframe (mainthread);
   cygheap_fdget cfd (fd);
   if (cfd < 0)
     goto done;
@@ -524,7 +521,6 @@ open (const char *unix_path, int flags, ...)
   va_list ap;
   mode_t mode = 0;
   sig_dispatch_pending ();
-  sigframe thisframe (mainthread);
 
   syscall_printf ("open (%s, %p)", unix_path, flags);
   if (!check_null_empty_str_errno (unix_path))
@@ -574,7 +570,6 @@ extern "C" _off64_t
 lseek64 (int fd, _off64_t pos, int dir)
 {
   _off64_t res;
-  sigframe thisframe (mainthread);
 
   if (dir != SEEK_SET && dir != SEEK_CUR && dir != SEEK_END)
     {
@@ -610,7 +605,6 @@ extern "C" int
 close (int fd)
 {
   int res;
-  sigframe thisframe (mainthread);
 
   syscall_printf ("close (%d)", fd);
 
@@ -635,7 +629,6 @@ extern "C" int
 isatty (int fd)
 {
   int res;
-  sigframe thisframe (mainthread);
 
   cygheap_fdget cfd (fd);
   if (cfd < 0)
@@ -657,7 +650,6 @@ extern "C" int
 link (const char *a, const char *b)
 {
   int res = -1;
-  sigframe thisframe (mainthread);
   path_conv real_a (a, PC_SYM_NOFOLLOW | PC_FULL);
   path_conv real_b (b, PC_SYM_NOFOLLOW | PC_FULL);
   extern BOOL allow_winsymlinks;
@@ -787,7 +779,7 @@ link (const char *a, const char *b)
       res = 0;
       if (!allow_winsymlinks && real_a.is_lnk_symlink ())
        SetFileAttributes (real_b, (DWORD) real_a
-                                  | FILE_ATTRIBUTE_SYSTEM
+                                  | FILE_ATTRIBUTE_SYSTEM
                                   | FILE_ATTRIBUTE_READONLY);
 
       goto done;
@@ -865,14 +857,12 @@ done:
 extern "C" int
 chown32 (const char * name, __uid32_t uid, __gid32_t gid)
 {
-  sigframe thisframe (mainthread);
   return chown_worker (name, PC_SYM_FOLLOW, uid, gid);
 }
 
 extern "C" int
 chown (const char * name, __uid16_t uid, __gid16_t gid)
 {
-  sigframe thisframe (mainthread);
   return chown_worker (name, PC_SYM_FOLLOW,
                       uid16touid32 (uid), gid16togid32 (gid));
 }
@@ -880,14 +870,12 @@ chown (const char * name, __uid16_t uid, __gid16_t gid)
 extern "C" int
 lchown32 (const char * name, __uid32_t uid, __gid32_t gid)
 {
-  sigframe thisframe (mainthread);
   return chown_worker (name, PC_SYM_NOFOLLOW, uid, gid);
 }
 
 extern "C" int
 lchown (const char * name, __uid16_t uid, __gid16_t gid)
 {
-  sigframe thisframe (mainthread);
   return chown_worker (name, PC_SYM_NOFOLLOW,
                       uid16touid32 (uid), gid16togid32 (gid));
 }
@@ -895,7 +883,6 @@ lchown (const char * name, __uid16_t uid, __gid16_t gid)
 extern "C" int
 fchown32 (int fd, __uid32_t uid, __gid32_t gid)
 {
-  sigframe thisframe (mainthread);
   cygheap_fdget cfd (fd);
   if (cfd < 0)
     {
@@ -945,7 +932,6 @@ extern "C" int
 chmod (const char *path, mode_t mode)
 {
   int res = -1;
-  sigframe thisframe (mainthread);
 
   path_conv win32_path (path);
 
@@ -1009,7 +995,6 @@ done:
 extern "C" int
 fchmod (int fd, mode_t mode)
 {
-  sigframe thisframe (mainthread);
   cygheap_fdget cfd (fd);
   if (cfd < 0)
     {
@@ -1053,7 +1038,6 @@ extern "C" int
 fstat64 (int fd, struct __stat64 *buf)
 {
   int res;
-  sigframe thisframe (mainthread);
 
   cygheap_fdget cfd (fd);
   if (cfd < 0)
@@ -1113,7 +1097,6 @@ _fstat_r (struct _reent *ptr, int fd, struct __stat32 *buf)
 extern "C" int
 fsync (int fd)
 {
-  sigframe thisframe (mainthread);
   cygheap_fdget cfd (fd);
   if (cfd < 0)
     {
@@ -1189,7 +1172,6 @@ stat_worker (const char *name, struct __stat64 *buf, int nofollow)
 extern "C" int
 stat64 (const char *name, struct __stat64 *buf)
 {
-  sigframe thisframe (mainthread);
   syscall_printf ("entering");
   return stat_worker (name, buf, 0);
 }
@@ -1230,7 +1212,6 @@ _stat_r (struct _reent *ptr, const char *name, struct __stat32 *buf)
 extern "C" int
 lstat64 (const char *name, struct __stat64 *buf)
 {
-  sigframe thisframe (mainthread);
   syscall_printf ("entering");
   return stat_worker (name, buf, 1);
 }
@@ -1334,7 +1315,6 @@ done:
 extern "C" int
 access (const char *fn, int flags)
 {
-  sigframe thisframe (mainthread);
   // flags were incorrectly specified
   if (flags & ~(F_OK|R_OK|W_OK|X_OK))
     {
@@ -1349,7 +1329,6 @@ access (const char *fn, int flags)
 extern "C" int
 rename (const char *oldpath, const char *newpath)
 {
-  sigframe thisframe (mainthread);
   int res = 0;
   char *lnk_suffix = NULL;
 
@@ -1484,7 +1463,6 @@ system (const char *cmdstring)
   if (check_null_empty_str_errno (cmdstring))
     return -1;
 
-  sigframe thisframe (mainthread);
   int res;
   const char* command[4];
 
@@ -1800,7 +1778,6 @@ setmode (int fd, int mode)
 extern "C" int
 ftruncate64 (int fd, _off64_t length)
 {
-  sigframe thisframe (mainthread);
   int res = -1;
 
   if (length < 0)
@@ -1844,7 +1821,6 @@ ftruncate (int fd, _off_t length)
 extern "C" int
 truncate64 (const char *pathname, _off64_t length)
 {
-  sigframe thisframe (mainthread);
   int fd;
   int res = -1;
 
@@ -1887,7 +1863,6 @@ get_osfhandle (int fd)
 extern "C" int
 statfs (const char *fname, struct statfs *sfs)
 {
-  sigframe thisframe (mainthread);
   if (!sfs)
     {
       set_errno (EFAULT);
@@ -1943,7 +1918,6 @@ statfs (const char *fname, struct statfs *sfs)
 extern "C" int
 fstatfs (int fd, struct statfs *sfs)
 {
-  sigframe thisframe (mainthread);
   cygheap_fdget cfd (fd);
   if (cfd < 0)
     return -1;
@@ -1954,7 +1928,6 @@ fstatfs (int fd, struct statfs *sfs)
 extern "C" int
 setpgid (pid_t pid, pid_t pgid)
 {
-  sigframe thisframe (mainthread);
   int res = -1;
   if (pid == 0)
     pid = getpid ();
@@ -1996,7 +1969,6 @@ out:
 extern "C" pid_t
 getpgid (pid_t pid)
 {
-  sigframe thisframe (mainthread);
   if (pid == 0)
     pid = getpid ();
 
@@ -2012,21 +1984,18 @@ getpgid (pid_t pid)
 extern "C" int
 setpgrp (void)
 {
-  sigframe thisframe (mainthread);
   return setpgid (0, 0);
 }
 
 extern "C" pid_t
 getpgrp (void)
 {
-  sigframe thisframe (mainthread);
   return getpgid (0);
 }
 
 extern "C" char *
 ptsname (int fd)
 {
-  sigframe thisframe (mainthread);
   cygheap_fdget cfd (fd);
   if (cfd < 0)
     return 0;
@@ -2123,7 +2092,6 @@ seteuid32 (__uid32_t uid)
       return 0;
     }
 
-  sigframe thisframe (mainthread);
   cygsid usersid;
   user_groups &groups = cygheap->user.groups;
   HANDLE ptok, new_token = INVALID_HANDLE_VALUE;
@@ -2131,7 +2099,7 @@ seteuid32 (__uid32_t uid)
   BOOL token_is_internal, issamesid;
   char dacl_buf[MAX_DACL_LEN (5)];
   TOKEN_DEFAULT_DACL tdacl = {};
-  
+
   pw_new = internal_getpwuid (uid);
   if (!wincap.has_security () && pw_new)
     goto success_9x;
@@ -2202,7 +2170,7 @@ seteuid32 (__uid32_t uid)
     {
       /* Avoid having HKCU use default user */
       load_registry_hive (usersid);
-      
+
       /* Try setting owner to same value as user. */
       if (!SetTokenInformation (new_token, TokenOwner,
                                &usersid, sizeof usersid))
@@ -2221,12 +2189,12 @@ seteuid32 (__uid32_t uid)
     }
 
   CloseHandle (ptok);
-  issamesid = (usersid == cygheap->user.sid ()); 
+  issamesid = (usersid == cygheap->user.sid ());
   cygheap->user.set_sid (usersid);
   cygheap->user.current_token = new_token == ptok ? INVALID_HANDLE_VALUE
-                                                  : new_token;
+                                                 : new_token;
   if (!issamesid) /* MS KB 199190 */
-    RegCloseKey(HKEY_CURRENT_USER); 
+    RegCloseKey (HKEY_CURRENT_USER);
   cygheap->user.reimpersonate ();
   if (!issamesid)
     user_shared_initialize (true);
@@ -2304,7 +2272,6 @@ setegid32 (__gid32_t gid)
       return 0;
     }
 
-  sigframe thisframe (mainthread);
   user_groups * groups = &cygheap->user.groups;
   cygsid gsid;
   HANDLE ptok;
@@ -2399,7 +2366,6 @@ setregid (__gid16_t rgid, __gid16_t egid)
 extern "C" int
 chroot (const char *newroot)
 {
-  sigframe thisframe (mainthread);
   path_conv path (newroot, PC_SYM_FOLLOW | PC_FULL | PC_POSIX);
 
   int ret;
@@ -2431,7 +2397,6 @@ chroot (const char *newroot)
 extern "C" int
 creat (const char *path, mode_t mode)
 {
-  sigframe thisframe (mainthread);
   return open (path, O_WRONLY | O_CREAT | O_TRUNC, mode);
 }
 
@@ -2444,7 +2409,6 @@ __assertfail ()
 extern "C" int
 getw (FILE *fp)
 {
-  sigframe thisframe (mainthread);
   int w, ret;
   ret = fread (&w, sizeof (int), 1, fp);
   return ret != 1 ? EOF : w;
@@ -2453,7 +2417,6 @@ getw (FILE *fp)
 extern "C" int
 putw (int w, FILE *fp)
 {
-  sigframe thisframe (mainthread);
   int ret;
   ret = fwrite (&w, sizeof (int), 1, fp);
   if (feof (fp) || ferror (fp))
@@ -2524,7 +2487,6 @@ memccpy (_PTR out, const _PTR in, int c, size_t len)
 extern "C" int
 nice (int incr)
 {
-  sigframe thisframe (mainthread);
   DWORD priority[] =
     {
       IDLE_PRIORITY_CLASS,
@@ -2618,7 +2580,6 @@ updwtmp (const char *wtmp_file, const struct utmp *ut)
 extern "C" void
 logwtmp (const char *line, const char *user, const char *host)
 {
-  sigframe thisframe (mainthread);
   struct utmp ut;
   memset (&ut, 0, sizeof ut);
   ut.ut_type = USER_PROCESS;
@@ -2636,7 +2597,6 @@ logwtmp (const char *line, const char *user, const char *host)
 extern "C" void
 login (struct utmp *ut)
 {
-  sigframe thisframe (mainthread);
   pututline (ut);
   endutent ();
   updwtmp (_PATH_WTMP, ut);
@@ -2645,7 +2605,6 @@ login (struct utmp *ut)
 extern "C" int
 logout (char *line)
 {
-  sigframe thisframe (mainthread);
   struct utmp ut_buf, *ut;
 
   memset (&ut_buf, 0, sizeof ut_buf);
@@ -2674,7 +2633,6 @@ static char *utmp_file = (char *) _PATH_UTMP;
 static void
 internal_setutent (bool force_readwrite)
 {
-  sigframe thisframe (mainthread);
   if (force_readwrite && utmp_readonly)
     endutent ();
   if (utmp_fd < 0)
@@ -2703,7 +2661,6 @@ setutent ()
 extern "C" void
 endutent ()
 {
-  sigframe thisframe (mainthread);
   if (utmp_fd >= 0)
     {
       close (utmp_fd);
@@ -2715,7 +2672,6 @@ endutent ()
 extern "C" void
 utmpname (_CONST char *file)
 {
-  sigframe thisframe (mainthread);
   if (check_null_empty_str (file))
     {
       debug_printf ("Invalid file");
@@ -2739,7 +2695,6 @@ static unsigned utix = 0;
 extern "C" struct utmp *
 getutent ()
 {
-  sigframe thisframe (mainthread);
   if (utmp_fd < 0)
     {
       internal_setutent (false);
@@ -2756,7 +2711,6 @@ getutent ()
 extern "C" struct utmp *
 getutid (struct utmp *id)
 {
-  sigframe thisframe (mainthread);
   if (check_null_invalid_struct_errno (id))
     return NULL;
   if (utmp_fd < 0)
@@ -2795,7 +2749,6 @@ getutid (struct utmp *id)
 extern "C" struct utmp *
 getutline (struct utmp *line)
 {
-  sigframe thisframe (mainthread);
   if (check_null_invalid_struct_errno (line))
     return NULL;
   if (utmp_fd < 0)
@@ -2818,7 +2771,6 @@ getutline (struct utmp *line)
 extern "C" void
 pututline (struct utmp *ut)
 {
-  sigframe thisframe (mainthread);
   if (check_null_invalid_struct (ut))
     return;
   internal_setutent (true);
@@ -2853,7 +2805,7 @@ pututline (struct utmp *ut)
 }
 
 extern "C"
-long gethostid(void)
+long gethostid (void)
 {
   unsigned data[13] = {0x92895012,
                       0x10293412,
@@ -2870,7 +2822,6 @@ long gethostid(void)
                       0x00290012};
 
   bool has_cpuid = false;
-  sigframe thisframe (mainthread);
 
   DWORD opmask = SetThreadAffinityMask (GetCurrentThread (), 1);
   if (!opmask)
@@ -2993,7 +2944,7 @@ getusershell ()
   if (!shell_fp && !(shell_fp = fopen64 (ETC_SHELLS, "rt")))
     {
       if (def_shells[shell_index])
-        return strcpy (buf, def_shells[shell_index++]);
+       return strcpy (buf, def_shells[shell_index++]);
       return NULL;
     }
   /* Skip white space characters. */
index 77a4e5b..e046984 100644 (file)
@@ -119,8 +119,6 @@ tcsetattr (int fd, int a, const struct termios *t)
 
   while (1)
     {
-      sigframe thisframe (mainthread);
-
       res = -1;
       cygheap_fdget cfd (fd);
       if (cfd < 0)
@@ -148,7 +146,7 @@ tcsetattr (int fd, int a, const struct termios *t)
          e = get_errno ();
          break;
        case bg_signalled:
-         if (thisframe.call_signal_handler ())
+         if (call_signal_handler_now ())
            continue;
          res = -1;
          /* fall through intentionally */
index eeaa4ba..db12e5c 100644 (file)
@@ -36,12 +36,14 @@ details. */
 #include <stdlib.h>
 #include <syslog.h>
 #include "pinfo.h"
+#include "sigproc.h"
 #include "perprocess.h"
 #include "security.h"
-#include "exceptions.h"
+#include "cygtls.h"
 #include <semaphore.h>
 #include <stdio.h>
 #include <sys/timeb.h>
+#include <exceptions.h>
 #include <sys/fcntl.h>
 
 extern int threadsafe;
@@ -191,7 +193,6 @@ MTinterface::fixup_after_fork (void)
 {
   pthread_key::fixup_after_fork ();
 
-#ifndef __SIGNALS_ARE_MULTITHREADED__
   /* As long as the signal handling not multithreaded
      switch reents storage back to _impure_ptr for the mainthread
      to support fork from threads other than the mainthread */
@@ -199,9 +200,8 @@ MTinterface::fixup_after_fork (void)
   reents._winsup = &winsup_reent;
   winsup_reent._process_logmask = LOG_UPTO (LOG_DEBUG);
   reent_key.set (&reents);
-#endif
 
-  threadcount = 1;
+  threadcount = 0;
   pthread::init_mainthread ();
 
   pthread::fixup_after_fork ();
@@ -225,7 +225,15 @@ pthread::init_mainthread ()
        api_fatal ("failed to create mainthread object");
     }
 
-  thread->init_current_thread ();
+  thread->cygtls = &_my_tls;
+  _my_tls.tid = thread;
+  thread->thread_id = GetCurrentThreadId ();
+  if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
+                       GetCurrentProcess (), &thread->win32_obj_id,
+                       0, FALSE, DUPLICATE_SAME_ACCESS))
+    thread->win32_obj_id = NULL;
+  thread->set_tls_self_pointer ();
+  thread->postcreate ();
 }
 
 pthread *
@@ -238,9 +246,9 @@ pthread::self ()
 }
 
 void
-pthread::set_tls_self_pointer (pthread *thisThread)
+pthread::set_tls_self_pointer ()
 {
-  MT_INTERFACE->thread_self_key.set (thisThread);
+  MT_INTERFACE->thread_self_key.set (this);
 }
 
 pthread *
@@ -275,12 +283,6 @@ pthread::~pthread ()
 }
 
 void
-pthread::set_thread_id_to_current ()
-{
-  thread_id = GetCurrentThreadId ();
-}
-
-void
 pthread::precreate (pthread_attr *newattr)
 {
   pthread_mutex *verifyable_mutex_obj = &mutex;
@@ -334,7 +336,7 @@ pthread::create (void *(*func) (void *), pthread_attr *newattr,
 
   if (!win32_obj_id)
     {
-      thread_printf ("CreateThread failed: this %p LastError %E", this);
+      thread_printf ("CreateThread failed: this %p, %E", this);
       magic = 0;
     }
   else
@@ -347,6 +349,15 @@ pthread::create (void *(*func) (void *), pthread_attr *newattr,
 void
 pthread::postcreate ()
 {
+  cancel_event = ::CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
+  if (!cancel_event)
+    {
+      system_printf ("couldn't create cancel event for main thread, %E");
+      /* we need the event for correct behaviour */
+      magic = 0;
+      return;
+    }
+
   valid = true;
 
   InterlockedIncrement (&MT_INTERFACE->threadcount);
@@ -738,19 +749,6 @@ pthread::get_thread_id ()
 }
 
 void
-pthread::init_current_thread ()
-{
-  cancel_event = ::CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
-  if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (),
-                       GetCurrentProcess (), &win32_obj_id,
-                       0, FALSE, DUPLICATE_SAME_ACCESS))
-    win32_obj_id = NULL;
-  set_thread_id_to_current ();
-  set_tls_self_pointer (this);
-  valid = true;
-}
-
-void
 pthread::_fixup_after_fork ()
 {
   /* set thread to not running if it is not the forking thread */
@@ -1892,26 +1890,18 @@ void *
 pthread::thread_init_wrapper (void *_arg)
 {
   // Setup the local/global storage of this thread
-
+  __uint64_t padding[CYGTLS_PADSIZE];
   pthread *thread = (pthread *) _arg;
-  struct __reent_t local_reent;
-  struct _winsup_t local_winsup;
-  struct _reent local_clib;
-
-  struct sigaction _sigs[NSIG];
-  sigset_t _sig_mask;          /* one set for everything to ignore. */
+  thread->cygtls = _my_tls.init (padding, &thread);
+  _my_tls.tid = thread;
 
-  /* According to onno@stack.urc.tue.nl, the exception handler record must
-     be on the stack.  */
   exception_list cygwin_except_entry;
+  init_exceptions (&cygwin_except_entry); /* Initialize SIGSEGV handling, etc. */
 
-  /* Initialize SIGSEGV handling, etc. */
-  init_exceptions (&cygwin_except_entry);
-
-  // setup signal structures
-  thread->sigs = _sigs;
-  thread->sigmask = &_sig_mask;
-  thread->sigtodo = NULL;
+  thread->set_tls_self_pointer ();
+  struct __reent_t local_reent;
+  struct _winsup_t local_winsup;
+  struct _reent local_clib;
 
   memset (&local_winsup, 0, sizeof (struct _winsup_t));
 
@@ -1922,9 +1912,6 @@ pthread::thread_init_wrapper (void *_arg)
 
   MT_INTERFACE->reent_key.set (&local_reent);
 
-  thread->set_thread_id_to_current ();
-  set_tls_self_pointer (thread);
-
   thread->mutex.lock ();
   // if thread is detached force cleanup on exit
   if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL)
@@ -1943,13 +1930,6 @@ pthread::thread_init_wrapper (void *_arg)
   void *ret = thread->function (thread->arg);
 
   thread->exit (ret);
-
-#if 0
-// ??? This code only runs if the thread exits by returning.
-// it's all now in __pthread_exit ();
-#endif
-  /* never reached */
-  return 0;
 }
 
 bool
@@ -1970,7 +1950,6 @@ int
 pthread::create (pthread_t *thread, const pthread_attr_t *attr,
                  void *(*start_routine) (void *), void *arg)
 {
-  DECLARE_TLS_STORAGE;
   if (attr && !pthread_attr::is_good_object (attr))
     return EINVAL;
 
@@ -2904,7 +2883,7 @@ pthread_kill (pthread_t thread, int sig)
   if (!pthread::is_good_object (&thread))
     return EINVAL;
 
-  int rval = raise (sig);
+  int rval = sig ? sig_send (NULL, sig, thread->cygtls) : 0;
 
   // unlock myself
   return rval;
@@ -2913,11 +2892,7 @@ pthread_kill (pthread_t thread, int sig)
 extern "C" int
 pthread_sigmask (int operation, const sigset_t *set, sigset_t *old_set)
 {
-  int rval = sigprocmask (operation, set, old_set);
-
-  // unlock this myself
-
-  return rval;
+  return handle_sigprocmask (operation, set, old_set, _my_tls.sigmask);
 }
 
 /* ID */
index 364ed39..5dd9857 100644 (file)
@@ -253,7 +253,7 @@ List_remove (fast_mutex &mx, list_node *&head, list_node *node)
     }
   mx.unlock ();
 }
+
 
 template <class list_node> class List
 {
@@ -305,7 +305,7 @@ protected:
   list_node *head;
 };
 
-class pthread_key:public verifyable_object
+class pthread_key: public verifyable_object
 {
 public:
   static bool is_good_object (pthread_key_t const *);
@@ -343,7 +343,7 @@ private:
   void *fork_buf;
 };
 
-class pthread_attr:public verifyable_object
+class pthread_attr: public verifyable_object
 {
 public:
   static bool is_good_object(pthread_attr_t const *);
@@ -357,7 +357,7 @@ public:
   ~pthread_attr ();
 };
 
-class pthread_mutexattr:public verifyable_object
+class pthread_mutexattr: public verifyable_object
 {
 public:
   static bool is_good_object(pthread_mutexattr_t const *);
@@ -367,7 +367,7 @@ public:
   ~pthread_mutexattr ();
 };
 
-class pthread_mutex:public verifyable_object
+class pthread_mutex: public verifyable_object
 {
 public:
   static bool is_good_object (pthread_mutex_t const *);
@@ -448,7 +448,8 @@ private:
 
 #define WAIT_CANCELED   (WAIT_OBJECT_0 + 1)
 
-class pthread:public verifyable_object
+class _threadinfo;
+class pthread: public verifyable_object
 {
 public:
   HANDLE win32_obj_id;
@@ -459,13 +460,10 @@ public:
   bool valid;
   bool suspended;
   int cancelstate, canceltype;
+  _threadinfo *cygtls;
   HANDLE cancel_event;
   pthread_t joiner;
 
-  /* signal handling */
-  struct sigaction *sigs;
-  sigset_t *sigmask;
-  LONG *sigtodo;
   virtual void create (void *(*)(void *), pthread_attr *, void *);
 
   pthread ();
@@ -488,7 +486,7 @@ public:
   static int suspend (pthread_t * thread);
   static int resume (pthread_t * thread);
 
-  virtual void exit (void *value_ptr);
+  virtual void exit (void *value_ptr) __attribute__ ((noreturn));
 
   virtual int cancel ();
 
@@ -504,7 +502,7 @@ public:
   virtual void pop_cleanup_handler (int const execute);
 
   static pthread* self ();
-  static void *thread_init_wrapper (void *);
+  static void *thread_init_wrapper (void *) __attribute__ ((noreturn));
 
   virtual unsigned long getsequence_np();
 
@@ -545,12 +543,10 @@ private:
   void pop_all_cleanup_handlers (void);
   void precreate (pthread_attr *);
   void postcreate ();
-  void set_thread_id_to_current ();
-  static void set_tls_self_pointer (pthread *);
+  void set_tls_self_pointer ();
   static pthread *get_tls_self_pointer ();
   void cancel_self ();
   DWORD get_thread_id ();
-  void init_current_thread ();
 };
 
 class pthread_null : public pthread
@@ -563,7 +559,7 @@ class pthread_null : public pthread
   * as the ojbect is not verifyable
   */
   void create (void *(*)(void *), pthread_attr *, void *);
-  void exit (void *value_ptr);
+  void exit (void *value_ptr) __attribute__ ((noreturn));
   int cancel ();
   void testcancel ();
   int setcancelstate (int state, int *oldstate);
@@ -577,7 +573,7 @@ class pthread_null : public pthread
   static pthread_null _instance;
 };
 
-class pthread_condattr:public verifyable_object
+class pthread_condattr: public verifyable_object
 {
 public:
   static bool is_good_object(pthread_condattr_t const *);
@@ -587,7 +583,7 @@ public:
   ~pthread_condattr ();
 };
 
-class pthread_cond:public verifyable_object
+class pthread_cond: public verifyable_object
 {
 public:
   static bool is_good_object (pthread_cond_t const *);
@@ -628,7 +624,7 @@ private:
   static fast_mutex cond_initialization_lock;
 };
 
-class pthread_rwlockattr:public verifyable_object
+class pthread_rwlockattr: public verifyable_object
 {
 public:
   static bool is_good_object(pthread_rwlockattr_t const *);
@@ -638,7 +634,7 @@ public:
   ~pthread_rwlockattr ();
 };
 
-class pthread_rwlock:public verifyable_object
+class pthread_rwlock: public verifyable_object
 {
 public:
   static bool is_good_object (pthread_rwlock_t const *);
@@ -717,7 +713,7 @@ public:
 };
 
 /* shouldn't be here */
-class semaphore:public verifyable_object
+class semaphore: public verifyable_object
 {
 public:
   static bool is_good_object(sem_t const *);
@@ -767,9 +763,8 @@ public:
   class callback * next;
 };
 
-class MTinterface
+struct MTinterface
 {
-public:
   // General
   int concurrency;
   long int threadcount;
@@ -789,12 +784,17 @@ public:
   void fixup_before_fork (void);
   void fixup_after_fork (void);
 
+#if 1 // avoid initialization since zero is implied and
+      // only use of this class is static
+  MTinterface () : reent_key (NULL), thread_self_key (NULL) {}
+#else
   MTinterface () :
-    concurrency (0), threadcount (1),
+    concurrency (0), threadcount (0),
     pthread_prepare (NULL), pthread_child (NULL), pthread_parent (NULL),
     reent_key (NULL), thread_self_key (NULL)
   {
   }
+#endif
 };
 
 #define MT_INTERFACE user_data->threadinterface
index b35e775..33835b2 100644 (file)
@@ -34,7 +34,7 @@ details. */
    The information is used in shared.cc for the user shared.
    Final initialization occurs in uinfo_init */
 void
-cygheap_user::init()
+cygheap_user::init ()
 {
   char user_name[UNLEN + 1];
   DWORD user_name_len = UNLEN + 1;
@@ -70,7 +70,7 @@ cygheap_user::init()
   if (!SetTokenInformation (ptok, TokenOwner, &effec_cygsid, sizeof (cygsid)))
     debug_printf ("SetTokenInformation(TokenOwner): %E");
 
-  /* Add the user in the default DACL if needed */ 
+  /* Add the user in the default DACL if needed */
   if (!GetTokenInformation (ptok, TokenDefaultDacl, pdacl, sizeof (pdacl_buf), &siz))
     system_printf ("GetTokenInformation (TokenDefaultDacl): %E");
   else if (pdacl->DefaultDacl) /* Running with security */
@@ -80,14 +80,14 @@ cygheap_user::init()
 
       for (int i = 0; i < pAcl->AceCount; i++)
         {
-         if (!GetAce(pAcl, i, (LPVOID *) &pAce))
+         if (!GetAce (pAcl, i, (LPVOID *) &pAce))
            system_printf ("GetAce: %E");
          else if (pAce->Header.AceType == ACCESS_ALLOWED_ACE_TYPE
                   && effec_cygsid == &pAce->SidStart)
            goto out;
        }
       pAcl->AclSize = &pdacl_buf[sizeof (pdacl_buf)] - (char *) pAcl;
-      if (!AddAccessAllowedAce (pAcl, ACL_REVISION, GENERIC_ALL, effec_cygsid)) 
+      if (!AddAccessAllowedAce (pAcl, ACL_REVISION, GENERIC_ALL, effec_cygsid))
        system_printf ("AddAccessAllowedAce: %E");
       else if (FindFirstFreeAce (pAcl, (LPVOID *) &pAce), !(pAce))
        debug_printf ("FindFirstFreeAce %E");
@@ -98,7 +98,7 @@ cygheap_user::init()
            system_printf ("SetTokenInformation (TokenDefaultDacl): %E");
         }
     }
- out:    
+ out:
   CloseHandle (ptok);
 }
 
@@ -115,7 +115,7 @@ internal_getlogin (cygheap_user &user)
 
   if (!pw && !(pw = internal_getpwnam (user.name ()))
       && !(pw = internal_getpwuid (DEFAULT_UID)))
-    debug_printf("user not found in augmented /etc/passwd");
+    debug_printf ("user not found in augmented /etc/passwd");
   else
     {
       myself->uid = pw->pw_uid;
@@ -313,7 +313,7 @@ cygheap_user::ontherange (homebodies what, struct passwd *pw)
              sys_mbstowcs (wlogsrv, logsrv (),
                            sizeof (wlogsrv) / sizeof (*wlogsrv));
             sys_mbstowcs (wuser, winname (), sizeof (wuser) / sizeof (*wuser));
-             if (!(ret = NetUserGetInfo (wlogsrv, wuser, 3,(LPBYTE *)&ui)))
+             if (!(ret = NetUserGetInfo (wlogsrv, wuser, 3, (LPBYTE *) &ui)))
                {
                  sys_wcstombs (homepath_env_buf, ui->usri3_home_dir, CYG_MAX_PATH);
                  if (!homepath_env_buf[0])
index 759afed..79c8bf6 100644 (file)
@@ -55,7 +55,6 @@ wait4 (int intpid, int *status, int options, struct rusage *r)
   while (1)
     {
       sig_dispatch_pending ();
-      sigframe thisframe (mainthread);
       sawsig = 0;
       if (options & ~(WNOHANG | WUNTRACED))
        {
@@ -100,6 +99,7 @@ wait4 (int intpid, int *status, int options, struct rusage *r)
 
       if (w->status == -1)
        {
+         call_signal_handler_now ();
          set_sig_errno (EINTR);
          sawsig = 1;
          res = -1;
@@ -115,7 +115,7 @@ wait4 (int intpid, int *status, int options, struct rusage *r)
        *status = w->status;
 
     done:
-      if (!sawsig || !thisframe.call_signal_handler ())
+      if (!sawsig || !call_signal_handler_now ())
        break;
     }
 
index 351d320..3cbdb18 100644 (file)
@@ -57,12 +57,12 @@ ilockcmpexch (long *t, long v, long c)
 #undef InterlockedCompareExchange
 #define InterlockedCompareExchange ilockcmpexch
 
+// extern char * volatile *__stackbase __asm__ ("%fs:4");
 #ifndef EXPCGf
 #define DECLARE_TLS_STORAGE do {} while (0)
 #else
 #define DECLARE_TLS_STORAGE char **tls[4096] __attribute__ ((unused))
 extern long tls_ix;
-extern char * volatile *__stackbase __asm__ ("%fs:4");
 
 extern __inline__ DWORD
 my_tlsalloc ()
index 9d65398..937b460 100644 (file)
@@ -274,6 +274,8 @@ int __stdcall __check_invalid_read_ptr_errno (const void *s, unsigned sz) __attr
   __check_null_invalid_struct ((s), sizeof (*(s)))
 #define check_null_invalid_struct_errno(s) \
   __check_null_invalid_struct_errno ((s), sizeof (*(s)))
+#define check_invalid_read_struct_errno(s) \
+  __check_invalid_read_ptr_errno ((s), sizeof (*(s)))
 
 struct iovec;
 ssize_t check_iovec_for_read (const struct iovec *, int) __attribute__ ((regparm(2)));
@@ -296,7 +298,7 @@ int symlink_worker (const char *, const char *, bool, bool)
 class path_conv;
 int access_worker (path_conv&, int) __attribute__ ((regparm (2)));
 
-extern "C" int __stdcall low_priority_sleep (DWORD) __attribute__ ((regparm (1)));
+extern "C" int low_priority_sleep (DWORD) __attribute__ ((regparm (1)));
 #define SLEEP_0_STAY_LOW INFINITE
 
 size_t getshmlba (void);
@@ -339,8 +341,6 @@ extern HANDLE hMainThread;
 extern HANDLE hMainProc;
 
 extern bool cygwin_testing;
-extern unsigned _cygwin_testing_magic;
-extern HMODULE cygwin_hmodule;
 
 extern char almost_null[];