This commit is contained in:
red-prig 2022-11-27 01:36:46 +03:00
parent a56afd0914
commit 302a66f888
2 changed files with 25 additions and 6 deletions

View File

@ -125,6 +125,9 @@ begin
end;
end;
$B6CBC49A77A7CF8F, //__cxa_atexit
$1F67BCB7949C4067, //__cxa_finalize
$CEBD3DE04437F56C, //__cxa_pure_virtual
$DC63E98D0740313C, //__cxa_guard_acquire
$F6B01E00D4F6B721: //__cxa_guard_release
begin
@ -140,11 +143,17 @@ begin
//TODO redirect
if (Result=nil) then
begin
lib:=ps4_app.GetLib('libc');
if (lib<>nil) then
if (Copy(ps4libdoc.GetFunctName(Nid),1,2)<>'_Z') then
begin
Writeln(StdErr,'Redirected:',HexStr(Nid,16),':',ps4libdoc.GetFunctName(Nid));
Result:=lib^.get_proc(Nid);
lib:=ps4_app.GetLib('libc');
if (lib<>nil) then
begin
Writeln(StdErr,'Redirected:',HexStr(Nid,16),':',ps4libdoc.GetFunctName(Nid));
Result:=lib^.get_proc(Nid);
end;
end else
begin
Writeln(StdErr,'Operator:',HexStr(Nid,16),':',ps4libdoc.GetFunctName(Nid));
end;
end;

View File

@ -1056,6 +1056,7 @@ end;
function ps4_pthread_key_create(pKey:Ppthread_key_t;dest:t_cb_proc):Integer; SysV_ABI_CDecl;
var
node:p_pthread_key_node;
Key:pthread_key_t;
begin
if (pKey=nil) then Exit(EINVAL);
Writeln('pthread_key_create',' ',ps4_pthread_self^.sig._lock);
@ -1072,7 +1073,10 @@ begin
System.InterlockedIncrement(Pointer(node^.version_));
XCHG(Pointer(node^.dest_),Pointer(dest));
pKey^:=(node-p_pthread_key_node(@_pthread_key_nodes));
Key:=(node-p_pthread_key_node(@_pthread_key_nodes));
Key:=Key+1;
pKey^:=Key;
Result:=0;
end;
@ -1080,7 +1084,9 @@ function ps4_pthread_key_delete(Key:pthread_key_t):Integer; SysV_ABI_CDecl;
var
node:p_pthread_key_node;
begin
if (DWORD(Key)>=SCE_PTHREAD_KEYS_MAX) then Exit(EINVAL);
Key:=Key-1;
if (DWORD(Key)>SCE_PTHREAD_KEYS_MAX) then Exit(EINVAL);
Writeln('pthread_key_delete');
node:=@_pthread_key_nodes[Key];
@ -1098,6 +1104,8 @@ var
version:ptruint;
local:p_pthread_key_data;
begin
Key:=Key-1;
if (DWORD(Key)>=SCE_PTHREAD_KEYS_MAX) then Exit(nil);
node:=@_pthread_key_nodes[Key];
@ -1118,6 +1126,8 @@ var
version:ptruint;
local:p_pthread_key_data;
begin
Key:=Key-1;
if (DWORD(Key)>=SCE_PTHREAD_KEYS_MAX) then Exit(EINVAL);
node:=@_pthread_key_nodes[Key];