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