[PATCH] VxWorks Support

"Kuhl, Brian" <[email protected]> Wed, 28 May 2025 21:47:10 +0000
Newsgroups org.kernel.vger.dash
Message-ID <DM6PR11MB47535C0C8F14FAF266B04D309967A@DM6PR11MB4753.namprd11.prod.outlook.com>
Recent versions of VxWorks support fork() and as result can support dash.
For example,  to cross compile for IA with this patch applied,  and your VSB environment sourced (aka sysroot)
  
./configure --build=x86_64-pc-linux-gnu --host=x86_64-wrs-vxworks --prefix=/usr \
    CC=wr-cc CXX=wr-c++ LD=wr-ld AR=wr-ar NM=wr-nm OBJCOPY=wr-objcopy OBJDUMP=wr-objdump RANLIB=wr-ranlib READELF=wr-readelf SIZE=wr-size STRIP= wr-strip \
    ac_cv_func_faccessat=no    \
    CFLAGS="-DJOBS=0 "

make install DESTDIR=${VSB}/usr/3pp/develop

For other architectures update your <host> appropriately. 

---
configure.ac     | 4 ++--
 src/bltin/test.c | 2 ++
 src/jobs.c       | 4 ++++
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index ba4856a..bb09534 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,7 +44,7 @@ AC_ARG_ENABLE(glob, AS_HELP_STRING(--enable-glob, [Use glob(3) from libc]))
 dnl Checks for libraries.
 
 dnl Checks for header files.
-AC_CHECK_HEADERS(alloca.h paths.h)
+AC_CHECK_HEADERS(alloca.h paths.h sys/wait.h)
 
 dnl Check for declarations
 AC_CHECK_DECL([_PATH_BSHELL],,AC_DEFINE_UNQUOTED([_PATH_BSHELL], "/bin/sh", [Define to system shell path]),[
@@ -89,7 +89,7 @@ dnl Checks for library functions.
 AC_CHECK_FUNCS(bsearch faccessat getpwnam getrlimit isalpha killpg \
 	       memfd_create memrchr mempcpy \
 	       sigsetmask stpcpy strchrnul strsignal strtod strtoimax \
-	       strtoumax sysconf tee)
+	       strtoumax sysconf tee wait3)
 
 dnl Check whether it's worth working around FreeBSD PR kern/125009.
 dnl The traditional behavior of access/faccessat is crazy, but
diff --git a/src/bltin/test.c b/src/bltin/test.c
index 6d844f1..0323944 100644
--- a/src/bltin/test.c
+++ b/src/bltin/test.c
@@ -418,8 +418,10 @@ filstat(char *nm, enum token mode)
 		return (s.st_mode & S_ISUID) != 0;
 	case FILSGID:
 		return (s.st_mode & S_ISGID) != 0;
+#ifdef S_ISVTX
 	case FILSTCK:
 		return (s.st_mode & S_ISVTX) != 0;
+#endif
 	case FILGZ:
 		return !!s.st_size;
 	case FILUID:
diff --git a/src/jobs.c b/src/jobs.c
index 51e6fa1..8d6ecf7 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -1202,7 +1202,11 @@ waitproc(int block, int *status)
 	do {
 		gotsigchld = 0;
 		do
+#ifdef HAVE_WAIT3 		
 			err = wait3(status, flags, NULL);
+#else			
+			err = waitpid((pid_t)-1, status, flags, NULL);
+#endif		
 		while (err < 0 && errno == EINTR);
 
 		if (err || (err = -!block))