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 ++#include ++#include ++#include ++#include ++ ++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........
+ $3 = (void (*)(char *)) 0x........ + 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@./$(DEPDIR)/clean_after_fork.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fork_chain.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gone.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main_pic-main_pic.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passsigalrm.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleepers.Po@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 3.8.1-2 - Add valgrind-3.8.1-gdbserver_tests-mcinvoke-ppc64.patch