From 817eeaf7777af901110d5da8c73006abdfa9be6a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Mon, 16 Jul 2012 18:18:22 +0200
Subject: erts: Remove VxWorks support from beam

---
 erts/emulator/beam/beam_emu.c       |   9 ---
 erts/emulator/beam/erl_nif.h        |   6 +-
 erts/emulator/beam/sys.h            | 123 ++++++++----------------------------
 erts/emulator/sys/common/erl_poll.c |  23 ++-----
 4 files changed, 33 insertions(+), 128 deletions(-)

(limited to 'erts/emulator')

diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index efce070061..5dc5aa1e03 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -960,16 +960,9 @@ static void save_stacktrace(Process* c_p, BeamInstr* pc, Eterm* reg,
 static struct StackTrace * get_trace_from_exc(Eterm exc);
 static Eterm make_arglist(Process* c_p, Eterm* reg, int a);
 
-#if defined(VXWORKS)
-static int init_done;
-#endif
-
 void
 init_emulator(void)
 {
-#if defined(VXWORKS)
-    init_done = 0;
-#endif
     erts_smp_atomic_init_nob(&warned_for_tuple_funs, (erts_aint_t) 0);
     process_main();
 }
@@ -1102,9 +1095,7 @@ dtrace_drvport_str(ErlDrvPort drvport, char *port_buf)
  */
 void process_main(void)
 {
-#if !defined(VXWORKS)
     static int init_done = 0;
-#endif
     Process* c_p = NULL;
     int reds_used;
 #ifdef DEBUG
diff --git a/erts/emulator/beam/erl_nif.h b/erts/emulator/beam/erl_nif.h
index e5d99dc4f1..3fc7b2c9c2 100644
--- a/erts/emulator/beam/erl_nif.h
+++ b/erts/emulator/beam/erl_nif.h
@@ -187,11 +187,7 @@ extern TWinDynNifCallbacks WinDynNifCallbacks;
 #else 
 #  define ERL_NIF_INIT_GLOB
 #  define ERL_NIF_INIT_BODY
-#  if defined(VXWORKS)
-#    define ERL_NIF_INIT_DECL(MODNAME) ErlNifEntry* MODNAME  ## _init(void)
-#  else
-#    define ERL_NIF_INIT_DECL(MODNAME) ErlNifEntry* nif_init(void)
-#  endif
+#  define ERL_NIF_INIT_DECL(MODNAME) ErlNifEntry* nif_init(void)
 #endif
 
 
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index 0d3b910278..1dc6f1d233 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -25,11 +25,6 @@
 #  define NO_FPE_SIGNALS
 #endif
 
-/* xxxP __VXWORKS__ */
-#ifdef VXWORKS
-#include <vxWorks.h>
-#endif
-
 #ifdef DISABLE_CHILD_WAITER_THREAD
 #undef ENABLE_CHILD_WAITER_THREAD
 #endif
@@ -43,8 +38,6 @@
 
 #if defined (__WIN32__)
 #  include "erl_win_sys.h"
-#elif defined (VXWORKS) 
-#  include "erl_vxworks_sys.h"
 #else 
 #  include "erl_unix_sys.h"
 #ifndef UNIX
@@ -182,12 +175,6 @@ void erl_assert_error(char* expr, char* file, int line);
 #  define const
 #endif
 
-#ifdef VXWORKS
-/* Replace VxWorks' printf with a real one that does fprintf(stdout, ...) */
-int real_printf(const char *fmt, ...);
-#  define printf real_printf
-#endif
-
 #undef __deprecated
 #if ERTS_AT_LEAST_GCC_VSN__(3, 0, 0)
 #  define __deprecated __attribute__((deprecated))
@@ -486,38 +473,28 @@ static unsigned long zero_value = 0, one_value = 1;
 #    define SET_NONBLOCKING(fd)	ioctlsocket((fd), FIONBIO, &one_value)
 
 #  else
-#    ifdef VXWORKS
-#      include <fcntl.h> /* xxxP added for O_WRONLY etc ... macro:s ... */
-#      include <ioLib.h>
-static const int zero_value = 0, one_value = 1;
-#      define SET_BLOCKING(fd)	ioctl((fd), FIONBIO, (int)&zero_value)
-#      define SET_NONBLOCKING(fd)	ioctl((fd), FIONBIO, (int)&one_value)
-#      define ERRNO_BLOCK EWOULDBLOCK
-
-#    else
-#      ifdef NB_FIONBIO		/* Old BSD */
-#        include <sys/ioctl.h>
+#    ifdef NB_FIONBIO		/* Old BSD */
+#      include <sys/ioctl.h>
   static const int zero_value = 0, one_value = 1;
-#        define SET_BLOCKING(fd)	ioctl((fd), FIONBIO, &zero_value)
-#        define SET_NONBLOCKING(fd)	ioctl((fd), FIONBIO, &one_value)
-#        define ERRNO_BLOCK EWOULDBLOCK
-#      else /* !NB_FIONBIO */
-#        include <fcntl.h>
-#        ifdef NB_O_NDELAY		/* Nothing needs this? */
-#          define NB_FLAG O_NDELAY
-#          ifndef ERRNO_BLOCK		/* allow override (e.g. EAGAIN) via Makefile */
-#            define ERRNO_BLOCK EWOULDBLOCK
-#          endif
-#        else  /* !NB_O_NDELAY */	/* The True Way - POSIX!:-) */
-#          define NB_FLAG O_NONBLOCK
-#          define ERRNO_BLOCK EAGAIN
-#        endif /* !NB_O_NDELAY */
-#        define SET_BLOCKING(fd)	fcntl((fd), F_SETFL, \
-	  			      fcntl((fd), F_GETFL, 0) & ~NB_FLAG)
-#        define SET_NONBLOCKING(fd)	fcntl((fd), F_SETFL, \
-				      fcntl((fd), F_GETFL, 0) | NB_FLAG)
-#      endif /* !NB_FIONBIO */
-#    endif /* _WXWORKS_ */
+#      define SET_BLOCKING(fd)         ioctl((fd), FIONBIO, &zero_value)
+#      define SET_NONBLOCKING(fd)      ioctl((fd), FIONBIO, &one_value)
+#      define ERRNO_BLOCK EWOULDBLOCK
+#    else /* !NB_FIONBIO */
+#      include <fcntl.h>
+#      ifdef NB_O_NDELAY               /* Nothing needs this? */
+#        define NB_FLAG O_NDELAY
+#        ifndef ERRNO_BLOCK            /* allow override (e.g. EAGAIN) via Makefile */
+#          define ERRNO_BLOCK EWOULDBLOCK
+#        endif
+#      else  /* !NB_O_NDELAY */	/* The True Way - POSIX!:-) */
+#        define NB_FLAG O_NONBLOCK
+#        define ERRNO_BLOCK EAGAIN
+#      endif /* !NB_O_NDELAY */
+#      define SET_BLOCKING(fd)         fcntl((fd), F_SETFL, \
+                                           fcntl((fd), F_GETFL, 0) & ~NB_FLAG)
+#      define SET_NONBLOCKING(fd)      fcntl((fd), F_SETFL, \
+                                           fcntl((fd), F_GETFL, 0) | NB_FLAG)
+#    endif /* !NB_FIONBIO */
 #  endif /* !__WIN32__ */
 #endif /* WANT_NONBLOCKING */
 
@@ -870,13 +847,6 @@ erts_refc_read(erts_refc_t *refcp, erts_aint_t min_val)
 extern int erts_use_kernel_poll;
 #endif
 
-#if defined(VXWORKS)
-/* NOTE! sys_calloc2 does not exist on other 
-   platforms than VxWorks and OSE */
-void* sys_calloc2(Uint, Uint);
-#endif /* VXWORKS || OSE */
-
-
 #define sys_memcpy(s1,s2,n)  memcpy(s1,s2,n)
 #define sys_memmove(s1,s2,n) memmove(s1,s2,n)
 #define sys_memcmp(s1,s2,n)  memcmp(s1,s2,n)
@@ -983,43 +953,6 @@ void erl_bin_write(unsigned char *, int, int);
 #  define DEBUGF(x)
 #endif
 
-
-#ifdef VXWORKS
-/* This includes redefines of malloc etc 
-   this should be done after sys_alloc, etc, above */
-#  include "reclaim.h"
-/*********************Malloc and friends************************
- * There is a problem with the naming of malloc and friends, 
- * malloc is used throughout sys.c and the resolver to mean save_alloc,
- * but it should actually mean either sys_alloc or sys_alloc2,
- * so the definitions from reclaim_master.h are not any
- * good, i redefine the malloc family here, although it's quite 
- * ugly, actually it would be preferrable to use the
- * names sys_alloc and so on throughout the offending code, but
- * that will be saved as an later exercise...
- * I also add an own calloc, to make the BSD resolver source happy.
- ***************************************************************/
-/* Undefine malloc and friends */
-#  ifdef malloc
-#    undef malloc
-#  endif
-#  ifdef calloc
-#    undef calloc
-#  endif
-#  ifdef realloc
-#    undef realloc
-#  endif
-#  ifdef free
-#    undef free
-#  endif
-/* Redefine malloc and friends */
-#  define malloc sys_alloc
-#  define calloc  sys_calloc
-#  define realloc  sys_realloc
-#  define free sys_free
-
-#endif
-
 #ifdef __WIN32__
 #ifdef ARCH_64
 #define ERTS_ALLOC_ALIGN_BYTES 16
@@ -1035,23 +968,20 @@ void erl_bin_write(unsigned char *, int, int);
 
 
 #ifdef __WIN32__
-
 void call_break_handler(void);
 char* last_error(void);
 char* win32_errorstr(int);
-
-
 #endif
 
 /************************************************************************
  * Find out the native filename encoding of the process (look at locale of 
  * Unix processes and just do UTF16 on windows 
  ************************************************************************/
-#define ERL_FILENAME_UNKNOWN 0
-#define ERL_FILENAME_LATIN1 1
-#define ERL_FILENAME_UTF8 2
-#define ERL_FILENAME_UTF8_MAC 3
-#define ERL_FILENAME_WIN_WCHAR 4
+#define ERL_FILENAME_UNKNOWN   (0)
+#define ERL_FILENAME_LATIN1    (1)
+#define ERL_FILENAME_UTF8      (2)
+#define ERL_FILENAME_UTF8_MAC  (3)
+#define ERL_FILENAME_WIN_WCHAR (4)
 
 int erts_get_native_filename_encoding(void);
 /* The set function is only to be used by erl_init! */
@@ -1061,4 +991,3 @@ int erts_get_user_requested_filename_encoding(void);
 void erts_init_sys_common_misc(void);
 
 #endif
-
diff --git a/erts/emulator/sys/common/erl_poll.c b/erts/emulator/sys/common/erl_poll.c
index 5a8588351d..b0eaf14d90 100644
--- a/erts/emulator/sys/common/erl_poll.c
+++ b/erts/emulator/sys/common/erl_poll.c
@@ -55,17 +55,12 @@
 #  ifdef SYS_SELECT_H
 #    include <sys/select.h>
 #  endif
-#  ifdef VXWORKS
-#    include <selectLib.h>
-#  endif
 #endif
-#ifndef VXWORKS
-#  ifdef NO_SYSCONF
-#    if ERTS_POLL_USE_SELECT
-#      include <sys/param.h>
-#    else
-#      include <limits.h>
-#    endif
+#ifdef NO_SYSCONF
+#  if ERTS_POLL_USE_SELECT
+#    include <sys/param.h>
+#  else
+#    include <limits.h>
 #  endif
 #endif
 #include "erl_thr_progress.h"
@@ -2222,10 +2217,6 @@ ERTS_POLL_EXPORT(erts_poll_max_fds)(void)
  * --- Initialization --------------------------------------------------------
  */
 
-#ifdef VXWORKS
-extern int erts_vxworks_max_files;
-#endif
-
 void
 ERTS_POLL_EXPORT(erts_poll_init)(void)
 {
@@ -2234,9 +2225,7 @@ ERTS_POLL_EXPORT(erts_poll_init)(void)
 
     errno = 0;
 
-#if defined(VXWORKS)
-    max_fds = erts_vxworks_max_files;
-#elif !defined(NO_SYSCONF)
+#if !defined(NO_SYSCONF)
     max_fds = sysconf(_SC_OPEN_MAX);
 #elif ERTS_POLL_USE_SELECT
     max_fds = NOFILE;
-- 
cgit v1.2.3


From 643caa68f0213bb5a28db708c57085444cb1c69c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Mon, 16 Jul 2012 18:48:36 +0200
Subject: erts: Remove VxWorks from drivers

---
 erts/emulator/beam/erl_driver.h         |  11 +-
 erts/emulator/drivers/common/gzio.c     |   5 -
 erts/emulator/drivers/common/inet_drv.c |  86 +----
 erts/emulator/drivers/unix/unix_efile.c | 561 +-------------------------------
 4 files changed, 6 insertions(+), 657 deletions(-)

(limited to 'erts/emulator')

diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h
index 1ae9a211d7..771ee46d2b 100644
--- a/erts/emulator/beam/erl_driver.h
+++ b/erts/emulator/beam/erl_driver.h
@@ -87,10 +87,7 @@
 #include <stdlib.h>
 #include <string.h>		/* ssize_t on Mac OS X */
 
-#if defined(VXWORKS)
-#  include <ioLib.h>
-typedef struct iovec SysIOVec;
-#elif defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_)
+#if defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_)
 #ifndef STATIC_ERLANG_DRIVER
    /* Windows dynamic drivers, everything is different... */
 #define ERL_DRIVER_TYPES_ONLY
@@ -370,11 +367,7 @@ typedef struct erl_drv_entry {
 /* For windows dynamic drivers */
 #ifndef ERL_DRIVER_TYPES_ONLY
 
-#if defined(VXWORKS)
-#  define DRIVER_INIT(DRIVER_NAME) \
-    ErlDrvEntry* DRIVER_NAME  ## _init(void); \
-    ErlDrvEntry* DRIVER_NAME  ## _init(void)
-#elif defined(__WIN32__)
+#if defined(__WIN32__)
 #  define DRIVER_INIT(DRIVER_NAME) \
     __declspec(dllexport) ErlDrvEntry* driver_init(void); \
     __declspec(dllexport) ErlDrvEntry* driver_init(void)
diff --git a/erts/emulator/drivers/common/gzio.c b/erts/emulator/drivers/common/gzio.c
index a9303d55bc..ca6d25adb4 100644
--- a/erts/emulator/drivers/common/gzio.c
+++ b/erts/emulator/drivers/common/gzio.c
@@ -21,11 +21,6 @@
 #include "erl_driver.h"
 #include "sys.h"
 
-#ifdef VXWORKS
-/* pull in FOPEN from zutil.h instead */
-#undef F_OPEN
-#endif
-
 #ifdef __WIN32__
 #ifndef HAVE_CONFLICTING_FREAD_DECLARATION
 #define HAVE_CONFLICTING_FREAD_DECLARATION
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index cfa158ffb1..0d6419e50e 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -284,27 +284,15 @@ static unsigned long one_value = 1;
 
 #else
 
-#ifdef VXWORKS
-#include <sockLib.h>
-#include <sys/times.h>
-#include <iosLib.h>
-#include <taskLib.h>
-#include <selectLib.h>
-#include <ioLib.h>
-#else
 #include <sys/time.h>
 #ifdef NETDB_H_NEEDS_IN_H
 #include <netinet/in.h>
 #endif
 #include <netdb.h>
-#endif
 
 #include <sys/socket.h>
 #include <netinet/in.h>
 
-#ifdef VXWORKS
-#include <rpc/rpctypes.h>
-#endif
 #ifdef DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H
 #include <rpc/types.h>
 #endif
@@ -312,12 +300,10 @@ static unsigned long one_value = 1;
 #include <netinet/tcp.h>
 #include <arpa/inet.h>
 
-#if (!defined(VXWORKS))
 #include <sys/param.h>
 #ifdef HAVE_ARPA_NAMESER_H
 #include <arpa/nameser.h>
 #endif
-#endif
 
 #ifdef HAVE_SYS_SOCKIO_H
 #include <sys/sockio.h>
@@ -331,7 +317,7 @@ static unsigned long one_value = 1;
 
 /* SCTP support -- currently for UNIX platforms only: */
 #undef HAVE_SCTP
-#if (!defined(VXWORKS) && !defined(__WIN32__) && defined(HAVE_SCTP_H))
+#if (!defined(__WIN32__) && defined(HAVE_SCTP_H))
 
 #include <netinet/sctp.h>
 
@@ -478,15 +464,8 @@ static int my_strncasecmp(const char *s1, const char *s2, size_t n)
 #define sock_connect(s, addr, len)  connect((s), (addr), (len))
 #define sock_listen(s, b)           listen((s), (b))
 #define sock_bind(s, addr, len)     bind((s), (addr), (len))
-#ifdef VXWORKS
-#define sock_getopt(s,t,n,v,l)      wrap_sockopt(&getsockopt,\
-                                                 s,t,n,v,(unsigned int)(l))
-#define sock_setopt(s,t,n,v,l)      wrap_sockopt(&setsockopt,\
-                                                 s,t,n,v,(unsigned int)(l))
-#else
 #define sock_getopt(s,t,n,v,l)      getsockopt((s),(t),(n),(v),(l))
 #define sock_setopt(s,t,n,v,l)      setsockopt((s),(t),(n),(v),(l))
-#endif
 #define sock_name(s, addr, len)     getsockname((s), (addr), (len))
 #define sock_peer(s, addr, len)     getpeername((s), (addr), (len))
 #define sock_ntohs(x)               ntohs((x))
@@ -5260,50 +5239,6 @@ static ErlDrvSSizeT inet_ctl_getifaddrs(inet_descriptor* desc_p,
 
 #endif
 
-
-
-#ifdef VXWORKS
-/*
-** THIS is a terrible creature, a bug in the TCP part
-** of the old VxWorks stack (non SENS) created a race.
-** If (and only if?) a socket got closed from the other
-** end and we tried a set/getsockopt on the TCP level,
-** the task would generate a bus error...
-*/
-static STATUS wrap_sockopt(STATUS (*function)() /* Yep, no parameter
-                                                   check */,
-                           int s, int level, int optname,
-                           char *optval, unsigned int optlen 
-                           /* optlen is a pointer if function 
-                              is getsockopt... */)
-{
-    fd_set rs;
-    struct timeval timeout;
-    int to_read;
-    int ret;
-
-    FD_ZERO(&rs);
-    FD_SET(s,&rs);
-    memset(&timeout,0,sizeof(timeout));
-    if (level == IPPROTO_TCP) {
-        taskLock();
-        if (select(s+1,&rs,NULL,NULL,&timeout)) {
-            if (ioctl(s,FIONREAD,(int)&to_read) == ERROR ||
-                to_read == 0) { /* End of file, other end closed? */
-                sock_errno() = EBADF;
-                taskUnlock();
-                return ERROR;
-            }
-        }
-        ret = (*function)(s,level,optname,optval,optlen);
-        taskUnlock();
-    } else {
-        ret = (*function)(s,level,optname,optval,optlen);
-    }
-    return ret;
-}
-#endif
-
 /* Per H @ Tail-f: The original code here had problems that possibly
    only occur if you abuse it for non-INET sockets, but anyway:
    a) If the getsockopt for SO_PRIORITY or IP_TOS failed, the actual
@@ -5555,23 +5490,11 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len)
 	case INET_OPT_SNDBUF:    type = SO_SNDBUF; 
 	    DEBUGF(("inet_set_opts(%ld): s=%d, SO_SNDBUF=%d\r\n",
 		    (long)desc->port, desc->s, ival));
-	    /* 
-	     * Setting buffer sizes in VxWorks gives unexpected results
-	     * our workaround is to leave it at default.
-	     */
-#ifdef VXWORKS
-	    goto skip_os_setopt;
-#else
 	    break;
-#endif
 	case INET_OPT_RCVBUF:    type = SO_RCVBUF; 
 	    DEBUGF(("inet_set_opts(%ld): s=%d, SO_RCVBUF=%d\r\n",
 		    (long)desc->port, desc->s, ival));
-#ifdef VXWORKS
-	    goto skip_os_setopt;
-#else
 	    break;
-#endif
 	case INET_OPT_LINGER:    type = SO_LINGER; 
 	    if (len < 4)
 		return -1;
@@ -5693,9 +5616,6 @@ static int inet_set_opts(inet_descriptor* desc, char* ptr, int len)
 	}
 	DEBUGF(("inet_set_opts(%ld): s=%d returned %d\r\n",
 		(long)desc->port, desc->s, res));
-#ifdef VXWORKS
-skip_os_setopt:
-#endif
 	if (type == SO_RCVBUF) {
 	    /* make sure we have desc->bufsz >= SO_RCVBUF */
 	    if (ival > desc->bufsz)
@@ -7757,8 +7677,6 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
       return ctl_reply(INET_REP_OK, NULL, 0, rbuf, rsize);
     }
 
-#ifndef VXWORKS
-
     case INET_REQ_GETSERVBYNAME: { /* L1 Name-String L2 Proto-String */
 	char namebuf[256];
 	char protobuf[256];
@@ -7809,8 +7727,6 @@ static ErlDrvSSizeT inet_ctl(inet_descriptor* desc, int cmd, char* buf,
 	return ctl_reply(INET_REP_OK, srv->s_name, len, rbuf, rsize);
     }
 	
-#endif /* !VXWORKS */	
-
     default:
 	return ctl_xerror(EXBADPORT, rbuf, rsize);
     }
diff --git a/erts/emulator/drivers/unix/unix_efile.c b/erts/emulator/drivers/unix/unix_efile.c
index b250bac4dc..2aa373aa7d 100644
--- a/erts/emulator/drivers/unix/unix_efile.c
+++ b/erts/emulator/drivers/unix/unix_efile.c
@@ -45,23 +45,6 @@
 #include <fcntl.h>
 #endif /* DARWIN */
 
-#ifdef VXWORKS
-#include <ioLib.h>
-#include <dosFsLib.h>
-#include <nfsLib.h>
-#include <sys/stat.h>
-/*
-** Not nice to include usrLib.h as MANY normal variable names get reported
-** as shadowing globals, like 'i' for example.
-** Instead we declare the only function we use here
-*/
-/*
- * #include <usrLib.h>
- */
-extern STATUS copy(char *, char *);
-#include <errno.h>
-#endif
-
 #ifdef SUNOS4
 #  define getcwd(buf, size) getwd(buf)
 #endif
@@ -93,276 +76,27 @@ extern STATUS copy(char *, char *);
 #define DIR_MODE  0777
 #endif
 
-#ifdef VXWORKS /* Currently only used on vxworks */
-
-#define EF_ALLOC(S)		driver_alloc((S))
-#define EF_REALLOC(P, S)	driver_realloc((P), (S))
-#define EF_SAFE_ALLOC(S)	ef_safe_alloc((S))
-#define EF_SAFE_REALLOC(P, S)	ef_safe_realloc((P), (S))
-#define EF_FREE(P)		do { if((P)) driver_free((P)); } while(0)
-
-void erl_exit(int n, char *fmt, ...);
-
-static void *ef_safe_alloc(Uint s)
-{
-    void *p = EF_ALLOC(s);
-    if (!p) erl_exit(1,
-		     "unix efile drv: Can't allocate %lu bytes of memory\n",
-		     (unsigned long)s);
-    return p;
-}
-
-#if 0 /* Currently not used */
-
-static void *ef_safe_realloc(void *op, Uint s)
-{
-    void *p = EF_REALLOC(op, s);
-    if (!p) erl_exit(1,
-		     "unix efile drv: Can't reallocate %lu bytes of memory\n",
-		     (unsigned long)s);
-    return p;
-}
-
-#endif /* #if 0 */
-#endif /* #ifdef VXWORKS */
-
 #define IS_DOT_OR_DOTDOT(s) \
     (s[0] == '.' && (s[1] == '\0' || (s[1] == '.' && s[2] == '\0')))
 
-#ifdef VXWORKS
-static int vxworks_to_posix(int vx_errno);
-#endif
-
-/*
-** VxWorks (not) strikes again. Too long RESULTING paths
-** may give the infamous bus error. Have to check ALL
-** filenames and pathnames. No wonder the emulator is slow on
-** these cards...
-*/
-#ifdef VXWORKS
-#define CHECK_PATHLEN(Name, ErrInfo)		\
-   if (path_size(Name) > PATH_MAX) {		\
-       errno = ENAMETOOLONG;			\
-       return check_error(-1, ErrInfo);		\
-   }
-#else
-#define CHECK_PATHLEN(X,Y) /* Nothing */
-#endif
-
 static int check_error(int result, Efile_error* errInfo);
 
 static int
 check_error(int result, Efile_error *errInfo)
 {
     if (result < 0) {
-#ifdef VXWORKS
-	errInfo->posix_errno = errInfo->os_errno = vxworks_to_posix(errno);
-#else
 	errInfo->posix_errno = errInfo->os_errno = errno;
-#endif
 	return 0;
     }
     return 1;
 }
 
-#ifdef VXWORKS
-
-/*
- * VxWorks has different error codes for different file systems.
- * We map those to POSIX ones.
- */
-static int
-vxworks_to_posix(int vx_errno)
-{
-    DEBUGF(("[vxworks_to_posix] vx_errno: %08x\n", vx_errno));
-    switch (vx_errno) {
-	/* dosFsLib mapping */
-#ifdef S_dosFsLib_FILE_ALREADY_EXISTS    
-    case S_dosFsLib_FILE_ALREADY_EXISTS: return EEXIST;
-#else
-    case S_dosFsLib_FILE_EXISTS: return EEXIST;
-#endif
-#ifdef S_dosFsLib_BAD_DISK
-    case S_dosFsLib_BAD_DISK: return EIO;
-#endif
-#ifdef S_dosFsLib_CANT_CHANGE_ROOT
-    case S_dosFsLib_CANT_CHANGE_ROOT: return EINVAL;
-#endif
-#ifdef S_dosFsLib_NO_BLOCK_DEVICE
-    case S_dosFsLib_NO_BLOCK_DEVICE: return ENOTBLK;
-#endif
-#ifdef S_dosFsLib_BAD_SEEK
-    case S_dosFsLib_BAD_SEEK: return ESPIPE;
-#endif
-    case S_dosFsLib_VOLUME_NOT_AVAILABLE: return ENXIO;
-    case S_dosFsLib_DISK_FULL: return ENOSPC;
-    case S_dosFsLib_FILE_NOT_FOUND: return ENOENT;
-    case S_dosFsLib_NO_FREE_FILE_DESCRIPTORS: return ENFILE;
-    case S_dosFsLib_INVALID_NUMBER_OF_BYTES: return EINVAL;
-    case S_dosFsLib_ILLEGAL_NAME: return EINVAL;
-    case S_dosFsLib_CANT_DEL_ROOT: return EACCES;
-    case S_dosFsLib_NOT_FILE: return EISDIR;
-    case S_dosFsLib_NOT_DIRECTORY: return ENOTDIR;
-    case S_dosFsLib_NOT_SAME_VOLUME: return EXDEV;
-    case S_dosFsLib_READ_ONLY: return EACCES;
-    case S_dosFsLib_ROOT_DIR_FULL: return ENOSPC;
-    case S_dosFsLib_DIR_NOT_EMPTY: return EEXIST;
-    case S_dosFsLib_NO_LABEL: return ENXIO;
-    case S_dosFsLib_INVALID_PARAMETER: return EINVAL;
-    case S_dosFsLib_NO_CONTIG_SPACE: return ENOSPC;
-    case S_dosFsLib_FD_OBSOLETE: return EBADF;
-    case S_dosFsLib_DELETED: return EINVAL;
-    case S_dosFsLib_INTERNAL_ERROR: return EIO;
-    case S_dosFsLib_WRITE_ONLY: return EACCES;
-	/* nfsLib mapping - is needed since Windriver has used */
-	/* inconsistent error codes (errno.h/nfsLib.h). */
-    case S_nfsLib_NFS_OK: return 0;
-    case S_nfsLib_NFSERR_PERM: return EPERM;
-    case S_nfsLib_NFSERR_NOENT: return ENOENT;
-    case S_nfsLib_NFSERR_IO: return EIO;
-    case S_nfsLib_NFSERR_NXIO: return ENXIO;
-#ifdef S_nfsLib_NFSERR_ACCES
-    case S_nfsLib_NFSERR_ACCES: return EACCES;
-#else
-    case S_nfsLib_NFSERR_ACCESS: return EACCES;
-#endif
-    case S_nfsLib_NFSERR_EXIST: return EEXIST;
-    case S_nfsLib_NFSERR_NODEV: return ENODEV;
-    case S_nfsLib_NFSERR_NOTDIR: return ENOTDIR;
-    case S_nfsLib_NFSERR_ISDIR: return EISDIR;
-    case S_nfsLib_NFSERR_FBIG: return EFBIG;
-    case S_nfsLib_NFSERR_NOSPC: return ENOSPC;
-    case S_nfsLib_NFSERR_ROFS: return EROFS;
-    case S_nfsLib_NFSERR_NAMETOOLONG: return ENAMETOOLONG;
-    case S_nfsLib_NFSERR_NOTEMPTY: return EEXIST;
-    case S_nfsLib_NFSERR_DQUOT: return ENOSPC;
-    case S_nfsLib_NFSERR_STALE: return EINVAL;
-    case S_nfsLib_NFSERR_WFLUSH: return ENXIO;
-	/* And sometimes (...) the error codes are from ioLib (as in the */
-	/* case of the (for nfsLib) unimplemented rename function) */
-    case  S_ioLib_DISK_NOT_PRESENT: return EIO;
-#if S_ioLib_DISK_NOT_PRESENT != S_ioLib_NO_DRIVER
-    case S_ioLib_NO_DRIVER: return ENXIO;
-#endif
-    case S_ioLib_UNKNOWN_REQUEST: return ENOSYS;
-    case  S_ioLib_DEVICE_TIMEOUT: return EIO;
-#ifdef S_ioLib_UNFORMATED
-	/* Added (VxWorks 5.2 -> 5.3.1) */
-  #if S_ioLib_UNFORMATED != S_ioLib_DEVICE_TIMEOUT
-    case S_ioLib_UNFORMATED: return EIO;
-  #endif
-#endif
-#if S_ioLib_DEVICE_TIMEOUT != S_ioLib_DEVICE_ERROR
-    case S_ioLib_DEVICE_ERROR: return ENXIO;
-#endif
-    case S_ioLib_WRITE_PROTECTED: return EACCES;
-    case S_ioLib_NO_FILENAME: return EINVAL;
-    case S_ioLib_CANCELLED: return EINTR;
-    case  S_ioLib_NO_DEVICE_NAME_IN_PATH: return EINVAL;
-    case  S_ioLib_NAME_TOO_LONG: return ENAMETOOLONG;
-#ifdef S_objLib_OBJ_UNAVAILABLE
-    case S_objLib_OBJ_UNAVAILABLE: return ENOENT;
-#endif
-
-      /* Temporary workaround for a weird error in passFs 
-	 (VxWorks Simsparc only). File operation fails because of
-	 ENOENT, but errno is not set. */
-#ifdef SIMSPARCSOLARIS
-    case 0: return ENOENT;
-#endif
-
-    }
-    /* If the error code matches none of the above, assume */
-    /* it is a POSIX one already. The upper bits (>=16) are */
-    /* cleared since VxWorks uses those bits to indicate in */
-    /* what module the error occured. */
-    return vx_errno & 0xffff;
-}
-
-static int 
-vxworks_enotsup(Efile_error *errInfo) 
-{
-    errInfo->posix_errno = errInfo->os_errno = ENOTSUP;
-    return 0;
-}
-
-static int 
-count_path_length(char *pathname, char *pathname2)
-{
-    static int stack[PATH_MAX / 2 + 1];
-    int sp = 0;
-    char *tmp;
-    char *cpy = NULL;
-    int i;
-    int sum;
-    for(i = 0;i < 2;++i) {
-	if (!i) {
-	    cpy = EF_SAFE_ALLOC(strlen(pathname)+1);
-	    strcpy(cpy, pathname);
-	} else if (pathname2 != NULL) {
-	    EF_FREE(cpy);
-	    cpy = EF_SAFE_ALLOC(strlen(pathname2)+1);
-	    strcpy(cpy, pathname2);
-	} else 
-	    break;
-	    
-	for (tmp = strtok(cpy,"/"); tmp != NULL; tmp = strtok(NULL,"/")) {
-	    if (!strcmp(tmp,"..") && sp > 0)
-		--sp;
-	    else if (strcmp(tmp,".")) 
-		stack[sp++] = strlen(tmp);
-	}
-    }
-    if (cpy != NULL)
-	EF_FREE(cpy);
-    sum = 0;
-    for(i = 0;i < sp; ++i)
-	sum += stack[i]+1;
-    return (sum) ? sum : 1;
-}
-
-static int 
-path_size(char *pathname) 
-{
-    static char currdir[PATH_MAX+2];
-    if (*pathname == '/') 
-	return count_path_length(pathname,NULL);
-    ioDefPathGet(currdir);
-    strcat(currdir,"/");
-    return count_path_length(currdir,pathname);
-}
-    
-#endif /* VXWORKS */
-
 int
 efile_mkdir(Efile_error* errInfo,	/* Where to return error codes. */
 	    char* name)			/* Name of directory to create. */
 {
-    CHECK_PATHLEN(name,errInfo);
 #ifdef NO_MKDIR_MODE
-#ifdef VXWORKS
-	/* This is a VxWorks/nfs workaround for erl_tar to create
-	 * non-existant directories. (of some reason (...) VxWorks
-	 * returns, the *non-module-prefixed*, 0xd code when
-	 * trying to create a directory in a directory that doesn't exist).
-	 * (see efile_openfile)
-	 */
-    if (mkdir(name) < 0) {
-	struct stat sb;
-	if (name[0] == '\0') {
-	/* Return the correct error code enoent */ 
-	    errno = S_nfsLib_NFSERR_NOENT;
-	} else if (stat(name, &sb) == OK) {
-	    errno = S_nfsLib_NFSERR_EXIST;
-	} else if((strchr(name, '/') != NULL) && (errno == 0xd)) {
-	/* Return the correct error code enoent */ 
-	    errno = S_nfsLib_NFSERR_NOENT;
-	}
-	return check_error(-1, errInfo);
-    } else return 1;
-#else
     return check_error(mkdir(name), errInfo);
-#endif
 #else
     return check_error(mkdir(name, DIR_MODE), errInfo);
 #endif
@@ -372,16 +106,9 @@ int
 efile_rmdir(Efile_error* errInfo,	/* Where to return error codes. */
 	    char* name)			/* Name of directory to delete. */
 {
-    CHECK_PATHLEN(name, errInfo);
     if (rmdir(name) == 0) {
 	return 1;
     }
-#ifdef VXWORKS
-    if (name[0] == '\0') {
-	/* Return the correct error code enoent */ 
-	errno = S_nfsLib_NFSERR_NOENT;
-    }
-#else
     if (errno == ENOTEMPTY) {
 	errno = EEXIST;
     }
@@ -401,7 +128,6 @@ efile_rmdir(Efile_error* errInfo,	/* Where to return error codes. */
 	}
 	errno = saved_errno;
     }
-#endif
     return check_error(-1, errInfo);
 }
 
