The kernel sends signals to the processes via ABI specific sv_sendsig method.
Native ABI do not need signal conversion, only emulators may want this. Usually emulators implements its own sv_sendsig method. For now only ibcs2 emulator does not have own sv_sendsig implementation and depends on native sendsig() method. So, remove any extra attempts to convert signal numbers from native sendsig() methods except from i386 where ibsc2 is living.
This commit is contained in:
parent
e6b9e12420
commit
0969667a9e
@ -398,10 +398,6 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
/* Align to 16 bytes. */
|
||||
sfp = (struct sigframe *)((unsigned long)sp & ~0xFul);
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
regs->tf_rdi = sig; /* arg 1 in %rdi */
|
||||
regs->tf_rdx = (register_t)&sfp->sf_uc; /* arg 3 in %rdx */
|
||||
|
@ -360,10 +360,6 @@ ia32_osendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
} else
|
||||
fp = (struct ia32_sigframe3 *)regs->tf_rsp - 1;
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
sf.sf_signum = sig;
|
||||
sf.sf_scp = (register_t)&fp->sf_siginfo.si_sc;
|
||||
@ -498,10 +494,6 @@ freebsd4_ia32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
sfp = (struct ia32_sigframe4 *)regs->tf_rsp - 1;
|
||||
PROC_UNLOCK(p);
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
sf.sf_signum = sig;
|
||||
sf.sf_ucontext = (register_t)&sfp->sf_uc;
|
||||
@ -643,10 +635,6 @@ ia32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
sfp = (struct ia32_sigframe *)((uintptr_t)sp & ~0xF);
|
||||
PROC_UNLOCK(p);
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
sf.sf_signum = sig;
|
||||
sf.sf_ucontext = (register_t)&sfp->sf_uc;
|
||||
|
@ -320,10 +320,6 @@ sendsig(catcher, ksi, mask)
|
||||
sigexit(td, SIGILL);
|
||||
}
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/*
|
||||
* Build context to run handler in. We invoke the handler
|
||||
* directly, only returning via the trampoline. Note the
|
||||
|
@ -383,10 +383,6 @@ osendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
} else
|
||||
fp = (struct osigframe *)regs->tf_esp - 1;
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
sf.sf_signum = sig;
|
||||
sf.sf_scp = (register_t)&fp->sf_siginfo.si_sc;
|
||||
@ -534,10 +530,6 @@ freebsd4_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
} else
|
||||
sfp = (struct sigframe4 *)regs->tf_esp - 1;
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
sf.sf_signum = sig;
|
||||
sf.sf_ucontext = (register_t)&sfp->sf_uc;
|
||||
|
@ -419,12 +419,6 @@ freebsd32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
sfp = (struct sigframe32 *)((vm_offset_t)(td->td_frame->sp -
|
||||
sizeof(struct sigframe32)) & ~(sizeof(__int64_t) - 1));
|
||||
|
||||
/* Translate the signal if appropriate */
|
||||
if (p->p_sysent->sv_sigtbl) {
|
||||
if (sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
}
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
td->td_frame->a0 = sig;
|
||||
td->td_frame->a2 = (register_t)(intptr_t)&sfp->sf_uc;
|
||||
|
@ -133,12 +133,6 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
sfp = (struct sigframe *)((vm_offset_t)(regs->sp -
|
||||
sizeof(struct sigframe)) & ~(sizeof(__int64_t) - 1));
|
||||
|
||||
/* Translate the signal if appropriate */
|
||||
if (p->p_sysent->sv_sigtbl) {
|
||||
if (sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
}
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
regs->a0 = sig;
|
||||
regs->a2 = (register_t)(intptr_t)&sfp->sf_uc;
|
||||
|
@ -225,12 +225,6 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
usfp = (void *)(tf->fixreg[1] - rndfsize);
|
||||
}
|
||||
|
||||
/*
|
||||
* Translate the signal if appropriate (Linux emu ?)
|
||||
*/
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/*
|
||||
* Save the floating-point state, if necessary, then copy it.
|
||||
*/
|
||||
|
@ -654,10 +654,6 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
|
||||
|
||||
fp = (struct frame *)sfp - 1;
|
||||
|
||||
/* Translate the signal if appropriate. */
|
||||
if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize)
|
||||
sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)];
|
||||
|
||||
/* Build the argument list for the signal handler. */
|
||||
tf->tf_out[0] = sig;
|
||||
tf->tf_out[2] = (register_t)&sfp->sf_uc;
|
||||
|
Loading…
Reference in New Issue
Block a user