Skip to contentSkip to conversation

ltp: Don't link against libfl

PATCH New Khem Raj 2 participants 56 messages Jan 9, 2016 – Feb 3, 2016

Subsystems (2)
lore
Share & tools
lore

Khem Raj

author
#0 lore raw

PATCH v2 1/32 ltp: Don't link against libfl

From: Chong Lu <[email protected]>

We have already defined yywrap function in scan.l file. After this, we no longer need to link against libfl and so no longer get errors about undefined references to yylex.

---
 pan/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
pan/Makefile +1 -1
index 4cc6466..a4b575b 100644
@@ -31,7 +31,7 @@ CPPFLAGS		+= -Wno-error
 
 CPPFLAGS		+= -I$(abs_srcdir)
 
-LDLIBS			+= -lm $(LEXLIB)
+LDLIBS			+= -lm
 
 LFLAGS			+= -l
 
Signature · 1 line
2.7.0
author
#1 lore raw

PATCH v2 2/32 Add knob to control whether numa support should be checked

From: "Roy.Li" <[email protected]>

otherwise undeterministic dependency will be generated during build depending upong numa being staged or not

---
 m4/ltp-numa.m4 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
m4/ltp-numa.m4 +9 -1
index 60ae07b..ed7078d 100644
@@ -24,7 +24,13 @@ dnl ----------------------------
 dnl
 AC_DEFUN([LTP_CHECK_SYSCALL_NUMA],
 [dnl
-AC_CHECK_HEADERS([linux/mempolicy.h numa.h numaif.h],[
+AC_MSG_CHECKING([for numa])
+AC_ARG_WITH(
+	[numa],
+	AC_HELP_STRING([--without-numa],
+	[without numa support]),
+	[],
+	[AC_CHECK_HEADERS([linux/mempolicy.h numa.h numaif.h],[
 	LTP_SYSCALL_NUMA_HEADERS=yes
 	AC_CHECK_LIB(numa,numa_alloc_onnode,[have_numa_alloc_onnode="yes"])
 	if  test "x$have_numa_alloc_onnode" = "xyes"; then
@@ -48,3 +54,5 @@ if test "x$have_mpol_constants" = "xyes"; then
 	AC_DEFINE(HAVE_MPOL_CONSTANTS,1,[define to 1 if you have all constants required to use mbind tests])
 fi
 )])
+AC_MSG_RESULT([$with_numa])
+])
Signature · 1 line
2.7.0
#2 lore raw

PATCH v2 2/32 Add knob to control whether numa support should be checked

Hi!

Quoted 11 lines
---
 m4/ltp-numa.m4 | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
m4/ltp-numa.m4 +0 -0
index 60ae07b..ed7078d 100644

m4/ltp-numa.m4 dnl ---------------------------- · line 27

Quoted 5 lines
m4/ltp-numa.m4 +1 -1
@@ -24,7 +24,13 @@ dnl ----------------------------
 dnl
 AC_DEFUN([LTP_CHECK_SYSCALL_NUMA],
 [dnl
-AC_CHECK_HEADERS([linux/mempolicy.h numa.h numaif.h],[
+AC_MSG_CHECKING([for numa])

This causes the output messages to be interleaved when configure is executed without the --without-numa parameter.

Quoted 10 lines
m4/ltp-numa.m4 +6 -0
+AC_ARG_WITH(
+	[numa],
+	AC_HELP_STRING([--without-numa],
+	[without numa support]),
+	[],
+	[AC_CHECK_HEADERS([linux/mempolicy.h numa.h numaif.h],[
 	LTP_SYSCALL_NUMA_HEADERS=yes
 	AC_CHECK_LIB(numa,numa_alloc_onnode,[have_numa_alloc_onnode="yes"])
 	if  test "x$have_numa_alloc_onnode" = "xyes"; then

m4/ltp-numa.m4 if test "x$have_mpol_constants" = "xyes"; then · line 57

Quoted 4 lines
m4/ltp-numa.m4 +1 -0
@@ -48,3 +54,5 @@ if test "x$have_mpol_constants" = "xyes"; then
 	AC_DEFINE(HAVE_MPOL_CONSTANTS,1,[define to 1 if you have all constants required to use mbind tests])
 fi
 )])
+AC_MSG_RESULT([$with_numa])

And this genereates empty line in that case.

m4/ltp-numa.m4 if test "x$have_mpol_constants" = "xyes"; then · line 58

Quoted 1 line
m4/ltp-numa.m4 +1 -0
+])

If you want to print "Checking for numa... disabled" or something similar in the output you should do it only in the case that the --without-numa flag was passed.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#3 lore raw

PATCH v2 3/32 Add knob to control tirpc support

In reply to Khem Raj

From: Fathi Boudra <[email protected]>

allow to disable tirpc. Helps to disable it at top level for eg. musl it does not yet work.

---
 configure.ac | 9 +++++++++
 1 file changed, 9 insertions(+)
configure.ac +9 -0
index cc50397..9e2936b 100644
@@ -98,6 +98,13 @@ if test "x$with_python" = xyes; then
 else
     AC_SUBST([WITH_PYTHON],["no"])
 fi
+
+# TI RPC
+AC_ARG_WITH([tirpc],
+  AC_HELP_STRING([--without-tirpc],
+    [without libtirpc support]),
+  [],[with_tirpc=yes],
+)
 # END tools knobs
 
 # Testsuites knobs
@@ -169,7 +176,9 @@ LTP_CHECK_RENAMEAT2
 LTP_CHECK_FALLOCATE
 LTP_CHECK_SYSCALL_FCNTL
 LTP_CHECK_SYSCALL_PERF_EVENT_OPEN
+if test "x$with_tirpc" = xyes; then
 LTP_CHECK_TIRPC
+fi
 LTP_CHECK_TEE
 LTP_CHECK_SPLICE
 LTP_CHECK_VMSPLICE
Signature · 1 line
2.7.0
#4 lore raw

PATCH v2 3/32 Add knob to control tirpc support

Hi!

Quoted 6 lines
configure.ac +0 -0
index cc50397..9e2936b 100644
@@ -98,6 +98,13 @@ if test "x$with_python" = xyes; then
 else

configure.ac if test "x$with_python" = xyes; then · line 108

Quoted 10 lines
configure.ac +7 -0
     AC_SUBST([WITH_PYTHON],["no"])
 fi
+
+# TI RPC
+AC_ARG_WITH([tirpc],
+  AC_HELP_STRING([--without-tirpc],
+    [without libtirpc support]),
+  [],[with_tirpc=yes],
+)
 # END tools knobs

This should be done in the corresponding m4 file as well.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#5 lore raw

PATCH v2 4/32 build: Add option to select libc implementation

In reply to Khem Raj

There are more than glibc for C library implementation available on linux now a days, uclibc cloaked like glibc but musl e.g. is very different and does not implement all GNU extentions

Disable tests specifically not building _yet_ on musl based systems

---
 Makefile                                    | 5 +++++
 testcases/kernel/Makefile                   | 5 ++++-
 testcases/kernel/sched/Makefile             | 4 +++-
 testcases/kernel/syscalls/Makefile          | 5 +++++
 testcases/network/nfsv4/acl/Makefile        | 4 ++++
 testcases/network/rpc/basic_tests/Makefile  | 5 +++++
 testcases/realtime/func/pi-tests/Makefile   | 4 ++++
 testcases/realtime/stress/pi-tests/Makefile | 5 +++++
 8 files changed, 35 insertions(+), 2 deletions(-)
Makefile +5 -0
index 297f8e7..906b280 100644
@@ -49,6 +49,11 @@ SKIP_IDCHECK		?= 0
 UCLINUX			?= 0
 export UCLINUX
 
+# System C library implementation (glibc,uclibc,musl etc.)
+# default to glibc if not set
+LIBC			?= glibc
+export LIBC
+
 # CLEAN_TARGETS:	Targets which exist solely in clean.
 # COMMON_TARGETS:	Targets which exist in all, clean, and install.
 # INSTALL_TARGETS:	Targets which exist in clean and install (contains
testcases/kernel/Makefile +4 -1
index 50a12fa..4f1987f 100644
@@ -47,13 +47,16 @@ SUBDIRS			+= connectors \
 			   logging \
 			   mem \
 			   numa \
-			   pty \
 			   sched \
 			   security \
 			   timers \
 			   tracing \
 			   module \
 
+ifneq ($(LIBC),musl)
+SUBDIRS			+= pty
+endif
+
 ifeq ($(WITH_POWER_MANAGEMENT_TESTSUITE),yes)
 SUBDIRS			+= power_management
 endif
testcases/kernel/sched/Makefile +3 -1
index 6245ed0..aa4eb7f 100644
@@ -23,5 +23,7 @@
 top_srcdir		?= ../../..
 
 include $(top_srcdir)/include/mk/env_pre.mk
-
+ifeq ($(LIBC),musl)
+	FILTER_OUT_DIRS += process_stress
+endif
 include $(top_srcdir)/include/mk/generic_trunk_target.mk
testcases/kernel/syscalls/Makefile +5 -0
index 8acb395..b749126 100644
@@ -28,5 +28,10 @@ ifeq ($(UCLINUX),1)
 FILTER_OUT_DIRS	+= capget capset chmod chown clone fork getcontext llseek \
 		   mincore mprotect nftw profil remap_file_pages sbrk
 endif
+ifeq ($(LIBC),musl)
+FILTER_OUT_DIRS	+= confstr fmtmsg getcontext ioctl mallopt profil \
+		   rt_sigsuspend setdomainname sethostname sigsuspend \
+		   ustat
+endif
 
 include $(top_srcdir)/include/mk/generic_trunk_target.mk
testcases/network/nfsv4/acl/Makefile +4 -0
index 8bc78c2..c36cf50 100644
@@ -26,4 +26,8 @@ include $(top_srcdir)/include/mk/env_pre.mk
 
 LDLIBS			+= $(ACL_LIBS)
 
+ifeq ($(LIBC),musl)
+FILTER_OUT_MAKE_TARGETS	:= acl1
+endif
+
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/network/rpc/basic_tests/Makefile +5 -0
index 3160813..9bdf5d0 100644
@@ -23,4 +23,9 @@
 top_srcdir		?= ../../../..
 
 include $(top_srcdir)/include/mk/env_pre.mk
+
+ifeq ($(LIBC),musl)
+FILTER_OUT_DIRS += rpc01
+endif
+
 include $(top_srcdir)/include/mk/generic_trunk_target.mk
testcases/realtime/func/pi-tests/Makefile +4 -0
index 7a7a57a..5808866 100644
@@ -27,5 +27,9 @@ include $(top_srcdir)/include/mk/env_pre.mk
 include $(abs_srcdir)/../../config.mk
 
 MAKE_TARGETS		:= testpi-0 testpi-1 testpi-2 testpi-4 testpi-5 testpi-6 testpi-7 sbrk_mutex
+ifeq ($(LIBC),musl)
+FILTER_OUT_MAKE_TARGETS	:= testpi-5 testpi-6 sbrk_mutex
+endif
+
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/realtime/stress/pi-tests/Makefile +5 -0
index 5edc3b4..aa5987a 100644
@@ -24,4 +24,9 @@ top_srcdir		?= ../../../..
 
 include $(top_srcdir)/include/mk/env_pre.mk
 include $(abs_srcdir)/../../config.mk
+
+ifeq ($(LIBC),musl)
+FILTER_OUT_MAKE_TARGETS	:= testpi-3
+endif
+
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
Signature · 1 line
2.7.0
#6 lore raw

PATCH v2 4/32 build: Add option to select libc implementation

Hi!

Quoted 5 lines

There are more than glibc for C library implementation available on linux now a days, uclibc cloaked like glibc but musl e.g. is very different and does not implement all GNU extentions

Disable tests specifically not building _yet_ on musl based systems

What should be done, instead of this musl specific hacks, is to add configure checks for the features that are not supported on musl and uses these as criteria for disabling the testcases. This will work correctly for any libc implementaion and the testcases will be enabled automatically if musl decides to actually implement anything that is not supported at the moment.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#7 lore raw

PATCH v2 5/32 kernel/controllers: Link with libfts explicitly on musl

In reply to Khem Raj

musl does not implement fts like glibc and therefore it depends on external implementation for all fts APIs

---
 testcases/kernel/controllers/Makefile.inc        | 3 +++
 testcases/kernel/controllers/cpuset/Makefile.inc | 3 +++
 2 files changed, 6 insertions(+)
testcases/kernel/controllers/Makefile.inc +3 -0
index b106283..ef5fc0c 100644
@@ -36,6 +36,9 @@ MAKE_DEPS		:= $(LIB)
 CPPFLAGS		+= -I$(abs_srcdir)/../$(LIBDIR)
 
 LDFLAGS			+= -L$(abs_builddir)/../$(LIBDIR)
+ifeq ($(LIBC),musl)
+LDLIBS			+= -lfts
+endif
 
 INSTALL_TARGETS		?= *.sh
 
testcases/kernel/controllers/cpuset/Makefile.inc +3 -0
index 9e002f4..e0fcb9c 100644
@@ -42,6 +42,9 @@ MAKE_DEPS		:= $(LIBCONTROLLERS) $(LIBCPUSET)
 LDFLAGS			+= -L$(abs_builddir)/$(LIBCPUSET_DIR) -L$(abs_builddir)/$(LIBCONTROLLERS_DIR)
 
 LDLIBS			+= -lcpu_set -lcontrollers -lltp
+ifeq ($(LIBC),musl)
+LDLIBS			+= -lfts
+endif
 
 INSTALL_TARGETS		?= *.sh
 
Signature · 1 line
2.7.0
#8 lore raw

PATCH v2 5/32 kernel/controllers: Link with libfts explicitly on musl

Hi!

Quoted 2 lines

musl does not implement fts like glibc and therefore it depends on external implementation for all fts APIs

DTTO, this should be configure test that would check if fts APIs needs -lfts. The test should export FTS_LIBS in config.mk which would be set to -lfts if needed and used in the corresponding Makefiles,

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#9 lore raw

PATCH v2 6/32 sendfile: Use off64_t instead of __off64_t

In reply to Khem Raj

__off64_t is specific to glibc where as off64_t is widely available Add _GNU_SOURCE for off64_t defines from sys/types.h Fixes
<command-line>:0:7: error: unknown type name 'off64_t' sendfile02.c:97:18: note: in expansion of macro 'OFF_T'

---
 testcases/kernel/syscalls/sendfile/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/kernel/syscalls/sendfile/Makefile +1 -1
index df7b63f..1bd1b57 100644
@@ -21,6 +21,6 @@ top_srcdir		?= ../../../..
 include $(top_srcdir)/include/mk/testcases.mk
 include $(abs_srcdir)/../utils/newer_64.mk
 
-%_64: CPPFLAGS += -D_FILE_OFFSET_BITS=64 -DOFF_T=__off64_t
+%_64: CPPFLAGS += -D_FILE_OFFSET_BITS=64 -DOFF_T=off64_t -D_GNU_SOURCE
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
Signature · 1 line
2.7.0
author
#10 lore raw

PATCH v2 7/32 replace SIGCLD with SIGCHLD

In reply to Khem Raj

its defined to use SIGCHLD anyway in

bits/signum.h:#define SIGCLD SIGCHLD /* Same as SIGCHLD
(System V). */

plus it helps these tests compile with musl which adheres to posix

---
 lib/tst_sig.c                                   |  8 ++++----
 testcases/kernel/connectors/pec/pec_listener.c  |  1 +
 testcases/kernel/fs/doio/doio.c                 |  4 ++--
 testcases/kernel/fs/doio/growfiles.c            |  2 +-
 testcases/kernel/syscalls/fcntl/fcntl11.c       |  8 ++++----
 testcases/kernel/syscalls/fcntl/fcntl17.c       |  8 ++++----
 testcases/kernel/syscalls/fcntl/fcntl19.c       |  8 ++++----
 testcases/kernel/syscalls/fcntl/fcntl20.c       |  8 ++++----
 testcases/kernel/syscalls/fcntl/fcntl21.c       |  8 ++++----
 testcases/kernel/syscalls/kill/kill02.c         |  6 +++---
 testcases/kernel/syscalls/kill/kill12.c         |  8 ++++----
 testcases/kernel/syscalls/mkdir/mkdir09.c       | 12 ++++++------
 testcases/kernel/syscalls/sighold/sighold02.c   |  2 +-
 testcases/network/tcp_cmds/perf_lan/pingpong.c  |  2 +-
 testcases/network/tcp_cmds/perf_lan/pingpong6.c |  2 +-
 15 files changed, 44 insertions(+), 43 deletions(-)
lib/tst_sig.c +4 -4
index 3af5ffd..36565e1 100644
@@ -49,7 +49,7 @@
 		fork_flag - set to FORK or NOFORK depending upon whether the
 			calling program executes a fork() system call.  It
 			is normally the case that the calling program treats
-			SIGCLD as an expected signal if fork() is being used.
+			SIGCHLD as an expected signal if fork() is being used.
 
 		handler - a pointer to the unexpected signal handler to
 			be executed after an unexpected signal has been
@@ -82,7 +82,7 @@ static void (*tst_setup_signal(int, void (*)(int))) (int);
 
 /****************************************************************************
  * tst_sig() : set-up to catch unexpected signals.  fork_flag is set to NOFORK
- *    if SIGCLD is to be an "unexpected signal", otherwise it is set to
+ *    if SIGCHLD is to be an "unexpected signal", otherwise it is set to
  *    FORK.  cleanup points to a cleanup routine to be executed before
  *    tst_exit is called (cleanup is set to NULL if no cleanup is desired).
  *    handler is a pointer to the signal handling routine (if handler is
@@ -117,7 +117,7 @@ void tst_sig(int fork_flag, void (*handler) (), void (*cleanup) ())
 	for (sig = 1; sig < NSIG; sig++) {
 		/*
 		 * SIGKILL is never unexpected.
-		 * SIGCLD is only unexpected when
+		 * SIGCHLD is only unexpected when
 		 *    no forking is being done.
 		 * SIGINFO is used for file quotas and should be expected
 		 */
@@ -205,7 +205,7 @@ void tst_sig(int fork_flag, void (*handler) (), void (*cleanup) ())
 #endif
 			break;
 
-		case SIGCLD:
+		case SIGCHLD:
 			if (fork_flag == FORK)
 				continue;
 
testcases/kernel/connectors/pec/pec_listener.c +1 -0
index a1beb13..002750a 100644
@@ -20,6 +20,7 @@
 /*                                                                            */
 /******************************************************************************/
 
+#define _GNU_SOURCE
 #include <sys/socket.h>
 #include <sys/poll.h>
 #include <sys/types.h>
testcases/kernel/fs/doio/doio.c +2 -2
index 4b0dec5..5f65ef9 100644
@@ -573,7 +573,7 @@ int main(int argc, char **argv)
 		case SIGTSTP:
 		case SIGSTOP:
 		case SIGCONT:
-		case SIGCLD:
+		case SIGCHLD:
 		case SIGBUS:
 		case SIGSEGV:
 		case SIGQUIT:
@@ -615,7 +615,7 @@ int main(int argc, char **argv)
 	}
 
 	sigemptyset(&block_mask);
-	sigaddset(&block_mask, SIGCLD);
+	sigaddset(&block_mask, SIGCHLD);
 	sigprocmask(SIG_BLOCK, &block_mask, &omask);
 
 	/*
testcases/kernel/fs/doio/growfiles.c +1 -1
index 09e7f35..bbad230 100644
@@ -1640,7 +1640,7 @@ int set_sig(void)
 #ifdef SIGRESTART
 		case SIGRESTART:
 #endif /* SIGRESTART */
-		case SIGCLD:
+		case SIGCHLD:
 			break;
 
 		default:
testcases/kernel/syscalls/fcntl/fcntl11.c +4 -4
index fa6ce53..2de2b6c 100644
@@ -105,10 +105,10 @@ void setup(void)
 	memset(&act, 0, sizeof(act));
 	act.sa_handler = catch_child;
 	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGCLD);
-	if ((sigaction(SIGCLD, &act, NULL)) < 0)
+	sigaddset(&act.sa_mask, SIGCHLD);
+	if ((sigaction(SIGCHLD, &act, NULL)) < 0)
 		tst_brkm(TBROK | TERRNO, cleanup,
-			 "sigaction(SIGCLD, ..) failed");
+			 "sigaction(SIGCHLD, ..) failed");
 }
 
 void do_child(void)
@@ -227,7 +227,7 @@ void stop_child(void)
 {
 	struct flock fl;
 
-	signal(SIGCLD, SIG_DFL);
+	signal(SIGCHLD, SIG_DFL);
 	fl.l_type = STOP;
 	parent_put(&fl);
 	wait(0);
testcases/kernel/syscalls/fcntl/fcntl17.c +4 -4
index 5b03e39..6598b20 100644
@@ -150,9 +150,9 @@ int setup(void)
 	memset(&act, 0, sizeof(act));
 	act.sa_handler = catch_child;
 	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGCLD);
-	if (sigaction(SIGCLD, &act, NULL) < 0) {
-		tst_resm(TFAIL, "SIGCLD signal setup failed, errno: %d", errno);
+	sigaddset(&act.sa_mask, SIGCHLD);
+	if (sigaction(SIGCHLD, &act, NULL) < 0) {
+		tst_resm(TFAIL, "SIGCHLD signal setup failed, errno: %d", errno);
 		return 1;
 	}
 	return 0;
@@ -381,7 +381,7 @@ void stop_children(void)
 {
 	int arg;
 
-	signal(SIGCLD, SIG_DFL);
+	signal(SIGCHLD, SIG_DFL);
 	arg = STOP;
 	child_free(child_pipe1[1], arg);
 	child_free(child_pipe2[1], arg);
testcases/kernel/syscalls/fcntl/fcntl19.c +4 -4
index a542cfc..88c91d6 100644
@@ -112,9 +112,9 @@ void setup(void)
 	memset(&act, 0, sizeof(act));
 	act.sa_handler = catch_child;
 	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGCLD);
-	if ((sigaction(SIGCLD, &act, NULL)) < 0) {
-		tst_resm(TFAIL, "SIGCLD signal setup failed, errno: %d", errno);
+	sigaddset(&act.sa_mask, SIGCHLD);
+	if ((sigaction(SIGCHLD, &act, NULL)) < 0) {
+		tst_resm(TFAIL, "SIGCHLD signal setup failed, errno: %d", errno);
 		fail = 1;
 	}
 }
@@ -265,7 +265,7 @@ void stop_child(void)
 {
 	struct flock fl;
 
-	signal(SIGCLD, SIG_DFL);
+	signal(SIGCHLD, SIG_DFL);
 	fl.l_type = STOP;
 	parent_put(&fl);
 	wait(0);
testcases/kernel/syscalls/fcntl/fcntl20.c +4 -4
index aa06bab..99fd783 100644
@@ -109,9 +109,9 @@ void setup(void)
 	memset(&act, 0, sizeof(act));
 	act.sa_handler = catch_child;
 	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGCLD);
-	if (sigaction(SIGCLD, &act, NULL) == -1)
-		tst_brkm(TFAIL | TERRNO, cleanup, "SIGCLD signal setup failed");
+	sigaddset(&act.sa_mask, SIGCHLD);
+	if (sigaction(SIGCHLD, &act, NULL) == -1)
+		tst_brkm(TFAIL | TERRNO, cleanup, "SIGCHLD signal setup failed");
 }
 
 void cleanup(void)
@@ -264,7 +264,7 @@ void stop_child(void)
 {
 	struct flock fl;
 
-	signal(SIGCLD, SIG_DFL);
+	signal(SIGCHLD, SIG_DFL);
 	fl.l_type = STOP;
 	parent_put(&fl);
 	wait(0);
testcases/kernel/syscalls/fcntl/fcntl21.c +4 -4
index 5307021..8f1a67c 100644
@@ -110,9 +110,9 @@ void setup(void)
 	memset(&act, 0, sizeof(act));
 	act.sa_handler = catch_child;
 	sigemptyset(&act.sa_mask);
-	sigaddset(&act.sa_mask, SIGCLD);
-	if ((sigaction(SIGCLD, &act, NULL)) < 0) {
-		tst_resm(TFAIL, "SIGCLD signal setup failed, errno: %d", errno);
+	sigaddset(&act.sa_mask, SIGCHLD);
+	if ((sigaction(SIGCHLD, &act, NULL)) < 0) {
+		tst_resm(TFAIL, "SIGCHLD signal setup failed, errno: %d", errno);
 		fail = 1;
 	}
 }
@@ -272,7 +272,7 @@ void stop_child(void)
 {
 	struct flock fl;
 
-	signal(SIGCLD, SIG_DFL);
+	signal(SIGCHLD, SIG_DFL);
 	fl.l_type = STOP;
 	parent_put(&fl);
 	wait(0);
testcases/kernel/syscalls/kill/kill02.c +3 -3
index 9d6cc68..08360dd 100644
@@ -701,7 +701,7 @@ void setup(void)
 
 	/*
 	 *  Set to catch unexpected signals.
-	 *  SIGCLD is set to be ignored because we do not wait for termination status.
+	 *  SIGCHLD is set to be ignored because we do not wait for termination status.
 	 *  SIGUSR1 is set to be ignored because this is the signal we are using for
 	 *  the test and we are not concerned with the parent getting it.
 	 */
@@ -713,9 +713,9 @@ void setup(void)
 			 "signal(SIGUSR1, SIG_IGN) failed");
 	}
 
-	if (signal(SIGCLD, SIG_IGN) == SIG_ERR) {
+	if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) {
 		tst_brkm(TBROK | TERRNO, NULL,
-			 "signal(SIGCLD, SIG_IGN) failed");
+			 "signal(SIGCHLD, SIG_IGN) failed");
 	}
 
 	TEST_PAUSE;
testcases/kernel/syscalls/kill/kill12.c +4 -4
index 7a47a4a..d7c4147 100644
@@ -98,7 +98,7 @@ int main(int argc, char **argv)
 
 	exno = 1;
 
-	if (sigset(SIGCLD, chsig) == SIG_ERR) {
+	if (sigset(SIGCHLD, chsig) == SIG_ERR) {
 		fprintf(temp, "\tsigset failed, errno = %d\n", errno);
 		fail_exit();
 	}
@@ -128,7 +128,7 @@ int main(int argc, char **argv)
 				sleep(1);
 
 			kill(pid, sig);	/* child should ignroe this sig */
-			kill(pid, SIGCLD);	/* child should exit */
+			kill(pid, SIGCHLD);	/* child should exit */
 
 #ifdef BCS
 			while ((npid = wait(&status)) != pid
@@ -222,14 +222,14 @@ void do_child(void)
 	int exno = 1;
 
 #ifdef UCLINUX
-	if (sigset(SIGCLD, chsig) == SIG_ERR) {
+	if (sigset(SIGCHLD, chsig) == SIG_ERR) {
 		fprintf(temp, "\tsigset failed, errno = %d\n", errno);
 		fail_exit();
 	}
 #endif
 
 	sigset(sig, SIG_IGN);	/* set to ignore signal */
-	kill(getppid(), SIGCLD);	/* tell parent we are ready */
+	kill(getppid(), SIGCHLD);	/* tell parent we are ready */
 	while (!chflag)
 		sleep(1);	/* wait for parent */
 
testcases/kernel/syscalls/mkdir/mkdir09.c +6 -6
index 41c20e9..07b4fb8 100644
@@ -122,10 +122,10 @@ int main(int argc, char *argv[])
 
 	}
 
-	/* Set up to catch SIGCLD signal */
-	if (signal(SIGCLD, chld) == SIG_ERR) {
+	/* Set up to catch SIGCHLD signal */
+	if (signal(SIGCHLD, chld) == SIG_ERR) {
 		tst_brkm(TFAIL, cleanup,
-			 "Error setting up SIGCLD signal, ERRNO = %d", errno);
+			 "Error setting up SIGCHLD signal, ERRNO = %d", errno);
 
 	}
 
@@ -236,9 +236,9 @@ int runtest(void)
 		tst_brkm(TFAIL, cleanup,
 			 "Error resetting SIGTERM signal, ERRNO = %d", errno);
 	}
-	if (signal(SIGCLD, SIG_DFL) == SIG_ERR) {
+	if (signal(SIGCHLD, SIG_DFL) == SIG_ERR) {
 		tst_brkm(TFAIL, cleanup,
-			 "Error resetting SIGCLD signal, ERRNO = %d", errno);
+			 "Error resetting SIGCHLD signal, ERRNO = %d", errno);
 	}
 
 	if (test_time) {
@@ -372,7 +372,7 @@ void term(int sig)
 
 void chld(int sig)
 {
-	/* Routine to handle SIGCLD signal. */
+	/* Routine to handle SIGCHLD signal. */
 
 	sigchld++;
 	if (jump) {
testcases/kernel/syscalls/sighold/sighold02.c +1 -1
index e3076fb..be01874 100644
@@ -77,7 +77,7 @@ static int sigs_map[NUMSIGS];
 static int skip_sig(int sig)
 {
 	switch (sig) {
-	case SIGCLD:
+	case SIGCHLD:
 	case SIGKILL:
 	case SIGALRM:
 	case SIGSTOP:
testcases/network/tcp_cmds/perf_lan/pingpong.c +1 -1
index 1196312..5b06798 100644
@@ -182,7 +182,7 @@ int main(int argc, char *argv[])
 
 	/* Setup traps */
 	signal(SIGINT, finish);
-	signal(SIGCLD, finish);
+	signal(SIGCHLD, finish);
 
 	/* Fork a child process to continue sending packets */
 	tst_resm(TINFO, "Create a child process to continue to send packets");
testcases/network/tcp_cmds/perf_lan/pingpong6.c +1 -1
index 9747f58..0a0fb1d 100644
@@ -153,7 +153,7 @@ char *argv[];
 
 	/* Setup traps */
 	signal(SIGINT, finish);
-	signal(SIGCLD, finish);
+	signal(SIGCHLD, finish);
 
 	/* Fork a child process to continue sending packets */
 	printf("Create a child process to continue to send packets \n");
Signature · 1 line
2.7.0
#11 lore raw

PATCH v2 7/32 replace SIGCLD with SIGCHLD

Hi!

testcases/kernel/connectors/pec/pec_listener.c line 26

Quoted 10 lines
testcases/kernel/connectors/pec/pec_listener.c +1 -0
@@ -20,6 +20,7 @@
 /*                                                                            */
 /******************************************************************************/
 
+#define _GNU_SOURCE
 #include <sys/socket.h>
 #include <sys/poll.h>
 #include <sys/types.h>

Why is the _GNU_SOURCE needed here. And moreover it should be in separate patch anyway.

The rest of the patch is fine.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#12 lore raw

PATCH v2 8/32 Check if __GLIBC_PREREQ is defined before using it

In reply to Khem Raj

__GLIBC_PREREQ is specific to glibc so it should be checked if it is defined or not.

---
 testcases/kernel/syscalls/accept4/accept4_01.c     |  9 ++++++-
 testcases/kernel/syscalls/getcpu/getcpu01.c        | 31 ++++++++++++++++++++++
 .../sched_getaffinity/sched_getaffinity01.c        | 26 ++++++++++++++++++
 3 files changed, 65 insertions(+), 1 deletion(-)
testcases/kernel/syscalls/accept4/accept4_01.c +8 -1
index 6072bfa..2b090cb 100644
@@ -64,6 +64,7 @@ static void cleanup(void)
 	tst_rmdir();
 }
 
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if !(__GLIBC_PREREQ(2, 10))
 static int
 accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)
@@ -82,7 +83,6 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)
 	}
 	tst_resm(TINFO, "\n");
 #endif
-
 #if USE_SOCKETCALL
 	long args[6];
 
@@ -97,6 +97,7 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)
 #endif
 }
 #endif
+#endif
 
 static void
 do_test(int lfd, struct sockaddr_in *conn_addr,
@@ -119,9 +120,15 @@ do_test(int lfd, struct sockaddr_in *conn_addr,
 		die("Connect Error");
 
 	addrlen = sizeof(struct sockaddr_in);
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if !(__GLIBC_PREREQ(2, 10))
 	acceptfd = accept4_01(lfd, (struct sockaddr *)&claddr, &addrlen,
 			      closeonexec_flag | nonblock_flag);
+
+#else
+	acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen,
+			   closeonexec_flag | nonblock_flag);
+#endif
 #else
 	acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen,
 			   closeonexec_flag | nonblock_flag);
testcases/kernel/syscalls/getcpu/getcpu01.c +31 -0
index c927512..6de6362 100644
@@ -62,6 +62,7 @@
 #include <dirent.h>
 
 #if defined(__i386__) || defined(__x86_64__)
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2,6)
 #if defined(__x86_64__)
 #include <utmpx.h>
@@ -72,13 +73,16 @@ int sys_support = 1;
 #else
 int sys_support = 0;
 #endif
+#endif
 #else
 int sys_support = 0;
 #endif
 
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if !(__GLIBC_PREREQ(2, 7))
 #define CPU_FREE(ptr) free(ptr)
 #endif
+#endif
 
 void cleanup(void);
 void setup(void);
@@ -164,9 +168,11 @@ static inline int getcpu(unsigned *cpu_id, unsigned *node_id,
 {
 #if defined(__i386__)
 	return syscall(318, cpu_id, node_id, cache_struct);
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #elif __GLIBC_PREREQ(2,6)
 	*cpu_id = sched_getcpu();
 #endif
+#endif
 	return 0;
 }
 
@@ -191,15 +197,20 @@ unsigned int set_cpu_affinity(void)
 	cpu_set_t *set;
 	size_t size;
 	int nrcpus = 1024;
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 realloc:
 	set = CPU_ALLOC(nrcpus);
 #else
 	set = malloc(sizeof(cpu_set_t));
 #endif
+#else
+	set = malloc(sizeof(cpu_set_t));
+#endif
 	if (set == NULL) {
 		tst_brkm(TFAIL, NULL, "CPU_ALLOC:errno:%d", errno);
 	}
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 	size = CPU_ALLOC_SIZE(nrcpus);
 	CPU_ZERO_S(size, set);
@@ -207,8 +218,13 @@ realloc:
 	size = sizeof(cpu_set_t);
 	CPU_ZERO(set);
 #endif
+#else
+	size = sizeof(cpu_set_t);
+	CPU_ZERO(set);
+#endif
 	if (sched_getaffinity(0, size, set) < 0) {
 		CPU_FREE(set);
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 		if (errno == EINVAL && nrcpus < (1024 << 8)) {
 			nrcpus = nrcpus << 2;
@@ -220,10 +236,17 @@ realloc:
 				 "NR_CPUS of the kernel is more than 1024, so we'd better use a newer glibc(>= 2.7)");
 		else
 #endif
+#else
+		if (errno == EINVAL)
+			tst_resm(TFAIL,
+				 "NR_CPUS of the kernel is more than 1024, so we'd better use a newer glibc(>= 2.7)");
+		else
+#endif
 			tst_resm(TFAIL, "sched_getaffinity:errno:%d", errno);
 		tst_exit();
 	}
 	cpu_max = max_cpuid(size, set);
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 	CPU_ZERO_S(size, set);
 	CPU_SET_S(cpu_max, size, set);
@@ -231,6 +254,10 @@ realloc:
 	CPU_ZERO(set);
 	CPU_SET(cpu_max, set);
 #endif
+#else
+	CPU_ZERO(set);
+	CPU_SET(cpu_max, set);
+#endif
 	if (sched_setaffinity(0, size, set) < 0) {
 		CPU_FREE(set);
 		tst_brkm(TFAIL, NULL, "sched_setaffinity:errno:%d", errno);
@@ -247,11 +274,15 @@ unsigned int max_cpuid(size_t size, cpu_set_t * set)
 {
 	unsigned int index, max = 0;
 	for (index = 0; index < size * BITS_PER_BYTE; index++)
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 		if (CPU_ISSET_S(index, size, set))
 #else
 		if (CPU_ISSET(index, set))
 #endif
+#else
+		if (CPU_ISSET(index, set))
+#endif
 			max = index;
 	return max;
 }
testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c +26 -0
index 9d6a81a..4ed13b2 100644
@@ -66,9 +66,11 @@ do { \
 	tst_resm((TEST_RETURN == -1 ? TPASS : TFAIL) | TTERRNO, #t); \
 } while (0)
 
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if !(__GLIBC_PREREQ(2, 7))
 #define CPU_FREE(ptr)	free(ptr)
 #endif
+#endif
 
 int main(int ac, char **av)
 {
@@ -95,14 +97,19 @@ static void do_test(void)
 	pid_t unused_pid;
 	unsigned len;
 
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 realloc:
 	mask = CPU_ALLOC(nrcpus);
 #else
 	mask = malloc(sizeof(cpu_set_t));
 #endif
+#else
+	mask = malloc(sizeof(cpu_set_t));
+#endif
 	if (mask == NULL)
 		tst_brkm(TFAIL | TTERRNO, cleanup, "fail to get enough memory");
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 	len = CPU_ALLOC_SIZE(nrcpus);
 	CPU_ZERO_S(len, mask);
@@ -110,10 +117,15 @@ realloc:
 	len = sizeof(cpu_set_t);
 	CPU_ZERO(mask);
 #endif
+#else
+	len = sizeof(cpu_set_t);
+	CPU_ZERO(mask);
+#endif
 	/* positive test */
 	TEST(sched_getaffinity(0, len, mask));
 	if (TEST_RETURN == -1) {
 		CPU_FREE(mask);
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 		if (errno == EINVAL && nrcpus < (1024 << 8)) {
 			nrcpus = nrcpus << 2;
@@ -125,17 +137,27 @@ realloc:
 				 "newer glibc(>= 2.7)");
 		else
 #endif
+#else
+		if (errno == EINVAL)
+			tst_resm(TFAIL, "NR_CPUS > 1024, we'd better use a "
+				 "newer glibc(>= 2.7)");
+		else
+#endif
 			tst_resm(TFAIL | TTERRNO, "fail to get cpu affinity");
 		cleanup();
 	} else {
 		tst_resm(TINFO, "cpusetsize is %d", len);
 		tst_resm(TINFO, "mask.__bits[0] = %lu ", mask->__bits[0]);
 		for (i = 0; i < num; i++) {
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 			TEST(CPU_ISSET_S(i, len, mask));
 #else
 			TEST(CPU_ISSET(i, mask));
 #endif
+#else
+			TEST(CPU_ISSET(i, mask));
+#endif
 			if (TEST_RETURN != -1)
 				tst_resm(TPASS, "sched_getaffinity() succeed, "
 					 "this process %d is running "
@@ -143,11 +165,15 @@ realloc:
 		}
 	}
 
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if __GLIBC_PREREQ(2, 7)
 	CPU_ZERO_S(len, mask);
 #else
 	CPU_ZERO(mask);
 #endif
+#else
+	CPU_ZERO(mask);
+#endif
 	/* negative tests */
 	QUICK_TEST(sched_getaffinity(0, len, (cpu_set_t *) - 1));
 	QUICK_TEST(sched_getaffinity(0, 0, mask));
Signature · 1 line
2.7.0
#13 lore raw

PATCH v2 8/32 Check if __GLIBC_PREREQ is defined before using it

Hi!

Quoted 34 lines
testcases/kernel/syscalls/accept4/accept4_01.c +3 -1
index 6072bfa..2b090cb 100644
@@ -64,6 +64,7 @@ static void cleanup(void)
 	tst_rmdir();
 }
 
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if !(__GLIBC_PREREQ(2, 10))
 static int
 accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)
@@ -82,7 +83,6 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)
 	}
 	tst_resm(TINFO, "\n");
 #endif
-
 #if USE_SOCKETCALL
 	long args[6];
 
@@ -97,6 +97,7 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)
 #endif
 }
 #endif