@@ -409,7 +135,6 @@ int
 efile_delete_file(Efile_error* errInfo,	/* Where to return error codes. */
 		  char* name)		/* Name of file to delete. */
 {
-    CHECK_PATHLEN(name,errInfo);
     if (unlink(name) == 0) {
 	return 1;
     }
@@ -457,32 +182,13 @@ efile_rename(Efile_error* errInfo,	/* Where to return error codes. */
 	     char* src,		        /* Original name. */
 	     char* dst)			/* New name. */
 {
-    CHECK_PATHLEN(src,errInfo);
-    CHECK_PATHLEN(dst,errInfo);
-#ifdef VXWORKS
-	
-    /* First check if src == dst, if so, just return. */
-    /* VxWorks dos file system destroys the file otherwise, */
-    /* VxWorks nfs file system rename doesn't work at all. */
-    if(strcmp(src, dst) == 0)
-	return 1;
-#endif
     if (rename(src, dst) == 0) {
 	return 1;
     }
-#ifdef VXWORKS
-    /* nfs for VxWorks doesn't support rename. We try to emulate it */
-    /* (by first copying src to dst and then deleting src). */
-    if(errno == S_ioLib_UNKNOWN_REQUEST &&     /* error code returned 
-						  by ioLib (!) */ 
-       copy(src, dst) == OK &&
-       unlink(src) == OK)
-	return 1;
-#endif
     if (errno == ENOTEMPTY) {
 	errno = EEXIST;
     }
-#if defined (sparc) && !defined(VXWORKS)
+#if defined (sparc)
     /*
      * SunOS 4.1.4 reports overwriting a non-empty directory with a
      * directory as EINVAL instead of EEXIST (first rule out the correct
@@ -543,7 +249,6 @@ int
 efile_chdir(Efile_error* errInfo,   /* Where to return error codes. */
 	    char* name)		    /* Name of directory to make current. */
 {
-    CHECK_PATHLEN(name, errInfo);
     return check_error(chdir(name), errInfo);
 }
 
@@ -600,8 +305,6 @@ efile_readdir(Efile_error* errInfo,	/* Where to return error codes. */
      * If this is the first call, we must open the directory.
      */
 
-    CHECK_PATHLEN(name, errInfo);
-
     if (*p_dir_handle == NULL) {
 	dp = opendir(name);
 	if (dp == NULL)
@@ -641,26 +344,8 @@ efile_openfile(Efile_error* errInfo,	/* Where to return error codes. */
     struct stat statbuf;
     int fd;
     int mode;			/* Open mode. */
-#ifdef VXWORKS
-    char pathbuff[PATH_MAX+2];
-    char sbuff[PATH_MAX*2];
-    char *totbuff = sbuff;
-    int nameneed;
-#endif
-
-
-    CHECK_PATHLEN(name, errInfo);
-
-#ifdef VXWORKS
-    /* Have to check that it's not a directory. */
-    if (stat(name,&statbuf) != ERROR && ISDIR(statbuf)) {
-	errno = EISDIR;
-	return check_error(-1, errInfo);
-    }	
-#endif	
 
     if (stat(name, &statbuf) >= 0 && !ISREG(statbuf)) {
-#if !defined(VXWORKS) && !defined(OSE)
 	/*
 	 * For UNIX only, here is some ugly code to allow
 	 * /dev/null to be opened as a file.
@@ -677,12 +362,9 @@ efile_openfile(Efile_error* errInfo,	/* Where to return error codes. */
 	    }
 	}
 	if (!(dev_null_ino && statbuf.st_ino == dev_null_ino)) {
-#endif
 	    errno = EISDIR;
 	    return check_error(-1, errInfo);
-#if !defined(VXWORKS) && !defined(OSE)
 	}
-#endif
     }
 
     switch (flags & (EFILE_MODE_READ|EFILE_MODE_WRITE)) {
@@ -706,49 +388,14 @@ efile_openfile(Efile_error* errInfo,	/* Where to return error codes. */
 
     if (flags & EFILE_MODE_APPEND) {
 	mode &= ~O_TRUNC;
-#ifndef VXWORKS
-	mode |= O_APPEND; /* Dont make VxWorks think things it shouldn't */
-#endif
+	mode |= O_APPEND;
     }
 
     if (flags & EFILE_MODE_EXCL) {
 	mode |= O_EXCL;
     }
 
-#ifdef VXWORKS
-    if (*name != '/') {
-	/* Make sure it is an absolute pathname, because ftruncate needs it */
-	ioDefPathGet(pathbuff);
-	strcat(pathbuff,"/");
-	nameneed = strlen(pathbuff) + strlen(name) + 1;
-	if (nameneed > PATH_MAX*2)
-	    totbuff = EF_SAFE_ALLOC(nameneed);
-	strcpy(totbuff,pathbuff);
-	strcat(totbuff,name);
-	fd = open(totbuff, mode, FILE_MODE);
-	if (totbuff != sbuff)
-	    EF_FREE(totbuff);
-    } else {
-	fd = open(name, mode, FILE_MODE);
-    }
-#else
     fd = open(name, mode, FILE_MODE);
-#endif
-
-#ifdef VXWORKS
-
-	/* This is a VxWorks/nfs workaround for erl_tar to create 
-	 * non-existant directories. (of some reason (...) VxWorks
-	 * returns, the *non-module-prefixed*, 0xd code when
-	 * trying to write a file in a directory that doesn't exist).
-	 * (see efile_mkdir)
-	 */
-    if ((fd < 0) && (strchr(name, '/') != NULL) && (errno == 0xd)) {
-	/* Return the correct error code enoent */ 
-	errno = S_nfsLib_NFSERR_NOENT;
-	return check_error(-1, errInfo);
-    }
-#endif
 
     if (!check_error(fd, errInfo))
 	return 0;
@@ -797,11 +444,7 @@ efile_fsync(Efile_error *errInfo, /* Where to return error codes. */
 	    int fd)               /* File descriptor for file to sync. */
 {
 #ifdef NO_FSYNC
-#ifdef VXWORKS
-    return check_error(ioctl(fd, FIOSYNC, 0), errInfo); 
-#else
-  undefined fsync
-#endif /* VXWORKS */
+  undefined fsync /* XXX: Really? */
 #else
 #if defined(DARWIN) && defined(F_FULLFSYNC)
     return check_error(fcntl(fd, F_FULLFSYNC), errInfo);
@@ -818,21 +461,8 @@ efile_fileinfo(Efile_error* errInfo, Efile_info* pInfo,
     struct stat statbuf;	/* Information about the file */
     int result;
 
-#ifdef VXWORKS
-    if (*name == '\0') {
-	errInfo->posix_errno = errInfo->os_errno = ENOENT;
-	return 0;
-    }
-#endif
-
-    CHECK_PATHLEN(name, errInfo);
-
     if (info_for_link) {
-#if (defined(VXWORKS))
-	result = stat(name, &statbuf);
-#else
 	result = lstat(name, &statbuf);
-#endif
     } else {
 	result = stat(name, &statbuf);
     }	
@@ -849,19 +479,9 @@ efile_fileinfo(Efile_error* errInfo, Efile_info* pInfo,
 
 #ifdef NO_ACCESS
     /* Just look at read/write access for owner. */
-#ifdef VXWORKS
-
-    pInfo->access = FA_NONE;
-    if(statbuf.st_mode & S_IRUSR)
-        pInfo->access |= FA_READ;
-    if(statbuf.st_mode & S_IWUSR)
-        pInfo->access |= FA_WRITE;
-    
-#else
 
     pInfo->access = ((statbuf.st_mode >> 6) & 07) >> 1;
 
-#endif /* VXWORKS */
 #else
     pInfo->access = FA_NONE;
     if (access(name, R_OK) == 0)
@@ -902,35 +522,6 @@ efile_write_info(Efile_error *errInfo, Efile_info *pInfo, char *name)
 {
     struct utimbuf tval;
 
-    CHECK_PATHLEN(name, errInfo);
-
-#ifdef VXWORKS
-
-    if (pInfo->mode != -1) {
-	int fd;
-	struct stat statbuf;
-
-	fd = open(name, O_RDONLY, 0);
-	if (!check_error(fd, errInfo))
-	    return 0;
-	if (fstat(fd, &statbuf) < 0) {
-	    close(fd);
-	    return check_error(-1, errInfo);
-	}
-	if (pInfo->mode & S_IWUSR) {
-	    /* clear read only bit */
-	    statbuf.st_attrib &= ~DOS_ATTR_RDONLY;
-	} else {
-	    /* set read only bit */
-	    statbuf.st_attrib |= DOS_ATTR_RDONLY;
-	}
-	/* This should work for dos files but not for nfs ditos, so don't 
-	 * report errors (to avoid problems when running e.g. erl_tar)
-	 */
-	ioctl(fd, FIOATTRIBSET, statbuf.st_attrib);
-	close(fd);
-    }
-#else
     /*
      * On some systems chown will always fail for a non-root user unless
      * POSIX_CHOWN_RESTRICTED is not set.  Others will succeed as long as 
@@ -952,20 +543,10 @@ efile_write_info(Efile_error *errInfo, Efile_info *pInfo, char *name)
 	}
     }
 
-#endif /* !VXWORKS */
-
     tval.actime  = pInfo->accessTime;
     tval.modtime = pInfo->modifyTime;
 
-#ifdef VXWORKS
-    /* VxWorks' utime doesn't work when the file is a nfs mounted
-     * one, don't report error if utime fails.
-     */
-    utime(name, &tval);
-    return 1;
-#else
     return check_error(utime(name, &tval), errInfo);
-#endif
 }
 
 
@@ -979,11 +560,6 @@ efile_write(Efile_error* errInfo,	/* Where to return error codes. */
 {
     ssize_t written;			/* Bytes written in last operation. */
 
-#ifdef VXWORKS
-    if (flags & EFILE_MODE_APPEND) {
-	lseek(fd, 0, SEEK_END); /* Naive append emulation on VXWORKS */
-    }
-#endif
     while (count > 0) {
 	if ((written = write(fd, buf, count)) < 0) {
 	    if (errno != EINTR)
@@ -1012,12 +588,6 @@ efile_writev(Efile_error* errInfo,   /* Where to return error codes */
 
     ASSERT(iovcnt >= 0);
     
-#ifdef VXWORKS
-    if (flags & EFILE_MODE_APPEND) {
-	lseek(fd, 0, SEEK_END);      /* Naive append emulation on VXWORKS */
-    }
-#endif
-
     while (cnt < iovcnt) {
 	if ((! iov[cnt].iov_base) || (iov[cnt].iov_len <= 0)) {
 	    /* Empty buffer - skip */
@@ -1226,118 +796,6 @@ efile_seek(Efile_error* errInfo,      /* Where to return error codes. */
 int
 efile_truncate_file(Efile_error* errInfo, int *fd, int flags)
 {
-#ifdef VXWORKS
-    off_t offset;
-    char namebuf[PATH_MAX+1];
-    char namebuf2[PATH_MAX+10];
-    int new;
-    int dummy;
-    int i;
-    int left;
-    static char buff[1024];
-    struct stat st;
-    Efile_error tmperr;
-
-    if ((offset = lseek(*fd, 0, 1)) < 0) {
-	return check_error((int) offset,errInfo);
-    }
-    if (ftruncate(*fd, offset) < 0) {
-	if (vxworks_to_posix(errno) != EINVAL) {
-	    return check_error(-1, errInfo);
-	}
-	/*
-	** Kludge
-	*/
-	if(ioctl(*fd,FIOGETNAME,(int) namebuf) < 0) {
-	    return check_error(-1, errInfo);
-	}
-	for(i=0;i<1000;++i) {
-	    sprintf(namebuf2,"%s%d",namebuf,i);
-	    CHECK_PATHLEN(namebuf2,errInfo);
-	    if (stat(namebuf2,&st) < 0) {
-		break;
-	    }
-	}
-	if (i > 1000) {
-	    errno = EINVAL;
-	    return check_error(-1, errInfo);
-	}
-	if (close(*fd) < 0) {
-	    return check_error(-1, errInfo);
-	}
-	if (efile_rename(&tmperr,namebuf,namebuf2) < 0) {
-	    i = check_error(-1,&tmperr);
-	    if (!efile_openfile(errInfo,namebuf,flags | EFILE_NO_TRUNCATE,
-				fd,&dummy)) {
-		*fd = -1;
-	    } else {
-		*errInfo = tmperr;
-	    }
-	    return i;
-	}
-	if ((*fd = open(namebuf2, O_RDONLY, 0)) < 0) {
-	    i = check_error(-1,errInfo);
-	    efile_rename(&tmperr,namebuf2,namebuf); /* at least try */
-	    if (!efile_openfile(errInfo,namebuf,flags | EFILE_NO_TRUNCATE,
-				fd,&dummy)) {
-		*fd = -1;
-	    } else {
-		lseek(*fd,offset,SEEK_SET);
-	    }
-	    return i;
-	}
-	/* Point of no return... */
-
-	if ((new = open(namebuf,O_RDWR | O_CREAT, FILE_MODE)) < 0) {
-	    close(*fd);
-	    *fd = -1;
-	    return 0;
-	}
-	left = offset;
-	
-	while (left) {
-	    if ((i = read(*fd,buff,(left > 1024) ? 1024 : left)) < 0) {
-		i = check_error(-1,errInfo);
-		close(new);
-		close(*fd);
-		unlink(namebuf);
-		efile_rename(&tmperr,namebuf2,namebuf); /* at least try */
-		if (!efile_openfile(errInfo,namebuf,flags | EFILE_NO_TRUNCATE,
-				    fd,&dummy)) {
-		    *fd = -1;
-		} else {
-		    lseek(*fd,offset,SEEK_SET);
-		}
-		return i;
-	    }
-	    left -= i;
-	    if (write(new,buff,i) < 0) {
-		i = check_error(-1,errInfo);
-		close(new);
-		close(*fd);
-		unlink(namebuf);
-		rename(namebuf2,namebuf); /* at least try */
-		if (!efile_openfile(errInfo,namebuf,flags | EFILE_NO_TRUNCATE,
-				    fd,&dummy)) {
-		    *fd = -1;
-		} else {
-		    lseek(*fd,offset,SEEK_SET);
-		}
-		return i;
-	    }
-	}
-	close(*fd);
-	unlink(namebuf2);
-	close(new);
-	i = efile_openfile(errInfo,namebuf,flags | EFILE_NO_TRUNCATE,fd,
-			   &dummy);
-	if (i) {
-	    lseek(*fd,offset,SEEK_SET);
-	}
-	return i;
-    }
-    return 1;
-#else
 #ifndef NO_FTRUNCATE
     off_t offset;
 
@@ -1347,15 +805,11 @@ efile_truncate_file(Efile_error* errInfo, int *fd, int flags)
 #else
     return 1;
 #endif
-#endif
 }
 
 int
 efile_readlink(Efile_error* errInfo, char* name, char* buffer, size_t size)
 {
-#ifdef VXWORKS
-    return vxworks_enotsup(errInfo);
-#else
     int len;
     ASSERT(size > 0);
     len = readlink(name, buffer, size-1);
@@ -1364,7 +818,6 @@ efile_readlink(Efile_error* errInfo, char* name, char* buffer, size_t size)
     }
     buffer[len] = '\0';
     return 1;
-#endif
 }
 
 int
@@ -1377,21 +830,13 @@ efile_altname(Efile_error* errInfo, char* name, char* buffer, size_t size)
 int
 efile_link(Efile_error* errInfo, char* old, char* new)
 {
-#ifdef VXWORKS
-    return vxworks_enotsup(errInfo);
-#else
     return check_error(link(old, new), errInfo);
-#endif
 }
 
 int
 efile_symlink(Efile_error* errInfo, char* old, char* new)
 {
-#ifdef VXWORKS
-    return vxworks_enotsup(errInfo);
-#else
     return check_error(symlink(old, new), errInfo);
-#endif
 }
 
 int
-- 
cgit v1.2.3


From ee6db186807adc034107ea380d847fc12d0237d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Mon, 16 Jul 2012 18:49:53 +0200
Subject: erts: Remove VxWorks sub-directory

---
 erts/emulator/sys/vxworks/driver_int.h           |   30 -
 erts/emulator/sys/vxworks/erl_main.c             |   45 -
 erts/emulator/sys/vxworks/erl_vxworks_sys.h      |  184 --
 erts/emulator/sys/vxworks/erl_vxworks_sys_ddll.c |  253 ---
 erts/emulator/sys/vxworks/sys.c                  | 2610 ----------------------
 5 files changed, 3122 deletions(-)
 delete mode 100644 erts/emulator/sys/vxworks/driver_int.h
 delete mode 100644 erts/emulator/sys/vxworks/erl_main.c
 delete mode 100644 erts/emulator/sys/vxworks/erl_vxworks_sys.h
 delete mode 100644 erts/emulator/sys/vxworks/erl_vxworks_sys_ddll.c
 delete mode 100644 erts/emulator/sys/vxworks/sys.c

(limited to 'erts/emulator')

diff --git a/erts/emulator/sys/vxworks/driver_int.h b/erts/emulator/sys/vxworks/driver_int.h
deleted file mode 100644
index f6bc71a799..0000000000
--- a/erts/emulator/sys/vxworks/driver_int.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * %CopyrightBegin%
- * 
- * Copyright Ericsson AB 1997-2009. All Rights Reserved.
- * 
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- * 
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- * 
- * %CopyrightEnd%
- */
-/*----------------------------------------------------------------------
-** Purpose : System dependant driver declarations
-**---------------------------------------------------------------------- */
-
-#ifndef __DRIVER_INT_H__
-#define __DRIVER_INT_H__
-
-#include <ioLib.h>
-
-typedef struct iovec SysIOVec;
-
-#endif
diff --git a/erts/emulator/sys/vxworks/erl_main.c b/erts/emulator/sys/vxworks/erl_main.c
deleted file mode 100644
index c9b44a635a..0000000000
--- a/erts/emulator/sys/vxworks/erl_main.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * %CopyrightBegin%
- * 
- * Copyright Ericsson AB 2000-2009. All Rights Reserved.
- * 
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- * 
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- * 
- * %CopyrightEnd%
- */
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-#include "sys.h"
-#include "erl_vm.h"
-
-#if defined(__GNUC__)
-/*
- * The generated assembler does the usual trick (relative
- * branch-and-link to next instruction) to get a copy of the
- * instruction ptr. Instead of branching to an explicit zero offset,
- * it branches to the symbol `__eabi' --- which is expected to be
- * undefined and thus zero (if it is defined as non-zero, things will
- * be interesting --- as in the Chinese curse). To shut up the VxWorks
- * linker, we define `__eabi' as zero.
- *
- * This is just a work around. It's really Wind River's GCC's code
- * generator that should be fixed.
- */
-__asm__(".equ __eabi, 0");
-#endif
-
-void 
-erl_main(int argc, char **argv)
-{
-    erl_start(argc, argv);
-}
diff --git a/erts/emulator/sys/vxworks/erl_vxworks_sys.h b/erts/emulator/sys/vxworks/erl_vxworks_sys.h
deleted file mode 100644
index 3d53238ea6..0000000000
--- a/erts/emulator/sys/vxworks/erl_vxworks_sys.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * %CopyrightBegin%
- * 
- * Copyright Ericsson AB 1997-2011. All Rights Reserved.
- * 
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- * 
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- * 
- * %CopyrightEnd%
- */
-#ifndef __ERL_VXWORKS_SYS_H__
-#define __ERL_VXWORKS_SYS_H__
-
-/* stdarg.h don't work without this one... */
-#include <vxWorks.h>
-
-#include <stdio.h>
-#include <math.h>
-#include <limits.h>
-#include <stdlib.h>
-#define index StringIndexFunctionThatIDontWantDeclared
-#include <string.h>
-#undef index
-
-
-
-#include <sys/times.h>
-#include <time.h>/* xxxP */
-
-#include <dirent.h>
-#include <sys/stat.h>
-
-/* xxxP from unix_sys.h  begin */
-
-/*
- * Make sure that MAXPATHLEN is defined.
- */
-
-#ifndef MAXPATHLEN
-#   ifdef PATH_MAX
-#       define MAXPATHLEN PATH_MAX
-#   else
-#       define MAXPATHLEN 2048
-#   endif
-#endif
-
-/* xxxP end */
-
-
-/* Unimplemented math functions */
-#define NO_ASINH
-#define NO_ACOSH
-#define NO_ATANH
-#define NO_ERF
-#define NO_ERFC
-
-/* Stuff that is useful for port programs, drivers, etc */
-#ifndef VXWORKS
-#define VXWORKS
-#endif
-
-#define DONT_USE_MAIN
-#define NO_FSYNC
-#define NO_MKDIR_MODE
-#define NO_UMASK
-#define NO_SYMBOLIC_LINKS
-#define NO_DEVICE_FILES
-#define NO_UID
-#define NO_ACCESS
-#define NO_FCNTL
-#define NO_SYSLOG
-#define NO_SYSCONF
-#define NO_PWD			/* XXX Means what? */
-#define NO_DAEMON
-/* This chooses ~250 reductions instead of 500 in config.h */
-#if (CPU == CPU32)
-#define SLOW_PROCESSOR
-#endif
-
-/*
- * Even though we does not always have small memories on VxWorks
- * we certainly does not have virtual memory.
- */
-#if !defined(LARGE_MEMORY)
-#define SMALL_MEMORY
-#endif
-
-/*************** Floating point exception handling ***************/
-
-/* There are no known ways to customize the handling of invalid floating
-   point operations, such as matherr() or ieee_handler(), in VxWorks 5.1. */
-
-#if (CPU == MC68040 || CPU == CPU32 || CPU == PPC860 || CPU == PPC32 ||        \
-     CPU == PPC603 || CPU == PPC604 || CPU == SIMSPARCSOLARIS)
-
-/* VxWorks 5.1 on Motorola 68040 never generates SIGFPE, but sets the
-   result of invalid floating point ops to Inf and NaN - unfortunately
-   the way to test for those values is undocumented and hidden in a
-   "private" include file...  */
-/* Haven't found any better way, as of yet, for ppc860 xxxP*/
-
-#include <private/mathP.h>
-#define NO_FPE_SIGNALS
-#define erts_get_current_fp_exception() NULL
-#define __ERTS_FP_CHECK_INIT(fpexnp) do {} while (0)
-#define __ERTS_FP_ERROR(fpexnp, f, Action) if (isInf(f) || isNan(f)) { Action; } else {}
-#define __ERTS_FP_ERROR_THOROUGH(fpexnp, f, Action) __ERTS_FP_ERROR(fpexnp, f, Action)
-#define __ERTS_SAVE_FP_EXCEPTION(fpexnp)
-#define __ERTS_RESTORE_FP_EXCEPTION(fpexnp)
-
-#define ERTS_FP_CHECK_INIT(p)		__ERTS_FP_CHECK_INIT(&(p)->fp_exception)
-#define ERTS_FP_ERROR(p, f, A)		__ERTS_FP_ERROR(&(p)->fp_exception, f, A)
-#define ERTS_SAVE_FP_EXCEPTION(p)	__ERTS_SAVE_FP_EXCEPTION(&(p)->fp_exception)
-#define ERTS_RESTORE_FP_EXCEPTION(p)	__ERTS_RESTORE_FP_EXCEPTION(&(p)->fp_exception)
-#define ERTS_FP_ERROR_THOROUGH(p, f, A)	__ERTS_FP_ERROR_THOROUGH(&(p)->fp_exception, f, A)
-
-#define erts_sys_block_fpe() 0
-#define erts_sys_unblock_fpe(x) do{}while(0)
-
-#if (CPU == PPC603)
-/* Need fppLib to change the Floating point registers  
-   (fix_registers in sys.c)*/
-
-#include <fppLib.h>
-
-#endif /* PPC603 */
-
-#else
-
-Unsupported CPU value !
-
-#endif
-
-typedef void *GETENV_STATE;
-
-#define HAVE_GETHRTIME
-
-extern int erts_clock_rate;
-
-#define SYS_CLK_TCK (erts_clock_rate)
-
-#define SYS_CLOCK_RESOLUTION 1
-
-typedef struct _vxworks_tms {
-    clock_t tms_utime;
-    clock_t tms_stime;
-    clock_t tms_cutime;
-    clock_t tms_cstime;
-} SysTimes;
-
-typedef long long SysHrTime;
-
-typedef time_t erts_time_t;
-typedef struct timeval SysTimeval;
-
-extern int sys_init_hrtime(void);
-extern SysHrTime sys_gethrtime(void);
-extern void sys_gettimeofday(SysTimeval *tvp);
-extern clock_t sys_times(SysTimes *t);
-
-#define SIZEOF_SHORT   2
-#define SIZEOF_INT     4
-#define SIZEOF_LONG    4
-#define SIZEOF_VOID_P  4
-#define SIZEOF_SIZE_T  4
-#define SIZEOF_OFF_T   4
-
-/*
- * Temporary buffer *only* used in sys code.
- */
-#define SYS_TMP_BUF_SIZE 65536
-
-/* Need to be able to interrupt erts_poll_wait() from signal handler */
-#define ERTS_POLL_NEED_ASYNC_INTERRUPT_SUPPORT
-
-#endif /* __ERL_VXWORKS_SYS_H__ */
diff --git a/erts/emulator/sys/vxworks/erl_vxworks_sys_ddll.c b/erts/emulator/sys/vxworks/erl_vxworks_sys_ddll.c
deleted file mode 100644
index c56c633b2f..0000000000
--- a/erts/emulator/sys/vxworks/erl_vxworks_sys_ddll.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * %CopyrightBegin%
- * 
- * Copyright Ericsson AB 2006-2009. All Rights Reserved.
- * 
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- * 
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- * 
- * %CopyrightEnd%
- */
-
-/* 
- * Interface functions to the dynamic linker using dl* functions.
- * (As far as I know it works on SunOS 4, 5, Linux and FreeBSD. /Seb) 
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-#include <vxWorks.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#include <a_out.h>
-#include <symLib.h>
-#include <loadLib.h>
-#include <unldLib.h>
-#include <moduleLib.h>
-#include <sysSymTbl.h>
-#include "sys.h"
-#include "global.h"
-#include "erl_alloc.h"
-#include "erl_driver.h"
-
-#define EXT_LEN          4
-#define FILE_EXT         ".eld"
-#define ALT_FILE_EXT     ".o"
-/* ALT_FILE_EXT must not be longer than FILE_EXT */
-#define DRIVER_INIT_SUFFIX "_init"
-
-static MODULE_ID get_mid(char *);
-static FUNCPTR lookup(char *);
-
-typedef enum {
-    NoError,
-    ModuleNotFound,
-    ModuleNotUnloadable,
-    UnknownError
-} FakeSytemError;
-
-static char *errcode_tab[] = {
-    "No error",
-    "Module/file not found",
-    "Module cannot be unloaded",
-    "Unknown error"
-};
-
-void erl_sys_ddll_init(void) {
-    return;
-}
-/* 
- * Open a shared object
- */
-int erts_sys_ddll_open2(char *full_name, void **handle, ErtsSysDdllError* err)
-{
-    int len;
-    
-    if (erts_sys_ddll_open_noext(full_name, handle, err) == ERL_DE_NO_ERROR) {
-	return ERL_DE_NO_ERROR;
-    }
-    if ((len = sys_strlen(full_name)) > PATH_MAX-EXT_LEN) {
-	return ERL_DE_LOAD_ERROR_NAME_TO_LONG;
-    } else {
-	static char dlname[PATH_MAX + 1];
-	
-	sys_strcpy(dlname, full_name);
-	sys_strcpy(dlname+len, FILE_EXT);
-	if (erts_sys_ddll_open_noext(dlname, handle, err) == ERL_DE_NO_ERROR) {
-	    return ERL_DE_NO_ERROR;
-	}
-	sys_strcpy(dlname+len, ALT_FILE_EXT);
-	return erts_sys_ddll_open_noext(dlname, handle, err);
-    }
-}
-int erts_sys_ddll_open_noext(char *dlname, void **handle, ErtsSysDdllError* err)
-{
-    MODULE_ID mid;
-    
-    if((mid = get_mid(dlname)) == NULL) {
-	return ERL_DE_DYNAMIC_ERROR_OFFSET - ((int) ModuleNotFound);
-    }
-    *handle = (void *) mid;
-    return ERL_DE_NO_ERROR;
-}
-
-/* 
- * Find a symbol in the shared object
- */
-#define PREALLOC_BUFFER_SIZE 256
-int erts_sys_ddll_sym2(void *handle, char *func_name, void **function, ErtsSysDdllError* err)
-{
-    FUNCPTR proc;
-    static char statbuf[PREALLOC_BUFFER_SIZE];
-    char *buf = statbuf;
-    int need;
-
-    if ((proc = lookup(func_name)) == NULL) {
-	if ((need = strlen(func_name)+2) > PREALLOC_BUFFER_SIZE) {
-	    buf = erts_alloc(ERTS_ALC_T_DDLL_TMP_BUF,need);
-	}
-	buf[0] = '_';
-	sys_strcpy(buf+1,func_name);
-	proc = lookup(buf);
-	if (buf != statbuf) {
-	    erts_free(ERTS_ALC_T_DDLL_TMP_BUF, buf);
-	}
-	if (proc == NULL) {
-	    return  ERL_DE_LOOKUP_ERROR_NOT_FOUND;
-	}
-    }
-    *function = (void *) proc;
-    return ERL_DE_NO_ERROR;
-}
-
-/* XXX:PaN These two will be changed with new driver interface! */
-
-/* 
- * Load the driver init function, might appear under different names depending on object arch... 
- */
-
-int erts_sys_ddll_load_driver_init(void *handle, void **function)
-{
-    MODULE_ID mid = (MODULE_ID) handle;
-    char *modname;
-    char *cp;
-    static char statbuf[PREALLOC_BUFFER_SIZE];
-    char *fname = statbuf;
-    int len;
-    int res;
-    void *func;
-    int need;
-
-    if((modname = moduleNameGet(mid)) == NULL) {
-	return ERL_DE_DYNAMIC_ERROR_OFFSET - ((int) ModuleNotFound);
-    }
-    
-    if((cp = strrchr(modname, '.')) == NULL) {
-	len = strlen(modname);
-    } else {
-	len = cp - modname;
-    }
-    
-    need =  len + strlen(DRIVER_INIT_SUFFIX) + 1;
-    if (need > PREALLOC_BUFFER_SIZE) {
-	fname = erts_alloc(ERTS_ALC_T_DDLL_TMP_BUF, need); /* erts_alloc exits on failure */
-    }
-    sys_strncpy(fname, modname, len);
-    fname[len] = '\0';
-    sys_strcat(fname, DRIVER_INIT_SUFFIX);
-    res = erts_sys_ddll_sym(handle, fname, &func);
-    if (fname != statbuf) {
-	erts_free(ERTS_ALC_T_DDLL_TMP_BUF, fname);
-    }
-    if ( res != ERL_DE_NO_ERROR) {
-	return res;
-    }
-    *function = func;
-    return ERL_DE_NO_ERROR;
-}
-
-int erts_sys_ddll_load_nif_init(void *handle, void **function, ErtsSysDdllError* err)
-{
-    /* NIFs not implemented for vxworks */
-    return ERL_DE_ERROR_NO_DDLL_FUNCTIONALITY;
-}
-
-/* 
- * Call the driver_init function, whatever it's really called, simple on unix... 
-*/
-void *erts_sys_ddll_call_init(void *function) {
-    void *(*initfn)(void) = function;
-    return (*initfn)();
-}
-void *erts_sys_ddll_call_nif_init(void *function) {
-    return erts_sys_ddll_call_init(function);
-}
-
-
-/* 
- * Close a chared object
- */
-int erts_sys_ddll_close2(void *handle, ErtsSysDdllError* err)
-{
-    MODULE_ID mid = (MODULE_ID) handle;
-    if (unld(mid, 0) < 0) {
-	return  ERL_DE_DYNAMIC_ERROR_OFFSET - ((int) ModuleNotUnloadable);
-    }
-    return  ERL_DE_NO_ERROR;
-}
-
-/*
- * Return string that describes the (current) error
- */
-char *erts_sys_ddll_error(int code)
-{
-    int actual_code;
-    if (code > ERL_DE_DYNAMIC_ERROR_OFFSET) {
-	return "Unspecified error";
-    }
-    actual_code = -1*(code - ERL_DE_DYNAMIC_ERROR_OFFSET);
-    if (actual_code > ((int) UnknownError)) {
-	actual_code = UnknownError;
-    }
-    return  errcode_tab[actual_code];
-}
-
-static FUNCPTR lookup(char *sym)
-{
-    FUNCPTR entry;
-    SYM_TYPE type;
-    
-    if (symFindByNameAndType(sysSymTbl, sym, (char **)&entry,
-			     &type, N_EXT | N_TEXT, N_EXT | N_TEXT) != OK) {
-	return NULL ;
-    }
-    return entry;
-}
-
-static MODULE_ID get_mid(char* name) 
-{ 
-    int fd;
-    MODULE_ID mid = NULL;
-    
-    if((fd = open(name, O_RDONLY, 0664)) >= 0) {
-	mid = loadModule(fd, GLOBAL_SYMBOLS);
-	close(fd);
-    }
-    return mid;
-}
-
-void erts_sys_ddll_free_error(ErtsSysDdllError* err)
-{
-    /* NYI */
-}
-
diff --git a/erts/emulator/sys/vxworks/sys.c b/erts/emulator/sys/vxworks/sys.c
deleted file mode 100644
index 739b026fb1..0000000000
--- a/erts/emulator/sys/vxworks/sys.c
+++ /dev/null
@@ -1,2610 +0,0 @@
-/*
- * %CopyrightBegin%
- *
- * Copyright Ericsson AB 1997-2011. All Rights Reserved.
- *
- * The contents of this file are subject to the Erlang Public License,
- * Version 1.1, (the "License"); you may not use this file except in
- * compliance with the License. You should have received a copy of the
- * Erlang Public License along with this software. If not, it can be
- * retrieved online at http://www.erlang.org/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * %CopyrightEnd%
- */
-/*
- * system-dependent functions
- * 
- */
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-#include <vxWorks.h>
-#include <version.h>
-#include <string.h>
-#include <types.h>
-#include <sigLib.h>
-#include <ioLib.h>
-#include <iosLib.h>
-#include <envLib.h>
-#include <fioLib.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <symLib.h>
-#include <sysLib.h>
-#include <sysSymTbl.h>
-#include <loadLib.h>
-#include <taskLib.h>
-#include <taskVarLib.h>
-#include <taskHookLib.h>
-#include <tickLib.h>
-#include <time.h>
-#include <rngLib.h>
-#include <semLib.h>
-#include <selectLib.h>
-#include <sockLib.h>
-#include <a_out.h>
-#include <wdLib.h>
-#include <timers.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <stdarg.h>
-
-
-#ifndef WANT_NONBLOCKING
-#define WANT_NONBLOCKING
-#endif
-
-#include "sys.h"
-#include "erl_alloc.h"
-
-/* don't need global.h, but bif_table.h (included by bif.h) won't compile otherwise */
-#include "global.h" 
-#include "bif.h"
-
-#include "erl_sys_driver.h"
-
-#include "elib_stat.h"
-
-#include "reclaim_private.h" /* Some more or less private reclaim facilities */
-
-#ifndef RETSIGTYPE
-#define RETSIGTYPE void
-#endif
-
-EXTERN_FUNCTION(void, erl_start, (int, char**));
-EXTERN_FUNCTION(void, erl_exit, (int n, char*, _DOTS_));
-EXTERN_FUNCTION(void, erl_error, (char*, va_list));
-EXTERN_FUNCTION(int, driver_interrupt, (int, int));
-EXTERN_FUNCTION(void, increment_time, (int));
-EXTERN_FUNCTION(int, erts_next_time, (_VOID_));
-EXTERN_FUNCTION(void, set_reclaim_free_function, (FreeFunction));
-EXTERN_FUNCTION(int, erl_mem_info_get, (MEM_PART_STATS *));
-EXTERN_FUNCTION(void, erl_crash_dump, (char* file, int line, char* fmt, ...));
-
-#define ISREG(st) (((st).st_mode&S_IFMT) == S_IFREG)
-
-/* these are defined in usrLib.c */
-extern int spTaskPriority, spTaskOptions;
-
-/* forward declarations */
-static FUNCTION(FUNCPTR, lookup, (char*));
-static FUNCTION(int, read_fill, (int, char*, int));
-#if (CPU == SPARC)
-static FUNCTION(RETSIGTYPE, fpe_sig_handler, (int)); /*where is this fun? */
-#elif (CPU == PPC603)
-static FUNCTION(void, fix_registers, (void));
-#endif
-static FUNCTION(void, close_pipes, (int*, int*, int));
-static FUNCTION(void, delete_hook, (void));
-static FUNCTION(void, initialize_allocation, (void));
-
-FUNCTION(STATUS, uxPipeDrv, (void));
-FUNCTION(STATUS, pipe, (int*));
-FUNCTION(void, uxPipeShow, (int));
-
-void erl_main(int argc, char **argv);
-void argcall(char *args);
-
-/* Malloc-realted functions called from the VxWorks shell */
-EXTERN_FUNCTION(int, erl_set_memory_block, 
-		(int, int, int, int, int, int, int, int, int, int));
-EXTERN_FUNCTION(int, erl_memory_show, 
-		(int, int, int, int, int, int, int, int, int, int));
-
-#define DEFAULT_PORT_STACK_SIZE  100000 
-static int port_stack_size;
-
-static int erlang_id = 0;	/* Inited at loading, set/reset at each run */
-
-/* interval time reported to emulator */
-static int sys_itime;
-
-/* XXX - This is defined in .../config/all/configAll.h (NUM_FILES),
-   and not easily accessible at compile or run time - however,
-   in VxWorks 5.1 it is stored in the (undocumented?) maxFiles variable;
-   probably shouldn't depend on it, but we try to pick it up... */
-static int max_files = 50;	/* default configAll.h */
-
-int erts_vxworks_max_files;
-
-/* 
- * used by the break handler (set by signal handler on ctl-c)
- */
-volatile int erts_break_requested;
-
-/********************* General functions ****************************/
-
-/*
- * Reset the terminal to the original settings on exit
- * (nothing to do for WxWorks).
- */
-void sys_tty_reset(int exit_code)
-{
-}
-
-Uint
-erts_sys_misc_mem_sz(void)
-{
-    Uint res = erts_check_io_size();
-    /* res += FIXME */
-    return res;
-}
-
-/*
- * XXX This declaration should not be here.
- */
-void erl_sys_schedule_loop(void);
-
-#ifdef SOFTDEBUG
-static void do_trace(int line, char *file, char *format, ...)
-{
-    va_list va;
-    int tid = taskIdSelf();
-    char buff[512];
-
-    va_start(va, format);
-    sprintf(buff,"Trace: Task: 0x%08x, %s:%d - ",
-	    tid, file, line);
-    vsprintf(buff + strlen(buff), format, va);
-    va_end(va);
-    strcat(buff,"\r\n");
-    write(2,buff,strlen(buff));
-}
-
-#define TRACE() do_trace(__LINE__, __FILE__,"")
-#define TRACEF(Args...) do_trace(__LINE__,__FILE__, ## Args)
-#endif
-
-void
-erts_sys_pre_init(void)
-{
-    if (erlang_id != 0) {
-	/* NOTE: This particular case must *not* call erl_exit() */
-	erts_fprintf(stderr, "Sorry, erlang is already running (as task %d)\n",
-		     erlang_id);
-	exit(1);
-    }
-
-    /* This must be done as early as possible... */
-    if(!reclaim_init()) 
-	fprintf(stderr, "Warning : reclaim facility should be initiated before "
-		"erlang is started!\n");
-    erts_vxworks_max_files = max_files = reclaim_max_files();
-
-    /* Floating point exceptions */
-#if (CPU == SPARC)
-    sys_sigset(SIGFPE, fpe_sig_handler);
-#elif (CPU == PPC603)
-    fix_registers();
-#endif
-
-    /* register the private delete hook in reclaim */
-    save_delete_hook((FUNCPTR)delete_hook, (caddr_t)0);
-    erlang_id = taskIdSelf();
-#ifdef DEBUG
-    printf("emulator task id = 0x%x\n", erlang_id);
-#endif
-}
-
-void erts_sys_alloc_init(void)
-{
-    initialize_allocation();
-}
-
-void
-erl_sys_init(void)
-{
-    setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
-    /* XXX Bug in VxWorks stdio loses fputch()'ed output after the
-       setvbuf() but before a *printf(), and possibly worse (malloc
-       errors, crash?) - so let's give it a *printf().... */
-    fprintf(stdout, "%s","");
-}
-
-void
-erl_sys_args(int* argc, char** argv)
-{
-    erts_init_check_io();
-    max_files = erts_check_io_max_files();
-    ASSERT(max_files <= erts_vxworks_max_files);
-}
-
-void
-erts_sys_schedule_interrupt(int set)
-{
-    erts_check_io_interrupt(set);
-}
-
-/*
- * Called from schedule() when it runs out of runnable processes,
- * or when Erlang code has performed INPUT_REDUCTIONS reduction
- * steps. runnable == 0 iff there are no runnable Erlang processes.
- */
-void
-erl_sys_schedule(int runnable)
-{	
-    erts_check_io(!runnable);
-}
-
-void erts_do_break_handling(void)
-{
-    SET_BLOCKING(0);
-    /* call the break handling function, reset the flag */
-    do_break();
-    erts_break_requested = 0;
-    SET_NONBLOCKING(0);
-}
-
-/* signal handling */
-RETSIGTYPE (*sys_sigset(sig, func))()
-     int sig;
-     RETSIGTYPE (*func)();
-{
-  struct sigaction act, oact;
-
-  sigemptyset(&act.sa_mask);
-  act.sa_flags = 0;
-  act.sa_handler = func;
-  sigaction(sig, &act, &oact);
-  return(oact.sa_handler);
-}
-
-void sys_sigblock(int sig)
-{
-  sigset_t mask;
-
-  sigemptyset(&mask);
-  sigaddset(&mask, sig);
-  sigprocmask(SIG_BLOCK, &mask, (sigset_t *)NULL);
-}
-
-void sys_sigrelease(int sig)
-{
-  sigset_t mask;
-
-  sigemptyset(&mask);
-  sigaddset(&mask, sig);
-  sigprocmask(SIG_UNBLOCK, &mask, (sigset_t *)NULL);
-}
-
-void
-erts_sys_prepare_crash_dump(void)
-{
-    
-}
-
-/* register signal handlers XXX - they don't work, need to find out why... */
-/* set up signal handlers for break and quit */
-static void request_break(void)
-{
-  /* just set a flag - checked for and handled 
-   * in main thread (not signal handler).
-   * see check_io() 
-   */
-#ifdef DEBUG
-  fprintf(stderr,"break!\n");
-#endif
-  erts_break_requested = 1;
-  erts_check_io_async_sig_interrupt(1); /* Make sure we don't sleep in erts_poll_wait */
-}
-
-static void do_quit(void)
-{
-    halt_0(0);
-}
-
-void erts_set_ignore_break(void) {
-}
-
-void init_break_handler(void)
-{
-  sys_sigset(SIGINT, request_break);
-  sys_sigset(SIGQUIT, do_quit);
-}
-
-void erts_replace_intr(void) {
-}
-
-int sys_max_files(void) 
-{
-  return(max_files);
-}
-
-/******************* Routines for time measurement *********************/
-
-int sys_init_time(void) 
-{
-    erts_clock_rate =  sysClkRateGet();
-    /*
-    ** One could imagine that it would be better returning 
-    ** a resolution more near the clock rate, like in:
-    ** return 1000 / erts_clock_rate; 
-    ** but tests show that such isn't the case (rounding errors?)
-    ** Well, we go for the Unix variant of returning 1 
-    ** as a constant virtual clock rate.
-    */
-    return SYS_CLOCK_RESOLUTION;
-}
-
-int erts_clock_rate;
-static volatile int ticks_inuse;
-static volatile unsigned long ticks_collected; /* will wrap */
-static WDOG_ID watchdog_id;
-static ULONG user_time;
-static int this_task_id, sys_itime;
-static SysHrTime hrtime_wrap;
-static unsigned long last_tick_count;
-
-static void tolerant_time_clockint(int count)
-{
-  if (watchdog_id != NULL) {
-    if (taskIsReady(this_task_id))
-      user_time += 1;
-    ++count;
-    if (!ticks_inuse) {
-      ticks_collected += count;
-      count = 0;
-    }
-    wdStart(watchdog_id, 1, (FUNCPTR)tolerant_time_clockint, count);
-  }
-}
-
-int sys_init_hrtime(void)
-{
-    this_task_id = taskIdSelf(); /* OK, this only works for one single task
-				    in the system... */
-    user_time = 0;
-
-    ticks_inuse = 0;
-    ticks_collected = 0;
-    hrtime_wrap = 0;
-    last_tick_count = 0;
-
-    sys_itime = 1000 / erts_clock_rate;
-    watchdog_id = wdCreate();
-    wdStart(watchdog_id, 1, (FUNCPTR) tolerant_time_clockint, 0);
-    return 0;
-}
-
-SysHrTime sys_gethrtime(void) 
-{
-    SysHrTime ticks;
-
-    ++ticks_inuse;
-    ticks = (SysHrTime) (ticks_collected & 0x7FFFFFFF);
-    ticks_inuse = 0;
-    if (ticks < (SysHrTime) last_tick_count) {
-	hrtime_wrap += 1UL << 31;
-    }
-    last_tick_count = ticks;
-    return (ticks + hrtime_wrap) * ((SysHrTime) (1000000000UL / 
-						 erts_clock_rate));
-}
-    
-void sys_gettimeofday(SysTimeval *tvp)
-{
-    struct timespec now;
-    
-    clock_gettime(CLOCK_REALTIME, &now);
-    tvp->tv_sec = now.tv_sec;
-    tvp->tv_usec = now.tv_nsec / 1000;
-}
-
-clock_t sys_times(SysTimes *t)
-{
-    t->tms_stime = t->tms_cutime = t->tms_cstime = 0;
-    ++ticks_inuse;
-    t->tms_utime = user_time;
-    ticks_inuse = 0;
-    return tickGet(); /* The best we can do... */
-}
-
-/* This is called when *this task* is deleted */
-static void delete_hook(void)
-{
-  if (watchdog_id != NULL) {
-    wdDelete(watchdog_id);
-    watchdog_id = NULL;
-  }
-  erlang_id = 0;
-  this_task_id = 0;
-}
-
-/************************** OS info *******************************/
-
-/* Used by erlang:info/1. */
-/* (This code was formerly in drv.XXX/XXX_os_drv.c) */
-
-#define MAX_VER_STR 9           /* Number of characters to
-                                   consider in version string */                              
-
-static FUNCTION(int, get_number, (char** str_ptr));
-
-char os_type[] = "vxworks";
-
-static int
-get_number(char **str_ptr)
-{
-    char* s = *str_ptr;		/* Pointer to beginning of string. */
-    char* dot;			/* Pointer to dot in string or NULL. */
-
-    if (!isdigit(*s))
-	return 0;
-    if ((dot = strchr(s, '.')) == NULL) {
-	*str_ptr = s+strlen(s);
-	return atoi(s);
-    } else {
-	*dot = '\0';
-	*str_ptr = dot+1;
-	return atoi(s);
-    }
-}
-
-/* namebuf;     Where to return the name. */
-/* size;	Size of name buffer. */
-void
-os_flavor(char *namebuf, unsigned size)
-{
-    strcpy(namebuf, "-");
-}
-
-/* int* pMajor;			Pointer to major version. */
-/* int* pMinor;			Pointer to minor version. */
-/* int* pBuild;			Pointer to build number. */
-void
-os_version(int *pMajor, int *pMinor, int *pBuild)
-{
-    char os_ver[MAX_VER_STR+2];
-    char* release;		/* Pointer to the release string:
-				 * X.Y or X.Y.Z.
-				 */
-    strncpy(os_ver, vxWorksVersion, MAX_VER_STR);
-    release = os_ver;
-    *pMajor = get_number(&release);
-    *pMinor = get_number(&release);
-    *pBuild = get_number(&release);
-}
-
-void init_getenv_state(GETENV_STATE *state)
-{
-   *state = NULL;
-}
-
-char *getenv_string(GETENV_STATE *state0)
-{
-   return NULL;
-}
-
-void fini_getenv_state(GETENV_STATE *state)
-{
-   *state = NULL;
-}
-
-/************************** Port I/O *******************************/
-
-
-/* I. Common stuff */
-
-#define TMP_BUF_MAX (tmp_buf_size - 1024)
-static byte *tmp_buf;
-static Uint tmp_buf_size;
-
-/* II. The spawn/fd/vanilla drivers */
-
-/* This data is shared by these drivers - initialized by spawn_init() */
-static struct driver_data {
-    int port_num, ofd, packet_bytes, report_exit;
-    int exitcode, exit_reported; /* For returning of exit codes. */
-} *driver_data;			/* indexed by fd */
-
-/* 
- * Locking only for exitcodes and exit_reported, one global sem for all
- * spawn ports as this is rare.
- */
-static SEM_ID driver_data_sem = NULL;
-/*
- * Also locking when looking up entries in the load table
- */
-static SEM_ID entry_data_sem = NULL;
-
-/* We maintain a linked fifo queue of these structs in order */
-/* to manage unfinnished reads/and writes on differenet fd's */
-
-typedef struct pend {
-    char *cpos;
-    int fd;
-    int remain;
-    struct pend *next;
-    char buf[1];   /* this is a trick to be able to malloc one chunk */
-} Pend;
-
-static struct fd_data {
-    int inport, outport;
-    char *buf, *cpos;
-    int sz, remain;  /* for input on fd */
-    Pend* pending;   /* pending outputs */
-
-} *fd_data;			/* indexed by fd */
-    
-
-/* Driver interfaces */
-static ErlDrvData spawn_start(ErlDrvPort port_num, char *name, SysDriverOpts* opts);
-static ErlDrvData fd_start(ErlDrvPort port_num, char *name, SysDriverOpts* opts);
-static ErlDrvData vanilla_start(ErlDrvPort port_num, char *name, SysDriverOpts* opts);
-static int spawn_init(void);
-static void fd_stop(ErlDrvData);
-static void stop(ErlDrvData);
-static void ready_input(ErlDrvData fd, ErlDrvEvent ready_fd);
-static void ready_output(ErlDrvData fd, ErlDrvEvent ready_fd);
-static void output(ErlDrvData fd, char *buf, ErlDrvSizeT len);
-static void stop_select(ErlDrvEvent, void*);
-
-struct erl_drv_entry spawn_driver_entry = {
-    spawn_init,
-    spawn_start,
-    stop,
-    output,
-    ready_input,
-    ready_output,
-    "spawn",
-    NULL, /* finish */
-    NULL, /* handle */
-    NULL, /* control */
-    NULL, /* timeout */
-    NULL, /* outputv */
-    NULL, /* ready_async */
-    NULL, /* flush */
-    NULL, /* call */
-    NULL, /* event */
-    ERL_DRV_EXTENDED_MARKER,
-    ERL_DRV_EXTENDED_MAJOR_VERSION,
-    ERL_DRV_EXTENDED_MINOR_VERSION,
-    0, /* ERL_DRV_FLAGs */
-    NULL, /* handle2 */
-    NULL, /* process_exit */
-    stop_select
-
-};
-struct erl_drv_entry fd_driver_entry = {
-    NULL,
-    fd_start,
-    fd_stop,
-    output,
-    ready_input,
-    ready_output,
-    "fd",
-    NULL, /* finish */
-    NULL, /* handle */
-    NULL, /* control */
-    NULL, /* timeout */
-    NULL, /* outputv */
-    NULL, /* ready_async */
-    NULL, /* flush */
-    NULL, /* call */
-    NULL, /* event */
-    ERL_DRV_EXTENDED_MARKER,
-    ERL_DRV_EXTENDED_MAJOR_VERSION,
-    ERL_DRV_EXTENDED_MINOR_VERSION,
-    0, /* ERL_DRV_FLAGs */
-    NULL, /* handle2 */
-    NULL, /* process_exit */
-    stop_select
-};
-struct erl_drv_entry vanilla_driver_entry = {
-    NULL,
-    vanilla_start,
-    stop,
-    output,
-    ready_input,
-    ready_output,
-    "vanilla",
-    NULL, /* finish */
-    NULL, /* handle */
-    NULL, /* control */
-    NULL, /* timeout */
-    NULL, /* outputv */
-    NULL, /* ready_async */
-    NULL, /* flush */
-    NULL, /* call */
-    NULL, /* event */
-    ERL_DRV_EXTENDED_MARKER,
-    ERL_DRV_EXTENDED_MAJOR_VERSION,
-    ERL_DRV_EXTENDED_MINOR_VERSION,
-    0, /* ERL_DRV_FLAGs */
-    NULL, /* handle2 */
-    NULL, /* process_exit */
-    stop_select
-};
-
-/*
-** Set up enough of the driver_data structure to be able to report exit status.
-** Some things may be initiated again, but that is no real problem.
-*/
-static int pre_set_driver_data(int ifd, int ofd, 
-			       int read_write, int report_exit) {
-  if (read_write & DO_READ) {
-    driver_data[ifd].report_exit = report_exit;
-    driver_data[ifd].exitcode = 0;
-    driver_data[ifd].exit_reported = 0;
-    if (read_write & DO_WRITE) {
-      driver_data[ifd].ofd = ofd;
-      if (ifd != ofd) {
-	driver_data[ofd] = driver_data[ifd];
-	driver_data[ofd].report_exit = 0;
-      }
-    } else {			/* DO_READ only */
-      driver_data[ifd].ofd = -1;
-    }
-    return(ifd);
-  } else {			/* DO_WRITE only */
-    driver_data[ofd].report_exit = 0;
-    driver_data[ofd].exitcode = 0;
-    driver_data[ofd].exit_reported = 0;
-    driver_data[ofd].ofd = ofd;
-    return(ofd);
-  }
-}
-    
-/*
-** Set up the driver_data structure, it may have been initiated
-** partly by the function above, but we dont care. 
-*/
-static int set_driver_data(int port_num, int ifd, int ofd, 
-			   int packet_bytes, int read_write,
-			   int report_exit)
-{
-  if (read_write & DO_READ) {
-    driver_data[ifd].packet_bytes = packet_bytes;
-    driver_data[ifd].port_num = port_num;
-    driver_data[ifd].report_exit = report_exit;
-    if (read_write & DO_WRITE) {
-      driver_data[ifd].ofd = ofd;
-      if (ifd != ofd) {
-	driver_data[ofd] = driver_data[ifd];
-	driver_data[ofd].report_exit = 0;
-      }
-    } else {			/* DO_READ only */
-      driver_data[ifd].ofd = -1;
-    }
-    (void) driver_select(port_num, ifd, ERL_DRV_READ|ERL_DRV_USE, 1);
-    return(ifd);
-  } else {			/* DO_WRITE only */
-    driver_data[ofd].packet_bytes = packet_bytes;
-    driver_data[ofd].port_num = port_num;
-    driver_data[ofd].report_exit = 0;
-    driver_data[ofd].ofd = ofd;
-    return(ofd);
-  }
-}
-
-static int need_new_sems = 1;
-
-static int spawn_init(void)
-{
-  char *stackenv;
-  int size;
-  driver_data = (struct driver_data *)
-      erts_alloc(ERTS_ALC_T_DRV_TAB, max_files * sizeof(struct driver_data));
-  if (need_new_sems) {
-      driver_data_sem = semMCreate
-	  (SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE);
-      entry_data_sem = semMCreate
-	  (SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE);
-  }
-  if (driver_data_sem == NULL || entry_data_sem == NULL) {
-      erl_exit(1,"Could not allocate driver locking semaphore.");
-  }
-  need_new_sems = 0;
-
-  (void)uxPipeDrv();		/* Install pipe driver */
-
-  if ((stackenv = getenv("ERLPORTSTACKSIZE")) != NULL &&
-      (size = atoi(stackenv)) > 0)
-    port_stack_size = size;
-  else
-    port_stack_size = DEFAULT_PORT_STACK_SIZE;
-  return 0;
-}
-
-/* Argv has to be built vith the save_xxx routines, not with whathever 
-   sys_xxx2 has in mind... */
-#define argv_alloc save_malloc
-#define argv_realloc save_realloc
-#define argv_free save_free
-/* Build argv, return argc or -1 on failure */
-static int build_argv(char *name, char ***argvp)
-{
-  int argvsize = 10, argc = 0;
-  char *args, *arglast = NULL, *argp;
-  char **argv;
-
-#ifdef DEBUG
-  fdprintf(2, "Building argv, %s =>\n", name);
-#endif
-  if ((argv = (char **)argv_alloc(argvsize * sizeof(char *))) == NULL)
-    return(-1);
-  if ((args = argv_alloc(strlen(name) + 1)) == NULL)
-    return(-1);
-  strcpy(args, name);
-  argp = strtok_r(args, " \t", &arglast);
-  while (argp != NULL) {
-    if (argc + 1 >= argvsize) {
-      argvsize += 10;
-      argv = (char **)argv_realloc((char *)argv, argvsize*sizeof(char *));
-      if (argv == NULL) {
-	argv_free(args);
-	return(-1);
-      }
-    }
-#ifdef DEBUG
-  fdprintf(2, "%s\n", argp);
-#endif
-    argv[argc++] = argp;
-    argp = strtok_r((char *)NULL, " \t", &arglast);
-  }
-  argv[argc] = NULL;
-  *argvp = argv;
-  return(argc);
-}
-#undef argv_alloc
-#undef argv_realloc
-#undef argv_free
-
-
-/* Lookup and return global text symbol or NULL on failure
-   Symbol name is null-terminated and without the leading '_' */
-static FUNCPTR
-lookup(char *sym)
-{
-  char buf[256];
-  char *symname = buf;
-  int len;
-  FUNCPTR entry;
-  SYM_TYPE type;
-
-  len = strlen(sym);
-  if (len > 254 && (symname = malloc(len+2)) == NULL)
-    return(NULL);
-#if defined _ARCH_PPC || defined SIMSPARCSOLARIS
-  /* GCC for PPC and SIMSPARC doesn't add a leading _ to symbols */
-  strcpy(symname, sym);
-#else
-  sprintf(symname, "_%s", sym);
-#endif
-  if (symFindByNameAndType(sysSymTbl, symname, (char **)&entry,
-			   &type, N_EXT | N_TEXT, N_EXT | N_TEXT) != OK)
-    entry = NULL;
-  if (symname != buf)
-    free(symname);
-  return(entry);
-}
-
-/* This function is spawned to build argc, argv, lookup the symbol to call,
-   connect and set up file descriptors, and make the actual call.
-   N.B. 'name' was allocated by the Erlang task (through plain_malloc) and
-   is freed by this port program task.
-   Note: 'name' may be a path containing '/'. */
-
-static void call_proc(char *name, int ifd, int ofd, int read_write, 
-		      int redir_stderr, int driver_index, 
-		      int p6, int p7, int p8, int p9)
-{
-  int argc;
-  char **argv, *bname;
-  FUNCPTR entry;
-  int ret = -1;
-
-  /* Must consume 'name' */
-  argc = build_argv(name, &argv);
-  plain_free(name);
-  /* Find basename of path */
-  if ((bname = strrchr(argv[0], '/')) != NULL) {
-    bname++;
-  } else {
-    bname = argv[0];
-  }
-#ifdef DEBUG
-  fdprintf(2, "Port program name: %s\n", bname);
-#endif
-  semTake(entry_data_sem, WAIT_FOREVER);
-
-  if (argc > 0) {
-    if ((entry = lookup(bname)) == NULL) {
-      int fd;
-      char *fn;
-      /* NOTE: We don't check the return value of loadModule,
-	 since that was incompatibly changed from 5.0.2b to 5.1,
-	 but rather do a repeated lookup().   */
-      if ((fd = open(argv[0], O_RDONLY)) > 0) {
-	(void) loadModule(fd, GLOBAL_SYMBOLS);
-	close(fd);
-	entry = lookup(bname);
-      }
-      if (entry == NULL) {
-	/* filename == func failed, try func.o */
-	if ((fn = malloc(strlen(argv[0]) + 3)) != NULL) { /* ".o\0" */
-	  strcpy(fn, argv[0]);
-	  strcat(fn, ".o");
-	  if ((fd = open(fn, O_RDONLY)) > 0) {
-	    (void) loadModule(fd, GLOBAL_SYMBOLS);
-	    close(fd);
-	    entry = lookup(bname);
-	  }
-	  free(fn);
-	}
-      }
-    }
-  } else {
-    entry = NULL;
-  }
-  semGive(entry_data_sem);
-    
-  if (read_write & DO_READ) {	/* emulator read */
-    save_fd(ofd);
-    ioTaskStdSet(0, 1, ofd);	/* stdout for process */
-    if(redir_stderr)
-	ioTaskStdSet(0, 2, ofd);/* stderr for process */
-  }
-  if (read_write & DO_WRITE) { /* emulator write */
-    save_fd(ifd);
-    ioTaskStdSet(0, 0, ifd);	/* stdin for process */
-  }
-  if (entry != NULL) {
-    ret = (*entry)(argc, argv, (char **)NULL); /* NULL for envp */
-  } else {
-    fdprintf(2, "Could not exec \"%s\"\n", argv[0]);
-    ret = -1;
-  }
-  if (driver_data[driver_index].report_exit) {
-      semTake(driver_data_sem, WAIT_FOREVER);
-      driver_data[driver_index].exitcode = ret;
-      driver_data[driver_index].exit_reported = 1;
-      semGive(driver_data_sem);
-  }
-  /* We *don't* want to close the pipes here, but let the delete
-     hook take care of it - it might want to flush stdout and there'd
-     better be an open descriptor to flush to...   */
-  exit(ret);
-}
-
-static void close_pipes(int ifd[2], int ofd[2], int read_write)
-{
-  if (read_write & DO_READ) {
-    (void) close(ifd[0]);
-    (void) close(ifd[1]);
-  }
-  if (read_write & DO_WRITE) {
-    (void) close(ofd[0]);
-    (void) close(ofd[1]);
-  }
-}
-
-static void init_fd_data(int fd, int port_unused_argument)
-{
-  SET_NONBLOCKING(fd);
-  fd_data[fd].pending = NULL;
-  fd_data[fd].buf = fd_data[fd].cpos = NULL;
-  fd_data[fd].remain = fd_data[fd].sz = 0;
-}
-
-static ErlDrvData spawn_start(ErlDrvPort port_num, char *name,SysDriverOpts* opts)
-{
-    int ifd[2], ofd[2], len, nl, id;
-    char taskname[11], *progname, *bname;
-    char *space_in_command;
-    int packet_bytes = opts->packet_bytes;
-    int read_write = opts->read_write;
-    int use_stdio = opts->use_stdio;
-    int redir_stderr = opts->redir_stderr;
-    int driver_index;
-
-    if (!use_stdio){
-	return (ErlDrvData) -3;
-  }
-
-    /* Create pipes and set the Erlang task as owner of its 
-     * read and write ends (through save_fd()).
-     */
-    switch (read_write) {
-    case DO_READ:
-	if (pipe(ifd) < 0){
-	    return (ErlDrvData) -2;
-	}
-	if (ifd[0] >= max_files) {
-	    close_pipes(ifd, ofd, read_write);
-	    errno = ENFILE;
-	    return (ErlDrvData) -2;
-	}
-	save_fd(ifd[0]);
-	break;
-    case DO_WRITE:
-	if (pipe(ofd) < 0) {
-	    return (ErlDrvData) -2;
-	}
-	if (ofd[1] >= max_files) {
-	    close_pipes(ifd, ofd, read_write);
-	    errno = ENFILE;
-	    return (ErlDrvData) -2;
-	}
-	save_fd(ofd[1]);
-	break;
-    case DO_READ|DO_WRITE:
-	if (pipe(ifd) < 0){
-	    return (ErlDrvData) -2;
-	}
-	if (ifd[0] >= max_files || pipe(ofd) < 0) {
-	    close_pipes(ifd, ofd, DO_READ);
-	    errno = ENFILE;
-	    return (ErlDrvData) -2;
-	}
-	if (ofd[1] >= max_files) {
-	    close_pipes(ifd, ofd, read_write);
-	    errno = ENFILE;
-	    return (ErlDrvData) -2;
-	}
-	save_fd(ifd[0]);
-	save_fd(ofd[1]);
-	break;
-    default:
-	return (ErlDrvData) -1;
-    }
-
-    /* Allocate space for program name to be freed by the
-     * spawned task. We use plain_malloc so that the allocated
-     * space is not owned by the Erlang task.
-     */
-
-    if ((progname = plain_malloc(strlen(name) + 1)) == NULL) {
-	close_pipes(ifd, ofd, read_write);
-	errno = ENOMEM;
-	return (ErlDrvData) -2;
-    }
-    strcpy(progname, name);
-
-    /* Check if name contains a space 
-     *  (e.g "port_test -o/home/gandalf/tornado/wind/target/erlang")
-     */
-    if ((space_in_command = strrchr(progname, ' ')) != NULL) {
-	*space_in_command = '\0';
-    }
-
-    /* resulting in "port_test" */
-    if ((bname = strrchr(progname, '/')) != NULL)
-	bname++;
-    else
-	bname = progname;
-
-    /* resulting in "port_test" */
-    len = strlen(bname);
-    nl = len > 10 ? 10 : len;
-    strncpy(taskname, bname, nl);
-    taskname[nl] = '\0';
-    if (space_in_command != NULL) 
-	*space_in_command = ' ';
-    driver_index = pre_set_driver_data(ifd[0], ofd[1], 
-				       read_write, opts->exit_status);
-
-  /* resetting to "port_test -o/home/gandalf/tornado/wind/target/erlang" */
-    if ((id = taskSpawn(taskname, spTaskPriority, spTaskOptions,
-			port_stack_size, (FUNCPTR)call_proc, (int)progname,
-			ofd[0], ifd[1], read_write, redir_stderr, driver_index,
-			0,0,0,0))
-	== ERROR) {
-	close_pipes(ifd, ofd, read_write);
-	plain_free(progname);	/* only when spawn fails */
-	errno = ENOMEM;
-	return (ErlDrvData) -2;
-    }    
-#ifdef DEBUG
-    fdprintf(2, "Spawned %s as %s[0x%x]\n", name, taskname, id);
-#endif
-    if (read_write & DO_READ) 
-	init_fd_data(ifd[0], port_num);
-    if (read_write & DO_WRITE) 
-	init_fd_data(ofd[1], port_num);
-    return (ErlDrvData) (set_driver_data(port_num, ifd[0], ofd[1],
-					 packet_bytes,read_write,
-					 opts->exit_status));
-}
-
-static ErlDrvData fd_start(ErlDrvPort port_num, char *name, SysDriverOpts* opts)
-{
-    if (((opts->read_write & DO_READ) && opts->ifd >= max_files) ||
-	((opts->read_write & DO_WRITE) && opts->ofd >= max_files)) {
-	return (ErlDrvData) -1;
-    }
-
-    if (opts->read_write & DO_READ) 
-	init_fd_data(opts->ifd, port_num);
-    if (opts->read_write & DO_WRITE) 
-	init_fd_data(opts->ofd, port_num);
-    return (ErlDrvData) (set_driver_data(port_num, opts->ifd, opts->ofd,
-					 opts->packet_bytes, opts->read_write, 0));
-}
-
-static void clear_fd_data(int fd) 
-{
-    
-  if (fd_data[fd].sz > 0) 
-    erts_free(ERTS_ALC_T_FD_ENTRY_BUF, (void *) fd_data[fd].buf);
-  fd_data[fd].buf = NULL;
-  fd_data[fd].sz = 0;
-  fd_data[fd].remain = 0;
-  fd_data[fd].cpos = NULL;
-}
-
-static void nbio_stop_fd(int port_num, int fd)
-{
-  Pend *p, *p1;
-    
-  driver_select(port_num, fd, ERL_DRV_READ|ERL_DRV_WRITE, 0);
-  clear_fd_data(fd);
-  p = fd_data[fd].pending;
-  SET_BLOCKING(fd);
-  while (p) {
-    p1 = p->next;
-    free(p);
-    p = p1;
-  }
-  fd_data[fd].pending = NULL;
-}
-
-static void fd_stop(ErlDrvData drv_data)
-{
-    int ofd;
-    int fd = (int) drv_data;
-
-    nbio_stop_fd(driver_data[fd].port_num, (int)fd);
-    ofd = driver_data[fd].ofd;
-    if (ofd != fd && ofd != -1) 
-	nbio_stop_fd(driver_data[fd].port_num, (int)ofd); /* XXX fd = ofd? */
-}
-
-static ErlDrvData
-vanilla_start(ErlDrvPort port_num, char *name, SysDriverOpts* opts)
-{
-    int flags, fd;
-    struct stat statbuf;
-
-    DEBUGF(("vanilla_start, name: %s [r=%1i w=%1i]\n", name, 
-	    opts->read_write & DO_READ, 
-	    opts->read_write & DO_WRITE));
-  
-    flags = (opts->read_write == DO_READ ? O_RDONLY :
-	     opts->read_write == DO_WRITE ? O_WRONLY|O_CREAT|O_TRUNC :
-	     O_RDWR|O_CREAT);
-    if ((fd = open(name, flags, 0666)) < 0){
-	errno = ENFILE;
-	return (ErlDrvData) -2;
-    }
-    if (fd >= max_files) {
-	close(fd);
-	errno = ENFILE;
-	return (ErlDrvData) -2;
-    }
-    if (fstat(fd, &statbuf) < 0) {
-	close(fd);
-	errno = ENFILE;
-	return (ErlDrvData) -2;
-    }
-
-    /* Return error for reading regular files (doesn't work) */
-    if (ISREG(statbuf) && ((opts->read_write) & DO_READ)) {
-	close(fd);
-	return (ErlDrvData) -3;
-    }
-    init_fd_data(fd, port_num);
-    return (ErlDrvData) (set_driver_data(port_num, fd, fd,
-					 opts->packet_bytes, opts->read_write, 0));
-}
-
-/* Note that driver_data[fd].ifd == fd if the port was opened for reading, */
-/* otherwise (i.e. write only) driver_data[fd].ofd = fd.  */
-
-static void stop(ErlDrvData drv_data)
-{
-    int port_num, ofd;
-    int fd = (int) drv_data;
-
-    port_num = driver_data[fd].port_num;
-    nbio_stop_fd(port_num, fd);
-    driver_select(port_num, fd, ERL_DRV_USE, 0); /* close(fd) */
-
-    ofd = driver_data[fd].ofd;
-    if (ofd != fd && ofd != -1) {
-	nbio_stop_fd(port_num, ofd);
-	driver_select(port_num, ofd, ERL_DRV_USE, 0); /* close(fd) */
-    }
-}
-
-static int sched_write(int port_num,int fd, char *buf, int len, int pb)
-{
-  Pend *p, *p2, *p3;
-  int p_bytes = len;
-
-  p = (Pend*) erts_alloc_fnf(ERTS_ALC_T_PEND_DATA, pb + len + sizeof(Pend));
-  if (!p) {
-    driver_failure(port_num, -1);
-    return(-1);
-  }
-
-  switch(pb) {
-  case 4: put_int32(len, p->buf); break;
-  case 2: put_int16(len, p->buf); break;
-  case 1: put_int8(len, p->buf); break;
-  case 0: break;		/* Handles this case too */
-  }
-  sys_memcpy(p->buf + pb, buf, len);
-  driver_select(port_num, fd, ERL_DRV_WRITE|ERL_DRV_USE, 1);
-  p->cpos = p->buf;
-  p->fd = fd;
-  p->next = NULL;
-  p->remain = len + pb;
-  p2 = fd_data[fd].pending;
-  if (p2 == NULL) 
-    fd_data[fd].pending = p;
-  else {
-    p3 = p2->next;
-    while(p3) {
-      p_bytes += p2->remain;
-      p2 = p2->next;
-      p3 = p3->next;
-    }
-    p2->next = p;
-  }
-  if (p_bytes > (1 << 13))	/* More than 8 k pending */
-    set_busy_port(port_num, 1);
-  return(0);
-}
-
-/* Fd is the value returned as drv_data by the start func */
-static void output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len)
-{
-    int buf_done, port_num, wval, pb, ofd;
-    byte lb[4];
-    struct iovec iv[2];
-    int fd = (int) drv_data;
-
-    pb = driver_data[fd].packet_bytes;
-    port_num = driver_data[fd].port_num;
-
-    if ((ofd = driver_data[fd].ofd) == -1) {
-	return;
-    }
-
-    if (fd_data[ofd].pending) {
-	sched_write(port_num, ofd, buf, len, pb);
-	return;
-    }
-    
-    if ((pb == 2 && len > 65535) || (pb == 1 && len > 255)) {
-	driver_failure_posix(port_num, EINVAL);
-	return;
-    }
-    if (pb == 0) {
-	wval = write(ofd, buf, len);
-    } else {
-	lb[0] = (len >> 24) & 255;	/* MSB */
-	lb[1] = (len >> 16) & 255;
-	lb[2] = (len >> 8) & 255;
-	lb[3] = len & 255;		/* LSB */
-	iv[0].iov_base = (char*) lb + (4 - pb);
-	iv[0].iov_len = pb;
-	iv[1].iov_base = buf;
-	iv[1].iov_len = len;
-	wval = writev(ofd, iv, 2);
-    }
-    if (wval == pb + len ) {
-	return;
-    }
-    if (wval < 0) {
-	if ((errno == EINTR) || (errno == ERRNO_BLOCK)) {
-	    if (pb) {
-		sched_write(port_num, ofd, buf ,len, pb);
-	    } else if (pb == 0) {
-		sched_write(port_num, ofd, buf ,len, 0);
-	    }
-	    return;
-	}
-	driver_failure_posix(driver_data[fd].port_num, EINVAL);
-	return;
-    }
-    if (wval < pb) {
-	sched_write(port_num, ofd, (lb +4 -pb)  + wval, pb-wval, 0);
-	sched_write(port_num, ofd, buf ,len, 0);
-	return;
-    }
-
-    /* we now know that  wval < (pb + len) */
-    buf_done = wval - pb;
-    sched_write(port_num, ofd, buf + buf_done, len - buf_done,0);
-}
-
-static void stop_select(ErlDrvEvent fd, void* _)
-{
-    close((int)fd);
-}
-
-static int ensure_header(int fd,char *buf,int packet_size, int sofar)
-{
-  int res = 0;
-  int remaining = packet_size - sofar;
-
-  SET_BLOCKING(fd);
-  if (read_fill(fd, buf+sofar, remaining) != remaining)
-    return -1;
-  switch (packet_size) {
-  case 1: res = get_int8(buf); break;
-  case 2: res = get_int16(buf); break;
-  case 4: res = get_int32(buf); break;
-  }
-  SET_NONBLOCKING(fd);
-  return(res);
-}
-
-static int port_inp_failure(int port_num, int ready_fd, int res)
-{
-    (void) driver_select(port_num, ready_fd, ERL_DRV_READ|ERL_DRV_WRITE, 0); 
-    clear_fd_data(ready_fd);
-    if (res == 0) {
-	if (driver_data[ready_fd].report_exit) {
-	    int tmpexit = 0;
-	    int reported;
-	    /* Lock the driver_data structure */
-	    semTake(driver_data_sem, WAIT_FOREVER);
-	    if ((reported = driver_data[ready_fd].exit_reported))
-		tmpexit = driver_data[ready_fd].exitcode;
-	    semGive(driver_data_sem);
-	    if (reported) {
-		erts_fprintf(stderr,"Exitcode %d reported\r\n", tmpexit);
-		driver_report_exit(port_num, tmpexit);
-	    }
-	}
-	driver_failure_eof(port_num);
-    } else {
-	driver_failure(port_num, res);
-    }
-    return 0;
-}
-
-/* fd is the drv_data that is returned from the */
-/* initial start routine                        */
-/* ready_fd is the descriptor that is ready to read */
-
-static void ready_input(ErlDrvData drv_data, ErlDrvEvent drv_event)
-{
-  int port_num, packet_bytes, res;
-  Uint h = 0;
-  char *buf;
-  int fd = (int) drv_data;
-  int ready_fd = (int) drv_event;
-
-  port_num = driver_data[fd].port_num;
-  packet_bytes = driver_data[fd].packet_bytes;
-
-  if (packet_bytes == 0) {
-    if ((res = read(ready_fd, tmp_buf, tmp_buf_size)) > 0) {
-      driver_output(port_num, (char*)tmp_buf, res);
-      return;
-    }
-    port_inp_failure(port_num, ready_fd, res);
-    return;
-  }
-
-  if (fd_data[ready_fd].remain > 0) { /* We try to read the remainder */
-    /* space is allocated in buf */
-    res = read(ready_fd, fd_data[ready_fd].cpos, 
-	       fd_data[ready_fd].remain);
-    if (res < 0) {
-      if ((errno == EINTR) || (errno == ERRNO_BLOCK)) {
-	  ;
-      } else {
-	  port_inp_failure(port_num, ready_fd, res);
-      }
-    } else if (res == 0) { 
-	port_inp_failure(port_num, ready_fd, res);
-    } else if (res == fd_data[ready_fd].remain) { /* we're done  */
-	driver_output(port_num, fd_data[ready_fd].buf, 
-		      fd_data[ready_fd].sz);
-	clear_fd_data(ready_fd);
-    } else {			/*  if (res < fd_data[ready_fd].remain) */
-	fd_data[ready_fd].cpos += res;
-	fd_data[ready_fd].remain -= res;
-    }
-    return;
-  }
-
-
-  if (fd_data[ready_fd].remain == 0) { /* clean fd */
-    /* We make one read attempt and see what happens */
-    res = read(ready_fd, tmp_buf, tmp_buf_size);
-    if (res < 0) {  
-      if ((errno == EINTR) || (errno == ERRNO_BLOCK))
-	return;
-      port_inp_failure(port_num, ready_fd, res);
-      return;
-    }
-    else if (res == 0) {		/* eof */
-      port_inp_failure(port_num, ready_fd, res);
-      return;
-    }
-    else if (res < packet_bytes) { /* Ugly case... get at least */
-      if ((h = ensure_header(ready_fd, tmp_buf, packet_bytes, res))==-1) {
-	port_inp_failure(port_num, ready_fd, -1);
-	return;
-      }
-      buf = erts_alloc_fnf(ERTS_ALC_T_FD_ENTRY_BUF, h);
-      if (!buf) {
-	port_inp_failure(port_num, ready_fd, -1);
-	return;
-      }
-      fd_data[ready_fd].buf = buf;
-      fd_data[ready_fd].sz = h;
-      fd_data[ready_fd].remain = h;
-      fd_data[ready_fd].cpos = buf;
-      return;
-    }
-    else  {			/* if (res >= packet_bytes) */
-      unsigned char* cpos = tmp_buf;
-      int bytes_left = res;
-      while (1) {		/* driver_output as many as possible */
-	  if (bytes_left == 0) {
-	      clear_fd_data(ready_fd);
-	      return;
-	  }
-	  if (bytes_left < packet_bytes) { /* Yet an ugly case */
-	      if((h=ensure_header(ready_fd, cpos, 
-				  packet_bytes, bytes_left))==-1) {
-		  port_inp_failure(port_num, ready_fd, -1);
-		  return;
-	      }
-	      buf = erts_alloc_fnf(ERTS_ALC_T_FD_ENTRY_BUF, h);
-	      if (!buf) 
-		  port_inp_failure(port_num, ready_fd, -1);
-	      fd_data[ready_fd].buf = buf;
-	      fd_data[ready_fd].sz = h;
-	      fd_data[ready_fd].remain = h;
-	      fd_data[ready_fd].cpos = buf;
-	      return;
-	  }
-	  switch (packet_bytes) {
-	  case 1: h = get_int8(cpos); cpos += 1; break;
-	  case 2: h = get_int16(cpos); cpos += 2; break;
-	  case 4: h = get_int32(cpos); cpos += 4; break;
-	  }
-	  bytes_left -= packet_bytes;
-	  /* we've got the header, now check if we've got the data */
-	  if (h <= (bytes_left)) {
-	      driver_output(port_num, (char*) cpos, h);
-	      cpos += h;
-	      bytes_left -= h;
-	      continue;
-	  }
-	  else {			/* The last message we got was split */
-	      buf = erts_alloc_fnf(ERTS_ALC_T_FD_ENTRY_BUF, h);
-	      if (!buf) {
-		  port_inp_failure(port_num, ready_fd, -1);
-	      }
-	      sys_memcpy(buf, cpos, bytes_left);
-	      fd_data[ready_fd].buf = buf;
-	      fd_data[ready_fd].sz = h;
-	      fd_data[ready_fd].remain = h - bytes_left;
-	      fd_data[ready_fd].cpos = buf + bytes_left;
-	      return;
-	  }
-      }
-      return;
-    }
-  }
-  fprintf(stderr, "remain %d \n", fd_data[ready_fd].remain);
-  port_inp_failure(port_num, ready_fd, -1);
-}
-
-
-/* fd is the drv_data that is returned from the */
-/* initial start routine                        */
-/* ready_fd is the descriptor that is ready to read */
-
-static void ready_output(ErlDrvData drv_data, ErlDrvEvent drv_event)
-{
-  Pend *p;
-  int wval;
-
-  int fd = (int) drv_data;
-  int ready_fd = (int) drv_event;
-
-  while(1) {
-    if ((p = fd_data[ready_fd].pending) == NULL) {
-      driver_select(driver_data[fd].port_num, ready_fd, 
-		    ERL_DRV_WRITE, 0);
-      return;
-    }
-    wval = write(p->fd, p->cpos, p->remain);
-    if (wval == p->remain) {
-      fd_data[ready_fd].pending = p->next;
-      erts_free(ERTS_ALC_T_PEND_DATA, p);
-      if (fd_data[ready_fd].pending == NULL) {
-	driver_select(driver_data[fd].port_num, ready_fd, 
-		      ERL_DRV_WRITE, 0);
-	set_busy_port(driver_data[fd].port_num, 0);
-	return;
-      }
-      else
-	continue;
-    }
-    else if (wval < 0) {
-      if (errno == ERRNO_BLOCK || errno == EINTR)
-	return;
-      else {
-	driver_select(driver_data[fd].port_num, ready_fd, 
-		      ERL_DRV_WRITE, 0);
-	driver_failure(driver_data[fd].port_num, -1);
-	return;
-      }
-    }
-    else if (wval < p->remain) {
-      p->cpos += wval;
-      p->remain -= wval;
-      return;
-    }
-  }
-}
-
-/* Fills in the systems representation of the jam/beam process identifier.
-** The Pid is put in STRING representation in the supplied buffer,
-** no interpretatione of this should be done by the rest of the
-** emulator. The buffer should be at least 21 bytes long.
-*/
-void sys_get_pid(char *buffer){
-    int p = taskIdSelf(); /* Hmm, may be negative??? requires some GB of
-			     memory to make the TCB address convert to a
-			     negative value. */
-    sprintf(buffer,"%d", p);
-}
-
-int
-erts_sys_putenv(char *buffer, int sep_ix)
-{
-    return putenv(buffer);
-}
-
-int
-erts_sys_getenv(char *key, char *value, size_t *size)
-{
-    char *orig_value;
-    int res;
-    orig_value = getenv(key);
-    if (!orig_value)
-	res = -1;
-    else {
-	size_t len = sys_strlen(orig_value);
-	if (len >= *size) {
-	    *size = len + 1;
-	    res = 1;
-	}
-	else {
-	    *size = len;
-	    sys_memcpy((void *) value, (void *) orig_value, len+1);
-	    res = 0;
-	}
-    }
-    return res;
-}
-
-int
-erts_sys_getenv__(char *key, char *value, size_t *size)
-{
-    return erts_sys_getenv(key, value, size);
-}
-
-void
-sys_init_io(void)
-{
-  tmp_buf = (byte *) erts_alloc(ERTS_ALC_T_SYS_TMP_BUF, SYS_TMP_BUF_SIZE);
-  tmp_buf_size = SYS_TMP_BUF_SIZE;
-  fd_data = (struct fd_data *)
-      erts_alloc(ERTS_ALC_T_FD_TAB, max_files * sizeof(struct fd_data));
-}
-
-
-/* Fill buffer, return buffer length, 0 for EOF, < 0 for error. */
-
-static int read_fill(int fd, char *buf, int len)
-{
-  int i, got = 0;
-  do {
-    if ((i = read(fd, buf+got, len-got)) <= 0) {
-      return i;
-    }
-    got += i;
-  } while (got < len);
-  return (len);
-}	
-
-
-/************************** Misc... *******************************/
-
-extern const char pre_loaded_code[];
-extern char* const pre_loaded[];
-
-
-/* Float conversion */
-
-int sys_chars_to_double(char *buf, double *fp)
-{
-  char *s = buf;
-
-  /* The following check is incorporated from the Vee machine */
-    
-#define ISDIGIT(d) ((d) >= '0' && (d) <= '9')
-
-  /* Robert says that something like this is what he really wanted:
-   *
-   * 7 == sscanf(Tbuf, "%[+-]%[0-9].%[0-9]%[eE]%[+-]%[0-9]%s", ....);
-   * if (*s2 == 0 || *s3 == 0 || *s4 == 0 || *s6 == 0 || *s7)
-   *   break;
-   */
-
-  /* Scan string to check syntax. */
-  if (*s == '+' || *s == '-')
-    s++;
-	    
-  if (!ISDIGIT(*s))		/* Leading digits. */
-    return -1;
-  while (ISDIGIT(*s)) s++;
-  if (*s++ != '.')		/* Decimal part. */
-    return -1;
-  if (!ISDIGIT(*s))
-    return -1;
-  while (ISDIGIT(*s)) s++;
-  if (*s == 'e' || *s == 'E') {
-    /* There is an exponent. */
-    s++;
-    if (*s == '+' || *s == '-')
-      s++;
-    if (!ISDIGIT(*s))
-      return -1;
-    while (ISDIGIT(*s)) s++;
-  }
-  if (*s)			/* That should be it */
-    return -1;
-    
-  if (sscanf(buf, "%lf", fp) != 1)
-    return -1;
-  return 0;
-}
-
-/* 
- ** Convert a double to ascii format 0.dddde[+|-]ddd
- ** return number of characters converted
- */
-
-int sys_double_to_chars(double fp, char *buf)
-{
-  (void) sprintf(buf, "%.20e", fp);
-  return strlen(buf);
-}
-
-
-/* Floating point exceptions */
-
-#if (CPU == SPARC)
-jmp_buf fpe_jmp;
-
-RETSIGTYPE fpe_sig_handler(int sig)
-{
-  longjmp(fpe_jmp, 1);
-}
-
-#elif (CPU == PPC603)
-static void fix_registers(void){
-    FP_CONTEXT fpcontext;
-    fppSave(&fpcontext);
-    fpcontext.fpcsr &= ~(_PPC_FPSCR_INIT);
-    fppRestore(&fpcontext);
-}
-#endif
-
-
-/* Return a pointer to a vector of names of preloaded modules */
-
-Preload* sys_preloaded(void)
-{
-    return (Preload *) pre_loaded;
-}
-
-/* Return a pointer to preloaded code for module "module" */
-unsigned char* sys_preload_begin(Preload *pp)
-{
-    return pp->code;
-}
-
-/* Clean up if allocated */
-void sys_preload_end(Preload *pp)
-{
-    /* Nothing */
-}
-
-/* Read a key from console (?) */
-
-int sys_get_key(int fd)
-{
-  int c;
-  unsigned char rbuf[64];
-
-  fflush(stdout);		/* Flush query ??? */
-
-  if ((c = read(fd,rbuf,64)) <= 0)
-    return c;
-  return rbuf[0];
-}
-
-
-/* A real printf that does the equivalent of fprintf(stdout, ...) */
-
-/* ARGSUSED */
-static STATUS
-stdio_write(char *buf, int nchars, int fp)
-{
-  if (fwrite(buf, sizeof(char), nchars, (FILE *)fp) == 0)
-    return(ERROR);
-  return(OK);
-}
-
-int real_printf(const char *fmt, ...)
-{
-  va_list ap;
-  int err;
-  
-  va_start(ap, fmt);
-  err = fioFormatV(fmt, ap, stdio_write, (int)stdout);
-  va_end(ap);
-  return(err);
-}
-	
-	
-/* 
- * Little function to do argc, argv calls from (e.g.) VxWorks shell
- *  The arguments should be in the form of a single ""-enclosed string
- *  NOTE: This isn't really part of the emulator, just included here
- *  so we can use the handy functions and memory reclamation.
- */
-void argcall(char *args)
-{
-  int argc;
-  char **argv;
-  FUNCPTR entry;
-
-  if (args != NULL) {
-    if ((argc = build_argv(args, &argv)) > 0) {
-      if ((entry = lookup(argv[0])) != NULL)
-	(*entry)(argc, argv, (char **)NULL); /* NULL for envp */
-      else
-	fprintf(stderr, "Couldn't find %s\n", argv[0]);
-    } else
-      fprintf(stderr, "Failed to build argv!\n");
-  } else
-    fprintf(stderr, "No argument list!\n");
-}
-
-
-/* That concludes the Erlang stuff - now we just need to implement an OS...
-   - Just kidding, but resource reclamation isn't the strength of VxWorks */
-#undef calloc
-#undef free
-#undef cfree
-#undef malloc
-#undef realloc
-#undef open
-#undef creat
-#undef socket
-#undef accept
-#undef close
-#undef fopen
-#undef fdopen
-#undef freopen
-#undef fclose
-
-/********************* Using elib_malloc ****************************/
-/* This gives us yet another level of malloc wrappers. The purpouse */
-/* is to be able to select between different varieties of memory    */
-/* allocation without recompiling.                                  */
-/* Maybe the performance is somewhat degraded by this, but          */
-/* on the other hand, performance may be much better if the most    */
-/* suiting malloc is used (not to mention the much lower            */
-/* fragmentation).                                                  */
-/* /Patrik N                                                        */
-/********************************************************************/
-
-/* 
- * I don't want to include the whole elib header, especially
- * as it uses char * for generic pointers. Let's fool ANSI C instead.
- */
-extern void *elib_malloc(size_t);
-extern void *elib_realloc(void *, size_t);
-extern void elib_free(void *);
-extern void elib_init(void *, int);
-extern void elib_force_init(void *, int);
-extern size_t elib_sizeof(void *);
-
-/* Flags */
-#define USING_ELIB_MALLOC         1   /* We are using the elib_malloc */
-#define WARN_MALLOC_MIX           2   /* Warn if plain malloc or save_malloc
-					 is mixed with sys_free2 or 
-					 sys_realloc2 */
-#define REALLOC_MOVES             4   /* Always move on realloc 
-					 (less fragmentation) */
-#define USER_POOL                 8   /* The user supplied the memory
-					 pool, it was not save_alloced. */
-#define RECLAIM_USER_POOL        16   /* Use the reclaim mechanism in the
-					 user pool. */
-#define NEW_USER_POOL            32   /* The user pool is newly suppllied,
-					 any old pool should be discarded */
-
-
-#define ELIB_LOCK \
-if(alloc_flags & USING_ELIB_MALLOC) \
-    semTake(elib_malloc_sem, WAIT_FOREVER)
-
-#define ELIB_UNLOCK \
-if(alloc_flags & USING_ELIB_MALLOC) \
-    semGive(elib_malloc_sem)
-
-#define USER_RECLAIM() ((alloc_flags & USING_ELIB_MALLOC) && \
-			(alloc_flags & USER_POOL) && \
-			(alloc_flags & RECLAIM_USER_POOL))
-
-/*
- * Global state
- * The use of function pointers for the malloc/realloc/free functions
- * is actually only useful in the malloc case, we must know what kind of
- * realloc/free we are going to use, so we could call elib_xxx directly.
- * However, as the overhead is small and this construction makes it 
- * fairly easy to add another malloc algorithm, the function pointers
- * are used in realloc/free to.
- */
-static MallocFunction actual_alloc = &save_malloc;
-static ReallocFunction actual_realloc = &save_realloc;
-static FreeFunction actual_free = &save_free;
-static int alloc_flags = 0;
-static int alloc_pool_size = 0;
-static void *alloc_pool_ptr = NULL;
-static SEM_ID elib_malloc_sem = NULL; 
-
-/*
- * Descide if we should use the save_free instead of elib_free or, 
- * in the case of the free used in a delete hook, if we should
- * use plain free instead of elib_free.
- */
-static int use_save_free(void *ptr){
-    register int diff = ((char *) ptr) - ((char *) alloc_pool_ptr);
-    /* 
-     * Hmmm... should it be save_free even if diff is exactly 0? 
-     * The answer is Yes if the whole area is save_alloced and No if not,
-     * so reclaim_free_hook is NOT run in the case of one save_alloced area. 
-     */
-    return (!(alloc_flags & USING_ELIB_MALLOC) ||
-	    (diff < 0 || diff >= alloc_pool_size));
-}
-
-/*
- * A free function used by the task deletion hook for the save_xxx functions.
- * Set with the set_reclaim_free_function function.
- */
-static void reclaim_free_hook(void *ptr){
-    if(use_save_free(ptr)){
-	free(ptr);
-    } else {
-	ELIB_LOCK;
-	(*actual_free)(ptr);
-	ELIB_UNLOCK;
-    }
-}
-    
-
-/*
- * Initialize, sets the values of pointers based on
- * either nothing (the default) or what's set previously by the
- * erl_set_memory_block function.
- */
-static void initialize_allocation(void){
-    set_reclaim_free_function(NULL);
-    if(alloc_pool_size == 0){
-	actual_alloc = (void *(*)(size_t))&save_malloc;
-	actual_realloc = (void *(*)(void *, size_t))&save_realloc;
-	actual_free = &save_free;
-	alloc_flags &= ~(USING_ELIB_MALLOC | USER_POOL | RECLAIM_USER_POOL);
-    } else {
-	if(elib_malloc_sem == NULL)
-	    elib_malloc_sem = semMCreate
-		(SEM_Q_PRIORITY | SEM_DELETE_SAFE | SEM_INVERSION_SAFE);
-	if(elib_malloc_sem == NULL)
-	    erl_exit(1,"Could not create mutex semaphore for elib_malloc");
-	if(!(alloc_flags & USER_POOL)){
-	    if((alloc_pool_ptr = save_malloc(alloc_pool_size)) == NULL)
-		erl_exit(1,"Erlang set to allocate a %d byte block initially;"
-			 " not enough memory available.", alloc_pool_size);
-	    elib_force_init(alloc_pool_ptr, alloc_pool_size);
-	} else if(alloc_flags & NEW_USER_POOL){
-	    elib_force_init(alloc_pool_ptr, alloc_pool_size);
-	}
-	actual_alloc=&elib_malloc;
-	actual_realloc=&elib_realloc;
-	actual_free=&elib_free;
-	alloc_flags |= USING_ELIB_MALLOC;
-	/* We MUST see to that the right free function is used
-	   otherwise we'll get a very nasty crash! */
-	if(USER_RECLAIM())
-	    set_reclaim_free_function(&reclaim_free_hook);
-    }
-    alloc_flags &= ~(NEW_USER_POOL); /* It's never new after initialization*/
-}
-
-/* This does not exist on other platforms, we just use it in sys.c 
-   and the BSD resolver */
-void *sys_calloc2(Uint nelem, Uint elsize){
-    void *ptr = erts_alloc_fnf(ERTS_ALC_T_UNDEF, nelem*elsize);
-    if(ptr != NULL)
-	memset(ptr,0,nelem*elsize);
-    return ptr;
-}
-
-/*
- * The malloc wrapper
- */
-void *
-erts_sys_alloc(ErtsAlcType_t type, void *extra, Uint size)
-{
-    register void *ret;
-    ELIB_LOCK;
-    if(USER_RECLAIM())
-	ret = save_malloc2((size_t)size,actual_alloc);
-    else
-	ret = (*actual_alloc)((size_t)size);
-    ELIB_UNLOCK;
-    return ret;
-}
-
-/*
- * The realloc wrapper, may respond to the "realloc-always-moves" flag
- * if the area is initially allocated with elib_malloc.
- */
-void *
-erts_sys_realloc(ErtsAlcType_t type, void *extra, void *ptr, Uint size)
-{
-    register void *ret;
-    if(use_save_free(ptr)){
-	if((alloc_flags & WARN_MALLOC_MIX) && 
-	   (alloc_flags & USING_ELIB_MALLOC))
-	    erts_fprintf(stderr,"Warning, save_malloced data realloced "
-		       "by sys_realloc2\n");
-	return save_realloc(ptr, (size_t) size);
-    } else {	
-	ELIB_LOCK;
-	if((alloc_flags & REALLOC_MOVES) && 
-	   (alloc_flags & USING_ELIB_MALLOC)){
-	    size_t osz = elib_sizeof(ptr);
-	    if(USER_RECLAIM())
-		ret = save_malloc2((size_t) size, actual_alloc);
-	    else
-		ret = (*actual_alloc)((size_t) size);
-	    if(ret != NULL){
-		memcpy(ret,ptr,(((size_t)size) < osz) ? ((size_t)size) : osz);
-		if(USER_RECLAIM())
-		    save_free2(ptr,actual_free);
-		else
-		    (*actual_free)(ptr);
-	    }
-	} else {
-	    if(USER_RECLAIM())
-		ret = save_realloc2(ptr,(size_t)size,actual_realloc);
-	    else
-		ret = (*actual_realloc)(ptr,(size_t)size);
-	}
-	ELIB_UNLOCK;
-	return ret;
-    }
-}
-
-/*
- * Wrapped free().
- */
-void
-erts_sys_free(ErtsAlcType_t type, void *extra, void *ptr)
-{
-    if(use_save_free(ptr)){
-	/* 
-	 * This might happen when linked in drivers use save_malloc etc 
-	 * directly. 
-	 */
-	if((alloc_flags & WARN_MALLOC_MIX) && 
-	   (alloc_flags & USING_ELIB_MALLOC))
-	    erts_fprintf(stderr,"Warning, save_malloced data freed by "
-		       "sys_free2\n");
-	save_free(ptr);
-    } else {
-	ELIB_LOCK;
-	if(USER_RECLAIM())
-	    save_free2(ptr,actual_free);
-	else
-	    (*actual_free)(ptr);
-	ELIB_UNLOCK;
-    }
-}
-
-/* 
- * External interface to be called before erlang is started 
- * Parameters:
- * isize: The size of the memory block where erlang should malloc().
- * iptr: (optional) A pointer to a user supplied memory block of 
- *       size isize.
- * warn_save: Instructs sys_free2 and sys_realloc2 to warn if
- *            memory allocation/reallocation/freeing is mixed between
- *            pure malloc/save_malloc/sys_alloc2 routines (only
- *            warns if elib is actually used in the sys_alloc2 routines).
- * realloc_moves: Always allocate a fresh memory block on reallocation 
- *                (less fragmentation).
- * reclaim_in_supplied: Use memory reclaim mechanisms inside the user
- *                      supplied area, this makes one area reusable between
- *                      starts of erlang and might be nice for drivers etc.
- */
-
-int erl_set_memory_block(int isize, int iptr, int warn_save, 
-			 int realloc_moves, int reclaim_in_supplied, int p5,
-			 int p6, int p7, int p8, int p9){
-    if(erlang_id != 0){
-	erts_fprintf(stderr,"Error, cannot set erlang memory block while an "
-		     "erlang task is running!\n");
-	return 1;
-    }
-    if(isize < 8 * 1024 *1024)
-	erts_fprintf(stderr,
-		     "Warning, the memory pool of %dMb may be to small to "
-		     "run erlang in!\n", isize / (1024 * 1024));
-    alloc_pool_size = (size_t) isize;
-    alloc_pool_ptr = (void *) iptr;
-    alloc_flags = 0;
-    /* USING_ELIB_MALLOC gets set by the initialization routine */
-    if((void *)iptr != NULL)
-	alloc_flags |= (USER_POOL | NEW_USER_POOL);
-    if(realloc_moves)
-	alloc_flags |= REALLOC_MOVES;
-    if(warn_save)
-	alloc_flags |= WARN_MALLOC_MIX;
-    if((void *)iptr != NULL && reclaim_in_supplied)
-	alloc_flags |= RECLAIM_USER_POOL;
-    return 0;
-}
-
-/* External statistics interface */
-int erl_memory_show(int p0, int p1, int p2, int p3, int p4, int p5,
-		    int p6, int p7, int p8, int p9){
-    struct elib_stat statistics;
-    if(!(alloc_flags & USING_ELIB_MALLOC) && erlang_id != 0){
-	erts_printf("Using plain save_alloc, use memShow instead.\n");
-	return 1;
-    }
-    if(erlang_id == 0 && !((alloc_flags & USER_POOL) && 
-			   !(alloc_flags & NEW_USER_POOL))){
-	erts_printf("Sorry, no allocation statistics until erlang "
-		   "is started.\n");
-	return 1;
-    }
-    erts_printf("Allocation settings:\n");
-    erts_printf("Using elib_malloc with memory pool size of %lu bytes.\n",
-	       (unsigned long) alloc_pool_size);
-    erts_printf("Realloc-always-moves is %s\n", 
-	       (alloc_flags & REALLOC_MOVES) ? "on" : "off");
-    erts_printf("Warnings about mixed malloc/free's are %s\n", 
-	       (alloc_flags & WARN_MALLOC_MIX) ? "on" : "off");
-    if(alloc_flags & USER_POOL){
-	erts_printf("The memory block used by elib is user supplied "
-		   "at 0x%08x.\n", (unsigned int) alloc_pool_ptr);
-	if(alloc_flags & RECLAIM_USER_POOL)
-	    erts_printf("Allocated memory within the user supplied pool\n"
-		       "  will be automatically reclaimed at task exit.\n");
-    } else {
-	erts_printf("The memory block used by elib is save_malloc'ed "
-		   "at 0x%08x.\n", (unsigned int) alloc_pool_ptr);
-    }
-    erts_printf("Statistics from elib_malloc:\n");
-    ELIB_LOCK;
-
-    elib_stat(&statistics);
-    ELIB_UNLOCK;
-    erts_printf("Type          Size (bytes) Number of blocks\n");
-    erts_printf("============= ============ ================\n");
-    erts_printf("Total:        %12lu %16lu\n",
-	       (unsigned long) statistics.mem_total*4,
-	       (unsigned long) statistics.mem_blocks);
-    erts_printf("Allocated:    %12lu %16lu\n",
-	       (unsigned long) statistics.mem_alloc*4,
-	       (unsigned long) statistics.mem_blocks-statistics.free_blocks);
-    erts_printf("Free:         %12lu %16lu\n",
-	       (unsigned long) statistics.mem_free*4,
-	       (unsigned long) statistics.free_blocks);
-    erts_printf("Largest free: %12lu                -\n\n",
-	       (unsigned long) statistics.max_free*4);
-    return 0;
-}
-
-
-/*
-** More programmer friendly (as opposed to user friendly ;-) interface
-** to the memory statistics. Resembles the VxWorks memPartInfoGet but
-** does not take a partition id as parameter...
-*/    
-int erl_mem_info_get(MEM_PART_STATS *stats){
-    struct elib_stat statistics;
-    if(!(alloc_flags & USING_ELIB_MALLOC))
-	return -1;
-    ELIB_LOCK;
-    elib_stat(&statistics);
-    ELIB_UNLOCK;
-    stats->numBytesFree = statistics.mem_free*4;
-    stats->numBlocksFree = statistics.free_blocks;
-    stats->maxBlockSizeFree = statistics.max_free*4;
-    stats->numBytesAlloc = statistics.mem_alloc*4;
-    stats->numBlocksAlloc = statistics.mem_blocks-statistics.free_blocks;
-    return 0;
-}
-
-/********************* Pipe driver **********************************/
-/*
- * Purpose:  Pipe driver with Unix (unnamed) pipe semantics.
- * Author:   Peter Hogfeldt (peter@erix.ericsson.se) from an outline
- *           by Per Hedeland (per@erix.ericsson.se).
- *
- * Note: This driver must *not* use the reclaim facilities, hence it 
- * is placed here. (after the #undef's of open,malloc etc)
- *
- * This driver supports select() and non-blocking I/O via 
- * ioctl(fd, FIONBIO, val).
- * 
- * 1997-03-21 Peter Hogfeldt
- *            Added non-blocking I/O.
- *
- */
-
-/* 
- *  SEMAPHORES
- *
- *  Each end of a pipe has two semaphores: semExcl for serialising access to 
- *  the pipe end, and semBlock for blocking I/O.
- *
- *  reader->semBlock         is available (full) if and only if the pipe is
- *                           not empty, or the write end is closed. Otherwise
- *                           it is unavailable (empty). It is initially
- *                           unavailable.
- *
- *  writer->semBlock         is available (full) if and only if the pipe is
- *                           not full, or if the reader end is closed. 
- *                           Otherwise it is unavailable. It is initially
- *                           available.
- */
-
-#define UXPIPE_SIZE 4096
-
-/* Forward declaration */
-typedef struct uxPipeDev UXPIPE_DEV;
-
-/*
- * Pipe descriptor (one for each open pipe).
- */
-typedef struct {
-  int drvNum;
-  UXPIPE_DEV *reader, *writer;
-  RING_ID ringId;
-}     UXPIPE;
-
-/*
- * Device descriptor (one for each of the read and write
-		      * ends of an open pipe).
-		      */
-struct uxPipeDev {
-  UXPIPE *pipe;
-  int blocking;
-  SEL_WAKEUP_LIST wakeupList;
-  SEM_ID semExcl;
-  SEM_ID semBlock;
-};
-
-int uxPipeDrvNum = 0; /* driver number of pipe driver */
-
-#define PIPE_NAME 	"/uxpipe" /* only used internally */
-#define PIPE_READ 	"/r"	/* ditto */
-#define PIPE_WRITE 	"/w"	/* ditto */
-
-LOCAL char pipeRead[64], pipeWrite[64];
-LOCAL DEV_HDR devHdr;
-LOCAL UXPIPE *newPipe; /* communicate btwn open()s in pipe() */
-LOCAL SEM_ID pipeSem; /* mutual exclusion in pipe() */
-
-/* forward declarations */
-LOCAL int uxPipeOpen(DEV_HDR *pDv, char *name, int mode);
-LOCAL int uxPipeClose(UXPIPE_DEV *pDev);
-LOCAL int uxPipeRead(UXPIPE_DEV *pDev, char *buffer, int maxbytes);
-LOCAL int uxPipeWrite(UXPIPE_DEV *pDev, char *buffer, int nbytes);
-LOCAL STATUS uxPipeIoctl(FAST UXPIPE_DEV *pDev, FAST int function, int arg);
-
-
-/***************************************************************************
- *
- * uxPipeDrv - install Unix pipe driver
- *
- * This routine initializes the Unix pipe driver.  It must be called
- * before any other routine in this driver.
- *
- * RETURNS:
- *    OK, or ERROR if I/O system is unable to install driver.
- */
-
-STATUS
-uxPipeDrv(void)
-{
-  if (uxPipeDrvNum > 0)
-    return (OK);		/* driver already installed */
-  if ((uxPipeDrvNum = iosDrvInstall((FUNCPTR) NULL, (FUNCPTR) NULL,
-				    uxPipeOpen, uxPipeClose, uxPipeRead,
-				    uxPipeWrite, uxPipeIoctl)) == ERROR)
-    return (ERROR);
-  if (iosDevAdd(&devHdr, PIPE_NAME, uxPipeDrvNum) == ERROR)
-    return (ERROR);
-  strcpy(pipeRead, PIPE_NAME);
-  strcat(pipeRead, PIPE_READ);
-  strcpy(pipeWrite, PIPE_NAME);
-  strcat(pipeWrite, PIPE_WRITE);
-  if ((pipeSem = semMCreate(SEM_Q_PRIORITY | SEM_DELETE_SAFE)) == NULL)
-    return (ERROR);
-  return (OK);
-}
-
-/***************************************************************************
- *
- * uxPipeOpen - open a pipe
- *
- * RETURNS: Pointer to device descriptor, or ERROR if memory cannot be
- * allocated (errno = ENOMEM),  or invalid argument (errno = EINVAL).
- */
-
-/*
- * DEV_HDR *pDv;  pointer to device header (dummy) 
- * char *name;  name of pipe to open ("/r" or "/w") 
- * int   mode;  access mode (O_RDONLY or O_WRONLY)
- */		      
-LOCAL int
-uxPipeOpen(DEV_HDR *pDv, char *name, int mode)
-{
-  UXPIPE_DEV *reader, *writer;
-
-  if (mode == O_RDONLY && strcmp(name, PIPE_READ) == 0) {
-    /* reader open */
-    if ((newPipe = (UXPIPE *) malloc(sizeof(UXPIPE))) != NULL) {
-      if ((newPipe->ringId = rngCreate(UXPIPE_SIZE)) != NULL) {
-	if ((reader = (UXPIPE_DEV *) malloc(sizeof(UXPIPE_DEV))) != NULL) {
-	  if ((reader->semExcl = semBCreate(SEM_Q_FIFO, SEM_FULL)) != NULL) {
-	    if ((reader->semBlock = semBCreate(SEM_Q_FIFO, SEM_EMPTY)) != NULL) {
-	      reader->pipe = newPipe;
-	      reader->blocking = 1;
-	      selWakeupListInit(&reader->wakeupList);
-	      newPipe->reader = reader;
-	      newPipe->writer = NULL;
-	      newPipe->drvNum = uxPipeDrvNum;
-	      return ((int) reader);
-	    }
-	    semDelete(reader->semExcl);
-	  }
-	  free(reader);
-	}
-	rngDelete(newPipe->ringId);
-      }
-      free(newPipe);
-      newPipe = NULL;
-      errno = ENOMEM;
-    }
-  } else if (mode == O_WRONLY && strcmp(name, PIPE_WRITE) == 0) {
-    /* writer open */
-    if (newPipe != NULL &&
-	(writer = (UXPIPE_DEV *) malloc(sizeof(UXPIPE_DEV))) != NULL) {
-      if ((writer->semExcl = semBCreate(SEM_Q_FIFO, SEM_FULL)) != NULL) {
-	if ((writer->semBlock = semBCreate(SEM_Q_FIFO, SEM_FULL)) != NULL) {
-	  writer->blocking = 1;
-	  writer->pipe = newPipe;
-	  selWakeupListInit(&writer->wakeupList);
-	  newPipe->writer = writer;
-	  newPipe = NULL;
-	  return ((int) writer);
-	}
-	semDelete(writer->semExcl);
-      }
-      free(writer);
-    }
-    if (newPipe != NULL)
-      free(newPipe);
-    newPipe = NULL;
-    errno = ENOMEM;
-  } else {
-    errno = EINVAL;
-  }
-  return (ERROR);
-}
-
-/***************************************************************************
- *
- * uxPipeClose - close read or write end of a pipe.
- *
- * RETURNS:
- *    OK, or ERROR if device descriptor does not refer to an open read or
- write end of a pipe (errno = EBADF).
- */
-
-LOCAL int
-uxPipeClose(UXPIPE_DEV *pDev)
-{
-  UXPIPE *pajp = pDev->pipe;
-
-  taskLock();
-  if (pDev == pajp->reader) {
-    /* Close this end */
-    semDelete(pDev->semExcl);
-    semDelete(pDev->semBlock);
-    free(pDev);
-    pajp->reader = NULL;
-    /* Inform the other end */
-    if (pajp->writer != NULL) {
-      selWakeupAll(&pajp->writer->wakeupList, SELWRITE);
-      semGive(pajp->writer->semBlock);
-    }
-  } else if (pDev == pajp->writer) {
-    /* Close this end */
-    semDelete(pDev->semExcl);
-    semDelete(pDev->semBlock);
-    free(pDev);
-    pajp->writer = NULL;
-    /* Inform the other end */
-    if (pajp->reader != NULL) {
-      selWakeupAll(&pajp->reader->wakeupList, SELREAD);
-      semGive(pajp->reader->semBlock);
-    }
-  } else {
-    errno = EBADF;
-    taskUnlock();
-    return (ERROR);
-  }
-  if (pajp->reader == NULL && pajp->writer == NULL) {
-    rngDelete(pajp->ringId);
-    pajp->drvNum = 0;
-    free(pajp);
-  }
-  taskUnlock();
-  return (OK);
-}
-/***************************************************************************
- *
- * uxPipeRead - read from a pipe.
- *
- * Reads at most maxbytes bytes from the pipe. Blocks if blocking mode is
- * set and the pipe is empty.
- *
- * RETURNS:
- *    number of bytes read, 0 on EOF, or ERROR if device descriptor does
- *    not refer to an open read end of a pipe (errno = EBADF), or if 
- *    non-blocking mode is set and the pipe is empty (errno = EWOULDBLOCK).
- */
-
-LOCAL int
-uxPipeRead(UXPIPE_DEV *pDev, char *buffer, int maxbytes)
-{
-  UXPIPE *pajp = pDev->pipe;
-  int   nbytes = 0;
-
-  if (pDev != pajp->reader) {
-    errno = EBADF;
-    return (ERROR);
-  }
-  if (maxbytes == 0)
-    return (0);
-  semTake(pDev->semExcl, WAIT_FOREVER);
-  /* 
-   * Note that semBlock may be full, although there is nothing to read.
-   * This happens e.g. after the following sequence of operations: a 
-   * reader task blocks, a writer task writes two times (the first 
-   * write unblocks the reader task, the second write makes semBlock
-   * full).
-   */
-  while (nbytes == 0) {
-    if (pDev->blocking) 
-      semTake(pDev->semBlock, WAIT_FOREVER);
-    /* 
-     * Reading and updating of the write end must not be interleaved
-     * with a write from another task - hence we lock this task.
-     */
-    taskLock();
-    nbytes = rngBufGet(pajp->ringId, buffer, maxbytes);
-    if (nbytes > 0) {
-      /* Give own semaphore if bytes remain or if write end is closed */
-      if ((!rngIsEmpty(pajp->ringId) || pajp->writer == NULL) &&
-	  pDev->blocking)
-	semGive(pDev->semBlock);
-      /* Inform write end */
-      if (pajp->writer != NULL) {
-	if (pajp->writer->blocking) 
-	  semGive(pajp->writer->semBlock);
-	selWakeupAll(&pajp->writer->wakeupList, SELWRITE);
-      }
-    } else if (pajp->writer == NULL) {
-      nbytes = 0;		/* EOF */
-      /* Give semaphore when write end is closed */
-      if (pDev->blocking) 
-	semGive(pDev->semBlock);
-      taskUnlock();
-      semGive(pDev->semExcl);
-      return (nbytes);
-    } else if (!pDev->blocking) {
-      taskUnlock();
-      semGive(pDev->semExcl);
-      errno = EWOULDBLOCK;
-      return (ERROR);
-    }      
-    taskUnlock();
-  }
-  semGive(pDev->semExcl);
-  return (nbytes);
-}
-
-/***************************************************************************
- *
- * uxPipeWrite - write to a pipe.
- *
- * Writes nbytes bytes to the pipe. Blocks if blocking mode is set, and if 
- * the pipe is full.
- *
- * RETURNS:
- * number of bytes written, or ERROR if the device descriptor does not
- * refer to an open write end of a pipe (errno = EBADF); or if the read end
- * of the pipe is closed (errno = EPIPE); or if non-blocking mode is set
- * and the pipe is full (errno = EWOULDBLOCK).
- *
- */
-
-LOCAL int
-uxPipeWrite(UXPIPE_DEV *pDev, char *buffer, int nbytes)
-{
-
-  UXPIPE *pajp = pDev->pipe;
-  int   sofar = 0, written;
-
-  if (pDev != pajp->writer) {
-    errno = EBADF;
-    return (ERROR);
-  }
-  if (pajp->reader == NULL) {
-    errno = EPIPE;
-    return (ERROR);
-  }
-  if (nbytes == 0)
-    return (0);
-  semTake(pDev->semExcl, WAIT_FOREVER);
-  while (sofar < nbytes) {
-    if (pDev->blocking)
-      semTake(pDev->semBlock, WAIT_FOREVER);
-    if (pajp->reader == NULL) {
-      errno = EPIPE;
-      semGive(pDev->semBlock);
-      semGive(pDev->semExcl);
-      return (ERROR);
-    }
-    /* Writing and updating of the read end must not be interleaved
-     * with a read from another task - hence we lock this task.
-     */
-    taskLock();
-    written = rngBufPut(pajp->ringId, buffer + sofar, nbytes - sofar);
-    sofar += written;
-    /* Inform the read end if we really wrote something */
-    if (written > 0 && pajp->reader != NULL) {
-      selWakeupAll(&pajp->reader->wakeupList, SELREAD);
-      if (pajp->reader->blocking)
-	semGive(pajp->reader->semBlock);
-    }
-    taskUnlock();
-    if (!pDev->blocking) {
-      if (sofar == 0) {
-      errno = EWOULDBLOCK;
-      sofar = ERROR;
-      }
-      break;
-    }
-  }
-  /* Give own semaphore if space remains */
-  if (!rngIsFull(pajp->ringId) && pDev->blocking)
-    semGive(pDev->semBlock);
-  semGive(pDev->semExcl);
-  return (sofar);
-}
-
-/***************************************************************************
- *
- * uxPipeIoctl - do device specific I/O control
- *
- * RETURNS:
- *    OK or ERROR.
- */
-
-LOCAL STATUS
-uxPipeIoctl(FAST UXPIPE_DEV *pDev, FAST int function, int arg)
-     
-{
-  UXPIPE *pajp = pDev->pipe;
-  int   status = OK;
-
-  switch (function) {
-  case FIONBIO:
-    pDev->blocking = (*(int *)arg) ? 0 : 1;
-    break;
-  case FIOSELECT:
-    taskLock();
-    selNodeAdd(&pDev->wakeupList, (SEL_WAKEUP_NODE *) arg);
-    if (selWakeupType((SEL_WAKEUP_NODE *) arg) == SELREAD &&
-	pDev == pajp->reader &&
-	(!rngIsEmpty(pajp->ringId) || pajp->writer == NULL))
-      selWakeup((SEL_WAKEUP_NODE *) arg);
-    if (selWakeupType((SEL_WAKEUP_NODE *) arg) == SELWRITE &&
-	pDev == pajp->writer &&
-	(!rngIsFull(pajp->ringId) || pajp->reader == NULL))
-      selWakeup((SEL_WAKEUP_NODE *) arg);
-    taskUnlock();
-    break;
-  case FIOUNSELECT:
-    selNodeDelete(&pDev->wakeupList, (SEL_WAKEUP_NODE *) arg);
-    break;
-  default:
-    status = ERROR;
-    break;
-  }
-  return (status);
-}
-
-/***************************************************************************
- *
- * pipe - create an intertask channel
- *
- * Creates a pipe. fd[0] (fd[1]) is the read (write) file descriptor.
- *
- * RETURNS:
- *    OK or ERROR, if the pipe could not be created.
- */
-
-STATUS
-pipe(int fd[2])
-{
-  semTake(pipeSem, WAIT_FOREVER);
-  if ((fd[0] = open(pipeRead, O_RDONLY, 0)) != ERROR) {
-    if ((fd[1] = open(pipeWrite, O_WRONLY, 0)) != ERROR) {
-      semGive(pipeSem);
-      return (OK);
-    }
-    (void) close(fd[0]);
-  }
-  errno &= 0xFFFF;
-  if((errno & 0xFFFF) == EINTR) /* Why on earth EINTR??? */
-      errno = ENFILE;           /* It means we are out of file descriptors...*/
-  semGive(pipeSem);
-  return (ERROR);
-}
-
-/***************************************************************************
- *
- * uxPipeShow - display pipe information
- *
- * RETURNS:
- *    N/A.
- */
-
-void
-uxPipeShow(int fd)
-{
-  UXPIPE_DEV *pDev;
-  UXPIPE *pajp;
-  int drvValue;
-
-  if ((drvValue = iosFdValue(fd)) == ERROR) {
-    erts_fprintf(stderr, "Error: file descriptor invalid\n");
-    return;
-  }
-  pDev = (UXPIPE_DEV *)drvValue;
-  pajp = pDev->pipe;
-  if (pajp->drvNum != uxPipeDrvNum) {
-    erts_fprintf(stderr, "Error: Not a ux pipe device\n");
-    return;
-  }
-  erts_fprintf(stderr, "Device              : 0x%x\n", (int) pDev);
-  erts_fprintf(stderr, "Buffer size         : %d\n", UXPIPE_SIZE);
-  erts_fprintf(stderr, "Bytes in buffer     : %d\n\n", rngNBytes(pajp->ringId));
-  erts_fprintf(stderr, "READ END\n\n");
-  if (pajp->reader != NULL) {
-    erts_fprintf(stderr, "Mode                : ");
-    erts_fprintf(stderr, "%s\n", 
-	       (pajp->reader->blocking) ? "blocking" : "non-blocking");
-  }
-  erts_fprintf(stderr, "Status              : ");
-  if (pajp->reader != NULL) {
-    erts_fprintf(stderr, "OPEN\n");
-    erts_fprintf(stderr, "Wake-up list        : %d\n\n", 
-	       selWakeupListLen(&pajp->reader->wakeupList));
-    erts_fprintf(stderr, "Exclusion Semaphore\n");
-    semShow(pajp->reader->semExcl, 1);
-    erts_fprintf(stderr, "Blocking Semaphore\n");
-    semShow(pajp->reader->semBlock, 1);
-  } else 
-    erts_fprintf(stderr, "CLOSED\n\n");
-  erts_fprintf(stderr, "WRITE END\n\n");
-  if (pajp->writer != NULL) {
-    erts_fprintf(stderr, "Mode                : ");
-    erts_fprintf(stderr, "%s\n", 
-	       (pajp->writer->blocking) ? "blocking" : "non-blocking");
-  }
-  erts_fprintf(stderr, "Status              : ");
-  if (pajp->writer != NULL) {
-    erts_fprintf(stderr, "OPEN\n");
-    erts_fprintf(stderr, "Wake-up list        : %d\n\n", 
-	       selWakeupListLen(&pajp->writer->wakeupList));
-    erts_fprintf(stderr, "Exclusion Semaphore\n");
-    semShow(pajp->writer->semExcl, 1);
-    erts_fprintf(stderr, "Blocking Semaphore\n");
-    semShow(pajp->writer->semBlock, 1);
-  } else 
-    erts_fprintf(stderr, "CLOSED\n\n");
-}
-
-#ifdef DEBUG
-void
-erl_assert_error(char* expr, char* file, int line)
-{   
-    fflush(stdout);
-    fprintf(stderr, "Assertion failed: %s in %s, line %d\n",
-	    expr, file, line);
-    fflush(stderr);
-    erl_crash_dump(file, line, "Assertion failed: %s\n", expr);
-    abort();
-}
-void
-erl_debug(char* fmt, ...)
-{
-    char sbuf[1024];		/* Temporary buffer. */
-    va_list va;
-    
-    va_start(va, fmt);
-    vsprintf(sbuf, fmt, va);
-    va_end(va);
-    fprintf(stderr, "%s\n", sbuf);
-}
-#endif
-- 
cgit v1.2.3


From eb510f38e842cb94d24ba8a5ab4a3833aa24428e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Mon, 16 Jul 2012 19:30:14 +0200
Subject: erts: Remove VxWorks from tests

---
 erts/emulator/test/Makefile                        |    1 -
 erts/emulator/test/distribution_SUITE.erl          |   21 +-
 erts/emulator/test/driver_SUITE_data/chkio_drv.c   |    2 +-
 .../test/driver_SUITE_data/io_ready_exit_drv.c     |    2 +-
 .../emulator/test/driver_SUITE_data/ioq_exit_drv.c |    2 +-
 .../test/driver_SUITE_data/missing_callback_drv.c  |    2 +-
 .../peek_non_existing_queue_drv.c                  |    2 +-
 erts/emulator/test/driver_SUITE_data/timer_drv.c   |   12 -
 erts/emulator/test/emulator.spec.vxworks           |   26 -
 erts/emulator/test/estone_SUITE_data/estone_cat.c  |    4 -
 erts/emulator/test/gc_SUITE.erl                    |   59 +-
 erts/emulator/test/port_SUITE.erl                  | 1210 +++++++++-----------
 erts/emulator/test/port_SUITE_data/dead_port.c     |   24 -
 erts/emulator/test/port_SUITE_data/port_test.c     |   35 -
 erts/emulator/test/port_SUITE_data/reclaim.h       |   60 -
 erts/emulator/test/port_bif_SUITE_data/port_test.c |   37 +-
 erts/emulator/test/port_bif_SUITE_data/reclaim.h   |   60 -
 erts/emulator/test/process_SUITE.erl               |   10 +-
 erts/emulator/test/timer_bif_SUITE.erl             |   67 +-
 erts/emulator/test/trace_local_SUITE.erl           |   14 +-
 erts/emulator/test/trace_port_SUITE.erl            |    7 +-
 21 files changed, 627 insertions(+), 1030 deletions(-)
 delete mode 100644 erts/emulator/test/emulator.spec.vxworks
 delete mode 100644 erts/emulator/test/port_SUITE_data/reclaim.h
 delete mode 100644 erts/emulator/test/port_bif_SUITE_data/reclaim.h

(limited to 'erts/emulator')

diff --git a/erts/emulator/test/Makefile b/erts/emulator/test/Makefile
index 627aa01bbf..65e0606f98 100644
--- a/erts/emulator/test/Makefile
+++ b/erts/emulator/test/Makefile
@@ -140,7 +140,6 @@ EMAKEFILE=Emakefile
 
 TEST_SPEC_FILES =	emulator.spec \
 			emulator.spec.win \
-			emulator.spec.vxworks \
 			emulator.spec.ose
 # ----------------------------------------------------
 # Release directory specification
diff --git a/erts/emulator/test/distribution_SUITE.erl b/erts/emulator/test/distribution_SUITE.erl
index 2ddb4d76d9..c88218c176 100644
--- a/erts/emulator/test/distribution_SUITE.erl
+++ b/erts/emulator/test/distribution_SUITE.erl
@@ -98,19 +98,6 @@ end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
     Dog=?config(watchdog, Config),
     ?t:timetrap_cancel(Dog).
 
-%%% Don't be too hard on vxworks, the cross server gets nodedown
-%%% cause the card is too busy if we don't sleep a little between pings.
-sleep() ->
-    case os:type() of
-	vxworks ->
-	    receive
-	    after 10 ->
-		    ok
-	    end;
-	_ ->
-	    ok
-    end.
-
 ping(doc) ->
     ["Tests pinging a node in different ways."];
 ping(Config) when is_list(Config) ->
@@ -122,23 +109,21 @@ ping(Config) when is_list(Config) ->
     ?line Host = hostname(),
     ?line BadName = list_to_atom("__pucko__@" ++ Host),
     ?line io:format("Pinging ~s (assumed to not exist)", [BadName]),
-    ?line test_server:do_times(Times, 
-			       fun() -> pang = net_adm:ping(BadName),
-					sleep() 
+    ?line test_server:do_times(Times, fun() -> pang = net_adm:ping(BadName)
 			       end),
 
     %% Pings another node.
 
     ?line {ok, OtherNode} = start_node(distribution_SUITE_other),
     ?line io:format("Pinging ~s (assumed to exist)", [OtherNode]),
-    ?line test_server:do_times(Times, fun() -> pong = net_adm:ping(OtherNode),sleep() end),
+    ?line test_server:do_times(Times, fun() -> pong = net_adm:ping(OtherNode) end),
     ?line stop_node(OtherNode),
 
     %% Pings our own node many times.
 
     ?line Node = node(),
     ?line io:format("Pinging ~s (the same node)", [Node]),
-    ?line test_server:do_times(Times, fun() -> pong = net_adm:ping(Node),sleep() end),
+    ?line test_server:do_times(Times, fun() -> pong = net_adm:ping(Node) end),
 
     ok.
 
diff --git a/erts/emulator/test/driver_SUITE_data/chkio_drv.c b/erts/emulator/test/driver_SUITE_data/chkio_drv.c
index 40f1ad4fea..faf1040276 100644
--- a/erts/emulator/test/driver_SUITE_data/chkio_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/chkio_drv.c
@@ -17,7 +17,7 @@
  */
 
 #ifndef UNIX
-#if !defined(__WIN32__) && !defined(VXWORKS)
+#if !defined(__WIN32__)
 #define UNIX 1
 #endif
 #endif
diff --git a/erts/emulator/test/driver_SUITE_data/io_ready_exit_drv.c b/erts/emulator/test/driver_SUITE_data/io_ready_exit_drv.c
index e6a3edcd74..1e107309df 100644
--- a/erts/emulator/test/driver_SUITE_data/io_ready_exit_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/io_ready_exit_drv.c
@@ -17,7 +17,7 @@
  */
 
 #ifndef UNIX
-#if !defined(__WIN32__) && !defined(VXWORKS)
+#if !defined(__WIN32__)
 #define UNIX 1
 #endif
 #endif
diff --git a/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c b/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
index b2cc1e785a..d174771629 100644
--- a/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
@@ -29,7 +29,7 @@
  */
 
 #ifndef UNIX
-#if !defined(__WIN32__) && !defined(VXWORKS)
+#if !defined(__WIN32__)
 #define UNIX 1
 #endif
 #endif
diff --git a/erts/emulator/test/driver_SUITE_data/missing_callback_drv.c b/erts/emulator/test/driver_SUITE_data/missing_callback_drv.c
index e7d9a294fa..851f2c745b 100644
--- a/erts/emulator/test/driver_SUITE_data/missing_callback_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/missing_callback_drv.c
@@ -17,7 +17,7 @@
  */
 
 #ifndef UNIX
-#if !defined(__WIN32__) && !defined(VXWORKS)
+#if !defined(__WIN32__)
 #define UNIX 1
 #endif
 #endif
diff --git a/erts/emulator/test/driver_SUITE_data/peek_non_existing_queue_drv.c b/erts/emulator/test/driver_SUITE_data/peek_non_existing_queue_drv.c
index 8e203f74ec..0c86a26604 100644
--- a/erts/emulator/test/driver_SUITE_data/peek_non_existing_queue_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/peek_non_existing_queue_drv.c
@@ -28,7 +28,7 @@
  */
 
 #ifndef UNIX
-#if !defined(__WIN32__) && !defined(VXWORKS)
+#if !defined(__WIN32__)
 #define UNIX 1
 #endif
 #endif
diff --git a/erts/emulator/test/driver_SUITE_data/timer_drv.c b/erts/emulator/test/driver_SUITE_data/timer_drv.c
index 8c3f203a64..57538e0d57 100644
--- a/erts/emulator/test/driver_SUITE_data/timer_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/timer_drv.c
@@ -1,11 +1,3 @@
-#ifdef VXWORKS
-#include <vxWorks.h>
-#include <taskVarLib.h>
-#include <taskLib.h>
-#include <sysLib.h>
-#include <string.h>
-#include <ioLib.h>
-#endif
 #include <stdio.h>
 #include "erl_driver.h"
 
@@ -84,11 +76,7 @@ static void timer_read(ErlDrvData p, char *buf, ErlDrvSizeT len)
 	driver_output(port, reply, 1);
     } else if (buf[0] == DELAY_START_TIMER) {
 #ifndef __WIN32__
-#ifdef VXWORKS
-	taskDelay(sysClkRateGet());
-#else
 	sleep(1);
-#endif
 #endif
 	driver_set_timer(port, get_int32(buf + 1));
     }
diff --git a/erts/emulator/test/emulator.spec.vxworks b/erts/emulator/test/emulator.spec.vxworks
deleted file mode 100644
index 55675bdc29..0000000000
--- a/erts/emulator/test/emulator.spec.vxworks
+++ /dev/null
@@ -1,26 +0,0 @@
-{topcase, {dir, "../emulator_test"}}.
-
-% Added since R11
-{skip,{distribution_SUITE,link_to_dead_new_node,"Does not work in distributed test environments"}}.
-{skip,{binary_SUITE,terms_float,"Floats, VxWorks, PPC = Floating points never equal..."}}.
-{skip,{system_info_SUITE,process_count,"Fix-allocs starving VxWorks cards"}}.
-{skip,{monitor_SUITE,mixer,"Fix-allocs starving VxWorks cards"}}.
-
-{skip,{node_container_SUITE,"Too memory consuming..."}}.
-
-{skip,{trace_SUITE,system_monitor_long_gc_1,"Too memory consuming..."}}.
-{skip,{trace_SUITE,system_monitor_long_gc_2,"Too memory consuming..."}}.
-{skip,{trace_SUITE,system_monitor_large_heap_1,"Too memory consuming..."}}.
-{skip,{trace_SUITE,system_monitor_large_heap_2,"Too memory consuming..."}}.
-% End added since R11
-
-{skip, {distribution_SUITE,stop_dist,"Not written to work on VxWorks."}}.
-{skip, {distribution_SUITE,dist_auto_connect_never,
-	"Not written to work on VxWorks."}}.
-{skip, {distribution_SUITE,dist_auto_connect_once,
-	"Not written to work on VxWorks."}}.
-{skip, {trace_SUITE,system_monitor_long_gc,
-	"Too memory consuming for VxWorks cards."}}.
-{skip, {trace_meta_SUITE,stack_grow,
-        "Too memory consuming for VxWorks cards."}}.
-{skip, {obsolete_SUITE, "Not on vxworks"}}.
diff --git a/erts/emulator/test/estone_SUITE_data/estone_cat.c b/erts/emulator/test/estone_SUITE_data/estone_cat.c
index 8ed9f8375b..a34bda4384 100644
--- a/erts/emulator/test/estone_SUITE_data/estone_cat.c
+++ b/erts/emulator/test/estone_SUITE_data/estone_cat.c
@@ -12,11 +12,7 @@
 #include <fcntl.h>
 #include <errno.h>
 
-#ifdef VXWORKS
-estone_cat(argc, argv)
-#else
 main(argc, argv)
-#endif
 int argc;
 char *argv[];
 {
diff --git a/erts/emulator/test/gc_SUITE.erl b/erts/emulator/test/gc_SUITE.erl
index 771d2c9a7a..19fa433a53 100644
--- a/erts/emulator/test/gc_SUITE.erl
+++ b/erts/emulator/test/gc_SUITE.erl
@@ -54,17 +54,12 @@ grow_heap(doc) -> ["Produce a growing list of elements, ",
 		   "for X calls, then drop one item per call",
 		   "until the list is empty."];
 grow_heap(Config) when is_list(Config) ->
-    ?line Dog=test_server:timetrap(test_server:minutes(40)),
-    ?line ok=grow_heap1(256),
-    case os:type() of 
-	vxworks ->
-	    stop_here;
-	_ ->
-	    ?line ok=grow_heap1(512),
-	    ?line ok=grow_heap1(1024),
-	    ?line ok=grow_heap1(2048)
-    end,
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:minutes(40)),
+    ok  = grow_heap1(256),
+    ok  = grow_heap1(512),
+    ok  = grow_heap1(1024),
+    ok  = grow_heap1(2048),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 grow_heap1(Len) ->
@@ -82,10 +77,10 @@ grow_heap1(List, MaxLen, CurLen, up) ->
 grow_heap1([], _MaxLen, _, down) ->
     ok;
 grow_heap1([_|List], MaxLen, CurLen, down) ->
-    ?line {_,_,C}=erlang:now(),
-    ?line Num=C rem (length(List))+1,
-    ?line Elem=lists:nth(Num, List),
-    ?line NewList=lists:delete(Elem, List),
+    {_,_,C} = erlang:now(),
+    Num     = C rem (length(List))+1,
+    Elem    = lists:nth(Num, List),
+    NewList = lists:delete(Elem, List),
     grow_heap1(NewList, MaxLen, CurLen-1, down).
 
 
@@ -93,16 +88,11 @@ grow_heap1([_|List], MaxLen, CurLen, down) ->
 grow_stack(doc) -> ["Increase and decrease stack size, and ",
 		    "drop off some garbage from time to time."];
 grow_stack(Config) when is_list(Config) ->
-    ?line Dog=test_server:timetrap(test_server:minutes(80)),
+    Dog = test_server:timetrap(test_server:minutes(80)),
     show_heap("before:"),
-    case os:type() of
-	vxworks ->
-	    ?line grow_stack1(25, 0);
-	_ ->
-	    ?line grow_stack1(200, 0)
-    end,
+    grow_stack1(200, 0),
     show_heap("after:"),
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 grow_stack1(0, _) ->
@@ -123,16 +113,11 @@ grow_stack_heap(doc) -> ["While growing the heap, bounces the size ",
 			 "of the stack, and while reducing the heap",
 			 "bounces the stack usage."];
 grow_stack_heap(Config) when is_list(Config) ->
-    case os:type() of 
-	vxworks ->
-	    {comment, "Takes too long to run on VxWorks/cpu32"};
-	_ ->
-	    ?line Dog=test_server:timetrap(test_server:minutes(40)),
-	    ?line grow_stack_heap1(16),
-	    ?line grow_stack_heap1(32),
-	    ?line test_server:timetrap_cancel(Dog),
-	    ok
-    end.
+    Dog = test_server:timetrap(test_server:minutes(40)),
+    grow_stack_heap1(16),
+    grow_stack_heap1(32),
+    test_server:timetrap_cancel(Dog),
+    ok.
 
 grow_stack_heap1(MaxLen) ->
     io:format("~ngrow_stack_heap with ~p items.",[MaxLen]),
@@ -151,10 +136,10 @@ grow_stack_heap1(List, MaxLen, CurLen, up) ->
 grow_stack_heap1([], _MaxLen, _, down) -> ok;
 grow_stack_heap1([_|List], MaxLen, CurLen, down) ->
     grow_stack1(CurLen*2,0),
-    ?line {_,_,C}=erlang:now(),
-    ?line Num=C rem (length(List))+1,
-    ?line Elem=lists:nth(Num, List),
-    ?line NewList=lists:delete(Elem, List),
+    {_,_,C}=erlang:now(),
+    Num=C rem (length(List))+1,
+    Elem=lists:nth(Num, List),
+    NewList=lists:delete(Elem, List),
     grow_stack_heap1(NewList, MaxLen, CurLen-1, down),
     ok.
 
diff --git a/erts/emulator/test/port_SUITE.erl b/erts/emulator/test/port_SUITE.erl
index 0b99b3438a..4b555777d7 100644
--- a/erts/emulator/test/port_SUITE.erl
+++ b/erts/emulator/test/port_SUITE.erl
@@ -157,16 +157,16 @@ win_massive(Config) when is_list(Config) ->
     end.
 
 do_win_massive() ->
-    ?line Dog = test_server:timetrap(test_server:seconds(360)),
-    ?line SuiteDir = filename:dirname(code:which(?MODULE)),
-    ?line Env = " -env ERL_MAX_PORTS 8192",
-    ?line {ok, Node} = 
+    Dog = test_server:timetrap(test_server:seconds(360)),
+    SuiteDir = filename:dirname(code:which(?MODULE)),
+    Env = " -env ERL_MAX_PORTS 8192",
+    {ok, Node} = 
 	test_server:start_node(win_massive,
 			       slave,
 			       [{args, " -pa " ++ SuiteDir ++ Env}]),
-    ?line ok = rpc:call(Node,?MODULE,win_massive_client,[3000]),
-    ?line test_server:stop_node(Node),
-    ?line test_server:timetrap_cancel(Dog),
+    ok = rpc:call(Node,?MODULE,win_massive_client,[3000]),
+    test_server:stop_node(Node),
+    test_server:timetrap_cancel(Dog),
     ok.
     
 win_massive_client(N) ->
@@ -208,11 +208,11 @@ win_massive_loop(P,N) ->
 %% We will send only a small amount of data, to avoid deadlock.
 
 stream_small(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line stream_ping(Config, 512, "", []),
-    ?line stream_ping(Config, 1777, "", []),
-    ?line stream_ping(Config, 1777, "-s512", []),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    stream_ping(Config, 512, "", []),
+    stream_ping(Config, 1777, "", []),
+    stream_ping(Config, 1777, "-s512", []),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Send big amounts of data (much bigger than the buffer size in port test).
@@ -220,30 +220,22 @@ stream_small(Config) when is_list(Config) ->
 %% non-blocking reads and writes.
 
 stream_big(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(180)),
-    case os:type() of 
-	vxworks ->
-	    %% Don't stress VxWorks too much
-	    ?line stream_ping(Config, 43755, "", []),
-	    ?line stream_ping(Config, 51255, "", []),
-	    ?line stream_ping(Config, 52345, " -s40000", []);
-	_ ->
-	    ?line stream_ping(Config, 43755, "", []),
-	    ?line stream_ping(Config, 100000, "", []),
-	    ?line stream_ping(Config, 77777, " -s40000", [])
-    end,
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(180)),
+    stream_ping(Config, 43755, "", []),
+    stream_ping(Config, 100000, "", []),
+    stream_ping(Config, 77777, " -s40000", []),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Sends packet with header size of 1, 2, and 4, with packets of various
 %% sizes.
 
 basic_ping(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(120)),
-    ?line ping(Config, sizes(1), 1, "", []),
-    ?line ping(Config, sizes(2), 2, "", []),
-    ?line ping(Config, sizes(4), 4, "", []),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(120)),
+    ping(Config, sizes(1), 1, "", []),
+    ping(Config, sizes(2), 2, "", []),
+    ping(Config, sizes(4), 4, "", []),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Let the port program insert delays between characters sent back to
@@ -251,30 +243,29 @@ basic_ping(Config) when is_list(Config) ->
 %% small chunks rather than all at once.
 
 slow_writes(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(20)),
-    ?line ping(Config, [8], 4, "-s1", []),
-    ?line ping(Config, [10], 2, "-s2", []),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(20)),
+    ping(Config, [8], 4, "-s1", []),
+    ping(Config, [10], 2, "-s2", []),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 bad_packet(doc) ->
     ["Test that we get {'EXIT', Port, einval} if we try to send a bigger "
      "packet than the packet header allows."];
 bad_packet(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line PortTest = port_test(Config),
-    ?line process_flag(trap_exit, true),
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    PortTest = port_test(Config),
+    process_flag(trap_exit, true),
 
-    ?line bad_packet(PortTest, 1, 256),
-    ?line bad_packet(PortTest, 1, 257),
-    ?line bad_packet(PortTest, 2, 65536),
-    ?line bad_packet(PortTest, 2, 65537),
+    bad_packet(PortTest, 1, 256),
+    bad_packet(PortTest, 1, 257),
+    bad_packet(PortTest, 2, 65536),
+    bad_packet(PortTest, 2, 65537),
 
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 bad_packet(PortTest, HeaderSize, PacketSize) ->
-    %% Intentionally no ?line macros.
     P = open_port({spawn, PortTest}, [{packet, HeaderSize}]),
     P ! {self(), {command, make_zero_packet(PacketSize)}},
     receive
@@ -292,16 +283,16 @@ make_zero_packet(N) ->
 
 %% Test sending bad messages to a port.
 bad_port_messages(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line PortTest = port_test(Config),
-    ?line process_flag(trap_exit, true),
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    PortTest = port_test(Config),
+    process_flag(trap_exit, true),
 
-    ?line bad_message(PortTest, {a,b}),
-    ?line bad_message(PortTest, {a}),
-    ?line bad_message(PortTest, {self(),{command,bad_command}}),
-    ?line bad_message(PortTest, {self(),{connect,no_pid}}),
+    bad_message(PortTest, {a,b}),
+    bad_message(PortTest, {a}),
+    bad_message(PortTest, {self(),{command,bad_command}}),
+    bad_message(PortTest, {self(),{connect,no_pid}}),
 
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 bad_message(PortTest, Message) ->    
@@ -319,108 +310,97 @@ bad_message(PortTest, Message) ->
 %% Tests the 'binary' option for a port.
 
 t_binary(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(300)),
+    Dog = test_server:timetrap(test_server:seconds(300)),
 
     %% Packet mode.
-    ?line ping(Config, sizes(1), 1, "", [binary]),
-    ?line ping(Config, sizes(2), 2, "", [binary]),
-    ?line ping(Config, sizes(4), 4, "", [binary]),
+    ping(Config, sizes(1), 1, "", [binary]),
+    ping(Config, sizes(2), 2, "", [binary]),
+    ping(Config, sizes(4), 4, "", [binary]),
 
     %% Stream mode.
-    case os:type() of
-	vxworks ->
-	    %% don't stress VxWorks too much
-	    ?line stream_ping(Config, 435, "", [binary]),
-	    ?line stream_ping(Config, 43755, "", [binary]),
-	    ?line stream_ping(Config, 50000, "", [binary]);
-	_ ->
-	    ?line stream_ping(Config, 435, "", [binary]),
-	    ?line stream_ping(Config, 43755, "", [binary]),
-	    ?line stream_ping(Config, 100000, "", [binary])
-    end,
+    stream_ping(Config, 435, "", [binary]),
+    stream_ping(Config, 43755, "", [binary]),
+    stream_ping(Config, 100000, "", [binary]),
 
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 name1(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(100)),
-    ?line PortTest = port_test(Config),
-    ?line Command = lists:concat([PortTest, " "]),
-    ?line P = open_port({spawn, Command}, []),
-    ?line register(myport, P),
-    ?line P = whereis(myport),
+    Dog = test_server:timetrap(test_server:seconds(100)),
+    PortTest = port_test(Config),
+    Command = lists:concat([PortTest, " "]),
+    P = open_port({spawn, Command}, []),
+    register(myport, P),
+    P = whereis(myport),
     Text = "hej",
-    ?line myport ! {self(), {command, Text}},
-    ?line receive
-	      {P, {data, Text}} ->
-		  ok
-	  end,
-    ?line myport ! {self(), close},
-    ?line receive
-	      {P, closed} -> ok
-	  end,
-    ?line undefined = whereis(myport),
-    ?line test_server:timetrap_cancel(Dog),
+    myport ! {self(), {command, Text}},
+    receive
+        {P, {data, Text}} ->
+            ok
+    end,
+    myport ! {self(), close},
+    receive
+        {P, closed} -> ok
+    end,
+    undefined = whereis(myport),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Test that the 'eof' option works.
 
 eof(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(100)),
-    ?line PortTest = port_test(Config),
-    ?line Command = lists:concat([PortTest, " -h0 -q"]),
-    ?line P = open_port({spawn, Command}, [eof]),
-    ?line receive
-	      {P, eof} ->
-		  ok
-	  end,
-    ?line P ! {self(), close},
-    ?line receive
-	      {P, closed} -> ok
-	  end,
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(100)),
+    PortTest = port_test(Config),
+    Command = lists:concat([PortTest, " -h0 -q"]),
+    P = open_port({spawn, Command}, [eof]),
+    receive
+        {P, eof} ->
+            ok
+    end,
+    P ! {self(), close},
+    receive
+        {P, closed} -> ok
+    end,
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Tests that the 'in' option for a port works.
 
 input_only(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(300)),
-    ?line expect_input(Config, [0, 1, 10, 13, 127, 128, 255], 1, "", [in]),
-    ?line expect_input(Config, [0, 1, 255, 2048], 2, "", [in]),
-    ?line expect_input(Config, [0, 1, 255, 2048], 4, "", [in]),
-    ?line expect_input(Config, [0, 1, 10, 13, 127, 128, 255],
-		       1, "", [in, binary]),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(300)),
+    expect_input(Config, [0, 1, 10, 13, 127, 128, 255], 1, "", [in]),
+    expect_input(Config, [0, 1, 255, 2048], 2, "", [in]),
+    expect_input(Config, [0, 1, 255, 2048], 4, "", [in]),
+    expect_input(Config, [0, 1, 10, 13, 127, 128, 255],
+                 1, "", [in, binary]),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Tests that the 'out' option for a port works.
 
 output_only(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(100)),
-    ?line Dir = ?config(priv_dir, Config),
-    ?line Filename = filename:join(Dir, "output_only_stream"),
-    ?line output_and_verify(Config, Filename, "-h0",
-			    random_packet(35777, "echo")),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(100)),
+    Dir = ?config(priv_dir, Config),
+    Filename = filename:join(Dir, "output_only_stream"),
+    output_and_verify(Config, Filename, "-h0",
+          	    random_packet(35777, "echo")),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 output_and_verify(Config, Filename, Options, Data) ->
-    ?line PortTest = port_test(Config),
-    ?line Command = lists:concat([PortTest, " ",
-				  Options, " -o", Filename]),
-    ?line Port = open_port({spawn, Command}, [out]),
-    ?line Port ! {self(), {command, Data}},
-    ?line Port ! {self(), close},
-    ?line receive
-	      {Port, closed} -> ok
-	  end,
-    Wait_time = case os:type() of
-		    vxworks -> 5000;
-		    _ -> 500
-		end,
-    ?line test_server:sleep(Wait_time),
-    ?line {ok, Written} = file:read_file(Filename),
-    ?line Data = binary_to_list(Written),
+    PortTest = port_test(Config),
+    Command = lists:concat([PortTest, " ",
+          		  Options, " -o", Filename]),
+    Port = open_port({spawn, Command}, [out]),
+    Port ! {self(), {command, Data}},
+    Port ! {self(), close},
+    receive
+        {Port, closed} -> ok
+    end,
+    Wait_time = 500,
+    test_server:sleep(Wait_time),
+    {ok, Written} = file:read_file(Filename),
+    Data = binary_to_list(Written),
     ok.
 
 %% Test that receiving several packages written in the same
@@ -430,19 +410,11 @@ output_and_verify(Config, Filename, Options, Data) ->
 %% Basic test of receiving multiple packages, written in
 %% one operation by the other end.
 mul_basic(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(600)),
-    case os:type() of
-	vxworks ->
-	    %% don't stress vxworks too much
-	    ?line expect_input(Config, [0, 1, 255, 10, 13], 1, "", []),
-	    ?line expect_input(Config, [0, 10, 13, 1600, 8191, 16383], 2, "", []),
-	    ?line expect_input(Config, [10, 35000], 4, "", []);
-	_ ->
-	    ?line expect_input(Config, [0, 1, 255, 10, 13], 1, "", []),
-	    ?line expect_input(Config, [0, 10, 13, 1600, 32767, 65535], 2, "", []),
-	    ?line expect_input(Config, [10, 70000], 4, "", [])
-    end,
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(600)),
+    expect_input(Config, [0, 1, 255, 10, 13], 1, "", []),
+    expect_input(Config, [0, 10, 13, 1600, 32767, 65535], 2, "", []),
+    expect_input(Config, [10, 70000], 4, "", []),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Test reading a buffer consisting of several packets, some
@@ -451,9 +423,9 @@ mul_basic(Config) when is_list(Config) ->
 %% delays in between.)
 
 mul_slow_writes(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(250)),
-    ?line expect_input(Config, [0, 20, 255, 10, 1], 1, "-s64", []),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(250)),
+    expect_input(Config, [0, 20, 255, 10, 1], 1, "-s64", []),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Runs several port tests in parallell.  Each individual test
@@ -461,27 +433,27 @@ mul_slow_writes(Config) when is_list(Config) ->
 %% should also finish in about 5 seconds.
 
 parallell(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(300)),
-    ?line Testers =
-	[fun() -> stream_ping(Config, 1007, "-s100", []) end,
-	 fun() -> stream_ping(Config, 10007, "-s1000", []) end,
-	 fun() -> stream_ping(Config, 10007, "-s1000", []) end,
-
-	 fun() -> expect_input(Config, [21, 22, 23, 24, 25], 1,
-			       "-s10", [in]) end,
-
-	 fun() -> ping(Config, [10], 1, "-d", []) end,
-	 fun() -> ping(Config, [20000], 2, "-d", []) end,
-	 fun() -> ping(Config, [101], 1, "-s10", []) end,
-	 fun() -> ping(Config, [1001], 2, "-s100", []) end,
-	 fun() -> ping(Config, [10001], 4, "-s1000", []) end,
-
-	 fun() -> ping(Config, [501, 501], 2, "-s100", []) end,
-	 fun() -> ping(Config, [11, 12, 13, 14, 11], 1, "-s5", []) end],
-    ?line process_flag(trap_exit, true),
-    ?line Pids = lists:map(fun fun_spawn/1, Testers),
-    ?line wait_for(Pids),
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(300)),
+    Testers = [
+	fun() -> stream_ping(Config, 1007, "-s100", []) end,
+	fun() -> stream_ping(Config, 10007, "-s1000", []) end,
+	fun() -> stream_ping(Config, 10007, "-s1000", []) end,
+
+	fun() -> expect_input(Config, [21, 22, 23, 24, 25], 1,
+		    "-s10", [in]) end,
+
+	fun() -> ping(Config, [10], 1, "-d", []) end,
+	fun() -> ping(Config, [20000], 2, "-d", []) end,
+	fun() -> ping(Config, [101], 1, "-s10", []) end,
+	fun() -> ping(Config, [1001], 2, "-s100", []) end,
+	fun() -> ping(Config, [10001], 4, "-s1000", []) end,
+
+	fun() -> ping(Config, [501, 501], 2, "-s100", []) end,
+	fun() -> ping(Config, [11, 12, 13, 14, 11], 1, "-s5", []) end],
+    process_flag(trap_exit, true),
+    Pids = lists:map(fun fun_spawn/1, Testers),
+    wait_for(Pids),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 wait_for([]) ->
@@ -500,29 +472,29 @@ wait_for(Pids) ->
 
 dying_port(suite) -> [];
 dying_port(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(150)),
-    ?line process_flag(trap_exit, true),
+    Dog = test_server:timetrap(test_server:seconds(150)),
+    process_flag(trap_exit, true),
 
-    ?line P1 = make_dying_port(Config),
-    ?line P2 = make_dying_port(Config),
-    ?line P3 = make_dying_port(Config),
-    ?line P4 = make_dying_port(Config),
-    ?line P5 = make_dying_port(Config),
+    P1 = make_dying_port(Config),
+    P2 = make_dying_port(Config),
+    P3 = make_dying_port(Config),
+    P4 = make_dying_port(Config),
+    P5 = make_dying_port(Config),
 
     %% This should be big enough to be sure to block in the write.
-    ?line Garbage = random_packet(16384),
+    Garbage = random_packet(16384),
 
-    ?line P1 ! {self(), {command, Garbage}},
-    ?line P3 ! {self(), {command, Garbage}},
-    ?line P5 ! {self(), {command, Garbage}},
+    P1 ! {self(), {command, Garbage}},
+    P3 ! {self(), {command, Garbage}},
+    P5 ! {self(), {command, Garbage}},
 
-    ?line wait_for_port_exit(P1),
-    ?line wait_for_port_exit(P2),
-    ?line wait_for_port_exit(P3),
-    ?line wait_for_port_exit(P4),
-    ?line wait_for_port_exit(P5),
+    wait_for_port_exit(P1),
+    wait_for_port_exit(P2),
+    wait_for_port_exit(P3),
+    wait_for_port_exit(P4),
+    wait_for_port_exit(P5),
 
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 wait_for_port_exit(Port) ->
@@ -549,9 +521,9 @@ make_dying_port(Config) when is_list(Config) ->
 
 port_program_with_path(suite) -> [];
 port_program_with_path(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(100)),
-    ?line DataDir = ?config(data_dir, Config),
-    ?line PrivDir = ?config(priv_dir, Config),
+    Dog = test_server:timetrap(test_server:seconds(100)),
+    DataDir = ?config(data_dir, Config),
+    PrivDir = ?config(priv_dir, Config),
     
     %% Create a copy of the port test program in a directory not
     %% included in PATH (i.e. in priv_dir), with the name 'my_port_test.exe'.
@@ -560,36 +532,31 @@ port_program_with_path(Config) when is_list(Config) ->
     %% (On Unix, there will be a single file created, which will be
     %% a copy of the port program.)
     
-    ?line PortTest = os:find_executable("port_test", DataDir),
+    PortTest = os:find_executable("port_test", DataDir),
     io:format("os:find_executable(~p, ~p) returned ~p",
 	      ["port_test", DataDir, PortTest]),
-    ?line {ok, PortTestPgm} = file:read_file(PortTest),
-    ?line NewName = filename:join(PrivDir, filename:basename(PortTest)),
-    ?line RedHerring = filename:rootname(NewName),
-    ?line ok = file:write_file(RedHerring, "I'm just here to confuse.\n"),
-    ?line ok = file:write_file(NewName, PortTestPgm),
-    ?line ok = file:write_file_info(NewName, #file_info{mode=8#111}),
-    ?line PgmWithPathAndNoExt = filename:rootname(NewName),
+    {ok, PortTestPgm} = file:read_file(PortTest),
+    NewName = filename:join(PrivDir, filename:basename(PortTest)),
+    RedHerring = filename:rootname(NewName),
+    ok = file:write_file(RedHerring, "I'm just here to confuse.\n"),
+    ok = file:write_file(NewName, PortTestPgm),
+    ok = file:write_file_info(NewName, #file_info{mode=8#111}),
+    PgmWithPathAndNoExt = filename:rootname(NewName),
     
     %% Open the port using the path to the copied port test program,
     %% but without the .exe extension, and verified that it was started.
     %%
     %% If the bug is present the open_port call will fail with badarg.
     
-    ?line Command = lists:concat([PgmWithPathAndNoExt, " -h2"]),
-    %% allow VxWorks time to write file
-    case os:type() of	
-	vxworks -> test_server:sleep(2500);
-	_ -> time
+    Command = lists:concat([PgmWithPathAndNoExt, " -h2"]),
+    P = open_port({spawn, Command}, [{packet, 2}]),
+    Message = "echo back to me",
+    P ! {self(), {command, Message}},
+    receive
+        {P, {data, Message}} ->
+            ok
     end,
-    ?line P = open_port({spawn, Command}, [{packet, 2}]),
-    ?line Message = "echo back to me",
-    ?line P ! {self(), {command, Message}},
-    ?line receive
-	      {P, {data, Message}} ->
-		  ok
-	  end,
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 
@@ -597,56 +564,46 @@ port_program_with_path(Config) when is_list(Config) ->
 %% This used to fail on Windows.
 open_input_file_port(suite) -> [];
 open_input_file_port(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line PrivDir = ?config(priv_dir, Config),
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    PrivDir = ?config(priv_dir, Config),
     
     %% Create a file with the file driver and read it back using
     %% open_port/2.
 
-    ?line MyFile1 = filename:join(PrivDir, "my_input_file"),
-    ?line FileData1 = "An input file",
-    ?line ok = file:write_file(MyFile1, FileData1),
-    case os:type() of
-	vxworks ->
-	    %% Can't open input file with vanilla driver on VxWorks
-	    ?line process_flag(trap_exit, true),
-	    ?line case catch open_port(MyFile1, [in]) of
-		      {'EXIT', {badarg, _}} ->
-			  ok
-		  end;
-	_ ->
-	    ?line case open_port(MyFile1, [in]) of
-		      InputPort when is_port(InputPort) ->
-			  ?line receive
-				    {InputPort, {data, FileData1}} ->
-					ok
-				end
-		  end
+    MyFile1 = filename:join(PrivDir, "my_input_file"),
+    FileData1 = "An input file",
+    ok = file:write_file(MyFile1, FileData1),
+    case open_port(MyFile1, [in]) of
+	InputPort when is_port(InputPort) ->
+	    receive
+		{InputPort, {data, FileData1}} ->
+		    ok
+	    end
     end,
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %% Tests that files can be written using open_port(Filename, [out]).
 open_output_file_port(suite) -> [];
 open_output_file_port(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(100)),
-    ?line PrivDir = ?config(priv_dir, Config),
+    Dog = test_server:timetrap(test_server:seconds(100)),
+    PrivDir = ?config(priv_dir, Config),
 
     %% Create a file with open_port/2 and read it back with
     %% the file driver.
 
-    ?line MyFile2 = filename:join(PrivDir, "my_output_file"),
-    ?line FileData2_0 = "A file created ",
-    ?line FileData2_1 = "with open_port/2.\n",
-    ?line FileData2 = FileData2_0 ++ FileData2_1,
-    ?line OutputPort = open_port(MyFile2, [out]),
-    ?line OutputPort ! {self(), {command, FileData2_0}},
-    ?line OutputPort ! {self(), {command, FileData2_1}},
-    ?line OutputPort ! {self(), close},
-    ?line {ok, Bin} = file:read_file(MyFile2),
-    ?line FileData2 = binary_to_list(Bin),
-
-    ?line test_server:timetrap_cancel(Dog),
+    MyFile2 = filename:join(PrivDir, "my_output_file"),
+    FileData2_0 = "A file created ",
+    FileData2_1 = "with open_port/2.\n",
+    FileData2 = FileData2_0 ++ FileData2_1,
+    OutputPort = open_port(MyFile2, [out]),
+    OutputPort ! {self(), {command, FileData2_0}},
+    OutputPort ! {self(), {command, FileData2_1}},
+    OutputPort ! {self(), close},
+    {ok, Bin} = file:read_file(MyFile2),
+    FileData2 = binary_to_list(Bin),
+
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %%
@@ -670,17 +627,17 @@ iter_max_ports(Config) when is_list(Config) ->
     
     
 iter_max_ports_test(Config) ->
-    ?line Dog = test_server:timetrap(test_server:minutes(20)),
-    ?line PortTest = port_test(Config),
-    ?line Command = lists:concat([PortTest, " -h0 -q"]),
-    ?line Iters = case os:type() of
+    Dog = test_server:timetrap(test_server:minutes(20)),
+    PortTest = port_test(Config),
+    Command = lists:concat([PortTest, " -h0 -q"]),
+    Iters = case os:type() of
 		      {win32,_} -> 4;
 		      _ -> 10
 		  end,
-    ?line L = do_iter_max_ports(Iters, Command),
+    L = do_iter_max_ports(Iters, Command),
     io:format("Result: ~p",[L]),
-    ?line all_equal(L),
-    ?line test_server:timetrap_cancel(Dog),
+    all_equal(L),
+    test_server:timetrap_cancel(Dog),
     {comment, "Max ports: " ++ integer_to_list(hd(L))}.
 
 do_iter_max_ports(N, Command) when N > 0 ->
@@ -695,9 +652,9 @@ all_equal([]) -> ok.
 
 max_ports(Command) ->
     test_server:sleep(500),
-    ?line Ps = open_ports({spawn, Command}, [eof]),
-    ?line N = length(Ps),
-    ?line close_ports(Ps),
+    Ps = open_ports({spawn, Command}, [eof]),
+    N = length(Ps),
+    close_ports(Ps),
     io:format("Got ~p ports\n",[N]),
     N.
 
@@ -727,105 +684,105 @@ open_ports(Name, Settings) ->
 		enomem ->
 		    [];
 		Other ->
-		    ?line test_server:fail({open_ports, Other})
+		    test_server:fail({open_ports, Other})
 	    end;
 	Other ->
-	    ?line test_server:fail({open_ports, Other})
+	    test_server:fail({open_ports, Other})
     end.
 
 %% Tests that exit(Port, Term) works (has been known to crash the emulator).
 
 t_exit(suite) -> [];
 t_exit(Config) when is_list(Config) ->
-    ?line process_flag(trap_exit, true),
-    ?line Pid = fun_spawn(fun suicide_port/1, [Config]),
-    ?line receive
-	      {'EXIT', Pid, die} ->
-		  ok;
-	      Other ->
-		  test_server:fail({bad_message, Other})
-	  end.
+    process_flag(trap_exit, true),
+    Pid = fun_spawn(fun suicide_port/1, [Config]),
+    receive
+	{'EXIT', Pid, die} ->
+	    ok;
+	Other ->
+	    test_server:fail({bad_message, Other})
+    end.
 
 suicide_port(Config) when is_list(Config) ->
-    ?line Port = port_expect(Config, [], 0, "", []),
-    ?line exit(Port, die),
-    ?line receive after infinity -> ok end.
+    Port = port_expect(Config, [], 0, "", []),
+    exit(Port, die),
+    receive after infinity -> ok end.
 
 
 tps_16_bytes(doc) -> "";
 tps_16_bytes(suite) -> [];
 tps_16_bytes(Config) when is_list(Config) ->
-    ?line tps(16, Config).
+    tps(16, Config).
 
 tps_1K(doc) -> "";
 tps_1K(suite) -> [];
 tps_1K(Config) when is_list(Config) ->
-    ?line tps(1024, Config).
+    tps(1024, Config).
 
 tps(Size, Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(300)),
-    ?line PortTest = port_test(Config),
-    ?line Packet = list_to_binary(random_packet(Size, "e")),
-    ?line Port = open_port({spawn, PortTest}, [binary, {packet, 2}]),
-    ?line Transactions = 10000,
-    ?line {Elapsed, ok} = test_server:timecall(?MODULE, tps,
+    Dog = test_server:timetrap(test_server:seconds(300)),
+    PortTest = port_test(Config),
+    Packet = list_to_binary(random_packet(Size, "e")),
+    Port = open_port({spawn, PortTest}, [binary, {packet, 2}]),
+    Transactions = 10000,
+    {Elapsed, ok} = test_server:timecall(?MODULE, tps,
 					       [Port, Packet, Transactions]),
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     {comment, integer_to_list(trunc(Transactions/Elapsed+0.5)) ++ " transactions/s"}.
 
 tps(_Port, _Packet, 0) -> ok;
 tps(Port, Packet, N) ->
-    ?line port_command(Port, Packet),
-    ?line receive
-	      {Port, {data, Packet}} ->
-		  ?line tps(Port, Packet, N-1);
-	      Other ->
-		  ?line test_server:fail({bad_message, Other})
-	  end.
+    port_command(Port, Packet),
+    receive
+	{Port, {data, Packet}} ->
+	    tps(Port, Packet, N-1);
+	Other ->
+	    test_server:fail({bad_message, Other})
+    end.
 
 %% Line I/O test
 line(Config) when is_list(Config) ->
-    ?line Siz = 110,
-    ?line Dog = test_server:timetrap(test_server:seconds(300)),
-    ?line Packet1 = random_packet(Siz),
-    ?line Packet2 = random_packet(Siz div 2),
+    Siz = 110,
+    Dog = test_server:timetrap(test_server:seconds(300)),
+    Packet1 = random_packet(Siz),
+    Packet2 = random_packet(Siz div 2),
     %% Test that packets are split into lines
-    ?line port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet2,
+    port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet2,
 					     io_lib:nl()]),
 			       [{eol, Packet1}, {eol, Packet2}]}],
 		      0, "", [{line,Siz}]),
     %% Test the same for binaries
-    ?line port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet2,
+    port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet2,
 					     io_lib:nl()]),
 			       [{eol, Packet1}, {eol, Packet2}]}],
 		      0, "", [{line,Siz},binary]),
     %% Test that too long lines get split
