Difference between revisions of "Thread Local Storage"

From 3dbrew
Jump to navigation Jump to search
(Couldn't find this info anywhere. If it was already somewhere else, at least it's discoverable now :p)
Line 23: Line 23:
 
| 0x180
 
| 0x180
 
| 0x80
 
| 0x80
| IPC static buffers
+
| IPC static buffers: 16 pairs of a [[IPC|static buffer translation descriptor]] (specifying the buffer size) and a buffer pointer
 
|}
 
|}

Revision as of 14:13, 20 March 2016

Each thread is given a 0x200-byte thread-local-storage block by the kernel. It is used during IPC communications. Each KProcess has a linked list of KThreadLocalPage objects and each object has a pointer to a page(0x1000 bytes) of FCRAM, which is used for up to 8 thread-local-storage blocks. The KThreadLocalPage is used to track which thread-local-storage blocks are used so it can allocate new ones as new threads are created.

A pointer to the thread-local-storage can be read using the ARM instruction:

mrc        15, 0, rX, cr13, cr0, 3

Every application has RW access to its thread-local-storage.

The kernel requires the application to put IPC parameters and IPC static buffers inside the thread-local-storage:

Offset Size Description
0 0x80 Undefined, can be used by application for any purpose.
0x80 0x100 IPC command with parameters
0x180 0x80 IPC static buffers: 16 pairs of a static buffer translation descriptor (specifying the buffer size) and a buffer pointer