mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
24a9c2165a
commit
99897bbb44
|
@ -18,7 +18,8 @@ uses
|
|||
subr_uio,
|
||||
vm,
|
||||
dmem_map,
|
||||
kern_dmem;
|
||||
kern_dmem,
|
||||
trap;
|
||||
|
||||
type
|
||||
PAvailableDirectMemorySize=^TAvailableDirectMemorySize;
|
||||
|
@ -48,7 +49,10 @@ begin
|
|||
end;
|
||||
end;
|
||||
else
|
||||
Assert(False);
|
||||
begin
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
@ -58,6 +62,8 @@ begin
|
|||
Result:=0;
|
||||
|
||||
Writeln('dmem_mmap("',dev^.si_name,'",0x',HexStr(offset,8),',0x',HexStr(paddr),',',nprot,')');
|
||||
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
|
||||
|
|
|
@ -22,6 +22,23 @@ uses
|
|||
|
||||
var
|
||||
gc_mmap_ptr:Pointer=nil;
|
||||
gc_AreSubmitsAllowed:Integer=0; //0=true,1=false (0xfe0100000)
|
||||
|
||||
type
|
||||
p_SetGsRingSizes=^t_SetGsRingSizes;
|
||||
t_SetGsRingSizes=packed record
|
||||
psize_1:DWORD;
|
||||
psize_2:DWORD;
|
||||
p__zero:DWORD;
|
||||
end;
|
||||
|
||||
p_SetMipStatsReport=^t_SetMipStatsReport;
|
||||
t_SetMipStatsReport=packed record
|
||||
p_type:DWORD;
|
||||
param1:DWORD;
|
||||
param2:DWORD;
|
||||
param3:DWORD;
|
||||
end;
|
||||
|
||||
Function gc_ioctl(dev:p_cdev;cmd:QWORD;data:Pointer;fflag:Integer):Integer;
|
||||
begin
|
||||
|
@ -30,10 +47,41 @@ begin
|
|||
Writeln('gc_ioctl(0x',HexStr(cmd,8),')');
|
||||
|
||||
case cmd of
|
||||
0:;
|
||||
$C004811F: //sceGnmGetNumTcaUnits
|
||||
begin
|
||||
Exit(19);
|
||||
end;
|
||||
|
||||
$C00C8110: //sceGnmSetGsRingSizes
|
||||
begin
|
||||
Writeln('SetGsRingSizes(0x',HexStr(p_SetGsRingSizes(data)^.psize_1,8),',0x'
|
||||
,HexStr(p_SetGsRingSizes(data)^.psize_2,8),')');
|
||||
end;
|
||||
|
||||
$C0848119: //*MipStatsReport
|
||||
begin
|
||||
case PInteger(data)^ of
|
||||
$10001:
|
||||
begin
|
||||
Writeln('MipStatsReport(0x',HexStr(p_SetMipStatsReport(data)^.param1,8),',0x'
|
||||
,HexStr(p_SetMipStatsReport(data)^.param2,8),',0x'
|
||||
,HexStr(p_SetMipStatsReport(data)^.param3,8),')');
|
||||
end;
|
||||
|
||||
$18001:; //diag?
|
||||
|
||||
else
|
||||
Exit(EINVAL);
|
||||
end;
|
||||
end;
|
||||
$C008811B: //sceGnmAreSubmitsAllowed
|
||||
begin
|
||||
PPointer(data)^:=@gc_AreSubmitsAllowed;
|
||||
end;
|
||||
|
||||
else
|
||||
begin
|
||||
print_backtrace(stderr,Pointer(curkthread^.td_frame.tf_rip),Pointer(curkthread^.td_frame.tf_rbp),0);
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
Result:=EINVAL;
|
||||
end;
|
||||
|
|
|
@ -256,7 +256,7 @@ begin
|
|||
begin
|
||||
Result:=0;
|
||||
dst:=-1;
|
||||
print_backtrace(stderr,Pointer(curkthread^.td_frame.tf_rip),Pointer(curkthread^.td_frame.tf_rbp),0);
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
unit kern_mdbg;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
{$CALLING SysV_ABI_CDecl}
|
||||
|
||||
interface
|
||||
|
||||
function sys_mdbg_service(op:Integer;arg1,arg2:Pointer):Integer;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
errno,
|
||||
systm,
|
||||
trap;
|
||||
|
||||
type
|
||||
t_SetProcessProperty=packed record //0x48
|
||||
f_0:Pointer;
|
||||
f_1:Pointer;
|
||||
f_2:Pointer;
|
||||
f_3:Pointer;
|
||||
f_4:Pointer;
|
||||
name:array[0..31] of AnsiChar;
|
||||
end;
|
||||
|
||||
function SetProcessProperty(arg1:Pointer):Integer;
|
||||
var
|
||||
data:t_SetProcessProperty;
|
||||
begin
|
||||
Result:=copyin(arg1,@data,SizeOf(t_SetProcessProperty));
|
||||
if (Result<>0) then Exit;
|
||||
|
||||
case String(data.name) of
|
||||
'Sce.PSM:AppName':; //1
|
||||
'Sce.PSM:SdbInfo':; //2
|
||||
'Sce.PSM:LogArea':; //3
|
||||
'Sce.Debug:UserObjArray':; //4
|
||||
'Sce.Debug:Gnm':; //5
|
||||
else
|
||||
Exit(EINVAL);
|
||||
end;
|
||||
|
||||
Writeln('SetProcessProperty("',data.name,'",0x',
|
||||
HexStr(data.f_1),',0x',
|
||||
HexStr(data.f_2),',0x',
|
||||
HexStr(data.f_3),',0x',
|
||||
HexStr(data.f_4),')');
|
||||
|
||||
end;
|
||||
|
||||
function sys_mdbg_service(op:Integer;arg1,arg2:Pointer):Integer;
|
||||
begin
|
||||
case op of
|
||||
|
||||
1: //SetProcessProperty
|
||||
begin
|
||||
Result:=SetProcessProperty(arg1);
|
||||
end;
|
||||
|
||||
else
|
||||
begin
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
Result:=EINVAL;
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
||||
|
|
@ -77,7 +77,7 @@ begin
|
|||
else
|
||||
begin
|
||||
Writeln(' enc:0x',HexStr(qword(data.enc),16));
|
||||
print_backtrace(stderr,Pointer(curkthread^.td_frame.tf_rip),Pointer(curkthread^.td_frame.tf_rbp),0);
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
@ -108,7 +108,7 @@ begin
|
|||
else
|
||||
begin
|
||||
Writeln(' enc:0x',HexStr(qword(data.enc),16));
|
||||
print_backtrace(stderr,Pointer(curkthread^.td_frame.tf_rip),Pointer(curkthread^.td_frame.tf_rbp),0);
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
@ -121,7 +121,7 @@ begin
|
|||
else
|
||||
begin
|
||||
Writeln('Unhandled regmgr op:0x',HexStr(op,4));
|
||||
print_backtrace(stderr,Pointer(curkthread^.td_frame.tf_rip),Pointer(curkthread^.td_frame.tf_rbp),0);
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
|
|
@ -110,6 +110,7 @@ procedure sig_sti;
|
|||
procedure sig_cli;
|
||||
|
||||
procedure print_backtrace(var f:text;rip,rbp:Pointer;skipframes:sizeint);
|
||||
procedure print_backtrace_c(var f:text);
|
||||
|
||||
procedure fast_syscall;
|
||||
procedure sigcode;
|
||||
|
@ -476,6 +477,16 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure print_backtrace_c(var f:text);
|
||||
var
|
||||
td:p_kthread;
|
||||
begin
|
||||
td:=curkthread;
|
||||
if (td=nil) then Exit;
|
||||
//
|
||||
print_backtrace(stderr,Pointer(td^.td_frame.tf_rip),Pointer(td^.td_frame.tf_rbp),0);
|
||||
end;
|
||||
|
||||
type
|
||||
tsyscall=function(rdi,rsi,rdx,rcx,r8,r9:QWORD):Integer;
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ begin
|
|||
end;
|
||||
else
|
||||
begin
|
||||
print_backtrace(stderr,Pointer(curkthread^.td_frame.tf_rip),Pointer(curkthread^.td_frame.tf_rbp),0);
|
||||
print_backtrace_c(stderr);
|
||||
Assert(False);
|
||||
end;
|
||||
end;
|
||||
|
|
|
@ -220,6 +220,7 @@ function __sys_dynlib_unload_prx(handle:Integer;args:QWORD;argp:Pointer):Intege
|
|||
function dynlib_do_copy_relocations():Integer;
|
||||
function dynlib_get_proc_param(pout:PPointer;psize:PQWORD):Integer;
|
||||
function dynlib_process_needed_and_relocate():Integer;
|
||||
function mdbg_service(op:Integer;arg1,arg2:Pointer):Integer;
|
||||
function __sys_randomized_path(src,dst:pchar;plen:PQWORD):Integer;
|
||||
function __sys_dl_get_metadata(pid,handle:Integer;pout:Pointer;size:Integer;pactual_size:PInteger):Integer;
|
||||
function __sys_workaround8849(key:DWORD):Integer;
|
||||
|
@ -1744,6 +1745,13 @@ asm
|
|||
jmp cerror
|
||||
end;
|
||||
|
||||
function mdbg_service(op:Integer;arg1,arg2:Pointer):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $601,%rax
|
||||
call fast_syscall
|
||||
jmp cerror
|
||||
end;
|
||||
|
||||
function __sys_randomized_path(src,dst:pchar;plen:PQWORD):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $602,%rax
|
||||
|
|
|
@ -17,6 +17,7 @@ uses
|
|||
kern_dmem,
|
||||
kern_exec,
|
||||
kern_exit,
|
||||
kern_mdbg,
|
||||
kern_osem,
|
||||
kern_prot,
|
||||
kern_time,
|
||||
|
@ -3065,7 +3066,7 @@ const
|
|||
),
|
||||
(//[601]
|
||||
sy_narg:3;
|
||||
sy_call:nil;
|
||||
sy_call:@sys_mdbg_service;
|
||||
sy_name:'sys_mdbg_service'
|
||||
),
|
||||
(//[602]
|
||||
|
|
|
@ -682,6 +682,10 @@
|
|||
<Filename Value="..\vm\device_pager.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="..\kern\kern_mdbg.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
|
|
@ -100,6 +100,7 @@ uses
|
|||
kern_bnet,
|
||||
uipc_syscalls,
|
||||
kern_ipmimgr,
|
||||
kern_mdbg,
|
||||
ps4_libSceSystemService,
|
||||
ps4_libSceIpmi,
|
||||
ps4_libSceDialogs;
|
||||
|
|
Loading…
Reference in New Issue