-    ?line port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet1,
+    port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet1,
 					     Packet2, io_lib:nl()]),
 			       [{eol, Packet1}, {noeol, Packet1},
 				{eol, Packet2}]}], 0, "", [{line,Siz}]),
     %% Test that last output from closing port program gets received.
-    ?line L1 = lists:append([Packet1, io_lib:nl(), Packet2]),
-    ?line S1 = lists:flatten(io_lib:format("-l~w", [length(L1)])),
+    L1 = lists:append([Packet1, io_lib:nl(), Packet2]),
+    S1 = lists:flatten(io_lib:format("-l~w", [length(L1)])),
     io:format("S1 = ~w, L1 = ~w~n", [S1,L1]),
-    ?line port_expect(Config,[{L1,
+    port_expect(Config,[{L1,
 			       [{eol, Packet1}, {noeol, Packet2}, eof]}], 0, 
 		      S1, [{line,Siz},eof]),
     %% Test that lonely <CR> Don't get treated as newlines
-    ?line port_expect(Config,[{lists:append([Packet1, [13], Packet2,
+    port_expect(Config,[{lists:append([Packet1, [13], Packet2,
 					     io_lib:nl()]),
 			       [{noeol, Packet1}, {eol, [13 |Packet2]}]}],
 		      0, "", [{line,Siz}]),
     %% Test that packets get built up to lines (delayed output from
     %% port program)
-    ?line port_expect(Config,[{Packet2,[]},
+    port_expect(Config,[{Packet2,[]},
 			      {lists:append([Packet2, io_lib:nl(),
 					     Packet1, io_lib:nl()]),
 			       [{eol, lists:append(Packet2, Packet2)},
 				{eol, Packet1}]}], 0, "-d", [{line,Siz}]),
     %% Test that we get badarg if trying both packet and line
-    ?line bad_argument(Config, [{packet, 5}, {line, 5}]),
-    ?line test_server:timetrap_cancel(Dog),
+    bad_argument(Config, [{packet, 5}, {line, 5}]),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 %%% Redirection of stderr test
@@ -834,15 +791,15 @@ stderr_to_stdout(suite) ->
 stderr_to_stdout(doc) ->
     "Test that redirection of standard error to standard output works.";
 stderr_to_stdout(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(60)),
+    Dog = test_server:timetrap(test_server:seconds(60)),
     %% See that it works
-    ?line Packet = random_packet(10),
-    ?line port_expect(Config,[{Packet,[Packet]}], 0, "-e -l10",
+    Packet = random_packet(10),
+    port_expect(Config,[{Packet,[Packet]}], 0, "-e -l10",
 		      [stderr_to_stdout]),
-    %% ?line stream_ping(Config, 10, "-e", [stderr_to_stdout]),
+    %% stream_ping(Config, 10, "-e", [stderr_to_stdout]),
     %% See that it doesn't always happen (will generate garbage on stderr)
-    ?line port_expect(Config,[{Packet,[eof]}], 0, "-e -l10", [line,eof]),
-    ?line test_server:timetrap_cancel(Dog),
+    port_expect(Config,[{Packet,[eof]}], 0, "-e -l10", [line,eof]),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 
@@ -862,47 +819,39 @@ env(suite) ->
 env(doc) ->
     ["Test that the 'env' option works"];
 env(Config)  when is_list(Config) ->
-    case os:type() of
-	vxworks ->
-	    {skipped,"Environments not implemented on VxWorks (could be...)"};
-	_ ->
-	    env2(Config)
-    end.
-
-env2(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(60)),
-    ?line Priv = ?config(priv_dir, Config),
-    ?line Temp = filename:join(Priv, "env_fun.bin"),
+    Dog = test_server:timetrap(test_server:seconds(60)),
+    Priv = ?config(priv_dir, Config),
+    Temp = filename:join(Priv, "env_fun.bin"),
 
     PluppVal = "dirty monkey",
-    ?line env_slave(Temp, [{"plupp",PluppVal}]),
+    env_slave(Temp, [{"plupp",PluppVal}]),
 
     Long = "LongAndBoringEnvName",
-    ?line os:putenv(Long, "nisse"),
-    
-    ?line env_slave(Temp, [{"plupp",PluppVal},
-			   {"DIR_PLUPP","###glurfrik"}],
-		    fun() ->
-			    PluppVal = os:getenv("plupp"),
-			    "###glurfrik" = os:getenv("DIR_PLUPP"),
-			    "nisse" = os:getenv(Long)
-		    end),
+    os:putenv(Long, "nisse"),
+
+    env_slave(Temp, [{"plupp",PluppVal},
+	    {"DIR_PLUPP","###glurfrik"}],
+	fun() ->
+		PluppVal = os:getenv("plupp"),
+		"###glurfrik" = os:getenv("DIR_PLUPP"),
+		"nisse" = os:getenv(Long)
+	end),
 
-    
-    ?line env_slave(Temp, [{"must_define_something","some_value"},
-			    {"certainly_not_existing",false},
-                           {"ends_with_equal", "value="},
-			   {Long,false},
-			   {"glurf","a glorfy string"}]),
+
+    env_slave(Temp, [{"must_define_something","some_value"},
+	    {"certainly_not_existing",false},
+	    {"ends_with_equal", "value="},
+	    {Long,false},
+	    {"glurf","a glorfy string"}]),
 
     %% A lot of non existing variables (mingled with existing)
     NotExistingList = [{lists:flatten(io_lib:format("V~p_not_existing",[X])),false} 
                         ||  X <- lists:seq(1,150)],
     ExistingList = [{lists:flatten(io_lib:format("V~p_existing",[X])),"a_value"} 
                         ||  X <- lists:seq(1,150)],
-    ?line env_slave(Temp, lists:sort(ExistingList ++ NotExistingList)),
+    env_slave(Temp, lists:sort(ExistingList ++ NotExistingList)),
 
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 env_slave(File, Env) ->
@@ -946,23 +895,15 @@ env_slave_main([File]) ->
 %% 'env' option
 %%   Test bad environments.
 bad_env(Config) when is_list(Config) ->
-    case os:type() of
-	vxworks ->
-	    {skipped,"Environments not implemented on VxWorks"};
-	_ ->
-	    bad_env_1()
-    end.
-
-bad_env_1() ->
-    ?line try_bad_env([abbb]),
-    ?line try_bad_env([{"key","value"}|{"another","value"}]),
-    ?line try_bad_env([{"key","value","value2"}]),
-    ?line try_bad_env([{"key",[a,b,c]}]),
-    ?line try_bad_env([{"key",value}]),
-    ?line try_bad_env({a,tuple}),
-    ?line try_bad_env(42),
-    ?line try_bad_env([a|b]),
-    ?line try_bad_env(self()),
+    try_bad_env([abbb]),
+    try_bad_env([{"key","value"}|{"another","value"}]),
+    try_bad_env([{"key","value","value2"}]),
+    try_bad_env([{"key",[a,b,c]}]),
+    try_bad_env([{"key",value}]),
+    try_bad_env({a,tuple}),
+    try_bad_env(42),
+    try_bad_env([a|b]),
+    try_bad_env(self()),
     ok.
 
 try_bad_env(Env) ->
@@ -979,36 +920,29 @@ cd(suite) ->
 cd(doc) ->
     ["Test that the 'cd' option works"];
 cd(Config)  when is_list(Config) ->
-    case os:type() of
-	vxworks ->
-	    {skipped,"Task specific directories does not exist on VxWorks"};
-	_ ->
-	    cd2(Config)
-    end.
-cd2(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(60)),
-
-    ?line Program = atom_to_list(lib:progname()),
-    ?line DataDir = ?config(data_dir, Config),
-    ?line TestDir = filename:join(DataDir, "dir"),
-    ?line Cmd = Program ++ " -pz " ++ DataDir ++
-	" -noshell -s port_test pwd -s erlang halt",
-    ?line _ = open_port({spawn, Cmd},
-			[{cd, TestDir},
-			 {line, 256}]),
-    ?line receive
-	      {_, {data, {eol, String}}} ->
-		  case filename_equal(String, TestDir) of
-		      true ->
-			  ok;
-		      false ->
-			  ?line test_server:fail({cd, String})
-		  end;
-	      Other2 ->
-		  ?line test_server:fail({env, Other2})
-	  end,
+    Dog = test_server:timetrap(test_server:seconds(60)),
 
-    ?line test_server:timetrap_cancel(Dog),
+    Program = atom_to_list(lib:progname()),
+    DataDir = ?config(data_dir, Config),
+    TestDir = filename:join(DataDir, "dir"),
+    Cmd = Program ++ " -pz " ++ DataDir ++
+        " -noshell -s port_test pwd -s erlang halt",
+    _ = open_port({spawn, Cmd},
+	[{cd, TestDir},
+	    {line, 256}]),
+    receive
+	{_, {data, {eol, String}}} ->
+	    case filename_equal(String, TestDir) of
+		true ->
+		    ok;
+		false ->
+		    test_server:fail({cd, String})
+	    end;
+	Other2 ->
+	    test_server:fail({env, Other2})
+    end,
+
+    test_server:timetrap_cancel(Dog),
     ok.
 
 filename_equal(A, B) ->
@@ -1059,8 +993,8 @@ otp_3906(Config)  when is_list(Config) ->
 -define(OTP_3906_MAX_CONC_OSP, 50).
 
 otp_3906(Config, OSName) ->
-    ?line DataDir = filename:dirname(proplists:get_value(data_dir,Config)),
-    ?line {ok, Variables} = file:consult(
+    DataDir = filename:dirname(proplists:get_value(data_dir,Config)),
+    {ok, Variables} = file:consult(
 			      filename:join([DataDir,"..","..",
 					     "test_server","variables"])),
     case lists:keysearch('CC', 1, Variables) of
@@ -1105,7 +1039,7 @@ otp_3906(Config, OSName) ->
 		succeded ->
 		    ok;
 		_ ->
-		    ?line test_server:fail(Result)
+		    test_server:fail(Result)
 	    end;
 	_ ->
 	    {skipped, "No C compiler found"}
@@ -1246,15 +1180,15 @@ otp_4389(doc) -> [];
 otp_4389(Config)  when is_list(Config) ->
     case os:type() of
 	{unix, _} ->
-	    ?line Dog = test_server:timetrap(test_server:seconds(240)),
-	    ?line TCR = self(),
+	    Dog = test_server:timetrap(test_server:seconds(240)),
+	    TCR = self(),
 	    case get_true_cmd() of
 		True when is_list(True) ->
-		    ?line lists:foreach(
+		    lists:foreach(
 			    fun (P) ->
-				    ?line receive
-					      {P, ok} ->  ?line ok;
-					      {P, Err} -> ?line ?t:fail(Err)
+				    receive
+					      {P, ok} ->  ok;
+					      {P, Err} -> ?t:fail(Err)
 					  end
 			    end,
 			    lists:map(
@@ -1283,14 +1217,14 @@ otp_4389(Config)  when is_list(Config) ->
 					end)
 			      end,
 			      lists:duplicate(1000,[]))),
-		    ?line test_server:timetrap_cancel(Dog),
+		    test_server:timetrap_cancel(Dog),
 		    {comment,
 		     "This test case doesn't always fail when the bug that "
 		     "it tests for is present (it is most likely to fail on"
 		     " a multi processor machine). If the test case fails it"
 		     " will fail by deadlocking the emulator."};
 		_ ->
-		    ?line {skipped, "\"true\" command not found"}
+		    {skipped, "\"true\" command not found"}
 	    end;
 	_ ->
 	    {skip,"Only run on Unix"}
@@ -1320,11 +1254,11 @@ exit_status(suite) ->
 exit_status(doc) ->
     ["Test that the 'exit_status' option works"];
 exit_status(Config)  when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(60)),
-    ?line port_expect(Config,[{"x",
+    Dog = test_server:timetrap(test_server:seconds(60)),
+    port_expect(Config,[{"x",
 			       [{exit_status, 5}]}],
 		      1, "", [exit_status]),
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 spawn_driver(suite) ->
@@ -1332,36 +1266,36 @@ spawn_driver(suite) ->
 spawn_driver(doc) ->
     ["Test spawning a driver specifically"];
 spawn_driver(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line Path = ?config(data_dir, Config),
-    ?line ok = load_driver(Path, "echo_drv"),
-    ?line Port = erlang:open_port({spawn_driver, "echo_drv"}, []),
-    ?line Port ! {self(), {command, "Hello port!"}},
-    ?line receive 
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    Path = ?config(data_dir, Config),
+    ok = load_driver(Path, "echo_drv"),
+    Port = erlang:open_port({spawn_driver, "echo_drv"}, []),
+    Port ! {self(), {command, "Hello port!"}},
+    receive 
 	      {Port, {data, "Hello port!"}} = Msg1 -> 
 		  io:format("~p~n", [Msg1]),
 		  ok; 
 	      Other ->
 		  test_server:fail({unexpected, Other})
 	  end,
-    ?line Port ! {self(), close},
-    ?line receive {Port, closed} -> ok end,
+    Port ! {self(), close},
+    receive {Port, closed} -> ok end,
 
-    ?line Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"}, 
+    Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"}, 
 				   []),
-    ?line receive 
+    receive 
 	      {Port2, {data, "Hello port?"}} = Msg2 -> 
 		  io:format("~p~n", [Msg2]),
 		  ok; 
 	      Other2 ->
 		  test_server:fail({unexpected2, Other2})
 	  end,
-    ?line Port2 ! {self(), close},
-    ?line receive {Port2, closed} -> ok end,
-    ?line {'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, "ls"}, [])),
-    ?line {'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, "cmd"}, [])),
-    ?line {'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, os:find_executable("erl")}, [])),
-    ?line test_server:timetrap_cancel(Dog),
+    Port2 ! {self(), close},
+    receive {Port2, closed} -> ok end,
+    {'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, "ls"}, [])),
+    {'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, "cmd"}, [])),
+    {'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, os:find_executable("erl")}, [])),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 spawn_executable(suite) ->
@@ -1369,48 +1303,48 @@ spawn_executable(suite) ->
 spawn_executable(doc) ->
     ["Test spawning an executable specifically"];
 spawn_executable(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line DataDir = ?config(data_dir, Config),
-    ?line EchoArgs1 = filename:join([DataDir,"echo_args"]),
-    ?line ExactFile1 = filename:nativename(os:find_executable(EchoArgs1)),
-    ?line [ExactFile1] = run_echo_args(DataDir,[]),
-    ?line ["echo_args"] = run_echo_args(DataDir,["echo_args"]),
-    ?line ["echo_arguments"] = run_echo_args(DataDir,["echo_arguments"]),
-    ?line [ExactFile1,"hello world","dlrow olleh"] = 
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    DataDir = ?config(data_dir, Config),
+    EchoArgs1 = filename:join([DataDir,"echo_args"]),
+    ExactFile1 = filename:nativename(os:find_executable(EchoArgs1)),
+    [ExactFile1] = run_echo_args(DataDir,[]),
+    ["echo_args"] = run_echo_args(DataDir,["echo_args"]),
+    ["echo_arguments"] = run_echo_args(DataDir,["echo_arguments"]),
+    [ExactFile1,"hello world","dlrow olleh"] = 
 	run_echo_args(DataDir,[ExactFile1,"hello world","dlrow olleh"]),
-    ?line [ExactFile1] = run_echo_args(DataDir,[default]),
-    ?line [ExactFile1,"hello world","dlrow olleh"] = 
+    [ExactFile1] = run_echo_args(DataDir,[default]),
+    [ExactFile1,"hello world","dlrow olleh"] = 
 	run_echo_args(DataDir,[switch_order,ExactFile1,"hello world",
 			       "dlrow olleh"]),
-    ?line [ExactFile1,"hello world","dlrow olleh"] = 
+    [ExactFile1,"hello world","dlrow olleh"] = 
 	run_echo_args(DataDir,[default,"hello world","dlrow olleh"]),
 
-    ?line [ExactFile1,"hello world","dlrow olleh"] = 
+    [ExactFile1,"hello world","dlrow olleh"] = 
 	run_echo_args_2("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\""),
 
-    ?line PrivDir = ?config(priv_dir, Config),
-    ?line SpaceDir =filename:join([PrivDir,"With Spaces"]),
-    ?line file:make_dir(SpaceDir),
-    ?line Executable = filename:basename(ExactFile1),
-    ?line file:copy(ExactFile1,filename:join([SpaceDir,Executable])),
-    ?line ExactFile2 = filename:nativename(filename:join([SpaceDir,Executable])),
-    ?line chmodplusx(ExactFile2),
+    PrivDir = ?config(priv_dir, Config),
+    SpaceDir =filename:join([PrivDir,"With Spaces"]),
+    file:make_dir(SpaceDir),
+    Executable = filename:basename(ExactFile1),
+    file:copy(ExactFile1,filename:join([SpaceDir,Executable])),
+    ExactFile2 = filename:nativename(filename:join([SpaceDir,Executable])),
+    chmodplusx(ExactFile2),
     io:format("|~s|~n",[ExactFile2]),
-    ?line [ExactFile2] = run_echo_args(SpaceDir,[]),
-    ?line ["echo_args"] = run_echo_args(SpaceDir,["echo_args"]),
-    ?line ["echo_arguments"] = run_echo_args(SpaceDir,["echo_arguments"]),
-    ?line [ExactFile2,"hello world","dlrow olleh"] = 
+    [ExactFile2] = run_echo_args(SpaceDir,[]),
+    ["echo_args"] = run_echo_args(SpaceDir,["echo_args"]),
+    ["echo_arguments"] = run_echo_args(SpaceDir,["echo_arguments"]),
+    [ExactFile2,"hello world","dlrow olleh"] = 
 	run_echo_args(SpaceDir,[ExactFile2,"hello world","dlrow olleh"]),
-    ?line [ExactFile2] = run_echo_args(SpaceDir,[default]),
-    ?line [ExactFile2,"hello world","dlrow olleh"] = 
+    [ExactFile2] = run_echo_args(SpaceDir,[default]),
+    [ExactFile2,"hello world","dlrow olleh"] = 
 	run_echo_args(SpaceDir,[switch_order,ExactFile2,"hello world",
 			       "dlrow olleh"]),
-    ?line [ExactFile2,"hello world","dlrow olleh"] = 
+    [ExactFile2,"hello world","dlrow olleh"] = 
 	run_echo_args(SpaceDir,[default,"hello world","dlrow olleh"]),
-    ?line [ExactFile2,"hello world","dlrow olleh"] = 
+    [ExactFile2,"hello world","dlrow olleh"] = 
 	run_echo_args_2("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\""),
 
-    ?line ExeExt = 
+    ExeExt = 
 	case string:to_lower(lists:last(string:tokens(ExactFile2,"."))) of
 	    "exe" ->
 		".exe";
@@ -1418,47 +1352,47 @@ spawn_executable(Config) when is_list(Config) ->
 		""
 	end,
     Executable2 = "spoky name"++ExeExt,
-    ?line file:copy(ExactFile1,filename:join([SpaceDir,Executable2])),
-    ?line ExactFile3 = filename:nativename(filename:join([SpaceDir,Executable2])),
-    ?line chmodplusx(ExactFile3),
-    ?line [ExactFile3] = run_echo_args(SpaceDir,Executable2,[]),
-    ?line ["echo_args"] = run_echo_args(SpaceDir,Executable2,["echo_args"]),
-    ?line ["echo_arguments"] = run_echo_args(SpaceDir,Executable2,["echo_arguments"]),
-    ?line [ExactFile3,"hello world","dlrow olleh"] = 
+    file:copy(ExactFile1,filename:join([SpaceDir,Executable2])),
+    ExactFile3 = filename:nativename(filename:join([SpaceDir,Executable2])),
+    chmodplusx(ExactFile3),
+    [ExactFile3] = run_echo_args(SpaceDir,Executable2,[]),
+    ["echo_args"] = run_echo_args(SpaceDir,Executable2,["echo_args"]),
+    ["echo_arguments"] = run_echo_args(SpaceDir,Executable2,["echo_arguments"]),
+    [ExactFile3,"hello world","dlrow olleh"] = 
 	run_echo_args(SpaceDir,Executable2,[ExactFile3,"hello world","dlrow olleh"]),
-    ?line [ExactFile3] = run_echo_args(SpaceDir,Executable2,[default]),
-    ?line [ExactFile3,"hello world","dlrow olleh"] = 
+    [ExactFile3] = run_echo_args(SpaceDir,Executable2,[default]),
+    [ExactFile3,"hello world","dlrow olleh"] = 
 	run_echo_args(SpaceDir,Executable2,
 		      [switch_order,ExactFile3,"hello world",
 		       "dlrow olleh"]),
-    ?line [ExactFile3,"hello world","dlrow olleh"] = 
+    [ExactFile3,"hello world","dlrow olleh"] = 
 	run_echo_args(SpaceDir,Executable2,
 		      [default,"hello world","dlrow olleh"]),
-    ?line [ExactFile3,"hello world","dlrow olleh"] = 
+    [ExactFile3,"hello world","dlrow olleh"] = 
 	run_echo_args_2("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\""),
-    ?line {'EXIT',{enoent,_}} = (catch run_echo_args(SpaceDir,"fnurflmonfi",
+    {'EXIT',{enoent,_}} = (catch run_echo_args(SpaceDir,"fnurflmonfi",
 						     [default,"hello world",
 						      "dlrow olleh"])),
     NonExec = "kronxfrt"++ExeExt,
-    ?line file:write_file(filename:join([SpaceDir,NonExec]),
+    file:write_file(filename:join([SpaceDir,NonExec]),
 			  <<"Not an executable">>),
-    ?line {'EXIT',{eacces,_}} = (catch run_echo_args(SpaceDir,NonExec,
+    {'EXIT',{eacces,_}} = (catch run_echo_args(SpaceDir,NonExec,
 						     [default,"hello world",
 						      "dlrow olleh"])),
-    ?line {'EXIT',{enoent,_}} = (catch open_port({spawn_executable,"cmd"},[])),
-    ?line {'EXIT',{enoent,_}} = (catch open_port({spawn_executable,"sh"},[])),
+    {'EXIT',{enoent,_}} = (catch open_port({spawn_executable,"cmd"},[])),
+    {'EXIT',{enoent,_}} = (catch open_port({spawn_executable,"sh"},[])),
     case os:type() of
 	{win32,_} ->
 	    test_bat_file(SpaceDir);
 	{unix,_} ->
 	    test_sh_file(SpaceDir)
     end,
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 unregister_name(Config) when is_list(Config) ->
-    ?line true = register(crash, open_port({spawn, "sleep 100"}, [])),
-    ?line true = unregister(crash).
+    true = register(crash, open_port({spawn, "sleep 100"}, [])),
+    true = unregister(crash).
 
 test_bat_file(Dir) ->
     FN = "tf.bat",
@@ -1478,16 +1412,16 @@ test_bat_file(Dir) ->
 	 <<"\r\n">>,
 	 <<":done\r\n">>,
 	 <<"\r\n">>],
-    ?line file:write_file(Full,list_to_binary(D)),
-    ?line EF = filename:basename(FN),
-    ?line [DN,"hello","world"] = 
+    file:write_file(Full,list_to_binary(D)),
+    EF = filename:basename(FN),
+    [DN,"hello","world"] = 
 	run_echo_args(Dir,FN,
 		      [default,"hello","world"]),
     %% The arg0 argumant should be ignored when running batch files
-    ?line [DN,"hello","world"] = 
+    [DN,"hello","world"] = 
 	run_echo_args(Dir,FN,
 		      ["knaskurt","hello","world"]),
-    ?line EF = filename:basename(DN),
+    EF = filename:basename(DN),
     ok.
 
 test_sh_file(Dir) ->
@@ -1501,20 +1435,20 @@ test_sh_file(Dir) ->
 	 <<"    shift\n">>,
 	 <<"    i=`expr $i + 1`\n">>,
 	 <<"done\n">>],
-    ?line file:write_file(Full,list_to_binary(D)),
-    ?line chmodplusx(Full),
-    ?line [Full,"hello","world"] = 
+    file:write_file(Full,list_to_binary(D)),
+    chmodplusx(Full),
+    [Full,"hello","world"] = 
 	run_echo_args(Dir,FN,
 		      [default,"hello","world"]),
-    ?line [Full,"hello","world of spaces"] = 
+    [Full,"hello","world of spaces"] = 
 	run_echo_args(Dir,FN,
 		      [default,"hello","world of spaces"]),
-    ?line file:write_file(filename:join([Dir,"testfile1"]),<<"testdata1">>),
-    ?line file:write_file(filename:join([Dir,"testfile2"]),<<"testdata2">>),
-    ?line Pattern = filename:join([Dir,"testfile*"]),
-    ?line L = filelib:wildcard(Pattern),
-    ?line 2 = length(L),
-    ?line [Full,"hello",Pattern] = 
+    file:write_file(filename:join([Dir,"testfile1"]),<<"testdata1">>),
+    file:write_file(filename:join([Dir,"testfile2"]),<<"testdata2">>),
+    Pattern = filename:join([Dir,"testfile*"]),
+    L = filelib:wildcard(Pattern),
+    2 = length(L),
+    [Full,"hello",Pattern] = 
 	run_echo_args(Dir,FN,
 		      [default,"hello",Pattern]),
      ok.
@@ -1574,25 +1508,25 @@ mix_up_ports(suite) ->
 mix_up_ports(doc) ->
     ["Test that the emulator does not mix up ports when the port table wraps"];
 mix_up_ports(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line Path = ?config(data_dir, Config),
-    ?line ok = load_driver(Path, "echo_drv"),
-    ?line Port = erlang:open_port({spawn, "echo_drv"}, []),
-    ?line Port ! {self(), {command, "Hello port!"}},
-    ?line receive 
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    Path = ?config(data_dir, Config),
+    ok = load_driver(Path, "echo_drv"),
+    Port = erlang:open_port({spawn, "echo_drv"}, []),
+    Port ! {self(), {command, "Hello port!"}},
+    receive 
 	      {Port, {data, "Hello port!"}} = Msg1 -> 
 		  io:format("~p~n", [Msg1]),
 		  ok; 
 	      Other ->
 		  test_server:fail({unexpected, Other})
 	  end,
-    ?line Port ! {self(), close},
-    ?line receive {Port, closed} -> ok end,
-    ?line loop(start, done,
+    Port ! {self(), close},
+    receive {Port, closed} -> ok end,
+    loop(start, done,
 	       fun(P) ->
-		       ?line Q = 
+		       Q = 
 			   (catch erlang:open_port({spawn, "echo_drv"}, [])),
-%%		       ?line io:format("~p ", [Q]),
+%%		       io:format("~p ", [Q]),
 		       if is_port(Q) ->
 			       Q;
 			  true ->
@@ -1600,14 +1534,14 @@ mix_up_ports(Config) when is_list(Config) ->
 			       done
 		       end
 	       end),
-    ?line Port ! {self(), {command, "Hello again port!"}},
-    ?line receive 
+    Port ! {self(), {command, "Hello again port!"}},
+    receive 
 	      Msg2 ->
 		  test_server:fail({unexpected, Msg2})
 	  after 1000 ->
 		  ok
 	  end,
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     ok.
 
 loop(Stop, Stop, Fun) when is_function(Fun) ->
@@ -1622,45 +1556,45 @@ otp_5112(doc) ->
     ["Test that link to connected process is taken away when port calls",
      "driver_exit() also when the port index has wrapped"];
 otp_5112(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line Path = ?config(data_dir, Config),
-    ?line ok = load_driver(Path, "exit_drv"),
-    ?line Port = otp_5112_get_wrapped_port(),
-    ?line ?t:format("Max ports: ~p~n",[max_ports()]),
-    ?line ?t:format("Port: ~p~n",[Port]),
-    ?line {links, Links1} = process_info(self(),links),
-    ?line ?t:format("Links1: ~p~n",[Links1]),
-    ?line true = lists:member(Port, Links1),
-    ?line Port ! {self(), {command, ""}},
-    ?line {links, Links2} = process_info(self(),links),
-    ?line ?t:format("Links2: ~p~n",[Links2]),
-    ?line false = lists:member(Port, Links2), %% This used to fail
-    ?line test_server:timetrap_cancel(Dog),
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    Path = ?config(data_dir, Config),
+    ok = load_driver(Path, "exit_drv"),
+    Port = otp_5112_get_wrapped_port(),
+    ?t:format("Max ports: ~p~n",[max_ports()]),
+    ?t:format("Port: ~p~n",[Port]),
+    {links, Links1} = process_info(self(),links),
+    ?t:format("Links1: ~p~n",[Links1]),
+    true = lists:member(Port, Links1),
+    Port ! {self(), {command, ""}},
+    {links, Links2} = process_info(self(),links),
+    ?t:format("Links2: ~p~n",[Links2]),
+    false = lists:member(Port, Links2), %% This used to fail
+    test_server:timetrap_cancel(Dog),
     ok.
 
 otp_5112_get_wrapped_port() ->
-    ?line P1 = erlang:open_port({spawn, "exit_drv"}, []),
-    ?line case port_ix(P1) < max_ports() of
+    P1 = erlang:open_port({spawn, "exit_drv"}, []),
+    case port_ix(P1) < max_ports() of
 	      true ->
-		  ?line ?t:format("Need to wrap port index (~p)~n", [P1]),
-		  ?line otp_5112_wrap_port_ix([P1]),
-		  ?line P2 = erlang:open_port({spawn, "exit_drv"}, []),
-		  ?line false = port_ix(P2) < max_ports(),
-		  ?line P2;
+		  ?t:format("Need to wrap port index (~p)~n", [P1]),
+		  otp_5112_wrap_port_ix([P1]),
+		  P2 = erlang:open_port({spawn, "exit_drv"}, []),
+		  false = port_ix(P2) < max_ports(),
+		  P2;
 	      false ->
-		  ?line ?t:format("Port index already wrapped (~p)~n", [P1]),
-		  ?line P1
+		  ?t:format("Port index already wrapped (~p)~n", [P1]),
+		  P1
 	  end.
 
 otp_5112_wrap_port_ix(Ports) ->
-    ?line case (catch erlang:open_port({spawn, "exit_drv"}, [])) of
+    case (catch erlang:open_port({spawn, "exit_drv"}, [])) of
 	      Port when is_port(Port) ->
-		  ?line otp_5112_wrap_port_ix([Port|Ports]);
+		  otp_5112_wrap_port_ix([Port|Ports]);
 	      _ ->
 		  %% Port table now full; empty port table
-		  ?line lists:foreach(fun (P) ->  P ! {self(), close} end,
+		  lists:foreach(fun (P) ->  P ! {self(), close} end,
 				      Ports),
-		  ?line ok
+		  ok
 	  end.
 
 
@@ -1669,106 +1603,105 @@ otp_5119(suite) ->
 otp_5119(doc) ->
     ["Test that port index is not unnecessarily wrapped"];
 otp_5119(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line Path = ?config(data_dir, Config),
-    ?line ok = load_driver(Path, "exit_drv"),
-    ?line PI1 = port_ix(otp_5119_fill_empty_port_tab([])),
-    ?line PI2 = port_ix(erlang:open_port({spawn, "exit_drv"}, [])),
-    ?line {PortIx1, PortIx2}
-	= case PI2 > PI1 of
-	      true ->
-		  ?line {PI1, PI2};
-	      false ->
-		  ?line {port_ix(otp_5119_fill_empty_port_tab([PI2])),
-			 port_ix(erlang:open_port({spawn, "exit_drv"}, []))}
-	  end,
-    ?line MaxPorts = max_ports(),
-    ?line ?t:format("PortIx1 = ~p ~p~n", [PI1, PortIx1]),
-    ?line ?t:format("PortIx2 = ~p ~p~n", [PI2, PortIx2]),
-    ?line ?t:format("MaxPorts = ~p~n", [MaxPorts]),
-    ?line true = PortIx2 > PortIx1,
-    ?line true = PortIx2 =< PortIx1 + MaxPorts,
-    ?line test_server:timetrap_cancel(Dog),
-    ?line ok.
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    Path = ?config(data_dir, Config),
+    ok = load_driver(Path, "exit_drv"),
+    PI1 = port_ix(otp_5119_fill_empty_port_tab([])),
+    PI2 = port_ix(erlang:open_port({spawn, "exit_drv"}, [])),
+    {PortIx1, PortIx2} = case PI2 > PI1 of
+	true ->
+	    {PI1, PI2};
+	false ->
+	    {port_ix(otp_5119_fill_empty_port_tab([PI2])),
+		port_ix(erlang:open_port({spawn, "exit_drv"}, []))}
+    end,
+    MaxPorts = max_ports(),
+    ?t:format("PortIx1 = ~p ~p~n", [PI1, PortIx1]),
+    ?t:format("PortIx2 = ~p ~p~n", [PI2, PortIx2]),
+    ?t:format("MaxPorts = ~p~n", [MaxPorts]),
+    true = PortIx2 > PortIx1,
+    true = PortIx2 =< PortIx1 + MaxPorts,
+    test_server:timetrap_cancel(Dog),
+    ok.
 
 otp_5119_fill_empty_port_tab(Ports) ->
-    ?line case (catch erlang:open_port({spawn, "exit_drv"}, [])) of
+    case (catch erlang:open_port({spawn, "exit_drv"}, [])) of
 	      Port when is_port(Port) ->
-		  ?line otp_5119_fill_empty_port_tab([Port|Ports]);
+		  otp_5119_fill_empty_port_tab([Port|Ports]);
 	      _ ->
 		  %% Port table now full; empty port table
-		  ?line lists:foreach(fun (P) ->  P ! {self(), close} end,
+		  lists:foreach(fun (P) ->  P ! {self(), close} end,
 				      Ports),
-		  ?line [LastPort|_] = Ports,
-		  ?line LastPort
+		  [LastPort|_] = Ports,
+		  LastPort
 	  end.
 
 -define(DEF_MAX_PORTS, 1024).
 
 max_ports_env() ->
-    ?line case os:getenv("ERL_MAX_PORTS") of
+    case os:getenv("ERL_MAX_PORTS") of
 	      EMP when is_list(EMP) ->
 		  case catch list_to_integer(EMP) of
-		      Int when is_integer(Int) -> ?line Int;
-		      _ -> ?line false
+		      Int when is_integer(Int) -> Int;
+		      _ -> false
 		  end;
-	      _ -> ?line false
+	      _ -> false
 	  end.
 
 max_ports() ->
-    ?line PreMaxPorts
+    PreMaxPorts
 	= case max_ports_env() of
-	      Env when is_integer(Env) -> ?line Env;
+	      Env when is_integer(Env) -> Env;
 	      _ ->
-		  ?line case os:type() of
+		  case os:type() of
 			    {unix, _} ->
-				?line UlimStr = string:strip(os:cmd("ulimit -n")
+				UlimStr = string:strip(os:cmd("ulimit -n")
 							     -- "\n"),
-				?line case catch list_to_integer(UlimStr) of
-					  Ulim when is_integer(Ulim) -> ?line Ulim;
-					  _ -> ?line ?DEF_MAX_PORTS
+				case catch list_to_integer(UlimStr) of
+					  Ulim when is_integer(Ulim) -> Ulim;
+					  _ -> ?DEF_MAX_PORTS
 				      end;
-			    _ -> ?line ?DEF_MAX_PORTS
+			    _ -> ?DEF_MAX_PORTS
 			end
 	  end,
-    ?line case PreMaxPorts > ?DEF_MAX_PORTS of
-	      true -> ?line PreMaxPorts;
-	      false -> ?line ?DEF_MAX_PORTS
+    case PreMaxPorts > ?DEF_MAX_PORTS of
+	      true -> PreMaxPorts;
+	      false -> ?DEF_MAX_PORTS
 	  end.
 
 port_ix(Port) when is_port(Port) ->
-    ?line ["#Port",_,PortIxStr] = string:tokens(erlang:port_to_list(Port),
+    ["#Port",_,PortIxStr] = string:tokens(erlang:port_to_list(Port),
 						"<.>"),
-    ?line list_to_integer(PortIxStr).
+    list_to_integer(PortIxStr).
 
 
 otp_6224(doc) -> ["Check that port command failure doesn't crash the emulator"];
 otp_6224(suite) -> [];
 otp_6224(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(10)),
-    ?line Path = ?config(data_dir, Config),
-    ?line ok = load_driver(Path, "failure_drv"),
-    ?line Go = make_ref(),
-    ?line Failer = spawn(fun () ->
+    Dog = test_server:timetrap(test_server:seconds(10)),
+    Path = ?config(data_dir, Config),
+    ok = load_driver(Path, "failure_drv"),
+    Go = make_ref(),
+    Failer = spawn(fun () ->
 				 receive Go -> ok end,
-				 ?line Port = open_port({spawn, "failure_drv"},
+				 Port = open_port({spawn, "failure_drv"},
 							[]),
 				 Port ! {self(), {command, "Fail, please!"}},
 				 otp_6224_loop()
 			 end),
-    ?line Mon = erlang:monitor(process, Failer),
-    ?line Failer ! Go,
-    ?line receive
+    Mon = erlang:monitor(process, Failer),
+    Failer ! Go,
+    receive
 	      {'DOWN', Mon, process, Failer, Reason} ->
-		  ?line case Reason of
-			    {driver_failed, _} -> ?line ok;
-			    driver_failed -> ?line ok;
-			    _ -> ?line ?t:fail({unexpected_exit_reason,
+		  case Reason of
+			    {driver_failed, _} -> ok;
+			    driver_failed -> ok;
+			    _ -> ?t:fail({unexpected_exit_reason,
 						Reason})
 			end
 	  end,
-    ?line test_server:timetrap_cancel(Dog),
-    ?line ok.
+    test_server:timetrap_cancel(Dog),
+    ok.
     
 otp_6224_loop() ->
     receive _ -> ok after 0 -> ok end,
@@ -1781,11 +1714,11 @@ otp_6224_loop() ->
 exit_status_multi_scheduling_block(doc) -> [];
 exit_status_multi_scheduling_block(suite) -> [];
 exit_status_multi_scheduling_block(Config) when is_list(Config) ->
-    ?line Repeat = 3,
-    ?line case ?t:os_type() of
+    Repeat = 3,
+    case ?t:os_type() of
 	      {unix, _} ->
-		  ?line Dog = ?t:timetrap(test_server:minutes(2*Repeat)),
-		  ?line SleepSecs = 6,
+		  Dog = ?t:timetrap(test_server:minutes(2*Repeat)),
+		  SleepSecs = 6,
 		  try
 		      lists:foreach(fun (_) ->
 					    exit_status_msb_test(Config,
@@ -1799,7 +1732,7 @@ exit_status_multi_scheduling_block(Config) when is_list(Config) ->
 		      ?t:timetrap_cancel(Dog),
 		      receive after SleepSecs+500 -> ok end
 		  end;
-	      _ -> ?line {skip, "Not implemented for this OS"}
+	      _ -> {skip, "Not implemented for this OS"}
 	  end.
 
 exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
@@ -1808,22 +1741,22 @@ exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
     %% and we want these port programs to terminate while multi-scheduling
     %% is blocked.
     %% 
-    ?line NoSchedsOnln = erlang:system_info(schedulers_online),
-    ?line Parent = self(),
-    ?line ?t:format("SleepSecs = ~p~n", [SleepSecs]),
-    ?line PortProg = "sleep " ++ integer_to_list(SleepSecs),
-    ?line Start = now(),
-    ?line NoProcs = case NoSchedsOnln of
+    NoSchedsOnln = erlang:system_info(schedulers_online),
+    Parent = self(),
+    ?t:format("SleepSecs = ~p~n", [SleepSecs]),
+    PortProg = "sleep " ++ integer_to_list(SleepSecs),
+    Start = now(),
+    NoProcs = case NoSchedsOnln of
 			NProcs when NProcs < ?EXIT_STATUS_MSB_MAX_PROCS ->
 			    NProcs;
 			_ ->
 			    ?EXIT_STATUS_MSB_MAX_PROCS
 		    end,
-    ?line NoPortsPerProc = case 20*NoProcs of
+    NoPortsPerProc = case 20*NoProcs of
 			       TNPorts when TNPorts < ?EXIT_STATUS_MSB_MAX_PORTS -> 20;
 			       _ -> ?EXIT_STATUS_MSB_MAX_PORTS div NoProcs
 			   end,
-    ?line ?t:format("NoProcs = ~p~nNoPortsPerProc = ~p~n",
+    ?t:format("NoProcs = ~p~nNoPortsPerProc = ~p~n",
 		    [NoProcs, NoPortsPerProc]),
     ProcFun
 	= fun () ->
@@ -1873,32 +1806,32 @@ exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
 		    PrtSIds),
 		  Parent ! {self(), done}
 	  end,
-    ?line Procs = lists:map(fun (N) ->
+    Procs = lists:map(fun (N) ->
 				    spawn_opt(ProcFun,
 					      [link,
 					       {scheduler,
 						(N rem NoSchedsOnln)+1}])
 			    end,
 			    lists:seq(1, NoProcs)),
-    ?line SIds = lists:map(fun (P) ->
+    SIds = lists:map(fun (P) ->
 				   receive {P, started, SIds} -> SIds end
 			   end,
 			   Procs),
-    ?line StartedTime = timer:now_diff(now(), Start)/1000000,
-    ?line ?t:format("StartedTime = ~p~n", [StartedTime]),
-    ?line true = StartedTime < SleepSecs,
-    ?line erlang:system_flag(multi_scheduling, block),
-    ?line lists:foreach(fun (P) -> receive {P, done} -> ok end end, Procs),
-    ?line DoneTime = timer:now_diff(now(), Start)/1000000,
-    ?line ?t:format("DoneTime = ~p~n", [DoneTime]),
-    ?line true = DoneTime > SleepSecs,
-    ?line ok = verify_multi_scheduling_blocked(),
-    ?line erlang:system_flag(multi_scheduling, unblock),
-    ?line case {length(lists:usort(lists:flatten(SIds))), NoSchedsOnln} of
+    StartedTime = timer:now_diff(now(), Start)/1000000,
+    ?t:format("StartedTime = ~p~n", [StartedTime]),
+    true = StartedTime < SleepSecs,
+    erlang:system_flag(multi_scheduling, block),
+    lists:foreach(fun (P) -> receive {P, done} -> ok end end, Procs),
+    DoneTime = timer:now_diff(now(), Start)/1000000,
+    ?t:format("DoneTime = ~p~n", [DoneTime]),
+    true = DoneTime > SleepSecs,
+    ok = verify_multi_scheduling_blocked(),
+    erlang:system_flag(multi_scheduling, unblock),
+    case {length(lists:usort(lists:flatten(SIds))), NoSchedsOnln} of
 	      {N, N} ->
-		  ?line ok;
+		  ok;
 	      {N, M} ->
-		  ?line ?t:fail("Failed to create ports on all"
+		  ?t:fail("Failed to create ports on all"
 				++ integer_to_list(M) ++ " available"
 				"schedulers. Only created ports on "
 				++ integer_to_list(N) ++ " schedulers.")
@@ -1921,18 +1854,18 @@ sid_proc(SIds) ->
     end.
 
 verify_multi_scheduling_blocked() ->
-    ?line Procs = lists:map(fun (_) ->
+    Procs = lists:map(fun (_) ->
 				    spawn_link(fun () -> sid_proc([]) end)
 			    end,
 			    lists:seq(1, 3*erlang:system_info(schedulers_online))),
-    ?line receive after 1000 -> ok end,
-    ?line SIds = lists:map(fun (P) ->
+    receive after 1000 -> ok end,
+    SIds = lists:map(fun (P) ->
 				   P ! {self(), want_sids},
 				   receive {P, sids, PSIds} -> PSIds end
 			   end,
 			   Procs),
-    ?line 1 = length(lists:usort(lists:flatten(SIds))),
-    ?line ok.
+    1 = length(lists:usort(lists:flatten(SIds))),
+    ok.
 		      
     
 %%% Pinging functions.
@@ -1993,30 +1926,30 @@ build_cmd_line(FixedCmdLine, [], Result) ->
 port_expect(Config, Actions, HSize, CmdLine, Options0) ->
 %    io:format("port_expect(~p, ~p, ~p, ~p)",
 %		[Actions, HSize, CmdLine, Options0]),
-    ?line PortTest = port_test(Config),
-    ?line Cmd = lists:concat([PortTest, " -h", HSize, " ", CmdLine]),
-    ?line PortType =
+    PortTest = port_test(Config),
+    Cmd = lists:concat([PortTest, " -h", HSize, " ", CmdLine]),
+    PortType =
 	case HSize of
 	    0 -> stream;
 	    _ -> {packet, HSize}
 	end,
-    ?line Options = [PortType|Options0],
-    ?line io:format("open_port({spawn, ~p}, ~p)", [Cmd, Options]),
-    ?line Port = open_port({spawn, Cmd}, Options),
-    ?line port_expect(Port, Actions, Options),
+    Options = [PortType|Options0],
+    io:format("open_port({spawn, ~p}, ~p)", [Cmd, Options]),
+    Port = open_port({spawn, Cmd}, Options),
+    port_expect(Port, Actions, Options),
     Port.
 
 port_expect(Port, [{Send, Expects}|Rest], Options) when is_list(Expects) ->
-    ?line port_send(Port, Send),
-    ?line IsBinaryPort = lists:member(binary, Options),
-    ?line Receiver =
+    port_send(Port, Send),
+    IsBinaryPort = lists:member(binary, Options),
+    Receiver =
 	case {lists:member(stream, Options), line_option(Options)} of
 	    {false, _} -> fun receive_all/2;
 	    {true,false}  -> fun stream_receive_all/2;
 	    {_, true} -> fun receive_all/2
 	end,
-    ?line Receiver(Port, maybe_to_binary(Expects, IsBinaryPort)),
-    ?line port_expect(Port, Rest, Options);
+    Receiver(Port, maybe_to_binary(Expects, IsBinaryPort)),
+    port_expect(Port, Rest, Options);
 port_expect(_, [], _) ->
     ok.
 
@@ -2068,7 +2001,7 @@ receive_all(Port, [Expect|Rest]) ->
 		_ ->
 %%%	            io:format("Unexpected message: ~s", [format(Other)]),
 		    io:format("Unexpected message: ~w", [Other]),
-		    ?line test_server:fail(unexpected_message)
+		    test_server:fail(unexpected_message)
 	    end
     end,
     receive_all(Port, Rest);
@@ -2157,15 +2090,8 @@ build_packet(Left, Result, NextChar0) ->
     build_packet(Left-1, [NextChar0|Result], NextChar).
 
 sizes() ->
-    case os:type() of
-	vxworks ->
-	    % don't stress VxWorks too much 
-	    [10, 13, 64, 127, 128, 255, 256, 1023, 1024,
-	     8191, 8192, 16383, 16384];
-	_ ->
-	    [10, 13, 64, 127, 128, 255, 256, 1023, 1024,
-	     32767, 32768, 65535, 65536]
-    end.
+    [10, 13, 64, 127, 128, 255, 256, 1023, 1024,
+	32767, 32768, 65535, 65536].
 
 sizes(Header_Size) ->
     sizes(Header_Size, sizes(), []).
@@ -2203,18 +2129,18 @@ fun_spawn(Fun, Args) ->
     spawn_link(erlang, apply, [Fun, Args]).
 
 port_test(Config) when is_list(Config) ->
-    ?line filename:join(?config(data_dir, Config), "port_test").
+    filename:join(?config(data_dir, Config), "port_test").
 
 
 ports(doc) -> "Test that erlang:ports/0 returns a consistent snapshot of ports";
 ports(suite) -> [];
 ports(Config) when is_list(Config) ->
-    ?line Path = ?config(data_dir, Config),
-    ?line ok = load_driver(Path, "exit_drv"),
+    Path = ?config(data_dir, Config),
+    ok = load_driver(Path, "exit_drv"),
 
     receive after 1000 -> ok end, % Wait for other ports to stabilize
 
-    ?line OtherPorts = erlang:ports(),
+    OtherPorts = erlang:ports(),
     io:format("Other ports: ~p\n",[OtherPorts]),
     MaxPorts = 1024 - length(OtherPorts),
 
@@ -2222,7 +2148,7 @@ ports(Config) when is_list(Config) ->
 
     ports_snapshots(100, TrafficPid, OtherPorts),
     TrafficPid ! {self(),die},
-    ?line receive {TrafficPid, dead} -> ok end,
+    receive {TrafficPid, dead} -> ok end,
     ok.
 
 ports_snapshots(0, _, _) ->
@@ -2230,12 +2156,12 @@ ports_snapshots(0, _, _) ->
 ports_snapshots(Iter, TrafficPid, OtherPorts) ->
 
     TrafficPid ! start,    
-    ?line receive after 1 -> ok end,
+    receive after 1 -> ok end,
 
     Snapshot = erlang:ports(),
 
     TrafficPid ! {self(), stop},
-    ?line receive {TrafficPid, EventList, TrafficPorts} -> ok end,
+    receive {TrafficPid, EventList, TrafficPorts} -> ok end,
     
     %%io:format("Snapshot=~p\n", [Snapshot]),
     ports_verify(Snapshot, OtherPorts ++ TrafficPorts, EventList),
@@ -2252,7 +2178,7 @@ ports_traffic_stopped(MaxPorts, {PortList, PortCnt}) ->
 	    %%io:format("Traffic started in ~p\n",[self()]),
 	    ports_traffic_started(MaxPorts, {PortList, PortCnt}, []);
 	{Pid,die} ->
-	    ?line lists:foreach(fun(Port)-> erlang:port_close(Port) end,
+	    lists:foreach(fun(Port)-> erlang:port_close(Port) end,
 				PortList),
 	    Pid ! {self(),dead}
     end.
@@ -2272,15 +2198,15 @@ ports_traffic_do(MaxPorts, {PortList, PortCnt}, EventList) ->
     N = uniform(MaxPorts),
     case N > PortCnt of
 	true -> % Open port	    
-	    ?line P = open_port({spawn, "exit_drv"}, []),
+	    P = open_port({spawn, "exit_drv"}, []),
 	    %%io:format("Created port ~p\n",[P]),
 	    ports_traffic_started(MaxPorts, {[P|PortList], PortCnt+1},
 				  [{open,P}|EventList]);
 	
 	false -> % Close port
-	    ?line P = lists:nth(N, PortList),
+	    P = lists:nth(N, PortList),
 	    %%io:format("Close port ~p\n",[P]),
-	    ?line true = erlang:port_close(P),
+	    true = erlang:port_close(P),
 	    ports_traffic_started(MaxPorts, {lists:delete(P,PortList), PortCnt-1},
 				  [{close,P}|EventList])
     end.
@@ -2301,7 +2227,7 @@ ports_verify(Ports, PortsAfter, EventList) ->
 		    ports_verify(Ports, [P | PortsAfter], Tail);		    
 
 		[] ->
-		    ?line test_server:fail("Inconsistent snapshot from erlang:ports()")
+		    test_server:fail("Inconsistent snapshot from erlang:ports()")
 	    end
     end.
 
@@ -2318,27 +2244,27 @@ close_deaf_port(doc) -> ["Send data to port program that does not read it, then
 			 "Primary targeting Windows to test threaded_handle_closer in sys.c"];
 close_deaf_port(suite) -> [];
 close_deaf_port(Config) when is_list(Config) ->
-    ?line Dog = test_server:timetrap(test_server:seconds(100)),
-    ?line DataDir = ?config(data_dir, Config),
-    ?line DeadPort = os:find_executable("dead_port", DataDir),
-    ?line Port = open_port({spawn,DeadPort++" 60"},[]),
-    ?line erlang:port_command(Port,"Hello, can you hear me!?!?"),
-    ?line port_close(Port),
+    Dog = test_server:timetrap(test_server:seconds(100)),
+    DataDir = ?config(data_dir, Config),
+    DeadPort = os:find_executable("dead_port", DataDir),
+    Port = open_port({spawn,DeadPort++" 60"},[]),
+    erlang:port_command(Port,"Hello, can you hear me!?!?"),
+    port_close(Port),
 
     Res = close_deaf_port_1(0, DeadPort),
     io:format("Waiting for OS procs to terminate...\n"),
     receive after 5*1000 -> ok end,
-    ?line test_server:timetrap_cancel(Dog),
+    test_server:timetrap_cancel(Dog),
     Res.
 
 close_deaf_port_1(1000, _) ->
     ok;
 close_deaf_port_1(N, Cmd) ->
     Timeout = integer_to_list(random:uniform(5*1000)),
-    ?line try open_port({spawn_executable,Cmd},[{args,[Timeout]}]) of
+    try open_port({spawn_executable,Cmd},[{args,[Timeout]}]) of
     	Port ->
-	    ?line erlang:port_command(Port,"Hello, can you hear me!?!?"),
-	    ?line port_close(Port),
+	    erlang:port_command(Port,"Hello, can you hear me!?!?"),
+	    port_close(Port),
 	    close_deaf_port_1(N+1, Cmd)
     catch
     	_:eagain ->
diff --git a/erts/emulator/test/port_SUITE_data/dead_port.c b/erts/emulator/test/port_SUITE_data/dead_port.c
index 68e96fbf14..4dd9ee4cc2 100644
--- a/erts/emulator/test/port_SUITE_data/dead_port.c
+++ b/erts/emulator/test/port_SUITE_data/dead_port.c
@@ -17,15 +17,6 @@
  * %CopyrightEnd%
  */
 
-#ifdef VXWORKS
-#include <vxWorks.h>
-#include <taskVarLib.h>
-#include <taskLib.h>
-#include <sysLib.h>
-#include <string.h>
-#include <ioLib.h>
-#endif
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -37,12 +28,7 @@
 #ifndef __WIN32__
 #include <unistd.h>
 
-#ifdef VXWORKS
-#include "reclaim.h"
-#include <sys/times.h>
-#else
 #include <sys/time.h>
-#endif
 
 #define O_BINARY 0
 #define _setmode(fd, mode)
@@ -53,13 +39,7 @@
 #include "winbase.h"
 #endif
 
-
-#ifdef VXWORKS
-#define MAIN(argc, argv) port_test(argc, argv)
-#else
 #define MAIN(argc, argv) main(argc, argv)
-#endif
-
 
 extern int errno;
 
@@ -86,9 +66,6 @@ char *argv[];
 static void
 delay(unsigned ms)
 {
-#ifdef VXWORKS
-  taskDelay((sysClkRateGet() * ms) / 1000);
-#else
 #ifdef __WIN32__
   Sleep(ms);
 #else
@@ -98,5 +75,4 @@ delay(unsigned ms)
 
   select(0, NULL, NULL, NULL, &t);
 #endif
-#endif
 }
diff --git a/erts/emulator/test/port_SUITE_data/port_test.c b/erts/emulator/test/port_SUITE_data/port_test.c
index 7b4e386d87..7abefab2e3 100644
--- a/erts/emulator/test/port_SUITE_data/port_test.c
+++ b/erts/emulator/test/port_SUITE_data/port_test.c
@@ -3,15 +3,6 @@
  * Purpose: A port program to be used for testing the open_port bif.
  */
 
-#ifdef VXWORKS
-#include <vxWorks.h>
-#include <taskVarLib.h>
-#include <taskLib.h>
-#include <sysLib.h>
-#include <string.h>
-#include <ioLib.h>
-#endif
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -23,12 +14,7 @@
 #ifndef __WIN32__
 #include <unistd.h>
 
-#ifdef VXWORKS
-#include "reclaim.h"
-#include <sys/times.h>
-#else
 #include <sys/time.h>
-#endif 
 
 #define O_BINARY 0
 #define _setmode(fd, mode)
@@ -40,22 +26,13 @@
 #endif
 
 
-#ifdef VXWORKS
-#define REDIR_STDOUT(fd) ioTaskStdSet(0, 1, fd);
-#else
 #define REDIR_STDOUT(fd) if (dup2(fd, 1) == -1) { \
     fprintf(stderr, "%s: failed to duplicate handle %d to 1: %d\n", \
     port_data->progname, fd, errno); \
     exit(1); \
 }
-#endif
 
-#ifdef VXWORKS
-#define MAIN(argc, argv) port_test(argc, argv)
-#else
 #define MAIN(argc, argv) main(argc, argv)
-#endif
-
 
 extern int errno;
 
@@ -101,7 +78,6 @@ static void dump(unsigned char* buf, int sz, int max);
 static void replace_stdout(char* filename);
 static void generate_reply(char* spec);
 
-#ifndef VXWORKS
 #ifndef HAVE_STRERROR
 extern int sys_nerr;
 #ifndef sys_errlist /* sys_errlist is sometimes defined to
@@ -125,7 +101,6 @@ int err;
     return msgstr;
 }
 #endif
-#endif
 
 
 MAIN(argc, argv)
@@ -133,12 +108,6 @@ int argc;
 char *argv[];
 {
   int ret;
-#ifdef VXWORKS
-  if(taskVarAdd(0, (int *)&port_data) != OK) {
-    fprintf(stderr, "Can't do taskVarAdd in port_test\n");
-    exit(1);
-  }
-#endif
   if((port_data = (PORT_TEST_DATA *) malloc(sizeof(PORT_TEST_DATA))) == NULL) {
     fprintf(stderr, "Couldn't malloc for port_data");
     exit(1);
@@ -511,9 +480,6 @@ dump(buf, sz, max)
 static void
 delay(unsigned ms)
 {
-#ifdef VXWORKS
-  taskDelay((sysClkRateGet() * ms) / 1000);
-#else
 #ifdef __WIN32__
   Sleep(ms);
 #else
@@ -523,7 +489,6 @@ delay(unsigned ms)
 
   select(0, NULL, NULL, NULL, &t);
 #endif
-#endif
 }
 
 /*
diff --git a/erts/emulator/test/port_SUITE_data/reclaim.h b/erts/emulator/test/port_SUITE_data/reclaim.h
deleted file mode 100644
index 1d57dc5b8a..0000000000
--- a/erts/emulator/test/port_SUITE_data/reclaim.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __RECLAIM_H__
-#define __RECLAIM_H__
-
-
-/* The Erlang release for VxWorks includes a simple mechanism for
-   "resource reclamation" at task exit - it allows replacement of the
-   functions that open/close "files" and malloc/free memory with versions
-   that keep track, to be able to "reclaim" file descriptors and memory
-   when a task exits (regardless of *how* it exits).
-
-   The interface to this mechanism is made available via this file,
-   with the following caveats:
-
-   - The interface may change (or perhaps even be removed, though that
-     isn't likely until VxWorks itself provides similar functionality)
-     in future releases - i.e. you must always use the version of this
-     file that comes with the Erlang release you are using.
-
-   - Disaster is guaranteed if you use the mechanism incorrectly (see
-     below for the correct way), e.g. allocate memory with the "tracking"
-     version of malloc() and free it with the "standard" version of free().
-
-   - The mechanism (of course) incurs some performance penalty - thus
-     for a simple program you may be better off with careful programming,
-     making sure that you do whatever close()/free()/etc calls that are
-     appropriate at all exit points (though if you need to guard against
-     taskDelete() etc, things get messy...).
-
-   To use the mechanism, simply program your application normally, i.e.
-   use open()/close()/malloc()/free() etc as usual, but #include this
-   file before any usage of the relevant functions. NOTE: To avoid the
-   "disaster" mentioned above, you *must* #include it in *all* (or none)
-   of the files that manipulate a particular file descriptor, allocated
-   memory area, etc. Finally, note that you can obviously not load your
-   application before the Erlang system when using this interface.
-*/
-
-/* Sorry, no ANSI prototypes yet... */
-extern int save_open(),save_creat(),save_socket(),save_accept(),save_close();
-#define open	save_open
-#define creat	save_creat
-#define socket	save_socket
-#define accept	save_accept
-#define close	save_close
-extern FILE *save_fopen(), *save_fdopen(), *save_freopen();
-extern int save_fclose();
-#define fopen	save_fopen
-#define fdopen	save_fdopen
-#define freopen	save_freopen
-#define fclose	save_fclose
-/* XXX Should do opendir/closedir too... */
-extern char *save_malloc(), *save_calloc(), *save_realloc();
-extern void save_free(), save_cfree();
-#define malloc	save_malloc
-#define calloc	save_calloc
-#define realloc	save_realloc
-#define free	save_free
-#define cfree	save_cfree
-
-#endif
diff --git a/erts/emulator/test/port_bif_SUITE_data/port_test.c b/erts/emulator/test/port_bif_SUITE_data/port_test.c
index c6b128df66..28324a56a6 100644
--- a/erts/emulator/test/port_bif_SUITE_data/port_test.c
+++ b/erts/emulator/test/port_bif_SUITE_data/port_test.c
@@ -3,15 +3,6 @@
  * Purpose: A port program to be used for testing the open_port bif.
  */
 
-#ifdef VXWORKS
-#include <vxWorks.h>
-#include <taskVarLib.h>
-#include <taskLib.h>
-#include <sysLib.h>
-#include <string.h>
-#include <ioLib.h>
-#endif
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -23,12 +14,7 @@
 #ifndef __WIN32__
 #include <unistd.h>
 
-#ifdef VXWORKS
-#include "reclaim.h"
-#include <sys/times.h>
-#else
 #include <sys/time.h>
-#endif 
 
 #define O_BINARY 0
 #define _setmode(fd, mode)
@@ -40,22 +26,13 @@
 #endif
 
 
-#ifdef VXWORKS
-#define REDIR_STDOUT(fd) ioTaskStdSet(0, 1, fd);
-#else
 #define REDIR_STDOUT(fd) if (dup2(fd, 1) == -1) { \
     fprintf(stderr, "%s: failed to duplicate handle %d to 1: %d\n", \
     port_data->progname, fd, errno); \
     exit(1); \
 }
-#endif
 
-#ifdef VXWORKS
-#define MAIN(argc, argv) port_test(argc, argv)
-#else
 #define MAIN(argc, argv) main(argc, argv)
-#endif
-
 
 extern int errno;
 
@@ -101,7 +78,6 @@ static void dump(unsigned char* buf, int sz, int max);
 static void replace_stdout(char* filename);
 static void generate_reply(char* spec);
 
-#ifndef VXWORKS
 #ifndef HAVE_STRERROR
 extern int sys_nerr;
 #ifndef sys_errlist /* sys_errlist is sometimes defined to
@@ -125,20 +101,13 @@ int err;
     return msgstr;
 }
 #endif
-#endif
-
 
 MAIN(argc, argv)
 int argc;
 char *argv[];
 {
   int ret;
-#ifdef VXWORKS
-  if(taskVarAdd(0, (int *)&port_data) != OK) {
-    fprintf(stderr, "Can't do taskVarAdd in port_test\n");
-    exit(1);
-  }
-#endif
+
   if((port_data = (PORT_TEST_DATA *) malloc(sizeof(PORT_TEST_DATA))) == NULL) {
     fprintf(stderr, "Couldn't malloc for port_data");
     exit(1);
@@ -508,9 +477,6 @@ dump(buf, sz, max)
 static void
 delay(unsigned ms)
 {
-#ifdef VXWORKS
-  taskDelay((sysClkRateGet() * ms) / 1000);
-#else
 #ifdef __WIN32__
   Sleep(ms);
 #else
@@ -520,7 +486,6 @@ delay(unsigned ms)
 
   select(0, NULL, NULL, NULL, &t);
 #endif
-#endif
 }
 
 /*
diff --git a/erts/emulator/test/port_bif_SUITE_data/reclaim.h b/erts/emulator/test/port_bif_SUITE_data/reclaim.h
deleted file mode 100644
index 1d57dc5b8a..0000000000
--- a/erts/emulator/test/port_bif_SUITE_data/reclaim.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __RECLAIM_H__
-#define __RECLAIM_H__
-
-
-/* The Erlang release for VxWorks includes a simple mechanism for
-   "resource reclamation" at task exit - it allows replacement of the
-   functions that open/close "files" and malloc/free memory with versions
-   that keep track, to be able to "reclaim" file descriptors and memory
-   when a task exits (regardless of *how* it exits).
-
-   The interface to this mechanism is made available via this file,
-   with the following caveats:
-
-   - The interface may change (or perhaps even be removed, though that
-     isn't likely until VxWorks itself provides similar functionality)
-     in future releases - i.e. you must always use the version of this
-     file that comes with the Erlang release you are using.
-
-   - Disaster is guaranteed if you use the mechanism incorrectly (see
-     below for the correct way), e.g. allocate memory with the "tracking"
-     version of malloc() and free it with the "standard" version of free().
-
-   - The mechanism (of course) incurs some performance penalty - thus
-     for a simple program you may be better off with careful programming,
-     making sure that you do whatever close()/free()/etc calls that are
-     appropriate at all exit points (though if you need to guard against
-     taskDelete() etc, things get messy...).
-
-   To use the mechanism, simply program your application normally, i.e.
-   use open()/close()/malloc()/free() etc as usual, but #include this
-   file before any usage of the relevant functions. NOTE: To avoid the
-   "disaster" mentioned above, you *must* #include it in *all* (or none)
-   of the files that manipulate a particular file descriptor, allocated
-   memory area, etc. Finally, note that you can obviously not load your
-   application before the Erlang system when using this interface.
-*/
-
-/* Sorry, no ANSI prototypes yet... */
-extern int save_open(),save_creat(),save_socket(),save_accept(),save_close();
-#define open	save_open
-#define creat	save_creat
-#define socket	save_socket
-#define accept	save_accept
-#define close	save_close
-extern FILE *save_fopen(), *save_fdopen(), *save_freopen();
-extern int save_fclose();
-#define fopen	save_fopen
-#define fdopen	save_fdopen
-#define freopen	save_freopen
-#define fclose	save_fclose
-/* XXX Should do opendir/closedir too... */
-extern char *save_malloc(), *save_calloc(), *save_realloc();
-extern void save_free(), save_cfree();
-#define malloc	save_malloc
-#define calloc	save_calloc
-#define realloc	save_realloc
-#define free	save_free
-#define cfree	save_cfree
-
-#endif
diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl
index fdc55a4cc5..6509871a7d 100644
--- a/erts/emulator/test/process_SUITE.erl
+++ b/erts/emulator/test/process_SUITE.erl
@@ -280,15 +280,7 @@ kb_128() ->
      big_binary()}.
 
 eight_kb() ->
-    %%% This is really much more than eight kb, so vxworks platforms
-    %%% gets away with 1/8 of the other platforms (due to limited
-    %%% memory resources). 
-    B64 = case os:type() of
-	      vxworks ->
-		  ?line lists:seq(1, 8);
-	      _ ->
-		  ?line lists:seq(1, 64)
-	  end,
+    B64 = lists:seq(1, 64),
     ?line B512 = {<<1>>,B64,<<2,3>>,B64,make_unaligned_sub_binary(<<4,5,6,7,8,9>>),
 		  B64,make_sub_binary([1,2,3,4,5,6]),
 		  B64,make_sub_binary(lists:seq(1, ?heap_binary_size+1)),
diff --git a/erts/emulator/test/timer_bif_SUITE.erl b/erts/emulator/test/timer_bif_SUITE.erl
index 7ff7449ff5..c9533d0748 100644
--- a/erts/emulator/test/timer_bif_SUITE.erl
+++ b/erts/emulator/test/timer_bif_SUITE.erl
@@ -71,38 +71,23 @@ end_per_group(_GroupName, Config) ->
 
 start_timer_1(doc) -> ["Basic start_timer/3 functionality"];
 start_timer_1(Config) when is_list(Config) ->
-    ?line Ref1 = erlang:start_timer(1000, self(), plopp),
-    ?line ok = get(1100, {timeout, Ref1, plopp}),
-
-    ?line false = erlang:read_timer(Ref1),
-    ?line false = erlang:cancel_timer(Ref1),
-    ?line false = erlang:read_timer(Ref1),
-
-    ?line Ref2 = erlang:start_timer(1000, self(), plapp),
-    ?line Left2 = erlang:cancel_timer(Ref2),
-    UpperLimit = case os:type() of
-	vxworks ->
-	    %% The ticks of vxworks have a far lesser granularity
-	    %% than what is expected in this testcase, in
-	    %% fact the Left2 variable can get a little more than 1000...
-	    1100;
-	_ ->
-	    1000
-    end,
-    ?line RetVal = case os:type() of
-	vxworks ->
-		{comment, "VxWorks behaves slightly unexpected, should be fixed,"};
-	_ ->
-		ok
-    end,
-    ?line true = (Left2 > 900) and (Left2 =< UpperLimit),
-    ?line empty = get_msg(),
-    ?line false = erlang:cancel_timer(Ref2),
-
-    ?line Ref3 = erlang:start_timer(1000, self(), plopp),
-    ?line no_message = get(900, {timeout, Ref3, plopp}),
-
-    RetVal.
+    Ref1 = erlang:start_timer(1000, self(), plopp),
+    ok   = get(1100, {timeout, Ref1, plopp}),
+
+    false = erlang:read_timer(Ref1),
+    false = erlang:cancel_timer(Ref1),
+    false = erlang:read_timer(Ref1),
+
+    Ref2  = erlang:start_timer(1000, self(), plapp),
+    Left2 = erlang:cancel_timer(Ref2),
+    UpperLimit = 1000,
+    true = (Left2 > 900) and (Left2 =< UpperLimit),
+    empty = get_msg(),
+    false = erlang:cancel_timer(Ref2),
+
+    Ref3 = erlang:start_timer(1000, self(), plopp),
+    no_message = get(900, {timeout, Ref3, plopp}),
+    ok.
 
 send_after_1(doc) -> ["Basic send_after/3 functionality"];
 send_after_1(Config) when is_list(Config) ->
@@ -153,19 +138,11 @@ send_after_2(Config) when is_list(Config) ->
 
 send_after_3(doc) -> ["send_after/3: messages in the right order, worse than send_after_2"];
 send_after_3(Config) when is_list(Config) ->
-    case os:type() of
-	vxworks ->
-	    {skipped, "VxWorks timer granularity and order is not working good, this is subject to change!"};
-	_ ->
-	    do_send_after_3()
-    end.
-
-do_send_after_3() ->
-    ?line _ = erlang:send_after(100, self(), b1),
-    ?line _ = erlang:send_after(101, self(), b2),
-    ?line _ = erlang:send_after(102, self(), b3),
-    ?line _ = erlang:send_after(103, self(), last),
-    ?line [b1, b2, b3, last] = collect(last),
+    _ = erlang:send_after(100, self(), b1),
+    _ = erlang:send_after(101, self(), b2),
+    _ = erlang:send_after(102, self(), b3),
+    _ = erlang:send_after(103, self(), last),
+    [b1, b2, b3, last] = collect(last),
 
 % This behaviour is not guaranteed:
 %    ?line _ = erlang:send_after(100, self(), c1),
diff --git a/erts/emulator/test/trace_local_SUITE.erl b/erts/emulator/test/trace_local_SUITE.erl
index b238d5c630..54f8cc3c30 100644
--- a/erts/emulator/test/trace_local_SUITE.erl
+++ b/erts/emulator/test/trace_local_SUITE.erl
@@ -714,16 +714,10 @@ exception_test(Opts) ->
     ?line ok.
 
 exceptions() ->
-    ?line Ref = make_ref(),
-    ?line N = case os:type() of
-		  vxworks ->
-		      ?line 2000; % Limited memory on themachines, not actually
-		                  % VxWorks' fault /PaN
-		  _ ->
-		      ?line 200000
-	      end,
-    ?line LiL = seq(1, N-1, N),	% Long Improper List
-    ?line LL = seq(1, N, []),  	% Long List
+    Ref = make_ref(),
+    N   = 200000,
+    LiL = seq(1, N-1, N),	% Long Improper List
+    LL  = seq(1, N, []),  	% Long List
     [{{erlang,exit},  [done]},
      {{erlang,error}, [1.0]},
      {{erlang,error}, [Ref,[]]},
diff --git a/erts/emulator/test/trace_port_SUITE.erl b/erts/emulator/test/trace_port_SUITE.erl
index f81cab3114..cc2eadafbc 100644
--- a/erts/emulator/test/trace_port_SUITE.erl
+++ b/erts/emulator/test/trace_port_SUITE.erl
@@ -472,14 +472,9 @@ default_tracer(Config) when is_list(Config) ->
     ?line M = N,
     ok.
 
-
 %%% Help functions.
 
-huge_data() ->
-    case os:type() of
-	vxworks -> huge_data(4711);
-	_ -> huge_data(16384)
-    end.
+huge_data() -> huge_data(16384).
 huge_data(0) -> [];
 huge_data(N) when N rem 2 == 0 ->
     P = huge_data(N div 2),
-- 
cgit v1.2.3


From 4cfa7bf2cb71547a267bb256b186a9432c278002 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Tue, 17 Jul 2012 12:19:40 +0200
Subject: erts: Remove VxWorks from allocators

---
 erts/emulator/beam/erl_alloc.c     |  6 +-----
 erts/emulator/beam/erl_alloc.types | 24 ------------------------
 2 files changed, 1 insertion(+), 29 deletions(-)

(limited to 'erts/emulator')

diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 918a800555..ba73ca6da7 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -2300,11 +2300,7 @@ erts_allocated_areas(int *print_to_p, void *print_to_arg, void *proc)
     values[i].name = "static";
     values[i].ui[0] = 
 	erts_max_ports*sizeof(Port)		/* Port table */
-	+ erts_timer_wheel_memory_size()	/* Timer wheel */
-#ifdef SYS_TMP_BUF_SIZE
-	+ SYS_TMP_BUF_SIZE		/* tmp_buf in sys on vxworks & ose */
-#endif
-	;
+	+ erts_timer_wheel_memory_size();	/* Timer wheel */
     i++;
 
     erts_atom_get_text_space_sizes(&reserved_atom_space, &atom_space);
diff --git a/erts/emulator/beam/erl_alloc.types b/erts/emulator/beam/erl_alloc.types
index 134de6dfa6..7b27b3dda9 100644
--- a/erts/emulator/beam/erl_alloc.types
+++ b/erts/emulator/beam/erl_alloc.types
@@ -420,28 +420,4 @@ type	CON_VPRINTF_BUF	TEMPORARY	SYSTEM		con_vprintf_buf
 
 +endif
 
-+if vxworks
-
-type	SYS_TMP_BUF	LONG_LIVED	SYSTEM		sys_tmp_buf
-type	PEND_DATA	SYSTEM		SYSTEM		pending_data
-type	FD_TAB		LONG_LIVED	SYSTEM		fd_tab
-type	FD_ENTRY_BUF	SYSTEM		SYSTEM		fd_entry_buf
-
-+endif
-
-+if ose
-
-type	SYS_TMP_BUF	LONG_LIVED	SYSTEM		sys_tmp_buf
-type	PUTENV_STR	SYSTEM		SYSTEM		putenv_string
-type	GETENV_STR	SYSTEM		SYSTEM		getenv_string
-type	GETENV_STATE	SYSTEM		SYSTEM		getenv_state
-type	SIG_ENTRY	SYSTEM		SYSTEM		sig_entry
-type	DRIVER_DATA	SYSTEM		SYSTEM		driver_data
-type	PGM_TAB		SYSTEM		SYSTEM		pgm_tab
-type	PGM_ENTRY	SYSTEM		SYSTEM		pgm_entry
-type	PRT_TAB		SYSTEM		SYSTEM		prt_tab
-type	PRT_ENTRY	SYSTEM		SYSTEM		prt_entry
-
-+endif
-
 # ----------------------------------------------------------------------------
-- 
cgit v1.2.3


From f7ad9cbed032a14a222f7709d4f63c839c780b7b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn-Egil=20Dahlberg?= <egil@erlang.org>
Date: Tue, 17 Jul 2012 14:40:20 +0200
Subject: erts: Remove VxWorks from beam makefile

---
 erts/emulator/Makefile.in | 49 -----------------------------------------------
 1 file changed, 49 deletions(-)

(limited to 'erts/emulator')

diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index e20e38d61b..7e966c81bb 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -332,15 +332,11 @@ LIBS += $(THR_LIBS)
 
 ifneq ($(findstring erts_internal_r, $(THR_LIBS)),erts_internal_r)
 
-ifeq ($(findstring vxworks,$(TARGET)),vxworks)
-ERTS_INTERNAL_LIB=erts_internal
-else
 ifneq ($(strip $(THR_LIB_NAME)),)
 ERTS_INTERNAL_LIB=erts_internal_r
 else
 ERTS_INTERNAL_LIB=erts_internal
 endif
-endif
 
 LIBS += -l$(ERTS_INTERNAL_LIB)$(TYPEMARKER)
 
@@ -463,8 +459,6 @@ _create_dirs := $(shell mkdir -p $(CREATE_DIRS))
 GENERATE =
 HIPE_ASM =
 
-ifeq ($(findstring vxworks,$(TARGET)),vxworks)
-else
 ifdef HIPE_ENABLED
 HIPE_ASM +=	$(TTF_DIR)/hipe_x86_asm.h \
 		$(TTF_DIR)/hipe_amd64_asm.h \
@@ -476,7 +470,6 @@ GENERATE +=	$(HIPE_ASM) \
 		$(TTF_DIR)/hipe_literals.h \
 		$(BINDIR)/hipe_mkliterals$(TF_MARKER)
 endif
-endif
 
 ifdef DTRACE_ENABLED
 # global.h causes problems by including dtrace-wrapper.h which includes
@@ -616,11 +609,6 @@ ifdef PERFCTR_PATH
 INCLUDES += -I$(PERFCTR_PATH)/usr.lib -I$(PERFCTR_PATH)/linux/include
 endif
 
-# Need to include etc dir on VxWorks
-ifeq ($(findstring vxworks,$(TARGET)),vxworks)
-INCLUDES += -I$(ERL_TOP)/erts/etc/vxworks
-endif
-
 ifeq ($(TARGET),win32)
 $(OBJDIR)/dll_sys.o: sys/$(ERLANG_OSTYPE)/sys.c
 	$(CC) $(CFLAGS) -DERL_RUN_SHARED_LIB=1 $(INCLUDES) -c $< -o $@
@@ -663,12 +651,6 @@ $(OBJDIR)/%.o: drivers/common/%.c
 $(OBJDIR)/%.o: drivers/$(ERLANG_OSTYPE)/%.c
 	$(CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -Idrivers/$(ERLANG_OSTYPE) -I../etc/$(ERLANG_OSTYPE) -c $< -o $@
 
-# VxWorks uses unix drivers too...
-ifeq ($(findstring vxworks,$(TARGET)),vxworks)
-$(OBJDIR)/%.o: drivers/unix/%.c
-	$(CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -c $< -o $@
-endif
-
 # ----------------------------------------------------------------------
 # Specials
 #
@@ -781,12 +763,8 @@ OS_OBJS = \
 	$(OBJDIR)/gzio.o \
 	$(OBJDIR)/elib_memmove.o
 
-ifeq ($(findstring vxworks,$(TARGET)),vxworks)
-	OS_OBJS += $(OBJDIR)/int64.o 
-else
 	OS_OBJS += $(OBJDIR)/sys_float.o \
                    $(OBJDIR)/sys_time.o
-endif
 DRV_OBJS = \
 	$(OBJDIR)/efile_drv.o \
 	$(OBJDIR)/inet_drv.o \
@@ -794,9 +772,7 @@ DRV_OBJS = \
 	$(OBJDIR)/ram_file_drv.o
 endif
 
-ifneq ($(findstring vxworks,$(TARGET)),vxworks)
 	DRV_OBJS += $(OBJDIR)/ttsl_drv.o
-endif
 
 ifeq ($(ERTS_ENABLE_KERNEL_POLL),yes)
 OS_OBJS += 	$(OBJDIR)/erl_poll.kp.o \
@@ -934,31 +910,6 @@ $(OBJDIR)/hipe_arm.o:           hipe/hipe_arm.c
 # end of HiPE section
 ########################################
 
-ifeq ($(findstring vxworks,$(TARGET)),vxworks)
-########################################
-# Extract what we need from libgcc.a
-########################################
-GCCLIBFLAGS=@GCCLIBFLAGS@
-STRIP=@STRIP@
-SYMPREFIX=@SYMPREFIX@
-
-NEEDFUNCTIONS=__divdi3 __moddi3 __udivdi3
-KEEPSYMS=$(NEEDFUNCTIONS:%=-K $(SYMPREFIX)%)
-
-$(OBJDIR)/int64.o: $(TARGET)/int64.c
-	$(CC) -o $(OBJDIR)/int64tmp.o -c $(TARGET)/int64.c
-	$(LD) -o $(OBJDIR)/int64.o $(OBJDIR)/int64tmp.o $(LDFLAGS) $(GCCLIBFLAGS)
-	$(STRIP) $(KEEPSYMS) $(OBJDIR)/int64.o
-
-$(TARGET)/int64.c:
-	echo 'void dummy(void); void dummy(void) {' > $(TARGET)/int64.c
-	for x in $(NEEDFUNCTIONS); do echo 'extern void '$$x'();' \
-		>> $(TARGET)/int64.c; done 
-	for x in $(NEEDFUNCTIONS); do echo $$x'();' >> $(TARGET)/int64.c; done
-	echo '}'  >> $(TARGET)/int64.c 
-
-endif
-
 # ----------------------------------------------------------------------
 # The emulator itself
 
-- 
cgit v1.2.3