import strace-4.24-3.el8
This commit is contained in:
commit
e99d71d998
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
SOURCES/strace-4.24.tar.xz
|
1
.strace.metadata
Normal file
1
.strace.metadata
Normal file
@ -0,0 +1 @@
|
||||
09a8c9638fd02622157af9d744ad7c7f991c75df SOURCES/strace-4.24.tar.xz
|
@ -0,0 +1,291 @@
|
||||
From 14ae61f37b7c4ec236f011ab5c5866b43f6766b4 Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@altlinux.org>
|
||||
Date: Tue, 14 Aug 2018 13:43:34 +0000
|
||||
Subject: [PATCH] strace.c: introduce struct tcb_wait_data
|
||||
|
||||
Introduce a new structure to pass information between next_event(),
|
||||
restart_delayed_tcb(), and dispatch_event().
|
||||
|
||||
This is going to be used by a subsequent change of next_event().
|
||||
|
||||
* strace.c (struct tcb_wait_data): New type.
|
||||
(next_event): Remove parameters, return a pointer
|
||||
to const struct tcb_wait_data. Return NULL instead of TE_BREAK.
|
||||
(dispatch_event): Replace all parameters with a pointer
|
||||
to const struct tcb_wait_data, obtain the trace event, siginfo,
|
||||
and status from its fields.
|
||||
(restart_delayed_tcb): Add local struct tcb_wait_data variable
|
||||
with te field set to TE_RESTART, pass it to dispatch_event().
|
||||
(main): Remove status and si variables, update next_event()
|
||||
and dispatch_event() invocations.
|
||||
|
||||
Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
---
|
||||
strace.c | 107 ++++++++++++++++++++++++++++++++++++++++-----------------------
|
||||
1 file changed, 69 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/strace.c b/strace.c
|
||||
index cd04b98..6d70d20 100644
|
||||
--- a/strace.c
|
||||
+++ b/strace.c
|
||||
@@ -158,6 +158,12 @@ static bool open_append;
|
||||
struct tcb *printing_tcp;
|
||||
static struct tcb *current_tcp;
|
||||
|
||||
+struct tcb_wait_data {
|
||||
+ enum trace_event te; /**< Event passed to dispatch_event() */
|
||||
+ int status; /**< status, returned by wait4() */
|
||||
+ siginfo_t si; /**< siginfo, returned by PTRACE_GETSIGINFO */
|
||||
+};
|
||||
+
|
||||
static struct tcb **tcbtab;
|
||||
static unsigned int nprocs;
|
||||
static size_t tcbtabsize;
|
||||
@@ -2226,16 +2232,19 @@ print_event_exit(struct tcb *tcp)
|
||||
line_ended();
|
||||
}
|
||||
|
||||
-static enum trace_event
|
||||
-next_event(int *pstatus, siginfo_t *si)
|
||||
+static const struct tcb_wait_data *
|
||||
+next_event(void)
|
||||
{
|
||||
+ static struct tcb_wait_data wait_data;
|
||||
+
|
||||
int pid;
|
||||
int status;
|
||||
struct tcb *tcp;
|
||||
+ struct tcb_wait_data *wd = &wait_data;
|
||||
struct rusage ru;
|
||||
|
||||
if (interrupted)
|
||||
- return TE_BREAK;
|
||||
+ return NULL;
|
||||
|
||||
/*
|
||||
* Used to exit simply when nprocs hits zero, but in this testcase:
|
||||
@@ -2255,7 +2264,7 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
* on exit. Oh well...
|
||||
*/
|
||||
if (nprocs == 0)
|
||||
- return TE_BREAK;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
const bool unblock_delay_timer = is_delay_timer_armed();
|
||||
@@ -2278,7 +2287,7 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
* then the system call will be interrupted and
|
||||
* the expiration will be handled by the signal handler.
|
||||
*/
|
||||
- pid = wait4(-1, pstatus, __WALL, (cflag ? &ru : NULL));
|
||||
+ pid = wait4(-1, &status, __WALL, (cflag ? &ru : NULL));
|
||||
const int wait_errno = errno;
|
||||
|
||||
/*
|
||||
@@ -2292,14 +2301,16 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
sigprocmask(SIG_BLOCK, &timer_set, NULL);
|
||||
|
||||
if (restart_failed)
|
||||
- return TE_BREAK;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
if (pid < 0) {
|
||||
- if (wait_errno == EINTR)
|
||||
- return TE_NEXT;
|
||||
+ if (wait_errno == EINTR) {
|
||||
+ wd->te = TE_NEXT;
|
||||
+ return wd;
|
||||
+ }
|
||||
if (nprocs == 0 && wait_errno == ECHILD)
|
||||
- return TE_BREAK;
|
||||
+ return NULL;
|
||||
/*
|
||||
* If nprocs > 0, ECHILD is not expected,
|
||||
* treat it as any other error here:
|
||||
@@ -2308,12 +2319,13 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
perror_msg_and_die("wait4(__WALL)");
|
||||
}
|
||||
|
||||
- status = *pstatus;
|
||||
+ wd->status = status;
|
||||
|
||||
if (pid == popen_pid) {
|
||||
if (!WIFSTOPPED(status))
|
||||
popen_pid = 0;
|
||||
- return TE_NEXT;
|
||||
+ wd->te = TE_NEXT;
|
||||
+ return wd;
|
||||
}
|
||||
|
||||
if (debug_flag)
|
||||
@@ -2324,8 +2336,10 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
|
||||
if (!tcp) {
|
||||
tcp = maybe_allocate_tcb(pid, status);
|
||||
- if (!tcp)
|
||||
- return TE_NEXT;
|
||||
+ if (!tcp) {
|
||||
+ wd->te = TE_NEXT;
|
||||
+ return wd;
|
||||
+ }
|
||||
}
|
||||
|
||||
clear_regs(tcp);
|
||||
@@ -2342,11 +2356,15 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
tcp->stime = stime;
|
||||
}
|
||||
|
||||
- if (WIFSIGNALED(status))
|
||||
- return TE_SIGNALLED;
|
||||
+ if (WIFSIGNALED(status)) {
|
||||
+ wd->te = TE_SIGNALLED;
|
||||
+ return wd;
|
||||
+ }
|
||||
|
||||
- if (WIFEXITED(status))
|
||||
- return TE_EXITED;
|
||||
+ if (WIFEXITED(status)) {
|
||||
+ wd->te = TE_EXITED;
|
||||
+ return wd;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* As WCONTINUED flag has not been specified to wait4,
|
||||
@@ -2373,19 +2391,19 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
if (sig == SIGSTOP && (tcp->flags & TCB_IGNORE_ONE_SIGSTOP)) {
|
||||
debug_func_msg("ignored SIGSTOP on pid %d", tcp->pid);
|
||||
tcp->flags &= ~TCB_IGNORE_ONE_SIGSTOP;
|
||||
- return TE_RESTART;
|
||||
+ wd->te = TE_RESTART;
|
||||
} else if (sig == syscall_trap_sig) {
|
||||
- return TE_SYSCALL_STOP;
|
||||
+ wd->te = TE_SYSCALL_STOP;
|
||||
} else {
|
||||
- *si = (siginfo_t) {};
|
||||
+ memset(&wd->si, 0, sizeof(wd->si));
|
||||
/*
|
||||
* True if tracee is stopped by signal
|
||||
* (as opposed to "tracee received signal").
|
||||
* TODO: shouldn't we check for errno == EINVAL too?
|
||||
* We can get ESRCH instead, you know...
|
||||
*/
|
||||
- bool stopped = ptrace(PTRACE_GETSIGINFO, pid, 0, si) < 0;
|
||||
- return stopped ? TE_GROUP_STOP : TE_SIGNAL_DELIVERY_STOP;
|
||||
+ bool stopped = ptrace(PTRACE_GETSIGINFO, pid, 0, &wd->si) < 0;
|
||||
+ wd->te = stopped ? TE_GROUP_STOP : TE_SIGNAL_DELIVERY_STOP;
|
||||
}
|
||||
break;
|
||||
case PTRACE_EVENT_STOP:
|
||||
@@ -2398,16 +2416,23 @@ next_event(int *pstatus, siginfo_t *si)
|
||||
case SIGTSTP:
|
||||
case SIGTTIN:
|
||||
case SIGTTOU:
|
||||
- return TE_GROUP_STOP;
|
||||
+ wd->te = TE_GROUP_STOP;
|
||||
+ break;
|
||||
+ default:
|
||||
+ wd->te = TE_RESTART;
|
||||
}
|
||||
- return TE_RESTART;
|
||||
+ break;
|
||||
case PTRACE_EVENT_EXEC:
|
||||
- return TE_STOP_BEFORE_EXECVE;
|
||||
+ wd->te = TE_STOP_BEFORE_EXECVE;
|
||||
+ break;
|
||||
case PTRACE_EVENT_EXIT:
|
||||
- return TE_STOP_BEFORE_EXIT;
|
||||
+ wd->te = TE_STOP_BEFORE_EXIT;
|
||||
+ break;
|
||||
default:
|
||||
- return TE_RESTART;
|
||||
+ wd->te = TE_RESTART;
|
||||
}
|
||||
+
|
||||
+ return wd;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -2436,12 +2461,18 @@ trace_syscall(struct tcb *tcp, unsigned int *sig)
|
||||
|
||||
/* Returns true iff the main trace loop has to continue. */
|
||||
static bool
|
||||
-dispatch_event(enum trace_event ret, int *pstatus, siginfo_t *si)
|
||||
+dispatch_event(const struct tcb_wait_data *wd)
|
||||
{
|
||||
unsigned int restart_op = PTRACE_SYSCALL;
|
||||
unsigned int restart_sig = 0;
|
||||
+ enum trace_event te = wd ? wd->te : TE_BREAK;
|
||||
+ /*
|
||||
+ * Copy wd->status to a non-const variable to workaround glibc bugs
|
||||
+ * around union wait fixed by glibc commit glibc-2.24~391
|
||||
+ */
|
||||
+ int status = wd ? wd->status : 0;
|
||||
|
||||
- switch (ret) {
|
||||
+ switch (te) {
|
||||
case TE_BREAK:
|
||||
return false;
|
||||
|
||||
@@ -2469,17 +2500,17 @@ dispatch_event(enum trace_event ret, int *pstatus, siginfo_t *si)
|
||||
break;
|
||||
|
||||
case TE_SIGNAL_DELIVERY_STOP:
|
||||
- restart_sig = WSTOPSIG(*pstatus);
|
||||
- print_stopped(current_tcp, si, restart_sig);
|
||||
+ restart_sig = WSTOPSIG(status);
|
||||
+ print_stopped(current_tcp, &wd->si, restart_sig);
|
||||
break;
|
||||
|
||||
case TE_SIGNALLED:
|
||||
- print_signalled(current_tcp, current_tcp->pid, *pstatus);
|
||||
+ print_signalled(current_tcp, current_tcp->pid, status);
|
||||
droptcb(current_tcp);
|
||||
return true;
|
||||
|
||||
case TE_GROUP_STOP:
|
||||
- restart_sig = WSTOPSIG(*pstatus);
|
||||
+ restart_sig = WSTOPSIG(status);
|
||||
print_stopped(current_tcp, NULL, restart_sig);
|
||||
if (use_seize) {
|
||||
/*
|
||||
@@ -2494,7 +2525,7 @@ dispatch_event(enum trace_event ret, int *pstatus, siginfo_t *si)
|
||||
break;
|
||||
|
||||
case TE_EXITED:
|
||||
- print_exited(current_tcp, current_tcp->pid, *pstatus);
|
||||
+ print_exited(current_tcp, current_tcp->pid, status);
|
||||
droptcb(current_tcp);
|
||||
return true;
|
||||
|
||||
@@ -2577,13 +2608,15 @@ dispatch_event(enum trace_event ret, int *pstatus, siginfo_t *si)
|
||||
static bool
|
||||
restart_delayed_tcb(struct tcb *const tcp)
|
||||
{
|
||||
+ const struct tcb_wait_data wd = { .te = TE_RESTART };
|
||||
+
|
||||
debug_func_msg("pid %d", tcp->pid);
|
||||
|
||||
tcp->flags &= ~TCB_DELAYED;
|
||||
|
||||
struct tcb *const prev_tcp = current_tcp;
|
||||
current_tcp = tcp;
|
||||
- bool ret = dispatch_event(TE_RESTART, NULL, NULL);
|
||||
+ bool ret = dispatch_event(&wd);
|
||||
current_tcp = prev_tcp;
|
||||
|
||||
return ret;
|
||||
@@ -2694,9 +2727,7 @@ main(int argc, char *argv[])
|
||||
|
||||
exit_code = !nprocs;
|
||||
|
||||
- int status;
|
||||
- siginfo_t si;
|
||||
- while (dispatch_event(next_event(&status, &si), &status, &si))
|
||||
+ while (dispatch_event(next_event()))
|
||||
;
|
||||
terminate();
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
@ -0,0 +1,299 @@
|
||||
From 1e497a53b82bae846618e3b9064d6c4a63024aea Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@altlinux.org>
|
||||
Date: Wed, 4 Jul 2018 02:11:27 +0000
|
||||
Subject: [PATCH 1/3] tests: check tracing of looping threads
|
||||
|
||||
* test/many_looping_threads.c: Remove.
|
||||
* test/.gitignore: Remove many_looping_threads.
|
||||
* test/Makefile (PROGS): Likewise.
|
||||
(many_looping_threads): Remove.
|
||||
* tests/looping_threads.c: New file.
|
||||
* tests/looping_threads.test: New test.
|
||||
* tests/.gitignore: Add looping_threads.
|
||||
* tests/Makefile.am (check_PROGRAMS): Likewise.
|
||||
(looping_threads_LDADD): New variable.
|
||||
(MISC_TESTS, XFAIL_TESTS): Add looping_threads.test.
|
||||
---
|
||||
test/.gitignore | 1 -
|
||||
test/Makefile | 5 +-
|
||||
test/many_looping_threads.c | 49 --------------------
|
||||
tests/.gitignore | 1 +
|
||||
tests/Makefile.am | 6 ++-
|
||||
tests/looping_threads.c | 110 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
tests/looping_threads.test | 37 +++++++++++++++
|
||||
7 files changed, 154 insertions(+), 55 deletions(-)
|
||||
delete mode 100644 test/many_looping_threads.c
|
||||
create mode 100644 tests/looping_threads.c
|
||||
create mode 100755 tests/looping_threads.test
|
||||
|
||||
Index: strace-4.24/tests/Makefile.am
|
||||
===================================================================
|
||||
--- strace-4.24.orig/tests/Makefile.am 2018-09-12 23:52:54.858953939 +0200
|
||||
+++ strace-4.24/tests/Makefile.am 2018-09-13 00:44:12.638097032 +0200
|
||||
@@ -127,6 +127,7 @@
|
||||
ksysent \
|
||||
list_sigaction_signum \
|
||||
localtime \
|
||||
+ looping_threads \
|
||||
mmsg-silent \
|
||||
mmsg_name-v \
|
||||
msg_control-v \
|
||||
@@ -190,6 +191,7 @@
|
||||
fstatat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
ftruncate64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
localtime_LDADD = $(clock_LIBS) $(LDADD)
|
||||
+looping_threads_LDADD = -lpthread $(LDADD)
|
||||
lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
@@ -321,6 +323,7 @@
|
||||
interactive_block.test \
|
||||
ksysent.test \
|
||||
localtime.test \
|
||||
+ looping_threads.test \
|
||||
opipe.test \
|
||||
options-syntax.test \
|
||||
pc.test \
|
||||
@@ -364,7 +367,8 @@
|
||||
XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
|
||||
XFAIL_TESTS_x86_64 = int_0x80.gen.test
|
||||
XFAIL_TESTS_x32 = int_0x80.gen.test
|
||||
-XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
|
||||
+XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH)) \
|
||||
+ looping_threads.test
|
||||
|
||||
TEST_LOG_COMPILER = env
|
||||
AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) STRACE_NATIVE_ARCH=$(NATIVE_ARCH) \
|
||||
Index: strace-4.24/tests/looping_threads.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-4.24/tests/looping_threads.c 2018-09-12 23:53:31.739527473 +0200
|
||||
@@ -0,0 +1,110 @@
|
||||
+/*
|
||||
+ * Check tracing of looping threads.
|
||||
+ *
|
||||
+ * Copyright (c) 2009-2018 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in the
|
||||
+ * documentation and/or other materials provided with the distribution.
|
||||
+ * 3. The name of the author may not be used to endorse or promote products
|
||||
+ * derived from this software without specific prior written permission.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+ */
|
||||
+
|
||||
+#include "tests.h"
|
||||
+#include <assert.h>
|
||||
+#include <errno.h>
|
||||
+#include <pthread.h>
|
||||
+#include <signal.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <unistd.h>
|
||||
+#include <sys/wait.h>
|
||||
+
|
||||
+static void *
|
||||
+thread(void *arg)
|
||||
+{
|
||||
+ for (;;)
|
||||
+ getuid();
|
||||
+ return arg;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main(int ac, const char *av[])
|
||||
+{
|
||||
+ assert(ac == 3);
|
||||
+
|
||||
+ int timeout = atoi(av[1]);
|
||||
+ assert(timeout > 0);
|
||||
+
|
||||
+ int num_threads = atoi(av[2]);
|
||||
+ assert(num_threads > 0);
|
||||
+
|
||||
+ /* Create a new process group. */
|
||||
+ if (setpgid(0, 0))
|
||||
+ perror_msg_and_fail("setpgid");
|
||||
+
|
||||
+ /*
|
||||
+ * When the main process terminates, the process group becomes orphaned.
|
||||
+ * If any member of the orphaned process group is stopped, then
|
||||
+ * a SIGHUP signal followed by a SIGCONT signal is sent to each process
|
||||
+ * in the orphaned process group.
|
||||
+ * Create a process in a stopped state to activate this behaviour.
|
||||
+ */
|
||||
+ pid_t stopped = fork();
|
||||
+ if (stopped < 0)
|
||||
+ perror_msg_and_fail("fork");
|
||||
+ if (!stopped) {
|
||||
+ raise(SIGSTOP);
|
||||
+ _exit(0);
|
||||
+ }
|
||||
+
|
||||
+ const sigset_t set = {};
|
||||
+ const struct sigaction act = { .sa_handler = SIG_DFL };
|
||||
+ if (sigaction(SIGALRM, &act, NULL))
|
||||
+ perror_msg_and_fail("sigaction");
|
||||
+ if (sigprocmask(SIG_SETMASK, &set, NULL))
|
||||
+ perror_msg_and_fail("sigprocmask");
|
||||
+ alarm(timeout);
|
||||
+
|
||||
+ /*
|
||||
+ * Create all threads in a subprocess, this guarantees that
|
||||
+ * their tracer will not be their parent.
|
||||
+ */
|
||||
+ pid_t pid = fork();
|
||||
+ if (pid < 0)
|
||||
+ perror_msg_and_fail("fork");
|
||||
+ if (!pid) {
|
||||
+ for (int i = 0; i < num_threads; i++) {
|
||||
+ pthread_t t;
|
||||
+ if ((errno = pthread_create(&t, NULL, thread, NULL)))
|
||||
+ perror_msg_and_fail("pthread_create #%d", i);
|
||||
+ }
|
||||
+
|
||||
+ /* This terminates all threads. */
|
||||
+ _exit(0);
|
||||
+ }
|
||||
+
|
||||
+ int s;
|
||||
+ if (waitpid(pid, &s, 0) != pid)
|
||||
+ perror_msg_and_fail("waitpid");
|
||||
+
|
||||
+ assert(WIFEXITED(s));
|
||||
+ return WEXITSTATUS(s);
|
||||
+}
|
||||
Index: strace-4.24/tests/looping_threads.test
|
||||
new file mode 0755
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-4.24/tests/looping_threads.test 2018-09-12 23:53:31.740527461 +0200
|
||||
@@ -0,0 +1,37 @@
|
||||
+#!/bin/sh
|
||||
+#
|
||||
+# Check tracing of looping threads.
|
||||
+#
|
||||
+# Copyright (c) 2009-2018 The strace developers.
|
||||
+# All rights reserved.
|
||||
+#
|
||||
+# Redistribution and use in source and binary forms, with or without
|
||||
+# modification, are permitted provided that the following conditions
|
||||
+# are met:
|
||||
+# 1. Redistributions of source code must retain the above copyright
|
||||
+# notice, this list of conditions and the following disclaimer.
|
||||
+# 2. Redistributions in binary form must reproduce the above copyright
|
||||
+# notice, this list of conditions and the following disclaimer in the
|
||||
+# documentation and/or other materials provided with the distribution.
|
||||
+# 3. The name of the author may not be used to endorse or promote products
|
||||
+# derived from this software without specific prior written permission.
|
||||
+#
|
||||
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+
|
||||
+. "${srcdir=.}/init.sh"
|
||||
+
|
||||
+check_prog nproc
|
||||
+timeout="$(($TIMEOUT_DURATION/10))"
|
||||
+nproc="$((64+$timeout+$(nproc)))"
|
||||
+
|
||||
+run_prog "../$NAME" "$timeout" "$nproc"
|
||||
+run_strace -f -qq -enone -esignal=none $args
|
||||
Index: strace-4.24/tests/Makefile.in
|
||||
===================================================================
|
||||
--- strace-4.24.orig/tests/Makefile.in 2018-08-14 02:44:39.000000000 +0200
|
||||
+++ strace-4.24/tests/Makefile.in 2018-09-13 00:51:18.191618128 +0200
|
||||
@@ -155,7 +155,7 @@
|
||||
ioctl_perf-success$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
|
||||
is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
|
||||
list_sigaction_signum$(EXEEXT) localtime$(EXEEXT) \
|
||||
- mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
|
||||
+ looping_threads$(EXEEXT) mmsg-silent$(EXEEXT) mmsg_name-v$(EXEEXT) \
|
||||
msg_control-v$(EXEEXT) net-accept-connect$(EXEEXT) \
|
||||
net-tpacket_stats-success$(EXEEXT) netlink_inet_diag$(EXEEXT) \
|
||||
netlink_netlink_diag$(EXEEXT) netlink_unix_diag$(EXEEXT) \
|
||||
@@ -1221,6 +1221,9 @@
|
||||
lookup_dcookie_OBJECTS = lookup_dcookie.$(OBJEXT)
|
||||
lookup_dcookie_LDADD = $(LDADD)
|
||||
lookup_dcookie_DEPENDENCIES = libtests.a
|
||||
+looping_threads_SOURCES = looping_threads.c
|
||||
+looping_threads_OBJECTS = looping_threads.$(OBJEXT)
|
||||
+looping_threads_DEPENDENCIES = $(LDADD)
|
||||
lseek_SOURCES = lseek.c
|
||||
lseek_OBJECTS = lseek.$(OBJEXT)
|
||||
lseek_LDADD = $(LDADD)
|
||||
@@ -2743,7 +2746,7 @@
|
||||
kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
|
||||
keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
|
||||
lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
|
||||
- localtime.c lookup_dcookie.c lseek.c lstat.c lstat64.c \
|
||||
+ localtime.c lookup_dcookie.c looping_threads.c lseek.c lstat.c lstat64.c \
|
||||
madvise.c mbind.c membarrier.c memfd_create.c migrate_pages.c \
|
||||
mincore.c mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
|
||||
mlockall.c mmap.c mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
|
||||
@@ -2888,7 +2891,7 @@
|
||||
kexec_file_load.c kexec_load.c keyctl.c keyctl-Xabbrev.c \
|
||||
keyctl-Xraw.c keyctl-Xverbose.c kill.c ksysent.c lchown.c \
|
||||
lchown32.c link.c linkat.c list_sigaction_signum.c llseek.c \
|
||||
- localtime.c lookup_dcookie.c lseek.c lstat.c lstat64.c \
|
||||
+ localtime.c lookup_dcookie.c looping_threads.c lseek.c lstat.c lstat64.c \
|
||||
madvise.c mbind.c membarrier.c memfd_create.c migrate_pages.c \
|
||||
mincore.c mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
|
||||
mlockall.c mmap.c mmap-Xabbrev.c mmap-Xraw.c mmap-Xverbose.c \
|
||||
@@ -3911,6 +3914,7 @@
|
||||
fstatat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
ftruncate64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
localtime_LDADD = $(clock_LIBS) $(LDADD)
|
||||
+looping_threads_LDADD = -lpthread $(LDADD)
|
||||
lstat64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
mmap64_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
mmap64_Xabbrev_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
|
||||
@@ -4229,6 +4233,7 @@
|
||||
interactive_block.test \
|
||||
ksysent.test \
|
||||
localtime.test \
|
||||
+ looping_threads.test \
|
||||
opipe.test \
|
||||
options-syntax.test \
|
||||
pc.test \
|
||||
@@ -5226,6 +5231,10 @@
|
||||
@rm -f lookup_dcookie$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(lookup_dcookie_OBJECTS) $(lookup_dcookie_LDADD) $(LIBS)
|
||||
|
||||
+looping_threads$(EXEEXT): $(looping_threads_OBJECTS) $(looping_threads_DEPENDENCIES) $(EXTRA_looping_threads_DEPENDENCIES)
|
||||
+ @rm -f looping_threads$(EXEEXT)
|
||||
+ $(AM_V_CCLD)$(LINK) $(looping_threads_OBJECTS) $(looping_threads_LDADD) $(LIBS)
|
||||
+
|
||||
lseek$(EXEEXT): $(lseek_OBJECTS) $(lseek_DEPENDENCIES) $(EXTRA_lseek_DEPENDENCIES)
|
||||
@rm -f lseek$(EXEEXT)
|
||||
$(AM_V_CCLD)$(LINK) $(lseek_OBJECTS) $(lseek_LDADD) $(LIBS)
|
||||
@@ -6890,6 +6899,7 @@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/llseek.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localtime.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup_dcookie.Po@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/looping_threads.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat64-lstat64.Po@am__quote@
|
@ -0,0 +1,213 @@
|
||||
From a5855e84f17181167754caa26280161cd786a386 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Sun, 11 Sep 2016 12:11:45 +0300
|
||||
Subject: [PATCH 2/3] Add a generic list implementation
|
||||
|
||||
Similar to one used in the Linux kernel.
|
||||
|
||||
* macros.h (cast_ptr, containerof): New macros.
|
||||
* list.h: New file.
|
||||
* Makefile.am (strace_SOURCES): Add it.
|
||||
---
|
||||
Makefile.am | 1 +
|
||||
list.h | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
macros.h | 9 ++++
|
||||
3 files changed, 147 insertions(+)
|
||||
create mode 100644 list.h
|
||||
|
||||
Index: strace-4.24/Makefile.am
|
||||
===================================================================
|
||||
--- strace-4.24.orig/Makefile.am 2018-09-13 00:07:30.798555060 +0200
|
||||
+++ strace-4.24/Makefile.am 2018-09-13 00:42:10.058675213 +0200
|
||||
@@ -185,6 +185,7 @@
|
||||
linux/asm_stat.h \
|
||||
linux/x32/asm_stat.h \
|
||||
linux/x86_64/asm_stat.h \
|
||||
+ list.h \
|
||||
listen.c \
|
||||
lookup_dcookie.c \
|
||||
loop.c \
|
||||
Index: strace-4.24/list.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-4.24/list.h 2018-09-13 00:42:10.059675201 +0200
|
||||
@@ -0,0 +1,137 @@
|
||||
+/*
|
||||
+ * Some simple implementation of a list similar to one used in the kernel.
|
||||
+ *
|
||||
+ * Copyright (c) 2016-2018 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * Redistribution and use in source and binary forms, with or without
|
||||
+ * modification, are permitted provided that the following conditions
|
||||
+ * are met:
|
||||
+ * 1. Redistributions of source code must retain the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer.
|
||||
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ * notice, this list of conditions and the following disclaimer in the
|
||||
+ * documentation and/or other materials provided with the distribution.
|
||||
+ * 3. The name of the author may not be used to endorse or promote products
|
||||
+ * derived from this software without specific prior written permission.
|
||||
+ *
|
||||
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+ */
|
||||
+
|
||||
+#ifndef STRACE_LIST_H
|
||||
+#define STRACE_LIST_H
|
||||
+
|
||||
+#include "macros.h"
|
||||
+
|
||||
+struct list_item {
|
||||
+ struct list_item *prev;
|
||||
+ struct list_item *next;
|
||||
+};
|
||||
+
|
||||
+#define EMPTY_LIST(l_) struct list_item l_ = { &l_, &l_ }
|
||||
+
|
||||
+static inline void
|
||||
+list_init(struct list_item *l)
|
||||
+{
|
||||
+ l->prev = l;
|
||||
+ l->next = l;
|
||||
+}
|
||||
+
|
||||
+static inline bool
|
||||
+list_is_empty(struct list_item *l)
|
||||
+{
|
||||
+ return (l->next == l) && (l->prev == l);
|
||||
+}
|
||||
+
|
||||
+#define list_elem(var, type, field) containerof((var), type, field)
|
||||
+
|
||||
+#define list_head(head, type, field) \
|
||||
+ (list_is_empty(head) ? NULL : list_elem((head)->next, type, field))
|
||||
+#define list_tail(head, type, field) \
|
||||
+ (list_is_empty(head) ? NULL : list_elem((head)->prev, type, field))
|
||||
+
|
||||
+#define list_next(val, field) \
|
||||
+ list_elem((val)->field.next, typeof(*(val)), field)
|
||||
+#define list_prev(val, field) \
|
||||
+ list_elem((val)->field.prev, typeof(*(val)), field)
|
||||
+
|
||||
+static inline void
|
||||
+list_insert(struct list_item *head, struct list_item *item)
|
||||
+{
|
||||
+ item->next = head->next;
|
||||
+ item->prev = head;
|
||||
+ head->next->prev = item;
|
||||
+ head->next = item;
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+list_append(struct list_item *head, struct list_item *item)
|
||||
+{
|
||||
+ item->next = head;
|
||||
+ item->prev = head->prev;
|
||||
+ head->prev->next = item;
|
||||
+ head->prev = item;
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+list_remove(struct list_item *item)
|
||||
+{
|
||||
+ if (!item->next || !item->prev)
|
||||
+ return;
|
||||
+
|
||||
+ item->prev->next = item->next;
|
||||
+ item->next->prev = item->prev;
|
||||
+ item->next = item->prev = NULL;
|
||||
+}
|
||||
+
|
||||
+static inline struct list_item *
|
||||
+list_remove_tail(struct list_item *head)
|
||||
+{
|
||||
+ struct list_item *t = list_is_empty(head) ? NULL : head->prev;
|
||||
+
|
||||
+ if (t)
|
||||
+ list_remove(t);
|
||||
+
|
||||
+ return t;
|
||||
+}
|
||||
+
|
||||
+static inline struct list_item *
|
||||
+list_remove_head(struct list_item *head)
|
||||
+{
|
||||
+ struct list_item *h = list_is_empty(head) ? NULL : head->next;
|
||||
+
|
||||
+ if (h)
|
||||
+ list_remove(h);
|
||||
+
|
||||
+ return h;
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+list_replace(struct list_item *old, struct list_item *new)
|
||||
+{
|
||||
+ new->next = old->next;
|
||||
+ new->prev = old->prev;
|
||||
+ old->prev->next = new;
|
||||
+ old->next->prev = new;
|
||||
+ old->next = old->prev = NULL;
|
||||
+}
|
||||
+
|
||||
+#define list_foreach(var_, head_, field_) \
|
||||
+ for (var_ = list_elem((head_)->next, typeof(*var_), field_); \
|
||||
+ &(var_->field_) != (head_); var_ = list_next(var_, field_))
|
||||
+
|
||||
+#define list_foreach_safe(var_, head_, field_, _tmp) \
|
||||
+ for (var_ = list_elem((head_)->next, typeof(*var_), field_), \
|
||||
+ _tmp = list_elem((var_)->field_.next, typeof(*var_), field_); \
|
||||
+ &var_->field_ != head_; var_ = _tmp, _tmp = list_next(_tmp, field_))
|
||||
+
|
||||
+#endif /* !STRACE_LIST_H */
|
||||
Index: strace-4.24/macros.h
|
||||
===================================================================
|
||||
--- strace-4.24.orig/macros.h 2018-09-13 00:07:30.798555060 +0200
|
||||
+++ strace-4.24/macros.h 2018-09-13 00:42:10.059675201 +0200
|
||||
@@ -53,6 +53,15 @@
|
||||
(offsetof(type_, member_) + sizeof(((type_ *)0)->member_))
|
||||
#endif
|
||||
|
||||
+#ifndef cast_ptr
|
||||
+# define cast_ptr(type, var) ((type) (uintptr_t) (const volatile void *) (var))
|
||||
+#endif
|
||||
+
|
||||
+#ifndef containerof
|
||||
+# define containerof(x, s, m) \
|
||||
+ cast_ptr(s *, (const volatile char *) (x) - offsetof(s, m))
|
||||
+#endif
|
||||
+
|
||||
static inline bool
|
||||
is_filled(const char *ptr, char fill, size_t size)
|
||||
{
|
||||
Index: strace-4.24/Makefile.in
|
||||
===================================================================
|
||||
--- strace-4.24.orig/Makefile.in 2018-08-14 02:44:37.000000000 +0200
|
||||
+++ strace-4.24/Makefile.in 2018-09-13 00:45:21.266213460 +0200
|
||||
@@ -340,7 +340,7 @@
|
||||
ipc_sem.c ipc_shm.c ipc_shmctl.c kcmp.c kernel_types.h kexec.c \
|
||||
keyctl.c keyctl_kdf_params.h kvm.c largefile_wrappers.h ldt.c \
|
||||
link.c linux/asm_stat.h linux/x32/asm_stat.h \
|
||||
- linux/x86_64/asm_stat.h listen.c lookup_dcookie.c loop.c \
|
||||
+ linux/x86_64/asm_stat.h list.h listen.c lookup_dcookie.c loop.c \
|
||||
lseek.c macros.h mem.c membarrier.c memfd_create.c mknod.c \
|
||||
mmap_notify.c mmap_notify.h mmsghdr.c mount.c mpers_type.h \
|
||||
mq.c msghdr.c msghdr.h mtd.c native_defs.h negated_errno.h \
|
||||
@@ -1357,7 +1357,7 @@
|
||||
ipc_shmctl.c kcmp.c kernel_types.h kexec.c keyctl.c \
|
||||
keyctl_kdf_params.h kvm.c largefile_wrappers.h ldt.c link.c \
|
||||
linux/asm_stat.h linux/x32/asm_stat.h linux/x86_64/asm_stat.h \
|
||||
- listen.c lookup_dcookie.c loop.c lseek.c macros.h mem.c \
|
||||
+ list.h listen.c lookup_dcookie.c loop.c lseek.c macros.h mem.c \
|
||||
membarrier.c memfd_create.c mknod.c mmap_notify.c \
|
||||
mmap_notify.h mmsghdr.c mount.c mpers_type.h mq.c msghdr.c \
|
||||
msghdr.h mtd.c native_defs.h negated_errno.h net.c netlink.c \
|
@ -0,0 +1,491 @@
|
||||
From c527f21b7528e14b13d2be13acf5c42359e94021 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Wed, 8 Aug 2018 21:41:39 +0200
|
||||
Subject: [PATCH 3/3] Implement queueing of threads before dispatching them
|
||||
|
||||
It is possible that some tracees call a lot of cheap syscalls too fast,
|
||||
and that can lead to starvation to the point some tracees are not served
|
||||
for indefinite amount of time. In order to solve that unfairness, try
|
||||
to collect all the pending tracees first along with the relevant
|
||||
information and only then dispatch the events.
|
||||
|
||||
* defs.h: Include "list.h".
|
||||
(struct tcb): Add wait_data_idx and wait_list fields.
|
||||
* strace.c (struct tcb_wait_data): Add "msg" field.
|
||||
(tcb_wait_tab): New static variable.
|
||||
(expand_tcbtab): Resize tcb_wait_tab along with tcbtab, provide
|
||||
an additional slot for extra event.
|
||||
(droptcb): Remove tcp from wait_list.
|
||||
(maybe_switch_tcbs): Get old pid from
|
||||
tcb_wait_tab[tcp->wait_data_idx].msg.
|
||||
(next_event): Add pending_tcps, extra_tcp, wait_nohang, elem, and
|
||||
wait_tab_pos variables; check for elements in pending_tcps and skip
|
||||
waiting if the list is not empty; check for extra_tcp and skip waiting
|
||||
along with swapping wait_data_idx with wait_extra_data_idx;
|
||||
after the initial wait, call wait4() in loop with WNOHANG flag set;
|
||||
fetch siginfo on signal and eventmsg on PTRACE_EVENT_EXEC;
|
||||
return the first tcp in pending_tcps list.
|
||||
* tests/Makefile.am (XFAIL_TEST): Remove looping_threads.test.
|
||||
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=478419
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=526740
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=851457
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1609318
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1610774
|
||||
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
|
||||
Co-Authored-by: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Co-Authored-by: Andreas Schwab <aschwab@redhat.com>
|
||||
Co-Authored-by: Jeff Law <law@redhat.com>
|
||||
Co-Authored-by: DJ Delorie <dj@redhat.com>
|
||||
---
|
||||
defs.h | 10 ++
|
||||
strace.c | 321 ++++++++++++++++++++++++++++++++++--------------------
|
||||
tests/Makefile.am | 3 +-
|
||||
3 files changed, 212 insertions(+), 122 deletions(-)
|
||||
|
||||
Index: strace-4.24/defs.h
|
||||
===================================================================
|
||||
--- strace-4.24.orig/defs.h 2018-09-12 23:52:48.978021943 +0200
|
||||
+++ strace-4.24/defs.h 2018-09-12 23:53:35.764480931 +0200
|
||||
@@ -57,6 +57,7 @@
|
||||
#include "error_prints.h"
|
||||
#include "gcc_compat.h"
|
||||
#include "kernel_types.h"
|
||||
+#include "list.h"
|
||||
#include "macros.h"
|
||||
#include "mpers_type.h"
|
||||
#include "string_to_uint.h"
|
||||
@@ -236,6 +237,15 @@
|
||||
|
||||
struct mmap_cache_t *mmap_cache;
|
||||
|
||||
+ /*
|
||||
+ * Data that is stored during process wait traversal.
|
||||
+ * We use indices as the actual data is stored in an array
|
||||
+ * that is realloc'ed in runtime.
|
||||
+ */
|
||||
+ size_t wait_data_idx;
|
||||
+ struct list_item wait_list;
|
||||
+
|
||||
+
|
||||
#ifdef HAVE_LINUX_KVM_H
|
||||
struct vcpu_info *vcpu_info_list;
|
||||
#endif
|
||||
Index: strace-4.24/strace.c
|
||||
===================================================================
|
||||
--- strace-4.24.orig/strace.c 2018-09-12 23:53:30.371543291 +0200
|
||||
+++ strace-4.24/strace.c 2018-09-12 23:53:35.765480919 +0200
|
||||
@@ -161,10 +161,17 @@
|
||||
struct tcb_wait_data {
|
||||
enum trace_event te; /**< Event passed to dispatch_event() */
|
||||
int status; /**< status, returned by wait4() */
|
||||
+ unsigned long msg; /**< Value returned by PTRACE_GETEVENTMSG */
|
||||
siginfo_t si; /**< siginfo, returned by PTRACE_GETSIGINFO */
|
||||
};
|
||||
|
||||
static struct tcb **tcbtab;
|
||||
+/*
|
||||
+ * Since the queueing of tracees stops as soon as wait4() returns EAGAIN,
|
||||
+ * or at least two events for a single tracee, tab_wait_tab size shouldn't
|
||||
+ * exceed tcbtabsize + 1.
|
||||
+ */
|
||||
+static struct tcb_wait_data *tcb_wait_tab;
|
||||
static unsigned int nprocs;
|
||||
static size_t tcbtabsize;
|
||||
|
||||
@@ -750,6 +757,9 @@
|
||||
for (tcb_ptr = tcbtab + old_tcbtabsize;
|
||||
tcb_ptr < tcbtab + tcbtabsize; tcb_ptr++, newtcbs++)
|
||||
*tcb_ptr = newtcbs;
|
||||
+
|
||||
+ tcb_wait_tab = xreallocarray(tcb_wait_tab, sizeof(*tcb_wait_tab),
|
||||
+ tcbtabsize + 1);
|
||||
}
|
||||
|
||||
static struct tcb *
|
||||
@@ -853,6 +863,8 @@
|
||||
if (printing_tcp == tcp)
|
||||
printing_tcp = NULL;
|
||||
|
||||
+ list_remove(&tcp->wait_list);
|
||||
+
|
||||
memset(tcp, 0, sizeof(*tcp));
|
||||
}
|
||||
|
||||
@@ -2071,10 +2083,8 @@
|
||||
{
|
||||
FILE *fp;
|
||||
struct tcb *execve_thread;
|
||||
- long old_pid = 0;
|
||||
+ long old_pid = tcb_wait_tab[tcp->wait_data_idx].msg;
|
||||
|
||||
- if (ptrace(PTRACE_GETEVENTMSG, pid, NULL, &old_pid) < 0)
|
||||
- return tcp;
|
||||
/* Avoid truncation in pid2tcb() param passing */
|
||||
if (old_pid <= 0 || old_pid == pid)
|
||||
return tcp;
|
||||
@@ -2235,17 +2245,27 @@
|
||||
static const struct tcb_wait_data *
|
||||
next_event(void)
|
||||
{
|
||||
- static struct tcb_wait_data wait_data;
|
||||
-
|
||||
- int pid;
|
||||
- int status;
|
||||
- struct tcb *tcp;
|
||||
- struct tcb_wait_data *wd = &wait_data;
|
||||
- struct rusage ru;
|
||||
-
|
||||
if (interrupted)
|
||||
return NULL;
|
||||
|
||||
+ struct tcb *tcp = NULL;
|
||||
+ struct list_item *elem;
|
||||
+
|
||||
+ static EMPTY_LIST(pending_tcps);
|
||||
+ if (!list_is_empty(&pending_tcps))
|
||||
+ goto next_event_get_tcp;
|
||||
+
|
||||
+ static struct tcb *extra_tcp;
|
||||
+ static size_t wait_extra_data_idx;
|
||||
+ if (extra_tcp) {
|
||||
+ tcp = extra_tcp;
|
||||
+ extra_tcp = NULL;
|
||||
+ tcp->wait_data_idx = wait_extra_data_idx;
|
||||
+
|
||||
+ debug_msg("dequeued extra event for pid %u", tcp->pid);
|
||||
+ goto next_event_exit;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Used to exit simply when nprocs hits zero, but in this testcase:
|
||||
* int main(void) { _exit(!!fork()); }
|
||||
@@ -2287,8 +2307,10 @@
|
||||
* then the system call will be interrupted and
|
||||
* the expiration will be handled by the signal handler.
|
||||
*/
|
||||
- pid = wait4(-1, &status, __WALL, (cflag ? &ru : NULL));
|
||||
- const int wait_errno = errno;
|
||||
+ int status;
|
||||
+ struct rusage ru;
|
||||
+ int pid = wait4(-1, &status, __WALL, (cflag ? &ru : NULL));
|
||||
+ int wait_errno = errno;
|
||||
|
||||
/*
|
||||
* The window of opportunity to handle expirations
|
||||
@@ -2304,135 +2326,194 @@
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if (pid < 0) {
|
||||
- if (wait_errno == EINTR) {
|
||||
- wd->te = TE_NEXT;
|
||||
- return wd;
|
||||
+ size_t wait_tab_pos = 0;
|
||||
+ bool wait_nohang = false;
|
||||
+
|
||||
+ for (;;) {
|
||||
+ struct tcb_wait_data *wd;
|
||||
+
|
||||
+ if (pid < 0) {
|
||||
+ if (wait_errno == EINTR)
|
||||
+ break;
|
||||
+ if (wait_nohang)
|
||||
+ break;
|
||||
+ if (nprocs == 0 && wait_errno == ECHILD)
|
||||
+ return NULL;
|
||||
+ /*
|
||||
+ * If nprocs > 0, ECHILD is not expected,
|
||||
+ * treat it as any other error here:
|
||||
+ */
|
||||
+ errno = wait_errno;
|
||||
+ perror_msg_and_die("wait4(__WALL)");
|
||||
}
|
||||
- if (nprocs == 0 && wait_errno == ECHILD)
|
||||
- return NULL;
|
||||
- /*
|
||||
- * If nprocs > 0, ECHILD is not expected,
|
||||
- * treat it as any other error here:
|
||||
- */
|
||||
- errno = wait_errno;
|
||||
- perror_msg_and_die("wait4(__WALL)");
|
||||
- }
|
||||
|
||||
- wd->status = status;
|
||||
+ if (!pid)
|
||||
+ break;
|
||||
|
||||
- if (pid == popen_pid) {
|
||||
- if (!WIFSTOPPED(status))
|
||||
- popen_pid = 0;
|
||||
- wd->te = TE_NEXT;
|
||||
- return wd;
|
||||
- }
|
||||
+ if (pid == popen_pid) {
|
||||
+ if (!WIFSTOPPED(status))
|
||||
+ popen_pid = 0;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- if (debug_flag)
|
||||
- print_debug_info(pid, status);
|
||||
+ if (debug_flag)
|
||||
+ print_debug_info(pid, status);
|
||||
|
||||
- /* Look up 'pid' in our table. */
|
||||
- tcp = pid2tcb(pid);
|
||||
+ /* Look up 'pid' in our table. */
|
||||
+ tcp = pid2tcb(pid);
|
||||
|
||||
- if (!tcp) {
|
||||
- tcp = maybe_allocate_tcb(pid, status);
|
||||
if (!tcp) {
|
||||
- wd->te = TE_NEXT;
|
||||
- return wd;
|
||||
+ tcp = maybe_allocate_tcb(pid, status);
|
||||
+ if (!tcp)
|
||||
+ break;
|
||||
}
|
||||
- }
|
||||
|
||||
- clear_regs(tcp);
|
||||
+ if (cflag) {
|
||||
+ struct timespec stime = {
|
||||
+ .tv_sec = ru.ru_stime.tv_sec,
|
||||
+ .tv_nsec = ru.ru_stime.tv_usec * 1000
|
||||
+ };
|
||||
+ ts_sub(&tcp->dtime, &stime, &tcp->stime);
|
||||
+ tcp->stime = stime;
|
||||
+ }
|
||||
+
|
||||
+ if (wait_tab_pos > tcbtabsize)
|
||||
+ error_func_msg_and_die("Wait data storage overflow "
|
||||
+ "(wait_tab_pos %zu, nprocs %u, "
|
||||
+ "tcbtabsize %zu)", wait_tab_pos,
|
||||
+ nprocs, tcbtabsize);
|
||||
+
|
||||
+ wd = tcb_wait_tab + wait_tab_pos;
|
||||
+ memset(wd, 0, sizeof(*wd));
|
||||
+
|
||||
+ if (WIFSIGNALED(status)) {
|
||||
+ wd->te = TE_SIGNALLED;
|
||||
+ } else if (WIFEXITED(status)) {
|
||||
+ wd->te = TE_EXITED;
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * As WCONTINUED flag has not been specified to wait4,
|
||||
+ * it cannot be WIFCONTINUED(status), so the only case
|
||||
+ * that remains is WIFSTOPPED(status).
|
||||
+ */
|
||||
|
||||
- /* Set current output file */
|
||||
- set_current_tcp(tcp);
|
||||
+ const unsigned int sig = WSTOPSIG(status);
|
||||
+ const unsigned int event = (unsigned int) status >> 16;
|
||||
|
||||
- if (cflag) {
|
||||
- struct timespec stime = {
|
||||
- .tv_sec = ru.ru_stime.tv_sec,
|
||||
- .tv_nsec = ru.ru_stime.tv_usec * 1000
|
||||
- };
|
||||
- ts_sub(&tcp->dtime, &stime, &tcp->stime);
|
||||
- tcp->stime = stime;
|
||||
- }
|
||||
+ switch (event) {
|
||||
+ case 0:
|
||||
+ /*
|
||||
+ * Is this post-attach SIGSTOP?
|
||||
+ * Interestingly, the process may stop
|
||||
+ * with STOPSIG equal to some other signal
|
||||
+ * than SIGSTOP if we happened to attach
|
||||
+ * just before the process takes a signal.
|
||||
+ */
|
||||
+ if (sig == SIGSTOP &&
|
||||
+ (tcp->flags & TCB_IGNORE_ONE_SIGSTOP)) {
|
||||
+ debug_func_msg("ignored SIGSTOP on "
|
||||
+ "pid %d", tcp->pid);
|
||||
+ tcp->flags &= ~TCB_IGNORE_ONE_SIGSTOP;
|
||||
+ wd->te = TE_RESTART;
|
||||
+ } else if (sig == syscall_trap_sig) {
|
||||
+ wd->te = TE_SYSCALL_STOP;
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * True if tracee is stopped by signal
|
||||
+ * (as opposed to "tracee received
|
||||
+ * signal").
|
||||
+ * TODO: shouldn't we check for
|
||||
+ * errno == EINVAL too?
|
||||
+ * We can get ESRCH instead, you know...
|
||||
+ */
|
||||
+ bool stopped = ptrace(PTRACE_GETSIGINFO,
|
||||
+ pid, 0, &wd->si) < 0;
|
||||
|
||||
- if (WIFSIGNALED(status)) {
|
||||
- wd->te = TE_SIGNALLED;
|
||||
- return wd;
|
||||
- }
|
||||
+ wd->te = stopped ? TE_GROUP_STOP
|
||||
+ : TE_SIGNAL_DELIVERY_STOP;
|
||||
+ }
|
||||
+ break;
|
||||
+ case PTRACE_EVENT_STOP:
|
||||
+ /*
|
||||
+ * PTRACE_INTERRUPT-stop or group-stop.
|
||||
+ * PTRACE_INTERRUPT-stop has sig == SIGTRAP here.
|
||||
+ */
|
||||
+ switch (sig) {
|
||||
+ case SIGSTOP:
|
||||
+ case SIGTSTP:
|
||||
+ case SIGTTIN:
|
||||
+ case SIGTTOU:
|
||||
+ wd->te = TE_GROUP_STOP;
|
||||
+ break;
|
||||
+ default:
|
||||
+ wd->te = TE_RESTART;
|
||||
+ }
|
||||
+ break;
|
||||
+ case PTRACE_EVENT_EXEC:
|
||||
+ /*
|
||||
+ * TODO: shouldn't we check for
|
||||
+ * errno == EINVAL here, too?
|
||||
+ * We can get ESRCH instead, you know...
|
||||
+ */
|
||||
+ if (ptrace(PTRACE_GETEVENTMSG, pid, NULL,
|
||||
+ &wd->msg) < 0)
|
||||
+ wd->msg = 0;
|
||||
|
||||
- if (WIFEXITED(status)) {
|
||||
- wd->te = TE_EXITED;
|
||||
- return wd;
|
||||
+ wd->te = TE_STOP_BEFORE_EXECVE;
|
||||
+ break;
|
||||
+ case PTRACE_EVENT_EXIT:
|
||||
+ wd->te = TE_STOP_BEFORE_EXIT;
|
||||
+ break;
|
||||
+ default:
|
||||
+ wd->te = TE_RESTART;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (tcp->wait_list.next) {
|
||||
+ wait_extra_data_idx = wait_tab_pos;
|
||||
+ extra_tcp = tcp;
|
||||
+ debug_func_msg("queued extra pid %d", tcp->pid);
|
||||
+ } else {
|
||||
+ tcp->wait_data_idx = wait_tab_pos;
|
||||
+ list_append(&pending_tcps, &tcp->wait_list);
|
||||
+ debug_func_msg("queued pid %d", tcp->pid);
|
||||
+ }
|
||||
+
|
||||
+ wd->status = status;
|
||||
+ wait_tab_pos++;
|
||||
+
|
||||
+ if (extra_tcp)
|
||||
+ break;
|
||||
+
|
||||
+ pid = wait4(-1, &status, __WALL | WNOHANG, (cflag ? &ru : NULL));
|
||||
+ wait_errno = errno;
|
||||
+ wait_nohang = true;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * As WCONTINUED flag has not been specified to wait4,
|
||||
- * it cannot be WIFCONTINUED(status), so the only case
|
||||
- * that remains is WIFSTOPPED(status).
|
||||
- */
|
||||
+next_event_get_tcp:
|
||||
+ elem = list_remove_head(&pending_tcps);
|
||||
+
|
||||
+ if (!elem) {
|
||||
+ memset(tcb_wait_tab, 0, sizeof(*tcb_wait_tab));
|
||||
+ tcb_wait_tab->te = TE_NEXT;
|
||||
+
|
||||
+ return tcb_wait_tab;
|
||||
+ } else {
|
||||
+ tcp = list_elem(elem, struct tcb, wait_list);
|
||||
+ debug_func_msg("dequeued pid %d", tcp->pid);
|
||||
+ }
|
||||
|
||||
+next_event_exit:
|
||||
/* Is this the very first time we see this tracee stopped? */
|
||||
if (tcp->flags & TCB_STARTUP)
|
||||
startup_tcb(tcp);
|
||||
|
||||
- const unsigned int sig = WSTOPSIG(status);
|
||||
- const unsigned int event = (unsigned int) status >> 16;
|
||||
+ clear_regs(tcp);
|
||||
|
||||
- switch (event) {
|
||||
- case 0:
|
||||
- /*
|
||||
- * Is this post-attach SIGSTOP?
|
||||
- * Interestingly, the process may stop
|
||||
- * with STOPSIG equal to some other signal
|
||||
- * than SIGSTOP if we happened to attach
|
||||
- * just before the process takes a signal.
|
||||
- */
|
||||
- if (sig == SIGSTOP && (tcp->flags & TCB_IGNORE_ONE_SIGSTOP)) {
|
||||
- debug_func_msg("ignored SIGSTOP on pid %d", tcp->pid);
|
||||
- tcp->flags &= ~TCB_IGNORE_ONE_SIGSTOP;
|
||||
- wd->te = TE_RESTART;
|
||||
- } else if (sig == syscall_trap_sig) {
|
||||
- wd->te = TE_SYSCALL_STOP;
|
||||
- } else {
|
||||
- memset(&wd->si, 0, sizeof(wd->si));
|
||||
- /*
|
||||
- * True if tracee is stopped by signal
|
||||
- * (as opposed to "tracee received signal").
|
||||
- * TODO: shouldn't we check for errno == EINVAL too?
|
||||
- * We can get ESRCH instead, you know...
|
||||
- */
|
||||
- bool stopped = ptrace(PTRACE_GETSIGINFO, pid, 0, &wd->si) < 0;
|
||||
- wd->te = stopped ? TE_GROUP_STOP : TE_SIGNAL_DELIVERY_STOP;
|
||||
- }
|
||||
- break;
|
||||
- case PTRACE_EVENT_STOP:
|
||||
- /*
|
||||
- * PTRACE_INTERRUPT-stop or group-stop.
|
||||
- * PTRACE_INTERRUPT-stop has sig == SIGTRAP here.
|
||||
- */
|
||||
- switch (sig) {
|
||||
- case SIGSTOP:
|
||||
- case SIGTSTP:
|
||||
- case SIGTTIN:
|
||||
- case SIGTTOU:
|
||||
- wd->te = TE_GROUP_STOP;
|
||||
- break;
|
||||
- default:
|
||||
- wd->te = TE_RESTART;
|
||||
- }
|
||||
- break;
|
||||
- case PTRACE_EVENT_EXEC:
|
||||
- wd->te = TE_STOP_BEFORE_EXECVE;
|
||||
- break;
|
||||
- case PTRACE_EVENT_EXIT:
|
||||
- wd->te = TE_STOP_BEFORE_EXIT;
|
||||
- break;
|
||||
- default:
|
||||
- wd->te = TE_RESTART;
|
||||
- }
|
||||
+ /* Set current output file */
|
||||
+ set_current_tcp(tcp);
|
||||
|
||||
- return wd;
|
||||
+ return tcb_wait_tab + tcp->wait_data_idx;
|
||||
}
|
||||
|
||||
static int
|
||||
Index: strace-4.24/tests/Makefile.am
|
||||
===================================================================
|
||||
--- strace-4.24.orig/tests/Makefile.am 2018-09-12 23:53:31.739527473 +0200
|
||||
+++ strace-4.24/tests/Makefile.am 2018-09-12 23:53:35.765480919 +0200
|
||||
@@ -367,8 +367,7 @@
|
||||
XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
|
||||
XFAIL_TESTS_x86_64 = int_0x80.gen.test
|
||||
XFAIL_TESTS_x32 = int_0x80.gen.test
|
||||
-XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH)) \
|
||||
- looping_threads.test
|
||||
+XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
|
||||
|
||||
TEST_LOG_COMPILER = env
|
||||
AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) STRACE_NATIVE_ARCH=$(NATIVE_ARCH) \
|
636
SPECS/strace.spec
Normal file
636
SPECS/strace.spec
Normal file
@ -0,0 +1,636 @@
|
||||
Summary: Tracks and displays system calls associated with a running process
|
||||
Name: strace
|
||||
Version: 4.24
|
||||
Release: 3%{?dist}
|
||||
License: BSD
|
||||
Group: Development/Debuggers
|
||||
URL: https://strace.io
|
||||
Source: https://strace.io/files/%{version}/strace-%{version}.tar.xz
|
||||
BuildRequires: gcc gzip
|
||||
|
||||
Patch1: strace-rhbz1610774-0000-strace.c-introduce-struct-tcb_wait_data.patch
|
||||
Patch2: strace-rhbz1610774-0001-tests-check-tracing-of-looping-threads.patch
|
||||
Patch3: strace-rhbz1610774-0002-Add-a-generic-list-implementation.patch
|
||||
Patch4: strace-rhbz1610774-0003-Implement-queueing-of-threads-before-dispatching-the.patch
|
||||
|
||||
# We no longer need to build a separate strace32 binary, but we don't want
|
||||
# to break existing strace32 users' workflows.
|
||||
%define strace32_arches ppc64 s390x
|
||||
|
||||
%ifarch %{strace32_arches}
|
||||
%define _isa_compat %{?__isa_name:(%{__isa_name}-32)}%{!?__isa:%{nil}}
|
||||
%define evr %{?epoch:%{epoch}:}%{version}-%{release}
|
||||
Provides: strace32 = %{evr}
|
||||
Obsoletes: strace32 < %{evr} strace32%{_isa_compat} < %{evr}
|
||||
%endif
|
||||
|
||||
# Install Bluetooth headers for AF_BLUETOOTH sockets decoding.
|
||||
%if 0%{?fedora} >= 18 || 0%{?centos} >= 8 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1200
|
||||
BuildRequires: pkgconfig(bluez)
|
||||
%endif
|
||||
|
||||
# Install elfutils-devel or libdw-devel to enable strace -k option.
|
||||
# Install binutils-devel to enable symbol demangling.
|
||||
%if 0%{?fedora} >= 20 || 0%{?centos} >= 6 || 0%{?rhel} >= 6
|
||||
%define buildrequires_stacktrace BuildRequires: elfutils-devel binutils-devel
|
||||
%endif
|
||||
%if 0%{?suse_version} >= 1100
|
||||
%define buildrequires_stacktrace BuildRequires: libdw-devel binutils-devel
|
||||
%endif
|
||||
%{?buildrequires_stacktrace}
|
||||
|
||||
# OBS compatibility
|
||||
%{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release}
|
||||
%define maybe_use_defattr %{?suse_version:%%defattr(-,root,root)}
|
||||
|
||||
%description
|
||||
The strace program intercepts and records the system calls called and
|
||||
received by a running process. Strace can print a record of each
|
||||
system call, its arguments and its return value. Strace is useful for
|
||||
diagnosing problems and debugging, as well as for instructional
|
||||
purposes.
|
||||
|
||||
Install strace if you need a tool to track the system calls made and
|
||||
received by a process.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
|
||||
chmod a+x tests/*.test
|
||||
|
||||
echo -n %version-%release > .tarball-version
|
||||
echo -n 2018 > .year
|
||||
echo -n 2018-08-14 > .strace.1.in.date
|
||||
|
||||
%build
|
||||
echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
|
||||
uname -a |head -1
|
||||
libc="$(ldd /bin/sh |sed -n 's|^[^/]*\(/[^ ]*/libc\.so[^ ]*\).*|\1|p' |head -1)"
|
||||
$libc |head -1
|
||||
file -L /bin/sh
|
||||
gcc --version |head -1
|
||||
ld --version |head -1
|
||||
kver="$(printf '%%s\n%%s\n' '#include <linux/version.h>' 'LINUX_VERSION_CODE' | gcc -E -P -)"
|
||||
printf 'kernel-headers %%s.%%s.%%s\n' $(($kver/65536)) $(($kver/256%%256)) $(($kver%%256))
|
||||
echo 'END OF BUILD ENVIRONMENT INFORMATION'
|
||||
|
||||
CFLAGS_FOR_BUILD="$RPM_OPT_FLAGS"; export CFLAGS_FOR_BUILD
|
||||
%configure --enable-mpers=check
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
make DESTDIR=%{buildroot} install
|
||||
|
||||
%ifarch %{strace32_arches}
|
||||
ln -s ./strace %{buildroot}%{_bindir}/strace32
|
||||
%endif
|
||||
|
||||
# remove unpackaged files from the buildroot
|
||||
rm -f %{buildroot}%{_bindir}/strace-graph
|
||||
|
||||
# some say uncompressed changelog files are too big
|
||||
for f in ChangeLog ChangeLog-CVS; do
|
||||
gzip -9n < "$f" > "$f".gz &
|
||||
done
|
||||
wait
|
||||
|
||||
%check
|
||||
%{buildroot}%{_bindir}/strace -V
|
||||
make %{?_smp_mflags} -k check VERBOSE=1 TIMEOUT_DURATION=1800
|
||||
echo 'BEGIN OF TEST SUITE INFORMATION'
|
||||
tail -n 99999 -- tests*/test-suite.log tests*/ksysent.log
|
||||
find tests* -type f -name '*.log' -print0 |
|
||||
xargs -r0 grep -H '^KERNEL BUG:' -- ||:
|
||||
echo 'END OF TEST SUITE INFORMATION'
|
||||
|
||||
%files
|
||||
%maybe_use_defattr
|
||||
%doc CREDITS ChangeLog.gz ChangeLog-CVS.gz COPYING NEWS README
|
||||
%{_bindir}/strace
|
||||
%ifarch %{strace32_arches}
|
||||
%{_bindir}/strace32
|
||||
%endif
|
||||
%{_bindir}/strace-log-merge
|
||||
%{_mandir}/man1/*
|
||||
|
||||
%changelog
|
||||
* Mon Dec 17 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-3
|
||||
- Add current version of the thread handling unfairness fix.
|
||||
|
||||
* Mon Sep 03 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-2
|
||||
- Add transition for strace32 package pn those architectures that
|
||||
provided it in RHEL 7 (ppc64 and s390x).
|
||||
|
||||
* Tue Aug 14 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-1
|
||||
- Rebase to v4.24.
|
||||
|
||||
* Sun Aug 05 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.23-4
|
||||
- Fix tests build with fresh glibc that now provides struct statx in sys/stat.h.
|
||||
- Resolves #1611749.
|
||||
|
||||
* Thu Jul 19 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.23-3
|
||||
- Wire up io_pgetevents and rseq on hppa, microblaze, mips, powerpc, and s390.
|
||||
|
||||
* Sat Jun 16 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.23-2
|
||||
- Increase test timeout duration.
|
||||
|
||||
* Thu Jun 14 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.23-1
|
||||
- v4.22 -> v4.23.
|
||||
- Enabled libdw backend for -k option (#1568647).
|
||||
|
||||
* Thu Apr 05 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.22-1
|
||||
- v4.21 -> v4.22.
|
||||
|
||||
* Tue Feb 13 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.21-1
|
||||
- v4.20 -> v4.21.
|
||||
|
||||
* Mon Nov 13 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.20-1
|
||||
- v4.19 -> v4.20.
|
||||
|
||||
* Tue Sep 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.19-1
|
||||
- v4.18 -> v4.19.
|
||||
|
||||
* Wed Jul 05 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.18-1
|
||||
- v4.17 -> v4.18.
|
||||
|
||||
* Wed May 24 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.17-1
|
||||
- v4.16 -> v4.17.
|
||||
|
||||
* Tue Feb 14 2017 Dmitry V. Levin <ldv@altlinux.org> - 4.16-1
|
||||
- v4.15 -> v4.16.
|
||||
|
||||
* Wed Dec 14 2016 Dmitry V. Levin <ldv@altlinux.org> - 4.15-1
|
||||
- v4.14-100-g622af42 -> v4.15.
|
||||
|
||||
* Wed Nov 16 2016 Dmitry V. Levin <ldv@altlinux.org> - 4.14.0.100.622a-1
|
||||
- v4.14 -> v4.14-100-g622af42:
|
||||
+ implemented syscall fault injection.
|
||||
|
||||
* Tue Oct 04 2016 Dmitry V. Levin <ldv@altlinux.org> - 4.14-1
|
||||
- v4.13 -> v4.14:
|
||||
+ added printing of the mode argument of open and openat syscalls
|
||||
when O_TMPFILE flag is set (#1377846).
|
||||
|
||||
* Tue Jul 26 2016 Dmitry V. Levin <ldv@altlinux.org> - 4.13-1
|
||||
- v4.12 -> v4.13.
|
||||
|
||||
* Tue May 31 2016 Dmitry V. Levin <ldv@altlinux.org> - 4.12-1
|
||||
- v4.11-163-g972018f -> v4.12.
|
||||
|
||||
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 4.11.0.163.9720-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Fri Jan 15 2016 Dmitry V. Levin <ldv@altlinux.org> - 4.11.0.163.9720-1
|
||||
- New upstream snapshot v4.11-163-g972018f:
|
||||
+ fixed decoding of syscalls unknown to the kernel on s390/s390x (#1298294).
|
||||
|
||||
* Wed Dec 23 2015 Dmitry V. Levin <ldv@altlinux.org> - 4.11-2
|
||||
- Enabled experimental -k option on x86_64 (#1170296).
|
||||
|
||||
* Mon Dec 21 2015 Dmitry V. Levin <ldv@altlinux.org> - 4.11-1
|
||||
- New upstream release:
|
||||
+ print nanoseconds along with seconds in stat family syscalls (#1251176).
|
||||
|
||||
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.10-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Mon May 11 2015 Marcin Juszkiewicz <mjuszkiewicz@redhat.com> - 4.10-2
|
||||
- Backport set of upstream patches to get it buildable on AArch64
|
||||
|
||||
* Fri Mar 06 2015 Dmitry V. Levin <ldv@altlinux.org> - 4.10-1
|
||||
- New upstream release:
|
||||
+ enhanced ioctl decoding (#902788).
|
||||
|
||||
* Mon Nov 03 2014 Lubomir Rintel <lkundrak@v3.sk> - 4.9-3
|
||||
- Regenerate ioctl entries with proper kernel headers
|
||||
|
||||
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.9-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Fri Aug 15 2014 Dmitry V. Levin <ldv@altlinux.org> - 4.9-1
|
||||
- New upstream release:
|
||||
+ fixed build when <sys/ptrace.h> and <linux/ptrace.h> conflict (#993384);
|
||||
+ updated CLOCK_* constants (#1088455);
|
||||
+ enabled ppc64le support (#1122323);
|
||||
+ fixed attach to a process on ppc64le (#1129569).
|
||||
|
||||
* Fri Jul 25 2014 Dan Horák <dan[at]danny.cz> - 4.8-5
|
||||
- update for ppc64
|
||||
|
||||
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.8-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Fri Dec 6 2013 Peter Robinson <pbrobinson@fedoraproject.org> 4.8-3
|
||||
- Fix FTBFS
|
||||
|
||||
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.8-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Mon Jun 03 2013 Dmitry V. Levin <ldv@altlinux.org> - 4.8-1
|
||||
- New upstream release:
|
||||
+ fixed ERESTARTNOINTR leaking to userspace on ancient kernels (#659382);
|
||||
+ fixed decoding of *xattr syscalls (#885233);
|
||||
+ fixed handling of files with 64-bit inode numbers by 32-bit strace (#912790);
|
||||
+ added aarch64 support (#969858).
|
||||
|
||||
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.7-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.7-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Wed May 02 2012 Dmitry V. Levin <ldv@altlinux.org> 4.7-1
|
||||
- New upstream release.
|
||||
+ implemented proper handling of real SIGTRAPs (#162774).
|
||||
|
||||
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.6-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
* Mon Mar 14 2011 Dmitry V. Levin <ldv@altlinux.org> - 4.6-1
|
||||
- New upstream release.
|
||||
+ fixed a corner case in waitpid handling (#663547).
|
||||
|
||||
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.5.20-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
|
||||
* Tue Apr 13 2010 Roland McGrath <roland@redhat.com> - 4.5.20-1
|
||||
- New upstream release, work mostly by Andreas Schwab and Dmitry V. Levin.
|
||||
+ fixed potential stack buffer overflow in select decoder (#556678);
|
||||
+ fixed FTBFS (#539044).
|
||||
|
||||
* Wed Oct 21 2009 Roland McGrath <roland@redhat.com> - 4.5.19-1
|
||||
- New upstream release, work mostly by Dmitry V. Levin <ldv@altlinux.org>
|
||||
+ exit/kill strace with traced process exitcode/signal (#105371);
|
||||
+ fixed build on ARM EABI (#507576);
|
||||
+ fixed display of 32-bit argv array on 64-bit architectures (#519480);
|
||||
+ fixed display of 32-bit fcntl(F_SETLK) on 64-bit architectures (#471169);
|
||||
+ fixed several bugs in strings decoder, including potential heap
|
||||
memory corruption (#470529, #478324, #511035).
|
||||
|
||||
* Thu Aug 28 2008 Roland McGrath <roland@redhat.com> - 4.5.18-1
|
||||
- build fix for newer kernel headers (#457291)
|
||||
- fix CLONE_VFORK handling (#455078)
|
||||
- Support new Linux/PPC system call subpage_prot and PROT_SAO flag.
|
||||
- In sigaction system call, display sa_flags value along with SIG_DFL/SIG_IGN.
|
||||
|
||||
* Mon Jul 21 2008 Roland McGrath <roland@redhat.com> - 4.5.17-1
|
||||
- handle O_CLOEXEC, MSG_CMSG_CLOEXEC (#365781)
|
||||
- fix biarch stat64 decoding (#222275)
|
||||
- fix spurious "..." in printing of environment strings (#358241)
|
||||
- improve prctl decoding (#364401)
|
||||
- fix hang wait on exited child with exited child (#354261)
|
||||
- fix biarch fork/vfork (-f) tracing (#447475)
|
||||
- fix biarch printing of negative argument kill (#430585)
|
||||
- fix biarch decoding of error return values (#447587)
|
||||
- fix -f tracing of CLONE_VFORK (#455078)
|
||||
- fix ia64 register clobberation in -f tracing (#453438)
|
||||
- print SO_NODEFER, SA_RESETHAND instead of SA_NOMASK, SA_ONESHOT (#455821)
|
||||
- fix futex argument decoding (#448628, #448629)
|
||||
|
||||
* Fri Aug 3 2007 Roland McGrath <roland@redhat.com> - 4.5.16-1
|
||||
- fix multithread issues (#240962, #240961, #247907)
|
||||
- fix spurious SIGSTOP on early interrupt (#240986)
|
||||
- fix utime for biarch (#247185)
|
||||
- fix -u error message (#247170)
|
||||
- better futex syscall printing (##241467)
|
||||
- fix argv/envp printing with small -s settings, and for biarch
|
||||
- new syscalls: getcpu, eventfd, timerfd, signalfd, epoll_pwait,
|
||||
move_pages, utimensat
|
||||
|
||||
* Tue Jan 16 2007 Roland McGrath <roland@redhat.com> - 4.5.15-1
|
||||
- biarch fixes (#179740, #192193, #171626, #173050, #218433, #218043)
|
||||
- fix -ff -o behavior (#204950, #218435, #193808, #219423)
|
||||
- better quotactl printing (#118696)
|
||||
- *at, inotify*, pselect6, ppoll and unshare syscalls (#178633, #191275)
|
||||
- glibc-2.5 build fixes (#209856)
|
||||
- memory corruption fixes (#200621
|
||||
- fix race in child setup under -f (#180293)
|
||||
- show ipc key values in hex (#198179, #192182)
|
||||
- disallow -c with -ff (#187847)
|
||||
- Resolves: RHBZ #179740, RHBZ #192193, RHBZ #204950, RHBZ #218435
|
||||
- Resolves: RHBZ #193808, RHBZ #219423, RHBZ #171626, RHBZ #173050
|
||||
- Resolves: RHBZ #218433, RHBZ #218043, RHBZ #118696, RHBZ #178633
|
||||
- Resolves: RHBZ #191275, RHBZ #209856, RHBZ #200621, RHBZ #180293
|
||||
- Resolves: RHBZ #198179, RHBZ #198182, RHBZ #187847
|
||||
|
||||
* Mon Nov 20 2006 Jakub Jelinek <jakub@redhat.com> - 4.5.14-4
|
||||
- Fix ia64 syscall decoding (#206768)
|
||||
- Fix build with glibc-2.4.90-33 and up on all arches but ia64
|
||||
- Fix build against 2.6.18+ headers
|
||||
|
||||
* Tue Aug 22 2006 Roland McGrath <roland@redhat.com> - 4.5.14-3
|
||||
- Fix bogus decoding of syscalls >= 300 (#201462, #202620).
|
||||
|
||||
* Fri Jul 14 2006 Jesse Keating <jkeating@redhat.com> - 4.5.14-2
|
||||
- rebuild
|
||||
|
||||
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 4.5.14-1.2
|
||||
- bump again for long double bug on ppc{,64}
|
||||
|
||||
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 4.5.14-1.1
|
||||
- rebuilt for new gcc4.1 snapshot and glibc changes
|
||||
|
||||
* Mon Jan 16 2006 Roland McGrath <roland@redhat.com> - 4.5.14-1
|
||||
- Fix biarch decoding of socket syscalls (#174354).
|
||||
- Fix biarch -e support (#173986).
|
||||
- Accept numeric syscalls in -e (#174798).
|
||||
- Fix ipc syscall decoding (#164755).
|
||||
- Improve msgrcv printing (#164757).
|
||||
- Man page updates (#165375).
|
||||
- Improve mount syscall printing (#165377).
|
||||
- Correct printing of restarting syscalls (#165469).
|
||||
|
||||
* Wed Aug 3 2005 Roland McGrath <roland@redhat.com> - 4.5.13-1
|
||||
- Fix setsockopt decoding on 64-bit (#162449).
|
||||
- Fix typos in socket option name strings (#161578).
|
||||
- Display more IPV6 socket options by name (#162450).
|
||||
- Don't display inappropriate syscalls for -e trace=file (#159340).
|
||||
- New selector type -e trace=desc for file-descriptor using calls (#159400).
|
||||
- Fix 32-bit old_mmap syscall decoding on x86-64 (#162467, #164215).
|
||||
- Fix errors detaching from multithreaded process on interrupt (#161919).
|
||||
- Note 4.5.12 fix for crash handling bad signal numbers (#162739).
|
||||
|
||||
* Wed Jun 8 2005 Roland McGrath <roland@redhat.com> - 4.5.12-1
|
||||
- Fix known syscall recognition for IA32 processes on x86-64 (#158934).
|
||||
- Fix bad output for ptrace on x86-64 (#159787).
|
||||
- Fix potential buffer overruns (#151570, #159196).
|
||||
- Make some diagnostics more consistent (#159308).
|
||||
- Update PowerPC system calls.
|
||||
- Better printing for Linux aio system calls.
|
||||
- Don't truncate statfs64 fields to 32 bits in output (#158243).
|
||||
- Cosmetic code cleanups (#159688).
|
||||
|
||||
* Tue Mar 22 2005 Roland McGrath <roland@redhat.com> - 4.5.11-1
|
||||
- Build tweaks.
|
||||
- Note 4.5.10 select fix (#151570).
|
||||
|
||||
* Mon Mar 14 2005 Roland McGrath <roland@redhat.com> - 4.5.10-1
|
||||
- Fix select handling on nonstandard fd_set sizes.
|
||||
- Don't print errors for null file name pointers.
|
||||
- Fix initial execve output with -i (#143365).
|
||||
|
||||
* Fri Feb 4 2005 Roland McGrath <roland@redhat.com> - 4.5.9-2
|
||||
- update ia64 syscall list (#146245)
|
||||
- fix x86_64 syscall argument extraction for 32-bit processes (#146093)
|
||||
- fix -e signal=NAME parsing (#143362)
|
||||
- fix x86_64 exit_group syscall handling
|
||||
- improve socket ioctl printing (#138223)
|
||||
- code cleanups (#143369, #143370)
|
||||
- improve mount flags printing (#141932)
|
||||
- support symbolic printing of x86_64 arch_prctl parameters (#142667)
|
||||
- fix potential crash in getxattr printing
|
||||
|
||||
* Tue Oct 19 2004 Roland McGrath <roland@redhat.com> - 4.5.8-1
|
||||
- fix multithreaded exit handling (#132150, #135254)
|
||||
- fix ioctl name matching (#129808)
|
||||
- print RTC_* ioctl structure contents (#58606)
|
||||
- grok epoll_* syscalls (#134463)
|
||||
- grok new RLIMIT_* values (#133594)
|
||||
- print struct cmsghdr contents for sendmsg (#131689)
|
||||
- fix clock_* and timer_* argument output (#131420)
|
||||
|
||||
* Tue Aug 31 2004 Roland McGrath <roland@redhat.com> - 4.5.7-2
|
||||
- new upstream version, misc fixes and updates (#128091, #129166, #128391, #129378, #130965, #131177)
|
||||
|
||||
* Mon Jul 12 2004 Roland McGrath <roland@redhat.com> 4.5.6-1
|
||||
- new upstream version, updates ioctl lists (#127398), fixes quotactl (#127393), more ioctl decoding (#126917)
|
||||
|
||||
* Sun Jun 27 2004 Roland McGrath <roland@redhat.com> 4.5.5-1
|
||||
- new upstream version, fixes x86-64 biarch support (#126547)
|
||||
|
||||
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com> 4.5.4-2
|
||||
- rebuilt
|
||||
|
||||
* Thu Jun 3 2004 Roland McGrath <roland@redhat.com> 4.5.4-0.FC1
|
||||
- rebuilt for FC1 update
|
||||
|
||||
* Thu Jun 3 2004 Roland McGrath <roland@redhat.com> 4.5.4-1
|
||||
- new upstream version, more ioctls (#122257), minor fixes
|
||||
|
||||
* Fri Apr 16 2004 Roland McGrath <roland@redhat.com> 4.5.3-1
|
||||
- new upstream version, mq_* calls (#120701), -p vs NPTL (#120462), more fixes (#118694, #120541, #118685)
|
||||
|
||||
* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com> 4.5.2-1.1
|
||||
- rebuilt
|
||||
|
||||
* Mon Mar 1 2004 Roland McGrath <roland@redhat.com> 4.5.2-1
|
||||
- new upstream version, sched_* calls (#116990), show core flag (#112117)
|
||||
|
||||
* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
|
||||
- rebuilt
|
||||
|
||||
* Thu Nov 13 2003 Roland McGrath <roland@redhat.com> 4.5.1-1
|
||||
- new upstream version, more fixes (#108012, #105366, #105359, #105358)
|
||||
|
||||
* Tue Sep 30 2003 Roland McGrath <roland@redhat.com> 4.5-3
|
||||
- revert bogus s390 fix
|
||||
|
||||
* Thu Sep 25 2003 Roland McGrath <roland@redhat.com> 4.5-1.2.1AS
|
||||
- rebuilt for 2.1AS erratum
|
||||
|
||||
* Wed Sep 24 2003 Roland McGrath <roland@redhat.com> 4.5-2
|
||||
- rebuilt
|
||||
|
||||
* Wed Sep 24 2003 Roland McGrath <roland@redhat.com> 4.5-1
|
||||
- new upstream version, more fixes (#101499, #104365)
|
||||
|
||||
* Thu Jul 17 2003 Roland McGrath <roland@redhat.com> 4.4.99-2
|
||||
- rebuilt
|
||||
|
||||
* Thu Jul 17 2003 Roland McGrath <roland@redhat.com> 4.4.99-1
|
||||
- new upstream version, groks more new system calls, PF_INET6 sockets
|
||||
|
||||
* Tue Jun 10 2003 Roland McGrath <roland@redhat.com> 4.4.98-1
|
||||
- new upstream version, more fixes (#90754, #91085)
|
||||
|
||||
* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
|
||||
- rebuilt
|
||||
|
||||
* Sun Mar 30 2003 Roland McGrath <roland@redhat.com> 4.4.96-1
|
||||
- new upstream version, handles yet more 2.5 syscalls, x86_64 & ia64 fixes
|
||||
|
||||
* Mon Feb 24 2003 Elliot Lee <sopwith@redhat.com> 4.4.95-2
|
||||
- rebuilt
|
||||
|
||||
* Mon Feb 24 2003 Roland McGrath <roland@redhat.com> 4.4.95-1
|
||||
- new upstream version, fixed getresuid/getresgid (#84959)
|
||||
|
||||
* Wed Feb 19 2003 Roland McGrath <roland@redhat.com> 4.4.94-1
|
||||
- new upstream version, new option -E to set environment variables (#82392)
|
||||
|
||||
* Wed Jan 22 2003 Tim Powers <timp@redhat.com> 4.4.93-2
|
||||
- rebuilt
|
||||
|
||||
* Tue Jan 21 2003 Roland McGrath <roland@redhat.com> 4.4.93-1
|
||||
- new upstream version, fixes ppc and s390 bugs, adds missing ptrace requests
|
||||
|
||||
* Fri Jan 10 2003 Roland McGrath <roland@redhat.com> 4.4.91-1
|
||||
- new upstream version, fixes -f on x86-64
|
||||
|
||||
* Fri Jan 10 2003 Roland McGrath <roland@redhat.com> 4.4.90-1
|
||||
- new upstream version, fixes all known bugs modulo ia64 and s390 issues
|
||||
|
||||
* Fri Jan 03 2003 Florian La Roche <Florian.LaRoche@redhat.de> 4.4-11
|
||||
- add further s390 patch from IBM
|
||||
|
||||
* Wed Nov 27 2002 Tim Powers <timp@redhat.com> 4.4-10
|
||||
- remove unpackaged files from the buildroot
|
||||
|
||||
* Mon Oct 07 2002 Phil Knirsch <pknirsch@redhat.com> 4.4-9.1
|
||||
- Added latest s390(x) patch.
|
||||
|
||||
* Fri Sep 06 2002 Karsten Hopp <karsten@redhat.de> 4.4-9
|
||||
- preliminary x86_64 support with an ugly patch to help
|
||||
debugging. Needs cleanup!
|
||||
|
||||
* Mon Sep 2 2002 Jakub Jelinek <jakub@redhat.com> 4.4-8
|
||||
- newer version of the clone fixing patch (Roland McGrath)
|
||||
- aio syscalls for i386/ia64/ppc (Ben LaHaise)
|
||||
|
||||
* Wed Aug 28 2002 Jakub Jelinek <jakub@redhat.com> 4.4-7
|
||||
- fix strace -f (Roland McGrath, #68994)
|
||||
- handle ?et_thread_area, SA_RESTORER (Ulrich Drepper)
|
||||
|
||||
* Fri Jun 21 2002 Jakub Jelinek <jakub@redhat.com> 4.4-6
|
||||
- handle futexes, *xattr, sendfile64, etc. (Ulrich Drepper)
|
||||
- handle modify_ldt (#66894)
|
||||
|
||||
* Thu May 23 2002 Tim Powers <timp@redhat.com>
|
||||
- automated rebuild
|
||||
|
||||
* Tue Apr 16 2002 Jakub Jelinek <jakub@redhat.com> 4.4-4
|
||||
- fix for the last patch by Jeff Law (#62591)
|
||||
|
||||
* Mon Mar 4 2002 Preston Brown <pbrown@redhat.com> 4.4-3
|
||||
- integrate patch from Jeff Law to eliminate hang tracing threads
|
||||
|
||||
* Sat Feb 23 2002 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- minor update from debian tar-ball
|
||||
|
||||
* Wed Jan 02 2002 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- update to 4.4
|
||||
|
||||
* Sun Jul 22 2001 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- disable s390 patches, they are already included
|
||||
|
||||
* Wed Jul 18 2001 Preston Brown <pbrown@redhat.com> 4.3-1
|
||||
- new upstream version. Seems to have integrated most new syscalls
|
||||
- tracing threaded programs is now functional.
|
||||
|
||||
* Mon Jun 11 2001 Than Ngo <than@redhat.com>
|
||||
- port s390 patches from IBM
|
||||
|
||||
* Wed May 16 2001 Nalin Dahyabhai <nalin@redhat.com>
|
||||
- modify new syscall patch to allocate enough heap space in setgroups32()
|
||||
|
||||
* Wed Feb 14 2001 Jakub Jelinek <jakub@redhat.com>
|
||||
- #include <time.h> in addition to <sys/time.h>
|
||||
|
||||
* Fri Jan 26 2001 Karsten Hopp <karsten@redhat.com>
|
||||
- clean up conflicting patches. This happened only
|
||||
when building on S390
|
||||
|
||||
* Fri Jan 19 2001 Bill Nottingham <notting@redhat.com>
|
||||
- update to CVS, reintegrate ia64 support
|
||||
|
||||
* Fri Dec 8 2000 Bernhard Rosenkraenzer <bero@redhat.com>
|
||||
- Get S/390 support into the normal package
|
||||
|
||||
* Sat Nov 18 2000 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- added S/390 patch from IBM, adapting it to not conflict with
|
||||
IA64 patch
|
||||
|
||||
* Sat Aug 19 2000 Jakub Jelinek <jakub@redhat.com>
|
||||
- doh, actually apply the 2.4 syscalls patch
|
||||
- make it compile with 2.4.0-test7-pre4+ headers, add
|
||||
getdents64 and fcntl64
|
||||
|
||||
* Thu Aug 3 2000 Jakub Jelinek <jakub@redhat.com>
|
||||
- add a bunch of new 2.4 syscalls (#14036)
|
||||
|
||||
* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
|
||||
- automatic rebuild
|
||||
- excludearch ia64
|
||||
|
||||
* Fri Jun 2 2000 Matt Wilson <msw@redhat.com>
|
||||
- use buildinstall for FHS
|
||||
|
||||
* Wed May 24 2000 Jakub Jelinek <jakub@redhat.com>
|
||||
- make things compile on sparc
|
||||
- fix sigreturn on sparc
|
||||
|
||||
* Fri Mar 31 2000 Bill Nottingham <notting@redhat.com>
|
||||
- fix stat64 misdef (#10485)
|
||||
|
||||
* Tue Mar 21 2000 Michael K. Johnson <johnsonm@redhat.com>
|
||||
- added ia64 patch
|
||||
|
||||
* Thu Feb 03 2000 Cristian Gafton <gafton@redhat.com>
|
||||
- man pages are compressed
|
||||
- version 4.2 (why are we keeping all these patches around?)
|
||||
|
||||
* Sat Nov 27 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- update to 4.1 (with sparc socketcall patch).
|
||||
|
||||
* Fri Nov 12 1999 Jakub Jelinek <jakub@redhat.com>
|
||||
- fix socketcall on sparc.
|
||||
|
||||
* Thu Sep 02 1999 Cristian Gafton <gafton@redhat.com>
|
||||
- fix KERN_SECURELVL compile problem
|
||||
|
||||
* Tue Aug 31 1999 Cristian Gafton <gafton@redhat.com>
|
||||
- added alpha patch from HJLu to fix the osf_sigprocmask interpretation
|
||||
|
||||
* Sat Jun 12 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- update to 3.99.1.
|
||||
|
||||
* Wed Jun 2 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- add (the other :-) jj's sparc patch.
|
||||
|
||||
* Wed May 26 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- upgrade to 3.99 in order to
|
||||
- add new 2.2.x open flags (#2955).
|
||||
- add new 2.2.x syscalls (#2866).
|
||||
- strace 3.1 patches carried along for now.
|
||||
|
||||
* Sun May 16 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- don't rely on (broken!) rpm %%patch (#2735)
|
||||
|
||||
* Tue Apr 06 1999 Preston Brown <pbrown@redhat.com>
|
||||
- strip binary
|
||||
|
||||
* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com>
|
||||
- auto rebuild in the new build environment (release 16)
|
||||
|
||||
* Tue Feb 9 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- vfork est arrive!
|
||||
|
||||
* Tue Feb 9 1999 Christopher Blizzard <blizzard@redhat.com>
|
||||
- Add patch to follow clone() syscalls, too.
|
||||
|
||||
* Sun Jan 17 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- patch to build alpha/sparc with glibc 2.1.
|
||||
|
||||
* Thu Dec 03 1998 Cristian Gafton <gafton@redhat.com>
|
||||
- patch to build on ARM
|
||||
|
||||
* Wed Sep 30 1998 Jeff Johnson <jbj@redhat.com>
|
||||
- fix typo (printf, not tprintf).
|
||||
|
||||
* Sat Sep 19 1998 Jeff Johnson <jbj@redhat.com>
|
||||
- fix compile problem on sparc.
|
||||
|
||||
* Tue Aug 18 1998 Cristian Gafton <gafton@redhat.com>
|
||||
- buildroot
|
||||
|
||||
* Mon Jul 20 1998 Cristian Gafton <gafton@redhat.com>
|
||||
- added the umoven patch from James Youngman <jay@gnu.org>
|
||||
- fixed build problems on newer glibc releases
|
||||
|
||||
* Mon Jun 08 1998 Prospector System <bugs@redhat.com>
|
||||
- translations modified for de, fr, tr
|
Loading…
Reference in New Issue
Block a user