sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

libc_impl.h (11281B)


      1 #ifndef LIBC_IMPL_H
      2 #define LIBC_IMPL_H
      3 
      4 #include <stdint.h>
      5 
      6 union FloatReg {
      7     float f[2];
      8     uint32_t w[2];
      9     //double d;
     10 };
     11 
     12 void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end);
     13 void setup_libc_data(uint8_t *mem);
     14 
     15 uint32_t wrapper_sbrk(uint8_t *mem, int increment);
     16 uint32_t wrapper_malloc(uint8_t *mem, uint32_t size);
     17 uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size);
     18 uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size);
     19 int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp);
     20 int wrapper_printf(uint8_t *mem, uint32_t format_addr, uint32_t sp);
     21 int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp);
     22 int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp);
     23 int wrapper__doprnt(uint8_t *mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr);
     24 void wrapper_free(uint8_t *mem, uint32_t data_addr);
     25 uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr);
     26 int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode);
     27 int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode);
     28 int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode);
     29 int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr);
     30 int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr);
     31 int wrapper_flock(uint8_t *mem, int fd, int operation);
     32 int wrapper_chmod(uint8_t *mem, uint32_t path_addr, uint32_t mode);
     33 int wrapper_umask(int mode);
     34 uint32_t wrapper_ecvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr);
     35 uint32_t wrapper_fcvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr);
     36 double wrapper_sqrt(double v);
     37 float wrapper_sqrtf(float v);
     38 int wrapper_atoi(uint8_t *mem, uint32_t nptr_addr);
     39 int wrapper_atol(uint8_t *mem, uint32_t nptr_addr);
     40 double wrapper_atof(uint8_t *mem, uint32_t nptr_addr);
     41 int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
     42 uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
     43 int64_t wrapper_strtoll(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
     44 uint64_t wrapper_strtoull(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
     45 double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr);
     46 uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c);
     47 uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c);
     48 uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr);
     49 uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr);
     50 int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr);
     51 int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr);
     52 int wrapper_ftruncate(uint8_t *mem, int fd, int length);
     53 int wrapper_truncate(uint8_t *mem, uint32_t pathname_addr, int length);
     54 void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len);
     55 uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len);
     56 uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len);
     57 int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes);
     58 int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes);
     59 uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr);
     60 uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr);
     61 int wrapper_fclose(uint8_t *mem, uint32_t fp_addr);
     62 int wrapper_fflush(uint8_t *mem, uint32_t fp_addr);
     63 int wrapper_fchown(uint8_t *mem, int fd, int owner, int group);
     64 int wrapper_ftell(uint8_t *mem, uint32_t fp_addr);
     65 void wrapper_rewind(uint8_t *mem, uint32_t fp_addr);
     66 int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin);
     67 int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence);
     68 int wrapper_dup(uint8_t *mem, int fd);
     69 int wrapper_dup2(uint8_t *mem, int oldfd, int newfd);
     70 int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr);
     71 void wrapper_perror(uint8_t *mem, uint32_t str_addr);
     72 int wrapper_fdopen(uint8_t *mem, int fd, uint32_t mode_addr);
     73 uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n);
     74 int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
     75 int wrapper_memcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
     76 int wrapper_getpid(void);
     77 int wrapper_getpgrp(uint8_t *mem);
     78 int wrapper_remove(uint8_t *mem, uint32_t path_addr);
     79 int wrapper_unlink(uint8_t *mem, uint32_t path_addr);
     80 int wrapper_close(uint8_t *mem, int fd);
     81 int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr);
     82 int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
     83 uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr);
     84 uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n);
     85 uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr);
     86 uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n);
     87 uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_addr);
     88 uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr);
     89 uint32_t wrapper_strdup(uint8_t *mem, uint32_t str_addr);
     90 int wrapper_toupper(int c);
     91 int wrapper_tolower(int c);
     92 int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len);
     93 int wrapper_isatty(uint8_t *mem, int fd);
     94 int wrapper_times(uint8_t *mem, uint32_t buffer_addr);
     95 uint32_t wrapper_strftime(uint8_t *mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, uint32_t timeptr_addr);
     96 int wrapper_clock(void);
     97 uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr);
     98 uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr);
     99 int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size);
    100 int wrapper___semgetc(uint8_t *mem, uint32_t fp_addr);
    101 int wrapper___semputc(uint8_t *mem, int c, uint32_t fp_addr);
    102 int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr);
    103 int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr);
    104 int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr);
    105 int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr);
    106 int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr);
    107 uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr);
    108 uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr);
    109 uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr);
    110 int wrapper_fputs(uint8_t *mem, uint32_t str_addr, uint32_t fp_addr);
    111 int wrapper_puts(uint8_t *mem, uint32_t str_addr);
    112 uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size);
    113 int wrapper_time(uint8_t *mem, uint32_t tloc_addr);
    114 void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n);
    115 int wrapper_fp_class_d(double d);
    116 double wrapper_ldexp(double d, int i);
    117 uint64_t wrapper___ll_mul(uint64_t a0, uint64_t a1);
    118 int64_t wrapper___ll_div(int64_t a0, int64_t a1);
    119 int64_t wrapper___ll_rem(uint64_t a0, int64_t a1);
    120 uint64_t wrapper___ll_lshift(uint64_t a0, uint64_t shift);
    121 int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift);
    122 uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1);
    123 uint64_t wrapper___ull_rem(uint64_t a0, uint64_t a1);
    124 uint64_t wrapper___ull_rshift(uint64_t a0, uint64_t shift);
    125 uint64_t wrapper___d_to_ull(double d);
    126 int64_t wrapper___d_to_ll(double d);
    127 uint64_t wrapper___f_to_ull(float f);
    128 int64_t wrapper___f_to_ll(float f);
    129 float wrapper___ull_to_f(uint64_t v);
    130 float wrapper___ll_to_f(int64_t v);
    131 double wrapper___ull_to_d(uint64_t v);
    132 double wrapper___ll_to_d(int64_t v);
    133 void wrapper_abort(uint8_t *mem);
    134 void wrapper_exit(uint8_t *mem, int status);
    135 void wrapper__exit(uint8_t *mem, int status);
    136 void wrapper__cleanup(uint8_t *mem);
    137 uint32_t wrapper__rld_new_interface(uint8_t *mem, uint32_t operation, uint32_t sp);
    138 void wrapper__exithandle(uint8_t *mem);
    139 int wrapper__prctl(uint8_t *mem, int operation, uint32_t sp);
    140 double wrapper__atod(uint8_t *mem, uint32_t buffer_addr, int ndigits, int dexp);
    141 int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name);
    142 uint32_t wrapper_getenv(uint8_t *mem, uint32_t name_addr);
    143 uint32_t wrapper_gettxt(uint8_t *mem, uint32_t msgid_addr, uint32_t default_str_addr);
    144 uint32_t wrapper_setlocale(uint8_t *mem, int category, uint32_t locale_addr);
    145 uint32_t wrapper_mmap(uint8_t *mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset);
    146 int wrapper_munmap(uint8_t *mem, uint32_t addr, uint32_t length);
    147 int wrapper_mprotect(uint8_t *mem, uint32_t addr, uint32_t length, int prot);
    148 int wrapper_sysconf(uint8_t *mem, int name);
    149 int wrapper_getpagesize(uint8_t *mem);
    150 int wrapper_strerror(uint8_t *mem, int errnum);
    151 int wrapper_ioctl(uint8_t *mem, int fd, uint32_t request, uint32_t sp);
    152 int wrapper_fcntl(uint8_t *mem, int fd, int cmd, uint32_t sp);
    153 uint32_t wrapper_signal(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t handler_addr, uint32_t sp);
    154 uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t disp_addr, uint32_t sp);
    155 int wrapper_get_fpc_csr(uint8_t *mem);
    156 int wrapper_set_fpc_csr(uint8_t *mem, int csr);
    157 int wrapper_setjmp(uint8_t *mem, uint32_t addr);
    158 void wrapper_longjmp(uint8_t *mem, uint32_t addr, int status);
    159 uint32_t wrapper_tempnam(uint8_t *mem, uint32_t dir_addr, uint32_t pfx_addr);
    160 uint32_t wrapper_tmpnam(uint8_t *mem, uint32_t str_addr);
    161 uint32_t wrapper_mktemp(uint8_t *mem, uint32_t template_addr);
    162 int wrapper_mkstemp(uint8_t *mem, uint32_t name_addr);
    163 uint32_t wrapper_tmpfile(uint8_t *mem);
    164 int wrapper_wait(uint8_t *mem, uint32_t wstatus_addr);
    165 int wrapper_kill(uint8_t *mem, int pid, int sig);
    166 int wrapper_execlp(uint8_t *mem, uint32_t file_addr, uint32_t sp);
    167 int wrapper_execv(uint8_t *mem, uint32_t pathname_addr, uint32_t argv_addr);
    168 int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr);
    169 int wrapper_fork(uint8_t *mem);
    170 int wrapper_system(uint8_t *mem, uint32_t command_addr);
    171 uint32_t wrapper_tsearch(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr);
    172 uint32_t wrapper_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr);
    173 uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t compare_addr, uint32_t sp);
    174 uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp);
    175 uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp);
    176 void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line);
    177 
    178 union FloatReg FloatReg_from_double(double d);
    179 double double_from_FloatReg(union FloatReg floatreg);
    180 double double_from_memory(uint8_t *mem, uint32_t address);
    181 
    182 #endif