From 50b41f48e92f26c49e9cfef1f654dcf1422639c4 Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Tue, 27 May 2025 15:24:52 +0300 Subject: [PATCH] + expand guest vm to 43bit --- fpPS4.lpi | 2 +- sys/dev/dev_dmem.pas | 8 +-- sys/jit/kern_jit.pas | 4 +- sys/jit/kern_jit_ctx.pas | 9 +-- sys/kern/kern_bnet.pas | 2 +- sys/kern/kern_dmem.pas | 8 +-- sys/kern/kern_dynlib.pas | 2 +- sys/kern/kern_exec.pas | 2 +- sys/kern/kern_namedobj.pas | 2 +- sys/kern/kern_rangelock.pas | 8 +-- sys/md/md_exception.pas | 2 +- sys/md/vm_pmap.pas | 12 ++-- sys/md/vm_pmap_prot.pas | 130 +++++++++++++++++++++++++----------- sys/vm/vm_map.pas | 8 +-- sys/vm/vm_mmap.pas | 20 +++--- sys/vm/vmparam.pas | 18 ++--- 16 files changed, 145 insertions(+), 92 deletions(-) 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