libdragon
|
newlib Interface Hooks More...
Data Structures | |
struct | fs_mapping_t |
Filesystem mapping structure. More... | |
Macros | |
#define | STACK_SIZE 0x10000 |
Stack size. More... | |
#define | DEBUG_OUT(x) ((uint32_t *)0xA4400044)[0] = ((uint32_t)(x)) |
Write to the MESS debug register. More... | |
#define | BITS(v, b, e) ((unsigned int)(v) << (31-(e)) >> (31-(e)+(b))) |
Extract bits from word. | |
#define | HANDLE_MAX_BUCKETS 32 |
Number of buckets file handles are divided into. | |
#define | HANDLE_BUCKET_SIZE 32 |
Size of each bucket of file handles. | |
#define | FILENO_MAKE(bkt_idx, bkt_pos, fs_index) ( (bkt_pos) | ((bkt_idx) << 5) | (((fs_index)+1) << 11) ) |
Create a fileno. More... | |
#define | FILENO_GET_FS_INDEX(fileno) ((int)BITS( (fileno), 11, 14 ) - 1) |
Extract the filesystem index from a fileno. | |
#define | FILENO_GET_BUCKET_IDX(fileno) BITS( (fileno), 5, 10 ) |
Extract the bucket index from a fileno. | |
#define | FILENO_GET_BUCKET_POS(fileno) BITS( (fileno), 0, 4 ) |
Extract the bucket position from a fileno. | |
STDIN/STDOUT/STDERR definitions from unistd.h | |
We can't just include unistd.h as it redefines several of the functions here that we are attempting to replace. | |
#define | STDIN_FILENO 0 |
Standard input file descriptor. | |
#define | STDOUT_FILENO 1 |
Standard output file descriptor. | |
#define | STDERR_FILENO 2 |
Standard error file descriptor. | |
Functions | |
int | close (int fileno) |
Close a file. More... | |
int | attach_filesystem (const char *const prefix, filesystem_t *filesystem) |
Register a filesystem with newlib. More... | |
int | detach_filesystem (const char *const prefix) |
Unregister a filesystem from newlib. More... | |
int | chown (const char *path, uid_t owner, gid_t group) |
Change ownership on a file or directory. More... | |
int | execve (char *name, char **argv, char **env) |
Load and execute an executable given a path. More... | |
void | _exit (int rc) |
End execution on current thread. More... | |
int | fork (void) |
Fork execution into two threads. More... | |
int | fstat (int fileno, struct stat *st) |
Return stats on an open file handle. More... | |
int | getpid (void) |
Return the PID of the current thread. More... | |
int | gettimeofday (struct timeval *ptimeval, void *ptimezone) |
Return the current time. More... | |
int | isatty (int file) |
Return whether a file is a TTY or a regular file. More... | |
int | kill (int pid, int sig) |
Send a signal to a PID. More... | |
int | link (char *existing, char *new) |
Link a new file to an existing file. More... | |
int | lseek (int file, int ptr, int dir) |
Seek to a location in a file. More... | |
int | open (const char *file, int flags,...) |
Open a file given a path. More... | |
int | read (int fileno, char *ptr, int len) |
Read data from a file. More... | |
int | readlink (const char *path, char *buf, size_t bufsize) |
Read a link. More... | |
void * | sbrk (int incr) |
Return a new chunk of memory to be used as heap. More... | |
int | stat (const char *file, struct stat *st) |
Return file stats based on a file name. More... | |
int | symlink (const char *path1, const char *path2) |
Create a symbolic link to a file. More... | |
clock_t | times (struct tms *buf) |
Return time information on the current process. More... | |
int | unlink (char *name) |
Remove a file based on filename. More... | |
int | wait (int *status) |
Wait for a child process. More... | |
int | write (int file, char *ptr, int len) |
Write data to a file. More... | |
int | dir_findfirst (const char *const path, dir_t *dir) |
Find the first file in a directory. More... | |
int | dir_findnext (const char *const path, dir_t *dir) |
Find the next file in a directory. More... | |
int | hook_stdio_calls (stdio_t *stdio_calls) |
Hook into stdio for STDIN, STDOUT and STDERR callbacks. More... | |
int | unhook_stdio_calls (stdio_t *stdio_calls) |
Unhook from stdio. More... | |
int | hook_time_call (time_t(*time_fn)(void)) |
Hook into gettimeofday with a current time callback. More... | |
int | unhook_time_call (time_t(*time_fn)(void)) |
Unhook from gettimeofday current time callback. More... | |
void | _flush_cache (uint8_t *addr, unsigned long bytes) |
Implement _flush_cache as required by GCC for nested functions. More... | |
void | __assert_func (const char *file, int line, const char *func, const char *failedexpr) |
Implement underlying function for assert() More... | |
Variables | |
char * | __env [1] = { 0 } |
Environment variables. | |
void(* | __assert_func_ptr )(const char *file, int line, const char *func, const char *failedexpr)=0 |
Assert function pointer (initialized at startup) | |
int | __bootcic |
Boot CIC. More... | |
time_t(* | time_hook )(void) = NULL |
Function to provide the current time. | |
newlib Interface Hooks
struct fs_mapping_t |
Filesystem mapping structure.
This is used to look up what filesystem to use when passed a generic path.
Data Fields | ||
---|---|---|
char * | prefix |
Filesystem prefix. This controls what filesystem prefix should link to this filesystem (eg. 'rom:/' or 'cf:/') |
filesystem_t * | fs | Filesystem callback pointers. |
#define STACK_SIZE 0x10000 |
Stack size.
This is the maximum stack size for the purpose of malloc. Any malloc call that tries to allocate data will not allocate within this range. However, there is no guarantee that user code won't blow the stack and cause heap corruption. Use this as loose protection at best.
#define DEBUG_OUT | ( | x | ) | ((uint32_t *)0xA4400044)[0] = ((uint32_t)(x)) |
Write to the MESS debug register.
[in] | x | 32-bit value to write to the MESS debug register |
#define FILENO_MAKE | ( | bkt_idx, | |
bkt_pos, | |||
fs_index | |||
) | ( (bkt_pos) | ((bkt_idx) << 5) | (((fs_index)+1) << 11) ) |
Create a fileno.
Filenos are created as bitfields containing a few fields.
They contain the indices required to access the handle in handle_map: the bucket index and the position within the bucket where the handle is.
They also contain the filesystem index, so that we always know which filesystem use to operate on the handle. Notice that the index is stored 1-based instead of 0-based, so that the special filenos 1,2,3 (used for stdin, stdout and stderr by C standard libraries) will never conflict with a fileno made by FILENO_MAKE.
int close | ( | int | fileno | ) |
Close a file.
[in] | fileno | File handle of the file to close |
int chown | ( | const char * | path, |
uid_t | owner, | ||
gid_t | group | ||
) |
Change ownership on a file or directory.
[in] | path | Path of the file or directory to operate on |
[in] | owner | New owner of the file |
[in] | group | New group of the file |
int execve | ( | char * | name, |
char ** | argv, | ||
char ** | env | ||
) |
Load and execute an executable given a path.
[in] | name | Filename of the executable |
[in] | argv | Array of pointers to arguments |
[in] | env | Array of pointers to environment variables |
void _exit | ( | int | rc | ) |
End execution on current thread.
[in] | rc | Return value of the exiting program |
int fork | ( | void | ) |
Fork execution into two threads.
int fstat | ( | int | fileno, |
struct stat * | st | ||
) |
Return stats on an open file handle.
[in] | fileno | File handle |
[out] | st | Pointer to stat struct to be filled |
int getpid | ( | void | ) |
Return the PID of the current thread.
int gettimeofday | ( | struct timeval * | ptimeval, |
void * | ptimezone | ||
) |
Return the current time.
[out] | ptimeval | Time structure to be filled with current time. |
[out] | ptimezone | Timezone information to be filled. (Not supported) |
int isatty | ( | int | file | ) |
Return whether a file is a TTY or a regular file.
[in] | file | File handle |
int kill | ( | int | pid, |
int | sig | ||
) |
Send a signal to a PID.
[in] | pid | The PID of the process |
[in] | sig | The signal to send |
int link | ( | char * | existing, |
char * | new | ||
) |
Link a new file to an existing file.
[in] | existing | The path of the existing file |
[in] | new | The path of the new file |
int lseek | ( | int | file, |
int | ptr, | ||
int | dir | ||
) |
Seek to a location in a file.
[in] | file | The file handle of the file to seek |
[in] | ptr | The offset in bytes to seek to, given the direction in dir |
[in] | dir | The direction to seek. Use SEEK_SET to start from the beginning. Use SEEK_CUR to seek based on the current offset. Use SEEK_END to seek starting at the end of the file. |
int open | ( | const char * | file, |
int | flags, | ||
... | |||
) |
Open a file given a path.
[in] | file | File name of the file to open |
[in] | flags | Flags specifying open flags, such as binary, append. |
[in] | ... | mode Mode of the file (currently ignored). |
int read | ( | int | fileno, |
char * | ptr, | ||
int | len | ||
) |
Read data from a file.
[in] | fileno | Fileno for this file |
[out] | ptr | Data pointer to read data to |
[in] | len | Length in bytes of data to read |
int readlink | ( | const char * | path, |
char * | buf, | ||
size_t | bufsize | ||
) |
Read a link.
[in] | path | Path of the link |
[in] | buf | Buffer to read the link into |
[in] | bufsize | Size of the buffer |
void * sbrk | ( | int | incr | ) |
Return a new chunk of memory to be used as heap.
[in] | incr | The amount of memory needed in bytes |
int stat | ( | const char * | file, |
struct stat * | st | ||
) |
Return file stats based on a file name.
[in] | file | File name of the file in question |
[out] | st | Stat struct to populate with information from the file |
int symlink | ( | const char * | path1, |
const char * | path2 | ||
) |
Create a symbolic link to a file.
[in] | path1 | Path to symlink to |
[in] | path2 | Path to symlink from |
clock_t times | ( | struct tms * | buf | ) |
Return time information on the current process.
[out] | buf | Buffer to place timing information |
int unlink | ( | char * | name | ) |
Remove a file based on filename.
[in] | name | Name of the file to remove |
int wait | ( | int * | status | ) |
Wait for a child process.
[out] | status | Status of the wait operation |
int write | ( | int | file, |
char * | ptr, | ||
int | len | ||
) |
Write data to a file.
[in] | file | File handle |
[in] | ptr | Pointer to buffer to write to file |
[in] | len | Length of data in bytes to be written |
int dir_findfirst | ( | const char *const | path, |
dir_t * | dir | ||
) |
Find the first file in a directory.
This function should be called to start enumerating a directory or whenever a directory enumeration should be restarted.
[in] | path | Path to the directory structure |
[out] | dir | Directory entry structure to populate with first entry |
int dir_findnext | ( | const char *const | path, |
dir_t * | dir | ||
) |
Find the next file in a directory.
After finding the first file in a directory using dir_findfirst, call this to retrieve the rest of the directory entries. Call this repeatedly until a negative error is returned signifying that there are no more directory entries in the directory.
[in] | path | Path to the directory structure |
[out] | dir | Directory entry structure to populate with next entry |
void _flush_cache | ( | uint8_t * | addr, |
unsigned long | bytes | ||
) |
Implement _flush_cache as required by GCC for nested functions.
When using the nested function extensions of GCC, a call to _flush_cache is generated which must be supplied by the operating system or runtime to allow flushing the instruction cache for the generated trampoline.
void __assert_func | ( | const char * | file, |
int | line, | ||
const char * | func, | ||
const char * | failedexpr | ||
) |
Implement underlying function for assert()
Implementation of the function called when an assert fails. By default, we just abort execution, but this will be overriden at startup with a function that prints the assertion on the screen and via the debug channel (if initialized).
|
extern |
Boot CIC.
Defaults to 6102.