diff --git a/SOURCES/strace-rh1540954-1.patch b/SOURCES/strace-rh1540954-1.patch new file mode 100644 index 0000000..f1c1b7e --- /dev/null +++ b/SOURCES/strace-rh1540954-1.patch @@ -0,0 +1,72 @@ +commit 52231be034160c786735c6ae2f51ac7723c2e1fd +Author: Dmitry V. Levin +Date: Fri Sep 15 16:06:14 2017 +0000 + + Update MEMBARRIER_CMD_* constants + + * xlat/membarrier_cmds.in: Add MEMBARRIER_CMD_PRIVATE_EXPEDITED + introduced by kernel commit v4.14-rc1~174^2^2^4. + * NEWS: Mention this. + * tests/membarrier.c (main): Update expected output. + +diff -rup a/tests/membarrier.c b/tests/membarrier.c +--- a/tests/membarrier.c 2016-12-20 00:10:21.000000000 -0500 ++++ b/tests/membarrier.c 2018-03-07 16:08:39.803150889 -0500 +@@ -44,10 +44,23 @@ main(void) + printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = %s\n", + sprintrc(-1)); + if (saved_errno != ENOSYS) { +- /* the test needs to be updated? */ +- assert(syscall(__NR_membarrier, 0, 0) == 1); +- puts("membarrier(MEMBARRIER_CMD_QUERY, 0)" +- " = 0x1 (MEMBARRIER_CMD_SHARED)"); ++ const char *text; ++ int rc = syscall(__NR_membarrier, 0, 0); ++ ++ switch (rc) { ++ case 1: ++ text = "MEMBARRIER_CMD_SHARED"; ++ break; ++ case 1|8: ++ text = "MEMBARRIER_CMD_SHARED|" ++ "MEMBARRIER_CMD_PRIVATE_EXPEDITED"; ++ break; ++ default: ++ error_msg_and_fail("membarrier returned %#x, does" ++ " the test have to be updated?", rc); ++ } ++ printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s)\n", ++ rc, text); + } + puts("+++ exited with 0 +++"); + return 0; +diff -rup a/xlat/membarrier_cmds.h b/xlat/membarrier_cmds.h +--- a/xlat/membarrier_cmds.h 2017-05-24 15:55:51.000000000 -0400 ++++ b/xlat/membarrier_cmds.h 2018-03-07 16:08:54.883976263 -0500 +@@ -5,6 +5,9 @@ + #if !(defined(MEMBARRIER_CMD_SHARED) || (defined(HAVE_DECL_MEMBARRIER_CMD_SHARED) && HAVE_DECL_MEMBARRIER_CMD_SHARED)) + # define MEMBARRIER_CMD_SHARED 1 + #endif ++#if !(defined(MEMBARRIER_CMD_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED)) ++# define MEMBARRIER_CMD_PRIVATE_EXPEDITED 8 ++#endif + + #ifdef IN_MPERS + +@@ -16,6 +19,7 @@ static + const struct xlat membarrier_cmds[] = { + XLAT(MEMBARRIER_CMD_QUERY), + XLAT(MEMBARRIER_CMD_SHARED), ++ XLAT(MEMBARRIER_CMD_PRIVATE_EXPEDITED), + XLAT_END + }; + +diff -rup a/xlat/membarrier_cmds.in b/xlat/membarrier_cmds.in +--- a/xlat/membarrier_cmds.in 2015-11-16 19:40:22.000000000 -0500 ++++ b/xlat/membarrier_cmds.in 2018-03-07 16:08:39.804150878 -0500 +@@ -1,2 +1,3 @@ +-MEMBARRIER_CMD_QUERY 0 +-MEMBARRIER_CMD_SHARED 1 ++MEMBARRIER_CMD_QUERY 0 ++MEMBARRIER_CMD_SHARED 1 ++MEMBARRIER_CMD_PRIVATE_EXPEDITED 8 diff --git a/SOURCES/strace-rh1540954-2.patch b/SOURCES/strace-rh1540954-2.patch new file mode 100644 index 0000000..ce64d0e --- /dev/null +++ b/SOURCES/strace-rh1540954-2.patch @@ -0,0 +1,54 @@ +commit 73354cff1aae409d6ef7d8a539a2a0a09c2480f9 +Author: Dmitry V. Levin +Date: Wed Nov 1 00:20:44 2017 +0000 + + Update MEMBARRIER_CMD_* constants + + * xlat/membarrier_cmds.in: Add MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED + introduced by kernel commit v4.14-rc6~26. + * tests/membarrier.c (main): Update expected output. + +diff -rup a/tests/membarrier.c b/tests/membarrier.c +--- a/tests/membarrier.c 2018-03-07 16:10:10.000000000 -0500 ++++ b/tests/membarrier.c 2018-03-07 16:10:36.596808428 -0500 +@@ -55,6 +55,11 @@ main(void) + text = "MEMBARRIER_CMD_SHARED|" + "MEMBARRIER_CMD_PRIVATE_EXPEDITED"; + break; ++ case 1|8|16: ++ text = "MEMBARRIER_CMD_SHARED|" ++ "MEMBARRIER_CMD_PRIVATE_EXPEDITED|" ++ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED"; ++ break; + default: + error_msg_and_fail("membarrier returned %#x, does" + " the test have to be updated?", rc); +diff -rup a/xlat/membarrier_cmds.h b/xlat/membarrier_cmds.h +--- a/xlat/membarrier_cmds.h 2018-03-07 16:10:10.000000000 -0500 ++++ b/xlat/membarrier_cmds.h 2018-03-07 16:10:41.723750016 -0500 +@@ -8,6 +8,9 @@ + #if !(defined(MEMBARRIER_CMD_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_PRIVATE_EXPEDITED)) + # define MEMBARRIER_CMD_PRIVATE_EXPEDITED 8 + #endif ++#if !(defined(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) || (defined(HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED) && HAVE_DECL_MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED)) ++# define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED 16 ++#endif + + #ifdef IN_MPERS + +@@ -20,6 +23,7 @@ const struct xlat membarrier_cmds[] = { + XLAT(MEMBARRIER_CMD_QUERY), + XLAT(MEMBARRIER_CMD_SHARED), + XLAT(MEMBARRIER_CMD_PRIVATE_EXPEDITED), ++ XLAT(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED), + XLAT_END + }; + +diff -rup a/xlat/membarrier_cmds.in b/xlat/membarrier_cmds.in +--- a/xlat/membarrier_cmds.in 2018-03-07 16:10:10.000000000 -0500 ++++ b/xlat/membarrier_cmds.in 2018-03-07 16:10:36.597808417 -0500 +@@ -1,3 +1,4 @@ + MEMBARRIER_CMD_QUERY 0 + MEMBARRIER_CMD_SHARED 1 + MEMBARRIER_CMD_PRIVATE_EXPEDITED 8 ++MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED 16 diff --git a/SOURCES/strace-rh1562124.patch b/SOURCES/strace-rh1562124.patch new file mode 100644 index 0000000..1f95d32 --- /dev/null +++ b/SOURCES/strace-rh1562124.patch @@ -0,0 +1,314 @@ +commit 79d10dfc20985225e4ea044d3875c4cea09053d7 +Author: Eugene Syromyatnikov +Date: Wed Jan 24 09:55:50 2018 -0500 + + Update futex test in accordance with kernel's v4.15-rc7-202-gfbe0e83 + + * futex.c (VALP, VALP_PR, VAL2P, VAL2P_PR): New macro definitions. + (main): Allow EINVAL on *REQUEUE* checks with VAL/VAL2 with higher bit + being set, check that the existing behaviour preserved with VALP/VAL2P + where higher bit is unset. + +diff -rup a/tests/futex.c b/tests/futex.c +--- a/tests/futex.c 2017-05-22 13:33:51.000000000 -0400 ++++ b/tests/futex.c 2018-04-03 12:12:08.445383018 -0400 +@@ -150,14 +150,20 @@ void invalid_op(int *val, int op, uint32 + } while (0) + + /* Value which differs from one stored in int *val */ +-# define VAL ((unsigned long) 0xbadda7a0facefeedLLU) +-# define VAL_PR ((unsigned) VAL) ++# define VAL ((unsigned long) 0xbadda7a0facefeedLLU) ++# define VAL_PR ((unsigned) VAL) + +-# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU) +-# define VAL2_PR ((unsigned) VAL2) ++# define VALP ((unsigned long) 0xbadda7a01acefeedLLU) ++# define VALP_PR ((unsigned) VALP) + +-# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU) +-# define VAL3_PR ((unsigned) VAL3) ++# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU) ++# define VAL2_PR ((unsigned) VAL2) ++ ++# define VAL2P ((unsigned long) 0xbadda7a07a7b100dLLU) ++# define VAL2P_PR ((unsigned) VAL2P) ++ ++# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU) ++# define VAL3_PR ((unsigned) VAL3) + + int + main(int argc, char *argv[]) +@@ -417,16 +423,26 @@ main(int argc, char *argv[]) + + /* Trying to re-queue some processes but there's nothing to re-queue */ + CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VAL, VAL2, uaddr2, VAL3, +- (rc == 0)); ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VALP, VAL2P, uaddr2, VAL3, ++ (rc == 0)); ++ printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc)); ++ + /* Trying to re-queue some processes but there's nothing to re-queue */ + CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VAL, VAL2, +- uaddr2, VAL3, (rc == 0)); ++ uaddr2, VAL3, (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc)); + ++ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VALP, ++ VAL2P, uaddr2, VAL3, (rc == 0)); ++ printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc)); ++ + CHECK_INVALID_CLOCKRT(FUTEX_REQUEUE, ARG3 | ARG4 | ARG5, "%u", "%u", + "%#lx"); + +@@ -443,22 +459,38 @@ main(int argc, char *argv[]) + + /* Comparison re-queue with wrong val value */ + CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, VAL3, +- (rc == -1) && (errno == EAGAIN)); ++ (rc == -1) && (errno == EAGAIN || errno == EINVAL)); + printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, VAL3_PR, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, VAL3, ++ (rc == -1) && (errno == EAGAIN)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, VAL3_PR, sprintrc(rc)); ++ + /* Successful comparison re-queue */ + CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, *uaddr, +- (rc == 0)); ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, *uaddr, ++ (rc == 0)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc)); ++ + /* Successful comparison re-queue */ + CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VAL, +- VAL2, uaddr2, *uaddr, (rc == 0)); ++ VAL2, uaddr2, *uaddr, ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc)); + ++ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VALP, ++ VAL2P, uaddr2, *uaddr, (rc == 0)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc)); ++ + CHECK_INVALID_CLOCKRT(FUTEX_CMP_REQUEUE, ARG3 | ARG4 | ARG5 | ARG6, + "%u", "%u", "%#lx", "%u"); + +diff -rup a/tests-m32/futex.c b/tests-m32/futex.c +--- a/tests-m32/futex.c 2017-05-22 13:33:51.000000000 -0400 ++++ b/tests-m32/futex.c 2018-04-03 12:13:23.219848033 -0400 +@@ -150,14 +150,20 @@ void invalid_op(int *val, int op, uint32 + } while (0) + + /* Value which differs from one stored in int *val */ +-# define VAL ((unsigned long) 0xbadda7a0facefeedLLU) +-# define VAL_PR ((unsigned) VAL) ++# define VAL ((unsigned long) 0xbadda7a0facefeedLLU) ++# define VAL_PR ((unsigned) VAL) + +-# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU) +-# define VAL2_PR ((unsigned) VAL2) ++# define VALP ((unsigned long) 0xbadda7a01acefeedLLU) ++# define VALP_PR ((unsigned) VALP) + +-# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU) +-# define VAL3_PR ((unsigned) VAL3) ++# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU) ++# define VAL2_PR ((unsigned) VAL2) ++ ++# define VAL2P ((unsigned long) 0xbadda7a07a7b100dLLU) ++# define VAL2P_PR ((unsigned) VAL2P) ++ ++# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU) ++# define VAL3_PR ((unsigned) VAL3) + + int + main(int argc, char *argv[]) +@@ -417,16 +423,26 @@ main(int argc, char *argv[]) + + /* Trying to re-queue some processes but there's nothing to re-queue */ + CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VAL, VAL2, uaddr2, VAL3, +- (rc == 0)); ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VALP, VAL2P, uaddr2, VAL3, ++ (rc == 0)); ++ printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc)); ++ + /* Trying to re-queue some processes but there's nothing to re-queue */ + CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VAL, VAL2, +- uaddr2, VAL3, (rc == 0)); ++ uaddr2, VAL3, (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc)); + ++ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VALP, ++ VAL2P, uaddr2, VAL3, (rc == 0)); ++ printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc)); ++ + CHECK_INVALID_CLOCKRT(FUTEX_REQUEUE, ARG3 | ARG4 | ARG5, "%u", "%u", + "%#lx"); + +@@ -443,22 +459,38 @@ main(int argc, char *argv[]) + + /* Comparison re-queue with wrong val value */ + CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, VAL3, +- (rc == -1) && (errno == EAGAIN)); ++ (rc == -1) && (errno == EAGAIN || errno == EINVAL)); + printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, VAL3_PR, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, VAL3, ++ (rc == -1) && (errno == EAGAIN)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, VAL3_PR, sprintrc(rc)); ++ + /* Successful comparison re-queue */ + CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, *uaddr, +- (rc == 0)); ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, *uaddr, ++ (rc == 0)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc)); ++ + /* Successful comparison re-queue */ + CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VAL, +- VAL2, uaddr2, *uaddr, (rc == 0)); ++ VAL2, uaddr2, *uaddr, ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc)); + ++ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VALP, ++ VAL2P, uaddr2, *uaddr, (rc == 0)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc)); ++ + CHECK_INVALID_CLOCKRT(FUTEX_CMP_REQUEUE, ARG3 | ARG4 | ARG5 | ARG6, + "%u", "%u", "%#lx", "%u"); + +diff -rup a/tests-mx32/futex.c b/tests-mx32/futex.c +--- a/tests-mx32/futex.c 2017-05-22 13:33:51.000000000 -0400 ++++ b/tests-mx32/futex.c 2018-04-03 12:13:25.235860501 -0400 +@@ -150,14 +150,20 @@ void invalid_op(int *val, int op, uint32 + } while (0) + + /* Value which differs from one stored in int *val */ +-# define VAL ((unsigned long) 0xbadda7a0facefeedLLU) +-# define VAL_PR ((unsigned) VAL) ++# define VAL ((unsigned long) 0xbadda7a0facefeedLLU) ++# define VAL_PR ((unsigned) VAL) + +-# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU) +-# define VAL2_PR ((unsigned) VAL2) ++# define VALP ((unsigned long) 0xbadda7a01acefeedLLU) ++# define VALP_PR ((unsigned) VALP) + +-# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU) +-# define VAL3_PR ((unsigned) VAL3) ++# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU) ++# define VAL2_PR ((unsigned) VAL2) ++ ++# define VAL2P ((unsigned long) 0xbadda7a07a7b100dLLU) ++# define VAL2P_PR ((unsigned) VAL2P) ++ ++# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU) ++# define VAL3_PR ((unsigned) VAL3) + + int + main(int argc, char *argv[]) +@@ -417,16 +423,26 @@ main(int argc, char *argv[]) + + /* Trying to re-queue some processes but there's nothing to re-queue */ + CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VAL, VAL2, uaddr2, VAL3, +- (rc == 0)); ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VALP, VAL2P, uaddr2, VAL3, ++ (rc == 0)); ++ printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc)); ++ + /* Trying to re-queue some processes but there's nothing to re-queue */ + CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VAL, VAL2, +- uaddr2, VAL3, (rc == 0)); ++ uaddr2, VAL3, (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc)); + ++ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VALP, ++ VAL2P, uaddr2, VAL3, (rc == 0)); ++ printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc)); ++ + CHECK_INVALID_CLOCKRT(FUTEX_REQUEUE, ARG3 | ARG4 | ARG5, "%u", "%u", + "%#lx"); + +@@ -443,22 +459,38 @@ main(int argc, char *argv[]) + + /* Comparison re-queue with wrong val value */ + CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, VAL3, +- (rc == -1) && (errno == EAGAIN)); ++ (rc == -1) && (errno == EAGAIN || errno == EINVAL)); + printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, VAL3_PR, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, VAL3, ++ (rc == -1) && (errno == EAGAIN)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, VAL3_PR, sprintrc(rc)); ++ + /* Successful comparison re-queue */ + CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, *uaddr, +- (rc == 0)); ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc)); + ++ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, *uaddr, ++ (rc == 0)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc)); ++ + /* Successful comparison re-queue */ + CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VAL, +- VAL2, uaddr2, *uaddr, (rc == 0)); ++ VAL2, uaddr2, *uaddr, ++ (rc == 0) || ((rc == -1) && (errno == EINVAL))); + printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n", + uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc)); + ++ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VALP, ++ VAL2P, uaddr2, *uaddr, (rc == 0)); ++ printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n", ++ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc)); ++ + CHECK_INVALID_CLOCKRT(FUTEX_CMP_REQUEUE, ARG3 | ARG4 | ARG5 | ARG6, + "%u", "%u", "%#lx", "%u"); + diff --git a/SPECS/strace.spec b/SPECS/strace.spec index 771207e..e52033c 100644 --- a/SPECS/strace.spec +++ b/SPECS/strace.spec @@ -3,7 +3,7 @@ Summary: Tracks and displays system calls associated with a running process Name: %{?scl_prefix}strace Version: 4.17 -Release: 3%{?dist} +Release: 7%{?dist} License: BSD Group: Development/Debuggers URL: http://sourceforge.net/projects/strace/ @@ -37,6 +37,9 @@ Patch3000: strace-no-rhel5-tests.patch Patch3001: strace-rpmbuild-m64.patch Patch3002: strace-rh1377847.patch Patch3003: strace-rh1276132.patch +Patch3004: strace-rh1540954-1.patch +Patch3005: strace-rh1540954-2.patch +Patch3006: strace-rh1562124.patch # In the past we had a separate strace64 package, these days the # stndard 64 bit build provides that functionality. For tracing @@ -88,6 +91,9 @@ This package provides the `strace32' program to trace 32-bit processes on %patch3001 -p1 %patch3002 -p1 %patch3003 -p1 +%patch3004 -p1 +%patch3005 -p1 +%patch3006 -p1 %build uname -a @@ -135,6 +141,18 @@ rm -rf %{buildroot} %endif %changelog +* Tue Apr 3 2018 DJ Delorie - 4.17-7 +- Update futex 32-bit tests for newer kernels. (#1562124) + +* Tue Apr 3 2018 DJ Delorie - 4.17-6 +- Update futex tests for newer kernels. (#1562124) + +* Thu Mar 8 2018 DJ Delorie - 4.17-5 +- Add regenerated files to previous commit. (#1540954) + +* Wed Feb 21 2018 DJ Delorie - 4.17-4 +- Handle MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED (#1540954) + * Fri Aug 11 2017 DJ Delorie - 4.17-3 - Handle PTRACE_CONT (#1276132)