diff --git a/glibc-RHEL-59494-1.patch b/glibc-RHEL-59494-1.patch new file mode 100644 index 0000000..5551aae --- /dev/null +++ b/glibc-RHEL-59494-1.patch @@ -0,0 +1,65 @@ +commit 3bea50ccbc925d4fc5f85ec402b6154cbe770b71 +Author: Yu Chien Peter Lin +Date: Fri Sep 30 20:19:50 2022 +0800 + + support: Add xpthread_cond_signal wrapper + + Signed-off-by: Yu Chien Peter Lin + Reviewed-by: Adhemerval Zanella + +diff --git a/support/Makefile b/support/Makefile +index 154e3a4ff03cebda..bfd8d59285524f4d 100644 +--- a/support/Makefile ++++ b/support/Makefile +@@ -160,6 +160,7 @@ libsupport-routines = \ + xpthread_cancel \ + xpthread_check_return \ + xpthread_cond_wait \ ++ xpthread_cond_signal \ + xpthread_create \ + xpthread_detach \ + xpthread_join \ +diff --git a/support/xpthread_cond_signal.c b/support/xpthread_cond_signal.c +new file mode 100644 +index 0000000000000000..ed0be1a8abf8559b +--- /dev/null ++++ b/support/xpthread_cond_signal.c +@@ -0,0 +1,26 @@ ++/* pthread_cond_signal with error checking. ++ Copyright (C) 2022 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++ ++void ++xpthread_cond_signal (pthread_cond_t *cond) ++{ ++ xpthread_check_return ++ ("pthread_cond_signal", pthread_cond_signal (cond)); ++} +diff --git a/support/xthread.h b/support/xthread.h +index a4a4ec5b1ef16fd3..1a39b1c0ddda9725 100644 +--- a/support/xthread.h ++++ b/support/xthread.h +@@ -58,6 +58,7 @@ void xpthread_mutex_consistent (pthread_mutex_t *); + void xpthread_spin_lock (pthread_spinlock_t *lock); + void xpthread_spin_unlock (pthread_spinlock_t *lock); + void xpthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex); ++void xpthread_cond_signal (pthread_cond_t *cond); + pthread_t xpthread_create (pthread_attr_t *attr, + void *(*thread_func) (void *), void *closure); + void xpthread_detach (pthread_t thr); diff --git a/glibc-RHEL-59494-2.patch b/glibc-RHEL-59494-2.patch new file mode 100644 index 0000000..35e60c7 --- /dev/null +++ b/glibc-RHEL-59494-2.patch @@ -0,0 +1,107 @@ +commit 365b3af67ecaf176b2e2678afe903bebce598fd7 +Author: Yu Chien Peter Lin +Date: Fri Sep 30 20:19:51 2022 +0800 + + nptl: Convert tst-setuid2 to test-driver + + Use and replace pthread calls to its xpthread + equivalents. + + Signed-off-by: Yu Chien Peter Lin + Reviewed-by: Adhemerval Zanella + +diff --git a/nptl/tst-setuid2.c b/nptl/tst-setuid2.c +index a9e3a6c4c0a48352..2abe6e20d108ccf9 100644 +--- a/nptl/tst-setuid2.c ++++ b/nptl/tst-setuid2.c +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -36,30 +37,21 @@ static pthread_cond_t cond_recv; + static void * + thread_func (void *ctx __attribute__ ((unused))) + { +- int ret = pthread_mutex_lock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_lock (thread): %d", ret); +- ++ xpthread_mutex_lock (&mutex); + while (true) + { + if (func_sent != NULL) + { + void (*func) (void) = func_sent; +- ret = pthread_mutex_unlock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_unlock (thread): %d", ret); ++ xpthread_mutex_unlock (&mutex); ++ + func (); +- ret = pthread_mutex_lock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_lock (thread): %d", ret); ++ ++ xpthread_mutex_lock (&mutex); + func_sent = NULL; +- ret = pthread_cond_signal (&cond_recv); +- if (ret != 0) +- FAIL ("pthread_cond_signal (recv): %d", ret); ++ xpthread_cond_signal (&cond_recv); + } +- ret = pthread_cond_wait (&cond_send, &mutex); +- if (ret != 0) +- FAIL ("pthread_cond_wait (send): %d", ret); ++ xpthread_cond_wait (&cond_send, &mutex); + } + return NULL; + } +@@ -67,31 +59,18 @@ thread_func (void *ctx __attribute__ ((unused))) + static void + run_on_thread (void (*func) (void)) + { +- int ret = pthread_mutex_lock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_lock (%s): %d", __func__, ret); ++ xpthread_mutex_lock (&mutex); + func_sent = func; +- ret = pthread_mutex_unlock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_unlock (%s): %d", __func__, ret); ++ xpthread_mutex_unlock (&mutex); + +- ret = pthread_cond_signal (&cond_send); +- if (ret != 0) +- FAIL ("pthread_mutex_lock (%s): %d", __func__, ret); +- +- ret = pthread_mutex_lock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_lock (%s): %d", __func__, ret); ++ xpthread_cond_signal (&cond_send); + ++ xpthread_mutex_lock (&mutex); + while (func_sent != NULL) + { +- ret = pthread_cond_wait (&cond_recv, &mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_wait (%s): %d", __func__, ret); ++ xpthread_cond_wait (&cond_recv, &mutex); + } +- ret = pthread_mutex_unlock (&mutex); +- if (ret != 0) +- FAIL ("pthread_mutex_unlock (%s): %d", __func__, ret); ++ xpthread_mutex_unlock (&mutex); + } + + static void +@@ -141,5 +120,4 @@ do_test (void) + return 0; + } + +-#define TEST_FUNCTION do_test () +-#include "../test-skeleton.c" ++#include diff --git a/glibc.spec b/glibc.spec index d6a976a..caddd6c 100644 --- a/glibc.spec +++ b/glibc.spec @@ -157,7 +157,7 @@ end \ Summary: The GNU libc libraries Name: glibc Version: %{glibcversion} -Release: 125%{?dist} +Release: 126%{?dist} # In general, GPLv2+ is used by programs, LGPLv2+ is used for # libraries. @@ -869,6 +869,8 @@ Patch630: glibc-RHEL-46979-1.patch Patch631: glibc-RHEL-46979-2.patch Patch632: glibc-RHEL-46979-3.patch Patch633: glibc-RHEL-46979-4.patch +Patch634: glibc-RHEL-59494-1.patch +Patch635: glibc-RHEL-59494-2.patch ############################################################################## # Continued list of core "glibc" package information: @@ -2666,10 +2668,22 @@ run_tests () { done &2 - cat misc/tst-syscall-list.out >&2 + # Compile and run the xtests, so that they can be run separately later. + # Reduce timeout factor to complete the tests in a reasonable time + # (in case something was made an xtest due to excessive run time). + # Do not look at the test results; they are expected to fail in most + # cases. set -x + TIMEOUT_FACTOR=1 %make_build xcheck > rpmbuild.xcheck.log 2>&1 || true + if ! grep -q '^Summary of test results for extra tests:$' rpmbuild.xcheck.log ; then + echo "FAIL: xcheck test suite build of target: $(basename "$(pwd)")" >& 2 + cat rpmbuild.xcheck.log + exit 1 + fi + + # Unconditonally dump differences in the system call list. + : "* System call consistency checks:" + cat misc/tst-syscall-list.out >&2 } # Increase timeouts @@ -3028,6 +3042,9 @@ update_gconv_modules_cache () %endif %changelog +* Thu Sep 19 2024 Florian Weimer - 2.34-126 +- Ensure that xtests can be built (RHEL-59494) + * Thu Sep 5 2024 DJ Delorie - 2.34-125 - elf: Rework exception handling in the dynamic loader (RHEL-46979)