Skip to content
Snippets Groups Projects
Verified Commit b48da562 authored by Jacob Lorentzon's avatar Jacob Lorentzon
Browse files

Add rtsig to i686 trampoline too.

parent 13e7b776
No related branches found
No related tags found
1 merge request!493Implement realtime signals and remaining signal.h APIs
......@@ -22,6 +22,7 @@ pub struct SigArea {
pub tmp_eax: usize,
pub tmp_ecx: usize,
pub tmp_edx: usize,
pub tmp_ptr: usize,
pub pctl: usize, // TODO: reference pctl directly
pub disable_signals_depth: u64,
pub last_sig_was_restart: bool,
......@@ -166,12 +167,21 @@ asmfunction!(__relibc_internal_sigentry: ["
jz 7f // spurious signal
bsf eax, eax
// If thread was specifically targeted, send the signal to it first.
bt edx, eax
jc 8f
lock btr [ecx + {pctl_word} + 4], eax
jnc 1b
add eax, 32
mov edx, ebx
lea ecx, [eax+32]
mov eax, {SYS_SIGDEQUEUE}
mov edx, gs:[0]
add edx, {tcb_sa_off} + {sa_tmp_ptr}
int 0x80
mov ebx, edx
test eax, eax
jnz 1b
mov eax, ecx
jmp 2f
8:
add eax, 32
......@@ -200,7 +210,7 @@ asmfunction!(__relibc_internal_sigentry: ["
push dword ptr gs:[{tcb_sc_off} + {sc_saved_eflags}]
push dword ptr gs:[{tcb_sa_off} + {sa_tmp_edx}]
push ecx
push dword ptr gs:[{tcb_sa_off} + {sa_tmp_ecx}]
push dword ptr gs:[{tcb_sa_off} + {sa_tmp_eax}]
push ebx
push edi
......@@ -211,7 +221,8 @@ asmfunction!(__relibc_internal_sigentry: ["
fxsave [esp]
push eax
sub esp, 3 * 4
push dword ptr gs:[{tcb_sa_off} + {sa_tmp_ptr}]
sub esp, 2 * 4
mov ecx, esp
call {inner}
......@@ -262,6 +273,7 @@ __relibc_internal_sigentry_crit_third:
sa_tmp_eax = const offset_of!(SigArea, tmp_eax),
sa_tmp_ecx = const offset_of!(SigArea, tmp_ecx),
sa_tmp_edx = const offset_of!(SigArea, tmp_edx),
sa_tmp_ptr = const offset_of!(SigArea, tmp_ptr),
sa_altstack_top = const offset_of!(SigArea, altstack_top),
sa_altstack_bottom = const offset_of!(SigArea, altstack_bottom),
sa_pctl = const offset_of!(SigArea, pctl),
......@@ -275,6 +287,7 @@ __relibc_internal_sigentry_crit_third:
pctl_word = const offset_of!(SigProcControl, pending),
pctl = sym PROC_CONTROL_STRUCT,
STACK_ALIGN = const 16,
SYS_SIGDEQUEUE = const syscall::SYS_SIGDEQUEUE,
]);
asmfunction!(__relibc_internal_rlct_clone_ret -> usize: ["
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment