Home | History | Annotate | Download | only in m_sigframe

Lines Matching refs:frame

75 /*--- Signal frame layouts                                 ---*/
81 // Linux has 2 signal frame structures: one for normal signal
87 // frame is. Unfortunately, things like gcc's exception unwinding
88 // make assumptions about the locations of various parts of the frame,
91 /* Valgrind-specific parts of the signal frame */
408 VG_(printf)("frame=%#lx seg=%#lx-%#lx\n",
431 /* For tracking memory events, indicate the entire frame has been
440 /* Build the Valgrind-specific part of a signal frame. */
442 static void build_vg_sigframe(struct vg_sigframe *frame,
447 frame->sigNo_private = sigNo;
448 frame->magicPI = 0x31415927;
449 frame->vex_shadow1 = tst->arch.vex_shadow1;
450 frame->vex_shadow2 = tst->arch.vex_shadow2;
452 frame->vex = tst->arch.vex;
454 frame->mask = tst->sig_mask;
455 frame->handlerflags = flags;
456 frame->magicE = 0x27182818;
468 struct sigframe *frame;
477 esp -= sizeof(*frame);
479 frame = (struct sigframe *)esp;
481 if (!extend(tst, esp, sizeof(*frame)))
485 VG_TRACK( pre_mem_write, Vg_CoreSignal, tst->tid, "signal handler frame",
488 frame->sigNo = sigNo;
491 frame->retaddr = (Addr)restorer;
493 frame->retaddr = (Addr)&VG_(x86_linux_SUBST_FOR_sigreturn);
503 synth_ucontext(tst->tid, siginfo, trapno, err, mask, &uc, &frame->fpstate);
505 VG_(memcpy)(&frame->sigContext, &uc.uc_mcontext,
507 frame->sigContext.oldmask = mask->sig[0];
512 build_vg_sigframe(&frame->vg, tst, flags, sigNo);
526 struct rt_sigframe *frame;
534 esp -= sizeof(*frame);
536 frame = (struct rt_sigframe *)esp;
538 if (!extend(tst, esp, sizeof(*frame)))
542 VG_TRACK( pre_mem_write, Vg_CoreSignal, tst->tid, "rt signal handler frame",
545 frame->sigNo = sigNo;
548 frame->retaddr = (Addr)restorer;
550 frame->retaddr = (Addr)&VG_(x86_linux_SUBST_FOR_rt_sigreturn);
560 frame->psigInfo = (Addr)&frame->sigInfo;
561 frame->puContext = (Addr)&frame->uContext;
562 VG_(memcpy)(&frame->sigInfo, siginfo, sizeof(vki_siginfo_t));
566 frame->sigInfo._sifields._sigfault._addr
570 &frame->uContext, &frame->fpstate);
575 build_vg_sigframe(&frame->vg, tst, flags, sigNo);
612 VG_(printf)("pushed signal frame; %%ESP now = %#lx, "
623 segfault, if it looks like the frame is corrupted. */
626 struct vg_sigframe *frame, Int *sigNo )
628 if (frame->magicPI != 0x31415927 ||
629 frame->magicE != 0x27182818) {
630 VG_(message)(Vg_UserMsg, "Thread %d return signal frame "
638 tst->sig_mask = frame->mask;
639 tst->tmp_sig_mask = frame->mask;
640 tst->arch.vex_shadow1 = frame->vex_shadow1;
641 tst->arch.vex_shadow2 = frame->vex_shadow2;
643 tst->arch.vex = frame->vex;
645 *sigNo = frame->sigNo_private;
677 struct sigframe *frame, Int *sigNo )
679 if (restore_vg_sigframe(tst, &frame->vg, sigNo))
680 restore_sigcontext(tst, &frame->sigContext, &frame->fpstate);
682 return sizeof(*frame);
687 struct rt_sigframe *frame, Int *sigNo )
689 if (restore_vg_sigframe(tst, &frame->vg, sigNo))
690 restore_sigcontext(tst, &frame->uContext.uc_mcontext, &frame->fpstate);
692 return sizeof(*frame);
706 /* Correctly reestablish the frame base address. */