Remove gdb-6.3-bz202689-exec-from-pthread-test.patch. The test included in this patch is covered by the already upstream test gdb/testsuite/gdb.threads/execl.exp which was added with this commit: commit 49fd4a422bb6152043b2b41a1f734694056dbf3b Date: Thu Jun 5 21:03:59 2008 +0000 Unfortunately, the situation is not as simple as just removing this patch file. The later patch gdb-6.8-bz442765-threaded-exec-test.patch builds on the earlier test to cover additional cases. So, what I've actually done is remove the first patch, but merged the test entirely into the second patch. I think this is a better reflection of the current situation; the first patch is redundant (it's test is already covered upstream), while the second patch has not yet been reviewed, so it _might_ contain a useful test. To confirm that the upstream test quoted above actually covers this test case I did the following: - Setup a Fedora 3 virtual machine, - Built the test from the first patch and confirmed that it failed as described in bug bz202689, - Copied the upstream execl.exp sources to the virtual machine, and built the test binary, - Manually ran the test binary just as the .exp script does, and confirmed that it failed in the same way as the test from the original patch.
214 lines
5.7 KiB
Diff
214 lines
5.7 KiB
Diff
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
|
From: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
Date: Fri, 27 Oct 2017 21:07:50 +0200
|
|
Subject: gdb-6.8-bz442765-threaded-exec-test.patch
|
|
|
|
;; Test various forms of threads tracking across exec() (BZ 442765).
|
|
;;=fedoratest
|
|
|
|
Test various forms of threads tracking across exec(2).
|
|
|
|
diff --git a/gdb/testsuite/gdb.threads/threaded-exec.c b/gdb/testsuite/gdb.threads/threaded-exec.c
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/gdb/testsuite/gdb.threads/threaded-exec.c
|
|
@@ -0,0 +1,147 @@
|
|
+/* This testcase is part of GDB, the GNU debugger.
|
|
+
|
|
+ Copyright 2007 Free Software Foundation, Inc.
|
|
+
|
|
+ This program is free software; you can redistribute it and/or modify
|
|
+ it under the terms of the GNU General Public License as published by
|
|
+ the Free Software Foundation; either version 2 of the License, or
|
|
+ (at your option) any later version.
|
|
+
|
|
+ This program 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 General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU General Public License
|
|
+ along with this program; if not, write to the Free Software
|
|
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
|
+ Boston, MA 02111-1307, USA. */
|
|
+
|
|
+#include <stddef.h>
|
|
+#include <assert.h>
|
|
+#include <stdlib.h>
|
|
+#include <unistd.h>
|
|
+#include <stdio.h>
|
|
+
|
|
+#ifdef THREADS
|
|
+
|
|
+# include <pthread.h>
|
|
+
|
|
+static void *
|
|
+threader (void *arg)
|
|
+{
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
+int
|
|
+main (int argc, char **argv)
|
|
+{
|
|
+ char *exec_nothreads, *exec_threads, *cmd;
|
|
+ int phase;
|
|
+ char phase_s[8];
|
|
+
|
|
+ setbuf (stdout, NULL);
|
|
+
|
|
+ if (argc != 4)
|
|
+ {
|
|
+ fprintf (stderr, "%s <non-threaded> <threaded> <phase>\n", argv[0]);
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+#ifdef THREADS
|
|
+ puts ("THREADS: Y");
|
|
+#else
|
|
+ puts ("THREADS: N");
|
|
+#endif
|
|
+ exec_nothreads = argv[1];
|
|
+ printf ("exec_nothreads: %s\n", exec_nothreads);
|
|
+ exec_threads = argv[2];
|
|
+ printf ("exec_threads: %s\n", exec_threads);
|
|
+ phase = atoi (argv[3]);
|
|
+ printf ("phase: %d\n", phase);
|
|
+
|
|
+ /* Phases: threading
|
|
+ 0: N -> N
|
|
+ 1: N -> Y
|
|
+ 2: Y -> Y
|
|
+ 3: Y -> N
|
|
+ 4: N -> exit */
|
|
+
|
|
+ cmd = NULL;
|
|
+
|
|
+#ifndef THREADS
|
|
+ switch (phase)
|
|
+ {
|
|
+ case 0:
|
|
+ cmd = exec_nothreads;
|
|
+ break;
|
|
+ case 1:
|
|
+ cmd = exec_threads;
|
|
+ break;
|
|
+ case 2:
|
|
+ fprintf (stderr, "%s: We should have threads for phase %d!\n", argv[0],
|
|
+ phase);
|
|
+ return 1;
|
|
+ case 3:
|
|
+ fprintf (stderr, "%s: We should have threads for phase %d!\n", argv[0],
|
|
+ phase);
|
|
+ return 1;
|
|
+ case 4:
|
|
+ return 0;
|
|
+ default:
|
|
+ assert (0);
|
|
+ }
|
|
+#else /* THREADS */
|
|
+ switch (phase)
|
|
+ {
|
|
+ case 0:
|
|
+ fprintf (stderr, "%s: We should not have threads for phase %d!\n",
|
|
+ argv[0], phase);
|
|
+ return 1;
|
|
+ case 1:
|
|
+ fprintf (stderr, "%s: We should not have threads for phase %d!\n",
|
|
+ argv[0], phase);
|
|
+ return 1;
|
|
+ case 2:
|
|
+ cmd = exec_threads;
|
|
+ {
|
|
+ pthread_t t1;
|
|
+ int i;
|
|
+
|
|
+ i = pthread_create (&t1, NULL, threader, (void *) NULL);
|
|
+ assert (i == 0);
|
|
+ i = pthread_join (t1, NULL);
|
|
+ assert (i == 0);
|
|
+ }
|
|
+ break;
|
|
+ case 3:
|
|
+ cmd = exec_nothreads;
|
|
+ {
|
|
+ pthread_t t1;
|
|
+ int i;
|
|
+
|
|
+ i = pthread_create (&t1, NULL, threader, (void *) NULL);
|
|
+ assert (i == 0);
|
|
+ i = pthread_join (t1, NULL);
|
|
+ assert (i == 0);
|
|
+ }
|
|
+ break;
|
|
+ case 4:
|
|
+ fprintf (stderr, "%s: We should not have threads for phase %d!\n",
|
|
+ argv[0], phase);
|
|
+ return 1;
|
|
+ default:
|
|
+ assert (0);
|
|
+ }
|
|
+#endif /* THREADS */
|
|
+
|
|
+ assert (cmd != NULL);
|
|
+
|
|
+ phase++;
|
|
+ snprintf (phase_s, sizeof phase_s, "%d", phase);
|
|
+
|
|
+ execl (cmd, cmd, exec_nothreads, exec_threads, phase_s, NULL);
|
|
+ assert (0);
|
|
+}
|
|
diff --git a/gdb/testsuite/gdb.threads/threaded-exec.exp b/gdb/testsuite/gdb.threads/threaded-exec.exp
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/gdb/testsuite/gdb.threads/threaded-exec.exp
|
|
@@ -0,0 +1,46 @@
|
|
+# threaded-exec.exp -- Check reset of the tracked threads on exec*(2)
|
|
+# Copyright (C) 2007 Free Software Foundation, Inc.
|
|
+
|
|
+# This program is free software; you can redistribute it and/or modify
|
|
+# it under the terms of the GNU General Public License as published by
|
|
+# the Free Software Foundation; either version 2 of the License, or
|
|
+# (at your option) any later version.
|
|
+#
|
|
+# This program 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 General Public License for more details.
|
|
+#
|
|
+# You should have received a copy of the GNU General Public License
|
|
+# along with this program; if not, write to the Free Software
|
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
+
|
|
+# Please email any bugs, comments, and/or additions to this file to:
|
|
+# bug-gdb@prep.ai.mit.edu
|
|
+
|
|
+set testfile threaded-exec
|
|
+set srcfile ${testfile}.c
|
|
+set binfile_nothreads [standard_output_file ${testfile}N]
|
|
+set binfile_threads [standard_output_file ${testfile}Y]
|
|
+
|
|
+if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile_nothreads}" executable {additional_flags=-UTHREADS}] != "" } {
|
|
+ return -1
|
|
+}
|
|
+
|
|
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile_threads}" executable {additional_flags=-DTHREADS}] != "" } {
|
|
+ return -1
|
|
+}
|
|
+
|
|
+gdb_exit
|
|
+gdb_start
|
|
+gdb_reinitialize_dir $srcdir/$subdir
|
|
+
|
|
+gdb_load ${binfile_nothreads}
|
|
+
|
|
+gdb_run_cmd [list ${binfile_nothreads} ${binfile_threads} 0]
|
|
+
|
|
+gdb_test_multiple {} "Program exited" {
|
|
+ -re "\r\n\\\[Inferior .* exited normally\\\]\r\n$gdb_prompt $" {
|
|
+ pass "Program exited"
|
|
+ }
|
|
+}
|