Source: singularity-container Version: 2.4-1 Severity: serious Tags: sid buster patch
Hi, singularity-container FTBFS on mips* with the error: > In file included from mnt.c:41:0: > ../../../../../src/util/setns.h:46:4: error: #error Please determine the > syscall number for setns on your architecture > # error Please determine the syscall number for setns on your architecture > ^~~~~ This error happens because the setns.h header requires a __NR_setns define for each architecture. However, this define is never used in the case where glibc provides a setns function (as is the case for all architectures in buster). The attached "setns-syscall-nr.patch" patch fixes this by moving the __NR_setns ifdefs into setns.c so it is only used in the case where setns is not provided by libc. After doing this, the package FTBFS again in a different way: > util/signal.c:39:5: error: 'SIGSTKFLT' undeclared here (not in a function); > did you mean 'SIGSTKSZ'? > SIGSTKFLT, > ^~~~~~~~~ > SIGSTKSZ The SIGSTKFLT signal is not defined on mips (and a few other architectures). This is fixed by the "maybe-sigstkflt.patch" patch which only adds this signal to the all_signals list if it is defined. Thanks, James
--- a/src/util/signal.c +++ b/src/util/signal.c @@ -36,7 +36,9 @@ static const int all_signals[] = { SIGPIPE, SIGALRM, SIGTERM, +#ifdef SIGSTKFLT SIGSTKFLT, +#endif SIGCHLD, SIGCONT, SIGTSTP,
--- a/src/util/setns.c +++ b/src/util/setns.c @@ -21,7 +21,29 @@ #if defined (NO_SETNS) && defined (SETNS_SYSCALL) -#include "util/setns.h" +#ifndef __NR_setns +# if defined (__x86_64__) +# define __NR_setns 308 +# elif defined (__i386__) +# define __NR_setns 346 +# elif defined (__alpha__) +# define __NR_setns 501 +# elif defined (__arm__) +# define __NR_setns 375 +# elif defined (__aarch64__) +# define __NR_setns 375 +# elif defined (__ia64__) +# define __NR_setns 1330 +# elif defined (__sparc__) +# define __NR_setns 337 +# elif defined (__powerpc__) +# define __NR_setns 350 +# elif defined (__s390__) +# define __NR_setns 339 +# else +# error Please determine the syscall number for setns on your architecture +# endif +#endif int setns(int fd, int nstype) { return syscall(__NR_setns, fd, nstype); --- a/src/util/setns.h +++ b/src/util/setns.h @@ -16,34 +16,6 @@ #ifndef __SETNS_H_ #define __SETNS_H_ -#ifndef __NR_setns -# if defined (__x86_64__) -# define __NR_setns 308 -# elif defined (__i386__) -# define __NR_setns 346 -# elif defined (__alpha__) -# define __NR_setns 501 -# elif defined (__arm__) -# define __NR_setns 375 -# elif defined (__aarch64__) -# define __NR_setns 375 -# elif defined (__ia64__) -# define __NR_setns 1330 -# elif defined (__sparc__) -# define __NR_setns 337 -# elif defined (__powerpc__) -# define __NR_setns 350 -# elif defined (__s390__) -# define __NR_setns 339 -# endif -#endif - -#ifdef __NR_setns - extern int setns(int fd, int nstype); -#else /* !__NR_setns */ -# error Please determine the syscall number for setns on your architecture -#endif - #endif /* __SETNS_H_ */
signature.asc
Description: OpenPGP digital signature