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