Line 235:
Line 235:
The kernel is responsible for tasks such as as IPC handling, permissions' control, resource managers (/dev nodes) and much more.
The kernel is responsible for tasks such as as IPC handling, permissions' control, resource managers (/dev nodes) and much more.
[[IOSU_Syscalls|System calls]] are handled through the ARM undefined handler and mapped into their respective kernel functions.
[[IOSU_Syscalls|System calls]] are handled through the ARM undefined handler and mapped into their respective kernel functions.
+
+
=== Auxiliary vectors ===
+
The IOSU elf has a PH_NOTES section which contains a so called "mrg file".
+
This "mrg file" contains auxiliary vectors for IOSU modules.
+
+
The vectors are parsed by IOS-KERNEL, before launching the modules.
+
+
The first 0xc bytes of the notes section make up a Elf32_Nhdr.
+
After that there are 6 auxv_t for each module (14 in 5.5.X).
+
+
The following auxiliary vector types are used:
+
{| class="wikitable"
+
|-
+
! Name
+
! Value
+
! Description
+
|-
+
| AT_ENTRY
+
| 0x09
+
| Entry point address
+
|-
+
| AT_UID
+
| 0x0b
+
| Module ID
+
|-
+
| AT_PRIORITY
+
| 0x7d
+
| Main thread priority
+
|-
+
| AT_STACK_SIZE
+
| 0x7e
+
| Main thread stack size
+
|-
+
| AT_STACK_ADDR
+
| 0x7f
+
| Main thread stack address
+
|-
+
| AT_MEM_PERM_MASK
+
| 0x80
+
|
+
|}
+
+
==== Auxiliary vectors from 5.5.X ====
+
+
AT_UID: 0
+
AT_ENTRY: 0xFFFF0000
+
AT_PRIORITY: 0x0
+
AT_STACK_SIZE: 0x0
+
AT_STACK_ADDR: 0x00000000
+
AT_MEM_PERM_MASK: 0x00000000
+
+
AT_UID: 1
+
AT_ENTRY: 0x05056718
+
AT_PRIORITY: 0x7C
+
AT_STACK_SIZE: 0x2000
+
AT_STACK_ADDR: 0x050BA4A0
+
AT_MEM_PERM_MASK: 0x000C0030
+
+
AT_UID: 2
+
AT_ENTRY: 0xE600F848
+
AT_PRIORITY: 0x7D
+
AT_STACK_SIZE: 0x1000
+
AT_STACK_ADDR: 0xE7000000
+
AT_MEM_PERM_MASK: 0x00100000
+
+
AT_UID: 3
+
AT_ENTRY: 0x04015EA4
+
AT_PRIORITY: 0x7B
+
AT_STACK_SIZE: 0x1000
+
AT_STACK_ADDR: 0x04028628
+
AT_MEM_PERM_MASK: 0x000C0030
+
+
AT_UID: 4
+
AT_ENTRY: 0x1012E9E8
+
AT_PRIORITY: 0x6B
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0x104B92C8
+
AT_MEM_PERM_MASK: 0x00038600
+
+
AT_UID: 5
+
AT_ENTRY: 0x107F6830
+
AT_PRIORITY: 0x55
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0x1114117C
+
AT_MEM_PERM_MASK: 0x001C5870
+
+
AT_UID: 6
+
AT_ENTRY: 0x11F82D94
+
AT_PRIORITY: 0x75
+
AT_STACK_SIZE: 0x2000
+
AT_STACK_ADDR: 0x1214AB4C
+
AT_MEM_PERM_MASK: 0x00008180
+
+
AT_UID: 7
+
AT_ENTRY: 0x123E4174
+
AT_PRIORITY: 0x50
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0x12804498
+
AT_MEM_PERM_MASK: 0x00002000
+
+
AT_UID: 11
+
AT_ENTRY: 0xE22602FC
+
AT_PRIORITY: 0x32
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0xE22CB000
+
AT_MEM_PERM_MASK: 0x00000000
+
+
AT_UID: 9
+
AT_ENTRY: 0xE108E930
+
AT_PRIORITY: 0x32
+
AT_STACK_SIZE: 0x1000
+
AT_STACK_ADDR: 0xE12E71A4
+
AT_MEM_PERM_MASK: 0x00000000
+
+
AT_UID: 12
+
AT_ENTRY: 0xE3166B34
+
AT_PRIORITY: 0x32
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0xE31AF000
+
AT_MEM_PERM_MASK: 0x00000000
+
+
AT_UID: 8
+
AT_ENTRY: 0xE00D8290
+
AT_PRIORITY: 0x32
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0xE0125390
+
AT_MEM_PERM_MASK: 0x00000000
+
+
AT_UID: 10
+
AT_ENTRY: 0xE500D720
+
AT_PRIORITY: 0x46
+
AT_STACK_SIZE: 0x4000
+
AT_STACK_ADDR: 0xE506A900
+
AT_MEM_PERM_MASK: 0x00000000
+
+
AT_UID: 13
+
AT_ENTRY: 0xE40168A4
+
AT_PRIORITY: 0x4B
+
AT_STACK_SIZE: 0x2000
+
AT_STACK_ADDR: 0xE415623C
+
AT_MEM_PERM_MASK: 0x00000000
=== Threads ===
=== Threads ===