Difference between revisions of "Sm modules"

From Vita Development Wiki
Jump to navigation Jump to search
Line 15: Line 15:
 
* syscall 1: Unload
 
* syscall 1: Unload
 
* while(1) sleep()
 
* while(1) sleep()
 +
 +
== call_ctors/call_dtors ==
 +
 +
These just call function pointers, basically libc_init_array.
 +
 +
== sm_main ==
 +
 +
It has a memory pool allocated on stack. It's filled with structures for command handlers. Then, it calls main_loop.
 +
 +
== main_loop ==
 +
 +
This uses syscall 4 (RegisterIrqHandler) to register a common handler for incoming commands. Then it loops while sm is "active". Then it sets handler for commands = null pointer.

Revision as of 03:01, 7 March 2018

sm common code

sm modules are loaded to 0x80B000, then code from that addr is executed.

There is a lot of common code shared between sm: entry, cmd handler, cmd setup, etc

Entry

This is the first code executed in sm. It's located at 0x80B000. It does the following:

  • Get random value (stack cookie?)
  • call_ctors()
  • sm_main()
  • call_dtors()
  • syscall 1: Unload
  • while(1) sleep()

call_ctors/call_dtors

These just call function pointers, basically libc_init_array.

sm_main

It has a memory pool allocated on stack. It's filled with structures for command handlers. Then, it calls main_loop.

main_loop

This uses syscall 4 (RegisterIrqHandler) to register a common handler for incoming commands. Then it loops while sm is "active". Then it sets handler for commands = null pointer.