SVC: Difference between revisions

No edit summary
No edit summary
Line 91: Line 91:
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result
|-
|-
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result
| 0x2C || [3.0.0+] [[#svcAllocateHeapMemory]] || X0=addr, X1=size || W0=result
|-
|-
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory|| X0=addr, X1=size || W0=result
| 0x2D || [3.0.0+] svcFreeHeapMemory || X0=addr, X1=size || W0=result
|-
|-
| 0x2E || [5.0.0+] svcDevUnitOnlyMeasureScheduling? || ||
| 0x2E || [5.0.0+] svcDevUnitOnlyMeasureScheduling? || ||
Line 127: Line 127:
| 0x45 || svcCreateEvent || None || W0=result, W1=client_handle ?, W2=server_handle ?
| 0x45 || svcCreateEvent || None || W0=result, W1=client_handle ?, W2=server_handle ?
|- style="border-top: double"
|- style="border-top: double"
| 0x48 || [5.0.0+] svcMapPhysicalMemoryNew? || X0=addr, X1=size || W0=result
| 0x48 || [5.0.0+] svcAllocateUserHeapMemory || X0=addr, X1=size || W0=result
|-
|-
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryNew? || X0=addr, X1=size || W0=result
| 0x49 || [5.0.0+] svcFreeUserHeapMemory || X0=addr, X1=size || W0=result
|-
|-
| 0x4A || [5.0.0+] svcSetWeirdSize? || X0=size || W0=result
| 0x4A || [5.0.0+] svcSetUserHeapMemoryAllocationMax || X0=size || W0=result
|-
|-
| 0x4B || [4.0.0+] [[#svcCreateJitMemory]] || X1=addr, X2=size || W0=result, W1=jit_handle
| 0x4B || [4.0.0+] [[#svcCreateJitMemory]] || X1=addr, X2=size || W0=result, W1=jit_handle
Line 257: Line 257:


On success, the heap base-address (which is fixed by kernel, aslr'd) is written to OutAddr.
On success, the heap base-address (which is fixed by kernel, aslr'd) is written to OutAddr.
Uses current process pool partition.


[2.0.0+] Size must be less than 0x18000000.
[2.0.0+] Size must be less than 0x18000000.
Line 784: Line 786:
|}
|}


== svcMapPhysicalMemory ==
== svcAllocateHeapMemory ==
This is like svcSetHeapSize except you can allocate heap at any address you'd like.
This is like svcSetHeapSize except you can allocate heap at any address you'd like.
Uses current process pool partition.


== svcDumpInfo ==
== svcDumpInfo ==
Line 855: Line 859:


'''0xf601:''' Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.
'''0xf601:''' Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.
== svcAllocateUserHeapMemory ==
Same as [[#svcAllocateHeapMemory]] except it always uses pool partition 0.


== svcCreateJitMemory ==
== svcCreateJitMemory ==
Line 1,520: Line 1,527:
| || || Bit5 || EnableAslr
| || || Bit5 || EnableAslr
|-
|-
| || || Bit6 || IsSystem
| || || Bit6 || UseSystemMemBlocks
|-
| || || Bit7 || [4.0.0] ?
|-
| || || Bit10-7 || [5.0.0+] PoolPartition (0=User, 1=System, 2=?, 3=?)
|-
|-
| 0x28 || 4 || || ResourceLimitHandle
| 0x28 || 4 || || ResourceLimitHandle
|-
|-
| 0x2C || 4 ||
| 0x2C || 4 || || [3.0.0+] UnknownNumPages
|}
|}
On [1.0.0] there's only one pool.
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.


=== AddressSpaceType ===
=== AddressSpaceType ===