Thread Local Storage: Difference between revisions

From 3dbrew
Jump to navigation Jump to search
Bond697 (talk | contribs)
No edit summary
Neobrain (talk | contribs)
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 15: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