Add rtsig to i686 trampoline too.

This commit is contained in:
4lDO2
2024-07-30 10:41:55 +02:00
parent 13e7b77643
commit b48da5622d
+18 -5
View File
@@ -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: ["