From f877c4f2bf2ebc9ecd3e099e33fc4184f4fcac1a Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Wed, 5 Feb 2014 10:10:34 -0500 Subject: Fix tst-setgetname for Linux kernels < 2.6.33. Support for /proc/self/task/$tid/comm as added in Linux 2.6.33, therefore since the test tst-setgetname relies on this functionality to operate we must skip the test in kernels < 2.6.33. We wrap the checks with __ASSUME_PROC_PID_TASK_COMM such that in the future when we move arch_minimum_kernel to 2.6.33 we can remove this code. --- ChangeLog | 6 ++++++ nptl/ChangeLog | 6 ++++++ nptl/sysdeps/unix/sysv/linux/tst-setgetname.c | 14 ++++++++++++++ sysdeps/unix/sysv/linux/kernel-features.h | 6 ++++++ 4 files changed, 32 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9c0a003aa8..a75fb0ff30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-02-05 Carlos O'Donell + + * sysdeps/unix/sysv/linux/kernel-features.h + [__LINUX_KERNEL_VERSION >= 0x020621] + (__ASSUME_PROC_PID_TASK_COMM): Define. + 2014-02-05 Siddhesh Poyarekar * manual/contrib.texi: Update entry for Ondrej Bilka, Will diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 8761f5be9b..003e290bb1 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2014-02-05 Carlos O'Donell + + * sysdeps/unix/sysv/linux/tst-setgetname.c (do_test): Skip the + test if !__ASSUME_PROC_PID_TASK_COMM and get_self_comm returns + ENOENT. + 2014-01-23 Stefan Liebler * tst-tls7.c: Adjust testcase timeout diff --git a/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c b/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c index 2aceba53bc..f5693e26c4 100644 --- a/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c +++ b/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c @@ -23,6 +23,7 @@ #include #include #include +#include /* New name of process. */ #define NEW_NAME "setname" @@ -99,6 +100,19 @@ do_test (int argc, char **argv) if (res == 0) { res = get_self_comm (gettid (), name_check, TASK_COMM_LEN); + +#if !__ASSUME_PROC_PID_TASK_COMM + /* On this first test we look for ENOENT to be returned from + get_self_comm to indicate that the kernel is older than + 2.6.33 and doesn't contain comm within the proc structure. + In that case we skip the entire test. */ + if (res == ENOENT) + { + printf ("SKIP: The kernel does not have /proc/self/task/%%lu/comm.\n"); + return 0; + } +#endif + if (res == 0) { if (strncmp (name, name_check, strlen (BIG_NAME)) == 0) diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 372353528e..aabf69d64c 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -202,6 +202,12 @@ # define __ASSUME_RECVMMSG 1 #endif +/* Support for /proc/self/task/$tid/comm and /proc/$pid/task/$tid/comm were + added in 2.6.33. */ +#if __LINUX_KERNEL_VERSION >= 0x020621 +# define __ASSUME_PROC_PID_TASK_COMM 1 +#endif + /* statfs fills in f_flags since 2.6.36. */ #if __LINUX_KERNEL_VERSION >= 0x020624 # define __ASSUME_STATFS_F_FLAGS 1 -- cgit 1.4.1