Accepting request 981453 from home:Andreas_Schwab:Factory
- strncpy-power9-vsx.patch: powerpc: Fix VSX register number on __strncpy_power9 (BZ #29197) - nptl-cleanup-async-restore.patch: nptl: Fix __libc_cleanup_pop_restore asynchronous restore (bsc#1200093, BZ #29214) OBS-URL: https://build.opensuse.org/request/show/981453 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=616
This commit is contained in:
parent
da57f2c50a
commit
81fec1e654
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jun 8 13:32:57 UTC 2022 - Andreas Schwab <schwab@suse.de>
|
||||
|
||||
- strncpy-power9-vsx.patch: powerpc: Fix VSX register number on
|
||||
__strncpy_power9 (BZ #29197)
|
||||
- nptl-cleanup-async-restore.patch: nptl: Fix __libc_cleanup_pop_restore
|
||||
asynchronous restore (bsc#1200093, BZ #29214)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 17 14:07:46 UTC 2022 - Andreas Schwab <schwab@suse.de>
|
||||
|
||||
|
@ -295,6 +295,10 @@ Patch1003: pt-load-invalid-hole.patch
|
||||
Patch1004: localedef-ld-monetary.patch
|
||||
# PATCH-FIX-UPSTREAM nptl: Handle spurious EINTR when thread cancellation is disabled (BZ #29029)
|
||||
Patch1005: nptl-spurious-eintr.patch
|
||||
# PATCH-FIX-UPSTREAM powerpc: Fix VSX register number on __strncpy_power9 (BZ #29197)
|
||||
Patch1006: strncpy-power9-vsx.patch
|
||||
# PATCH-FIX-UPSTREAM nptl: Fix __libc_cleanup_pop_restore asynchronous restore (BZ #29214)
|
||||
Patch1007: nptl-cleanup-async-restore.patch
|
||||
|
||||
###
|
||||
# Patches awaiting upstream approval
|
||||
@ -520,6 +524,8 @@ library in a cross compilation setting.
|
||||
%patch1003 -p1
|
||||
%patch1004 -p1
|
||||
%patch1005 -p1
|
||||
%patch1006 -p1
|
||||
%patch1007 -p1
|
||||
|
||||
%patch2000 -p1
|
||||
%patch2001 -p1
|
||||
|
136
nptl-cleanup-async-restore.patch
Normal file
136
nptl-cleanup-async-restore.patch
Normal file
@ -0,0 +1,136 @@
|
||||
From 97dd8b3f705b23de1f84713082b631189084a33b Mon Sep 17 00:00:00 2001
|
||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Tue, 31 May 2022 17:13:35 -0300
|
||||
Subject: [PATCH] nptl: Fix __libc_cleanup_pop_restore asynchronous restore
|
||||
(BZ#29214)
|
||||
|
||||
This was due a wrong revert done on 404656009b459658.
|
||||
|
||||
Checked on x86_64-linux-gnu.
|
||||
|
||||
(cherry picked from commit c7d36dcecc08a29825175f65c4ee873ff3177a23)
|
||||
---
|
||||
NEWS | 1 +
|
||||
nptl/libc-cleanup.c | 3 +-
|
||||
sysdeps/pthread/Makefile | 1 +
|
||||
sysdeps/pthread/tst-cancel30.c | 82 ++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 86 insertions(+), 1 deletion(-)
|
||||
create mode 100644 sysdeps/pthread/tst-cancel30.c
|
||||
|
||||
diff --git a/nptl/libc-cleanup.c b/nptl/libc-cleanup.c
|
||||
index c4a83591bf..2ce59388d4 100644
|
||||
--- a/nptl/libc-cleanup.c
|
||||
+++ b/nptl/libc-cleanup.c
|
||||
@@ -57,7 +57,8 @@ __libc_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer)
|
||||
THREAD_SETMEM (self, cleanup, buffer->__prev);
|
||||
|
||||
int cancelhandling = atomic_load_relaxed (&self->cancelhandling);
|
||||
- if (cancelhandling & CANCELTYPE_BITMASK)
|
||||
+ if (buffer->__canceltype != PTHREAD_CANCEL_DEFERRED
|
||||
+ && (cancelhandling & CANCELTYPE_BITMASK) == 0)
|
||||
{
|
||||
int newval;
|
||||
do
|
||||
diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile
|
||||
index c725586308..3a505c5f99 100644
|
||||
--- a/sysdeps/pthread/Makefile
|
||||
+++ b/sysdeps/pthread/Makefile
|
||||
@@ -126,6 +126,7 @@ tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
|
||||
tst-pthread-raise-blocked-self \
|
||||
tst-pthread_kill-exited \
|
||||
tst-pthread_kill-exiting \
|
||||
+ tst-cancel30 \
|
||||
# tests
|
||||
|
||||
tests-time64 := \
|
||||
diff --git a/sysdeps/pthread/tst-cancel30.c b/sysdeps/pthread/tst-cancel30.c
|
||||
new file mode 100644
|
||||
index 0000000000..e08392f968
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/pthread/tst-cancel30.c
|
||||
@@ -0,0 +1,82 @@
|
||||
+/* Check if printf like functions does not disable asynchronous cancellation
|
||||
+ mode (BZ#29214).
|
||||
+
|
||||
+ 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
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <support/check.h>
|
||||
+#include <support/xstdio.h>
|
||||
+#include <support/xthread.h>
|
||||
+#include <sys/syscall.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+static pthread_barrier_t b;
|
||||
+
|
||||
+static void *
|
||||
+tf (void *arg)
|
||||
+{
|
||||
+ int old;
|
||||
+
|
||||
+ TEST_COMPARE (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL), 0);
|
||||
+
|
||||
+ TEST_COMPARE (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old), 0);
|
||||
+ TEST_COMPARE (old, PTHREAD_CANCEL_ASYNCHRONOUS);
|
||||
+
|
||||
+ /* Check if internal lock cleanup routines restore the cancellation type
|
||||
+ correctly. */
|
||||
+ printf ("...\n");
|
||||
+ TEST_COMPARE (pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old), 0);
|
||||
+ TEST_COMPARE (old, PTHREAD_CANCEL_ASYNCHRONOUS);
|
||||
+
|
||||
+ xpthread_barrier_wait (&b);
|
||||
+
|
||||
+ /* Wait indefinitely for cancellation, which only works if asynchronous
|
||||
+ cancellation is enabled. */
|
||||
+#ifdef SYS_pause
|
||||
+ syscall (SYS_pause);
|
||||
+#elif defined SYS_ppoll || defined SYS_ppoll_time64
|
||||
+# ifndef SYS_ppoll_time64
|
||||
+# define SYS_ppoll_time64 SYS_ppoll
|
||||
+# endif
|
||||
+ syscall (SYS_ppoll_time64, NULL, 0, NULL, NULL);
|
||||
+#else
|
||||
+ for (;;);
|
||||
+#endif
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ xpthread_barrier_init (&b, NULL, 2);
|
||||
+
|
||||
+ pthread_t th = xpthread_create (NULL, tf, NULL);
|
||||
+
|
||||
+ xpthread_barrier_wait (&b);
|
||||
+
|
||||
+ xpthread_cancel (th);
|
||||
+
|
||||
+ void *status = xpthread_join (th);
|
||||
+ TEST_VERIFY (status == PTHREAD_CANCELED);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* There is no need to wait full TIMEOUT if asynchronous is not working. */
|
||||
+#define TIMEOUT 3
|
||||
+#include <support/test-driver.c>
|
||||
--
|
||||
2.35.3
|
||||
|
48
strncpy-power9-vsx.patch
Normal file
48
strncpy-power9-vsx.patch
Normal file
@ -0,0 +1,48 @@
|
||||
From 0a1572b8bb880a63d50a63b2afe4bb67704ac23e Mon Sep 17 00:00:00 2001
|
||||
From: Matheus Castanho <msc@linux.ibm.com>
|
||||
Date: Tue, 7 Jun 2022 10:27:26 -0300
|
||||
Subject: [PATCH] powerpc: Fix VSX register number on __strncpy_power9 [BZ
|
||||
#29197]
|
||||
|
||||
__strncpy_power9 initializes VR 18 with zeroes to be used throughout the
|
||||
code, including when zero-padding the destination string. However, the
|
||||
v18 reference was mistakenly being used for stxv and stxvl, which take a
|
||||
VSX vector as operand. The code ended up using the uninitialized VSR 18
|
||||
register by mistake.
|
||||
|
||||
Both occurrences have been changed to use the proper VSX number for VR 18
|
||||
(i.e. VSR 50).
|
||||
|
||||
Tested on powerpc, powerpc64 and powerpc64le.
|
||||
|
||||
Signed-off-by: Kewen Lin <linkw@gcc.gnu.org>
|
||||
(cherry picked from commit 0218463dd8265ed937622f88ac68c7d984fe0cfc)
|
||||
---
|
||||
sysdeps/powerpc/powerpc64/le/power9/strncpy.S | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/powerpc/powerpc64/le/power9/strncpy.S b/sysdeps/powerpc/powerpc64/le/power9/strncpy.S
|
||||
index ae23161316..deb94671cc 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/le/power9/strncpy.S
|
||||
+++ b/sysdeps/powerpc/powerpc64/le/power9/strncpy.S
|
||||
@@ -352,7 +352,7 @@ L(zero_padding_loop):
|
||||
cmpldi cr6,r5,16 /* Check if length was reached. */
|
||||
ble cr6,L(zero_padding_end)
|
||||
|
||||
- stxv v18,0(r11)
|
||||
+ stxv 32+v18,0(r11)
|
||||
addi r11,r11,16
|
||||
addi r5,r5,-16
|
||||
|
||||
@@ -360,7 +360,7 @@ L(zero_padding_loop):
|
||||
|
||||
L(zero_padding_end):
|
||||
sldi r10,r5,56 /* stxvl wants size in top 8 bits */
|
||||
- stxvl v18,r11,r10 /* Partial store */
|
||||
+ stxvl 32+v18,r11,r10 /* Partial store */
|
||||
blr
|
||||
|
||||
.align 4
|
||||
--
|
||||
2.35.3
|
||||
|
Loading…
Reference in New Issue
Block a user