[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))