From: Tom Hughes Date: Mon, 28 Mar 2005 18:19:21 +0000 (+0000) Subject: Actually setup the arguments for a signal handler before running X-Git-Tag: svn/VALGRIND_3_0_0~851 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7fc4fb643370c15d020f2168c3fd6572c0438bfb;p=thirdparty%2Fvalgrind.git Actually setup the arguments for a signal handler before running it - that way the signal might do what is expected. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3467 --- diff --git a/coregrind/amd64/signals.c b/coregrind/amd64/signals.c index 256fc0861d..8f738e34f5 100644 --- a/coregrind/amd64/signals.c +++ b/coregrind/amd64/signals.c @@ -485,18 +485,23 @@ void VGA_(push_signal_frame)(ThreadId tid, Addr rsp_top_of_frame, const vki_sigset_t *mask, void *restorer) { - Addr rsp; + Addr rsp; + struct rt_sigframe *frame; ThreadState* tst = VG_(get_ThreadState)(tid); rsp = build_rt_sigframe(tst, rsp_top_of_frame, siginfo, handler, flags, mask, restorer); + frame = (struct rt_sigframe *)rsp; /* Set the thread so it will next run the handler. */ - /* tst->m_esp = esp; */ + /* tst->m_rsp = rsp; */ SET_SIGNAL_RSP(tid, rsp); //VG_(printf)("handler = %p\n", handler); tst->arch.vex.guest_RIP = (Addr) handler; + tst->arch.vex.guest_RDI = (ULong) siginfo->si_signo; + tst->arch.vex.guest_RSI = (Addr) &frame->sigInfo; + tst->arch.vex.guest_RDX = (Addr) &frame->uContext; /* This thread needs to be marked runnable, but we leave that the caller to do. */