/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void __pthread_manager(int param_1)
{
int iVar1;
int *piVar2;
__pid_t _Var3;
uint uVar4;
__uid_t _Var5;
uint uVar6;
void *pvVar7;
undefined4 *puVar8;
undefined4 *puVar9;
size_t __len;
void *__addr;
uint uVar10;
int iVar11;
uint uVar12;
code *pcVar13;
pollfd local_160;
sigset_t sStack_158;
undefined4 *local_d8;
undefined4 local_d4;
undefined4 *local_d0;
int local_cc;
int local_c8;
undefined1 auStack_c4 [132];
int local_40;
__pid_t local_3c;
int local_38;
int local_34;
pollfd *local_30;
undefined4 **local_2c;
DAT_0003126c = &DAT_00031270;
PTR_DAT_00031264 = &DAT_00031268;
sigfillset(&sStack_158);
sigdelset(&sStack_158,__pthread_sig_cancel);
sigdelset(&sStack_158,5);
if ((__pthread_threads_debug != 0) && (0 < __pthread_sig_debug)) {
sigdelset(&sStack_158,__pthread_sig_debug);
}
sigprocmask(3,&sStack_158,(sigset_t *)0x0);
__pthread_manager_adjust_prio(*(undefined4 *)(__pthread_main_thread + 0x18));
do {
iVar1 = __libc_read(param_1,&local_d8,0x94) //possible issue identified - semgrep
if (iVar1 != -1) break;
piVar2 = __errno_location();
} while (*piVar2 == 4);
local_160.events = 1;
local_30 = &local_160;
local_2c = &local_d8;
local_160.fd = param_1;
switchD_00015980_default:
do {
iVar1 = poll(local_30,1,2000);
_Var3 = getppid();
if (_Var3 == 1) {
for (puVar8 = *(undefined4 **)__pthread_main_thread;
puVar8 != (undefined4 *)__pthread_main_thread; puVar8 = (undefined4 *)*puVar8) {
kill(puVar8[5],9);
}
goto LAB_00015f54;
}
if (DAT_000317b0 != 0) {
DAT_000317b0 = 0;
(*(code *)0x5544)();
}
} while ((iVar1 != 1) || ((local_160.revents & 1U) == 0));
__libc_read(param_1,local_2c,0x94) //possible issue identified - semgrep
puVar9 = local_d0;
puVar8 = local_d8;
switch(local_d4) {
case 0:
uVar4 = getpagesize();
local_34 = local_cc;
local_38 = local_c8;
local_3c = puVar8[5];
local_40 = puVar8[0x67];
if (((puVar9 == (undefined4 *)0x0) || (puVar9[1] == 0)) || (_Var5 = geteuid(), _Var5 == 0)) {
uVar10 = 0x200000 - uVar4;
uVar12 = 2;
do {
if (*(int *)(__pthread_handles + uVar12 * 0x10 + 8) == 0) {
if ((puVar9 != (undefined4 *)0x0) && (puVar9[6] != 0)) {
__pthread_nonstandard_stacks = 1;
iVar1 = puVar9[7] - puVar9[8];
piVar2 = (int *)((puVar9[7] & 0xfffffffc) - 0x1e0);
goto LAB_00015b14;
}
uVar6 = uVar10;
if (puVar9 != (undefined4 *)0x0) {
if (uVar4 == 0) {
trap(7);
}
uVar6 = ((puVar9[8] + -1 + uVar4) / uVar4) * uVar4;
if (uVar10 < uVar6) {
uVar6 = uVar10;
}
}
piVar2 = (int *)(__pthread_initial_thread_bos + (1 - uVar12) * 0x200000 + -0x1e0);
pvVar7 = mmap(piVar2 + (0x78 - ___pagesize),___pagesize << 2,7,0x1812,-1,0);
if (pvVar7 == (void *)0xffffffff) goto LAB_00015bcc;
iVar1 = (int)piVar2 + (0x1e0 - uVar6);
if (uVar6 == uVar10) {
LAB_00015b14:
__len = 0;
__addr = (void *)0x0;
}
else {
__len = puVar9[5] //possible issue identified - semgrep
__addr = (void *)(iVar1 - __len);
pvVar7 = mmap(__addr,__len,0,0x10,-1,0);
if (pvVar7 == (void *)0xffffffff) goto LAB_00015b14;
}
memset(piVar2,0,0x1e0) //possible issue identified - semgrep
DAT_000317b8 = DAT_000317b8 + 0x400;
iVar11 = uVar12 + DAT_000317b8;
__pthread_handles_num = __pthread_handles_num + 1;
piVar2[0x11] = (int)(piVar2 + 0x12);
piVar2[0x13] = (int)(piVar2 + 0x14);
piVar2[99] = (int)__addr;
piVar2[100] = __len;
piVar2[4] = iVar11;
piVar2[7] = (int)(__pthread_handles + uVar12 * 0x10);
*(undefined1 *)(piVar2 + 0x10) = 0;
*(undefined1 *)((int)piVar2 + 0x41) = 0;
piVar2[0x65] = (int)piVar2;
piVar2[0x66] = uVar12;
*(int *)(__pthread_handles + uVar12 * 0x10 + 0xc) = iVar1;
*(undefined4 *)(__pthread_handles + uVar12 * 0x10 + 4) = 0;
*(undefined4 *)(__pthread_handles + uVar12 * 0x10) = 0;
*(int **)(__pthread_handles + uVar12 * 0x10 + 8) = piVar2;
piVar2[0x39] = -1;
if (puVar9 != (undefined4 *)0x0) {
*(char *)((int)piVar2 + 0x2d) = (char)*puVar9;
piVar2[0x62] = puVar9[6];
if (puVar9[3] == 0) {
iVar1 = sched_getscheduler(local_3c);
piVar2[0x39] = iVar1;
sched_getparam(local_3c,(sched_param *)(piVar2 + 0x3a));
LAB_00015c50:
iVar1 = piVar2[0x3a];
}
else {
if (puVar9[3] == 1) {
piVar2[0x39] = puVar9[1];
memcpy(piVar2 + 0x3a,puVar9 + 2,4) //possible issue identified - semgrep
goto LAB_00015c50;
}
iVar1 = piVar2[0x3a];
}
piVar2[6] = iVar1;
}
piVar2[0x17] = local_34;
piVar2[0x18] = local_38;
memcpy(piVar2 + 0x19,auStack_c4,0x80) //possible issue identified - semgrep
__pthread_manager_adjust_prio(piVar2[6]);
piVar2[1] = (int)__pthread_main_thread;
*piVar2 = *(int *)__pthread_main_thread;
*(int **)(*(int *)__pthread_main_thread + 4) = piVar2;
*(int **)__pthread_main_thread = piVar2;
if ((local_40 == 0) || (((__pthread_threads_events | puVar8[0x68]) & 0x80) == 0)) {
LAB_00015d68:
iVar1 = clone((__fn *)0x5288,piVar2,__pthread_sig_cancel | 0xf00,piVar2);
if (iVar1 != -1) {
LAB_00015e3c:
piVar2[5] = iVar1;
iVar1 = 0;
puVar8[0xc] = iVar11;
goto LAB_00015e48;
}
}
else {
__pthread_lock(piVar2[7],0);
iVar1 = clone((__fn *)0x53bc,piVar2,__pthread_sig_cancel | 0xf00,piVar2);
if (iVar1 != -1) {
piVar2[0x6a] = 8;
piVar2[0x6b] = (int)piVar2;
__pthread_last_event = piVar2;
piVar2[5] = iVar1;
__linuxthreads_create_event();
__pthread_unlock(piVar2[7]);
if (iVar1 == 0) goto LAB_00015d68;
goto LAB_00015e3c;
}
}
iVar1 = *piVar2;
*(int *)(iVar1 + 4) = piVar2[1];
*(int *)piVar2[1] = iVar1;
if ((puVar9 == (undefined4 *)0x0) || (puVar9[6] == 0)) {
if (piVar2[100] != 0) {
munmap((void *)piVar2[99],piVar2[100]);
}
munmap(piVar2 + (0x78 - ___pagesize),___pagesize << 2);
}
__pthread_handles_num = __pthread_handles_num + -1;
*(undefined4 *)(__pthread_handles + uVar12 * 0x10 + 0xc) = 0;
*(undefined4 *)(__pthread_handles + uVar12 * 0x10 + 8) = 0;
piVar2 = __errno_location();
iVar1 = *piVar2;
goto LAB_00015e48;
}
LAB_00015bcc:
uVar12 = uVar12 + 1;
} while (uVar12 < 0x400);
iVar1 = 0xb;
LAB_00015e48:
puVar8[0xd] = iVar1;
puVar8 = local_d8;
}
else {
puVar8[0xd] = 1;
puVar8 = local_d8;
}
break;
case 1:
iVar1 = ((uint)local_d0 & 0x3ff) * 0x10;
puVar8 = (undefined4 *)(__pthread_handles + iVar1);
__pthread_lock(puVar8,0);
iVar1 = *(int *)(__pthread_handles + iVar1 + 8);
if ((iVar1 != 0) && (*(undefined4 **)(iVar1 + 0x10) == puVar9)) {
if (*(char *)(iVar1 + 0x2e) != '\0') {
__pthread_unlock(puVar8);
(*(code *)0x5420)(iVar1);
goto switchD_00015980_default;
}
*(undefined1 *)(iVar1 + 0x2d) = 1;
}
pcVar13 = __pthread_unlock;
goto LAB_00015fa8;
case 2:
goto switchD_00015980_caseD_2;
case 3:
DAT_000317b4 = 1;
(*(code *)0x5544)();
puVar8 = *(undefined4 **)__pthread_main_thread;
if (*(undefined4 **)__pthread_main_thread != (undefined4 *)__pthread_main_thread)
goto switchD_00015980_default;
break;
case 4:
pcVar13 = sem_post;
puVar8 = local_d0;
LAB_00015fa8:
(*pcVar13)(puVar8);
goto switchD_00015980_default;
case 5:
if ((__pthread_threads_debug != 0) && (0 < __pthread_sig_debug)) {
raise(__pthread_sig_debug);
}
default:
goto switchD_00015980_default;
}
__pthread_restart_new(puVar8);
goto switchD_00015980_default;
switchD_00015980_caseD_2:
__pthread_exit_requested = 1;
__pthread_exit_code = local_d0;
for (puVar8 = (undefined4 *)*local_d8; puVar8 != local_d8; puVar8 = (undefined4 *)*puVar8) {
kill(puVar8[5],__pthread_sig_cancel);
}
for (puVar9 = (undefined4 *)*puVar8; puVar9 != puVar8; puVar9 = (undefined4 *)*puVar9) {
waitpid(puVar9[5],(int *)0x0,-0x80000000);
}
__pthread_restart_new(puVar9);
LAB_00015f54:
/* WARNING: Subroutine does not return */
_exit(0);
}