diff --git a/glibc-rh1469536.patch b/glibc-rh1469536.patch new file mode 100644 index 0000000..d1c97a1 --- /dev/null +++ b/glibc-rh1469536.patch @@ -0,0 +1,228 @@ +commit 8c2c51115bc19b18491b3decf99db460ea378730 +Author: Florian Weimer +Date: Tue Jul 11 14:50:46 2017 +0200 + + Revert "S390: Sync ptrace.h with kernel. [BZ #21539]" + + This reverts commit b08a6a0dea63742313ed3d9577c1e2d83436b196. + +diff --git a/sysdeps/s390/fpu/fesetenv.c b/sysdeps/s390/fpu/fesetenv.c +index 0f64a3f..4c9bcf0 100644 +--- a/sysdeps/s390/fpu/fesetenv.c ++++ b/sysdeps/s390/fpu/fesetenv.c +@@ -20,6 +20,8 @@ + #include + #include + #include ++#include ++#include + #include + + int +diff --git a/sysdeps/unix/sysv/linux/s390/Makefile b/sysdeps/unix/sysv/linux/s390/Makefile +index f30a6bb..3867c33 100644 +--- a/sysdeps/unix/sysv/linux/s390/Makefile ++++ b/sysdeps/unix/sysv/linux/s390/Makefile +@@ -29,7 +29,3 @@ CFLAGS-elision-trylock.c = $(elision-CFLAGS) + CFLAGS-elision-unlock.c = $(elision-CFLAGS) + endif + endif +- +-ifeq ($(subdir),misc) +-tests += tst-ptrace-singleblock +-endif +diff --git a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h +index 88079fc..7caf101 100644 +--- a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h ++++ b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h +@@ -89,9 +89,25 @@ enum __ptrace_request + PTRACE_SINGLESTEP = 9, + #define PT_STEP PTRACE_SINGLESTEP + +- /* Execute process until next taken branch. */ +- PTRACE_SINGLEBLOCK = 12, +-#define PT_STEPBLOCK PTRACE_SINGLEBLOCK ++ /* Get all general purpose registers used by a processes. ++ This is not supported on all machines. */ ++ PTRACE_GETREGS = 12, ++#define PT_GETREGS PTRACE_GETREGS ++ ++ /* Set all general purpose registers used by a processes. ++ This is not supported on all machines. */ ++ PTRACE_SETREGS = 13, ++#define PT_SETREGS PTRACE_SETREGS ++ ++ /* Get all floating point registers used by a processes. ++ This is not supported on all machines. */ ++ PTRACE_GETFPREGS = 14, ++#define PT_GETFPREGS PTRACE_GETFPREGS ++ ++ /* Set all floating point registers used by a processes. ++ This is not supported on all machines. */ ++ PTRACE_SETFPREGS = 15, ++#define PT_SETFPREGS PTRACE_SETFPREGS + + /* Attach to a process that is already running. */ + PTRACE_ATTACH = 16, +@@ -151,26 +167,8 @@ enum __ptrace_request + PTRACE_SETSIGMASK = 0x420b, + #define PTRACE_SETSIGMASK PTRACE_SETSIGMASK + +- PTRACE_SECCOMP_GET_FILTER = 0x420c, ++ PTRACE_SECCOMP_GET_FILTER = 0x420c + #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER +- +- PTRACE_PEEKUSR_AREA = 0x5000, +-#define PTRACE_PEEKUSR_AREA PTRACE_PEEKUSR_AREA +- +- PTRACE_POKEUSR_AREA = 0x5001, +-#define PTRACE_POKEUSR_AREA PTRACE_POKEUSR_AREA +- +- PTRACE_GET_LAST_BREAK = 0x5006, +-#define PTRACE_GET_LAST_BREAK PTRACE_GET_LAST_BREAK +- +- PTRACE_ENABLE_TE = 0x5009, +-#define PTRACE_ENABLE_TE PTRACE_ENABLE_TE +- +- PTRACE_DISABLE_TE = 0x5010, +-#define PTRACE_DISABLE_TE PTRACE_DISABLE_TE +- +- PTRACE_TE_ABORT_RAND = 0x5011 +-#define PTRACE_TE_ABORT_RAND PTRACE_TE_ABORT_RAND + }; + + +diff --git a/sysdeps/unix/sysv/linux/s390/tst-ptrace-singleblock.c b/sysdeps/unix/sysv/linux/s390/tst-ptrace-singleblock.c +deleted file mode 100644 +index 95a2f55..0000000 +--- a/sysdeps/unix/sysv/linux/s390/tst-ptrace-singleblock.c ++++ /dev/null +@@ -1,128 +0,0 @@ +-/* Testing s390x PTRACE_SINGLEBLOCK ptrace request. +- Copyright (C) 2017 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 +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* Ensure that we use the PTRACE_SINGLEBLOCK definition from glibc ptrace.h +- in tracer_func. We need the kernel ptrace.h for structs ptrace_area +- and gregset_t. */ +-#include +-static const enum __ptrace_request req_singleblock = PTRACE_SINGLEBLOCK; +-#include +- +-static void +-tracee_func (int pid) +-{ +- /* Dump the mapping information for manual inspection of the printed +- tracee addresses. */ +- char str[80]; +- sprintf (str, "cat /proc/%d/maps", pid); +- puts (str); +- system (str); +- fflush (stdout); +- +- TEST_VERIFY_EXIT (ptrace (PTRACE_TRACEME) == 0); +- /* Stop tracee. Afterwards the tracer_func can operate. */ +- kill (pid, SIGSTOP); +- +- puts ("The PTRACE_SINGLEBLOCK of the tracer will stop after: " +- "brasl %r14,!"); +-} +- +-static void +-tracer_func (int pid) +-{ +- unsigned long last_break; +- ptrace_area parea; +- gregset_t regs; +- struct iovec parea2; +- gregset_t regs2; +- +- int status; +- +- while (1) +- { +- /* Wait for the tracee to be stopped or exited. */ +- wait (&status); +- if (WIFEXITED (status)) +- break; +- +- /* Get information about tracee: gprs, last breaking address. */ +- parea.len = sizeof (regs); +- parea.process_addr = (unsigned long) ®s; +- parea.kernel_addr = 0; +- TEST_VERIFY_EXIT (ptrace (PTRACE_PEEKUSR_AREA, pid, &parea) == 0); +- TEST_VERIFY_EXIT (ptrace (PTRACE_GET_LAST_BREAK, pid, NULL, &last_break) +- == 0); +- +- parea2.iov_len = sizeof (regs2); +- parea2.iov_base = ®s2; +- TEST_VERIFY_EXIT (ptrace (PTRACE_GETREGSET, pid, NT_PRSTATUS, &parea2) +- == 0); +- TEST_VERIFY_EXIT (parea2.iov_len == sizeof (regs2)); +- +- /* Test if gprs obtained by PTRACE_PEEKUSR_AREA and PTRACE_GETREGESET +- have the same values. */ +- TEST_VERIFY_EXIT (memcmp (®s, ®s2, sizeof (regs)) == 0); +- +- printf ("child IA: %p last_break: %p\n", +- (void *) regs[1], (void *) last_break); +- +- /* Execute tracee until next taken branch. +- +- Note: +- Before the commit which introduced this testcase, +- /sysdeps/unix/sysv/linux/s390/sys/ptrace.h +- uses ptrace-request 12 for PTRACE_GETREGS, +- but /include/uapi/linux/ptrace.h +- uses 12 for PTRACE_SINGLEBLOCK. +- +- The s390 kernel has no support for PTRACE_GETREGS! +- Thus glibc ptrace.h is adjusted to match kernel ptrace.h. +- +- This test ensures, that PTRACE_SINGLEBLOCK defined in glibc +- works as expected. If the kernel would interpret it as +- PTRACE_GETREGS, then the tracee will not make any progress +- and this testcase will time out. */ +- TEST_VERIFY_EXIT (ptrace (req_singleblock, pid, NULL, NULL) == 0); +- } +-} +- +-static int +-do_test (void) +-{ +- int pid; +- pid = xfork (); +- if (pid) +- tracer_func (pid); +- else +- tracee_func (getpid ()); +- +- return EXIT_SUCCESS; +-} +- +-#include diff --git a/glibc.spec b/glibc.spec index eb31664..3d85b87 100644 --- a/glibc.spec +++ b/glibc.spec @@ -290,6 +290,8 @@ Patch2037: glibc-rh1315108.patch # sln implemented by ldconfig, to conserve disk space. Patch2112: glibc-rh1315476-2.patch +Patch2113: glibc-rh1469536.patch + ############################################################################## # End of glibc patches. ############################################################################## @@ -849,6 +851,7 @@ microbenchmark tests on the system. %patch0060 -p1 %patch2037 -p1 %patch2112 -p1 +%patch2113 -p1 %patch0061 -p1 ############################################################################## @@ -2266,6 +2269,7 @@ rm -f *.filelist* %changelog * Tue Jul 11 2017 Florian Weimer - 2.25.90-22 - Reinstantiate stack_t cleanup (#1468904) +- s390x: Restore PTRACE_GETREGS etc. to get GCC to build (#1469536) * Sun Jul 9 2017 Florian Weimer - 2.25.90-21 - Back out stack_t cleanup (#1468904)