+#endif
 
 static void
 do_test(int lfd, struct sockaddr_in *conn_addr,
@@ -119,9 +120,15 @@ do_test(int lfd, struct sockaddr_in *conn_addr,
 		die("Connect Error");
 
 	addrlen = sizeof(struct sockaddr_in);
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
 #if !(__GLIBC_PREREQ(2, 10))

testcases/kernel/syscalls/accept4/accept4_01.c do_test(int lfd, struct sockaddr_in *conn_addr, · line 134

Quoted 10 lines
testcases/kernel/syscalls/accept4/accept4_01.c +5 -0
 	acceptfd = accept4_01(lfd, (struct sockaddr *)&claddr, &addrlen,
 			      closeonexec_flag | nonblock_flag);
+
+#else
+	acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen,
+			   closeonexec_flag | nonblock_flag);
+#endif
 #else
 	acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen,
 			   closeonexec_flag | nonblock_flag);

This should be ideally converted to configure check for accept4() rather than adding more #ifdefs around.

testcases/kernel/syscalls/getcpu/getcpu01.c

Quoted 4 lines
testcases/kernel/syscalls/getcpu/getcpu01.c +0 -0
index c927512..6de6362 100644

We allready have fallback definitions for the CPU_SET* macros in testcases/kernel/syscalls/sched_setaffinity/sched_setaffinity.h the header should be moved to include/lapi/cpu_set.h and included in all the testcases so that we can drop most of these GLIBC_PREREQ() instead of adding more #ifdefs around.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#14 lore raw

PATCH v2 9/32 Guard error.h with __GLIBC__

In reply to Khem Raj

error API is specific to glibc so use the guard to make it conditional on glibc

---
 testcases/kernel/syscalls/faccessat/faccessat01.c   | 2 ++
 testcases/kernel/syscalls/fallocate/fallocate01.c   | 2 ++
 testcases/kernel/syscalls/fchmodat/fchmodat01.c     | 2 ++
 testcases/kernel/syscalls/fchownat/fchownat01.c     | 2 ++
 testcases/kernel/syscalls/fchownat/fchownat02.c     | 2 ++
 testcases/kernel/syscalls/fstatat/fstatat01.c       | 2 ++
 testcases/kernel/syscalls/futimesat/futimesat01.c   | 2 ++
 testcases/kernel/syscalls/linkat/linkat01.c         | 2 ++
 testcases/kernel/syscalls/linkat/linkat02.c         | 2 ++
 testcases/kernel/syscalls/mkdirat/mkdirat01.c       | 2 ++
 testcases/kernel/syscalls/mknodat/mknodat01.c       | 2 ++
 testcases/kernel/syscalls/mknodat/mknodat02.c       | 2 ++
 testcases/kernel/syscalls/openat/openat01.c         | 2 ++
 testcases/kernel/syscalls/readlinkat/readlinkat01.c | 2 ++
 testcases/kernel/syscalls/renameat/renameat01.c     | 2 ++
 testcases/kernel/syscalls/symlinkat/symlinkat01.c   | 2 ++
 testcases/kernel/syscalls/unlinkat/unlinkat01.c     | 2 ++
 17 files changed, 34 insertions(+)
testcases/kernel/syscalls/faccessat/faccessat01.c +2 -0
index 7f0e87a..c72dcf0 100644
@@ -37,7 +37,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/fallocate/fallocate01.c +2 -0
index e72b123..643c0e2 100644
@@ -96,7 +96,9 @@
 #include <fcntl.h>
 #include <sys/syscall.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <inttypes.h>
 #include <sys/utsname.h>
 
testcases/kernel/syscalls/fchmodat/fchmodat01.c +2 -0
index 19e9ad5..ae6d807 100644
@@ -37,7 +37,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/fchownat/fchownat01.c +2 -0
index b361253..a5218af 100644
@@ -28,7 +28,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/fchownat/fchownat02.c +2 -0
index 6b0304c..8d2863f 100644
@@ -26,7 +26,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/fstatat/fstatat01.c +2 -0
index 61531c6..e99fbd2 100644
@@ -48,7 +48,9 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/futimesat/futimesat01.c +2 -0
index ae8d4fe..316dd78 100644
@@ -37,7 +37,9 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/linkat/linkat01.c +2 -0
index fc0687b..83cbfe7 100644
@@ -49,7 +49,9 @@
 #include <sys/time.h>
 #include <fcntl.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/linkat/linkat02.c +2 -0
index e9a752a..8d7e431 100644
@@ -23,7 +23,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/mkdirat/mkdirat01.c +2 -0
index 7e15947..1dbc038 100644
@@ -30,7 +30,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/mknodat/mknodat01.c +2 -0
index 26e5538..f034f05 100644
@@ -29,7 +29,9 @@
 #include <sys/types.h>
 #include <fcntl.h>
 #include <sys/stat.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/mknodat/mknodat02.c +2 -0
index f6368fa..7d0f7c0 100644
@@ -29,7 +29,9 @@
 #include <sys/types.h>
 #include <fcntl.h>
 #include <sys/stat.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/openat/openat01.c +2 -0
index 85f9a91..4ee0117 100644
@@ -29,7 +29,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/readlinkat/readlinkat01.c +2 -0
index 97a49e8..b162853 100644
@@ -29,7 +29,9 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/renameat/renameat01.c +2 -0
index f4cd51b..105a05b 100644
@@ -42,7 +42,9 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/symlinkat/symlinkat01.c +2 -0
index 5c238d8..cb7a7e8 100644
@@ -37,7 +37,9 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
testcases/kernel/syscalls/unlinkat/unlinkat01.c +2 -0
index 31fe4e7..26f6d9a 100644
@@ -37,7 +37,9 @@
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#ifdef __GLIBC__
 #include <error.h>
+#endif
 #include <stdlib.h>
 #include <errno.h>
 #include <string.h>
Signature · 1 line
2.7.0
#15 lore raw

PATCH v2 9/32 Guard error.h with __GLIBC__

Hi!

Quoted 2 lines

error API is specific to glibc so use the guard to make it conditional on glibc

I've looked at fist three tests in question and none of them actually uses the error() function defined in error.h.

So the right thing to do here is to remove the #include <error.h> line from the testcases.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#16 lore raw

PATCH v2 10/32 replace __BEGIN_DECLS and __END_DECLS

In reply to Khem Raj

They are not portable across libc implementations
therefore replace them with expanded macros

Include <asm-generic/types.h> to get __s32 definitions its not a generally available typedef

---
 testcases/kernel/syscalls/epoll2/include/epoll.h | 8 ++++++--
 utils/sctp/include/netinet/sctp.h                | 9 +++++++--
 2 files changed, 13 insertions(+), 4 deletions(-)
testcases/kernel/syscalls/epoll2/include/epoll.h +6 -2
index be599c7..8cc5e7e 100644
@@ -85,7 +85,9 @@ struct epoll_event
 } EPOLL_PACKED;
 
 
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* Creates an epoll instance.  Returns an fd for the new instance.
    The "size" parameter is a hint specifying the number of file
