bool FUN_00477904(char *param_1,uint param_2,code *param_3,undefined4 param_4)
{
char cVar1;
code *pcVar2;
int iVar3;
undefined4 uVar4;
bool bVar5;
char *pcVar6;
char *local_178;
char *local_174;
uint local_170;
char *local_16c;
undefined1 *local_168;
undefined4 local_164;
int local_160;
undefined1 *local_15c;
undefined4 local_158;
int local_154;
undefined4 local_150;
undefined4 local_14c;
undefined4 local_148;
uint local_144;
undefined1 auStack_140 [256];
int local_40;
undefined1 local_3c;
code *local_38;
undefined4 local_34;
undefined4 local_30;
undefined4 local_2c;
int local_28;
if ((*param_1 != '_') || (bVar5 = false, param_1[1] != 'Z')) {
iVar3 = FUN_00483ec0(param_1,"_GLOBAL_",8);
if (((iVar3 == 0) &&
((((cVar1 = param_1[8], cVar1 == '.' || (cVar1 == '_')) || (cVar1 == '$')) && //possible issue identified - semgrep
((cVar1 = param_1[9], cVar1 == 'D' || (cVar1 == 'I')))))) && (param_1[10] == '_')) { //possible issue identified - semgrep
if (cVar1 == 'I') {
pcVar6 = "global constructors keyed to ";
}
else {
pcVar6 = "global destructors keyed to ";
}
uVar4 = FUN_00483e50(pcVar6);
(*param_3)(pcVar6,uVar4,param_4);
uVar4 = FUN_00483e50(param_1 + 0xb);
(*param_3)(param_1 + 0xb,uVar4,param_4);
return true;
}
bVar5 = true;
if ((param_2 & 0x10) == 0) {
return false;
}
}
local_154 = FUN_00483e50(param_1);
local_160 = local_154 * 2;
iVar3 = -(local_154 * 0x18 + 8);
local_168 = &stack0xfffffe80 + iVar3;
local_15c = &stack0xfffffe80 + (iVar3 - (local_154 * 4 + 0xeU & 0xfffffff8));
local_174 = param_1 + local_154;
local_164 = 0;
local_158 = 0;
local_150 = 0;
local_14c = 0;
local_148 = 0;
local_178 = param_1;
local_170 = param_2;
local_16c = param_1;
if (bVar5) {
iVar3 = FUN_004754f4(&local_178);
}
else {
iVar3 = 0;
if ((*param_1 == '_') && (local_16c = param_1 + 1, param_1[1] == 'Z')) {
local_16c = param_1 + 2;
iVar3 = FUN_004763b0(&local_178,1);
}
}
if (((param_2 & 1) == 0) || (bVar5 = false, *local_16c == '\0')) {
if (iVar3 == 0) {
bVar5 = false;
}
else {
local_40 = 0;
local_3c = 0;
local_30 = 0;
local_2c = 0;
local_28 = 0;
local_144 = param_2;
local_38 = param_3;
local_34 = param_4;
FUN_004739e0(&local_144);
uVar4 = local_34;
pcVar2 = local_38;
iVar3 = local_40;
auStack_140[local_40] = 0;
(*pcVar2)(auStack_140,iVar3,uVar4);
bVar5 = local_28 == 0;
}
}
return bVar5;
}