diff --git a/fpPS4.lpi b/fpPS4.lpi
index e073abb1..daf2d5d1 100644
--- a/fpPS4.lpi
+++ b/fpPS4.lpi
@@ -1634,7 +1634,7 @@
-
+
diff --git a/sys/dev/dev_dmem.pas b/sys/dev/dev_dmem.pas
index f2f92767..95a65c0d 100644
--- a/sys/dev/dev_dmem.pas
+++ b/sys/dev/dev_dmem.pas
@@ -144,10 +144,10 @@ begin
begin
Result:=dmem_map_alloc(dmap^.dmem,start,__end,len,align,mtype,start);
{
- Writeln('dmem_map_alloc(0x',HexStr(start,10),
- ',0x',HexStr(__end,10),
- ',0x',HexStr(len,10),
- ',0x',HexStr(align,10),
+ Writeln('dmem_map_alloc(0x',HexStr(start,11),
+ ',0x',HexStr(__end,11),
+ ',0x',HexStr(len,11),
+ ',0x',HexStr(align,11),
',',mtype,'):',Result);
}
end;
diff --git a/sys/jit/kern_jit.pas b/sys/jit/kern_jit.pas
index 504b9f90..91fff0f1 100644
--- a/sys/jit/kern_jit.pas
+++ b/sys/jit/kern_jit.pas
@@ -1935,7 +1935,7 @@ begin
//
if print_asm then
begin
- Writeln('switchtable:0x',HexStr(QWORD(sw_table^.table),10),'..0x',HexStr(QWORD(sw_next),10));
+ Writeln('switchtable:0x',HexStr(QWORD(sw_table^.table),11),'..0x',HexStr(QWORD(sw_next),11));
end;
//
if ctx.is_text_addr(QWORD(sw_data)) and
@@ -1959,7 +1959,7 @@ begin
begin
if print_asm then
begin
- Writeln(' [0x',HexStr(QWORD(sw_data),10),']->0x',HexStr(ofs,10));
+ Writeln(' [0x',HexStr(QWORD(sw_data),11),']->0x',HexStr(ofs,11));
end;
//
ctx.add_forward_point(fpCall,Pointer(ofs));
diff --git a/sys/jit/kern_jit_ctx.pas b/sys/jit/kern_jit_ctx.pas
index d3a96653..5b797917 100644
--- a/sys/jit/kern_jit_ctx.pas
+++ b/sys/jit/kern_jit_ctx.pas
@@ -1916,8 +1916,9 @@ begin
end;
end;
-// $10000000000 = 1 shl 40
-// 64-40 = 24
+// VM_MAXUSER_ADDRESS
+// $80000000000 = 1 shl 43
+// 64-43 = 21
procedure op_uplift(var ctx:t_jit_context2;const dst:TRegValue;mem_size:TOperandSize;hint:t_lea_hint=[]);
var
@@ -1950,7 +1951,7 @@ begin
xchgq(rcx,rbits);
//addres bits
- movi(new_reg_size(rcx,os8),40);
+ movi(new_reg_size(rcx,os8),43);
shrx(rcx,dst,rcx);
@@ -1967,7 +1968,7 @@ begin
{
//zero bits
- movi(new_reg_size(rbits,os8),24); //mov $24,%bpl
+ movi(new_reg_size(rbits,os8),21); //mov $21,%bpl
//clear hi
shlx(dst,dst,rbits); //shlx %rbp,%r14,%r14
diff --git a/sys/kern/kern_bnet.pas b/sys/kern/kern_bnet.pas
index ce4492ee..bd4f1559 100644
--- a/sys/kern/kern_bnet.pas
+++ b/sys/kern/kern_bnet.pas
@@ -93,7 +93,7 @@ end;
function sys_netgetiflist(param1:Pointer;param2,param3:Integer):Integer;
begin
- Writeln('TODO:sys_netgetiflist(0x',HexStr(QWORD(param1),10),',',param2,',',param3,')');
+ Writeln('TODO:sys_netgetiflist(0x',HexStr(QWORD(param1),11),',',param2,',',param3,')');
Result:=0;
end;
diff --git a/sys/kern/kern_dmem.pas b/sys/kern/kern_dmem.pas
index d733162c..17d0b6ff 100644
--- a/sys/kern/kern_dmem.pas
+++ b/sys/kern/kern_dmem.pas
@@ -521,15 +521,15 @@ begin
td^.td_retval[0]:=addr;
- Writeln('0x',HexStr(QWORD(stack_addr),10),'->',
- 'sys_mmap_dmem(','0x',HexStr(QWORD(vaddr),10),
- ',0x',HexStr(length,10),
+ Writeln('0x',HexStr(QWORD(stack_addr),11),'->',
+ 'sys_mmap_dmem(','0x',HexStr(QWORD(vaddr),11),
+ ',0x',HexStr(length,11),
',0x',HexStr(mtype,1),
',0x',HexStr(prot,1),
',0x',HexStr(flags,6),
',0x',HexStr(phaddr,10),
'):',Integer(Result),
- ':0x',HexStr(addr,10),'..0x',HexStr(addr+length,10));
+ ':0x',HexStr(addr,11),'..0x',HexStr(addr+length,11));
end;
function IN_CUSALIST_1:Boolean;
diff --git a/sys/kern/kern_dynlib.pas b/sys/kern/kern_dynlib.pas
index 20147ab2..0e577446 100644
--- a/sys/kern/kern_dynlib.pas
+++ b/sys/kern/kern_dynlib.pas
@@ -445,7 +445,7 @@ begin
Writeln(' obj.id :',obj^.id);
Writeln(' tls_flags :0x',HexStr(tls_index shr 16,4));
Writeln(' tls_index :0x',HexStr(tls_index,4));
- Writeln(' tls_init_addr:0x',HexStr(QWORD(obj^.tls_init_addr),10));
+ Writeln(' tls_init_addr:0x',HexStr(QWORD(obj^.tls_init_addr),11));
Writeln(' tls_init_size:0x',HexStr(obj^.tls_init_size,8));
Writeln(' tls_size :0x',HexStr(obj^.tls_size ,8));
Writeln(' tls_offset :0x',HexStr(obj^.tls_offset ,8));
diff --git a/sys/kern/kern_exec.pas b/sys/kern/kern_exec.pas
index 1111ec6f..6bf1cf4b 100644
--- a/sys/kern/kern_exec.pas
+++ b/sys/kern/kern_exec.pas
@@ -397,7 +397,7 @@ begin
stack_addr:=QWORD(vmspace^.sv_usrstack) - ssiz;
- Writeln('vm_map_stack:0x',HexStr(stack_addr,10),'..0x',HexStr(stack_addr+ssiz,10));
+ Writeln('vm_map_stack:0x',HexStr(stack_addr,11),'..0x',HexStr(stack_addr+ssiz,11));
error:=vm_map_stack(map,
stack_addr,ssiz,
diff --git a/sys/kern/kern_namedobj.pas b/sys/kern/kern_namedobj.pas
index 6e878fa5..85cd3a1e 100644
--- a/sys/kern/kern_namedobj.pas
+++ b/sys/kern/kern_namedobj.pas
@@ -133,7 +133,7 @@ begin
td^.td_retval[0]:=key;
- Writeln('namedobj_create("',_name,'",0x',HexStr(QWORD(objp),10),',0x',HexStr(objt,4),'):',key);
+ Writeln('namedobj_create("',_name,'",0x',HexStr(QWORD(objp),11),',0x',HexStr(objt,4),'):',key);
Result:=0;
end;
diff --git a/sys/kern/kern_rangelock.pas b/sys/kern/kern_rangelock.pas
index 039d0ed8..9c2643f1 100644
--- a/sys/kern/kern_rangelock.pas
+++ b/sys/kern/kern_rangelock.pas
@@ -171,12 +171,12 @@ begin
{
Writeln('ranges_overlap:',
HexStr(entry),',',
- HexStr(entry^.rl_q_start,10),',',
- HexStr(entry^.rl_q_end,10),
+ HexStr(entry^.rl_q_start,11),',',
+ HexStr(entry^.rl_q_end,11),
' to ',
HexStr(entry1),',',
- HexStr(entry1^.rl_q_start,10),',',
- HexStr(entry1^.rl_q_end,10));
+ HexStr(entry1^.rl_q_start,11),',',
+ HexStr(entry1^.rl_q_end,11));
}
goto _out;
end;
diff --git a/sys/md/md_exception.pas b/sys/md/md_exception.pas
index ad743db9..f55d393a 100644
--- a/sys/md/md_exception.pas
+++ b/sys/md/md_exception.pas
@@ -298,7 +298,7 @@ begin
begin
if ((ppmap_get_prot(get_pageflt_addr(p),instr.mema_size) and VM_PROT_WRITE)<>0) then
begin
- //Writeln('TRACK_WRITE:',HexStr(get_pageflt_addr(p),10));
+ //Writeln('TRACK_WRITE:',HexStr(get_pageflt_addr(p),11));
//trigger and restore
vm_map_track_trigger(p_proc.p_vmspace,
diff --git a/sys/md/vm_pmap.pas b/sys/md/vm_pmap.pas
index f654b368..47b02e9c 100644
--- a/sys/md/vm_pmap.pas
+++ b/sys/md/vm_pmap.pas
@@ -346,11 +346,11 @@ begin
if (PAGE_PROT=nil) then
begin
- r:=md_mmap(PAGE_PROT,PAGE_MAP_COUNT,VM_RW);
+ r:=md_mmap(PAGE_PROT,PAGE_MAP_COUNT_SZ1,VM_RW);
if (r<>0) then
begin
- Writeln('failed md_mmap(',HexStr(PAGE_MAP_COUNT,11),'):0x',HexStr(r,8));
+ Writeln('failed md_mmap(',HexStr(PAGE_MAP_COUNT_SZ1,11),'):0x',HexStr(r,8));
Assert(false,'pmap_pinit');
end;
end;
@@ -733,7 +733,7 @@ function pmap_wlock(pmap :pmap_t;
start:vm_offset_t;
__end:vm_offset_t):Pointer; inline;
begin
- //Writeln('pmap_wlock:',HexStr(start,10),'..',HexStr(__end,10));
+ //Writeln('pmap_wlock:',HexStr(start,11),'..',HexStr(__end,11));
Result:=vm_map_lock_range(pmap^.vm_map,start,__end,RL_LOCK_WRITE);
end;
@@ -742,14 +742,14 @@ function pmap_rlock(pmap :pmap_t;
start:vm_offset_t;
__end:vm_offset_t):Pointer; inline;
begin
- //Writeln('pmap_rlock:',HexStr(start,10),'..',HexStr(__end,10));
+ //Writeln('pmap_rlock:',HexStr(start,11),'..',HexStr(__end,11));
Result:=vm_map_lock_range(pmap^.vm_map,start,__end,RL_LOCK_READ);
end;
procedure pmap_unlock(pmap:pmap_t;cookie:Pointer); inline;
begin
- //Writeln('pmap_unlock:',HexStr(p_rl_q_entry(cookie)^.rl_q_start,10),'..',HexStr(p_rl_q_entry(cookie)^.rl_q_end,10));
+ //Writeln('pmap_unlock:',HexStr(p_rl_q_entry(cookie)^.rl_q_start,11),'..',HexStr(p_rl_q_entry(cookie)^.rl_q_end,11));
vm_map_unlock_range(pmap^.vm_map,cookie);
end;
@@ -1673,7 +1673,7 @@ begin
lock:=pmap_wlock(pmap,start,__end);
- ppmap_unmark(start,__end);
+ ppmap_unmark(start,__end,VM_PROT_ALL);
vm_track_map_remove_memory(@pmap^.tr_map,start,__end);
diff --git a/sys/md/vm_pmap_prot.pas b/sys/md/vm_pmap_prot.pas
index 6feff601..1393cf3b 100644
--- a/sys/md/vm_pmap_prot.pas
+++ b/sys/md/vm_pmap_prot.pas
@@ -16,8 +16,14 @@ const
PMAPP_SIZE =MD_PAGE_SIZE; //1 shl PMAPP_SHIFT; //4*1024
PMAPP_MASK =MD_PAGE_MASK; //PMAPP_SIZE-1;
- PAGE_MAP_COUNT =(QWORD(VM_MAXUSER_ADDRESS) shr PMAPP_SHIFT);
- PAGE_MAP_MASK =PAGE_MAP_COUNT-1;
+ PAGE_MAP_COUNT_ALL=(QWORD(VM_MAXUSER_ADDRESS) shr PMAPP_SHIFT);
+ PAGE_MAP_MASK_ALL =PAGE_MAP_COUNT_ALL-1;
+
+ PAGE_MAP_COUNT_LV1=PAGE_MAP_COUNT_ALL shr 16;
+ PAGE_MAP_COUNT_LV2=1 shl 16; //64KB
+
+ PAGE_MAP_COUNT_SZ1=PAGE_MAP_COUNT_LV1*SizeOf(Pointer);
+ PAGE_MAP_COUNT_SZ2=PAGE_MAP_COUNT_LV2*SizeOf(Byte);
PAGE_PROT_READ =VM_PROT_READ;
PAGE_PROT_WRITE =VM_PROT_WRITE;
@@ -36,11 +42,10 @@ const
REMAP_PROT=2; //Ignore protect bit checking
var
- PAGE_PROT:PBYTE=nil;
+ PAGE_PROT:PPBYTE=nil;
procedure ppmap_mark_rwx (start,__end:vm_offset_t;prots:Byte);
-procedure ppmap_unmark (start,__end:vm_offset_t);
-procedure ppmap_unmark_rwx(start,__end:vm_offset_t);
+procedure ppmap_unmark (start,__end:vm_offset_t;prots:Byte);
procedure ppmap_track (start,__end:vm_offset_t;prots:Byte);
//procedure ppmap_untrack (start,__end:vm_offset_t;prots:Byte);
function ppmap_scan (start,__end:vm_offset_t):vm_offset_t;
@@ -64,14 +69,54 @@ end;
function MAX_IDX(x:DWORD):DWORD; inline;
begin
- if (x>PAGE_MAP_MASK) then
- Result:=PAGE_MAP_MASK
+ if (x>PAGE_MAP_MASK_ALL) then
+ Result:=PAGE_MAP_MASK_ALL
else
Result:=x;
end;
+function LV1_IDX(x:DWORD):DWORD; inline;
+begin
+ Result:=x shr 16;
+end;
+
+function LV2_IDX(x:DWORD):DWORD; inline;
+begin
+ Result:=x and (PAGE_MAP_COUNT_LV2-1);
+end;
+
+procedure prealloc(i:DWORD);
+var
+ ptr:Pointer;
+ r:Integer;
+begin
+ repeat
+
+ if (PAGE_PROT[LV1_IDX(i)]=nil) then
+ begin
+
+ ptr:=nil;
+ r:=md_mmap(ptr,PAGE_MAP_COUNT_SZ2,VM_RW);
+ Assert((r=0),'prealloc');
+
+ if (System.InterlockedCompareExchange(PAGE_PROT[LV1_IDX(i)],ptr,nil)=nil) then
+ begin
+ Exit;
+ end;
+
+ md_unmap(ptr,PAGE_MAP_COUNT_SZ2);
+
+ end else
+ begin
+ Exit;
+ end;
+
+ until false;
+end;
+
procedure ppmap_mark_rwx(start,__end:vm_offset_t;prots:Byte);
var
+ P:PByte;
clear:Byte;
begin
prots:=prots and PAGE_PROT_RWX;
@@ -82,15 +127,18 @@ begin
__end:=MAX_IDX(__end);
while (start<__end) do
begin
- atomic_clear_byte(@PAGE_PROT[start],clear);
- atomic_set_byte (@PAGE_PROT[start],prots);
- //PAGE_PROT[start]:=prots;
+ //
+ prealloc(start);
+ //
+ P:=@PAGE_PROT[LV1_IDX(start)][LV2_IDX(start)];
+ atomic_clear_byte(P,clear);
+ atomic_set_byte (P,prots);
Inc(start);
end;
WriteBarrier;
end;
-procedure ppmap_unmark(start,__end:vm_offset_t);
+procedure ppmap_unmark(start,__end:vm_offset_t;prots:Byte);
begin
start:=OFF_TO_IDX(start);
__end:=OFF_TO_IDX(__end);
@@ -98,21 +146,10 @@ begin
__end:=MAX_IDX(__end);
while (start<__end) do
begin
- //PAGE_PROT[start]:=0;
- Inc(start);
- end;
- WriteBarrier;
-end;
-
-procedure ppmap_unmark_rwx(start,__end:vm_offset_t);
-begin
- start:=OFF_TO_IDX(start);
- __end:=OFF_TO_IDX(__end);
- start:=MAX_IDX(start);
- __end:=MAX_IDX(__end);
- while (start<__end) do
- begin
- atomic_clear_byte(@PAGE_PROT[start],PAGE_PROT_RWX);
+ if (PAGE_PROT[LV1_IDX(start)]<>nil) then
+ begin
+ atomic_clear_byte(@PAGE_PROT[LV1_IDX(start)][LV2_IDX(start)],prots);
+ end;
Inc(start);
end;
WriteBarrier;
@@ -120,6 +157,7 @@ end;
procedure ppmap_track(start,__end:vm_offset_t;prots:Byte);
var
+ P:PByte;
s_prots:Byte;
c_prots:Byte;
begin
@@ -132,8 +170,12 @@ begin
__end:=MAX_IDX(__end);
while (start<__end) do
begin
- atomic_set_byte (@PAGE_PROT[start],s_prots);
- atomic_clear_byte(@PAGE_PROT[start],c_prots);
+ //
+ prealloc(start);
+ //
+ P:=@PAGE_PROT[LV1_IDX(start)][LV2_IDX(start)];
+ atomic_set_byte (P,s_prots);
+ atomic_clear_byte(P,c_prots);
Inc(start);
end;
WriteBarrier;
@@ -156,6 +198,21 @@ begin
end;
}
+function _get_prot(addr:DWORD):Byte; inline;
+begin
+ if (addr>PAGE_MAP_MASK_ALL) then
+ begin
+ Result:=0
+ end else
+ if (PAGE_PROT[LV1_IDX(addr)]=nil) then
+ begin
+ Result:=0
+ end else
+ begin
+ Result:=PAGE_PROT[LV1_IDX(addr)][LV2_IDX(addr)];
+ end;
+end;
+
function ppmap_scan(start,__end:vm_offset_t):vm_offset_t;
var
b,v:Byte;
@@ -167,12 +224,12 @@ begin
ReadBarrier;
- b:=PAGE_PROT[start];
+ b:=_get_prot(start);
Inc(start);
while (start<__end) do
begin
- v:=PAGE_PROT[start];
+ v:=_get_prot(start);
if (b<>v) then
begin
@@ -199,12 +256,12 @@ begin
ReadBarrier;
- b:=(PAGE_PROT[start] and PAGE_PROT_RWX);
+ b:=(_get_prot(start) and PAGE_PROT_RWX);
Inc(start);
while (start<__end) do
begin
- v:=(PAGE_PROT[start] and PAGE_PROT_RWX);
+ v:=(_get_prot(start) and PAGE_PROT_RWX);
if (b<>v) then
begin
@@ -222,14 +279,7 @@ end;
function ppmap_get_prot(addr:vm_offset_t):Byte;
begin
- addr:=OFF_TO_IDX(addr);
- if (addr>PAGE_MAP_MASK) then
- begin
- Result:=0
- end else
- begin
- Result:=PAGE_PROT[addr];
- end;
+ Result:=_get_prot(OFF_TO_IDX(addr));
end;
function ppmap_get_prot(addr,size:vm_offset_t):Byte;
diff --git a/sys/vm/vm_map.pas b/sys/vm/vm_map.pas
index 3d21f87f..2c3d02c1 100644
--- a/sys/vm/vm_map.pas
+++ b/sys/vm/vm_map.pas
@@ -2815,7 +2815,7 @@ begin
entry^.eflags:=entry^.eflags or MAP_ENTRY_IN_TRANSITION;
- //Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
+ //Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
//entry^.wiring_thread:=curthread;
@@ -2916,7 +2916,7 @@ _done:
entry^.eflags:=entry^.eflags and (not MAP_ENTRY_IN_TRANSITION);
//entry^.wiring_thread:=nil;
- //Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
+ //Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
if (entry^.eflags and MAP_ENTRY_NEEDS_WAKEUP)<>0 then
begin
@@ -3084,7 +3084,7 @@ begin
entry^.eflags:=entry^.eflags or MAP_ENTRY_IN_TRANSITION;
//entry^.wiring_thread:=curthread;
- //Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
+ //Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
if ((entry^.protection and VM_PROT_ALL)=0)
or ((entry^.protection and prot)<>prot) then
@@ -3331,7 +3331,7 @@ _next_entry_done:
entry^.eflags:=entry^.eflags and (not (MAP_ENTRY_IN_TRANSITION or MAP_ENTRY_WIRE_SKIPPED));
//entry^.wiring_thread:=nil;
- //Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
+ //Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
if ((entry^.eflags and MAP_ENTRY_NEEDS_WAKEUP)<>0) then
begin
diff --git a/sys/vm/vm_mmap.pas b/sys/vm/vm_mmap.pas
index 4d6ca8bd..bd27cd6f 100644
--- a/sys/vm/vm_mmap.pas
+++ b/sys/vm/vm_mmap.pas
@@ -961,18 +961,18 @@ _map:
if (stack_addr<>nil) then
begin
//Do you really need it?
- vm_map_set_name_str(map,addr,size + addr,'anon:'+HexStr(QWORD(stack_addr),10));
+ vm_map_set_name_str(map,addr,size + addr,'anon:'+HexStr(QWORD(stack_addr),11));
end;
- Writeln('0x',HexStr(QWORD(stack_addr),10),'->',
- 'sys_mmap(','0x',HexStr(QWORD(vaddr),10),
- ',0x',HexStr(vlen,10),
+ Writeln('0x',HexStr(QWORD(stack_addr),11),'->',
+ 'sys_mmap(','0x',HexStr(QWORD(vaddr),11),
+ ',0x',HexStr(vlen,11),
',0x',HexStr(prot,1),
',0x',HexStr(flags,6),
',',fd,
- ',0x',HexStr(pos,10),
+ ',0x',HexStr(pos,11),
'):',Integer(Result),
- ':0x',HexStr(td^.td_retval[0],10),'..0x',HexStr(td^.td_retval[0]+size,10));
+ ':0x',HexStr(td^.td_retval[0],11),'..0x',HexStr(td^.td_retval[0]+size,11));
_done:
@@ -1015,8 +1015,8 @@ begin
Result:=vm_map_remove(map, qword(addr), qword(addr) + size);
- Writeln('sys_munmap(','0x',HexStr(QWORD(addr),10),
- ',0x',HexStr(len,10),
+ Writeln('sys_munmap(','0x',HexStr(QWORD(addr),11),
+ ',0x',HexStr(len,11),
'):',Integer(Result)
);
@@ -1216,8 +1216,8 @@ begin
vm_map_set_name(map,start,__end,@_name);
- Writeln('sys_mname(','0x',HexStr(QWORD(addr),10),
- ',0x',HexStr(len,10),
+ Writeln('sys_mname(','0x',HexStr(QWORD(addr),11),
+ ',0x',HexStr(len,11),
',','"',name,'"',
')'
);
diff --git a/sys/vm/vmparam.pas b/sys/vm/vmparam.pas
index a3ad8f45..1cbabcca 100644
--- a/sys/vm/vmparam.pas
+++ b/sys/vm/vmparam.pas
@@ -43,9 +43,6 @@ const
_PROC_AREA_START_1 =QWORD($00010000000); //(original:0x400000-0x80000000)
_PROC_AREA___END =QWORD($00070000000);
- WIN_MAX_MOVED_STACK =QWORD($40000000000);
- WIN_SHARED_ADDR =QWORD($40000000000);
-
SCE_REPLAY_EXEC_START=QWORD($00fc0000000);
DL_AREA_START =QWORD($00080000000); //(original:0x80000000-0x200000000)
@@ -62,13 +59,18 @@ const
SCE_KERNEL_GNMDRIVER =QWORD($00FE0000000);
_VM_MINUSER_ADDRESS =QWORD($00010000000); //(original:$000000000000)
- VM_MAXUSER_ADDRESS =QWORD($10000000000); //(original:$800000000000) MAP_AREA_END=0xfc00000000
+ VM_MAXUSER_ADDRESS =QWORD($80000000000); //(original:$800000000000) MAP_AREA_END=0xfc00000000
- VM_MIN_GPU_ADDRESS =QWORD($10000000000);
- VM_MAX_GPU_ADDRESS =QWORD($20000000000); //Virtual mirror
+ VM_MIN_GPU_ADDRESS =QWORD($90000000000);
+ VM_MAX_GPU_ADDRESS =QWORD($A0000000000); //Virtual mirror
- VM_MIN_DEV_ADDRESS =QWORD($20000000000);
- VM_MAX_DEV_ADDRESS =QWORD($20000010000); //64KB
+ VM_MIN_DEV_ADDRESS =QWORD($A0000000000);
+ VM_MAX_DEV_ADDRESS =QWORD($A0000010000); //64KB
+
+ WIN_REBASE_ADDR =QWORD($B0000000000); //fp_rebase
+
+ WIN_MAX_MOVED_STACK =QWORD($C0000000000);
+ WIN_SHARED_ADDR =QWORD($C0000000000);
VM_DMEM_SIZE =$180000000; // 6144MB