@@ -114,6 +116,8 @@ extern int epoll_ctl (int __epfd, int __op, int __fd,
 extern int epoll_wait (int __epfd, struct epoll_event *__events,
 		       int __maxevents, int __timeout) __THROW;
 
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* sys/epoll.h */
utils/sctp/include/netinet/sctp.h +7 -2
index 51f5bfb..c61aef3 100644
@@ -35,9 +35,12 @@
 
 #include <stdint.h>
 #include <linux/types.h>
+#include <asm-generic/types.h>
 #include <sys/socket.h>
 
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 typedef __s32 sctp_assoc_t;
 
@@ -862,6 +865,8 @@ int sctp_recvmsg(int s, void *msg, size_t len, struct sockaddr *from,
 /* Return the address length for an address family. */
 int sctp_getaddrlen(sa_family_t family);
 
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* __linux_sctp_h__ */
Signature · 1 line
2.7.0
#17 lore raw

PATCH v2 10/32 replace __BEGIN_DECLS and __END_DECLS

Hi!

Quoted 2 lines

They are not portable across libc implementations
therefore replace them with expanded macros

There is not C++ source including these headers, just remove these instead.

Quoted 2 lines

Include <asm-generic/types.h> to get __s32 definitions its not a generally available typedef

Please use int32_t from stdint.h instead.
(And this should ideally be separate patch)

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#18 lore raw

PATCH v2 11/32 Rename sigset variable to sigset1

In reply to Khem Raj

sigset API from signal.h is shadowed by this name conflict

---
 testcases/kernel/mem/shmt/shmt04.c                    | 10 +++++-----
 testcases/kernel/mem/shmt/shmt06.c                    | 10 +++++-----
 testcases/kernel/syscalls/sigprocmask/sigprocmask01.c | 10 +++++-----
 3 files changed, 15 insertions(+), 15 deletions(-)
testcases/kernel/mem/shmt/shmt04.c +5 -5
index 7203e9e..fce87d6 100644
@@ -56,7 +56,7 @@ int TST_TOTAL = 2;		/* Total number of test cases. */
 /**************/
 
 key_t key;
-sigset_t sigset;
+sigset_t sigset1;
 
 #define  SIZE  16*1024
 
@@ -71,9 +71,9 @@ int main(void)
 
 	key = (key_t) getpid();
 
-	sigemptyset(&sigset);
-	sigaddset(&sigset, SIGUSR1);
-	sigprocmask(SIG_BLOCK, &sigset, NULL);
+	sigemptyset(&sigset1);
+	sigaddset(&sigset1, SIGUSR1);
+	sigprocmask(SIG_BLOCK, &sigset1, NULL);
 
 	pid = fork();
 	switch (pid) {
@@ -148,7 +148,7 @@ int child(void)
 	char *cp;
 	int sig;
 
-	sigwait(&sigset, &sig);
+	sigwait(&sigset1, &sig);
 	chld_pid = getpid();
 /*--------------------------------------------------------*/
 
testcases/kernel/mem/shmt/shmt06.c +5 -5
index a3c9ca3..77b0fc9 100644
@@ -57,7 +57,7 @@ int TST_TOTAL = 2;		/* Total number of test cases. */
 /**************/
 
 key_t key;
-sigset_t sigset;
+sigset_t sigset1;
 
 int child();
 static int rm_shm(int);
@@ -70,9 +70,9 @@ int main(void)
 
 	key = (key_t) getpid();
 
-	sigemptyset(&sigset);
-	sigaddset(&sigset, SIGUSR1);
-	sigprocmask(SIG_BLOCK, &sigset, NULL);
+	sigemptyset(&sigset1);
+	sigaddset(&sigset1, SIGUSR1);
+	sigprocmask(SIG_BLOCK, &sigset1, NULL);
 
 	pid = fork();
 	switch (pid) {
@@ -147,7 +147,7 @@ int child(void)
 	char *cp;
 	int sig;
 
-	sigwait(&sigset, &sig);
+	sigwait(&sigset1, &sig);
 	chld_pid = getpid();
 
 	if ((shmid = shmget(key, SIZE, 0)) < 0) {
testcases/kernel/syscalls/sigprocmask/sigprocmask01.c +5 -5
index 20fca52..6fb1d57 100644
@@ -91,7 +91,7 @@ int TST_TOTAL = 1;
 int sig_catch = 0;		/* variable to blocked/unblocked signals */
 
 struct sigaction sa_new;	/* struct to hold signal info */
-sigset_t sigset;		/* signal set to hold signal lists */
+sigset_t sigset1;		/* signal set to hold signal lists */
 sigset_t sigset2;
 
 int main(int ac, char **av)
@@ -112,7 +112,7 @@ int main(int ac, char **av)
 		 * so that, signal will not be delivered to
 		 * the test process.
 		 */
-		TEST(sigprocmask(SIG_BLOCK, &sigset, 0));
+		TEST(sigprocmask(SIG_BLOCK, &sigset1, 0));
 
 		/* Get the process id of test process */
 		my_pid = getpid();
@@ -165,7 +165,7 @@ int main(int ac, char **av)
 				 */
 				errno = 0;
 				if (sigprocmask(SIG_UNBLOCK,
-						&sigset, 0) == -1) {
+						&sigset1, 0) == -1) {
 					tst_brkm(TFAIL, cleanup,
 						 "sigprocmask() failed "
 						 "to unblock signal, "
@@ -212,7 +212,7 @@ void setup(void)
 	 * Initialise the signal sets with the list that
 	 * excludes/includes  all system-defined signals.
 	 */
-	if (sigemptyset(&sigset) == -1) {
+	if (sigemptyset(&sigset1) == -1) {
 		tst_brkm(TFAIL, cleanup,
 			 "sigemptyset() failed, errno=%d : %s",
 			 errno, strerror(errno));
@@ -235,7 +235,7 @@ void setup(void)
 	 * Add specified signal (SIGINT) to the signal set
 	 * which excludes system-defined signals.
 	 */
-	if (sigaddset(&sigset, SIGINT) == -1) {
+	if (sigaddset(&sigset1, SIGINT) == -1) {
 		tst_brkm(TFAIL, cleanup,
 			 "sigaddset() failed, errno=%d : %s",
 			 errno, strerror(errno));
Signature · 1 line
2.7.0
author
#19 lore raw

PATCH v2 12/32 fsstress.c: Replace __int64_t with int64_t

In reply to Khem Raj

int64_t is defined in ISO C99
include limits.h to get defintions of PATH_MAX

---
 testcases/kernel/fs/fsstress/fsstress.c       | 31 +++++++++---------
 testcases/network/nfs/nfs_fsstress/fsstress.c | 47 ++++++++++++++-------------
 2 files changed, 40 insertions(+), 38 deletions(-)
testcases/kernel/fs/fsstress/fsstress.c +16 -15
index 2f89903..89f0b19 100644
@@ -36,6 +36,7 @@
 #ifdef HAVE_SYS_PRCTL_H
 # include <sys/prctl.h>
 #endif
+#include <limits.h>
 
 #define XFS_ERRTAG_MAX		17
 
@@ -1572,7 +1573,7 @@ void bulkstat_f(int opno, long r)
 	__u64 last;
 	__s32 nent;
 	xfs_bstat_t *t;
-	__int64_t total;
+	int64_t total;
 	xfs_fsop_bulkreq_t bsr;
 
 	last = 0;
@@ -1764,14 +1765,14 @@ int setdirect(int fd)
 
 void dread_f(int opno, long r)
 {
-	__int64_t align;
+	int64_t align;
 	char *buf = NULL;
 	struct dioattr diob;
 	int e;
 	pathname_t f;
 	int fd;
 	size_t len;
-	__int64_t lr;
+	int64_t lr;
 	off64_t off;
 	struct stat64 stb;
 	int v;
@@ -1835,8 +1836,8 @@ void dread_f(int opno, long r)
 		return;
 	}
 #endif
-	align = (__int64_t) diob.d_miniosz;
-	lr = ((__int64_t) random() << 32) + random();
+	align = (int64_t) diob.d_miniosz;
+	lr = ((int64_t) random() << 32) + random();
 	off = (off64_t) (lr % stb.st_size);
 	off -= (off % align);
 	lseek64(fd, off, SEEK_SET);
@@ -1865,14 +1866,14 @@ void dread_f(int opno, long r)
 
 void dwrite_f(int opno, long r)
 {
-	__int64_t align;
+	int64_t align;
 	char *buf = NULL;
 	struct dioattr diob;
 	int e;
 	pathname_t f;
 	int fd;
 	size_t len;
-	__int64_t lr;
+	int64_t lr;
 	off64_t off;
 	struct stat64 stb;
 	int v;
@@ -1925,8 +1926,8 @@ void dwrite_f(int opno, long r)
 		return;
 	}
 #endif
-	align = (__int64_t) diob.d_miniosz;
-	lr = ((__int64_t) random() << 32) + random();
+	align = (int64_t) diob.d_miniosz;
+	lr = ((int64_t) random() << 32) + random();
 	off = (off64_t) (lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
 	off -= (off % align);
 	lseek64(fd, off, SEEK_SET);
@@ -2224,7 +2225,7 @@ void read_f(int opno, long r)
 	pathname_t f;
 	int fd;
 	size_t len;
-	__int64_t lr;
+	int64_t lr;
 	off64_t off;
 	struct stat64 stb;
 	int v;
@@ -2262,7 +2263,7 @@ void read_f(int opno, long r)
 		close(fd);
 		return;
 	}
-	lr = ((__int64_t) random() << 32) + random();
+	lr = ((int64_t) random() << 32) + random();
 	off = (off64_t) (lr % stb.st_size);
 	lseek64(fd, off, SEEK_SET);
 	len = (random() % (getpagesize() * 32)) + 1;
@@ -2509,7 +2510,7 @@ void truncate_f(int opno, long r)
 {
 	int e;
 	pathname_t f;
-	__int64_t lr;
+	int64_t lr;
 	off64_t off;
 	struct stat64 stb;
 	int v;
@@ -2530,7 +2531,7 @@ void truncate_f(int opno, long r)
 		free_pathname(&f);
 		return;
 	}
-	lr = ((__int64_t) random() << 32) + random();
+	lr = ((int64_t) random() << 32) + random();
 	off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE);
 	off %= maxfsize;
 	e = truncate64_path(&f, off) < 0 ? errno : 0;
@@ -2626,7 +2627,7 @@ void write_f(int opno, long r)
 	pathname_t f;
 	int fd;
 	size_t len;
-	__int64_t lr;
+	int64_t lr;
 	off64_t off;
 	struct stat64 stb;
 	int v;
@@ -2656,7 +2657,7 @@ void write_f(int opno, long r)
 		close(fd);
 		return;
 	}
-	lr = ((__int64_t) random() << 32) + random();
+	lr = ((int64_t) random() << 32) + random();
 	off = (off64_t) (lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE));
 	off %= maxfsize;
 	lseek64(fd, off, SEEK_SET);
testcases/network/nfs/nfs_fsstress/fsstress.c +24 -23

179 lines not on this page · raw message

Signature · 1 line
2.7.0
author
#20 lore raw

PATCH v2 13/32 include fcntl.h for getting O_* definitions

In reply to Khem Raj

musl exposes this issue, with glibc fcntl.h is included via some other header and this problem remained latent

---
 testcases/kernel/ipc/ipc_stress/shmem_test_03.c   | 1 +
 testcases/kernel/syscalls/mq_notify/mq_notify01.c | 1 +
 testcases/network/tcp_cmds/sendfile/testsf_c.c    | 1 +
 testcases/network/tcp_cmds/sendfile/testsf_s.c    | 1 +
 4 files changed, 4 insertions(+)
testcases/kernel/ipc/ipc_stress/shmem_test_03.c +1 -0
index c1b11fd..8be156f 100644
@@ -72,6 +72,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <limits.h>
+#include <fcntl.h>
 #include <sys/file.h>
 #include <sys/ipc.h>
 #include <sys/mman.h>
testcases/kernel/syscalls/mq_notify/mq_notify01.c +1 -0
index 4728c70..5c7846c 100644
@@ -41,6 +41,7 @@
 #include <mqueue.h>
 #include <signal.h>
 #include <stdlib.h>
+#include <fcntl.h>
 
 #include "../utils/include_j_h.h"
 
testcases/network/tcp_cmds/sendfile/testsf_c.c +1 -0
index 449784f..38d3274 100644
@@ -9,6 +9,7 @@
 #include <sys/types.h>
 #include <stdlib.h>
 #include <string.h>
+#include <fcntl.h>
 #include <sys/file.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
testcases/network/tcp_cmds/sendfile/testsf_s.c +1 -0
index 17e98ad..bce8dd1 100644
@@ -6,6 +6,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
+#include <fcntl.h>
 #include <sys/file.h>
 #include <errno.h>
 #include <sys/signal.h>
Signature · 1 line
2.7.0
author
#21 lore raw

PATCH v2 14/32 hyperthreading: Include sys/types.h for pid_t definition

In reply to Khem Raj

If sys/types.h is not included then it will not define pid_t_needed and therefore typedef wont be included and we get errors about pid_t being not known

---
 testcases/kernel/sched/hyperthreading/ht_affinity/ht_utils.h  | 1 +
 testcases/kernel/sched/hyperthreading/ht_enabled/ht_utils.h   | 1 +
 testcases/kernel/sched/hyperthreading/ht_interrupt/ht_utils.h | 1 +
 3 files changed, 3 insertions(+)
testcases/kernel/sched/hyperthreading/ht_affinity/ht_utils.h +1 -0
index 1ec9794..9084aa7 100644
@@ -3,6 +3,7 @@
 #define _HTUTILS_H_
 
 #include <stdlib.h>
+#include <sys/types.h>
 
 int is_cmdline_para(const char *para);
 
testcases/kernel/sched/hyperthreading/ht_enabled/ht_utils.h +1 -0
index 1ec9794..c03a124 100644
@@ -2,6 +2,7 @@
 #ifndef _HTUTILS_H_
 #define _HTUTILS_H_
 
+#include <sys/types.h>
 #include <stdlib.h>
 
 int is_cmdline_para(const char *para);
testcases/kernel/sched/hyperthreading/ht_interrupt/ht_utils.h +1 -0
index 2977ad0..6b484e1 100644
@@ -3,6 +3,7 @@
 #define _HTUTILS_H_
 
 #include <stdlib.h>
+#include <sys/types.h>
 
 int is_cmdline_para(const char *para);
 
Signature · 1 line
2.7.0
author
#22 lore raw

PATCH v2 15/32 mincore01: Rename PAGESIZE to pagesize

In reply to Khem Raj

PAGESIZE conflicts with system headers on musl

---
 testcases/kernel/syscalls/mincore/mincore01.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
testcases/kernel/syscalls/mincore/mincore01.c +5 -5
index 97a3d95..fa426d1 100644
@@ -45,7 +45,7 @@
 #include "test.h"
 #include "safe_macros.h"
 
-static int PAGESIZE;
+static int pagesize;
 static rlim_t STACK_LIMIT = 10485760;
 
 static void cleanup(void);
@@ -146,7 +146,7 @@ static void setup4(struct test_case_t *tc)
 	}
 
 	tc->addr = global_pointer;
-	tc->len = as_lim.rlim_cur - (rlim_t)global_pointer + PAGESIZE;
+	tc->len = as_lim.rlim_cur - (rlim_t)global_pointer + pagesize;
 	tc->vector = global_vec;
 
 	/*
@@ -161,7 +161,7 @@ static void setup(void)
 	char *buf;
 	int fd;
 
-	PAGESIZE = getpagesize();
+	pagesize = getpagesize();
 
 	tst_sig(NOFORK, DEF_HANDLER, cleanup);
 
@@ -170,7 +170,7 @@ static void setup(void)
 	TEST_PAUSE;
 
 	/* global_pointer will point to a mmapped area of global_len bytes */
-	global_len = PAGESIZE * 2;
+	global_len = pagesize * 2;
 
 	buf = SAFE_MALLOC(cleanup, global_len);
 	memset(buf, 42, global_len);
@@ -186,7 +186,7 @@ static void setup(void)
 				   PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
 
 	global_vec = SAFE_MALLOC(cleanup,
-				 (global_len + PAGESIZE - 1) / PAGESIZE);
+				 (global_len + pagesize - 1) / pagesize);
 
 	SAFE_CLOSE(cleanup, fd);
 }
Signature · 1 line
2.7.0
#23 lore raw

PATCH v2 15/32 mincore01: Rename PAGESIZE to pagesize

Hi!

Quoted 1 line

PAGESIZE conflicts with system headers on musl

I've pushed this patch, but I think that it should be reported as musl bug as well, since IMHO the only public visible identificators defined by libc should be the UNIX/Linux API as defined in manuals and identifiers starting with underscore (for internal definitions).

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#24 lore raw

PATCH v2 16/32 ustat: Change header from ustat.h to sys/ustat.h

In reply to Khem Raj

makes it portable for musl, on glibc ustat.h is just including sys/ustat.h too

---
 testcases/kernel/syscalls/ustat/ustat01.c | 2 +-
 testcases/kernel/syscalls/ustat/ustat02.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
testcases/kernel/syscalls/ustat/ustat01.c +1 -1
index 01b7688..494647b 100644
@@ -20,8 +20,8 @@
  */
 
 #include <unistd.h>
-#include <ustat.h>
 #include <errno.h>
+#include <sys/ustat.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include "test.h"
testcases/kernel/syscalls/ustat/ustat02.c +1 -1
index 4e66236..edada31 100644
@@ -21,8 +21,8 @@
  */
 
 #include <unistd.h>
-#include <ustat.h>
 #include <errno.h>
+#include <sys/ustat.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include "test.h"
Signature · 1 line
2.7.0
author
#25 lore raw

PATCH v2 17/32 replace sigval_t with union sigval

In reply to Khem Raj

This makes it compatible across musl and glibc

---
 testcases/kernel/syscalls/timer_getoverrun/timer_getoverrun01.c | 2 +-
 testcases/kernel/syscalls/timer_gettime/timer_gettime01.c       | 2 +-
 testcases/kernel/timers/timer_create/timer_create02.c           | 4 ++--
 testcases/kernel/timers/timer_create/timer_create03.c           | 4 ++--
 4 files changed, 6 insertions(+), 6 deletions(-)
testcases/kernel/syscalls/timer_getoverrun/timer_getoverrun01.c +1 -1
index d186c1f..bc03544 100644
@@ -54,7 +54,7 @@ int main(int ac, char **av)
 
 	setup();
 
-	ev.sigev_value = (sigval_t) 0;
+	ev.sigev_value = (union sigval) 0;
 	ev.sigev_signo = SIGALRM;
 	ev.sigev_notify = SIGEV_SIGNAL;
 	TEST(ltp_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
testcases/kernel/syscalls/timer_gettime/timer_gettime01.c +1 -1
index b583aee..9371a6a 100644
@@ -55,7 +55,7 @@ int main(int ac, char **av)
 
 	setup();
 
-	ev.sigev_value = (sigval_t) 0;
+	ev.sigev_value = (union sigval) 0;
 	ev.sigev_signo = SIGALRM;
 	ev.sigev_notify = SIGEV_SIGNAL;
 	TEST(ltp_syscall(__NR_timer_create, CLOCK_REALTIME, &ev, &timer));
testcases/kernel/timers/timer_create/timer_create02.c +2 -2
index 7f528ed..1127400 100644
@@ -142,7 +142,7 @@ void setup_test(int option)
 {
 	switch (option) {
 	case 0:
-		evp.sigev_value = (sigval_t) 0;
+		evp.sigev_value = (union sigval) 0;
 		evp.sigev_signo = SIGALRM;
 		evp.sigev_notify = SIGEV_SIGNAL;
 		evp_ptr = &evp;
@@ -151,7 +151,7 @@ void setup_test(int option)
 		evp_ptr = NULL;
 		break;
 	case 2:
-		evp.sigev_value = (sigval_t) 0;
+		evp.sigev_value = (union sigval) 0;
 		evp.sigev_signo = SIGALRM;	/* any will do */
 		evp.sigev_notify = SIGEV_NONE;
 		evp_ptr = &evp;
testcases/kernel/timers/timer_create/timer_create03.c +2 -2
index 291fcfa..8b01bf7 100644
@@ -129,7 +129,7 @@ void setup_test(int option)
 {
 	switch (option) {
 	case 0:
-		evp.sigev_value = (sigval_t) 0;
+		evp.sigev_value = (union sigval) 0;
 		evp.sigev_signo = SIGALRM;
 		evp.sigev_notify = SIGEV_SIGNAL;
 		evp_ptr = &evp;
@@ -138,7 +138,7 @@ void setup_test(int option)
 		evp_ptr = NULL;
 		break;
 	case 2:
-		evp.sigev_value = (sigval_t) 0;
+		evp.sigev_value = (union sigval) 0;
 		evp.sigev_signo = SIGALRM;	/* any will do */
 		evp.sigev_notify = SIGEV_NONE;
 		evp_ptr = &evp;
Signature · 1 line
2.7.0
author
#26 lore raw

PATCH v2 18/32 guard mallocopt() with __GLIBC__

In reply to Khem Raj

mallocopt is not available on non glibc implementations

---
 utils/benchmark/ebizzy-0.3/ebizzy.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
utils/benchmark/ebizzy-0.3/ebizzy.c +2 -2
index 5bb8eff..934d951 100644
@@ -215,10 +215,10 @@ static void read_options(int argc, char *argv[])
 			"\"never mmap\" option specified\n");
 		usage();
 	}
-
+#ifdef __GLIBC__
 	if (never_mmap)
 		mallopt(M_MMAP_MAX, 0);
-
+#endif
 	if (chunk_size < record_size) {
 		fprintf(stderr, "Chunk size %u smaller than record size %u\n",
 			chunk_size, record_size);
Signature · 1 line
2.7.0
#27 lore raw

PATCH v2 18/32 guard mallocopt() with __GLIBC__

Hi!

Quoted 9 lines
---
 utils/benchmark/ebizzy-0.3/ebizzy.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
utils/benchmark/ebizzy-0.3/ebizzy.c +0 -0
index 5bb8eff..934d951 100644

utils/benchmark/ebizzy-0.3/ebizzy.c static void read_options(int argc, char *argv[]) · line 221

Quoted 9 lines
utils/benchmark/ebizzy-0.3/ebizzy.c +2 -2
@@ -215,10 +215,10 @@ static void read_options(int argc, char *argv[])
 			"\"never mmap\" option specified\n");
 		usage();
 	}
-
+#ifdef __GLIBC__
 	if (never_mmap)
 		mallopt(M_MMAP_MAX, 0);
-
+#endif

Silently ignoring user switches is not a good practice. You should at least print warning that the functionality is not supported.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#28 lore raw

PATCH v2 19/32 tomoyo: Replace canonicalize_file_name() with realpath()

In reply to Khem Raj

canonicalize_file_name() API is specific to glibc

---
 testcases/kernel/security/tomoyo/tomoyo_filesystem_test.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
testcases/kernel/security/tomoyo/tomoyo_filesystem_test.c +2 -2
index da4af0f..5c1a3ca 100644
@@ -274,9 +274,9 @@ int main(int argc, char *argv[])
 	/* Test mount(). */
 	{
 		static char buf[4096];
-		char *dev_ram_path = canonicalize_file_name("/dev/ram0");
+		char *dev_ram_path = realpath("/dev/ram0", NULL);
 		if (!dev_ram_path)
-			dev_ram_path = canonicalize_file_name("/dev/ram");
+			dev_ram_path = realpath("/dev/ram", NULL);
 		if (!dev_ram_path) {
 			dev_ram_path = "/dev/ram0";
 			mknod(dev_ram_path, S_IFBLK, MKDEV(1, 0));
Signature · 1 line
2.7.0
author
#29 lore raw

PATCH v2 20/32 getdents: define getdents/getdents64 only for glibc

In reply to Khem Raj

getdents/getdents64 are implemented in musl and when we define static functions with same name, it errors out.

---
 testcases/kernel/syscalls/getdents/getdents.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
testcases/kernel/syscalls/getdents/getdents.h +4 -2
index abea655..db63d89 100644
@@ -34,12 +34,13 @@ struct linux_dirent {
 	char            d_name[];
 };
 
+#ifdef __GLIBC__
 static inline int
 getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int size)
 {
 	return ltp_syscall(__NR_getdents, fd, dirp, size);
 }
-
+#endif
 struct linux_dirent64 {
 	uint64_t	d_ino;
 	int64_t		d_off;
@@ -48,10 +49,11 @@ struct linux_dirent64 {
 	char		d_name[];
 };
 
+#ifdef __GLIBC__
 static inline int
 getdents64(unsigned int fd, struct linux_dirent64 *dirp64, unsigned int size)
 {
 	return ltp_syscall(__NR_getdents64, fd, dirp64, size);
 }
-
+#endif
 #endif /* GETDENTS_H */
Signature · 1 line
2.7.0
#30 lore raw

PATCH v2 20/32 getdents: define getdents/getdents64 only for glibc

Hi!

Quoted 2 lines

getdents/getdents64 are implemented in musl and when we define static functions with same name, it errors out.

It would be better if this was a configure check and moved to include/lapi/ where the rest of the fallback definitions is.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#31 lore raw

PATCH v2 21/32 Define _GNU_SOURCE for MREMAP_MAYMOVE definition

In reply to Khem Raj

musl guards MREMAP_MAYMOVE with _GNU_SOURCE unlike glibc which uses __USE_GNU

Fixes errors like
error: 'MREMAP_MAYMOVE' undeclared (first use in this function)

---
 testcases/kernel/syscalls/mremap/mremap01.c | 4 +++-
 testcases/kernel/syscalls/mremap/mremap02.c | 2 ++
 testcases/kernel/syscalls/mremap/mremap03.c | 2 ++
 3 files changed, 7 insertions(+), 1 deletion(-)
testcases/kernel/syscalls/mremap/mremap01.c +3 -1
index d63d1e4..24ca174 100644
@@ -76,10 +76,12 @@
  */
 #include <unistd.h>
 #include <errno.h>
+#include <fcntl.h>
+#define _GNU_SOURCE
 #define __USE_GNU
 #include <sys/mman.h>
 #undef __USE_GNU
-#include <fcntl.h>
+#undef _GNU_SOURCE
 
 #include "test.h"
 
testcases/kernel/syscalls/mremap/mremap02.c +2 -0
index 5a51b9a..a530a6b 100644
@@ -75,9 +75,11 @@
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
+#define _GNU_SOURCE
 #define __USE_GNU
 #include <sys/mman.h>
 #undef __USE_GNU
+#undef _GNU_SOURCE
 
 #include "test.h"
 
testcases/kernel/syscalls/mremap/mremap03.c +2 -0
index 12e3829..9b39f8b 100644
@@ -76,9 +76,11 @@
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
+#define _GNU_SOURCE
 #define __USE_GNU
 #include <sys/mman.h>
 #undef __USE_GNU
+#undef _GNU_SOURCE
 
 #include "test.h"
 
Signature · 1 line
2.7.0
#32 lore raw

PATCH v2 21/32 Define _GNU_SOURCE for MREMAP_MAYMOVE definition

Hi!

Quoted 5 lines

musl guards MREMAP_MAYMOVE with _GNU_SOURCE unlike glibc which uses __USE_GNU

Fixes errors like
error: 'MREMAP_MAYMOVE' undeclared (first use in this function)

This will break on glibc. The correct solution is to define the _GNU_SOURCE before we include any headers and there is no point in undefining it later. And the __USE_GNU is glibc internal macro that should not be set at all...

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#33 lore raw

PATCH v2 22/32 include sys/types.h

In reply to Khem Raj

Fixes

error: unknown type name 'uint'

---
 testcases/kernel/ipc/ipc_stress/shmem_test_04.c | 1 +
 1 file changed, 1 insertion(+)
testcases/kernel/ipc/ipc_stress/shmem_test_04.c +1 -0
index 72c2e60..e7e5f61 100644
@@ -65,6 +65,7 @@
 #include <signal.h>
 #include <stdint.h>
 #include <sys/mman.h>
+#include <sys/types.h>
 
 #ifdef _LINUX_
 typedef unsigned long ulong_t;
Signature · 1 line
2.7.0
#34 lore raw

PATCH v2 22/32 include sys/types.h

Hi!

Quoted 3 lines

Fixes

error: unknown type name 'uint'

Just use unsigned int instead.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#35 lore raw

PATCH v2 23/32 ptrace: Use int instead of enum __ptrace_request

In reply to Khem Raj

__ptrace_request is only available with glibc

---
 testcases/kernel/syscalls/ptrace/ptrace03.c           | 4 ++++
 testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h | 4 ++++
 2 files changed, 8 insertions(+)
testcases/kernel/syscalls/ptrace/ptrace03.c +4 -0
index a4028fc..f1880cd 100644
@@ -102,7 +102,11 @@ static pid_t unused_pid;
 static pid_t zero_pid;
 
 struct test_case_t {
+#ifdef __GLIBC__
 	enum __ptrace_request request;
+#else
+	int request;
+#endif
 	pid_t *pid;
 	int exp_errno;
 } test_cases[] = {
testcases/kernel/syscalls/ptrace/spawn_ptrace_child.h +4 -0
index ae538e9..85aa89d 100644
@@ -130,7 +130,11 @@ static char *strings[] = {
 	SPT(KILL)
 	SPT(SINGLESTEP)
 };
+#ifdef __GLIBC__
 static inline char *strptrace(enum __ptrace_request request)
+#else
+static inline char *strptrace(int request)
+#endif
 {
 	return strings[request];
 }
Signature · 1 line
2.7.0
#36 lore raw

PATCH v2 23/32 ptrace: Use int instead of enum __ptrace_request

Hi!

Quoted 1 line

__ptrace_request is only available with glibc

Hmm the 'man ptrace' states that the first parameter is the enum __ptrace_request, which hints that the type should be system defined...

But I'm not agains fixing this, however I find the #ifdef useless. Let's defined it as int everywhere instead.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#37 lore raw

PATCH v2 24/32 rt_sigaction/rt_sigprocmark: Define _GNU_SOURCE

In reply to Khem Raj

Fixes musl build failure e.g.
error: 'SA_NOMASK' undeclared here (not in a function)

---
 testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c     | 1 +
 testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c     | 2 +-
 testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c     | 1 +
 testcases/kernel/syscalls/rt_sigprocmask/rt_sigprocmask01.c | 1 +
 4 files changed, 4 insertions(+), 1 deletion(-)
testcases/kernel/syscalls/rt_sigaction/rt_sigaction01.c +1 -0
index 5cf89cc..bdcb91a 100644
@@ -28,6 +28,7 @@
 /*		sigset_t type.                       			      */
 /******************************************************************************/
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
testcases/kernel/syscalls/rt_sigaction/rt_sigaction02.c +1 -1
index a1da743..8a27a0f 100644
@@ -23,7 +23,7 @@
 /* Description: This tests the rt_sigaction() syscall                         */
 /*		rt_sigaction Expected EFAULT error check                      */
 /******************************************************************************/
-
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
testcases/kernel/syscalls/rt_sigaction/rt_sigaction03.c +1 -0
index 175d220..e7627cd 100644
@@ -24,6 +24,7 @@
 /*		rt_sigaction Expected EINVAL error check                      */
 /******************************************************************************/
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
testcases/kernel/syscalls/rt_sigprocmask/rt_sigprocmask01.c +1 -0
index 74e5a61..75c57fc 100644
@@ -39,6 +39,7 @@
 /*		    sigsetsize should indicate the size of a sigset_t type.   */
 /******************************************************************************/
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <signal.h>
 #include <errno.h>
Signature · 1 line
2.7.0
#38 lore raw

PATCH v2 24/32 rt_sigaction/rt_sigprocmark: Define _GNU_SOURCE

Hi!

Quoted 2 lines

Fixes musl build failure e.g.
error: 'SA_NOMASK' undeclared here (not in a function)

Manual states that SA_NOMASK is deprecated synonym for SA_NODEFER. Does the test work for SA_NODEFER without defining _GNU_SOURCE?

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#39 lore raw

PATCH v2 25/32 mc_gethost: include sys/types.h

In reply to Khem Raj

Fix build on musl
error: unknown type name 'u_char'

---
 testcases/network/multicast/mc_gethost/mc_gethost.c | 1 +
 1 file changed, 1 insertion(+)
testcases/network/multicast/mc_gethost/mc_gethost.c +1 -0
index 5b9a790..c799e2a 100644
@@ -6,6 +6,7 @@
 
 #include <sys/param.h>
 #include <sys/socket.h>
+#include <sys/types.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
Signature · 1 line
2.7.0
#40 lore raw

PATCH v2 25/32 mc_gethost: include sys/types.h

Hi!

Quoted 2 lines

Fix build on musl
error: unknown type name 'u_char'

Just fix the test to use unsigned char instead.

And ideally please do the same for tcp_cmds/perf_lan/pingpong.c and tcp_cmds/perf_lan/pingpong6.c.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#41 lore raw

PATCH v2 26/32 crash01: Define _GNU_SOURCE

In reply to Khem Raj

Fixes musl build errors like
error: 'SA_NOMASK' undeclared (first use in this function)

---
 testcases/misc/crash/crash01.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/misc/crash/crash01.c +1 -1
index 0574521..08a02e7 100644
@@ -49,7 +49,7 @@ stress test at the same time you run other tests, like a multi-user
 benchmark.
 
 */
-
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
Signature · 1 line
2.7.0
#42 lore raw

PATCH v2 26/32 crash01: Define _GNU_SOURCE

Hi!

Quoted 2 lines

Fixes musl build errors like
error: 'SA_NOMASK' undeclared (first use in this function)

Here as well, does it work SA_NODEFER?

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#43 lore raw

PATCH v2 27/32 sysconf01: Use _SC_2_C_VERSION conditionally

In reply to Khem Raj

_SC_2_C_VERSION is not available on musl

---
 testcases/kernel/syscalls/sysconf/sysconf01.c | 2 ++
 1 file changed, 2 insertions(+)
testcases/kernel/syscalls/sysconf/sysconf01.c +2 -0
index 8542e77..e806943 100644
@@ -102,7 +102,9 @@ int main(void)
 	test_sysconf(_SC_ATEXIT_MAX);
 	test_sysconf(_SC_2_C_BIND);
 	test_sysconf(_SC_2_C_DEV);
+#ifdef __GLIBC__
 	test_sysconf(_SC_2_C_VERSION);
+#endif
 	/* 21 - 25 */
 	test_sysconf(_SC_2_CHAR_TERM);
 	test_sysconf(_SC_2_FORT_DEV);
Signature · 1 line
2.7.0
#44 lore raw

PATCH v2 27/32 sysconf01: Use _SC_2_C_VERSION conditionally

Hi!

testcases/kernel/syscalls/sysconf/sysconf01.c int main(void) · line 105

Quoted 9 lines
testcases/kernel/syscalls/sysconf/sysconf01.c +1 -0
index 8542e77..e806943 100644
@@ -102,7 +102,9 @@ int main(void)
 	test_sysconf(_SC_ATEXIT_MAX);
 	test_sysconf(_SC_2_C_BIND);
 	test_sysconf(_SC_2_C_DEV);
+#ifdef __GLIBC__

Why not #ifdef _SC_2_C_VERSION ?

That should work for any libc implementation...

Quoted 5 lines
testcases/kernel/syscalls/sysconf/sysconf01.c +1 -0
 	test_sysconf(_SC_2_C_VERSION);
+#endif
 	/* 21 - 25 */
 	test_sysconf(_SC_2_CHAR_TERM);
 	test_sysconf(_SC_2_FORT_DEV);
Signature · 2 lines
Cyril Hrubis
[email protected]
author
#45 lore raw

PATCH v2 28/32 rt_sigaction.h: Use sighandler_t instead of __sighandler_t

In reply to Khem Raj

When _GNU_SOURCE is used then both typedefs are same and using sighandler_t makes it work on musl too

---
 include/lapi/rt_sigaction.h                      | 2 +-
 testcases/kernel/syscalls/rt_sigsuspend/Makefile | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)
include/lapi/rt_sigaction.h +1 -1
index 3a5a763..870918c 100644
@@ -34,7 +34,7 @@
 #define INVAL_SA_PTR ((void *)-1)
 
 struct kernel_sigaction {
-	__sighandler_t k_sa_handler;
+	sighandler_t k_sa_handler;
 	unsigned long sa_flags;
 	void (*sa_restorer) (void);
 	sigset_t sa_mask;
testcases/kernel/syscalls/rt_sigsuspend/Makefile +3 -0
index 37bc3a9..2ca7f7c 100644
@@ -19,4 +19,7 @@
 top_srcdir		?= ../../../..
 
 include $(top_srcdir)/include/mk/testcases.mk
+
+CFLAGS	+= -D_GNU_SOURCE
+
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
Signature · 1 line
2.7.0
#46 lore raw

PATCH v2 28/32 rt_sigaction.h: Use sighandler_t instead of __sighandler_t

Hi!

Quoted 2 lines

When _GNU_SOURCE is used then both typedefs are same and using sighandler_t makes it work on musl too

Eh, what is the _GNU_SOURCE needed for?

Is there a difference between __sighandler_t and sighandler_t without it?

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#47 lore raw

PATCH v2 29/32 trace_shed: Fix build with musl

In reply to Khem Raj

Errors on musl are

trace_sched.c:425:16: error: invalid operands to binary & (have 'thread_sched_t * {aka struct <anonymous> *}' and 'int')

      thrd_ndx, WEXITSTATUS(status));
---
 testcases/kernel/sched/tool/trace_sched.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/kernel/sched/tool/trace_sched.c +1 -1
index 7815686..30dca5f 100644
@@ -422,7 +422,7 @@ int main(int argc,		/* number of input parameters.                        */
 			if (status == (thread_sched_t *) - 1) {
 				fprintf(stderr,
 					"thread [%d] - process exited with errors %d\n",
-					thrd_ndx, WEXITSTATUS(status));
+					thrd_ndx, WEXITSTATUS((int)status));
 				exit(-1);
 			} else {
 				exp_prio[thrd_ndx] = status->exp_prio;
Signature · 1 line
2.7.0
#48 lore raw

PATCH v2 29/32 trace_shed: Fix build with musl

Hi!

Quoted 10 lines
---
 testcases/kernel/sched/tool/trace_sched.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/kernel/sched/tool/trace_sched.c +0 -0
index 7815686..30dca5f 100644

testcases/kernel/sched/tool/trace_sched.c int main(int argc, /* number of input parameters. */ · line 425

Quoted 5 lines
testcases/kernel/sched/tool/trace_sched.c +1 -1
@@ -422,7 +422,7 @@ int main(int argc,		/* number of input parameters.                        */
 			if (status == (thread_sched_t *) - 1) {
 				fprintf(stderr,
 					"thread [%d] - process exited with errors %d\n",
-					thrd_ndx, WEXITSTATUS(status));
+					thrd_ndx, WEXITSTATUS((int)status));

This is just a band aid for broken code. The thread return status is either -1 or pointer to the table. So there is no point in passing it to WEXITSTATUS() and priting the value. I suggest to remove it.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#49 lore raw

PATCH v2 30/32 lib: Use PTHREAD_MUTEX_RECURSIVE in place of PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP for non-glibc

In reply to Khem Raj

e.g. musl does not implement the _NP mutex types

---
 lib/tst_res.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
lib/tst_res.c +4 -1
index 5c1c58c..3244b5e 100644
@@ -104,8 +104,11 @@ int TEST_ERRNO;
 	assert(strlen(buf) > 0);		\
 } while (0)
 
+#ifdef __GLIBC__
 static pthread_mutex_t tmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-
+#else
+static pthread_mutex_t tmutex = {  PTHREAD_MUTEX_RECURSIVE };
+#endif
 /*
  * Define local function prototypes.
  */
Signature · 1 line
2.7.0
author
#50 lore raw

PATCH v2 30/32 lib: Use PTHREAD_MUTEX_RECURSIVE in place of PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP for non-glibc

Quoted 2 lines · Khem Raj

e.g. musl does not implement the _NP mutex types

ignore this one.

Quoted 25 lines
---
 lib/tst_res.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
lib/tst_res.c +4 -2
index 5c1c58c..3244b5e 100644
@@ -104,8 +104,11 @@ int TEST_ERRNO;
        assert(strlen(buf) > 0);                \
 } while (0)
 
+#ifdef __GLIBC__
 static pthread_mutex_t tmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-
+#else
+static pthread_mutex_t tmutex = {  PTHREAD_MUTEX_RECURSIVE };
+#endif
 /*
  * Define local function prototypes.
  */
--

2.7.0

author
#51 lore raw

PATCH v2 31/32 vma03: fix page size offset as per page size alignment

In reply to Khem Raj

the offset the param of mmap2() doesn't align the page size, but, this param allow must be a multiple of the page size as returned by sysconf(_SC_PAGE_SIZE).meanwhile offset * 4096 must be a multiple of the system page size, so modify the input param of offset pgoff = (ULONG_MAX - 1)&(~((pgsz-1)>>12));

---
 testcases/kernel/mem/vma/vma03.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/kernel/mem/vma/vma03.c +1 -1
index ad8a7b4..a539233 100644
@@ -85,7 +85,7 @@ int main(int argc, char *argv[])
 		if (fd == -1)
 			tst_brkm(TBROK | TERRNO, NULL, "open %s", TESTFILE);
 
-		pgoff = ULONG_MAX - 1;
+		pgoff = (ULONG_MAX - 1)&(~((pgsz-1)>>12));
 		map = mmap2(NULL, pgsz, PROT_READ | PROT_WRITE, MAP_PRIVATE,
 			    fd, pgoff);
 		if (map == MAP_FAILED)
Signature · 1 line
2.7.0
#52 lore raw

PATCH v2 31/32 vma03: fix page size offset as per page size alignment

Hi!

Quoted 17 lines

the offset the param of mmap2() doesn't align the page size, but, this param allow must be a multiple of the page size as returned by sysconf(_SC_PAGE_SIZE).meanwhile offset * 4096 must be a multiple of the system page size, so modify the input param of offset pgoff = (ULONG_MAX - 1)&(~((pgsz-1)>>12));

---
 testcases/kernel/mem/vma/vma03.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
testcases/kernel/mem/vma/vma03.c +0 -0
index ad8a7b4..a539233 100644

testcases/kernel/mem/vma/vma03.c int main(int argc, char *argv[]) · line 90

Quoted 7 lines
testcases/kernel/mem/vma/vma03.c +1 -1
@@ -85,7 +85,7 @@ int main(int argc, char *argv[])
 		if (fd == -1)
 			tst_brkm(TBROK | TERRNO, NULL, "open %s", TESTFILE);
 
-		pgoff = ULONG_MAX - 1;
+		pgoff = (ULONG_MAX - 1)&(~((pgsz-1)>>12));
 		map = mmap2(NULL, pgsz, PROT_READ | PROT_WRITE, MAP_PRIVATE,
 			    fd, pgoff);

Presumbly your system has page size larger than 4096 right? And the mmap() fails with EINVAL since the pgoff * 4096 is not aligned. It would be good to add note about the specific arch that needs this fix to the commit message. Otherwise it looks good.

Signature · 2 lines
Cyril Hrubis
[email protected]
author
#53 lore raw

PATCH v2 32/32 regen.sh: Include asm/unistd.h explicitly

In reply to Khem Raj

on musl this is not included indirectly and it results in errors like testcases/kernel/include/linux_syscall_numbers.h:1035:25: error:
'__NR_SYSCALL_BASE' undeclared (first use in this function) | # define __NR_readdir (__NR_SYSCALL_BASE+ 89)

---
 testcases/kernel/include/regen.sh | 1 +
 1 file changed, 1 insertion(+)
testcases/kernel/include/regen.sh +1 -0
index f93f49b..ee790af 100755
@@ -32,6 +32,7 @@ cat << EOF > "${output_pid}"
 
 #include <errno.h>
 #include <sys/syscall.h>
+#include <asm/unistd.h>
 #include "cleanup.c"
 
 #define ltp_syscall(NR, ...) ({ \\
Signature · 1 line
2.7.0
author
#55 lore raw

PATCH v2 1/32 ltp: Don't link against libfl

Quoted 5 lines · Cyril Hrubis

Hi!
I've pushed 11 patches from the patchset, thanks.

Thanks Cyril. I will rework the ones I have feedback on and publish another pull request soon.

Quoted 7 lines

There are still four that haven't been reviewed, I will finish them tomorrow.

--
Cyril Hrubis
[email protected]

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 204 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.linux.it/pipermail/ltp/attachments/20160202/93ce9321/attachment-0001.sig>