[valgrind] Add valgrind-3.8.1-gdbserver_exit.patch (#862795, KDE#308341)

Mark Wielaard mjw at fedoraproject.org
Sat Oct 13 20:46:14 UTC 2012


commit efb9f60f6e7753e5121c83d2bcd6be474a5a1212
Author: Mark Wielaard <mjw at redhat.com>
Date:   Sat Oct 13 22:38:31 2012 +0200

    Add valgrind-3.8.1-gdbserver_exit.patch (#862795, KDE#308341)

 valgrind-3.8.1-gdbserver_exit.patch |  630 +++++++++++++++++++++++++++++++++++
 valgrind.spec                       |    5 +
 2 files changed, 635 insertions(+), 0 deletions(-)
---
diff --git a/valgrind-3.8.1-gdbserver_exit.patch b/valgrind-3.8.1-gdbserver_exit.patch
new file mode 100644
index 0000000..46a8da5
--- /dev/null
+++ b/valgrind-3.8.1-gdbserver_exit.patch
@@ -0,0 +1,630 @@
+Index: valgrind/coregrind/m_gdbserver/m_gdbserver.c
+===================================================================
+--- valgrind/coregrind/m_gdbserver/m_gdbserver.c	(revision 13036)
++++ valgrind/coregrind/m_gdbserver/m_gdbserver.c	(working copy)
+@@ -33,6 +33,8 @@
+ #include "pub_core_libcproc.h"
+ #include "pub_core_libcprint.h"
+ #include "pub_core_mallocfree.h"
++#include "pub_tool_libcsetjmp.h"
++#include "pub_core_threadstate.h"
+ #include "pub_core_gdbserver.h"
+ #include "pub_core_options.h"
+ #include "pub_core_libcsetjmp.h"
+@@ -68,7 +70,8 @@
+       core_reason,    // gdbserver invocation by core (e.g. error encountered)
+       break_reason,   // break encountered
+       watch_reason,   // watchpoint detected by tool
+-      signal_reason}  // signal encountered
++      signal_reason,  // signal encountered
++      exit_reason}    // process terminated
+     CallReason;
+ 
+ static char* ppCallReason(CallReason reason)
+@@ -80,6 +83,7 @@
+    case break_reason:   return "break_reason";
+    case watch_reason:   return "watch_reason";
+    case signal_reason:  return "signal_reason";
++   case exit_reason:    return "exit_reason";
+    default: vg_assert (0);
+    }
+ }
+@@ -641,6 +645,14 @@
+         VG_(getpid) (), tid, VG_(name_of_ThreadStatus)(tst->status),
+         tst->sched_jmpbuf_valid);
+ 
++   /* If we are about to die, then just run server_main() once to get
++      the message out and return immediately because most of the state
++      of this tid and process is about to be torn down. */
++   if (reason == exit_reason) {
++      server_main();
++      return;
++   }
++
+    vg_assert(VG_(is_valid_tid)(tid));
+    saved_pc = VG_(get_IP) (tid);
+ 
+@@ -933,6 +945,29 @@
+    }
+ }
+ 
++void VG_(gdbserver_exit) (ThreadId tid, VgSchedReturnCode tids_schedretcode)
++{
++   dlog(1, "VG core calling VG_(gdbserver_exit) tid %d will exit\n", tid);
++   if (remote_connected()) {
++      /* Make sure vgdb knows we are about to die and why. */
++      if (tids_schedretcode == VgSrc_ExitThread
++          || tids_schedretcode == VgSrc_ExitProcess) {
++         gdbserver_process_exit ('W', VG_(threads)[tid].os_state.exitcode);
++         call_gdbserver (tid, exit_reason);
++      }
++
++      if (tids_schedretcode == VgSrc_FatalSig) {
++         gdbserver_process_exit ('X', VG_(threads)[tid].os_state.fatalsig);
++         call_gdbserver (tid, exit_reason);
++      }
++   } else {
++      dlog(1, "not connected\n");
++   }
++
++   /* Tear down the connection if it still exists. */
++   VG_(gdbserver) (0);
++}
++
+ // Check if single_stepping or if there is a break requested at iaddr. 
+ // If yes, call debugger
+ VG_REGPARM(1)
+Index: valgrind/coregrind/m_gdbserver/server.c
+===================================================================
+--- valgrind/coregrind/m_gdbserver/server.c	(revision 13036)
++++ valgrind/coregrind/m_gdbserver/server.c	(working copy)
+@@ -765,6 +765,13 @@
+          putpkt (own_buf);
+       }
+ 
++      /* If we our status is terminal (exit or fatal signal) get out
++         as quickly as we can. We won't be able to handle any request
++         anymore.  */
++      if (status == 'W' || status == 'X') {
++         return;
++      }
++
+       packet_len = getpkt (own_buf);
+       if (packet_len <= 0)
+          break;
+Index: valgrind/coregrind/m_gdbserver/server.h
+===================================================================
+--- valgrind/coregrind/m_gdbserver/server.h	(revision 13036)
++++ valgrind/coregrind/m_gdbserver/server.h	(working copy)
+@@ -40,9 +40,9 @@
+ #include "pub_tool_libcassert.h"
+ #include "pub_tool_libcbase.h"
+ #include "pub_tool_options.h"
+-#include "pub_core_gdbserver.h"
+ #include "pub_tool_libcsetjmp.h"
+ #include "pub_core_threadstate.h"
++#include "pub_core_gdbserver.h"
+ #include "pub_core_aspacemgr.h"
+ #include "pub_tool_vki.h"
+ #include "valgrind.h"
+@@ -208,6 +208,9 @@
+    to ignore the signal, so signal can be delivered to the guest. */
+ extern Bool gdbserver_deliver_signal (Int vki_sigNo);
+ 
++/* Called when a process is about to go with reason ('W' or 'X') and code. */
++extern void gdbserver_process_exit (unsigned char status, Int code);
++
+ /* To optimise signal handling, gdb can instruct gdbserver to
+    not stop on some signals. In the below, a 1 indicates the gdb_nr signal
+    has to be passed directly to the guest, without asking gdb.
+Index: valgrind/coregrind/m_gdbserver/target.c
+===================================================================
+--- valgrind/coregrind/m_gdbserver/target.c	(revision 13036)
++++ valgrind/coregrind/m_gdbserver/target.c	(working copy)
+@@ -165,6 +165,14 @@
+    return vki_sigNo == vki_signal_to_deliver;
+ }
+ 
++static unsigned char exit_status_to_report;
++static int exit_code_to_report;
++void gdbserver_process_exit (unsigned char status, Int code)
++{
++   exit_status_to_report = status;
++   exit_code_to_report = code;
++}
++
+ static
+ char* sym (Addr addr)
+ {
+@@ -248,6 +256,7 @@
+    unsigned long wptid;
+    ThreadState *tst;
+    enum target_signal sig;
++   int code;
+ 
+    pid = VG_(getpid) ();
+    dlog(1, "enter valgrind_wait pid %d\n", pid);
+@@ -255,6 +264,24 @@
+    regcache_invalidate();
+    valgrind_update_threads(pid);
+ 
++   /* First see if we are done with this process. */
++   if (exit_status_to_report != 0) {
++      *ourstatus = exit_status_to_report;
++      exit_status_to_report = 0;
++
++      if (*ourstatus == 'W') {
++         code = exit_code_to_report;
++         exit_code_to_report = 0;
++         return code;
++      }
++
++      if (*ourstatus == 'X') {
++         sig = target_signal_from_host(exit_code_to_report);
++         exit_code_to_report = 0;
++         return sig;
++      }
++   }
++
+    /* in valgrind, we consider that a wait always succeeds with STOPPED 'T' 
+       and with a signal TRAP (i.e. a breakpoint), unless there is
+       a signal to report. */
+Index: valgrind/coregrind/m_libcprint.c
+===================================================================
+--- valgrind/coregrind/m_libcprint.c	(revision 13036)
++++ valgrind/coregrind/m_libcprint.c	(working copy)
+@@ -31,7 +31,6 @@
+ #include "pub_core_basics.h"
+ #include "pub_core_vki.h"
+ #include "pub_core_debuglog.h"
+-#include "pub_core_gdbserver.h"
+ #include "pub_core_libcbase.h"
+ #include "pub_core_libcassert.h"
+ #include "pub_core_libcfile.h"   // VG_(write)(), VG_(write_socket)()
+Index: valgrind/coregrind/m_main.c
+===================================================================
+--- valgrind/coregrind/m_main.c	(revision 13036)
++++ valgrind/coregrind/m_main.c	(working copy)
+@@ -2543,7 +2543,7 @@
+ 
+    /* terminate gdbserver if ever it was started. We terminate it here so that it get
+       the output above if output was redirected to gdb */
+-   VG_(gdbserver) (0);
++   VG_(gdbserver_exit) (tid, tids_schedretcode);
+ 
+    /* Ok, finally exit in the os-specific way, according to the scheduler's
+       return code.  In short, if the (last) thread exited by calling
+Index: valgrind/coregrind/pub_core_gdbserver.h
+===================================================================
+--- valgrind/coregrind/pub_core_gdbserver.h	(revision 13036)
++++ valgrind/coregrind/pub_core_gdbserver.h	(working copy)
+@@ -48,7 +48,10 @@
+ // to handle this incoming vgdb request.                                
+ extern Bool VG_(gdbserver_activity) (ThreadId tid);
+ 
++// Called by low level when the process is about to exit and why.
++void VG_(gdbserver_exit) (ThreadId, VgSchedReturnCode);
+ 
++
+ /* Called by low level to insert or remove a break or watch point.
+    Break or watch point implementation is done using help from the tool.
+    break point support implies some (small) specific instrumentation
+Index: valgrind/gdbserver_tests/Makefile.am
+===================================================================
+--- valgrind/gdbserver_tests/Makefile.am	(revision 13036)
++++ valgrind/gdbserver_tests/Makefile.am	(working copy)
+@@ -100,7 +100,22 @@
+ 	nlsigvgdb.vgtest \
+ 	nlsigvgdb.stderr.exp \
+ 	nlsigvgdb.stderrB.exp \
+-	nlsigvgdb.stdinB.gdb
++	nlsigvgdb.stdinB.gdb \
++	gone_abrt.stderr.exp \
++	gone_abrt.stderrB.exp \
++	gone_abrt.stdinB.gdb \
++	gone_abrt.stdoutB.exp \
++	gone_abrt.vgtest \
++	gone_exit.stderr.exp \
++	gone_exit.stderrB.exp \
++	gone_exit.stdinB.gdb \
++	gone_exit.stdoutB.exp \
++	gone_exit.vgtest \
++	gone_return.stderr.exp \
++	gone_return.stderrB.exp \
++	gone_return.stdinB.gdb \
++	gone_return.stdoutB.exp \
++	gone_return.vgtest
+ 
+ check_PROGRAMS = \
+ 	clean_after_fork \
+@@ -109,7 +124,8 @@
+ 	sleepers \
+ 	main_pic \
+ 	t \
+-	watchpoints
++	watchpoints \
++	gone
+ 
+ AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
+ AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
+Index: valgrind/gdbserver_tests/filter_gdb
+===================================================================
+--- valgrind/gdbserver_tests/filter_gdb	(revision 13036)
++++ valgrind/gdbserver_tests/filter_gdb	(working copy)
+@@ -49,6 +51,8 @@
+ #         a.o. produced by gdb 7.2 on arm (same with standard gdbserver)
+ #       delete empty lines (the last line (only made of prompts) sometimes
+ #           finishes with a new line, sometimes not ???).
++#       'exited with code' and 'exited normally' are printed slightly
++#       differently between gdb versions, normalize to "Program exited...".
+ sed -e '/Remote debugging using/,/vgdb launched process attached/d'                                   \
+     -e 's/^\[?1034hReading symbols/Reading symbols/'                                                \
+     -e '/^Missing separate debuginfo/d'                                                               \
+@@ -64,6 +68,8 @@
+     -e '/^Loaded symbols for .*$/d'                                                                   \
+     -e '/^Current language.*/d'                                                                       \
+     -e '/^The current source language is.*/d'                                                         \
++    -e 's/^.*\( exited with code [0-9]\+\).$/Program\1\./g'                              \
++    -e 's/^.*\( exited normally\).$/Program\1\./g'                              \
+     -e 's/(gdb) //g'                                                                                  \
+     -e 's/^>[> ]*//'                                                                                  \
+     -e '/^done\.$/d'                                                                                  \
+Index: valgrind/gdbserver_tests/gone.c
+===================================================================
+--- valgrind/gdbserver_tests/gone.c	(revision 0)
++++ valgrind/gdbserver_tests/gone.c	(working copy)
+@@ -0,0 +1,33 @@
++#include <signal.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++int
++main (int argc, char **argv)
++{
++  fprintf(stderr, "starting ...\n");
++
++  // Three ways of going away...
++  if (argc > 1)
++    {
++      // Explicit exit() with exit code.
++      if (strcmp (argv[1], "exit") == 0)
++	{
++	  fprintf(stderr, "exiting ...\n");
++	  exit (1);
++	}
++
++      // Get killed by a signal.
++      if (strcmp (argv[1], "abort") == 0)
++	{
++	  fprintf(stderr, "aborting ...\n");
++	  kill(getpid(), SIGABRT);
++	}
++    }
++
++  // And finally, just return from main with success.
++  fprintf(stderr, "returning ...\n");
++  return 0;
++}
+Index: valgrind/gdbserver_tests/gone_abrt.stderr.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_abrt.stderr.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_abrt.stderr.exp	(working copy)
+@@ -0,0 +1,8 @@
++Nulgrind, the minimal Valgrind tool
++
++(action at startup) vgdb me ... 
++
++
++starting ...
++aborting ...
++
+Index: valgrind/gdbserver_tests/gone_abrt.stderrB.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_abrt.stderrB.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_abrt.stderrB.exp	(working copy)
+@@ -0,0 +1 @@
++relaying data between gdb and process ....
+Index: valgrind/gdbserver_tests/gone_abrt.stdinB.gdb
+===================================================================
+--- valgrind/gdbserver_tests/gone_abrt.stdinB.gdb	(revision 0)
++++ valgrind/gdbserver_tests/gone_abrt.stdinB.gdb	(working copy)
+@@ -0,0 +1,9 @@
++# connect gdb to Valgrind gdbserver:
++target remote | ./vgdb --wait=60 --vgdb-prefix=./vgdb-prefix-gone-abrt
++echo vgdb launched process attached\n
++
++continue
++# see process get a fatal signal
++continue
++# see program is gone
++quit
+Index: valgrind/gdbserver_tests/gone_abrt.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_abrt.stdoutB.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_abrt.stdoutB.exp	(working copy)
+@@ -0,0 +1,7 @@
++vgdb launched process attached
++Continuing.
++Program received signal SIGABRT, Aborted.
++0x........ in syscall ...
++Continuing.
++Program terminated with signal SIGABRT, Aborted.
++The program no longer exists.
+Index: valgrind/gdbserver_tests/gone_abrt.vgtest
+===================================================================
+--- valgrind/gdbserver_tests/gone_abrt.vgtest	(revision 0)
++++ valgrind/gdbserver_tests/gone_abrt.vgtest	(working copy)
+@@ -0,0 +1,12 @@
++# test that a fatal SIGABRT signal is properly passed on to gdb.
++
++prog: gone
++args: abort
++vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-gone-abrt
++stderr_filter: filter_stderr
++prereq: test -e gdb
++progB: gdb
++argsB: --quiet -l 60 --nx ./gone
++stdinB: gone_abrt.stdinB.gdb
++stdoutB_filter: filter_gdb
++stderrB_filter: filter_gdb
+Index: valgrind/gdbserver_tests/gone_exit.stderr.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_exit.stderr.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_exit.stderr.exp	(working copy)
+@@ -0,0 +1,8 @@
++Nulgrind, the minimal Valgrind tool
++
++(action at startup) vgdb me ... 
++
++
++starting ...
++exiting ...
++
+Index: valgrind/gdbserver_tests/gone_exit.stderrB.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_exit.stderrB.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_exit.stderrB.exp	(working copy)
+@@ -0,0 +1 @@
++relaying data between gdb and process ....
+Index: valgrind/gdbserver_tests/gone_exit.stdinB.gdb
+===================================================================
+--- valgrind/gdbserver_tests/gone_exit.stdinB.gdb	(revision 0)
++++ valgrind/gdbserver_tests/gone_exit.stdinB.gdb	(working copy)
+@@ -0,0 +1,7 @@
++# connect gdb to Valgrind gdbserver:
++target remote | ./vgdb --wait=60 --vgdb-prefix=./vgdb-prefix-gone-exit
++echo vgdb launched process attached\n
++
++continue
++# see program is gone with exit code
++quit
+Index: valgrind/gdbserver_tests/gone_exit.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_exit.stdoutB.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_exit.stdoutB.exp	(working copy)
+@@ -0,0 +1,3 @@
++vgdb launched process attached
++Continuing.
++Program exited with code 01.
+Index: valgrind/gdbserver_tests/gone_exit.vgtest
+===================================================================
+--- valgrind/gdbserver_tests/gone_exit.vgtest	(revision 0)
++++ valgrind/gdbserver_tests/gone_exit.vgtest	(working copy)
+@@ -0,0 +1,12 @@
++# test that an exit (with return value) is properly passed on to gdb.
++
++prog: gone
++args: exit
++vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-gone-exit
++stderr_filter: filter_stderr
++prereq: test -e gdb
++progB: gdb
++argsB: --quiet -l 60 --nx ./gone
++stdinB: gone_exit.stdinB.gdb
++stdoutB_filter: filter_gdb
++stderrB_filter: filter_gdb
+Index: valgrind/gdbserver_tests/gone_return.stderr.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_return.stderr.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_return.stderr.exp	(working copy)
+@@ -0,0 +1,8 @@
++Nulgrind, the minimal Valgrind tool
++
++(action at startup) vgdb me ... 
++
++
++starting ...
++returning ...
++
+Index: valgrind/gdbserver_tests/gone_return.stderrB.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_return.stderrB.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_return.stderrB.exp	(working copy)
+@@ -0,0 +1 @@
++relaying data between gdb and process ....
+Index: valgrind/gdbserver_tests/gone_return.stdinB.gdb
+===================================================================
+--- valgrind/gdbserver_tests/gone_return.stdinB.gdb	(revision 0)
++++ valgrind/gdbserver_tests/gone_return.stdinB.gdb	(working copy)
+@@ -0,0 +1,7 @@
++# connect gdb to Valgrind gdbserver:
++target remote | ./vgdb --wait=60 --vgdb-prefix=./vgdb-prefix-gone-return
++echo vgdb launched process attached\n
++
++continue
++# see program is gone
++quit
+Index: valgrind/gdbserver_tests/gone_return.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/gone_return.stdoutB.exp	(revision 0)
++++ valgrind/gdbserver_tests/gone_return.stdoutB.exp	(working copy)
+@@ -0,0 +1,3 @@
++vgdb launched process attached
++Continuing.
++Program exited normally.
+Index: valgrind/gdbserver_tests/gone_return.vgtest
+===================================================================
+--- valgrind/gdbserver_tests/gone_return.vgtest	(revision 0)
++++ valgrind/gdbserver_tests/gone_return.vgtest	(working copy)
+@@ -0,0 +1,12 @@
++# test that a normal (successful) return is properly passed on to gdb.
++
++prog: gone
++args: return
++vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-gone-return
++stderr_filter: filter_stderr
++prereq: test -e gdb
++progB: gdb
++argsB: --quiet -l 60 --nx ./gone
++stdinB: gone_return.stdinB.gdb
++stdoutB_filter: filter_gdb
++stderrB_filter: filter_gdb
+Index: valgrind/gdbserver_tests/mcleak.stderrB.exp
+===================================================================
+--- valgrind/gdbserver_tests/mcleak.stderrB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/mcleak.stderrB.exp	(working copy)
+@@ -95,4 +95,3 @@
+    by 0x........: f (leak-delta.c:28)
+    by 0x........: main (leak-delta.c:60)
+ 
+-Remote connection closed
+Index: valgrind/gdbserver_tests/mcleak.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/mcleak.stdoutB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/mcleak.stdoutB.exp	(working copy)
+@@ -45,3 +45,4 @@
+ #1  0x........ in f () at leak-delta.c:48
+ 48	   fprintf(stderr, "expecting details 32 (+32) bytes lost, 33 (-32) bytes reachable\n"); fflush(stderr); breakme();
+ Continuing.
++Program exited normally.
+Index: valgrind/gdbserver_tests/mcmain_pic.stderrB.exp
+===================================================================
+--- valgrind/gdbserver_tests/mcmain_pic.stderrB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/mcmain_pic.stderrB.exp	(working copy)
+@@ -1,3 +1,2 @@
+ relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+-Remote connection closed
+Index: valgrind/gdbserver_tests/mcmain_pic.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/mcmain_pic.stdoutB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/mcmain_pic.stdoutB.exp	(working copy)
+@@ -6,3 +6,4 @@
+ $2 = (int (*)(int, char **)) 0x........ <main>
+ $3 = (void (*)(char *)) 0x........ <another_func>
+ Continuing.
++Program exited normally.
+Index: valgrind/gdbserver_tests/mcwatchpoints.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/mcwatchpoints.stdoutB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/mcwatchpoints.stdoutB.exp	(working copy)
+@@ -32,3 +32,4 @@
+ 49	   fprintf(stderr, "after writing 8\n");
+ Delete all breakpoints? (y or n) [answered Y; input not from terminal]
+ Continuing.
++Program exited normally.
+Index: valgrind/gdbserver_tests/nlcontrolc.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/nlcontrolc.stdoutB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/nlcontrolc.stdoutB.exp	(working copy)
+@@ -21,3 +21,4 @@
+ $6 = 0
+ $7 = 0
+ Continuing.
++Program exited normally.
+Index: valgrind/gdbserver_tests/nlpasssigalrm.stderrB.exp
+===================================================================
+--- valgrind/gdbserver_tests/nlpasssigalrm.stderrB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/nlpasssigalrm.stderrB.exp	(working copy)
+@@ -1,3 +1,2 @@
+ relaying data between gdb and process ....
+ vgdb-error value changed from 0 to 999999
+-Remote connection closed
+Index: valgrind/gdbserver_tests/nlpasssigalrm.stdoutB.exp
+===================================================================
+--- valgrind/gdbserver_tests/nlpasssigalrm.stdoutB.exp	(revision 13036)
++++ valgrind/gdbserver_tests/nlpasssigalrm.stdoutB.exp	(working copy)
+@@ -19,3 +19,4 @@
+ Program received signal SIG34, Real-time event 34.
+ 0x........ in syscall ...
+ Continuing.
++Program exited normally.
+--- valgrind-3.8.1/gdbserver_tests/Makefile.in.orig	2012-10-13 16:35:43.846865557 +0200
++++ valgrind-3.8.1/gdbserver_tests/Makefile.in	2012-10-13 16:36:37.445641004 +0200
+@@ -56,7 +56,7 @@
+ 
+ check_PROGRAMS = clean_after_fork$(EXEEXT) fork_chain$(EXEEXT) \
+ 	passsigalrm$(EXEEXT) sleepers$(EXEEXT) main_pic$(EXEEXT) \
+-	t$(EXEEXT) watchpoints$(EXEEXT)
++	t$(EXEEXT) watchpoints$(EXEEXT) gone$(EXEEXT)
+ subdir = gdbserver_tests
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+ am__aclocal_m4_deps = $(top_srcdir)/configure.in
+@@ -74,6 +74,10 @@
+ fork_chain_OBJECTS = fork_chain.$(OBJEXT)
+ fork_chain_LDADD = $(LDADD)
+ fork_chain_DEPENDENCIES =
++gone_SOURCES = gone.c
++gone_OBJECTS = gone.$(OBJEXT)
++gone_LDADD = $(LDADD)
++gone_DEPENDENCIES =
+ main_pic_SOURCES = main_pic.c
+ main_pic_OBJECTS = main_pic-main_pic.$(OBJEXT)
+ main_pic_LDADD = $(LDADD)
+@@ -105,9 +109,9 @@
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ CCLD = $(CC)
+ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+-SOURCES = clean_after_fork.c fork_chain.c main_pic.c passsigalrm.c \
+-	sleepers.c t.c watchpoints.c
+-DIST_SOURCES = clean_after_fork.c fork_chain.c main_pic.c \
++SOURCES = clean_after_fork.c fork_chain.c gone.c main_pic.c \
++	passsigalrm.c sleepers.c t.c watchpoints.c
++DIST_SOURCES = clean_after_fork.c fork_chain.c gone.c main_pic.c \
+ 	passsigalrm.c sleepers.c t.c watchpoints.c
+ ETAGS = etags
+ CTAGS = ctags
+@@ -487,7 +491,22 @@
+ 	nlsigvgdb.vgtest \
+ 	nlsigvgdb.stderr.exp \
+ 	nlsigvgdb.stderrB.exp \
+-	nlsigvgdb.stdinB.gdb
++	nlsigvgdb.stdinB.gdb \
++	gone_abrt.stderr.exp \
++	gone_abrt.stderrB.exp \
++	gone_abrt.stdinB.gdb \
++	gone_abrt.stdoutB.exp \
++	gone_abrt.vgtest \
++	gone_exit.stderr.exp \
++	gone_exit.stderrB.exp \
++	gone_exit.stdinB.gdb \
++	gone_exit.stdoutB.exp \
++	gone_exit.vgtest \
++	gone_return.stderr.exp \
++	gone_return.stderrB.exp \
++	gone_return.stdinB.gdb \
++	gone_return.stdoutB.exp \
++	gone_return.vgtest
+ 
+ LDADD = -lpthread
+ main_pic_LDFLAGS = -pie
+@@ -535,6 +554,9 @@
+ fork_chain$(EXEEXT): $(fork_chain_OBJECTS) $(fork_chain_DEPENDENCIES) 
+ 	@rm -f fork_chain$(EXEEXT)
+ 	$(LINK) $(fork_chain_OBJECTS) $(fork_chain_LDADD) $(LIBS)
++gone$(EXEEXT): $(gone_OBJECTS) $(gone_DEPENDENCIES) 
++	@rm -f gone$(EXEEXT)
++	$(LINK) $(gone_OBJECTS) $(gone_LDADD) $(LIBS)
+ main_pic$(EXEEXT): $(main_pic_OBJECTS) $(main_pic_DEPENDENCIES) 
+ 	@rm -f main_pic$(EXEEXT)
+ 	$(main_pic_LINK) $(main_pic_OBJECTS) $(main_pic_LDADD) $(LIBS)
+@@ -559,6 +581,7 @@
+ 
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/clean_after_fork.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fork_chain.Po at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gone.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/main_pic-main_pic.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/passsigalrm.Po at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sleepers.Po at am__quote@
diff --git a/valgrind.spec b/valgrind.spec
index f26626e..d17f96f 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -111,6 +111,9 @@ Patch24: valgrind-3.8.1-avx2-prereq.patch
 # KDE#308321 - testsuite memcheck filter interferes with gdb_filter
 Patch25: valgrind-3.8.1-filter_gdb.patch
 
+# KDE#308341 - vgdb should report process exit (or fatal signal) 
+Patch26: valgrind-3.8.1-gdbserver_exit.patch
+
 
 Obsoletes: valgrind-callgrind
 %ifarch x86_64 ppc64
@@ -235,6 +238,7 @@ touch ./none/tests/amd64/bmi.stderr.exp
 %patch24 -p1
 
 %patch25 -p1
+%patch26 -p1
 
 %build
 # We need to use the software collection compiler and binutils if available.
@@ -369,6 +373,7 @@ echo ===============END TESTING===============
 - Add valgrind-3.8.1-proc-auxv.patch (KDE#253519)
 - Add valgrind-3.8.1-wcs.patch (#755242, KDE#307828)
 - Add valgrind-3.8.1-filter_gdb.patch (KDE#308321)
+- Add valgrind-3.8.1-gdbserver_exit.patch (#862795, KDE#308341)
 
 * Fri Sep 20 2012 Mark Wielaard <mjw at redhat.com> 3.8.1-2
 - Add valgrind-3.8.1-gdbserver_tests-mcinvoke-ppc64.patch


More information about the scm-commits mailing list