]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Actually setup the arguments for a signal handler before running
authorTom Hughes <tom@compton.nu>
Mon, 28 Mar 2005 18:19:21 +0000 (18:19 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 28 Mar 2005 18:19:21 +0000 (18:19 +0000)
it - that way the signal might do what is expected.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3467

coregrind/amd64/signals.c

index 256fc0861dee3e606d3c326a6b4937ea97faaf69..8f738e34f5012c325de13f411fc4adb714c9f9d7 100644 (file)
@@ -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. */