4.0.0: Difference between revisions
→Kernel: > |
|||
(4 intermediate revisions by 3 users not shown) | |||
Line 44: | Line 44: | ||
==Kernel== | ==Kernel== | ||
* Kernel startup code was updated: | |||
** A new (unused?) function was added, this is roughly the same as the code which originally directly read a MC register (0x70019050) for [[Memory_layout|getting]] the DRAM size, except [[SMC]] ReadWriteRegister is used for the read instead. | |||
** The code which originally read the above register directly was replaced with an inlined version of the above function. | |||
* All RTTI symbols were removed, can no longer know official name of kernel objects. :( | * All RTTI symbols were removed, can no longer know official name of kernel objects. :( | ||
* JIT syscalls were added. | * JIT syscalls were added. | ||
** New MemoryType bit for "JIT allowed". | ** New MemoryType bit for "JIT allowed". | ||
** New MemoryTypes for JitWritable and JitReadOnly. | ** New MemoryTypes for JitWritable and JitReadOnly. | ||
* New synchronization syscalls 0x34, 0x35 added. | * New synchronization syscalls 0x34, 0x35 added: These ones allow implementation of synchronization primitives without a mutex+condvar pair. This is more efficient because when a thread wakes up from a condvar, the mutex is held and needs to perform a syscall to unlock it. If you have N threads blocking on a condvar, you need N-1 syscalls to wake all the threads. With the new syscalls, you can wake up all N with a single syscall. | ||
* Added new syscall svcDumpInfoNew, but it's stubbed. | * Added new syscall svcDumpInfoNew, but it's stubbed. | ||
* The linked-list node for KAutoObjects was added to the struct itself instead of being a separate allocation. | * The linked-list node for KAutoObjects was added to the struct itself instead of being a separate allocation. | ||
* svcGetInfo now exposes the first and last process id for built-in modules. | * svcGetInfo now exposes the first and last process id for built-in modules. | ||
** This is used by some services to make sure we can't connect to them from outside a privileged module. | ** This is used by some services to make sure we can't connect to them from outside a privileged module. | ||
* svcReadWriteRegister was updated, now always goes through TZ for both PMC and MC. Whitelist for MC remains the same. | |||
* Support was added for loading non-KIP processes into the Secure pool via a flag in SvcCreateProcess. | |||
** This is used by only for es, to prevent attackers from using GPU DMA to take over the es sysmodule to pirate games. | |||
** Correspondingly, the KHeapArrange calculation of the secure pool size now has an extra 0x13A000 factored in (to ensure there is enough space for es). | |||
===FIRM=== | ===FIRM=== | ||
Line 58: | Line 67: | ||
The package1 entrypoint address specified by BCT was increased by 0x20-bytes, since there's now an additional 0x20-bytes at the start of package1. The additional data is identical to the 0x20-byte block before it. | The package1 entrypoint address specified by BCT was increased by 0x20-bytes, since there's now an additional 0x20-bytes at the start of package1. The additional data is identical to the 0x20-byte block before it. | ||
In SafeMode Firmware the [[Bus_services|Bus]], [[PCV_services|PCV]] and [[PSC_services|psc]] sysmodules are now bundled with the kernel. | |||
Sysmodules: | Sysmodules: | ||
Line 66: | Line 77: | ||
** spl:es was added, supporting crypto commands used by the es sysmodule. | ** spl:es was added, supporting crypto commands used by the es sysmodule. | ||
** spl:fs was added, supporting crypto commands used by the [[Filesystem services|fs]] FIRM sysmodule. | ** spl:fs was added, supporting crypto commands used by the [[Filesystem services|fs]] FIRM sysmodule. | ||
====Package1==== | ====Package1==== |