libtransistor
A userland library for the Nintendo Switch
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Data Structures | Enumerations | Functions | Variables
loader_config.h File Reference

Homebrew ABI configuration. More...

#include <libtransistor/types.h>
#include <libtransistor/ipc.h>
#include <assert.h>
Include dependency graph for loader_config.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  loader_config_service_override_t
 
struct  loader_config_entry_t
 
struct  loader_config_t
 

Enumerations

enum  loader_config_flags_t { LOADER_CONFIG_FLAG_RECOGNITION_MANDATORY = BIT(0) }
 
enum  loader_config_key_t {
  LCONFIG_KEY_END_OF_LIST = 0, LCONFIG_KEY_MAIN_THREAD_HANDLE = 1, LCONFIG_KEY_NEXT_LOAD_PATH = 2, LCONFIG_KEY_OVERRIDE_HEAP = 3,
  LCONFIG_KEY_OVERRIDE_SERVICE = 4, LCONFIG_KEY_ARGV = 5, LCONFIG_KEY_SYSCALL_AVAILABLE_HINT = 6, LCONFIG_KEY_APPLET_TYPE = 7,
  LCONFIG_KEY_APPLET_WORKAROUND = 8, LCONFIG_KEY_STDIO_SOCKETS = 9, LCONFIG_KEY_PROCESS_HANDLE = 10, LCONFIG_KEY_LAST_LOAD_RESULT = 11,
  LCONFIG_KEY_ALLOC_PAGES = 12, LCONFIG_KEY_LOCK_REGION = 13, LCONFIG_KEY_TWILI_PRESENT = 52
}
 
enum  loader_config_applet_type_t {
  LCONFIG_APPLET_TYPE_APPLICATION = 0, LCONFIG_APPLET_TYPE_SYSTEM_APPLET = 1, LCONFIG_APPLET_TYPE_LIBRARY_APPLET = 2, LCONFIG_APPLET_TYPE_OVERLAY_APPLET = 3,
  LCONFIG_APPLET_TYPE_SYSTEM_APPLICATION = 4, LCONFIG_APPLET_TYPE_UNKNOWN = 0xFFFFFFFFFFFFFFFF
}
 
enum  loader_config_socket_service_t { LCONFIG_SOCKET_SERVICE_BSD_U = 0, LCONFIG_SOCKET_SERVICE_BSD_S = 1, LCONFIG_SOCKET_SERVICE_MAX = 2, LCONFIG_SOCKET_SERVICE_UNSPECIFIED = 0xFFFFFFFF }
 

Functions

void lconfig_init_default (uint64_t thread_handle)
 Initializes default loader config.
 
result_t lconfig_parse (loader_config_entry_t *config)
 Parses loader config.
 
result_t lconfig_has_syscall (uint8_t syscall)
 Checks if a given syscall is hinted. More...
 
result_t lconfig_has_syscalls (const uint8_t *syscalls)
 Checks if all the given syscalls are hinted. More...
 
_Noreturn void trn_dirty_exit (int code)
 Exits application without cleanup. More...
 

Variables

bool IS_NRO
 
loader_config_t loader_config
 

Detailed Description

Homebrew ABI configuration.

Function Documentation

result_t lconfig_has_syscall ( uint8_t  syscall)

Checks if a given syscall is hinted.

Returns
RESULT_OK if the syscall is hinted, or a LIBTRANSISTOR_ERR_NEEDS_SYSCALL if it is not.
result_t lconfig_has_syscalls ( const uint8_t *  syscalls)

Checks if all the given syscalls are hinted.

Array should be terminated by a zero element.

Returns
RESULT_OK if all syscalls are hinted, or a LIBTRANSISTOR_ERR_NEEDS_SYSCALL if one is missing.
_Noreturn void trn_dirty_exit ( int  code)

Exits application without cleanup.

This will return to the loader without performing any cleanup. This is useful if you've done something like overwritten a function pointer and are going to re-enter the application at a later time.