diff options
Diffstat (limited to 'src')
809 files changed, 14784 insertions, 1011 deletions
diff --git a/src/box32.c b/src/box32.c new file mode 100644 index 00000000..85a647a6 --- /dev/null +++ b/src/box32.c @@ -0,0 +1,283 @@ +#include <stdint.h> +#include <stdlib.h> +#include <pthread.h> + +#include "debug.h" +#include "box32.h" +#include "custommem.h" +#include "converter32.h" + +#include "khash.h" + +KHASH_MAP_INIT_INT64(to, ulong_t); +KHASH_MAP_INIT_INT(from, uintptr_t); + +static kh_from_t* hash_from; +static kh_to_t* hash_to; +#define CNT_INIT 0x80000001 +#define HASH_MASK 0x7fffffff +static uint32_t hash_cnt = CNT_INIT; +static pthread_rwlock_t hash_lock = {0}; +static int hash_running = 0; +// locale +static kh_from_t* locale_from; +static kh_to_t* locale_to; + + +void init_hash_helper() { + hash_from = kh_init(from); + hash_to = kh_init(to); + locale_from = kh_init(from); + locale_to = kh_init(to); + pthread_rwlock_init(&hash_lock, NULL); + hash_running = 1; +} +void fini_hash_helper() { + hash_running = 0; + kh_destroy(from, hash_from); + hash_from = NULL; + kh_destroy(to, hash_to); + hash_to = NULL; + hash_cnt = CNT_INIT; + kh_destroy(from, locale_from); + locale_from = NULL; + kh_destroy(to, locale_to); + locale_to = NULL; + pthread_rwlock_destroy(&hash_lock); +} + +// Convert from hash key to original 64bits value +uintptr_t from_hash(ulong_t l) { + // easy case first + if((l&HASH_MASK)==l) { + return (uintptr_t)l; + } + if(l==0xffffffff) { + return 0xffffffffffffffffll; + } + // get value from hash table second + uintptr_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, from_hash used but hash not running\n"); + return ret; + } + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(from, hash_from, l); + if (k==kh_end(hash_from)) { + ret = (uintptr_t)l; + } else { + ret = kh_value(hash_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} +// same as from_hash +uintptr_t from_hash_d(ulong_t l) { + return from_hash(l); +} + +// Convert from 64bits to hash key, creating it if needed +ulong_t to_hash(uintptr_t p) { + if((p&(uintptr_t)HASH_MASK)==p) { + return (ulong_t)p; + } + if(p==0xffffffffffffffffll) { + return 0xffffffff; + } + ulong_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_hash used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_rdlock(&hash_lock); + k = kh_get(to, hash_to, p); + if(k==kh_end(hash_to)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + ret = hash_cnt++; + if(hash_cnt==0xffffffff) + hash_cnt = CNT_INIT; + int r; + k = kh_put(to, hash_to, p, &r); + kh_value(hash_to, k) = ret; + k = kh_put(from, hash_from, ret, &r); + kh_value(hash_from, k) = p; + } else { + ret = kh_value(hash_to, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} + +// Convert from 64bits to hash key and delete the entry from both hash table +ulong_t to_hash_d(uintptr_t p) { + if((p&(uintptr_t)HASH_MASK)==p) + return (ulong_t)p; + if(p==0xffffffffffffffffll) + return 0xffffffff; + ulong_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_hash_d used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_wrlock(&hash_lock); + k = kh_get(to, hash_to, p); + if(k==kh_end(hash_to)) { + /// should this be an assert? + } else { + ret = kh_value(hash_to, k); + // delete both entries + k = kh_get(to, hash_to, p); + kh_del(to, hash_to, k); + k = kh_get(from, hash_from, ret); + kh_del(from, hash_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} + +typedef struct struct_locale_s { + void* p0[13]; + void* p1; + void* p2; + void* p3; + void* p4[13]; +} struct_locale_t; +void from_struct_locale(struct_locale_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + for(int i=0; i<13; ++i) { + dest->p0[i] = (void*)from_hash(*(ptr_t*)src); src += 4; + } + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p3 = from_ptrv(*(ptr_t*)src); src += 4; + for(int i=0; i<13; ++i) { + dest->p4[i] = (void*)from_hash(*(ptr_t*)src); src += 4; + } +} +void to_struct_locale(ptr_t d, const struct_locale_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + for(int i=0; i<13; ++i) { + *(ptr_t*)dest = to_hashv(src->p0[i]); dest += 4; + } + // copy the 3 ctype int (1st is short int, but int will do) + *(unsigned short int*)(d+(13+3+13)*sizeof(ptr_t)) = *(unsigned short int*)src->p1; + *(ptr_t*)dest = d+(13+3+13)*sizeof(ptr_t); dest += 4; + *(int*)(d+(13+3+13+1)*sizeof(ptr_t)) = *(int*)src->p2; + *(ptr_t*)dest = d+(13+3+13+1)*sizeof(ptr_t); dest += 4; + *(int*)(d+(13+3+13+3)*sizeof(ptr_t)) = *(int*)src->p3; + *(ptr_t*)dest = d+(13+3+13+2)*sizeof(ptr_t); dest += 4; + for(int i=0; i<13; ++i) { + *(ptr_t*)dest = to_hashv(src->p4[i]); dest += 4; + } +} +void free_struct_locale(const struct_locale_t *src) { + for(int i=0; i<13; ++i) { + to_hash_d((uintptr_t)src->p0[i]); + } + for(int i=0; i<13; ++i) { + to_hash_d((uintptr_t)src->p4[i]); + } +} + +// Convert from locale key to original 64bits value +void* from_locale(ptr_t l) { + // easy case first + if(l < 0x100) { + return from_ptrv(l); + } + if(l == 0xffffffff) { + return (void*)-1; + } + // get value from hash table second + void* ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, from_locale used but hash not running\n"); + return ret; + } + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(from, locale_from, l); + if (k==kh_end(locale_from)) { + ret = from_ptrv(l); + } else { + ret = (void*)kh_value(locale_from, k); + } + pthread_rwlock_unlock(&hash_lock); + //from_struct_locale((struct_locale_t*)ret, l); + return ret; +} +// same as from_locale +void* from_locale_d(ptr_t l) { + return from_locale(l); +} + +// Convert from 64bits to locale key, creating it if needed +ptr_t to_locale(void* p) { + if((uintptr_t)p < 0x100) { + return to_ptrv(p); + } + if(p == (void*)-1) { + return 0xffffffff; + } + ptr_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_locale used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_rdlock(&hash_lock); + k = kh_get(to, locale_to, (uintptr_t)p); + int conv = 0; + if(k==kh_end(locale_to)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + // a locale_t is 5 pointer! + void* m = calloc(13+3+13+3, sizeof(ptr_t)); // the 3 ctype value are also inside the locale struct + ret = to_ptrv(m); + // add to hash maps + int r; + k = kh_put(to, locale_to, (uintptr_t)p, &r); + kh_value(locale_to, k) = ret; + k = kh_put(from, locale_from, ret, &r); + kh_value(locale_from, k) = (uintptr_t)p; + conv = 1; + } else { + ret = kh_value(locale_to, k); + } + pthread_rwlock_unlock(&hash_lock); + if(conv) + to_struct_locale(ret, (struct_locale_t*)p); + return ret; +} + +// Convert from 64bits to hash key and delete the entry from both hash table +ptr_t to_locale_d(void* p) { + if((uintptr_t)p < 0x100) + return to_ptrv(p); + ptr_t ret = 0; + if(!hash_running) + return ret; + khint_t k; + pthread_rwlock_wrlock(&hash_lock); + k = kh_get(to, locale_to, (uintptr_t)p); + if(k==kh_end(locale_to)) { + /// should this be an assert? + } else { + ret = kh_value(locale_to, k); + // free the memory + free_struct_locale(p); + free(from_ptrv(ret)); + // delete both entries + k = kh_get(to, locale_to, (uintptr_t)p); + kh_del(to, locale_to, k); + k = kh_get(from, locale_from, ret); + kh_del(from, locale_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} \ No newline at end of file diff --git a/src/box64context.c b/src/box64context.c index 5d5155fa..b52e41e3 100644 --- a/src/box64context.c +++ b/src/box64context.c @@ -23,6 +23,9 @@ #include "gltools.h" #include "rbtree.h" #include "dynarec.h" +#ifdef BOX32 +#include "box32.h" +#endif EXPORTDYN void initAllHelpers(box64context_t* context) @@ -31,6 +34,9 @@ void initAllHelpers(box64context_t* context) if(inited) return; my_context = context; + #ifdef BOX32 + init_hash_helper(); + #endif init_pthread_helper(); init_bridge_helper(); init_signal_helper(context); @@ -47,6 +53,9 @@ void finiAllHelpers(box64context_t* context) fini_pthread_helper(context); fini_signal_helper(); fini_bridge_helper(); + #ifdef BOX32 + fini_hash_helper(); + #endif fini_custommem_helper(context); finied = 1; } @@ -75,6 +84,7 @@ void free_tlsdatasize(void* p) } void x64Syscall(x64emu_t *emu); +void x86Syscall(x64emu_t *emu); int unlockMutex() { @@ -223,15 +233,21 @@ box64context_t *NewBox64Context(int argc) context->system = NewBridge(); // Cannot use Bridge name as the map is not initialized yet // create vsyscall - context->vsyscall = AddBridge(context->system, vFEv, x64Syscall, 0, NULL); + context->vsyscall = AddBridge(context->system, vFEv, box64_is32bits?x86Syscall:x64Syscall, 0, NULL); // create the vsyscalls - context->vsyscalls[0] = AddVSyscall(context->system, 96); - context->vsyscalls[1] = AddVSyscall(context->system, 201); - context->vsyscalls[2] = AddVSyscall(context->system, 309); - // create the alternate to map at address - addAlternate((void*)0xffffffffff600000, (void*)context->vsyscalls[0]); - addAlternate((void*)0xffffffffff600400, (void*)context->vsyscalls[1]); - addAlternate((void*)0xffffffffff600800, (void*)context->vsyscalls[2]); + if(box64_is32bits) { + #ifdef BOX32 + addAlternate((void*)0xffffe400, from_ptrv(context->vsyscall)); + #endif + } else { + context->vsyscalls[0] = AddVSyscall(context->system, 96); + context->vsyscalls[1] = AddVSyscall(context->system, 201); + context->vsyscalls[2] = AddVSyscall(context->system, 309); + // create the alternate to map at address + addAlternate((void*)0xffffffffff600000, (void*)context->vsyscalls[0]); + addAlternate((void*)0xffffffffff600400, (void*)context->vsyscalls[1]); + addAlternate((void*)0xffffffffff600800, (void*)context->vsyscalls[2]); + } // create exit bridge context->exit_bridge = AddBridge(context->system, NULL, NULL, 0, NULL); // get handle to box64 itself diff --git a/src/core.c b/src/core.c index 03859f12..5d85d08c 100644 --- a/src/core.c +++ b/src/core.c @@ -189,6 +189,7 @@ char* box64_custom_gstreamer = NULL; uintptr_t fmod_smc_start = 0; uintptr_t fmod_smc_end = 0; uint32_t default_gs = 0x53; +uint32_t default_fs = 0x53; int jit_gdb = 0; int box64_tcmalloc_minimal = 0; @@ -1269,7 +1270,11 @@ int GatherEnv(char*** dest, char** env, char* prog) (*dest)[idx++] = box_strdup("BOX64_PATH=.:bin"); } if(!ld_path) { + #ifdef BOX32 + (*dest)[idx++] = box_strdup("BOX64_LD_LIBRARY_PATH=.:lib:lib64:x86_64:bin64:libs64:i386:libs:bin"); + #else (*dest)[idx++] = box_strdup("BOX64_LD_LIBRARY_PATH=.:lib:lib64:x86_64:bin64:libs64"); + #endif } // add "_=prog" at the end... if(prog) { @@ -1382,24 +1387,7 @@ void LoadEnvVars(box64context_t *context) } } while(p); } - // check BOX64_LD_LIBRARY_PATH and load it - LoadEnvPath(&context->box64_ld_lib, ".:lib:lib64:x86_64:bin64:libs64", "BOX64_LD_LIBRARY_PATH"); - #ifndef TERMUX - if(FileExist("/lib/x86_64-linux-gnu", 0)) - AddPath("/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - if(FileExist("/usr/lib/x86_64-linux-gnu", 0)) - AddPath("/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - if(FileExist("/usr/x86_64-linux-gnu/lib", 0)) - AddPath("/usr/x86_64-linux-gnu/lib", &context->box64_ld_lib, 1); - if(FileExist("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", 0)) - AddPath("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - #else - //TODO: Add Termux Library Path - Lily - if(FileExist("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", 0)) - AddPath("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - #endif - if(getenv("LD_LIBRARY_PATH")) - PrependList(&context->box64_ld_lib, getenv("LD_LIBRARY_PATH"), 1); // in case some of the path are for x86 world + if(getenv("BOX64_EMULATED_LIBS")) { char* p = getenv("BOX64_EMULATED_LIBS"); ParseList(p, &context->box64_emulated_libs, 0); @@ -1498,6 +1486,54 @@ void LoadEnvVars(box64context_t *context) } EXPORTDYN +void LoadLDPath(box64context_t *context) +{ + // check BOX64_LD_LIBRARY_PATH and load it + #ifdef BOX32 + if(box64_is32bits) + LoadEnvPath(&context->box64_ld_lib, ".:lib:i386:bin:libs", "BOX64_LD_LIBRARY_PATH"); + else + #endif + LoadEnvPath(&context->box64_ld_lib, ".:lib:lib64:x86_64:bin64:libs64", "BOX64_LD_LIBRARY_PATH"); + #ifndef TERMUX + if(box64_is32bits) { + #ifdef BOX32 + if(FileExist("/lib/i386-linux-gnu", 0)) + AddPath("/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/i386-linux-gnu", 0)) + AddPath("/usr/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/i386-linux-gnu/lib", 0)) + AddPath("/usr/i386-linux-gnu/lib", &context->box64_ld_lib, 1); + if(FileExist("/data/data/com.termux/files/usr/glibc/lib/i386-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/glibc/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + #endif + } else { + if(FileExist("/lib/x86_64-linux-gnu", 0)) + AddPath("/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/x86_64-linux-gnu", 0)) + AddPath("/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/x86_64-linux-gnu/lib", 0)) + AddPath("/usr/x86_64-linux-gnu/lib", &context->box64_ld_lib, 1); + if(FileExist("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + } + #else + //TODO: Add Termux Library Path - Lily + if(box64_is32bits) { + #ifdef BOX32 + if(FileExist("/data/data/com.termux/files/usr/lib/i386-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + #endif + } else { + if(FileExist("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + } + #endif + if(getenv("LD_LIBRARY_PATH")) + PrependList(&context->box64_ld_lib, getenv("LD_LIBRARY_PATH"), 1); // in case some of the path are for x86 world +} + +EXPORTDYN void setupTraceInit() { #ifdef HAVE_TRACE @@ -1957,12 +1993,14 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // check if box86 is present { my_context->box86path = box_strdup(my_context->box64path); + #ifndef BOX32 char* p = strrchr(my_context->box86path, '6'); // get the 6 of box64 p[0] = '8'; p[1] = '6'; // change 64 to 86 if(!FileExist(my_context->box86path, IS_FILE)) { box_free(my_context->box86path); my_context->box86path = NULL; } + #endif } const char* prgname = strrchr(prog, '/'); if(!prgname) @@ -2089,9 +2127,12 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf box64_is32bits = FileIsX86ELF(my_context->fullpath); if(box64_is32bits) { printf_log(LOG_INFO, "BOX64: Using Box32 to load 32bits elf\n"); + loadProtectionFromMap(); reserveHighMem(); + init_pthread_helper_32(); } #endif + LoadLDPath(my_context); elfheader_t *elf_header = LoadAndCheckElfHeader(f, my_context->fullpath, 1); if(!elf_header) { int x86 = my_context->box86path?FileIsX86ELF(my_context->fullpath):0; @@ -2252,10 +2293,15 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // stack setup is much more complicated then just that! SetupInitialStack(emu); // starting here, the argv[] don't need free anymore SetupX64Emu(emu, NULL); - SetRSI(emu, my_context->argc); - SetRDX(emu, (uint64_t)my_context->argv); - SetRCX(emu, (uint64_t)my_context->envv); - SetRBP(emu, 0); // Frame pointer so to "No more frame pointer" + if(box64_is32bits) { + SetEAX(emu, my_context->argc); + SetEBX(emu, my_context->argv32); + } else { + SetRSI(emu, my_context->argc); + SetRDX(emu, (uint64_t)my_context->argv); + SetRCX(emu, (uint64_t)my_context->envv); + SetRBP(emu, 0); // Frame pointer so to "No more frame pointer" + } // child fork to handle traces pthread_atfork(NULL, NULL, my_child_fork); @@ -2339,10 +2385,19 @@ int emulate(x64emu_t* emu, elfheader_t* elf_header) // emulate! printf_log(LOG_DEBUG, "Start x64emu on Main\n"); // Stack is ready, with stacked: NULL env NULL argv argc - SetRIP(emu, my_context->ep); ResetFlags(emu); - Push64(emu, my_context->exit_bridge); // push to pop it just after - SetRDX(emu, Pop64(emu)); // RDX is exit function + #ifdef BOX32 + if(box64_is32bits) { + SetEIP(emu, my_context->ep); + Push32(emu, my_context->exit_bridge); // push to pop it just after + SetEDX(emu, Pop32(emu)); // RDX is exit function + } else + #endif + { + SetRIP(emu, my_context->ep); + Push64(emu, my_context->exit_bridge); // push to pop it just after + SetRDX(emu, Pop64(emu)); // RDX is exit function + } Run(emu, 0); // Get EAX int ret = GetEAX(emu); diff --git a/src/custommem.c b/src/custommem.c index 06b48328..5862ed13 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -1521,21 +1521,68 @@ static void atfork_child_custommem(void) // (re)init mutex if it was lock before the fork init_mutexes(); } - +#ifdef BOX32 +void reverveHigMem32(void) +{ + loadProtectionFromMap(); + uintptr_t cur_size = 1024LL*1024*1024*1024; // start with 1TB check + void* cur; + while(cur_size>=65536) { + cur = internal_mmap(NULL, cur_size, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + if((cur==MAP_FAILED) || (cur<(void*)0x100000000LL)) { + if(cur!=MAP_FAILED) { + //printf_log(LOG_DEBUG, " Failed to reserve high %p (%zx)\n", cur, cur_size); + internal_munmap(cur, cur_size); + } //else + // printf_log(LOG_DEBUG, " Failed to reserve %zx sized block\n", cur_size); + cur_size>>=1; + } else { + rb_set(mapallmem, (uintptr_t)cur, (uintptr_t)cur+cur_size, 1); + //printf_log(LOG_DEBUG, "Reserved high %p (%zx)\n", cur, cur_size); + } + } + printf_log(LOG_INFO, "Memory higher than 32bits reserved\n"); + if(box64_log>=LOG_DEBUG) { + uintptr_t start=0x100000000LL; + int prot; + uintptr_t bend; + while (bend!=0xffffffffffffffffLL) { + if(rb_get_end(mapallmem, start, &prot, &bend)) { + printf_log(LOG_DEBUG, " Reserved: %p - %p (%d)\n", (void*)start, (void*)bend, prot); + } + start = bend; + } + } +} +#endif void my_reserveHighMem() { static int reserved = 0; if(reserved || (!have48bits && !box64_is32bits)) return; reserved = 1; + #ifdef BOX32 + if(box64_is32bits) { + reverveHigMem32(); + return; + } + #endif uintptr_t cur = box64_is32bits?(1ULL<<32):(1ULL<<47); uintptr_t bend = 0; uint32_t prot; while (bend!=0xffffffffffffffffLL) { if(!rb_get_end(mapallmem, cur, &prot, &bend)) { - void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE|MAP_NORESERVE, -1, 0); - printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, strerror(errno)); - printf_log(LOG_DEBUG, "mmap %p-%p\n", cur, bend); + // create a border at 39bits... + if(cur<(1ULL<<39) && bend>(1ULL<<39)) + bend = 1ULL<<39; + // create a border at 47bits + if(cur<(1ULL<<47) && bend>(1ULL<<47)) + bend = 1ULL<<47; + // create a border at 48bits + if(cur<(1ULL<<48) && bend>(1ULL<<48)) + bend = 1ULL<<48; + void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, (ret==MAP_FAILED)?strerror(errno):"ok"); if(ret!=(void*)-1) { rb_set(mapallmem, cur, bend, 1); } diff --git a/src/dynarec/arm64/arm64_emitter.h b/src/dynarec/arm64/arm64_emitter.h index 0070af36..781e7980 100644 --- a/src/dynarec/arm64/arm64_emitter.h +++ b/src/dynarec/arm64/arm64_emitter.h @@ -283,13 +283,19 @@ int convert_bitmask(uint64_t bitmask); #define LDRx_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b011, 0, Rn, Rt)) #define LDRx_REG_LSL3(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b011, 1, Rn, Rt)) #define LDRx_REG_UXTW3(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b010, 1, Rn, Rt)) +#define LDRx_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b11, Rm, 0b110, 0, Rn, Rt)) #define LDRw_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) #define LDRw_REG_LSL2(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10, Rm, 0b011, 1, Rn, Rt)) +#define LDRw_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define LDRxw_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10+rex.w, Rm, 0b011, 0, Rn, Rt)) #define LDRz_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b011, 0, Rn, Rt)) +#define LDRxw_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b10+rex.w, Rm, 0b110, 0, Rn, Rt)) +#define LDRz_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b110, 0, Rn, Rt)) #define LDRB_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b00, Rm, 0b011, 0, Rn, Rt)) #define LDRB_REG_UXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b00, Rm, 0b010, 0, Rn, Rt)) +#define LDRB_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b00, Rm, 0b110, 0, Rn, Rt)) #define LDRH_REG(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b01, Rm, 0b011, 0, Rn, Rt)) +#define LDRH_REG_SXTW(Rt, Rn, Rm) EMIT(LDR_REG_gen(0b01, Rm, 0b110, 0, Rn, Rt)) #define LDRS_U12_gen(size, op1, opc, imm12, Rn, Rt) ((size)<<30 | 0b111<<27 | (op1)<<24 | (opc)<<22 | (imm12)<<10 | (Rn)<<5 | (Rt)) #define LDRSHx_U12(Rt, Rn, imm12) EMIT(LDRS_U12_gen(0b01, 0b01, 0b10, ((uint32_t)(imm12>>1))&0xfff, Rn, Rt)) @@ -301,6 +307,7 @@ int convert_bitmask(uint64_t bitmask); #define LDRS_REG_gen(size, Rm, option, S, Rn, Rt) ((size)<<30 | 0b111<<27 | 0b10<<22 | 1<<21 | (Rm)<<16 | (option)<<13 | (S)<<12 | (0b10)<<10 | (Rn)<<5 | (Rt)) #define LDRSW_REG(Rt, Rn, Rm) EMIT(LDRS_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) +#define LDRSW_REG_SXTW(Rt, Rn, Rm) EMIT(LDRS_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define LDR_PC_gen(opc, imm19, Rt) ((opc)<<30 | 0b011<<27 | (imm19)<<5 | (Rt)) #define LDRx_literal(Rt, imm19) EMIT(LDR_PC_gen(0b01, ((imm19)>>2)&0x7FFFF, Rt)) @@ -371,12 +378,18 @@ int convert_bitmask(uint64_t bitmask); #define STRx_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b011, 0, Rn, Rt)) #define STRx_REG_LSL3(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b011, 1, Rn, Rt)) #define STRx_REG_UXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b010, 0, Rn, Rt)) +#define STRx_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b110, 0, Rn, Rt)) #define STRw_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) #define STRw_REG_LSL2(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b011, 1, Rn, Rt)) +#define STRw_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define STRB_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b00, Rm, 0b011, 0, Rn, Rt)) +#define STRB_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b00, Rm, 0b110, 0, Rn, Rt)) #define STRH_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b01, Rm, 0b011, 0, Rn, Rt)) +#define STRH_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b01, Rm, 0b110, 0, Rn, Rt)) #define STRxw_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.w?0b11:0b10, Rm, 0b011, 0, Rn, Rt)) +#define STRxw_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.w?0b11:0b10, Rm, 0b110, 0, Rn, Rt)) #define STRz_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b011, 0, Rn, Rt)) +#define STRz_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b110, 0, Rn, Rt)) // LOAD/STORE PAIR #define MEMPAIR_gen(size, L, op2, imm7, Rt2, Rn, Rt) ((size)<<31 | 0b101<<27 | (op2)<<23 | (L)<<22 | (imm7)<<15 | (Rt2)<<10 | (Rn)<<5 | (Rt)) @@ -896,18 +909,24 @@ int convert_bitmask(uint64_t bitmask); #define VMEM_REG_gen(size, opc, Rm, option, S, Rn, Rt) ((size)<<30 | 0b111<<27 | 1<<26 | (opc)<<22 | 1<<21 | (Rm)<<16 | (option)<<13 | (S)<<12 | 0b10<<10 | (Rn)<<5 | (Rt)) #define VLDR32_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b011, 0, Rn, Dt)) +#define VLDR32_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b110, 0, Rn, Dt)) #define VLDR32_REG_LSL2(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b011, 1, Rn, Dt)) #define VLDR64_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b011, 0, Rn, Dt)) +#define VLDR64_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b110, 0, Rn, Dt)) #define VLDR64_REG_LSL3(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b011, 1, Rn, Dt)) #define VLDR128_REG(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b011, 0, Rn, Qt)) #define VLDR128_REG_LSL4(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b011, 1, Rn, Qt)) +#define VLDR128_REG_SXTW(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b110, 0, Rn, Qt)) #define VSTR32_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b011, 0, Rn, Dt)) #define VSTR32_REG_LSL2(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b011, 1, Rn, Dt)) +#define VSTR32_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b110, 0, Rn, Dt)) #define VSTR64_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b011, 0, Rn, Dt)) #define VSTR64_REG_LSL3(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b011, 1, Rn, Dt)) +#define VSTR64_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b110, 0, Rn, Dt)) #define VSTR128_REG(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b011, 0, Rn, Qt)) #define VSTR128_REG_LSL4(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b011, 1, Rn, Qt)) +#define VSTR128_REG_SXTW(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b110, 0, Rn, Qt)) #define VLDR_PC_gen(opc, imm19, Rt) ((opc)<<30 | 0b011<<27 | 1<<26 | (imm19)<<5 | (Rt)) #define VLDR32_literal(Vt, imm19) EMIT(VLDR_PC_gen(0b00, ((imm19)>>2)&0x7FFFF, Vt)) diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index 85b89e3a..6ff6d594 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -108,7 +108,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD64(v0, x4, fixedaddress); // upper part reseted } break; @@ -126,7 +126,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD32(v0, x4, fixedaddress); } break; @@ -148,7 +148,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST128(v0, x4, fixedaddress); SMWRITE2(); } @@ -165,7 +165,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST64(v0, x4, fixedaddress); SMWRITE2(); } @@ -182,7 +182,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST32(v0, x4, fixedaddress); SMWRITE2(); } @@ -206,7 +206,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD128(v0, ed, fixedaddress); } break; @@ -275,7 +275,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRB_REG(gd, ed, x4); + if(rex.is32bits) + LDRB_REG_SXTW(gd, x4, ed); + else + LDRB_REG(gd, ed, x4); } break; default: @@ -397,7 +400,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRSW_REG(gd, ed, x4); + if(rex.is32bits) + LDRSW_REG_SXTW(gd, x4, ed); + else + LDRSW_REG(gd, ed, x4); } } else { if(MODREG) { // reg <= reg @@ -406,7 +412,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRw_REG(gd, ed, x4); + if(rex.is32bits) + LDRw_REG_SXTW(gd, x4, ed); + else + LDRw_REG(gd, ed, x4); } } } @@ -639,7 +648,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRB_REG(x4, wback, x4); + if(rex.is32bits) + LDRB_REG_SXTW(x4, x4, wback); + else + LDRB_REG(x4, wback, x4); ed = x4; } BFIx(gb1, ed, gb2, 8); @@ -653,7 +665,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVxw_REG(xRAX+(nextop&7)+(rex.b<<3), gd); } else { // mem <= reg addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - STRxw_REG(gd, ed, x4); + if(rex.is32bits) + STRxw_REG_SXTW(gd, x4, ed); + else + STRxw_REG(gd, ed, x4); SMWRITE2(); } break; @@ -668,7 +683,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { // mem <= reg SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRxw_REG(gd, ed, x4); + if(rex.is32bits) + LDRxw_REG_SXTW(gd, x4, ed); + else + LDRxw_REG(gd, ed, x4); } break; @@ -698,7 +716,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRH_REG(x1, wback, x4); + if(rex.is32bits) + LDRH_REG_SXTW(x1, x4, wback); + else + LDRH_REG(x1, wback, x4); ed = x1; } STRH_U12(ed, xEmu, offsetof(x64emu_t, segs[u8])); @@ -714,11 +735,17 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin POP1z(x2); // so this can handle POP [ESP] and maybe some variant too addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0, 0, rex, NULL, 0, 0); if(ed==xRSP) { - STRz_REG(x2, ed, x4); + if(rex.is32bits) + STRz_REG_SXTW(x2, x4, ed); + else + STRz_REG(x2, ed, x4); } else { // complicated to just allow a segfault that can be recovered correctly SUBz_U12(xRSP, xRSP, rex.is32bits?4:8); - STRz_REG(x2, ed, x4); + if(rex.is32bits) + STRz_REG_SXTW(x2, x4, ed); + else + STRz_REG(x2, ed, x4); ADDz_U12(xRSP, xRSP, rex.is32bits?4:8); } } @@ -735,9 +762,25 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else u64 = F64; MOV64z(x1, u64); - LDRxw_REG(xRAX, x1, x4); + if(rex.is32bits) + LDRxw_REG_SXTW(xRAX, x4, x1); + else + LDRxw_REG(xRAX, x4, x1); + break; + case 0xA2: + INST_NAME("MOV FS:Od,AL"); + grab_segdata(dyn, addr, ninst, x4, seg); + if(rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + if(rex.is32bits) + STRB_REG_SXTW(xRAX, x4, x1); + else + STRB_REG(xRAX, x4, x1); + SMWRITE2(); break; - case 0xA3: INST_NAME("MOV FS:Od,EAX"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -746,7 +789,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else u64 = F64; MOV64z(x1, u64); - STRxw_REG(xRAX, x1, x4); + if(rex.is32bits) + STRxw_REG_SXTW(xRAX, x4, x1); + else + STRxw_REG(xRAX, x4, x1); SMWRITE2(); break; @@ -770,7 +816,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 1); u8 = F8; MOV32w(x3, u8); - STRB_REG(x3, ed, x4); + if(rex.is32bits) + STRB_REG_SXTW(x3, x4, ed); + else + STRB_REG(x3, ed, x4); SMWRITE2(); } break; @@ -786,7 +835,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 4); i64 = F32S; MOV64xw(x3, i64); - STRxw_REG(x3, ed, x4); + if(rex.is32bits) + STRxw_REG_SXTW(x3, x4, ed); + else + STRxw_REG(x3, ed, x4); SMWRITE2(); } break; diff --git a/src/dynarec/arm64/dynarec_arm64_6664.c b/src/dynarec/arm64/dynarec_arm64_6664.c index 4b33fab6..30a28012 100644 --- a/src/dynarec/arm64/dynarec_arm64_6664.c +++ b/src/dynarec/arm64/dynarec_arm64_6664.c @@ -62,7 +62,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); v1 = fpu_get_scratch(dyn, ninst); - VLDR64_REG(v1, ed, x4); + if(rex.is32bits) + VLDR64_REG_SXTW(v1, x4, ed); + else + VLDR64_REG(v1, ed, x4); } FCMPD(v0, v1); FCOMI(x1, x2); @@ -80,7 +83,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); SMREAD(); - VLDR128_REG(v0, ed, x4); + if(rex.is32bits) + VLDR128_REG_SXTW(v0, x4, ed); + else + VLDR128_REG(v0, ed, x4); } break; @@ -94,7 +100,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - VSTR128_REG(v0, ed, x4); + if(rex.is32bits) + VSTR128_REG_SXTW(v0, x4, ed); + else + VSTR128_REG(v0, ed, x4); SMWRITE2(); } break; @@ -110,7 +119,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - VSTR64_REG(v0, ed, x4); + if(rex.is32bits) + VSTR64_REG_SXTW(v0, x4, ed); + else + VSTR64_REG(v0, ed, x4); SMWRITE(); } break; @@ -229,7 +241,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n if(rex.w) { STRx_REG(gd, ed, x4); } else { - STRH_REG(gd, ed, x4); + if(rex.is32bits) + STRH_REG_SXTW(gd, x4, ed); + else + STRH_REG(gd, ed, x4); } SMWRITE(); } @@ -255,7 +270,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n if(rex.w) { LDRx_REG(gd, ed, x4); } else { - LDRH_REG(x1, ed, x4); + if(rex.is32bits) + LDRH_REG_SXTW(x1, x4, ed); + else + LDRH_REG(x1, ed, x4); BFIx(gd, x1, 0, 16); } } diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 7810293b..06e7705b 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -213,10 +213,13 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRxw_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRxw_REG_SXTW(x1, O, wback); \ + else \ + LDRxw_REG(x1, wback, O); \ ed = x1; \ } -#define WBACKO(O) if(wback) {STRxw_REG(ed, wback, O); SMWRITE2();} +#define WBACKO(O) if(wback) {if(rex.is32bits) STRxw_REG_SXTW(ed, O, wback); else STRxw_REG(ed, wback, O); SMWRITE2();} //GETEDOx can use r1 for ed, and r2 for wback. wback is 0 if ed is xEAX..xEDI #define GETEDOx(O, D) if(MODREG) { \ ed = xRAX+(nextop&7)+(rex.b<<3); \ @@ -224,7 +227,10 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRx_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRx_REG_SXTW(x1, O, wback); \ + else \ + LDRx_REG(x1, wback, O); \ ed = x1; \ } //GETEDOz can use r1 for ed, and r2 for wback. wback is 0 if ed is xEAX..xEDI @@ -234,7 +240,10 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRz_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRz_REG_SXTW(x1, O, wback); \ + else \ + LDRz_REG(x1, wback, O); \ ed = x1; \ } #define GETSEDOw(O, D) if((nextop&0xC0)==0xC0) { \ @@ -245,7 +254,10 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, D); \ - LDRSW_REG(x1, wback, O); \ + if(rex.is32bits) \ + LDRSW_REG_SXTW(x1, O, wback); \ + else \ + LDRSW_REG(x1, wback, O); \ wb = ed = x1; \ } //FAKEELike GETED, but doesn't get anything @@ -304,7 +316,7 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<1, (1<<1)-1, rex, NULL, 0, D); \ - ADDx_REG(x3, wback, i); \ + ADDz_REG(x3, wback, i); \ if(wback!=x3) wback = x3; \ LDH(i, wback, fixedaddress);\ wb1 = 1; \ @@ -365,7 +377,7 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff, 0, rex, NULL, 0, D); \ - ADDx_REG(x3, wback, i); \ + ADDz_REG(x3, wback, i); \ if(wback!=x3) wback = x3; \ LDB(i, wback, fixedaddress);\ wb1 = 1; \ diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index 1a389b94..915044eb 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -104,10 +104,15 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) multiuint_t old_res_sav= emu->res_sav; deferred_flags_t old_df_sav= emu->df_sav; // uc_link - x64_ucontext_t* old_uc_link = emu->uc_link; + void* old_uc_link = emu->uc_link; emu->uc_link = NULL; - PushExit(emu); + #ifdef BOX32 + if(box64_is32bits) + PushExit_32(emu); + else + #endif + PushExit(emu); R_RIP = addr; emu->df = d_none; DynaRun(emu); @@ -137,6 +142,9 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) } int my_setcontext(x64emu_t* emu, void* ucp); +#ifdef BOX32 +int my32_setcontext(x64emu_t* emu, void* ucp); +#endif void DynaRun(x64emu_t* emu) { // prepare setjump for signal handling @@ -206,7 +214,12 @@ void DynaRun(x64emu_t* emu) } if(emu->quit && emu->uc_link) { emu->quit = 0; - my_setcontext(emu, emu->uc_link); + #ifdef BOX32 + if(box64_is32bits) + my32_setcontext(emu, emu->uc_link); + else + #endif + my_setcontext(emu, emu->uc_link); } } #endif diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index 9c212fea..24528fa1 100644 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -111,7 +111,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int #endif dyn->f.dfnone_here = 0; NEW_INST; - MESSAGE(LOG_DUMP, "New Instruction x64:%p, native:%p\n", (void*)addr, (void*)dyn->block); + MESSAGE(LOG_DUMP, "New Instruction %s:%p, native:%p\n", is32bits?"x86":"x64",(void*)addr, (void*)dyn->block); if(!ninst) { GOTEST(x1, x2); } diff --git a/src/elfs/elfhash.c b/src/elfs/elfhash.c index 966a18b7..ebb81285 100644 --- a/src/elfs/elfhash.c +++ b/src/elfs/elfhash.c @@ -78,7 +78,12 @@ const char* GetParentSymbolVersion(elfheader_t* h, int version) return box64_is32bits?GetParentSymbolVersion32(h, version):GetParentSymbolVersion64(h, version); } -uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) { /* TODO */ return (uint16_t)-1; } +uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) +#ifndef BOX32 + { return (uint16_t)-1; } +#else + ; +#endif uint16_t GetParentSymbolVersionFlag64(elfheader_t* h, int index) { if(!h->VerDef._64 || (index<1)) @@ -97,7 +102,12 @@ uint16_t GetParentSymbolVersionFlag(elfheader_t* h, int index) return box64_is32bits?GetParentSymbolVersionFlag32(h, index):GetParentSymbolVersionFlag64(h, index); } -uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) { /* TODO */ return (uint16_t)-1; } +uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) +#ifndef BOX32 +{ return (uint16_t)-1; } +#else + ; +#endif uint16_t GetSymbolVersionFlag64(elfheader_t* h, int version) { if(version<2) diff --git a/src/elfs/elfhash32.c b/src/elfs/elfhash32.c index 00423b0a..3773e59a 100644 --- a/src/elfs/elfhash32.c +++ b/src/elfs/elfhash32.c @@ -41,6 +41,40 @@ static int SymbolMatch(elfheader_t* h, uint32_t i, int ver, const char* vername, return strcmp(vername, symvername)?0:1; } +uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) +{ + if(!h->VerDef._32 || (index<1)) + return (uint16_t)-1; + Elf32_Verdef *def = (Elf32_Verdef*)((uintptr_t)h->VerDef._32 + h->delta); + while(def) { + if(def->vd_ndx==index) { + return def->vd_flags; + } + def = def->vd_next?((Elf32_Verdef*)((uintptr_t)def + def->vd_next)):NULL; + } + return (uint16_t)-1; +} + +uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) +{ + if(version<2) + return (uint16_t)-1; + if(h->VerNeed._32) { + Elf32_Verneed *ver = (Elf32_Verneed*)((uintptr_t)h->VerNeed._32 + h->delta); + while(ver) { + Elf32_Vernaux *aux = (Elf32_Vernaux*)((uintptr_t)ver + ver->vn_aux); + for(int j=0; j<ver->vn_cnt; ++j) { + if(aux->vna_other==version) + return aux->vna_flags; + aux = (Elf32_Vernaux*)((uintptr_t)aux + aux->vna_next); + } + ver = ver->vn_next?((Elf32_Verneed*)((uintptr_t)ver + ver->vn_next)):NULL; + } + } + return GetParentSymbolVersionFlag32(h, version); // if symbol is "internal", use Def table instead +} + + static Elf32_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) { // Prepare hash table @@ -90,16 +124,16 @@ static Elf32_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, c const uint32_t symoffset = hashtab[1]; const uint32_t bloom_size = hashtab[2]; const uint32_t bloom_shift = hashtab[3]; - const uint64_t *blooms = (uint64_t*)&hashtab[4]; + const uint32_t *blooms = (uint32_t*)&hashtab[4]; const uint32_t *buckets = (uint32_t*)&blooms[bloom_size]; const uint32_t *chains = &buckets[nbuckets]; // get hash from symname to lookup const uint32_t hash = new_elf_hash(symname); // early check with bloom: if at least one bit is not set, a symbol is surely missing. - uint64_t word = blooms[(hash/64)%bloom_size]; - uint64_t mask = 0 - | 1LL << (hash%64) - | 1LL << ((hash>>bloom_shift)%64); + uint32_t word = blooms[(hash/32)%bloom_size]; + uint32_t mask = 0 + | 1LL << (hash%32) + | 1LL << ((hash>>bloom_shift)%32); if ((word & mask) != mask) { return NULL; } @@ -127,7 +161,7 @@ static void new_elf_hash_dump(elfheader_t* h) const uint32_t symoffset = hashtab[1]; const uint32_t bloom_size = hashtab[2]; const uint32_t bloom_shift = hashtab[3]; - const uint64_t *blooms = (uint64_t*)&hashtab[4]; + const uint32_t *blooms = (uint32_t*)&hashtab[4]; const uint32_t *buckets = (uint32_t*)&blooms[bloom_size]; const uint32_t *chains = &buckets[nbuckets]; printf_log(LOG_NONE, "===============Dump GNU_HASH from %s\n", h->name); diff --git a/src/elfs/elfload_dump.c b/src/elfs/elfload_dump.c index 18d4dbc6..95fc70d3 100644 --- a/src/elfs/elfload_dump.c +++ b/src/elfs/elfload_dump.c @@ -9,10 +9,6 @@ #include "elfload_dump.h" #include "elfloader_private.h" -#ifndef SHT_CHECKSUM -#define SHT_CHECKSUM 0x6ffffff8 -#endif - static const char* DumpSection(Elf64_Shdr *s, char* SST) { static char buff[400]; switch (s->sh_type) { diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 248c4282..d251abaa 100644 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -875,7 +875,12 @@ int RelocateElf(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, e return box64_is32bits?RelocateElf32(maplib, local_maplib, bindnow, deepbind, head):RelocateElf64(maplib, local_maplib, bindnow, deepbind, head); } -int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) { /* TODO */ return -1; } +int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +#ifndef BOX32 +{ return -1; } +#else + ; +#endif int RelocateElfPlt64(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) { int need_resolver = 0; @@ -953,7 +958,12 @@ uintptr_t GetLastByte(elfheader_t* h) #endif void checkHookedSymbols(elfheader_t* h); // in mallochook.c -void AddSymbols32(lib_t *maplib, elfheader_t* h) { /* TODO */ } +void AddSymbols32(lib_t *maplib, elfheader_t* h) +#ifndef BOX32 +{ } +#else + ; +#endif void AddSymbols(lib_t *maplib, elfheader_t* h) { if(box64_is32bits) { @@ -1121,15 +1131,10 @@ void startMallocHook(); #else void startMallocHook() {} #endif -void RunElfInit32(elfheader_t* h, x64emu_t *emu) { /* TODO*/ } void RunElfInit(elfheader_t* h, x64emu_t *emu) { if(!h || h->init_done) return; - if(box64_is32bits) { - RunElfInit32(h, emu); - return; - } // reset Segs Cache memset(emu->segs_serial, 0, sizeof(emu->segs_serial)); uintptr_t p = h->initentry + h->delta; @@ -1157,11 +1162,24 @@ void RunElfInit(elfheader_t* h, x64emu_t *emu) RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); printf_dump(LOG_DEBUG, "Done Init for %s\n", ElfName(h)); // and check init array now - Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); - for (size_t i=0; i<h->initarray_sz; ++i) { - if(addr[i]) { - printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), (void*)addr[i]); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + #ifdef BOX32 + if(box64_is32bits) { + Elf32_Addr *addr = (Elf32_Addr*)(h->initarray + h->delta); + for (size_t i=0; i<h->initarray_sz; ++i) { + if(addr[i]) { + printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + } + } + } else + #endif + { + Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); + for (size_t i=0; i<h->initarray_sz; ++i) { + if(addr[i]) { + printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), (void*)addr[i]); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + } } } @@ -1191,15 +1209,10 @@ void RunDeferredElfInit(x64emu_t *emu) box_free(List); } -void RunElfFini32(elfheader_t* h, x64emu_t *emu) { /* TODO */ } void RunElfFini(elfheader_t* h, x64emu_t *emu) { if(!h || h->fini_done || !h->init_done) return; - if(box64_is32bits) { - RunElfFini32(h, emu); - return; - } h->fini_done = 1; // Call the registered cxa_atexit functions CallCleanup(emu, h); @@ -1208,10 +1221,21 @@ void RunElfFini(elfheader_t* h, x64emu_t *emu) printf_log(LOG_DEBUG, "Android does not support Fini for %s\n", ElfName(h)); #else // first check fini array - Elf64_Addr *addr = (Elf64_Addr*)(h->finiarray + h->delta); - for (int i=h->finiarray_sz-1; i>=0; --i) { - printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + #ifdef BOX32 + if(box64_is32bits) { + Elf32_Addr *addr = (Elf32_Addr*)(h->finiarray + h->delta); + for (int i=h->finiarray_sz-1; i>=0; --i) { + printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + } + } else + #endif + { + Elf64_Addr *addr = (Elf64_Addr*)(h->finiarray + h->delta); + for (int i=h->finiarray_sz-1; i>=0; --i) { + printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + } } // then the "old-style" fini if(h->finientry) { @@ -1499,7 +1523,12 @@ EXPORT int my_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) { return ret; } -void ResetSpecialCaseMainElf32(elfheader_t* h) { /* TODO */ } +void ResetSpecialCaseMainElf32(elfheader_t* h) +#ifndef BOX32 +{ } +#else + ; +#endif void ResetSpecialCaseMainElf(elfheader_t* h) { if(box64_is32bits) { @@ -1620,7 +1649,12 @@ static Elf64_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t return sym; } -void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { /* TOODO */ return NULL; } +void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif void* ElfGetLocalSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); @@ -1636,7 +1670,12 @@ void* ElfGetLocalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *e return box64_is32bits?ElfGetLocalSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetLocalSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); } -void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { /*T ODO */ return NULL; } +void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif void* ElfGetGlobalSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); @@ -1652,7 +1691,12 @@ void* ElfGetGlobalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t * return box64_is32bits?ElfGetGlobalSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetGlobalSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); } -void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { /* TODO */ return NULL; } +void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif void* ElfGetWeakSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); @@ -1668,7 +1712,12 @@ void* ElfGetWeakSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *en return box64_is32bits?ElfGetWeakSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetWeakSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); } -int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) { /* TODO */ return 0; } +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif int ElfGetSymTabStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) { Elf64_Sym* sym = ElfSymTabLookup64(head, symname); diff --git a/src/elfs/elfloader32.c b/src/elfs/elfloader32.c index 3b30bc07..62a3918e 100644 --- a/src/elfs/elfloader32.c +++ b/src/elfs/elfloader32.c @@ -42,6 +42,12 @@ #include "x64tls.h" #include "box32.h" +ptr_t pltResolver32 = ~(ptr_t)0; + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + // return the index of header (-1 if it doesn't exist) static int getElfIndex(box64context_t* ctx, elfheader_t* head) { for (int i=0; i<ctx->elfsize; ++i) @@ -60,6 +66,68 @@ static elfheader_t* checkElfLib(elfheader_t* h, library_t* lib) return h; } +static Elf32_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLookup32(head, symname, *ver, *vername, local, *veropt); + if(!sym) return NULL; + if(head->VerSym && !*veropt) { + int idx = ((uintptr_t)sym - (uintptr_t)head->DynSym._32)/sizeof(Elf32_Sym); + int version = ((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[idx]; + if(version!=-1) version &=0x7fff; + const char* symvername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + if(version>1 && *ver<2 && (flags==0)) { + *ver = version; + *vername = symvername; + *veropt = 1; + } else if(flags==0 && !*veropt && version>1 && *ver>1 && !strcmp(symvername, *vername)) { + *veropt = 1; + } + } + if(!sym->st_shndx) return NULL; + int vis = ELF32_ST_VISIBILITY(sym->st_other); + if(vis==STV_HIDDEN && !local) + return NULL; + return sym; +} + + +static void GrabX32CopyMainElfReloc(elfheader_t* head) +{ + if(head->rela) { + int cnt = head->relasz / head->relaent; + Elf32_Rela* rela = (Elf32_Rela *)(head->rela + head->delta); + printf_dump(LOG_DEBUG, "Grabbing R_386_COPY Relocation(s) in advance for %s\n", head->name); + for (int i=0; i<cnt; ++i) { + int t = ELF32_R_TYPE(rela[i].r_info); + if(t == R_386_COPY) { + Elf32_Sym *sym = &head->DynSym._32[ELF32_R_SYM(rela[i].r_info)]; + const char* symname = SymName32(head, sym); + int version = head->VerSym?((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[ELF32_R_SYM(rela[i].r_info)]:-1; + if(version!=-1) version &=0x7fff; + const char* vername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + int veropt = flags?0:1; + uintptr_t offs = sym->st_value + head->delta; + AddUniqueSymbol(my_context->globdata, symname, offs, sym->st_size, version, vername, veropt); + } + } + } +} + +void checkHookedSymbols(elfheader_t* h); +void AddSymbols32(lib_t *maplib, elfheader_t* h) +{ + //if(box64_dump && h->hash) old_elf_hash_dump(h); + //if(box64_dump && h->gnu_hash) new_elf_hash_dump(h); + if(box64_dump && h->DynSym._32) DumpDynSym32(h); + if(h==my_context->elfs[0]) + GrabX32CopyMainElfReloc(h); + #ifndef STATICBUILD + checkHookedSymbols(h); + #endif +} + int AllocLoadElfMemory32(box64context_t* context, elfheader_t* head, int mainbin) { ptr_t offs = 0; @@ -624,3 +692,199 @@ int RelocateElf32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, } return 0; } + +int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +{ + int need_resolver = 0; + if(0 && (head->flags&DF_BIND_NOW) && !bindnow) { // disable for now, needs more symbol in a fow libs like gtk and nss3 + bindnow = 1; + printf_log(LOG_DEBUG, "Forcing %s to Bind Now\n", head->name); + } + if(head->pltrel) { + int cnt = head->pltsz / head->pltent; + if(head->pltrel==DT_REL) { + DumpRelTable32(head, cnt, (Elf32_Rel *)(head->jmprel + head->delta), "PLT"); + printf_log(LOG_DEBUG, "Applying %d PLT Relocation(s) for %s\n", cnt, head->name); + if(RelocateElfREL(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rel *)(head->jmprel + head->delta), &need_resolver)) + return -1; + } else if(head->pltrel==DT_RELA) { + DumpRelATable32(head, cnt, (Elf32_Rela *)(head->jmprel + head->delta), "PLT"); + printf_log(LOG_DEBUG, "Applying %d PLT Relocation(s) with Addend for %s\n", cnt, head->name); + if(RelocateElfRELA(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rela *)(head->jmprel + head->delta), &need_resolver)) + return -1; + } + if(need_resolver) { + if(pltResolver32==~(ptr_t)0) { + pltResolver32 = AddBridge(my_context->system, vFEv, PltResolver32, 0, "(PltResolver)"); + } + if(head->pltgot) { + *(ptr_t*)from_ptrv(head->pltgot+head->delta+8) = pltResolver32; + *(ptr_t*)from_ptrv(head->pltgot+head->delta+4) = to_ptrv(head); + printf_log(LOG_DEBUG, "PLT Resolver injected in plt.got at %p\n", from_ptrv(head->pltgot+head->delta+8)); + } else if(head->got) { + *(ptr_t*)from_ptrv(head->got+head->delta+8) = pltResolver32; + *(ptr_t*)from_ptrv(head->got+head->delta+4) = to_ptrv(head); + printf_log(LOG_DEBUG, "PLT Resolver injected in got at %p\n", from_ptrv(head->got+head->delta+8)); + } + } + } + return 0; +} + +void ResetSpecialCaseMainElf32(elfheader_t* h) +{ + Elf32_Sym *sym = NULL; + for (uint32_t i=0; i<h->numDynSym; ++i) { + if(h->DynSym._32[i].st_info == 17) { + sym = h->DynSym._32+i; + const char * symname = h->DynStr+sym->st_name; + if(strcmp(symname, "_IO_2_1_stderr_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stderr, sym->st_size); + my__IO_2_1_stderr_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stderr_ to %p\n", my__IO_2_1_stderr_); + } else + if(strcmp(symname, "_IO_2_1_stdin_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdin, sym->st_size); + my__IO_2_1_stdin_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stdin_ to %p\n", my__IO_2_1_stdin_); + } else + if(strcmp(symname, "_IO_2_1_stdout_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdout, sym->st_size); + my__IO_2_1_stdout_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stdout_ to %p\n", my__IO_2_1_stdout_); + } else + if(strcmp(symname, "_IO_stderr_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stderr, sym->st_size); + my__IO_2_1_stderr_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stderr_ to %p\n", my__IO_2_1_stderr_); + } else + if(strcmp(symname, "_IO_stdin_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdin, sym->st_size); + my__IO_2_1_stdin_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stdin_ to %p\n", my__IO_2_1_stdin_); + } else + if(strcmp(symname, "_IO_stdout_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdout, sym->st_size); + my__IO_2_1_stdout_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stdout_ to %p\n", my__IO_2_1_stdout_); + } + } + } +} + +void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_LOCAL) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_GLOBAL && bind!=STB_GNU_UNIQUE) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_WEAK) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +{ + Elf32_Sym* sym = ElfSymTabLookup32(head, symname); + if(!sym) return 0; + if(!sym->st_shndx) return 0; + if(!sym->st_size) return 0; //needed? + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return 1; +} + +EXPORT void PltResolver32(x64emu_t* emu) +{ + ptr_t addr = Pop32(emu); + int slot = (int)Pop32(emu); + elfheader_t *h = (elfheader_t*)from_ptrv(addr); + library_t* lib = h->lib; + lib_t* local_maplib = GetMaplib(lib); + int deepbind = GetDeepBind(lib); + printf_dump(LOG_DEBUG, "PltResolver32: Addr=%p, Slot=%d Return=%p: elf is %s (VerSym=%p)\n", from_ptrv(addr), slot, *(ptr_t*)from_ptrv(R_ESP), h->name, h->VerSym); + + Elf32_Rel * rel = (Elf32_Rel *)(from_ptrv(h->jmprel + h->delta + slot)); + + Elf32_Sym *sym = &h->DynSym._32[ELF32_R_SYM(rel->r_info)]; + int bind = ELF32_ST_BIND(sym->st_info); + const char* symname = SymName32(h, sym); + int version = h->VerSym?((Elf32_Half*)((uintptr_t)h->VerSym+h->delta))[ELF32_R_SYM(rel->r_info)]:-1; + if(version!=-1) version &= 0x7fff; + const char* vername = GetSymbolVersion(h, version); + Elf32_Half flags = GetSymbolVersionFlag(h, version); + int veropt = flags?0:1; + ptr_t *p = (uint32_t*)from_ptrv(rel->r_offset + h->delta); + uintptr_t offs = 0; + uintptr_t end = 0; + + Elf32_Sym *elfsym = NULL; + if(bind==STB_LOCAL) { + elfsym = ElfDynSymLookup32(h, symname); + if(elfsym && elfsym->st_shndx) { + offs = elfsym->st_value + h->delta; + end = offs + elfsym->st_size; + } + if(!offs && !end && local_maplib && deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetLocalSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } else if(bind==STB_WEAK) { + if(local_maplib && deepbind) + GetGlobalWeakSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + else + GetGlobalWeakSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalWeakSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } else { + if(!offs && !end && local_maplib && deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetGlobalSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } + + if (!offs) { + printf_log(LOG_NONE, "Error: PltResolver32: Symbol %s(ver %d: %s%s%s) not found, cannot apply R_386_JMP_SLOT %p (%p) in %s\n", symname, version, symname, vername?"@":"", vername?vername:"", p, from_ptrv(*p), h->name); + emu->quit = 1; + return; + } else { + elfheader_t* sym_elf = FindElfSymbol(my_context, elfsym); + offs = (uintptr_t)getAlternate(from_ptrv(offs)); + + if(p) { + printf_dump(LOG_DEBUG, " Apply %s R_386_JMP_SLOT %p with sym=%s(ver %d: %s%s%s) (%p -> %p / %s)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, version, symname, vername?"@":"", vername?vername:"",from_ptrv(*p), from_ptrv(offs), ElfName(FindElfAddress(my_context, offs))); + *p = offs; + } else { + printf_log(LOG_NONE, "PltResolver32: Warning, Symbol %s(ver %d: %s%s%s) found, but Jump Slot Offset is NULL \n", symname, version, symname, vername?"@":"", vername?vername:""); + } + } + + // jmp to function + R_EIP = offs; +} diff --git a/src/elfs/elfloader_private.h b/src/elfs/elfloader_private.h index 6bcf6d82..535dbfad 100644 --- a/src/elfs/elfloader_private.h +++ b/src/elfs/elfloader_private.h @@ -194,8 +194,12 @@ typedef struct elfheader_s { #define STB_GNU_UNIQUE 10 #endif +#ifndef ELF32_ST_VISIBILITY +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#endif + #ifndef ELF64_ST_VISIBILITY -#define ELF64_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) #endif elfheader_t* ParseElfHeader32(FILE* f, const char* name, int exec); diff --git a/src/elfs/elfparser32.c b/src/elfs/elfparser32.c index b4bb78e4..376bb34d 100755 --- a/src/elfs/elfparser32.c +++ b/src/elfs/elfparser32.c @@ -252,8 +252,10 @@ elfheader_t* ParseElfHeader32(FILE* f, const char* name, int exec) printf_log(LOG_DEBUG, "The DT_INIT_ARRAYSZ is %d\n", h->initarray_sz); break; case DT_PREINIT_ARRAYSZ: - if(val) - printf_log(LOG_NONE, "Warning, PreInit Array (size=%d) present and ignored!\n", val); + #ifndef ANDROID + if(val) + printf_log(LOG_NONE, "Warning, PreInit Array (size=%d) present and ignored!\n", val); + #endif break; case DT_FINI: // Exit hook h->finientry = ptr; diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c index f0865299..ddfa0fc6 100644 --- a/src/emu/x64emu.c +++ b/src/emu/x64emu.c @@ -64,11 +64,29 @@ static void internalX64Setup(x64emu_t* emu, box64context_t *context, uintptr_t s // set default value R_RIP = start; R_RSP = (stack + stacksize) & ~7; // align stack start, always + #ifdef BOX32 + if(box64_is32bits) { + if(stack>=0x100000000LL) { + printf_log(LOG_NONE, "BOX32: Stack pointer too high (%p), aborting\n", (void*)stack); + abort(); + } + if(R_RSP>=0x100000000LL) { // special case, stack is just a bit too high + R_RSP = 0x100000000LL - 16; + } + } + #endif // fake init of segments... - emu->segs[_CS] = 0x33; - emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; - emu->segs[_FS] = 0x43; - emu->segs[_GS] = default_gs; + if(box64_is32bits) { + emu->segs[_CS] = 0x23; + emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; + emu->segs[_FS] = default_fs; + emu->segs[_GS] = 0x33; + } else { + emu->segs[_CS] = 0x33; + emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; + emu->segs[_FS] = 0x43; + emu->segs[_GS] = default_gs; + } // setup fpu regs reset_fpu(emu); emu->mxcsr.x32 = 0x1f80; @@ -77,7 +95,7 @@ static void internalX64Setup(x64emu_t* emu, box64context_t *context, uintptr_t s EXPORTDYN x64emu_t *NewX64Emu(box64context_t *context, uintptr_t start, uintptr_t stack, int stacksize, int ownstack) { - printf_log(LOG_DEBUG, "Allocate a new X86_64 Emu, with EIP=%p and Stack=%p/0x%X\n", (void*)start, (void*)stack, stacksize); + printf_log(LOG_DEBUG, "Allocate a new X86_64 Emu, with %cIP=%p and Stack=%p/0x%X\n", box64_is32bits?'E':'R', (void*)start, (void*)stack, stacksize); x64emu_t *emu = (x64emu_t*)box_calloc(1, sizeof(x64emu_t)); @@ -161,7 +179,7 @@ void CallCleanup(x64emu_t *emu, elfheader_t* h) if(!h) return; for(int i=h->clean_sz-1; i>=0; --i) { - printf_log(LOG_DEBUG, "Call cleanup #%d\n", i); + printf_log(LOG_DEBUG, "Call cleanup #%d (args:%d, arg:%p)\n", i, h->cleanups[i].arg, h->cleanups[i].a); RunFunctionWithEmu(emu, 0, (uintptr_t)(h->cleanups[i].f), h->cleanups[i].arg, h->cleanups[i].a ); // now remove the cleanup if(i!=h->clean_sz-1) @@ -325,10 +343,14 @@ void SetEBP(x64emu_t *emu, uint32_t v) { R_EBP = v; } -//void SetESP(x64emu_t *emu, uint32_t v) -//{ -// R_ESP = v; -//} +void SetESP(x64emu_t *emu, uint32_t v) +{ + R_ESP = v; +} +void SetEIP(x64emu_t *emu, uint32_t v) +{ + R_EIP = v; +} void SetRAX(x64emu_t *emu, uint64_t v) { R_RAX = v; @@ -373,7 +395,7 @@ uint64_t GetRBP(x64emu_t *emu) { return R_RBP; } -/*void SetFS(x64emu_t *emu, uint16_t v) +void SetFS(x64emu_t *emu, uint16_t v) { emu->segs[_FS] = v; emu->segs_serial[_FS] = 0; @@ -381,7 +403,7 @@ uint64_t GetRBP(x64emu_t *emu) uint16_t GetFS(x64emu_t *emu) { return emu->segs[_FS]; -}*/ +} void ResetFlags(x64emu_t *emu) @@ -572,9 +594,14 @@ void EmuCall(x64emu_t* emu, uintptr_t addr) uint64_t old_rip = R_RIP; //Push64(emu, GetRBP(emu)); // set frame pointer //SetRBP(emu, GetRSP(emu)); // save RSP - R_RSP -= 200; - R_RSP &= ~63LL; - PushExit(emu); + //R_RSP -= 200; + //R_RSP &= ~63LL; + #ifdef BOX32 + if(box64_is32bits) + PushExit_32(emu); + else + #endif + PushExit(emu); R_RIP = addr; emu->df = d_none; Run(emu, 0); diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h index bef4a9a4..35bfd97e 100644 --- a/src/emu/x64emu_private.h +++ b/src/emu/x64emu_private.h @@ -5,6 +5,9 @@ typedef struct box64context_s box64context_t; typedef struct x64_ucontext_s x64_ucontext_t; +#ifdef BOX32 +typedef struct i386_ucontext_s i386_ucontext_t; +#endif #define ERR_UNIMPL 1 #define ERR_DIVBY0 2 @@ -116,6 +119,7 @@ typedef struct x64emu_s { uintptr_t prev2_ip; #endif // scratch stack, used for alignment of double and 64bits ints on arm. 200 elements should be enough + __int128_t dummy_align; // here to have scratch 128bits aligned uint64_t scratch[200]; // local stack, do be deleted when emu is freed void* stack2free; // this is the stack to free (can be NULL) @@ -126,7 +130,7 @@ typedef struct x64emu_s { uintptr_t old_savedsp; #endif - x64_ucontext_t *uc_link; // to handle setcontext + void* uc_link; // to handle setcontext (can be x64_ucontext_t or a i386_ucontext_t) int type; // EMUTYPE_xxx define } x64emu_t; diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c index dd1b439c..b0f452a2 100644 --- a/src/emu/x64int3.c +++ b/src/emu/x64int3.c @@ -88,6 +88,10 @@ static uint8_t Peek8(uintptr_t addr, uintptr_t offset) void x64Int3(x64emu_t* emu, uintptr_t* addr) { + if(box64_is32bits) { + x86Int3(emu,addr); + return; + } onebridge_t* bridge = (onebridge_t*)(*addr-1); if(Peek8(*addr, 0)=='S' && Peek8(*addr, 1)=='C') // Signature for "Out of x86 door" { @@ -393,4 +397,12 @@ void print_cycle_log(int loglevel) { } } } -} \ No newline at end of file +} + +#ifndef BOX32 +void x86Int3(x64emu_t* emu, uintptr_t* addr) +{ + printf_log(LOG_NONE, "Error: Calling 32bits wrapped function without box32 support built in\n"); + abort(); +} +#endif \ No newline at end of file diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 614bf91c..fbb92d1a 100644 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -27,6 +27,9 @@ #include "modrm.h" int my_setcontext(x64emu_t* emu, void* ucp); +#ifdef BOX32 +int my32_setcontext(x64emu_t* emu, void* ucp); +#endif #ifdef TEST_INTERPRETER int RunTest(x64test_t *test) @@ -2232,7 +2235,12 @@ if(emu->segs[_CS]!=0x33 && emu->segs[_CS]!=0x23) printf_log(LOG_NONE, "Warning, // setcontext handling else if(emu->quit && emu->uc_link) { emu->quit = 0; - my_setcontext(emu, emu->uc_link); + #ifdef BOX32 + if(box64_is32bits) + my32_setcontext(emu, emu->uc_link); + else + #endif + my_setcontext(emu, emu->uc_link); addr = R_RIP; goto x64emurun; } diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index fe8da3e5..7ceef8ab 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -639,7 +639,15 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) R_RAX = *(uint32_t*)(tlsdata+tmp64u); } break; - + case 0xA2: /* MOV Ob,AL */ + if(rex.is32bits) { + tmp32s = F32S; + *(uint8_t*)(uintptr_t)(tlsdata+tmp32s) = R_AL; + } else { + tmp64u = F64; + *(uint8_t*)(tlsdata+tmp64u) = R_AL; + } + break; case 0xA3: /* MOV FS:Od,EAX */ if(rex.is32bits) { tmp32s = F32S; diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index f94025ee..6055101a 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -24,6 +24,9 @@ #endif #include "x64tls.h" #include "bridge.h" +#ifdef BOX32 +#include "box32.h" +#endif #define PARITY(x) (((emu->x64emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0) #define XOR2(x) (((x) ^ ((x)>>1)) & 0x1) @@ -53,7 +56,7 @@ void EXPORT my___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) emu->quit = 1; // finished! } #else -int32_t EXPORT my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) +EXPORT int32_t my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) { (void)argc; (void)ubp_av; (void)fini; (void)rtld_fini; (void)stack_end; @@ -106,6 +109,54 @@ int32_t EXPORT my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, c } return (int)GetEAX(emu); } +#ifdef BOX32 +#ifdef ANDROID +void EXPORT my32___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) , int (*main)(int, char**, char**), void const * const structors ) +{ + //TODO: register fini + // let's cheat and set all args... + Push_32(emu, (uint32_t)my_context->envv32); + Push_32(emu, (uint32_t)my_context->argv32); + Push_32(emu, (uint32_t)my_context->argc); + + printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_init\n", my_context->argc, my_context->argv, my_context->envv, main); + // should call structors->preinit_array and structors->init_array! + // call main and finish + PushExit_32(emu); + R_EIP=to_ptrv(main); + + DynaRun(emu); + + emu->quit = 1; // finished! +} +#else +int32_t EXPORT my32___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) +{ + // let's cheat and set all args... + Push_32(emu, my_context->envv32); + Push_32(emu, my_context->argv32); + Push_32(emu, my_context->argc); + if(init) { + PushExit_32(emu); + R_EIP=to_ptrv(*init); + printf_log(LOG_DEBUG, "Calling init(%p) from __libc_start_main\n", *init); + DynaRun(emu); + if(emu->error) // any error, don't bother with more + return 0; + emu->quit = 0; + } + printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_start_main\n", my_context->argc, my_context->argv, my_context->envv, main); + // call main and finish + PushExit_32(emu); + R_EIP=to_ptrv(main); + + DynaRun(emu); + + emu->quit = 1; // finished! + return 0; +} +#endif +#endif #endif const char* GetNativeName(void* p) diff --git a/src/emu/x64run_private.h b/src/emu/x64run_private.h index 45a68659..925e14d5 100644 --- a/src/emu/x64run_private.h +++ b/src/emu/x64run_private.h @@ -50,6 +50,12 @@ static inline void Push16(x64emu_t *emu, uint16_t v) *((uint16_t*)R_RSP) = v; } +static inline void Push_32(x64emu_t *emu, uint32_t v) +{ + R_ESP -= 4; + *((uint32_t*)(uintptr_t)R_ESP) = v; +} + static inline void Push32(x64emu_t *emu, uint32_t v) { R_RSP -= 4; @@ -70,6 +76,13 @@ static inline uint16_t Pop16(x64emu_t *emu) return *st; } +static inline uint32_t Pop_32(x64emu_t *emu) +{ + uint32_t* st = (uint32_t*)(uintptr_t)R_RSP; + R_ESP += 4; + return *st; +} + static inline uint32_t Pop32(x64emu_t *emu) { uint32_t* st = (uint32_t*)R_RSP; @@ -90,6 +103,13 @@ static inline void PushExit(x64emu_t* emu) *((uint64_t*)R_RSP) = my_context->exit_bridge; } +#ifdef BOX32 +static inline void PushExit_32(x64emu_t* emu) +{ + R_ESP -= 4; + *((ptr_t*)(uintptr_t)R_ESP) = my_context->exit_bridge; +} +#endif // the op code definition can be found here: http://ref.x86asm.net/geek32.html reg64_t* GetECommon(x64emu_t* emu, uintptr_t* addr, rex_t rex, uint8_t m, uint8_t delta); @@ -232,6 +252,7 @@ void x64Syscall(x64emu_t *emu); void x64Int3(x64emu_t* emu, uintptr_t* addr); x64emu_t* x64emu_fork(x64emu_t* e, int forktype); void x86Syscall(x64emu_t *emu); //32bits syscall +void x86Int3(x64emu_t* emu, uintptr_t* addr); uintptr_t GetSegmentBaseEmu(x64emu_t* emu, int seg); #define GetGSBaseEmu(emu) GetSegmentBaseEmu(emu, _GS) diff --git a/src/emu/x64tls.c b/src/emu/x64tls.c index 78f83c74..99ae188c 100644 --- a/src/emu/x64tls.c +++ b/src/emu/x64tls.c @@ -11,6 +11,9 @@ #include "x64emu_private.h" #include "x64tls.h" #include "elfloader.h" +#ifdef BOX32 +#include "box32.h" +#endif typedef struct thread_area_s { @@ -118,12 +121,19 @@ uint32_t my_modify_ldt(x64emu_t* emu, int op, thread_area_t* td, int size) return (uint32_t)-1; } - /* - my_context->segtls[idx].base = td->base_addr; - my_context->segtls[idx].limit = td->limit; - pthread_setspecific(my_context->segtls[idx].key, (void*)my_context->segtls[idx].base); - */ - + if(box64_is32bits) { + emu->segs_serial[_GS] = 0; + my_context->segtls[idx].base = td->base_addr; + my_context->segtls[idx].limit = td->limit; + my_context->segtls[idx].present = 1; + if(idx>8 && !my_context->segtls[idx].key_init) { + pthread_key_create(&my_context->segtls[idx].key, NULL); + my_context->segtls[idx].key_init = 1; + } + if(my_context->segtls[idx].key_init) + pthread_setspecific(my_context->segtls[idx].key, (void*)my_context->segtls[idx].base); + } + ResetSegmentsCache(emu); return 0; @@ -220,6 +230,7 @@ int my_arch_prctl(x64emu_t *emu, int code, void* addr) #define POS_TLS 0x200 +#define POS_TLS_32 0x50 /* tls record should looks like: void* tcb 0x00 @@ -255,7 +266,7 @@ static tlsdatasize_t* setupTLSData(box64context_t* context) // Setup the GS segment: int dtssize = sizeDTS(context); int datasize = sizeTLSData(context->tlssize); - void *ptr_oversized = (char*)box_malloc(dtssize+POS_TLS+datasize); + void *ptr_oversized = (char*)box_malloc(dtssize+(box64_is32bits?POS_TLS_32:POS_TLS)+datasize); void *ptr = (void*)((uintptr_t)ptr_oversized + datasize); memcpy((void*)((uintptr_t)ptr-context->tlssize), context->tlsdata, context->tlssize); tlsdatasize_t *data = (tlsdatasize_t*)box_calloc(1, sizeof(tlsdatasize_t)); @@ -264,23 +275,45 @@ static tlsdatasize_t* setupTLSData(box64context_t* context) data->ptr = ptr_oversized; data->n_elfs = context->elfsize; pthread_setspecific(context->tlskey, data); - // copy canary... - memset((void*)((uintptr_t)ptr), 0, POS_TLS+dtssize); // set to 0 remining bytes - memcpy((void*)((uintptr_t)ptr+0x28), context->canary, sizeof(void*)); // put canary in place - uintptr_t tlsptr = (uintptr_t)ptr; - memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, sizeof(void*)); - memcpy((void*)((uintptr_t)ptr+0x10), &tlsptr, sizeof(void*)); // set tcb and self same address - uintptr_t dtp = (uintptr_t)ptr+POS_TLS; - memcpy((void*)(tlsptr+sizeof(void*)), &dtp, sizeof(void*)); - if(dtssize) { - for (int i=0; i<context->elfsize; ++i) { - // set pointer - dtp = (uintptr_t)ptr + GetTLSBase(context->elfs[i]); - *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16) = dtp; - *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16+8) = i; // index + #ifdef BOX32 + if(box64_is32bits) { + // copy canary... + memset((void*)((uintptr_t)ptr), 0, POS_TLS_32+dtssize); // set to 0 remining bytes + memcpy((void*)((uintptr_t)ptr+0x14), context->canary, 4); // put canary in place + ptr_t tlsptr = to_ptrv(ptr); + memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, 4); + ptr_t dtp = to_ptrv(ptr+POS_TLS_32); + memcpy(from_ptrv(tlsptr+0x4), &dtp, 4); + if(dtssize) { + for (int i=0; i<context->elfsize; ++i) { + // set pointer + dtp = to_ptrv(ptr + GetTLSBase(context->elfs[i])); + memcpy((void*)((uintptr_t)ptr+POS_TLS_32+i*8), &dtp, 4); + memcpy((void*)((uintptr_t)ptr+POS_TLS_32+i*8+4), &i, 4); // index + } } + memcpy((void*)((uintptr_t)ptr+0x10), &context->vsyscall, 4); // address of vsyscall + } else + #endif + { + // copy canary... + memset((void*)((uintptr_t)ptr), 0, POS_TLS+dtssize); // set to 0 remining bytes + memcpy((void*)((uintptr_t)ptr+0x28), context->canary, sizeof(void*)); // put canary in place + uintptr_t tlsptr = (uintptr_t)ptr; + memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, sizeof(void*)); + memcpy((void*)((uintptr_t)ptr+0x10), &tlsptr, sizeof(void*)); // set tcb and self same address + uintptr_t dtp = (uintptr_t)ptr+POS_TLS; + memcpy((void*)(tlsptr+sizeof(void*)), &dtp, sizeof(void*)); + if(dtssize) { + for (int i=0; i<context->elfsize; ++i) { + // set pointer + dtp = (uintptr_t)ptr + GetTLSBase(context->elfs[i]); + *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16) = dtp; + *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16+8) = i; // index + } + } + memcpy((void*)((uintptr_t)ptr+0x20), &context->vsyscall, sizeof(void*)); // address of vsyscall } - memcpy((void*)((uintptr_t)ptr+0x20), &context->vsyscall, sizeof(void*)); // address of vsyscall return data; } @@ -356,7 +389,9 @@ void* GetSegmentBase(uint32_t desc) return NULL; } int base = desc>>3; - if(base==0x8 && !my_context->segtls[base].key_init) + if(!box64_is32bits && base==0x8 && !my_context->segtls[base].key_init) + return GetSeg43Base(); + if(box64_is32bits && (base==0x6)) return GetSeg43Base(); if(base>15) { printf_log(LOG_NONE, "Warning, accessing segment unknown 0x%x or unset\n", desc); diff --git a/src/emu/x86int3.c b/src/emu/x86int3.c new file mode 100755 index 00000000..73f5b3ae --- /dev/null +++ b/src/emu/x86int3.c @@ -0,0 +1,347 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <dlfcn.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/syscall.h> +#include <sys/types.h> +#include <pthread.h> +#include <signal.h> + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64run_private.h" +#include "x87emu_private.h" +#include "x64primop.h" +#include "x64trace.h" +#include "wrapper32.h" +#include "box32context.h" +#include "librarian.h" +#include "signals.h" +#include "tools/bridge_private.h" + +#include <elf.h> +#include "elfloader.h" +#include "elfload_dump.h" +#include "elfs/elfloader_private.h" + +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); + +static uint64_t F64(uintptr_t* addr) { + uint64_t ret = *(uint64_t*)*addr; + *addr+=8; + return ret; +} +static uint8_t Peek8(uintptr_t addr, uintptr_t offset) +{ + return *(uint8_t*)(addr+offset); +} + +extern int errno; +void x86Int3(x64emu_t* emu, uintptr_t* addr) +{ + onebridge_t* bridge = (onebridge_t*)(*addr-1); + if(Peek8(*addr, 0)=='S' && Peek8(*addr, 1)=='C') // Signature for "Out of x86 door" + { + *addr += 2; + uintptr_t a = F64(addr); + if(a==0) { + R_RIP = *addr; + //printf_log(LOG_INFO, "%p:Exit x86 emu (emu=%p)\n", *(void**)(R_ESP), emu); + emu->quit=1; // normal quit + } else { + RESET_FLAGS(emu); + wrapper_t w = bridge->w; + a = F64(addr); + R_RIP = *addr; + /* This party can be used to trace only 1 specific lib (but it is quite slow) + elfheader_t *h = FindElfAddress(my_context, *(uintptr_t*)(R_ESP)); + int have_trace = 0; + if(h && strstr(ElfName(h), "libMiles")) have_trace = 1;*/ + if(box64_log>=LOG_DEBUG || cycle_log) { + int tid = GetTID(); + char t_buff[256] = "\0"; + char buff2[64] = "\0"; + char buff3[64] = "\0"; + int cycle_line = my_context->current_line; + if(cycle_log) { + my_context->current_line = (my_context->current_line+1)%cycle_log; + } + char* buff = cycle_log?my_context->log_call[cycle_line]:t_buff; + char* buffret = cycle_log?my_context->log_ret[cycle_line]:NULL; + if(buffret) buffret[0] = '\0'; + char *tmp; + int post = 0; + int perr = 0; + uint64_t *pu64 = NULL; + uint32_t *pu32 = NULL; + uint8_t *pu8 = NULL; + const char *s = bridge->name; + if(!s) + s = GetNativeName((void*)a); + if(a==(uintptr_t)PltResolver32) { + if(cycle_log) { + ptr_t addr = *((uint32_t*)from_ptrv(R_ESP)); + int slot = *((uint32_t*)from_ptrv(R_ESP+4)); + elfheader_t *h = (elfheader_t*)from_ptrv(addr); + Elf32_Rel * rel = (Elf32_Rel *)from_ptrv(h->jmprel + h->delta + slot); + Elf32_Sym *sym = &h->DynSym._32[ELF32_R_SYM(rel->r_info)]; + const char* symname = SymName32(h, sym); + snprintf(buff, 256, "%04d|PltResolver \"%s\"", tid, symname?symname:"???"); + } else { + snprintf(buff, 256, "%s", " ... "); + } + } else + if(strstr(s, "SDL_RWFromFile")==s || strstr(s, "SDL_RWFromFile")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%s, %s)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "glColor4f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f, %f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8), *(float*)from_ptr(R_ESP+12), *(float*)from_ptr(R_ESP+16)); + } else if(strstr(s, "glTexCoord2f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glVertex2f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glVertex3f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8), *(float*)from_ptr(R_ESP+12)); + } else if(strstr(s, "__open64")==s || strcmp(s, "open64")==0) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d, %d)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "opendir")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + perr = 1; + } else if(strstr(s, "__open")==s || !strcmp(s, "open") || !strcmp(s, "my_open64")) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d (,%d))", tid, *(void**)from_ptr(R_ESP), s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "shm_open")) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d, %d)", tid, *(void**)from_ptr(R_ESP), s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strcmp(s, "mkdir")==0) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d)", tid, *(void**)from_ptr(R_ESP), s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8)); + perr = 1; + } else if(!strcmp(s, "fopen")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + perr = 2; + } else if(!strcmp(s, "freopen")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 2; + } else if(!strcmp(s, "fopen64")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + perr = 2; + } else if(!strcmp(s, "chdir")) { + pu32=*(uint32_t**)from_ptr(R_ESP+4); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, pu32?((pu32==(uint32_t*)1)?"/1/":(char*)pu32):"/0/"); + } else if(strstr(s, "getenv")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + post = 2; + } else if(strstr(s, "putenv")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + } else if(strstr(s, "pread")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, %u, %d)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12), *(int32_t*)from_ptr(R_ESP+16)); + perr = 1; + } else if(!strcmp(s, "read")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, %u)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "ioctl")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, 0x%x, %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(int32_t*)from_ptr(R_ESP+8), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "statvfs64")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(void**)from_ptr(R_ESP+8)); + } else if(strstr(s, "index")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"), %i(%c))", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int32_t*)from_ptr(R_ESP+8), *(int32_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "rindex")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"), %i(%c))", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int32_t*)from_ptr(R_ESP+8), *(int32_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "__xstat64")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strcmp(s, "__xstat")==0) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "__lxstat64")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p(\"%s\"), %p)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "sem_timedwait")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %p[%d sec %d ns])", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), pu32?pu32[0]:-1, pu32?pu32[1]:-1); + perr = 1; + } else if(strstr(s, "waitpid")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, 0x%x)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strstr(s, "clock_gettime")==s || strstr(s, "__clock_gettime")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8)); + post = 1; + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "semop")==s) { + int16_t* p16 = *(int16_t**)from_ptr(R_ESP+8); + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p[%u/%d/0x%x], %d)", tid, *(void**)from_ptr(R_ESP), s, *(int*)from_ptr(R_ESP+4), p16, p16[0], p16[1], p16[2], *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "mmap64")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, 0x%x, %d, 0x%x, %d, %ld)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), *(int*)from_ptr(R_ESP+20), *(int64_t*)from_ptr(R_ESP+24)); + perr = 3; + } else if(!strcmp(s, "mmap")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, 0x%x, %d, 0x%x, %d, %d)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), *(int*)from_ptr(R_ESP+20), *(int*)from_ptr(R_ESP+24)); + perr = 3; + } else if(strstr(s, "strcasecmp")==s || strstr(s, "__strcasecmp")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "gtk_signal_connect_full")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\", %p, %p, %p, %p, %d, %d)", tid, *(void**)from_ptr(R_ESP), "gtk_signal_connect_full", *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16), *(void**)from_ptr(R_ESP+20), *(void**)from_ptr(R_ESP+24), *(int32_t*)from_ptr(R_ESP+28), *(int32_t*)from_ptr(R_ESP+32)); + } else if(strstr(s, "strcmp")==s || strstr(s, "__strcmp")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "strstr")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%.127s\", \"%.127s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "strlen")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p(\"%s\"))", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), ((R_ESP+4))?((char*)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))):"nil"); + } else if(strstr(s, "vsnprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, %u, %08X...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(uint32_t*)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "vsprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), *(void**)from_ptr(R_ESP+12)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "__vsprintf_chk")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %d, %zu, \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(int*)from_ptr(R_ESP+8), *(size_t*)from_ptr(R_ESP+12), from_ptrv(*(ptr_t*)from_ptr(R_ESP+16)), *(void**)from_ptr(R_ESP+20)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "__snprintf_chk")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %zu, %d, %d, \"%s\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(size_t*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), from_ptrv(*(ptr_t*)from_ptr(R_ESP+20)), *(void**)from_ptr(R_ESP+24)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "snprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %zu, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(size_t*)from_ptr(R_ESP+8), from_ptrv(*(ptr_t*)from_ptr(R_ESP+12))); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "sprintf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, %08X...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(uint32_t*)from_ptr(R_ESP+8)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 3; + } else if(strstr(s, "printf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + if(((uintptr_t)pu32)<0x5) // probably a _chk function + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\"...)", tid, *(void**)from_ptr(R_ESP), s, pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "__printf_chk")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(%d, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, from_ptri(int, R_ESP+4), pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "wprintf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + if(((uintptr_t)pu32)<0x5) // probably a _chk function + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%S\"...)", tid, *(void**)from_ptr(R_ESP), s, pu32?((wchar_t*)(pu32)):L"nil"); + } else if(strstr(s, "__vswprintf")==s) { + if(*(size_t*)from_ptr(R_ESP+12)<2) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %u, %p, %p, %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(void**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16), *(void**)from_ptr(R_ESP+20)); + } else { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %u, \"%S\", %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(ulong_t*)from_ptr(R_ESP+8), *(wchar_t**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16)); + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+4)); + post = 6; + } + } else if(strstr(s, "puts")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\"...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + } else if(strstr(s, "fputs")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %p...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(void**)from_ptr(R_ESP+8)); + } else if(strstr(s, "fprintf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + if(((uintptr_t)pu32)<0x5) // probably a __fprint_chk + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+12)); + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "vfprintf")==s) { + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+8)); + if(((uintptr_t)pu32)<0x5) // probably a _chk function + pu32 = (uint32_t*)from_ptr(*(ptr_t*)from_ptr(R_ESP+12)); + snprintf(buff, 255, "%04d|%p: Calling %s(%08X, \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), pu32?((char*)(pu32)):"nil"); + } else if(strstr(s, "vkGetInstanceProcAddr")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "vkGetDeviceProcAddr")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "glXGetProcAddress")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + } else if(strstr(s, "sscanf")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(!strcmp(s, "vsscanf")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", ...)", tid, *(void**)from_ptr(R_ESP), s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "XCreateWindow")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, %p, %d, %d, %u, %u, %u, %d, %u, %p, %u, %p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12), *(int*)from_ptr(R_ESP+16), *(uint32_t*)from_ptr(R_ESP+20), *(uint32_t*)from_ptr(R_ESP+24), *(uint32_t*)from_ptr(R_ESP+28), *(int32_t*)from_ptr(R_ESP+32), *(uint32_t*)from_ptr(R_ESP+36), *(void**)from_ptr(R_ESP+40), *(uint32_t*)from_ptr(R_ESP+44), *(void**)from_ptr(R_ESP+48)); + } else if(strstr(s, "XLoadQueryFont")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "pthread_mutex_lock")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4)); + } else if(!strcmp(s, "fmodf")) { + post = 4; + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(!strcmp(s, "fmod")) { + post = 4; + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, *(void**)from_ptr(R_ESP), s, *(double*)from_ptr(R_ESP+4), *(double*)from_ptr(R_ESP+12)); + } else if(strstr(s, "SDL_GetWindowSurface")==s) { + post = 5; + snprintf(buff, 255, "%04d|%p: Calling %s(%p)", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4)); + } else if(strstr(s, "udev_monitor_new_from_netlink")==s) { + post = 5; + snprintf(buff, 255, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)from_ptr(R_ESP), s, *(void**)from_ptr(R_ESP+4), from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(!strcmp(s, "syscall")) { + snprintf(buff, 255, "%04d|%p: Calling %s(%d, %p, %p, %p...)", tid, *(void**)from_ptr(R_ESP), s, *(int32_t*)from_ptr(R_ESP+4), *(void**)from_ptr(R_ESP+8), *(void**)from_ptr(R_ESP+12), *(void**)from_ptr(R_ESP+16)); + perr = 1; + } else { + snprintf(buff, 255, "%04d|%p: Calling %s (%08X, %08X, %08X...)", tid, *(void**)from_ptr(R_ESP), s, *(uint32_t*)from_ptr(R_ESP+4), *(uint32_t*)from_ptr(R_ESP+8), *(uint32_t*)from_ptr(R_ESP+12)); + } + if(!cycle_log) { + mutex_lock(&emu->context->mutex_trace); + printf_log(LOG_NONE, "%s =>", buff); + mutex_unlock(&emu->context->mutex_trace); + } + w(emu, a); // some function never come back, so unlock the mutex first! + if(post) + switch(post) { + case 1: snprintf(buff2, 63, " [%d sec %d nsec]", pu32?pu32[0]:-1, pu32?pu32[1]:-1); + break; + case 2: snprintf(buff2, 63, "(%s)", R_EAX?((char*)from_ptr(R_EAX)):"nil"); + break; + case 3: snprintf(buff2, 63, "(%s)", pu32?((char*)pu32):"nil"); + break; + case 4: snprintf(buff2, 63, " (%f)", ST0.d); + break; + case 5: { + uint32_t* p = (uint32_t*)from_ptrv(R_EAX); + if(p) + snprintf(buff2, 63, " size=%dx%d, pitch=%d, pixels=%p", p[2], p[3], p[4], p+5); + else + snprintf(buff2, 63, "NULL Surface"); + } + break; + case 6: snprintf(buff2, 63, "(%S)", pu32?((wchar_t*)pu32):L"nil"); + break; + } + if(perr==1 && ((int)R_EAX)<0) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + else if(perr==2 && R_EAX==0) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + else if(perr==3 && ((int)R_EAX)==-1) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + if(cycle_log) + snprintf(buffret, 128, "0x%lX%s%s", R_RAX, buff2, buff3); + else { + mutex_lock(&emu->context->mutex_trace); + printf_log(LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3); + mutex_unlock(&emu->context->mutex_trace); + } + } else + w(emu, a); + } + return; + } + if(!box64_ignoreint3 && my_context->signals[SIGTRAP]) { + R_RIP = *addr; // update RIP + emit_signal(emu, SIGTRAP, NULL, 3); + } else { + printf_log(LOG_DEBUG, "%04d|Warning, ignoring unsupported Int 3 call @%p\n", GetTID(), (void*)R_RIP); + R_RIP = *addr; + } + //emu->quit = 1; +} diff --git a/src/emu/x86syscall.c b/src/emu/x86syscall.c index 1d28a989..5a76a505 100755 --- a/src/emu/x86syscall.c +++ b/src/emu/x86syscall.c @@ -266,7 +266,7 @@ void EXPORT x86Syscall(x64emu_t *emu) R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now break; /*case 123: // SYS_modify_ldt - R_EAX = my_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); + R_EAX = my32_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); if(R_EAX==0xffffffff && errno>0) R_EAX = (uint32_t)-errno; break;*/ diff --git a/src/emu/x86syscall_32.c b/src/emu/x86syscall_32.c new file mode 100644 index 00000000..cae7b40b --- /dev/null +++ b/src/emu/x86syscall_32.c @@ -0,0 +1,447 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <sys/syscall.h> /* For SYS_xxx definitions */ +#include <unistd.h> +#include <time.h> +#include <sys/mman.h> +#include <sys/select.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <asm/stat.h> +#include <errno.h> +#include <sched.h> +#include <sys/wait.h> +#include <sys/utsname.h> +#ifndef __NR_socketcall +#include <linux/net.h> +#include <sys/socket.h> +#endif +#include <sys/resource.h> +#include <poll.h> + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64trace.h" +#include "myalign32.h" +#include "box64context.h" +#include "callback.h" +#include "signals.h" +#include "x64tls.h" +#include "box32.h" + + +// Syscall table for x86_64 can be found +typedef struct scwrap_s { + uint32_t x86s; + int nats; + int nbpars; +} scwrap_t; + +static const scwrap_t syscallwrap[] = { + //{ 2, __NR_fork, 1 }, + //{ 3, __NR_read, 3 }, // wrapped so SA_RESTART can be handled by libc + //{ 4, __NR_write, 3 }, // same + //{ 5, __NR_open, 3 }, // flags need transformation + //{ 6, __NR_close, 1 }, // wrapped so SA_RESTART can be handled by libc + //{ 7, __NR_waitpid, 3 }, + //{ 10, __NR_unlink, 1 }, + //{ 12, __NR_chdir, 1 }, + //{ 13, __NR_time, 1 }, + //{ 15, __NR_chmod, 2 }, + //{ 19, __NR_lseek, 3 }, + //{ 20, __NR_getpid, 0 }, + //{ 24, __NR_getuid, 0 }, + //{ 33, __NR_access, 2 }, + //{ 37, __NR_kill, 2 }, + //{ 38, __NR_rename, 2 }, + //{ 39, __NR_mkdir, 2 }, + //{ 40, __NR_rmdir, 1 }, + //{ 41, __NR_dup, 1 }, + //{ 42, __NR_pipe, 1 }, + //{ 45, __NR_brk, 1 }, + //{ 47, __NR_getgid, 0 }, + //{ 49, __NR_geteuid, 0 }, + //{ 50, __NR_getegid, 0 }, + //{ 54, __NR_ioctl, 3 }, // should be wrapped to allow SA_RESTART handling by libc, but syscall is only 3 arguments, ioctl can be 5 + //{ 55, __NR_fcntl, 3 }, // wrapped to allow filter of F_SETFD + //{ 60, __NR_umask, 1 }, + //{ 63, __NR_dup2, 2 }, + //{ 64, __NR_getppid, 0 }, + //{ 66, __NR_setsid, 0 }, + //{ 75, __NR_setrlimit, 2 }, + //{ 76, __NR_getrlimit, 2 }, + //{ 77, __NR_getrusage, 2 }, + //{ 78, __NR_gettimeofday, 2 }, + //{ 83, __NR_symlink, 2 }, + //{ 82, __NR_select, 5 }, + //{ 85, __NR_readlink, 3 }, + //{ 91, __NR_munmap, 2 }, + //{ 94, __NR_fchmod, 2 }, + //{ 99, __NR_statfs, 2 }, + //{ 102, __NR_socketcall, 2 }, + //{ 104, __NR_setitimer, 3 }, + //{ 105, __NR_getitimer, 2 }, + //{ 106, __NR_newstat, 2 }, + //{ 106, __NR_stat, 2 }, + //{ 107, __NR_newlstat, 2 }, + //{ 107, __NR_lstat, 2 }, + //{ 108, __NR_newfstat, 2 }, + //{ 108, __NR_fstat, 2 }, + //{ 109, __NR_olduname, 1 }, + //{ 110, __NR_iopl, 1 }, + //{ 114, __NR_wait4, 4 }, //TODO: check struct rusage alignment + //{ 117, __NR_ipc, 6 }, + //{ 119, __NR_sigreturn, 0}, + //{ 120, __NR_clone, 5 }, // need works + //{ 122, __NR_uname, 1 }, + //{ 123, __NR_modify_ldt }, + //{ 125, __NR_mprotect, 3 }, + //{ 136, __NR_personality, 1 }, + //{ 140, __NR__llseek, 5 }, + //{ 141, __NR_getdents, 3 }, + //{ 142, __NR__newselect, 5 }, + //{ 143, __NR_flock, 2 }, + //{ 144, __NR_msync, 3 }, + //{ 145, __NR_readv, 3 }, + //{ 146, __NR_writev, 3 }, + //{ 148, __NR_fdatasync, 1 }, + //{ 149, __NR__sysctl, 1 }, // need wrapping? + //{ 156, __NR_sched_setscheduler, 3 }, + //{ 157, __NR_sched_getscheduler, 1 }, + //{ 158, __NR_sched_yield, 0 }, + //{ 162, __NR_nanosleep, 2 }, + //{ 164, __NR_setresuid, 3 }, + //{ 168, __NR_poll, 3 }, // wrapped to allow SA_RESTART wrapping by libc + //{ 172, __NR_prctl, 5 }, + //{ 173, __NR_rt_sigreturn, 0 }, + //{ 175, __NR_rt_sigprocmask, 4 }, + //{ 179, __NR_rt_sigsuspend, 2 }, + //{ 183, __NR_getcwd, 2 }, + //{ 184, __NR_capget, 2}, + //{ 185, __NR_capset, 2}, + //{ 186, __NR_sigaltstack, 2 }, // neeed wrap or something? + //{ 191, __NR_ugetrlimit, 2 }, +// { 192, __NR_mmap2, 6}, + //{ 195, __NR_stat64, 2 }, // need proprer wrap because of structure size change + //{ 196, __NR_lstat64, 2 }, // need proprer wrap because of structure size change + //{ 197, __NR_fstat64, 2 }, // need proprer wrap because of structure size change + //{ 199, __NR_getuid32, 0 }, + //{ 200, __NR_getgid32, 0 }, + //{ 201, __NR_geteuid32, 0 }, + //{ 202, __NR_getegid32, 0 }, + //{ 208, __NR_setresuid32, 3 }, + //{ 209, __NR_getresuid32, 3 }, + //{ 210, __NR_setresgid32, 3 }, + //{ 211, __NR_getresgid32, 3 }, + //{ 220, __NR_getdents64, 3 }, + //{ 221, __NR_fcntl64, 3 }, + { 224, __NR_gettid, 0 }, + //{ 240, __NR_futex, 6 }, + //{ 241, __NR_sched_setaffinity, 3 }, + //{ 242, __NR_sched_getaffinity, 3 }, + //{ 252, __NR_exit_group, 1 }, + //{ 254, __NR_epoll_create, 1 }, + //{ 255, __NR_epoll_ctl, 4 }, + //{ 256, __NR_epoll_wait, 4 }, + //{ 265, __NR_clock_gettime, 2 }, + //{ 266, __NR_clock_getres, 2 }, + //{ 270, __NR_tgkill, 3 }, + //{ 271, __NR_utimes, 2 }, + //{ 291, __NR_inotify_init, 0}, + //{ 292, __NR_inotify_add_watch, 3}, + //{ 293, __NR_inotify_rm_watch, 2}, + //{ 311, __NR_set_robust_list, 2 }, + //{ 312, __NR_get_robust_list, 4 }, + //{ 318, __NR_getcpu, 3}, + //{ 328, __NR_eventfd2, 2}, + //{ 329, __NR_epoll_create1, 1 }, + //{ 331, __NR_pipe2, 2}, + //{ 332, __NR_inotify_init1, 1}, + //{ 355, __NR_getrandom, 3 }, + //{ 356, __NR_memfd_create, 2}, + //{ 449, __NR_futex_waitv, 5}, +}; + +struct mmap_arg_struct { + unsigned long addr; + unsigned long len; + unsigned long prot; + unsigned long flags; + unsigned long fd; + unsigned long offset; +}; + +#undef st_atime +#undef st_ctime +#undef st_mtime + +struct x64_pt_regs { + long ebx; + long ecx; + long edx; + long esi; + long edi; + long ebp; + long eax; + int xds; + int xes; + int xfs; + int xgs; + long orig_eax; + long eip; + int xcs; + long eflags; + long esp; + int xss; +}; + +#ifndef __NR_olduname +struct oldold_utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; +#endif +struct old_utsname { + char sysname[65]; + char nodename[65]; + char release[65]; + char version[65]; + char machine[65]; +}; + +struct i386_user_desc { + unsigned int entry_number; + unsigned long base_addr; + unsigned int limit; + unsigned int seg_32bit:1; + unsigned int contents:2; + unsigned int read_exec_only:1; + unsigned int limit_in_pages:1; + unsigned int seg_not_present:1; + unsigned int useable:1; +}; + +int32_t my32_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode); +int32_t my32_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]); +int my32_munmap(x64emu_t* emu, void* addr, unsigned long length); + +void EXPORT x86Syscall(x64emu_t *emu) +{ + uint32_t s = R_EAX; + printf_log(LOG_DEBUG, "%p: Calling 32bits syscall 0x%02X (%d) %p %p %p %p %p", (void*)R_RIP, s, s, (void*)(uintptr_t)R_EBX, (void*)(uintptr_t)R_ECX, (void*)(uintptr_t)R_EDX, (void*)(uintptr_t)R_ESI, (void*)(uintptr_t)R_EDI); + // check wrapper first + int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); + for (int i=0; i<cnt; i++) { + if(syscallwrap[i].x86s == s) { + int sc = syscallwrap[i].nats; + switch(syscallwrap[i].nbpars) { + case 0: *(int32_t*)&R_EAX = syscall(sc); break; + case 1: *(int32_t*)&R_EAX = syscall(sc, R_EBX); break; + case 2: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX); break; + case 3: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX); break; + case 4: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX, R_ESI); break; + case 5: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI); break; + case 6: *(int32_t*)&R_EAX = syscall(sc, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP); break; + default: + printf_log(LOG_NONE, "ERROR, Unimplemented syscall wrapper (%d, %d)\n", s, syscallwrap[i].nbpars); + emu->quit = 1; + return; + } + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX); + return; + } + } + switch (s) { + case 1: // sys_exit + emu->quit = 1; + emu->exit = 1; + //R_EAX = syscall(__NR_exit, R_EBX); // the syscall should exit only current thread + R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now + break; + case 3: // sys_read + S_EAX = read((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX)); + break; + case 4: // sys_write + S_EAX = write((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX)); + break; + case 5: // sys_open + if(s==5) {printf_log(LOG_DEBUG, " => sys_open(\"%s\", %d, %d)", (char*)from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX);}; + //S_EAX = open((void*)R_EBX, of_convert32(R_ECX), R_EDX); + S_EAX = my32_open(emu, from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX); + break; + case 6: // sys_close + S_EAX = close((int)R_EBX); + break; + /*case 123: // SYS_modify_ldt + R_EAX = my32_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + break;*/ + case 243: // set_thread_area + R_EAX = my_set_thread_area_32(emu, (thread_area_32_t*)(uintptr_t)R_EBX); + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + break; + default: + printf_log(LOG_INFO, "Warning: Unsupported Syscall 0x%02Xh (%d)\n", s, s); + R_EAX = (uint32_t)-ENOSYS; + return; + } + printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX); +} + +#ifdef BOX32 +#define stack(n) (b[(n)/4]) +#define i32(n) (int32_t)stack(n) +#define u32(n) (uint32_t)stack(n) +#define p(n) from_ptrv(stack(n)) + +uint32_t EXPORT my32_syscall(x64emu_t *emu, ptr_t* b) +{ + static uint32_t warned = 0; + uint32_t s = u32(0); + printf_log(LOG_DEBUG, "%p: Calling libc syscall 0x%02X (%d) %p %p %p %p %p\n", from_ptrv(R_EIP), s, s, from_ptrv(u32(4)), from_ptrv(u32(8)), from_ptrv(u32(12)), from_ptrv(u32(16)), from_ptrv(u32(20))); + // check wrapper first + int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); + for (int i=0; i<cnt; i++) { + if(syscallwrap[i].x86s == s) { + int sc = syscallwrap[i].nats; + switch(syscallwrap[i].nbpars) { + case 0: return syscall(sc); + case 1: return syscall(sc, u32(4)); + case 2: return syscall(sc, u32(4), u32(8)); + case 3: return syscall(sc, u32(4), u32(8), u32(12)); + case 4: return syscall(sc, u32(4), u32(8), u32(12), u32(16)); + case 5: return syscall(sc, u32(4), u32(8), u32(12), u32(16), u32(20)); + case 6: return syscall(sc, u32(4), u32(8), u32(12), u32(16), u32(20), u32(24)); + default: + printf_log(LOG_NONE, "ERROR, Unimplemented syscall wrapper (%d, %d)\n", s, syscallwrap[i].nbpars); + emu->quit = 1; + return 0; + } + } + } + switch (s) { + case 1: // __NR_exit + emu->quit = 1; + return u32(4); // faking the syscall here, we don't want to really terminate the program now + case 3: // sys_read + return (uint32_t)read(i32(4), p(8), u32(12)); + case 4: // sys_write + return (uint32_t)write(i32(4), p(8), u32(12)); + case 5: // sys_open + return my32_open(emu, p(4), of_convert32(u32(8)), u32(12)); + case 6: // sys_close + return (uint32_t)close(i32(4)); + case 11: // execve + return (uint32_t)my32_execve(emu, p(4), p(8), p(12)); + case 91: // munmap + return (uint32_t)my32_munmap(emu, p(4), u32(8)); +#if 0 + case 120: // clone + // x86 raw syscall is long clone(unsigned long flags, void *stack, int *parent_tid, unsigned long tls, int *child_tid); + // so flags=u(4), stack=p(8), parent_tid=p(12), tls=p(16), child_tid=p(20) + if(p(8)) + { + void* stack_base = p(8); + int stack_size = 0; + if(!stack_base) { + // allocate a new stack... + int currstack = 0; + if((R_ESP>=(uintptr_t)emu->init_stack) && (R_ESP<=((uintptr_t)emu->init_stack+emu->size_stack))) + currstack = 1; + stack_size = (currstack)?emu->size_stack:(1024*1024); + stack_base = mmap(NULL, stack_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + // copy value from old stack to new stack + if(currstack) + memcpy(stack_base, emu->init_stack, stack_size); + else { + int size_to_copy = (uintptr_t)emu->init_stack + emu->size_stack - (R_ESP); + memcpy(stack_base+stack_size-size_to_copy, (void*)R_ESP, size_to_copy); + } + } + x64emu_t * newemu = NewX86Emu(emu->context, R_EIP, (uintptr_t)stack_base, stack_size, (p(8))?0:1); + SetupX86Emu(newemu); + CloneEmu(newemu, emu); + Push32(newemu, 0); + PushExit(newemu); + void* mystack = NULL; + if(my32_context->stack_clone_used) { + mystack = malloc(1024*1024); // stack for own process... memory leak, but no practical way to remove it + } else { + if(!my32_context->stack_clone) + my32_context->stack_clone = malloc(1024*1024); + mystack = my32_context->stack_clone; + my32_context->stack_clone_used = 1; + } + // x86_64 raw clone is long clone(unsigned long flags, void *stack, int *parent_tid, int *child_tid, unsigned long tls); + long ret = clone(clone_fn, (void*)((uintptr_t)mystack+1024*1024), u32(4), newemu, p(12), p(16), p(20)); + return (uint32_t)ret; + } + else + return (uint32_t)syscall(__NR_clone, u32(4), p(8), p(12), p(16), p(20)); + break; + case 123: // SYS_modify_ldt + return my32_modify_ldt(emu, i32(4), (thread_area_t*)p(8), i32(12)); + case 125: // mprotect + return (uint32_t)my32_mprotect(emu, p(4), u32(8), i32(12)); + case 174: // sys_rt_sigaction + return (uint32_t)my32_sigaction(emu, i32(4), (x86_sigaction_t*)p(8), (x86_sigaction_t*)p(12)); + case 192: // mmap2 + return (uint32_t)my32_mmap64(emu, p(4), u32(8), i32(12), i32(16), i32(20), u32(24)); + case 243: // set_thread_area + return my32_set_thread_area((thread_area_t*)p(4)); +#ifndef NOALIGN + case 254: // epoll_create + return my32_epoll_create(emu, i32(4)); + case 255: // epoll_ctl + return my32_epoll_ctl(emu, i32(4), i32(8), i32(12), p(16)); + case 256: // epoll_wait + return my32_epoll_wait(emu, i32(4), p(8), i32(12), i32(16)); +#endif + case 270: //_NR_tgkill + /*if(!u32(12))*/ { + //printf("tgkill(%u, %u, %u) => ", u32(4), u32(8), u32(12)); + uint32_t ret = (uint32_t)syscall(__NR_tgkill, u32(4), u32(8), u32(12)); + //printf("%u (errno=%d)\n", ret, (ret==(uint32_t)-1)?errno:0); + return ret; + }/* else { + printf_log(LOG_INFO, "Warning: ignoring libc Syscall tgkill (%u, %u, %u)\n", u32(4), u32(8), u32(12)); + }*/ + return 0; +#ifndef NOALIGN + case 329: // epoll_create1 + return my32_epoll_create1(emu, of_convert32(i32(4))); +#endif +#ifndef __NR_getrandom + case 355: // getrandom + return (uint32_t)my32_getrandom(emu, p(4), u32(8), u32(12)); +#endif +#ifndef __NR_memfd_create + case 356: // memfd_create + return (uint32_t)my32_memfd_create(emu, (void*)R_EBX, R_ECX); +#endif +#endif + default: + if(!(warned&(1<<s))) { + printf_log(LOG_INFO, "Warning: Unsupported libc Syscall 0x%02X (%d)\n", s, s); + warned|=(1<<s); + } + errno = ENOSYS; + return -1; + } + return 0; +} +#endif //BOX32 \ No newline at end of file diff --git a/src/emu/x87emu_private.c b/src/emu/x87emu_private.c index 92c14268..c64f49cb 100644 --- a/src/emu/x87emu_private.c +++ b/src/emu/x87emu_private.c @@ -295,7 +295,6 @@ void fpu_savenv(x64emu_t* emu, char* p, int b16) // other stuff are not pushed.... } -// this is the 64bits version (slightly different than the 32bits!) typedef struct xsave32_s { uint16_t ControlWord; /* 000 */ uint16_t StatusWord; /* 002 */ @@ -311,9 +310,10 @@ typedef struct xsave32_s { uint32_t MxCsr; /* 018 */ uint32_t MxCsr_Mask; /* 01c */ sse_regs_t FloatRegisters[8];/* 020 */ // fpu/mmx are store in 128bits here - sse_regs_t XmmRegisters[16]; /* 0a0 */ - uint8_t Reserved4[96]; /* 1a0 */ + sse_regs_t XmmRegisters[8]; /* 0a0 */ + uint8_t Reserved4[56*4]; /* 1a0 */ } xsave32_t; +// this is the 64bits version (slightly different than the 32bits!) typedef struct xsave64_s { uint16_t ControlWord; /* 000 */ uint16_t StatusWord; /* 002 */ @@ -354,8 +354,7 @@ void fpu_fxsave32(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy(&p->FloatRegisters[i].q[0], (i<stack)?&ST(i):&emu->mmx[i], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(p->XmmRegisters, emu->xmm, 8*16); } void fpu_fxsave64(x64emu_t* emu, void* ed) @@ -381,8 +380,7 @@ void fpu_fxsave64(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy(&p->FloatRegisters[i].q[0], (i<stack)?&ST(i):&emu->mmx[i], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(p->XmmRegisters, emu->xmm, 16*16); } void fpu_fxrstor32(x64emu_t* emu, void* ed) @@ -406,8 +404,7 @@ void fpu_fxrstor32(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy((i<stack)?&ST(i):&emu->mmx[i], &p->FloatRegisters[i].q[0], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(emu->xmm, p->XmmRegisters, 8*16); } void fpu_fxrstor64(x64emu_t* emu, void* ed) @@ -431,8 +428,7 @@ void fpu_fxrstor64(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy((i<stack)?&ST(i):&emu->mmx[i], &p->FloatRegisters[i].q[0], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(emu->xmm, p->XmmRegisters, 16*16); } typedef struct xsaveheader_s { diff --git a/src/include/box32.h b/src/include/box32.h index ab8fa184..9554e65f 100644 --- a/src/include/box32.h +++ b/src/include/box32.h @@ -104,9 +104,4 @@ void fini_hash_helper(); typedef struct x86emu_s x86emu_t; -void* my_mmap(x86emu_t* emu, void* addr, unsigned long length, int prot, int flags, int fd, int offset); -void* my_mmap64(x86emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset); -int my_munmap(x86emu_t* emu, void* addr, unsigned long length); -int my_mprotect(x86emu_t* emu, void *addr, unsigned long len, int prot); - #endif //__BOX32_64__H_ diff --git a/src/include/box32context.h b/src/include/box32context.h new file mode 100644 index 00000000..fac7a6f7 --- /dev/null +++ b/src/include/box32context.h @@ -0,0 +1,7 @@ +#ifndef __BOX32CONTEXT_H_ +#define __BOX32CONTEXT_H_ + +#include "box32.h" +#include "box64context.h" + +#endif//__BOX32CONTEXT_H_ \ No newline at end of file diff --git a/src/include/box64context.h b/src/include/box64context.h index b8706729..532c1aaf 100644 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -7,12 +7,19 @@ #ifdef DYNAREC #include "dynarec/native_lock.h" #endif +#ifndef BOX32_DEF +#define BOX32_DEF +typedef uint32_t ptr_t; +typedef int32_t long_t; +typedef uint32_t ulong_t; +#endif #ifdef DYNAREC // disabling for now, seems to have a negative impact on performances //#define USE_CUSTOM_MUTEX #endif + typedef struct elfheader_s elfheader_t; typedef struct cleanup_s cleanup_t; typedef struct x64emu_s x64emu_t; @@ -26,6 +33,7 @@ typedef struct kh_defaultversion_s kh_defaultversion_t; typedef struct kh_mapsymbols_s kh_mapsymbols_t; typedef struct library_s library_t; typedef struct linkmap_s linkmap_t; +typedef struct linkmap32_s linkmap32_t; typedef struct kh_threadstack_s kh_threadstack_t; typedef struct rbtree rbtree; typedef struct atfork_fnc_s { @@ -97,9 +105,11 @@ typedef struct box64context_s { int argc; char** argv; + ptr_t argv32; int envc; char** envv; + ptr_t envv32; int orig_argc; char** orig_argv; @@ -175,6 +185,7 @@ typedef struct box64context_s { library_t *sdl2lib; library_t *sdl2mixerlib; linkmap_t *linkmap; + linkmap32_t *linkmap32; void* sdl1allocrw; // SDL1 AllocRW/FreeRW function void* sdl1freerw; void* sdl2allocrw; // SDL2 AllocRW/FreeRW function diff --git a/src/include/debug.h b/src/include/debug.h index e0f81c95..1ecf5b4e 100644 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -121,7 +121,7 @@ extern int box64_x11threads; extern int box64_x11glx; extern char* box64_libGL; extern uintptr_t fmod_smc_start, fmod_smc_end; // to handle libfmod (from Unreal) SMC (self modifying code) -extern uint32_t default_gs; +extern uint32_t default_gs, default_fs; extern int jit_gdb; // launch gdb when a segfault is trapped extern int box64_tcmalloc_minimal; // when using tcmalloc_minimal #define LOG_NONE 0 diff --git a/src/include/elfload_dump.h b/src/include/elfload_dump.h index 3fa0a910..848a2817 100644 --- a/src/include/elfload_dump.h +++ b/src/include/elfload_dump.h @@ -26,4 +26,8 @@ void DumpRelRTable64(elfheader_t *h, int cnt, Elf64_Relr *relr, const char *name void DumpBinary(char* p, int sz); +#ifndef SHT_CHECKSUM +#define SHT_CHECKSUM 0x6ffffff8 +#endif + #endif //ELFLOADER_DUMP_H \ No newline at end of file diff --git a/src/include/myalign32.h b/src/include/myalign32.h new file mode 100755 index 00000000..c81ccdf6 --- /dev/null +++ b/src/include/myalign32.h @@ -0,0 +1,409 @@ +#ifndef __MY_ALIGN32__H_ +#define __MY_ALIGN32__H_ +#include <stdint.h> + +#define X64_VA_MAX_REG (6*8) +#define X64_VA_MAX_XMM ((6*8)+(8*16)) + +#define ALIGN64_16(A) (uint64_t*)((((uintptr_t)A)+15)&~15LL) + +#ifdef __x86_64__ +// x86_64, 6 64bits general regs and 16 or 8? 128bits float regs +/* +For reference, here is the x86_64 va_list structure +typedef struct { + unsigned int gp_offset; + unsigned int fp_offset; + void *overflow_arg_area; + void *reg_save_area; +} va_list[1]; +*/ +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=X64_VA_MAX_REG; \ + sysv_varargs->fp_offset=X64_VA_MAX_XMM; \ + sysv_varargs->reg_save_area=(A); \ + sysv_varargs->overflow_arg_area=A + +#define CONVERT_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=X64_VA_MAX_REG; \ + sysv_varargs->fp_offset=X64_VA_MAX_XMM; \ + sysv_varargs->reg_save_area=(A); \ + sysv_varargs->overflow_arg_area=A + + + +#elif defined(__aarch64__) +// aarch64: 8 64bits general regs and 8 128bits float regs +/* +va_list declared as +typedef struct va_list { + void * stack; // next stack param + void * gr_top; // end of GP arg reg save area + void * vr_top; // end of FP/SIMD arg reg save area + int gr_offs; // offset from gr_top to next GP register arg + int vr_offs; // offset from vr_top to next FP/SIMD register arg +} va_list; +*/ +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs.__gr_offs=(8*8); \ + sysv_varargs.__vr_offs=(8*16); \ + sysv_varargs.__stack=(A); + +#define CONVERT_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs.__gr_offs=(8*8); \ + sysv_varargs.__vr_offs=(8*16)); \ + sysv_varargs.__stack=(A); + + +#elif defined(__loongarch64) || defined(__powerpc64__) || defined(__riscv) +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs = (va_list)A + +#define CREATE_VALIST_FROM_VALIST_32(VA, SCRATCH) \ + va_list sysv_varargs = (va_list)A + +#else +#error Unknown architecture! +#endif + +#define VARARGS_32 sysv_varargs +#define PREPARE_VALIST_32 CREATE_SYSV_VALIST_32(emu->scratch) +#define VARARGS_32_(A) sysv_varargs +#define PREPARE_VALIST_32_(A) CREATE_SYSV_VALIST_32(A) + +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack); +void myStackAlignGVariantNew32(const char* fmt, uint32_t* st, uint64_t* mystack); +void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack); + +void UnalignStat64_32(const void* source, void* dest); + +void UnalignStatFS64_32(const void* source, void* dest); +#if 0 +void UnalignOggVorbis(void* dest, void* source); // Arm -> x86 +void AlignOggVorbis(void* dest, void* source); // x86 -> Arm + +void UnalignVorbisDspState(void* dest, void* source); // Arm -> x86 +void AlignVorbisDspState(void* dest, void* source); // x86 -> Arm + +void UnalignVorbisBlock(void* dest, void* source); // Arm -> x86 +void AlignVorbisBlock(void* dest, void* source); // x86 -> Arm + +void UnalignEpollEvent(void* dest, void* source, int nbr); // Arm -> x86 +void AlignEpollEvent(void* dest, void* source, int nbr); // x86 -> Arm + +void UnalignSmpegInfo(void* dest, void* source); // Arm -> x86 +void AlignSmpegInfo(void* dest, void* source); // x86 -> Arm +#endif +// stat64 is packed on i386, not on arm (and possibly other structures) +#undef st_atime +#undef st_atime_nsec +#undef st_mtime +#undef st_mtime_nsec +#undef st_ctime +#undef st_ctime_nsec +struct i386_stat64 { + uint64_t st_dev; + uint8_t __pad0[4]; + uint32_t __st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint8_t __pad3[4]; + int64_t st_size; + uint32_t st_blksize; + uint64_t st_blocks; + uint32_t st_atime; + uint32_t st_atime_nsec; + uint32_t st_mtime; + uint32_t st_mtime_nsec; + uint32_t st_ctime; + uint32_t st_ctime_nsec; + uint64_t st_ino; +} __attribute__((packed)); + +struct i386_fsid { + int val[2]; +} __attribute__((packed)); + +struct i386_statfs { + uint32_t f_type; + uint32_t f_bsize; + uint32_t f_blocks; + uint32_t f_bfree; + uint32_t f_bavail; + uint32_t f_files; + uint32_t f_ffree; + struct i386_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +} __attribute__((packed)); + +struct i386_statfs64 { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct i386_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +} __attribute__((packed)); +#if 0 +typedef struct { + unsigned char *data; + int storage; + int fill; + int returned; + + int unsynced; + int headerbytes; + int bodybytes; +} ogg_sync_state; + +typedef struct { + unsigned char *body_data; /* bytes from packet bodies */ + long body_storage; /* storage elements allocated */ + long body_fill; /* elements stored; fill mark */ + long body_returned; /* elements of fill returned */ + + + int *lacing_vals; /* The values that will go to the segment table */ + int64_t *granule_vals; /* granulepos values for headers. Not compact + this way, but it is simple coupled to the + lacing fifo */ + long lacing_storage; + long lacing_fill; + long lacing_packet; + long lacing_returned; + + unsigned char header[282]; /* working space for header encode */ + int header_fill; + + int e_o_s; /* set when we have buffered the last packet in the + logical bitstream */ + int b_o_s; /* set after we've written the initial page + of a logical bitstream */ + long serialno; + long pageno; + int64_t packetno; /* sequence number for decode; the framing + knows where there's a hole in the data, + but we need coupling so that the codec + (which is in a separate abstraction + layer) also knows about the gap */ + int64_t granulepos; + +} ogg_stream_state; + +typedef struct vorbis_dsp_state { + int analysisp; + ptr_t vi; //vorbis_info + + ptr_t pcm; //float** + ptr_t pcmret; // float** + int pcm_storage; + int pcm_current; + int pcm_returned; + + int preextrapolate; + int eofflag; + + long lW; + long W; + long nW; + long centerW; + + int64_t granulepos; + int64_t sequence; + + int64_t glue_bits; + int64_t time_bits; + int64_t floor_bits; + int64_t res_bits; + + void *backend_state; +} vorbis_dsp_state; + +typedef struct { + long endbyte; + int endbit; + + unsigned char *buffer; + unsigned char *ptr; + long storage; +} oggpack_buffer; + +typedef struct vorbis_block { + /* necessary stream state for linking to the framing abstraction */ + float **pcm; /* this is a pointer into local storage */ + oggpack_buffer opb; + + long lW; + long W; + long nW; + int pcmend; + int mode; + + int eofflag; + int64_t granulepos; + int64_t sequence; + vorbis_dsp_state *vd; /* For read-only access of configuration */ + + /* local storage to avoid remallocing; it's up to the mapping to + structure it */ + void *localstore; + long localtop; + long localalloc; + long totaluse; + struct alloc_chain *reap; + + /* bitmetrics for the frame */ + long glue_bits; + long time_bits; + long floor_bits; + long res_bits; + + void *internal; + +} vorbis_block; + +typedef struct { + size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); + int (*seek_func) (void *datasource, int64_t offset, int whence); + int (*close_func) (void *datasource); + long (*tell_func) (void *datasource); +} ov_callbacks; + +typedef struct OggVorbis { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + int64_t offset; + int64_t end; + ogg_sync_state oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + int64_t *offsets; + int64_t *dataoffsets; + long *serialnos; + int64_t *pcmlengths; /* overloaded to maintain binary + compatibility; x2 size, stores both + beginning and end values */ + void *vi; //vorbis_info + void *vc; //vorbis_comment + + /* Decoding working state local storage */ + int64_t pcm_offset; + int ready_state; + long current_serialno; + int current_link; + + double bittrack; + double samptrack; + + ogg_stream_state os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ + vorbis_block vb; /* local working space for packet->PCM decode */ + + ov_callbacks callbacks; + +} OggVorbis; + +typedef struct my_SMPEG_Info_s { + int has_audio; + int has_video; + int width; + int height; + int current_frame; + double current_fps; + char audio_string[80]; + int audio_current_frame; + uint32_t current_offset; + uint32_t total_size; + double current_time; + double total_time; +} my_SMPEG_Info_t; + +typedef struct __attribute__((packed)) x86_ftsent_s { + struct x86_ftsent_s *fts_cycle; + struct x86_ftsent_s *fts_parent; + struct x86_ftsent_s *fts_link; + long fts_number; + void *fts_pointer; + char *fts_accpath; + char *fts_path; + int fts_errno; + int fts_symfd; + uint16_t fts_pathlen; + uint16_t fts_namelen; + uintptr_t fts_ino; + uint64_t fts_dev; + uint32_t fts_nlink; + int16_t fts_level; + uint16_t fts_info; + uint16_t fts_flags; + uint16_t fts_instr; + struct stat *fts_statp; + char fts_name[1]; +} x86_ftsent_t; + +void UnalignFTSENT(void* dest, void* source); // Arm -> x86 +void AlignFTSENT(void* dest, void* source); // x86 -> Arm + +typedef struct my_flock64_s { + uint16_t l_type; + uint16_t l_whence; + int64_t l_start; + int64_t l_len; + int l_pid; +} my_flock64_t; + +typedef struct __attribute__((packed)) x86_flock64_s { + uint16_t l_type; + uint16_t l_whence; + int64_t l_start; + int64_t l_len; + int l_pid; +} x86_flock64_t; + +void UnalignFlock64(void* dest, void* source); // Arm -> x86 +void AlignFlock64(void* dest, void* source); // x86 -> Arm + +// defined in wrapperlibc.c +int of_convert(int); // x86->arm +int of_unconvert(int); // arm->x86 + +typedef struct my_GValue_s +{ + int g_type; + union { + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + } data[2]; +} my_GValue_t; + +void alignNGValue(my_GValue_t* v, void* value, int n); +void unalignNGValue(void* value, my_GValue_t* v, int n); +#endif + +int of_convert32(int a); +int of_unconvert32(int a); + +#endif//__MY_ALIGN32__H_ \ No newline at end of file diff --git a/src/include/regs.h b/src/include/regs.h index 3cfcdc5a..5b2a9c41 100644 --- a/src/include/regs.h +++ b/src/include/regs.h @@ -319,6 +319,7 @@ typedef union { #define R_R13 emu->regs[_R13].q[0] #define R_R14 emu->regs[_R14].q[0] #define R_R15 emu->regs[_R15].q[0] +#define R_EIP emu->ip.dword[0] #define R_EAX emu->regs[_AX].dword[0] #define R_EBX emu->regs[_BX].dword[0] #define R_ECX emu->regs[_CX].dword[0] diff --git a/src/include/threads.h b/src/include/threads.h index 8ed0e4c1..a35b02f3 100644 --- a/src/include/threads.h +++ b/src/include/threads.h @@ -4,11 +4,26 @@ typedef struct box64context_s box64context_t; typedef struct x64emu_s x64emu_t; +typedef struct emuthread_s { + uintptr_t fnc; + void* arg; + x64emu_t* emu; + int join; + uintptr_t self; + ulong_t hself; + int cancel_cap, cancel_size; + void** cancels; +} emuthread_t; + void CleanStackSize(box64context_t* context); void init_pthread_helper(void); void fini_pthread_helper(box64context_t* context); void clean_current_emuthread(void); +#ifdef BOX32 +void init_pthread_helper_32(void); +void fini_pthread_helper_32(box64context_t* context); +#endif // prepare an "emuthread structure" in pet and return address of function pointer for a "thread creation routine" void* my_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet); diff --git a/src/include/x64emu.h b/src/include/x64emu.h index 5591823b..8c08a0c2 100644 --- a/src/include/x64emu.h +++ b/src/include/x64emu.h @@ -25,7 +25,8 @@ void SetEDX(x64emu_t *emu, uint32_t v); void SetEDI(x64emu_t *emu, uint32_t v); void SetESI(x64emu_t *emu, uint32_t v); void SetEBP(x64emu_t *emu, uint32_t v); -//void SetESP(x64emu_t *emu, uint32_t v); +void SetESP(x64emu_t *emu, uint32_t v); +void SetEIP(x64emu_t *emu, uint32_t v); void SetRAX(x64emu_t *emu, uint64_t v); void SetRBX(x64emu_t *emu, uint64_t v); void SetRCX(x64emu_t *emu, uint64_t v); @@ -35,8 +36,8 @@ void SetRSI(x64emu_t *emu, uint64_t v); void SetRBP(x64emu_t *emu, uint64_t v); void SetRSP(x64emu_t *emu, uint64_t v); void SetRIP(x64emu_t *emu, uint64_t v); -//void SetFS(x64emu_t *emu, uint16_t v); -//uint16_t GetFS(x64emu_t *emu); +void SetFS(x64emu_t *emu, uint16_t v); +uint16_t GetFS(x64emu_t *emu); uint64_t GetRSP(x64emu_t *emu); uint64_t GetRBP(x64emu_t *emu); void ResetFlags(x64emu_t *emu); diff --git a/src/include/x64run.h b/src/include/x64run.h index a5d4528e..9eed07c0 100644 --- a/src/include/x64run.h +++ b/src/include/x64run.h @@ -10,6 +10,9 @@ void DynaRun(x64emu_t *emu); uint32_t LibSyscall(x64emu_t *emu); void PltResolver64(x64emu_t* emu); +#ifdef BOX32 +void PltResolver32(x64emu_t* emu); +#endif extern uintptr_t pltResolver64; int GetTID(void); diff --git a/src/librarian/librarian.c b/src/librarian/librarian.c index b836e4ca..259f7e0c 100644 --- a/src/librarian/librarian.c +++ b/src/librarian/librarian.c @@ -12,6 +12,9 @@ #include "x64emu.h" #include "box64context.h" #include "elfloader.h" +#ifdef BOX32 +#include "box32.h" +#endif #include "bridge.h" @@ -254,15 +257,31 @@ static int AddNeededLib_add(lib_t** maplib, int local, needed_libs_t* needed, in if (lib->type == LIB_EMULATED) { // Need to add library to the linkmap (put here so the link is ordered) - linkmap_t *lm = addLinkMapLib(lib); - if(!lm) { - // Crashed already - printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); - return 1; + #ifdef BOX32 + if(box64_is32bits) { + linkmap32_t *lm = addLinkMapLib32(lib); + if(!lm) { + // Crashed already + printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); + return 1; + } + lm->l_addr = (Elf32_Addr)to_ptrv(GetElfDelta(lib->e.elf)); + lm->l_name = to_ptrv(lib->name); + lm->l_ld = to_ptrv(GetDynamicSection(lib->e.elf)); + } else + #endif + { + linkmap_t *lm = addLinkMapLib(lib); + if(!lm) { + // Crashed already + printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); + return 1; + } + lm->l_addr = (Elf64_Addr)GetElfDelta(lib->e.elf); + lm->l_name = lib->name; + lm->l_ld = GetDynamicSection(lib->e.elf); } - lm->l_addr = (Elf64_Addr)GetElfDelta(lib->e.elf); - lm->l_name = lib->name; - lm->l_ld = GetDynamicSection(lib->e.elf); + //TODO: it seems to never be removed! } IncRefCount(lib, emu); return 0; diff --git a/src/librarian/library.c b/src/librarian/library.c index 69f27d5f..e4ab45e5 100644 --- a/src/librarian/library.c +++ b/src/librarian/library.c @@ -40,6 +40,16 @@ #endif #undef GO +#ifdef BOX32 +#define GO(P, N) int wrapped##N##_init32(library_t* lib, box64context_t *box64); \ + void wrapped##N##_fini32(library_t* lib); +#ifdef STATICBUILD +#include "library_list_static_32.h" +#else +#include "library_list_32.h" +#endif +#undef GO +#endif #define GO(P, N) {P, wrapped##N##_init, wrapped##N##_fini}, wrappedlib_t wrappedlibs[] = { @@ -50,6 +60,17 @@ wrappedlib_t wrappedlibs[] = { #endif }; #undef GO +#define GO(P, N) {P, wrapped##N##_init32, wrapped##N##_fini32}, +wrappedlib_t wrappedlibs32[] = { +#ifdef BOX32 +#ifdef STATICBUILD +#include "library_list_static_32.h" +#else +#include "library_list_32.h" +#endif +#endif +}; +#undef GO KHASH_MAP_IMPL_STR(symbolmap, symbol1_t) KHASH_MAP_IMPL_STR(symbol2map, symbol2_t) @@ -232,14 +253,11 @@ int DummyLib_GetLocal(library_t* lib, const char* name, uintptr_t *offs, uintptr } static void initWrappedLib(library_t *lib, box64context_t* context) { - if(box64_is32bits) { - // TODO - return; // nothing wrapped yet - } - int nb = sizeof(wrappedlibs) / sizeof(wrappedlib_t); + int nb = (box64_is32bits?sizeof(wrappedlibs32):sizeof(wrappedlibs)) / sizeof(wrappedlib_t); for (int i=0; i<nb; ++i) { - if(strcmp(lib->name, wrappedlibs[i].name)==0) { - if(wrappedlibs[i].init(lib, context)) { + wrappedlib_t* w = box64_is32bits?(&wrappedlibs32[i]):(&wrappedlibs[i]); + if(strcmp(lib->name, w->name)==0) { + if(w->init(lib, context)) { // error! const char* error_str = dlerror(); if(error_str) // don't print the message if there is no error string from last error @@ -247,7 +265,7 @@ static void initWrappedLib(library_t *lib, box64context_t* context) { return; // non blocker... } printf_dump(LOG_INFO, "Using native(wrapped) %s\n", lib->name); - lib->fini = wrappedlibs[i].fini; + lib->fini = w->fini; lib->getglobal = WrappedLib_GetGlobal; lib->getweak = WrappedLib_GetWeak; lib->getlocal = WrappedLib_GetLocal; @@ -366,7 +384,7 @@ static void initEmulatedLib(const char* path, library_t *lib, box64context_t* co { char libname[MAX_PATH]; strcpy(libname, path); - int found = FileIsX64ELF(libname); + int found = box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname); if(found) if(loadEmulatedLib(libname, lib, context, verneeded)) return; @@ -375,14 +393,14 @@ static void initEmulatedLib(const char* path, library_t *lib, box64context_t* co { strcpy(libname, context->box64_ld_lib.paths[i]); strcat(libname, path); - if(FileIsX64ELF(libname)) + if(box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname)) if(loadEmulatedLib(libname, lib, context, verneeded)) return; // also try x86_64 variant strcpy(libname, context->box64_ld_lib.paths[i]); - strcat(libname, "x86_64/"); + strcat(libname, box64_is32bits?"i386/":"x86_64/"); strcat(libname, path); - if(FileIsX64ELF(libname)) + if(box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname)) if(loadEmulatedLib(libname, lib, context, verneeded)) return; } @@ -793,7 +811,7 @@ static int getSymbolInDataMaps(library_t*lib, const char* name, int noweak, uint if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)kh_value(lib->w.mydatamap, k).addr; @@ -828,7 +846,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -856,7 +874,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -921,7 +939,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -1078,6 +1096,64 @@ int GetDeepBind(library_t* lib) return lib->deepbind; } +#ifdef BOX32 +linkmap32_t* getLinkMapLib32(library_t* lib) +{ + linkmap32_t* lm = my_context->linkmap32; + while(lm) { + if(lm->l_lib == lib) + return lm; + lm = (linkmap32_t*)from_ptrv(lm->l_next); + } + return NULL; +} +linkmap32_t* getLinkMapElf32(elfheader_t* h) +{ + linkmap32_t* lm = my_context->linkmap32; + while(lm) { + if(lm->l_lib && lm->l_lib->type==LIB_EMULATED && lm->l_lib->e.elf == h) + return lm; + lm = (linkmap32_t*)from_ptrv(lm->l_next); + } + return NULL; +} +linkmap32_t* addLinkMapLib32(library_t* lib) +{ + if(!my_context->linkmap32) { + my_context->linkmap32 = (linkmap32_t*)box_calloc(1, sizeof(linkmap32_t)); + my_context->linkmap32->l_lib = lib; + return my_context->linkmap32; + } + linkmap32_t* lm = my_context->linkmap32; + while(lm->l_next) + lm = (linkmap32_t*)from_ptrv(lm->l_next); + lm->l_next = to_ptrv(box_calloc(1, sizeof(linkmap32_t))); + linkmap32_t* l_next = (linkmap32_t*)from_ptrv(lm->l_next); + l_next->l_lib = lib; + l_next->l_prev = to_ptrv(lm); + return l_next; +} +void removeLinkMapLib32(library_t* lib) +{ + linkmap32_t* lm = getLinkMapLib32(lib); + if(!lm) return; + if(lm->l_next) + ((linkmap32_t*)from_ptrv(lm->l_next))->l_prev = lm->l_prev; + if(lm->l_prev) + ((linkmap32_t*)from_ptrv(lm->l_prev))->l_next = lm->l_next; + box_free(lm); +} + +void AddMainElfToLinkmap32(elfheader_t* elf) +{ + linkmap32_t* lm = addLinkMapLib32(NULL); // main elf will have a null lib link + + lm->l_addr = (Elf32_Addr)to_ptrv(GetElfDelta(elf)); + lm->l_name = to_ptrv(my_context->fullpath); + lm->l_ld = to_ptrv(GetDynamicSection(elf)); +} +#endif + linkmap_t* getLinkMapLib(library_t* lib) { linkmap_t* lm = my_context->linkmap; diff --git a/src/librarian/library_private.h b/src/librarian/library_private.h index a13df4a0..495ad000 100644 --- a/src/librarian/library_private.h +++ b/src/librarian/library_private.h @@ -133,11 +133,29 @@ typedef struct linkmap_s { library_t* l_lib; } linkmap_t; +#ifdef BOX32 +typedef struct linkmap32_s { + // actual struct link_map + Elf32_Addr l_addr; + ptr_t l_name; // char* + ptr_t l_ld; //Elf64_Dyn* + ptr_t l_next, l_prev; // struct linkmap32_s * + // custom + library_t* l_lib; + +} linkmap32_t; +#endif linkmap_t* getLinkMapLib(library_t* lib); linkmap_t* getLinkMapElf(elfheader_t* h); linkmap_t* addLinkMapLib(library_t* lib); void removeLinkMapLib(library_t* lib); +#ifdef BOX32 +linkmap32_t* getLinkMapLib32(library_t* lib); +linkmap32_t* getLinkMapElf32(elfheader_t* h); +linkmap32_t* addLinkMapLib32(library_t* lib); +void removeLinkMapLib32(library_t* lib); +#endif int FiniLibrary(library_t* lib, x64emu_t* emu); void Free1Library(library_t **lib, x64emu_t* emu); diff --git a/src/library_list_32.h b/src/library_list_32.h new file mode 100644 index 00000000..a5a1831c --- /dev/null +++ b/src/library_list_32.h @@ -0,0 +1,12 @@ +#ifndef GO +#error Nope +#endif + +GO("libpthread.so.0", libpthread) +GO("librt.so.1", librt) +GO("libc.so.6", libc) +GO("libm.so.6", libm) +GO("libdl.so.2", libdl) +GO("ld-linux.so.2", ldlinux) + +GO("crashhandler.so", crashhandler) diff --git a/src/library_list_static_32.h b/src/library_list_static_32.h new file mode 100644 index 00000000..525b5bef --- /dev/null +++ b/src/library_list_static_32.h @@ -0,0 +1,10 @@ +#ifndef GO +#error Nope +#endif + +GO("libpthread.so.0", libpthread) +GO("librt.so.1", librt) +GO("libc.so.6", libc) +GO("libm.so.6", libm) +GO("libdl.so.2", libdl) +GO("ld-linux.so.2", ldlinux) diff --git a/src/libtools/myalign32.c b/src/libtools/myalign32.c new file mode 100755 index 00000000..ee0b2790 --- /dev/null +++ b/src/libtools/myalign32.c @@ -0,0 +1,935 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> +#include <wchar.h> +#include <sys/epoll.h> +#include <fts.h> + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "debug.h" +#include "box32.h" + +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + if(!fmt) + return; + // loop... + const char* p = fmt; + int state = 0; + double d; + while(*p) + { + switch(state) { + case 0: + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'z': state = 2; ++p; break; + case 'L': state = 4; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'o': state += 20; break; // int + case 'x': + case 'X': + case 'u': state += 40; break; // uint + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'n': + case 'p': + case 'S': + case 's': state = 30; break; // pointers + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': *(mystack++) = *(st++); ++p; break; // fetch an int in the stack.... + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 23: // 64bits int + case 43: // 64bits uint + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + state = 0; + ++p; + break; + case 22: // long int + *(int64_t*)mystack = from_long(*(long_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 42: // long uint + *(uint64_t*)mystack = from_ulong(*(ulong_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 14: //%LG long double + #ifdef HAVE_LD80BITS + memcpy(mystack, st, 10); + st+=3; mystack+=2; + #else + LD2D((void*)st, &d); + *(long double*)mystack = (long double)d; + st+=3; mystack+=2; + #endif + state = 0; + ++p; + break; + case 30: //pointer + *(uintptr_t*)mystack = from_ptr(*st); + st++; mystack+=1; + state = 0; + ++p; + break; + case 20: // fallback + case 21: + case 24: // normal int / pointer + case 40: + case 41: + *mystack = *st; + ++mystack; + ++st; + state = 0; + ++p; + break; + default: + // whattt? + state = 0; + } + } +} + +void myStackAlignGVariantNew32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + if (!fmt) + return; + + const char *p = fmt; + int state = 0; + int inblocks = 0; + int tmp; + + do { + switch(state) { + case 0: // Nothing + switch(*p) { + case 'b': // gboolean + case 'y': // guchar + case 'n': // gint16 + case 'q': // guint16 + case 'i': // gint32 + case 'u': // guint32 + case 'h': // gint32 + case 's': // const gchar* + case 'o': + case 'g': + case 'v': // GVariant* + case '*': // GVariant* of any type + case '?': // GVariant* of basic type + case 'r': // GVariant* of tuple type + *mystack = *st; + ++mystack; + ++st; + break; + case 'x': // gint64 + case 't': // guint64 + case 'd': // gdouble + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + break; + case '{': + case '(': ++inblocks; break; + case '}': + case ')': --inblocks; break; + case 'a': state = 1; break; // GVariantBuilder* or GVariantIter** + case 'm': state = 2; break; // maybe types + case '@': state = 3; break; // GVariant* of type [type] + case '^': state = 4; break; // pointer value + case '&': break; // pointer: do nothing + } + break; + case 1: // Arrays + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + } + if (*p == 'a') break; + if (tmp == 0) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } + break; + case 2: // Maybe-types + switch(*p) { + case 'b': // gboolean + case 'y': // guchar + case 'n': // gint16 + case 'q': // guint16 + case 'i': // gint32 + case 'u': // guint32 + case 'h': // gint32 + case 'x': // gint64 + case 't': // guint64 + case 'd': // gdouble + case '{': + case '}': + case '(': + case ')': + // Add a gboolean or gboolean*, no char increment + *mystack = *st; + ++mystack; + ++st; + --p; + state = 0; + break; + case 'a': // GVariantBuilder* or GVariantIter** + case 's': // const gchar* + case 'o': + case 'g': + case 'v': // GVariant* + case '@': // GVariant* of type [type] + case '*': // GVariant* of any type + case '?': // GVariant* of basic type + case 'r': // GVariant* of tuple type + case '&': // pointer + case '^': // pointer value + // Just maybe-NULL + --p; + state = 0; + break; + + default: // Default to add a gboolean & reinit state? + *mystack = *st; + ++mystack; + ++st; + --p; + state = 0; + } + break; + case 3: // GVariant* + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + case 'a': // GVariantBuilder* or GVariantIter** + do { ++p; } while(*p == 'a'); // Use next character which is not an array (array definition) + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + } + break; + } + if (tmp == 0) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } + break; + case 4: // ^ + if (*p == 'a') state = 5; + else if (*p == '&') state = 8; + else state = 0; //??? + break; + case 5: // ^a + if ((*p == 's') || (*p == 'o') || (*p == 'y')) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else if (*p == '&') state = 6; + else if (*p == 'a') state = 7; + else state = 0; //??? + break; + case 6: // ^a& + if ((*p == 's') || (*p == 'o')) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else if (*p == 'a') state = 7; + else state = 0; //??? + break; + case 7: // ^aa / ^a&a + if (*p == 'y') { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else state = 0; //??? + case 8: // ^& + if (*p == 'a') state = 9; + else state = 0; //??? + case 9: // ^&a + if (*p == 'y') { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else state = 0; //??? + } + ++p; + } while (*p && (inblocks || state)); +} + +void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + // loop... + const wchar_t* p = (const wchar_t*)fmt; + int state = 0; + double d; + while(*p) + { + switch(state) { + case 0: + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'z': state = 2; ++p; break; + case 'L': state = 4; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'o': state += 20; break; // int + case 'x': + case 'X': + case 'u': state += 40; break; // unsigned + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'n': + case 'p': + case 'S': + case 's': state = 30; break; // pointers + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': *(mystack++) = *(st++); ++p; break; //fetch an int in the stack + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 23: // 64bits int + case 43: // 64bits uint + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + state = 0; + ++p; + break; + case 22: // long int + *(int64_t*)mystack = from_long(*(long_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 42: // long uint + *(uint64_t*)mystack = from_ulong(*(ulong_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 14: //%LG long double + #ifdef HAVE_LD80BITS + memcpy(mystack, st, 10); + st+=3; mystack+=2; + #else + LD2D((void*)st, &d); + *(long double*)mystack = (long double)d; + st+=3; mystack+=2; + #endif + state = 0; + ++p; + break; + case 30: //pointer + *(uintptr_t*)mystack = from_ptr(*st); + st++; mystack+=1; + state = 0; + ++p; + break; + case 20: // fallback + case 40: + case 21: + case 24: // normal int / pointer + *mystack = *st; + ++mystack; + ++st; + state = 0; + ++p; + break; + default: + // whattt? + state = 0; + } + } +} + + +#if 0 + +typedef struct __attribute__((packed)) { + unsigned char *body_data; + long body_storage; + long body_fill; + long body_returned; + + + int *lacing_vals; + int64_t *granule_vals; + long lacing_storage; + long lacing_fill; + long lacing_packet; + long lacing_returned; + + unsigned char header[282]; + int header_fill __attribute__ ((aligned (4))); + + int e_o_s; + int b_o_s; + long serialno; + long pageno; + int64_t packetno; + int64_t granulepos; + +} ogg_stream_state_x64; + +typedef struct __attribute__((packed)) vorbis_dsp_state_x64 { + int analysisp; + void *vi; //vorbis_info + + float **pcm; + float **pcmret; + int pcm_storage; + int pcm_current; + int pcm_returned; + + int preextrapolate; + int eofflag; + + long lW; + long W; + long nW; + long centerW; + + int64_t granulepos; + int64_t sequence; + + int64_t glue_bits; + int64_t time_bits; + int64_t floor_bits; + int64_t res_bits; + + void *backend_state; +} vorbis_dsp_state_x64; + +typedef struct __attribute__((packed)) { + long endbyte; + int endbit; + + unsigned char *buffer; + unsigned char *ptr; + long storage; +} oggpack_buffer_x64; + +typedef struct __attribute__((packed)) vorbis_block_x64 { + + float **pcm; + oggpack_buffer_x64 opb; + + long lW; + long W; + long nW; + int pcmend; + int mode; + + int eofflag; + int64_t granulepos; + int64_t sequence; + void *vd; + + void *localstore; + long localtop; + long localalloc; + long totaluse; + void *reap; + + long glue_bits; + long time_bits; + long floor_bits; + long res_bits; + + void *internal; + +} vorbis_block_x64; + +typedef struct __attribute__((packed)) OggVorbis_x64 { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + int64_t offset; + int64_t end; + ogg_sync_state oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + int64_t *offsets; + int64_t *dataoffsets; + long *serialnos; + int64_t *pcmlengths; /* overloaded to maintain binary + compatibility; x2 size, stores both + beginning and end values */ + void *vi; //vorbis_info + void *vc; //vorbis_comment + + /* Decoding working state local storage */ + int64_t pcm_offset; + int ready_state; + long current_serialno; + int current_link; + + double bittrack; + double samptrack; + + ogg_stream_state_x64 os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state_x64 vd; /* central working state for the packet->PCM decoder */ + vorbis_block_x64 vb; /* local working space for packet->PCM decode */ + + ov_callbacks callbacks; + +} OggVorbis_x64; + +#define TRANSFERT \ +GO(datasource) \ +GO(seekable) \ +GO(offset) \ +GO(end) \ +GOM(oy, sizeof(ogg_sync_state)) \ +GO(links) \ +GO(offsets) \ +GO(dataoffsets) \ +GO(serialnos) \ +GO(pcmlengths) \ +GO(vi) \ +GO(vc) \ +GO(pcm_offset) \ +GO(ready_state) \ +GO(current_serialno) \ +GO(current_link) \ +GOM(bittrack, 16) \ +GO(os.body_data) \ +GO(os.body_storage) \ +GO(os.body_fill) \ +GO(os.body_returned) \ +GO(os.lacing_vals) \ +GO(os.granule_vals) \ +GO(os.lacing_storage) \ +GO(os.lacing_fill) \ +GO(os.lacing_packet) \ +GO(os.lacing_returned) \ +GOM(os.header, 282) \ +GO(os.header_fill) \ +GO(os.e_o_s) \ +GO(os.b_o_s) \ +GO(os.serialno) \ +GO(os.pageno) \ +GO(os.packetno) \ +GO(os.granulepos) \ +GO(vd.analysisp) \ +GO(vd.vi) \ +GO(vd.pcm) \ +GO(vd.pcmret) \ +GO(vd.pcm_storage) \ +GO(vd.pcm_current) \ +GO(vd.pcm_returned) \ +GO(vd.preextrapolate) \ +GO(vd.eofflag) \ +GO(vd.lW) \ +GO(vd.W) \ +GO(vd.nW) \ +GO(vd.centerW) \ +GO(vd.granulepos) \ +GO(vd.sequence) \ +GO(vd.glue_bits) \ +GO(vd.time_bits) \ +GO(vd.floor_bits) \ +GO(vd.res_bits) \ +GO(vd.backend_state) \ +GO(vb.pcm) \ +GO(vb.opb.endbyte) \ +GO(vb.opb.endbit) \ +GO(vb.opb.buffer) \ +GO(vb.opb.ptr) \ +GO(vb.opb.storage) \ +GO(vb.lW) \ +GO(vb.W) \ +GO(vb.nW) \ +GO(vb.pcmend) \ +GO(vb.mode) \ +GO(vb.eofflag) \ +GO(vb.granulepos) \ +GO(vb.sequence) \ +GO(vb.localstore) \ +GO(vb.localtop) \ +GO(vb.localalloc) \ +GO(vb.totaluse) \ +GO(vb.reap) \ +GO(vb.glue_bits) \ +GO(vb.time_bits) \ +GO(vb.floor_bits) \ +GO(vb.res_bits) \ +GO(vb.internal) \ +GOM(callbacks, sizeof(ov_callbacks)) + +void AlignOggVorbis(void* dest, void* source) +{ + // Arm -> x64 + OggVorbis_x64* src = (OggVorbis_x64*)source; + OggVorbis* dst = (OggVorbis*)dest; + + #define GO(A) dst->A = src->A; + #define GOM(A, S) memcpy(&dst->A, &src->A, S); + TRANSFERT + #undef GO + #undef GOM + dst->vb.vd = (src->vb.vd == &src->vd)?&dst->vd:(vorbis_dsp_state*)src->vb.vd; +} +void UnalignOggVorbis(void* dest, void* source) +{ + // x64 -> Arm + OggVorbis_x64* dst = (OggVorbis_x64*)dest; + OggVorbis* src = (OggVorbis*)source; + + #define GO(A) dst->A = src->A; + #define GOM(A, S) memcpy(&dst->A, &src->A, S); + TRANSFERT + #undef GO + #undef GOM + dst->vb.vd = (src->vb.vd == &src->vd)?&dst->vd:(vorbis_dsp_state_x64*)src->vb.vd; +} +#undef TRANSFERT + +#define TRANSFERT \ +GO(analysisp) \ +GO(vi) \ +GO(pcm) \ +GO(pcmret) \ +GO(pcm_storage) \ +GO(pcm_current) \ +GO(pcm_returned) \ +GO(preextrapolate) \ +GO(eofflag) \ +GO(lW) \ +GO(W) \ +GO(nW) \ +GO(centerW) \ +GO(granulepos) \ +GO(sequence) \ +GO(glue_bits) \ +GO(time_bits) \ +GO(floor_bits) \ +GO(res_bits) \ +GO(backend_state) + +void UnalignVorbisDspState(void* dest, void* source) +{ + // Arm -> x64 + #define GO(A) ((vorbis_dsp_state_x64*)dest)->A = ((vorbis_dsp_state*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_dsp_state_x64*)dest)->A, &((vorbis_dsp_state*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +void AlignVorbisDspState(void* dest, void* source) +{ + // x64 -> Arm + #define GO(A) ((vorbis_dsp_state*)dest)->A = ((vorbis_dsp_state_x64*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_dsp_state*)dest)->A, &((vorbis_dsp_state_x64*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +#undef TRANSFERT + +#define TRANSFERT \ +GO(pcm) \ +GO(opb.endbyte) \ +GO(opb.endbit) \ +GO(opb.buffer) \ +GO(opb.ptr) \ +GO(opb.storage) \ +GO(lW) \ +GO(W) \ +GO(nW) \ +GO(pcmend) \ +GO(mode) \ +GO(eofflag) \ +GO(granulepos) \ +GO(sequence) \ +GO(vd) \ +GO(localstore) \ +GO(localtop) \ +GO(localalloc) \ +GO(totaluse) \ +GO(reap) \ +GO(glue_bits) \ +GO(time_bits) \ +GO(floor_bits) \ +GO(res_bits) \ +GO(internal) + +void UnalignVorbisBlock(void* dest, void* source) +{ + // Arm -> x64 + #define GO(A) ((vorbis_block_x64*)dest)->A = ((vorbis_block*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_block_x64*)dest)->A, &((vorbis_block*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +void AlignVorbisBlock(void* dest, void* source) +{ + // x64 -> Arm + #define GO(A) ((vorbis_block*)dest)->A = ((vorbis_block_x64*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_block*)dest)->A, &((vorbis_block_x64*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} + +#undef TRANSFERT + +typedef union __attribute__((packed)) x64_epoll_data { + void *ptr; + int fd; + uint32_t u32; + uint64_t u64; +} x64_epoll_data_t; + +struct __attribute__((packed)) x64_epoll_event { + uint32_t events; + x64_epoll_data_t data; +}; +// Arm -> x64 +void UnalignEpollEvent(void* dest, void* source, int nbr) +{ + struct x64_epoll_event *x64_struct = (struct x64_epoll_event*)dest; + struct epoll_event *arm_struct = (struct epoll_event*)source; + while(nbr) { + x64_struct->events = arm_struct->events; + x64_struct->data.u64 = arm_struct->data.u64; + ++x64_struct; + ++arm_struct; + --nbr; + } +} + +// x64 -> Arm +void AlignEpollEvent(void* dest, void* source, int nbr) +{ + struct x64_epoll_event *x64_struct = (struct x64_epoll_event*)source; + struct epoll_event *arm_struct = (struct epoll_event*)dest; + while(nbr) { + arm_struct->events = x64_struct->events; + arm_struct->data.u64 = x64_struct->data.u64; + ++x64_struct; + ++arm_struct; + --nbr; + } +} + +typedef struct __attribute__((packed)) x64_SMPEG_Info_s { + int has_audio; + int has_video; + int width; + int height; + int current_frame; + double current_fps; + char audio_string[80]; + int audio_current_frame; + uint32_t current_offset; + uint32_t total_size; + double current_time; + double total_time; +} x64_SMPEG_Info_t; + +#define TRANSFERT \ +GO(has_audio) \ +GO(has_video) \ +GO(width) \ +GO(height) \ +GO(current_frame) \ +GO(current_fps) \ +GOM(audio_string, 80) \ +GO(audio_current_frame) \ +GO(current_offset) \ +GO(total_size) \ +GO(current_time) \ +GO(total_time) + + +// Arm -> x64 +void UnalignSmpegInfo(void* dest, void* source) +{ + #define GO(A) ((x64_SMPEG_Info_t*)dest)->A = ((my_SMPEG_Info_t*)source)->A; + #define GOM(A, S) memcpy(&((x64_SMPEG_Info_t*)dest)->A, &((my_SMPEG_Info_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +// x64 -> Arm +void AlignSmpegInfo(void* dest, void* source) +{ + #define GO(A) ((my_SMPEG_Info_t*)dest)->A = ((x64_SMPEG_Info_t*)source)->A; + #define GOM(A, S) memcpy(&((my_SMPEG_Info_t*)dest)->A, &((x64_SMPEG_Info_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +#undef TRANSFERT + +#define TRANSFERT \ +GOV(fts_cycle) \ +GOV(fts_parent) \ +GOV(fts_link) \ +GO(fts_number) \ +GO(fts_pointer) \ +GO(fts_accpath) \ +GO(fts_path) \ +GO(fts_errno) \ +GO(fts_symfd) \ +GO(fts_pathlen) \ +GO(fts_namelen) \ +GO(fts_ino) \ +GO(fts_dev) \ +GO(fts_nlink) \ +GO(fts_level) \ +GO(fts_info) \ +GO(fts_flags) \ +GO(fts_instr) \ +GO(fts_statp) \ +GOM(fts_name, sizeof(void*)) + +// Arm -> x64 +void UnalignFTSENT(void* dest, void* source) +{ + #define GO(A) ((x64_ftsent_t*)dest)->A = ((FTSENT*)source)->A; + #define GOV(A) ((x64_ftsent_t*)dest)->A = (void*)((FTSENT*)source)->A; + #define GOM(A, S) memcpy(&((x64_ftsent_t*)dest)->A, &((FTSENT*)source)->A, S); + TRANSFERT + #undef GO + #undef GOV + #undef GOM +} +// x64 -> Arm +void AlignFTSENT(void* dest, void* source) +{ + #define GO(A) ((FTSENT*)dest)->A = ((x64_ftsent_t*)source)->A; + #define GOV(A) ((FTSENT*)dest)->A = (void*)((x64_ftsent_t*)source)->A; + #define GOM(A, S) memcpy(&((FTSENT*)dest)->A, &((x64_ftsent_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOV + #undef GOM +} +#undef TRANSFERT + +void alignNGValue(my_GValue_t* v, void* value, int n) +{ + while(n) { + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); + ++v; + value+=4+2*sizeof(double); + --n; + } +} +void unalignNGValue(void* value, my_GValue_t* v, int n) +{ + while(n) { + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); + ++v; + value+=4+2*sizeof(double); + --n; + } +} + +#endif \ No newline at end of file diff --git a/src/libtools/myalign64_32.c b/src/libtools/myalign64_32.c new file mode 100755 index 00000000..8f11c5b2 --- /dev/null +++ b/src/libtools/myalign64_32.c @@ -0,0 +1,104 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> +#include <asm/stat.h> +#include <sys/vfs.h> + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "box32.h" + +void UnalignStat64_32(const void* source, void* dest) +{ + struct i386_stat64 *i386st = (struct i386_stat64*)dest; + struct stat *st = (struct stat*) source; + + memset(i386st->__pad0, 0, sizeof(i386st->__pad0)); + memset(i386st->__pad3, 0, sizeof(i386st->__pad3)); + i386st->st_dev = st->st_dev; + i386st->__st_ino = st->st_ino; + i386st->st_mode = st->st_mode; + i386st->st_nlink = st->st_nlink; + i386st->st_uid = st->st_uid; + i386st->st_gid = st->st_gid; + i386st->st_rdev = st->st_rdev; + i386st->st_size = st->st_size; + i386st->st_blksize = st->st_blksize; + i386st->st_blocks = st->st_blocks; + i386st->st_atime = st->st_atime; + i386st->st_atime_nsec = st->st_atime_nsec; + i386st->st_mtime = st->st_mtime; + i386st->st_mtime_nsec = st->st_mtime_nsec; + i386st->st_ctime = st->st_ctime; + i386st->st_ctime_nsec = st->st_ctime_nsec; + i386st->st_ino = st->st_ino; +} + +struct native_fsid { + int val[2]; +}; + +struct native_statfs64 { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct native_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +}; // f_flags is not always defined, but then f_spare is [5] in that case + + +void UnalignStatFS64_32(const void* source, void* dest) +{ + struct i386_statfs64 *i386st = (struct i386_statfs64*)dest; + struct native_statfs64 *st = (struct native_statfs64*) source; + + i386st->f_type = st->f_type; + i386st->f_bsize = st->f_bsize; + i386st->f_blocks = st->f_blocks; + i386st->f_bfree = st->f_bfree; + i386st->f_bavail = st->f_bavail; + i386st->f_files = st->f_files; + i386st->f_ffree = st->f_ffree; + memcpy(&i386st->f_fsid, &st->f_fsid, sizeof(i386st->f_fsid)); + i386st->f_namelen = st->f_namelen; + i386st->f_frsize = st->f_frsize; + i386st->f_flags = st->f_flags; + i386st->f_spare[0] = st->f_spare[0]; + i386st->f_spare[1] = st->f_spare[1]; + i386st->f_spare[2] = st->f_spare[2]; + i386st->f_spare[3] = st->f_spare[3]; +} +#if 0 +#define TRANSFERT \ +GO(l_type) \ +GO(l_whence) \ +GO(l_start) \ +GO(l_len) \ +GO(l_pid) + +// Arm -> x64 +void UnalignFlock64_32(void* dest, void* source) +{ + #define GO(A) ((x64_flock64_t*)dest)->A = ((my_flock64_t*)source)->A; + TRANSFERT + #undef GO +} + +// x64 -> Arm +void AlignFlock64_32(void* dest, void* source) +{ + #define GO(A) ((my_flock64_t*)dest)->A = ((x64_flock64_t*)source)->A; + TRANSFERT + #undef GO +} +#undef TRANSFERT +#endif \ No newline at end of file diff --git a/src/libtools/signal32.c b/src/libtools/signal32.c new file mode 100644 index 00000000..54d68143 --- /dev/null +++ b/src/libtools/signal32.c @@ -0,0 +1,842 @@ +#define _GNU_SOURCE +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <signal.h> +#include <errno.h> +#include <string.h> +#include <unistd.h> +#include <syscall.h> +#include <stddef.h> +#include <stdarg.h> +#include <ucontext.h> +#include <setjmp.h> +#include <sys/mman.h> +#include <pthread.h> +#ifndef ANDROID +#include <execinfo.h> +#endif + +#include "box32context.h" +#include "debug.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "signals.h" +#include "box64stack.h" +#include "dynarec.h" +#include "callback.h" +#include "x64run.h" +#include "elfloader.h" +#include "threads.h" +#include "emu/x87emu_private.h" +#include "custommem.h" +#ifdef DYNAREC +#include "dynablock.h" +#include "../dynarec/dynablock_private.h" +#include "dynarec_native.h" +#endif + + +/* Definitions taken from the kernel headers. */ +enum +{ + I386_GS = 0, +# define I386_GS I386_GS + I386_FS, +# define I386_FS I386_FS + I386_ES, +# define I386_ES I386_ES + I386_DS, +# define I386_DS I386_DS + I386_EDI, +# define I386_EDI I386_EDI + I386_ESI, +# define I386_ESI I386_ESI + I386_EBP, +# define I386_EBP I386_EBP + I386_ESP, +# define I386_ESP I386_ESP + I386_EBX, +# define I386_EBX I386_EBX + I386_EDX, +# define I386_EDX I386_EDX + I386_ECX, +# define I386_ECX I386_ECX + I386_EAX, +# define I386_EAX I386_EAX + I386_TRAPNO, +# define I386_TRAPNO I386_TRAPNO + I386_ERR, +# define I386_ERR I386_ERR + I386_EIP, +# define I386_EIP I386_EIP + I386_CS, +# define I386_CS I386_CS + I386_EFL, +# define I386_EFL I386_EFL + I386_UESP, +# define I386_UESP I386_UESP + I386_SS +# define I386_SS I386_SS +}; + +typedef uint32_t i386_gregset_t[19]; +struct i386_fpreg +{ + uint16_t significand[4]; + uint16_t exponent; +}__attribute__((packed)); + +struct i386_fpxreg +{ + unsigned short significand[4]; + unsigned short exponent; + unsigned short padding[3]; +}__attribute__((packed)); + +struct i386_xmmreg +{ + uint32_t element[4]; +}__attribute__((packed)); + +struct i386_fpstate +{ + /* Regular FPU environment. */ + uint32_t cw; + uint32_t sw; + uint32_t tag; + uint32_t ipoff; + uint32_t cssel; + uint32_t dataoff; + uint32_t datasel; + struct i386_fpreg _st[8]; + uint32_t status_magic; + /* FXSR FPU environment. */ + uint32_t _fxsr_env[6]; + uint32_t mxcsr; + uint32_t reserved; + struct i386_fpxreg _fxsr_st[8]; + struct i386_xmmreg _xmm[8]; + uint32_t padding[56]; +}__attribute__((packed)); + +typedef struct i386_fpstate *i386_fpregset_t; + +static void save_fpreg(x64emu_t* emu, struct i386_fpstate* state) +{ + emu->sw.f.F87_TOP = emu->top&7; + state->sw = emu->sw.x16; + state->cw = emu->cw.x16; + // save SSE and MMX regs + fpu_fxsave32(emu, &state->_fxsr_env); +} +static void load_fpreg(x64emu_t* emu, struct i386_fpstate* state) +{ + // copy SSE and MMX regs + fpu_fxrstor32(emu, &state->_fxsr_env); + emu->cw.x16 = state->cw; + emu->sw.x16 = state->sw; + emu->top = emu->sw.f.F87_TOP&7; +} + +typedef struct + { + ptr_t ss_sp; + int ss_flags; + long_t ss_size; + } i386_stack_t; + +typedef struct x64_stack_s +{ + void *ss_sp; + int ss_flags; + size_t ss_size; +} x64_stack_t; + + +/* +another way to see the sigcontext +struct sigcontext +{ + unsigned short gs, __gsh; + unsigned short fs, __fsh; + unsigned short es, __esh; + unsigned short ds, __dsh; + unsigned long edi; + unsigned long esi; + unsigned long ebp; + unsigned long esp; + unsigned long ebx; + unsigned long edx; + unsigned long ecx; + unsigned long eax; + unsigned long trapno; + unsigned long err; + unsigned long eip; + unsigned short cs, __csh; + unsigned long eflags; + unsigned long esp_at_signal; + unsigned short ss, __ssh; + struct _fpstate * fpstate; + unsigned long oldmask; + unsigned long cr2; +}; +*/ +typedef struct + { + i386_gregset_t gregs; + ptr_t fpregs; //i386_fpregset_t + uint32_t oldmask; + uint32_t cr2; + } i386_mcontext_t; + +// /!\ signal sig_set is different than glibc __sig_set +#define _NSIG_WORDS (64 / 32) +typedef unsigned long i386_old_sigset_t; +typedef struct { + unsigned long sig[_NSIG_WORDS]; +} i386_sigset_t; + +struct i386_xsave_hdr_struct { + uint64_t xstate_bv; + uint64_t reserved1[2]; + uint64_t reserved2[5]; +}; + +struct i386_xstate { + /* + * Applications need to refer to fpstate through fpstate pointer + * in sigcontext. Not here directly. + */ + struct i386_fpstate fpstate; + struct i386_xsave_hdr_struct xsave_hdr; + /* new processor state extensions will go here */ +} __attribute__ ((aligned (64))); + +struct i386_xstate_cntxt { + ptr_t xstate; //struct i386_xstate *xstate; + uint32_t size; + uint32_t lmask; + uint32_t hmask; +}; + +typedef struct i386_ucontext_s +{ + uint32_t uc_flags; + ptr_t uc_link; //struct i386_ucontext_s *uc_link; + i386_stack_t uc_stack; + i386_mcontext_t uc_mcontext; + i386_sigset_t uc_sigmask; + /* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */ + int unused[32 - (sizeof (sigset_t) / sizeof (int))]; + //struct i386_xstate_cntxt uc_xstate; + struct i386_xstate xstate; +} i386_ucontext_t; + +typedef struct i386_sigframe_s { + ptr_t pretcode; // pointer to retcode + int sig; + i386_mcontext_t cpustate; + struct i386_xstate fpstate; + ptr_t extramask[64-1]; + char retcode[8]; +} i386_sigframe_t; + +struct kernel_sigaction { + void (*k_sa_handler) (int); + unsigned long sa_flags; + void (*sa_restorer) (void); + unsigned long sa_mask; + unsigned long sa_mask2; +}; +#ifdef DYNAREC +uintptr_t getX64Address(dynablock_t* db, uintptr_t arm_addr); +#endif + +x64_stack_t* sigstack_getstack(); +int my_sigaltstack(x64emu_t* emu, const x64_stack_t* ss, x64_stack_t* oss); +EXPORT int my32_sigaltstack(x64emu_t* emu, const i386_stack_t* ss, i386_stack_t* oss) +{ + x64_stack_t ss_ = {0}; + x64_stack_t oss_ = {0}; + if(ss) { + ss_.ss_flags = ss->ss_flags; + ss_.ss_sp = from_ptrv(ss->ss_sp); + ss_.ss_size = ss->ss_size; + } + int ret = my_sigaltstack(emu, ss?(&ss_):NULL, oss?(&oss_):NULL); + if(!ret && oss) { + oss->ss_flags = oss_.ss_flags; + oss->ss_sp = to_ptrv(oss_.ss_sp); + oss->ss_size = oss_.ss_size; + } + return ret; +} + + +uint32_t RunFunctionHandler32(int* exit, int dynarec, i386_ucontext_t* sigcontext, ptr_t fnc, int nargs, ...) +{ + if(fnc==0 || fnc==1) { + va_list va; + va_start (va, nargs); + int sig = va_arg(va, int); + va_end (va); + printf_log(LOG_NONE, "%04d|BOX32: Warning, calling Signal %d function handler %s\n", GetTID(), sig, fnc?"SIG_IGN":"SIG_DFL"); + if(fnc==0) { + printf_log(LOG_NONE, "Unhandled signal caught, aborting\n"); + abort(); + } + return 0; + } +#ifdef HAVE_TRACE + uintptr_t old_start = trace_start, old_end = trace_end; +#if 0 + trace_start = 0; trace_end = 1; // disabling trace, globably for now... +#endif +#endif +#ifndef USE_CUSTOM_MEM + // because a signal can interupt a malloc-like function + // Dynarec cannot be used in signal handling unless custom malloc is used + dynarec = 0; +#endif + + x64emu_t *emu = thread_get_emu(); + #ifdef DYNAREC + if(box64_dynarec_test) + emu->test.test = 0; + #endif + + /*SetFS(emu, default_fs);*/ + for (int i=0; i<6; ++i) + emu->segs_serial[i] = 0; + + int align = nargs&1; + + R_ESP -= nargs * sizeof(ptr_t); + + uint32_t *p = (uint32_t*)from_ptrv(R_ESP); + + va_list va; + va_start (va, nargs); + for (int i=0; i<nargs; ++i) { + uint32_t v = va_arg(va, uint32_t); + *p = v; + p++; + } + va_end (va); + + printf_log(LOG_DEBUG, "%04d|signal #%d function handler %p called, RSP=%p\n", GetTID(), R_EDI, from_ptrv(fnc), from_ptrv(R_ESP)); + + int oldquitonlongjmp = emu->flags.quitonlongjmp; + emu->flags.quitonlongjmp = 2; + int old_cs = R_CS; + R_CS = 0x23; + + emu->eflags.x64 &= ~(1<<F_TF); // this one needs to cleared + + if(dynarec) + DynaCall(emu, fnc); + else + EmuCall(emu, fnc); + + if(!emu->flags.longjmp) + R_ESP+=nargs*sizeof(ptr_t); + + if(!emu->flags.longjmp && R_CS==0x23) + R_CS = old_cs; + + emu->flags.quitonlongjmp = oldquitonlongjmp; + + #ifdef DYNAREC + if(box64_dynarec_test) { + emu->test.test = 0; + emu->test.clean = 0; + } + #endif + + if(emu->flags.longjmp) { + // longjmp inside signal handler, lets grab all relevent value and do the actual longjmp in the signal handler + emu->flags.longjmp = 0; + if(sigcontext) { + sigcontext->uc_mcontext.gregs[I386_EAX] = R_EAX; + sigcontext->uc_mcontext.gregs[I386_ECX] = R_ECX; + sigcontext->uc_mcontext.gregs[I386_EDX] = R_EDX; + sigcontext->uc_mcontext.gregs[I386_EDI] = R_EDI; + sigcontext->uc_mcontext.gregs[I386_ESI] = R_ESI; + sigcontext->uc_mcontext.gregs[I386_EBP] = R_EBP; + sigcontext->uc_mcontext.gregs[I386_ESP] = R_ESP; + sigcontext->uc_mcontext.gregs[I386_EBX] = R_EBX; + sigcontext->uc_mcontext.gregs[I386_EIP] = R_EIP; + // flags + sigcontext->uc_mcontext.gregs[I386_EFL] = emu->eflags.x64; + // get segments + sigcontext->uc_mcontext.gregs[I386_CS] = R_CS; + sigcontext->uc_mcontext.gregs[I386_DS] = R_DS; + sigcontext->uc_mcontext.gregs[I386_ES] = R_ES; + sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; + sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; + sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; + } else { + printf_log(LOG_NONE, "Warning, longjmp in signal but no sigcontext to change\n"); + } + } + if(exit) + *exit = emu->exit; + + uint32_t ret = R_EAX; + +#ifdef HAVE_TRACE + trace_start = old_start; trace_end = old_end; +#endif + + return ret; +} + +#define is_memprot_locked (1<<1) +#define is_dyndump_locked (1<<8) +void my_sigactionhandler_oldcode_32(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) +{ + int Locks = unlockMutex(); + + printf_log(LOG_DEBUG, "Sigactionhanlder for signal #%d called (jump to %p/%s)\n", sig, (void*)my_context->signals[sig], GetNativeName((void*)my_context->signals[sig])); + + uintptr_t restorer = my_context->restorer[sig]; + // get that actual ESP first! + x64emu_t *emu = thread_get_emu(); + uintptr_t frame = R_RSP; +#if defined(DYNAREC) +#if defined(ARM64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.pc; + if(db) + frame = (uintptr_t)p->uc_mcontext.regs[10+_SP]; + } +#elif defined(LA64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.__pc; + if(db) + frame = (uintptr_t)p->uc_mcontext.__gregs[12+_SP]; + } +#elif defined(RV64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.__gregs[0]; + if(db) + frame = (uintptr_t)p->uc_mcontext.__gregs[16+_SP]; + } +#else +#error Unsupported architecture +#endif +#else + (void)ucntx; (void)cur_db; +#endif + // setup libc context stack frame, on caller stack + frame = frame&~15; + + // stack tracking + x64_stack_t *new_ss = my_context->onstack[sig]?sigstack_getstack():NULL; + int used_stack = 0; + if(new_ss) { + if(new_ss->ss_flags == SS_ONSTACK) { // already using it! + frame = ((uintptr_t)emu->regs[_SP].q[0] - 128) & ~0x0f; + } else { + frame = (uintptr_t)(((uintptr_t)new_ss->ss_sp + new_ss->ss_size - 16) & ~0x0f); + used_stack = 1; + new_ss->ss_flags = SS_ONSTACK; + } + } else { + frame -= 0x200; // redzone + } + + // TODO: do I need to really setup 2 stack frame? That doesn't seems right! + // setup stack frame + frame -= 512+64+16*16; + void* xstate = (void*)frame; + frame -= sizeof(siginfo_t); + siginfo_t* info2 = (siginfo_t*)frame; + memcpy(info2, info, sizeof(siginfo_t)); + // try to fill some sigcontext.... + frame -= sizeof(i386_ucontext_t); + i386_ucontext_t *sigcontext = (i386_ucontext_t*)frame; + // get general register + sigcontext->uc_mcontext.gregs[I386_EAX] = R_EAX; + sigcontext->uc_mcontext.gregs[I386_ECX] = R_ECX; + sigcontext->uc_mcontext.gregs[I386_EDX] = R_EDX; + sigcontext->uc_mcontext.gregs[I386_EDI] = R_EDI; + sigcontext->uc_mcontext.gregs[I386_ESI] = R_ESI; + sigcontext->uc_mcontext.gregs[I386_EBP] = R_EBP; + sigcontext->uc_mcontext.gregs[I386_ESP] = R_ESP; + sigcontext->uc_mcontext.gregs[I386_EBX] = R_EBX; + sigcontext->uc_mcontext.gregs[I386_EIP] = R_EIP;//emu->old_ip; // old_ip should be more accurate as the "current" IP, but it's not always up-to-date + // flags + sigcontext->uc_mcontext.gregs[I386_EFL] = emu->eflags.x64; + // get segments + sigcontext->uc_mcontext.gregs[I386_CS] = R_CS; + sigcontext->uc_mcontext.gregs[I386_DS] = R_DS; + sigcontext->uc_mcontext.gregs[I386_ES] = R_ES; + sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; + sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; + sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; +#if defined(DYNAREC) +#if defined(ARM64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.regs[10]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.regs[11]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.regs[12]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.regs[13]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.regs[14]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.regs[15]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.regs[16]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.regs[17]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#elif defined(LA64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[12]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[13]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[14]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[15]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[16]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[17]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[18]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[19]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#elif defined(RV64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[16]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[17]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[18]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[19]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[20]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[21]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[22]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[23]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#else +#error Unsupported architecture +#endif +#endif + // get FloatPoint status + sigcontext->uc_mcontext.fpregs = to_ptrv(xstate);//(struct x64_libc_fpstate*)&sigcontext->xstate; + fpu_xsave_mask(emu, xstate, 1, 0b111); + memcpy(&sigcontext->xstate, xstate, sizeof(sigcontext->xstate)); + ((struct i386_fpstate*)xstate)->status_magic = 0x46505853; // magic number to signal an XSTATE type of fpregs + // get signal mask + + if(new_ss) { + sigcontext->uc_stack.ss_sp = to_ptrv(new_ss->ss_sp); + sigcontext->uc_stack.ss_size = new_ss->ss_size; + sigcontext->uc_stack.ss_flags = new_ss->ss_flags; + } else + sigcontext->uc_stack.ss_flags = SS_DISABLE; + // Try to guess some X64_TRAPNO + /* + TRAP_x86_DIVIDE = 0, // Division by zero exception + TRAP_x86_TRCTRAP = 1, // Single-step exception + TRAP_x86_NMI = 2, // NMI interrupt + TRAP_x86_BPTFLT = 3, // Breakpoint exception + TRAP_x86_OFLOW = 4, // Overflow exception + TRAP_x86_BOUND = 5, // Bound range exception + TRAP_x86_PRIVINFLT = 6, // Invalid opcode exception + TRAP_x86_DNA = 7, // Device not available exception + TRAP_x86_DOUBLEFLT = 8, // Double fault exception + TRAP_x86_FPOPFLT = 9, // Coprocessor segment overrun + TRAP_x86_TSSFLT = 10, // Invalid TSS exception + TRAP_x86_SEGNPFLT = 11, // Segment not present exception + TRAP_x86_STKFLT = 12, // Stack fault + TRAP_x86_PROTFLT = 13, // General protection fault + TRAP_x86_PAGEFLT = 14, // Page fault + TRAP_x86_ARITHTRAP = 16, // Floating point exception + TRAP_x86_ALIGNFLT = 17, // Alignment check exception + TRAP_x86_MCHK = 18, // Machine check exception + TRAP_x86_CACHEFLT = 19 // SIMD exception (via SIGFPE) if CPU is SSE capable otherwise Cache flush exception (via SIGSEV) + */ + uint32_t prot = getProtection((uintptr_t)info->si_addr); + if(sig==SIGBUS) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 17; + else if(sig==SIGSEGV) { + if((uintptr_t)info->si_addr == sigcontext->uc_mcontext.gregs[I386_EIP]) { + sigcontext->uc_mcontext.gregs[I386_ERR] = (info->si_errno==0x1234)?0:((info->si_errno==0xdead)?(0x2|(info->si_code<<3)):0x0010); // execution flag issue (probably), unless it's a #GP(0) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = ((info->si_code==SEGV_ACCERR) || (info->si_errno==0x1234) || (info->si_errno==0xdead) || ((uintptr_t)info->si_addr==0))?13:14; + } else if(info->si_code==SEGV_ACCERR && !(prot&PROT_WRITE)) { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0002; // write flag issue + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 14; + } else { + if((info->si_code!=SEGV_ACCERR) && labs((intptr_t)info->si_addr-(intptr_t)sigcontext->uc_mcontext.gregs[I386_ESP])<16) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 12; // stack overflow probably + else + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = (info->si_code == SEGV_ACCERR)?13:14; + //I386_ERR seems to be INT:8 CODE:8. So for write access segfault it's 0x0002 For a read it's 0x0004 (and 8 for exec). For an int 2d it could be 0x2D01 for example + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0004; // read error? there is no execute control in box64 anyway + } + if(info->si_code == SEGV_ACCERR && old_code) + *old_code = -1; + if(info->si_errno==0x1234) { + info2->si_errno = 0; + } else if(info->si_errno==0xdead) { + // INT x + uint8_t int_n = info2->si_code; + info2->si_errno = 0; + info2->si_code = info->si_code; + info2->si_addr = NULL; + // some special cases... + if(int_n==3) { + info2->si_signo = SIGTRAP; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 3; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } else if(int_n==0x04) { + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 4; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } else if (int_n==0x29 || int_n==0x2c || int_n==0x2d) { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x02|(int_n<<3); + } else { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0a|(int_n<<3); + } + } else if(info->si_errno==0xcafe) { + info2->si_errno = 0; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 0; + info2->si_signo = SIGFPE; + } + } else if(sig==SIGFPE) { + if (info->si_code == FPE_INTOVF) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 4; + else + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 19; + } else if(sig==SIGILL) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 6; + else if(sig==SIGTRAP) { + info2->si_code = 128; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = info->si_code; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } + //TODO: SIGABRT generate what? + printf_log(LOG_DEBUG, "Signal %d: si_addr=%p, TRAPNO=%d, ERR=%d, RIP=%p\n", sig, (void*)info2->si_addr, sigcontext->uc_mcontext.gregs[I386_TRAPNO], sigcontext->uc_mcontext.gregs[I386_ERR],from_ptrv(sigcontext->uc_mcontext.gregs[I386_EIP])); + // call the signal handler + i386_ucontext_t sigcontext_copy = *sigcontext; + // save old value from emu + #define GO(A) uint32_t old_##A = R_##A + GO(EAX); + GO(EDI); + GO(ESI); + GO(EDX); + GO(ECX); + GO(EBP); + #undef GO + // set stack pointer + R_ESP = frame; + // set frame pointer + R_EBP = sigcontext->uc_mcontext.gregs[I386_EBP]; + + int exits = 0; + int ret; + int dynarec = 0; + #ifdef DYNAREC + if(sig!=SIGSEGV && !(Locks&is_dyndump_locked) && !(Locks&is_memprot_locked)) + dynarec = 1; + #endif + ret = RunFunctionHandler32(&exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext); + // restore old value from emu + if(used_stack) // release stack + new_ss->ss_flags = 0; + #define GO(A) R_##A = old_##A + GO(EAX); + GO(EDI); + GO(ESI); + GO(EDX); + GO(ECX); + GO(EBP); + #undef GO + + if(memcmp(sigcontext, &sigcontext_copy, sizeof(i386_ucontext_t))) { + if(emu->jmpbuf) { + #define GO(R) emu->regs[_##R].q[0]=sigcontext->uc_mcontext.gregs[I386_E##R] + GO(AX); + GO(CX); + GO(DX); + GO(DI); + GO(SI); + GO(BP); + GO(SP); + GO(BX); + #undef GO + emu->ip.q[0]=sigcontext->uc_mcontext.gregs[I386_EIP]; + // flags + emu->eflags.x64=sigcontext->uc_mcontext.gregs[I386_EFL]; + // get segments + #define GO(S) if(emu->segs[_##S]!=sigcontext->uc_mcontext.gregs[I386_##S]) emu->segs[_##S]=sigcontext->uc_mcontext.gregs[I386_##S] + GO(CS); + GO(DS); + GO(ES); + GO(SS); + GO(GS); + GO(FS); + #undef GO + for(int i=0; i<6; ++i) + emu->segs_serial[i] = 0; + printf_log(LOG_DEBUG, "Context has been changed in Sigactionhanlder, doing siglongjmp to resume emu at %p, RSP=%p\n", (void*)R_RIP, (void*)R_RSP); + if(old_code) + *old_code = -1; // re-init the value to allow another segfault at the same place + //relockMutex(Locks); // do not relock mutex, because of the siglongjmp, whatever was running is canceled + #ifdef DYNAREC + if(Locks & is_dyndump_locked) + CancelBlock64(1); + #endif + #ifdef RV64 + emu->xSPSave = emu->old_savedsp; + #endif + #ifdef ANDROID + siglongjmp(*emu->jmpbuf, 1); + #else + siglongjmp(emu->jmpbuf, 1); + #endif + } + printf_log(LOG_INFO, "Warning, context has been changed in Sigactionhanlder%s\n", (sigcontext->uc_mcontext.gregs[I386_EIP]!=sigcontext_copy.uc_mcontext.gregs[I386_EIP])?" (EIP changed)":""); + } + // restore regs... + #define GO(R) R_##R=sigcontext->uc_mcontext.gregs[I386_##R] + GO(EAX); + GO(ECX); + GO(EDX); + GO(EDI); + GO(ESI); + GO(EBP); + GO(ESP); + GO(EBX); + #undef GO + emu->eflags.x64=sigcontext->uc_mcontext.gregs[I386_EFL]; + #define GO(R) R_##R=sigcontext->uc_mcontext.gregs[I386_##R] + GO(CS); + GO(DS); + GO(ES); + GO(SS); + GO(GS); + GO(FS); + #undef GO + + printf_log(LOG_DEBUG, "Sigactionhanlder main function returned (exit=%d, restorer=%p)\n", exits, (void*)restorer); + if(exits) { + //relockMutex(Locks); // the thread will exit, so no relock there + #ifdef DYNAREC + if(Locks & is_dyndump_locked) + CancelBlock64(1); + #endif + exit(ret); + } + if(restorer) + RunFunctionHandler32(&exits, 0, NULL, restorer, 0); + relockMutex(Locks); +} + +EXPORT int my32_getcontext(x64emu_t* emu, void* ucp) +{ +// printf_log(LOG_NONE, "Warning: call to partially implemented getcontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // stack traking + u->uc_stack.ss_sp = 0; + u->uc_stack.ss_size = 0; // this need to filled + // get general register + u->uc_mcontext.gregs[I386_EAX] = R_EAX; + u->uc_mcontext.gregs[I386_ECX] = R_ECX; + u->uc_mcontext.gregs[I386_EDX] = R_EDX; + u->uc_mcontext.gregs[I386_EDI] = R_EDI; + u->uc_mcontext.gregs[I386_ESI] = R_ESI; + u->uc_mcontext.gregs[I386_EBP] = R_EBP; + u->uc_mcontext.gregs[I386_EIP] = *(uint32_t*)from_ptrv(R_ESP); + u->uc_mcontext.gregs[I386_ESP] = R_ESP+4; + u->uc_mcontext.gregs[I386_EBX] = R_EBX; + // get segments + u->uc_mcontext.gregs[I386_GS] = R_GS; + u->uc_mcontext.gregs[I386_FS] = R_FS; + u->uc_mcontext.gregs[I386_ES] = R_ES; + u->uc_mcontext.gregs[I386_DS] = R_DS; + u->uc_mcontext.gregs[I386_CS] = R_CS; + u->uc_mcontext.gregs[I386_SS] = R_SS; + // get FloatPoint status + if(u->uc_mcontext.fpregs) + save_fpreg(emu, from_ptrv(u->uc_mcontext.fpregs)); + // get signal mask + sigprocmask(SIG_SETMASK, NULL, (sigset_t*)&u->uc_sigmask); + // ensure uc_link is properly initialized + u->uc_link = to_ptrv(emu->uc_link); + + return 0; +} + +EXPORT int my32_setcontext(x64emu_t* emu, void* ucp) +{ +// printf_log(LOG_NONE, "Warning: call to partially implemented setcontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // stack tracking + emu->init_stack = from_ptrv(u->uc_stack.ss_sp); + emu->size_stack = from_ulong(u->uc_stack.ss_size); + // set general register + R_EAX = u->uc_mcontext.gregs[I386_EAX]; + R_ECX = u->uc_mcontext.gregs[I386_ECX]; + R_EDX = u->uc_mcontext.gregs[I386_EDX]; + R_EDI = u->uc_mcontext.gregs[I386_EDI]; + R_ESI = u->uc_mcontext.gregs[I386_ESI]; + R_EBP = u->uc_mcontext.gregs[I386_EBP]; + R_EIP = u->uc_mcontext.gregs[I386_EIP]; + R_ESP = u->uc_mcontext.gregs[I386_ESP]; + R_EBX = u->uc_mcontext.gregs[I386_EBX]; + // get segments + R_GS = u->uc_mcontext.gregs[I386_GS]; + R_FS = u->uc_mcontext.gregs[I386_FS]; + R_ES = u->uc_mcontext.gregs[I386_ES]; + R_DS = u->uc_mcontext.gregs[I386_DS]; + R_CS = u->uc_mcontext.gregs[I386_CS]; + R_SS = u->uc_mcontext.gregs[I386_SS]; + // set FloatPoint status + if(u->uc_mcontext.fpregs) + load_fpreg(emu, from_ptrv(u->uc_mcontext.fpregs)); + // set signal mask + sigprocmask(SIG_SETMASK, (sigset_t*)&u->uc_sigmask, NULL); + // set uc_link + emu->uc_link = from_ptrv(u->uc_link); + errno = 0; + return R_EAX; +} + +EXPORT int my32_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, int32_t* argv) +{ +// printf_log(LOG_NONE, "Warning: call to unimplemented makecontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // setup stack + u->uc_mcontext.gregs[I386_ESP] = to_ptr(u->uc_stack.ss_sp + u->uc_stack.ss_size - 4); + // setup the function + u->uc_mcontext.gregs[I386_EIP] = to_ptrv(fnc); + // setup args + uint32_t* esp = (uint32_t*)from_ptr(u->uc_mcontext.gregs[I386_ESP]); + for (int i=0; i<argc; ++i) { + // push value + --esp; + *esp = argv[(argc-1)-i]; + } + // push the return value + --esp; + *esp = to_ptr(my_context->exit_bridge); + u->uc_mcontext.gregs[I386_ESP] = (uintptr_t)esp; + + return 0; +} + +EXPORT int my32_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2) +{ +// printf_log(LOG_NONE, "Warning: call to unimplemented swapcontext\n"); + // grab current context in ucp1 + my32_getcontext(emu, ucp1); + // activate ucp2 + my32_setcontext(emu, ucp2); + return 0; +} diff --git a/src/libtools/signals.c b/src/libtools/signals.c index e58081c1..a3030e40 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -269,6 +269,10 @@ static void sigstack_key_alloc() { pthread_key_create(&sigstack_key, sigstack_destroy); } +x64_stack_t* sigstack_getstack() { + return (x64_stack_t*)pthread_getspecific(sigstack_key); +} + // this allow handling "safe" function that just abort if accessing a bad address static __thread JUMPBUFF signal_jmpbuf; #ifdef ANDROID @@ -923,8 +927,17 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) return 0; } +#ifdef BOX32 +void my_sigactionhandler_oldcode_32(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db); +#endif void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) { + #ifdef BOX32 + if(box64_is32bits) { + my_sigactionhandler_oldcode_32(sig, simple, info, ucntx, old_code, cur_db); + return; + } + #endif int Locks = unlockMutex(); printf_log(LOG_DEBUG, "Sigactionhanlder for signal #%d called (jump to %p/%s)\n", sig, (void*)my_context->signals[sig], GetNativeName((void*)my_context->signals[sig])); @@ -2184,7 +2197,7 @@ EXPORT int my_getcontext(x64emu_t* emu, void* ucp) // get signal mask sigprocmask(SIG_SETMASK, NULL, (sigset_t*)&u->uc_sigmask); // ensure uc_link is properly initialized - u->uc_link = emu->uc_link; + u->uc_link = (x64_ucontext_t*)emu->uc_link; return 0; } diff --git a/src/libtools/threads.c b/src/libtools/threads.c index 074068c0..0973d658 100644 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -29,6 +29,9 @@ #include "dynablock.h" #include "dynarec/native_lock.h" #endif +#ifdef BOX32 +#include "box32.h" +#endif //void _pthread_cleanup_push_defer(void* buffer, void* routine, void* arg); // declare hidden functions //void _pthread_cleanup_pop_restore(void* buffer, int exec); @@ -124,14 +127,6 @@ int GetStackSize(x64emu_t* emu, uintptr_t attr, void** stack, size_t* stacksize) void my_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); -typedef struct emuthread_s { - uintptr_t fnc; - void* arg; - x64emu_t* emu; - int cancel_cap, cancel_size; - x64_unwind_buff_t **cancels; -} emuthread_t; - static pthread_key_t thread_key; static void emuthread_destroy(void* p) @@ -144,6 +139,10 @@ static void emuthread_destroy(void* p) if (my_context && (ptr = pthread_getspecific(my_context->tlskey)) != NULL) free_tlsdatasize(ptr);*/ // free x64emu + #ifdef BOX32 + if(box64_is32bits && !et->join) + to_hash_d(et->self); + #endif if(et) { FreeX64Emu(&et->emu); box_free(et); @@ -158,9 +157,13 @@ static void emuthread_cancel(void* p) // check cancels threads for(int i=et->cancel_size-1; i>=0; --i) { et->emu->flags.quitonlongjmp = 0; - my_longjmp(et->emu, et->cancels[i]->__cancel_jmp_buf, 1); + my_longjmp(et->emu, ((x64_unwind_buff_t*)et->cancels[i])->__cancel_jmp_buf, 1); DynaRun(et->emu); // will return after a __pthread_unwind_next() } + #ifdef BOX32 + if(box64_is32bits) + to_hash_d(et->self); + #endif box_free(et->cancels); et->cancels=NULL; et->cancel_size = et->cancel_cap = 0; @@ -182,6 +185,12 @@ void thread_set_emu(x64emu_t* emu) } et->emu = emu; et->emu->type = EMUTYPE_MAIN; + #ifdef BOX32 + if(box64_is32bits) { + et->self = (uintptr_t)pthread_self(); + et->hself = to_hash(et->self); + } + #endif pthread_setspecific(thread_key, et); } @@ -1097,6 +1106,10 @@ EXPORT int my_pthread_barrier_init(x64emu_t* emu, pthread_barrier_t* bar, my_bar void init_pthread_helper() { + #ifdef BOX32 + if(box64_is32bits) + init_pthread_helper_32(); + #endif real_pthread_cleanup_push_defer = (vFppp_t)dlsym(NULL, "_pthread_cleanup_push_defer"); real_pthread_cleanup_pop_restore = (vFpi_t)dlsym(NULL, "_pthread_cleanup_pop_restore"); real_pthread_cond_clockwait = (iFppip_t)dlsym(NULL, "pthread_cond_clockwait"); @@ -1129,6 +1142,10 @@ void clean_current_emuthread() void fini_pthread_helper(box64context_t* context) { + #ifdef BOX32 + if(box64_is32bits) + fini_pthread_helper_32(context); + #endif CleanStackSize(context); clean_current_emuthread(); } diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c new file mode 100755 index 00000000..1fc3a2df --- /dev/null +++ b/src/libtools/threads32.c @@ -0,0 +1,854 @@ +// __USE_UNIX98 is needed for sttype / gettype definition +#define __USE_UNIX98 +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <pthread.h> +#include <signal.h> +#include <errno.h> +#include <setjmp.h> +#include <sys/mman.h> +#include <dlfcn.h> + +#include "debug.h" +#include "box32context.h" +#include "threads.h" +#include "emu/x64emu_private.h" +#include "tools/bridge_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "custommem.h" +#include "khash.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec.h" +#include "bridge.h" +#ifdef DYNAREC +#include "dynablock.h" +#endif + +typedef void (*vFppp_t)(void*, void*, void*); +typedef void (*vFpi_t)(void*, int); +//starting with glibc 2.34+, those 2 functions are in libc.so as versionned symbol only +// So use dlsym to get the symbol unversionned, as simple link will not work. +static vFppp_t real_pthread_cleanup_push_defer = NULL; +static vFpi_t real_pthread_cleanup_pop_restore = NULL; +// those function can be used simply +void _pthread_cleanup_push(void* buffer, void* routine, void* arg); // declare hidden functions +void _pthread_cleanup_pop(void* buffer, int exec); + +typedef struct threadstack_s { + void* stack; + size_t stacksize; +} threadstack_t; + +// longjmp / setjmp +typedef struct jump_buff_i386_s { + uint32_t save_ebx; + uint32_t save_esi; + uint32_t save_edi; + uint32_t save_ebp; + uint32_t save_esp; + uint32_t save_eip; +} jump_buff_i386_t; + +// sigset_t should have the same size on 32bits and 64bits machine (64bits) +typedef struct __jmp_buf_tag_s { + jump_buff_i386_t __jmpbuf; + int __mask_was_saved; + sigset_t __saved_mask; +} __jmp_buf_tag_t; + +typedef struct x64_unwind_buff_s { + struct { + jump_buff_i386_t __cancel_jmp_buf; + int __mask_was_saved; + } __cancel_jmp_buf[1]; + ptr_t __pad[2]; + void* __pad3; +} x64_unwind_buff_t __attribute__((__aligned__)); + +static pthread_attr_t* get_attr(void* attr); +static void del_attr(void* attr); + +typedef void(*vFv_t)(); + +KHASH_MAP_INIT_INT(threadstack, threadstack_t) +#ifndef ANDROID +KHASH_MAP_INIT_INT(cancelthread, __pthread_unwind_buf_t*) +#endif + +void CleanStackSize(box64context_t* context); +void FreeStackSize(kh_threadstack_t* map, uintptr_t attr); +void AddStackSize(kh_threadstack_t* map, uintptr_t attr, void* stack, size_t stacksize); +int GetStackSize(x64emu_t* emu, uintptr_t attr, void** stack, size_t* stacksize); + +static pthread_key_t thread_key; + +void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); + +static void emuthread_destroy(void* p) +{ + emuthread_t *et = (emuthread_t*)p; + if(!et) + return; + // destroy the hash key if thread is not joinable + if(!et->join) + to_hash_d(et->self); + // destroy thread emu and all + if(et) { + FreeX64Emu(&et->emu); + free(et); + } +} + +static void emuthread_cancel(void* p) +{ + emuthread_t *et = (emuthread_t*)p; + if(!et) + return; + // check cancels threads + for(int i=et->cancel_size-1; i>=0; --i) { + et->emu->flags.quitonlongjmp = 0; + my32_longjmp(et->emu, ((x64_unwind_buff_t*)et->cancels[i])->__cancel_jmp_buf, 1); + DynaRun(et->emu); // will return after a __pthread_unwind_next() + } + free(et->cancels); + to_hash_d(et->self); + et->cancels=NULL; + et->cancel_size = et->cancel_cap = 0; +} + +static void* pthread_routine(void* p) +{ + // free current emuthread if it exist + { + void* t = pthread_getspecific(thread_key); + if(t) { + // not sure how this could happens + printf_log(LOG_INFO, "Clean of an existing ET for Thread %04d\n", GetTID()); + emuthread_destroy(t); + } + } + pthread_setspecific(thread_key, p); + // call the function + emuthread_t *et = (emuthread_t*)p; + et->emu->type = EMUTYPE_MAIN; + et->self = (uintptr_t)pthread_self(); + et->hself = to_hash(et->self); + // setup callstack and run... + x64emu_t* emu = et->emu; + Push_32(emu, 0); // PUSH 0 (backtrace marker: return address is 0) + Push_32(emu, 0); // PUSH BP + R_EBP = R_ESP; // MOV BP, SP + R_ESP -= 32; // guard area + R_ESP &=~15; + Push_32(emu, to_ptrv(et->arg)); + PushExit_32(emu); + R_EIP = to_ptr(et->fnc); + pthread_cleanup_push(emuthread_cancel, p); + DynaRun(et->emu); + pthread_cleanup_pop(0); + void* ret = from_ptrv(R_EAX); + return ret; +} + +EXPORT int my32_pthread_attr_destroy(x64emu_t* emu, void* attr) +{ + if(emu->context->stacksizes) + FreeStackSize(emu->context->stacksizes, (uintptr_t)attr); + int ret = pthread_attr_destroy(get_attr(attr)); + del_attr(attr); + return ret; +} + +EXPORT int my32_pthread_attr_getstack(x64emu_t* emu, void* attr, void** stackaddr, size_t* stacksize) +{ + int ret = pthread_attr_getstack(get_attr(attr), stackaddr, stacksize); + if (ret==0) + GetStackSize(emu, (uintptr_t)attr, stackaddr, stacksize); + return ret; +} + +EXPORT int my32_pthread_attr_setstack(x64emu_t* emu, void* attr, void* stackaddr, size_t stacksize) +{ + if(!emu->context->stacksizes) { + emu->context->stacksizes = kh_init(threadstack); + } + AddStackSize(emu->context->stacksizes, (uintptr_t)attr, stackaddr, stacksize); + //Don't call actual setstack... + //return pthread_attr_setstack(attr, stackaddr, stacksize); + return pthread_attr_setstacksize(get_attr(attr), stacksize); +} + +EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_routine, void* arg) +{ + int stacksize = 2*1024*1024; //default stack size is 2Mo + void* attr_stack; + size_t attr_stacksize; + int own; + void* stack; + + if(attr) { + size_t stsize; + if(pthread_attr_getstacksize(get_attr(attr), &stsize)==0) + stacksize = stsize; + if(stacksize<512*1024) // emu and all needs some stack space, don't go too low + pthread_attr_setstacksize(get_attr(attr), 512*1024); + } + if(GetStackSize(emu, (uintptr_t)attr, &attr_stack, &attr_stacksize)) + { + stack = attr_stack; + stacksize = attr_stacksize; + own = 0; + } else { + //stack = malloc(stacksize); + stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + own = 1; + } + + emuthread_t *et = (emuthread_t*)calloc(1, sizeof(emuthread_t)); + x64emu_t *emuthread = NewX64Emu(my_context, (uintptr_t)start_routine, (uintptr_t)stack, stacksize, own); + SetupX64Emu(emuthread, emu); + et->emu = emuthread; + et->fnc = (uintptr_t)start_routine; + et->arg = arg; + if(!attr) + et->join = 1; + else { + int j; + pthread_attr_getdetachstate(get_attr(attr), &j); + if(j==PTHREAD_CREATE_JOINABLE) + et->join = 1; + else + et->join = 0; + } + #ifdef DYNAREC + if(box64_dynarec) { + // pre-creation of the JIT code for the entry point of the thread + dynablock_t *current = NULL; + DBGetBlock(emu, (uintptr_t)start_routine, 1, 1); + } + #endif + // create thread + return pthread_create((pthread_t*)t, get_attr(attr), + pthread_routine, et); +} + +EXPORT int my32_pthread_detach(x64emu_t* emu, pthread_t p) +{ + if(pthread_equal(p ,pthread_self())) { + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + et->join = 0; + } + return pthread_detach(p); +} + +void* my32_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet) +{ + int stacksize = (ssize)?ssize:(2*1024*1024); //default stack size is 2Mo + //void* stack = malloc(stacksize); + void* stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + emuthread_t *et = (emuthread_t*)calloc(1, sizeof(emuthread_t)); + x64emu_t *emuthread = NewX64Emu(emu->context, (uintptr_t)f, (uintptr_t)stack, stacksize, 1); + SetupX64Emu(emuthread, emu); + et->emu = emuthread; + et->fnc = (uintptr_t)f; + et->arg = arg; + #ifdef DYNAREC + if(box64_dynarec) { + // pre-creation of the JIT code for the entry point of the thread + dynablock_t *current = NULL; + DBGetBlock(emu, (uintptr_t)f, 1, 1); + } + #endif + *pet = et; + return pthread_routine; +} + +void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); + +EXPORT void my32___pthread_register_cancel(x64emu_t* emu, x64_unwind_buff_t* buff) +{ + buff = (x64_unwind_buff_t*)from_ptr(R_EAX); // param is in fact on register + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + if(et->cancel_cap == et->cancel_size) { + et->cancel_cap+=8; + et->cancels = realloc(et->cancels, sizeof(x64_unwind_buff_t*)*et->cancel_cap); + } + et->cancels[et->cancel_size++] = buff; +} + +EXPORT void my32___pthread_unregister_cancel(x64emu_t* emu, x64_unwind_buff_t* buff) +{ + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + for (int i=et->cancel_size-1; i>=0; --i) { + if(et->cancels[i] == buff) { + if(i!=et->cancel_size-1) + memmove(et->cancels+i, et->cancels+i+1, sizeof(x64_unwind_buff_t*)*(et->cancel_size-i-1)); + et->cancel_size--; + } + } +} + +EXPORT void my32___pthread_unwind_next(x64emu_t* emu, void* p) +{ + emu->quit = 1; +} + +KHASH_MAP_INIT_INT(once, int) + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) \ +GO(16) \ +GO(17) \ +GO(18) \ +GO(19) \ +GO(20) \ +GO(21) \ +GO(22) \ +GO(23) \ +GO(24) \ +GO(25) \ +GO(26) \ +GO(27) \ +GO(28) \ +GO(29) + +// cleanup_routine +#define GO(A) \ +static uintptr_t my32_cleanup_routine_fct_##A = 0; \ +static void my32_cleanup_routine_##A(void* a) \ +{ \ + RunFunctionFmt(my32_cleanup_routine_fct_##A, "p", to_ptrv(a)); \ +} +SUPER() +#undef GO +static void* findcleanup_routineFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_cleanup_routine_fct_##A == (uintptr_t)fct) return my32_cleanup_routine_##A; + SUPER() + #undef GO + #define GO(A) if(my32_cleanup_routine_fct_##A == 0) {my32_cleanup_routine_fct_##A = (uintptr_t)fct; return my32_cleanup_routine_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for pthread cleanup_routine callback\n"); + return NULL; +} + +// key_destructor +#define GO(A) \ +static uintptr_t my32_key_destructor_fct_##A = 0; \ +static void my32_key_destructor_##A(void* a) \ +{ \ + RunFunctionFmt(my32_key_destructor_fct_##A, "p", to_ptrv(a)); \ +} +SUPER() +#undef GO +static void* findkey_destructorFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_key_destructor_fct_##A == (uintptr_t)fct) return my32_key_destructor_##A; + SUPER() + #undef GO + #define GO(A) if(my32_key_destructor_fct_##A == 0) {my32_key_destructor_fct_##A = (uintptr_t)fct; return my32_key_destructor_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for pthread key_destructor callback\n"); + return NULL; +} + +#undef SUPER + + +int EXPORT my32_pthread_once(x64emu_t* emu, int* once, void* cb) +{ + if(*once) // quick test first + return 0; + // slow test now + #ifdef DYNAREC + int old = native_lock_xchg_d(once, 1); + #else + int old = *once; // outside of the mutex in case once is badly formed + pthread_mutex_lock(&my_context->mutex_lock); + old = *once; + *once = 1; + pthread_mutex_unlock(&my_context->mutex_lock); + #endif + if(old) + return 0; + // make some room and align R_RSP before doing the call (maybe it would be simpler to just use Callback functions) + Push_32(emu, R_EBP); // push rbp + R_EBP = R_ESP; // mov rbp, rsp + R_ESP -= 0x200; + R_ESP &= ~63LL; + DynaCall(emu, (uintptr_t)cb); + R_ESP = R_EBP; // mov rsp, rbp + R_EBP = Pop32(emu); // pop rbp + return 0; +} +EXPORT int my32___pthread_once(x64emu_t* emu, void* once, void* cb) __attribute__((alias("my32_pthread_once"))); + +EXPORT int my32_pthread_key_create(x64emu_t* emu, void* key, void* dtor) +{ + return pthread_key_create(key, findkey_destructorFct(dtor)); +} +EXPORT int my32___pthread_key_create(x64emu_t* emu, void* key, void* dtor) __attribute__((alias("my32_pthread_key_create"))); + +// phtread_cond_init with null attr seems to only write 1 (NULL) dword on x64, while it's 48 bytes on ARM. +// Not sure why as sizeof(pthread_cond_init) is 48 on both platform... But Neverwinter Night init seems to rely on that +// What about cond that are statically initialized? +// Note, this is is a versionned function (the pthread_cond_*), and this seems to correspond to an old behaviour + +KHASH_MAP_INIT_INT(mapcond, pthread_cond_t*); + +// should all access to that map be behind a mutex? +kh_mapcond_t *mapcond = NULL; + +static pthread_cond_t* add_cond(void* cond) +{ + mutex_lock(&my_context->mutex_thread); + khint_t k; + int ret; + pthread_cond_t *c; + k = kh_put(mapcond, mapcond, (uintptr_t)cond, &ret); + if(!ret) + c = kh_value(mapcond, k); // already there... reinit an existing one? + else + c = kh_value(mapcond, k) = (pthread_cond_t*)calloc(1, sizeof(pthread_cond_t)); + //*(ptr_t*)cond = to_ptrv(cond); + mutex_unlock(&my_context->mutex_thread); + return c; +} +static pthread_cond_t* get_cond(void* cond) +{ + pthread_cond_t* ret; + int r; + mutex_lock(&my_context->mutex_thread); + khint_t k = kh_get(mapcond, mapcond, *(uintptr_t*)cond); + if(k==kh_end(mapcond)) { + khint_t k = kh_get(mapcond, mapcond, (uintptr_t)cond); + if(k==kh_end(mapcond)) { + printf_log(LOG_DEBUG, "BOX32: Note: phtread_cond not found, create a new empty one\n"); + ret = (pthread_cond_t*)calloc(1, sizeof(pthread_cond_t)); + k = kh_put(mapcond, mapcond, (uintptr_t)cond, &r); + kh_value(mapcond, k) = ret; + //*(ptr_t*)cond = to_ptrv(cond); + pthread_cond_init(ret, NULL); + } else + ret = kh_value(mapcond, k); + } else + ret = kh_value(mapcond, k); + mutex_unlock(&my_context->mutex_thread); + return ret; +} +static void del_cond(void* cond) +{ + if(!mapcond) + return; + mutex_lock(&my_context->mutex_thread); + khint_t k = kh_get(mapcond, mapcond, *(uintptr_t*)cond); + if(k!=kh_end(mapcond)) { + free(kh_value(mapcond, k)); + kh_del(mapcond, mapcond, k); + } + mutex_unlock(&my_context->mutex_thread); +} +pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m); + +EXPORT int my32_pthread_cond_broadcast_old(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_broadcast(c); +} +EXPORT int my32_pthread_cond_destroy_old(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + int ret = pthread_cond_destroy(c); + if(c!=cond) del_cond(cond); + return ret; +} +EXPORT int my32_pthread_cond_init_old(x64emu_t* emu, void* cond, void* attr) +{ + pthread_cond_t *c = add_cond(cond); + return pthread_cond_init(c, (const pthread_condattr_t*)attr); +} +EXPORT int my32_pthread_cond_signal_old(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_signal(c); +} +EXPORT int my32_pthread_cond_timedwait_old(x64emu_t* emu, void* cond, void* mutex, void* abstime) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_timedwait(c, getAlignedMutex((pthread_mutex_t*)mutex), (const struct timespec*)abstime); +} +EXPORT int my32_pthread_cond_wait_old(x64emu_t* emu, void* cond, void* mutex) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_wait(c, getAlignedMutex((pthread_mutex_t*)mutex)); +} + +EXPORT int my32_pthread_cond_timedwait(x64emu_t* emu, void* cond, void* mutex, void* abstime) +{ + return pthread_cond_timedwait((pthread_cond_t*)cond, getAlignedMutex((pthread_mutex_t*)mutex), (const struct timespec*)abstime); +} +EXPORT int my32_pthread_cond_wait(x64emu_t* emu, void* cond, void* mutex) +{ + return pthread_cond_wait((pthread_cond_t*)cond, getAlignedMutex((pthread_mutex_t*)mutex)); +} + +EXPORT int my32_pthread_mutexattr_setkind_np(x64emu_t* emu, void* t, int kind) +{ + // does "kind" needs some type of translation? + return pthread_mutexattr_settype(t, kind); +} + +// pthread_attr_t on x64 is 36 bytes +static uint64_t ATTR_SIGN = 0xA055E10CDE98LL; // random signature +typedef struct my32_x64_attr_s { + uint64_t sign; + pthread_attr_t* attr; +} my32_x64_attr_t; + +static pthread_attr_t* get_attr(void* attr) +{ + if(!attr) + return NULL; + my32_x64_attr_t* my32_attr = (my32_x64_attr_t*)attr; + if(my32_attr->sign!=ATTR_SIGN) { + my32_attr->attr = (pthread_attr_t*)calloc(1, sizeof(pthread_attr_t)); + my32_attr->sign = ATTR_SIGN; + } + return my32_attr->attr; +} +static void del_attr(void* attr) +{ + if(!attr) + return; + my32_x64_attr_t* my32_attr = (my32_x64_attr_t*)attr; + if(my32_attr->sign==ATTR_SIGN) { + my32_attr->sign = 0; + free(my32_attr->attr); + } +} + +EXPORT int my32_pthread_attr_init(x64emu_t* emu, void* attr) +{ + return pthread_attr_init(get_attr(attr)); +} + +EXPORT int my32_pthread_attr_getdetachstate(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getdetachstate(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getguardsize(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getguardsize(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getinheritsched(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getinheritsched(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getschedparam(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getschedparam(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getschedpolicy(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getschedpolicy(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getscope(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getscope(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getstackaddr(x64emu_t* emu, void* attr, ptr_t* p) +{ + size_t size; + void* pp; + int ret = pthread_attr_getstack(get_attr(attr), &pp, &size); + *p = to_ptrv(pp); + return ret; +} +EXPORT int my32_pthread_attr_getstacksize(x64emu_t* emu, void* attr, ulong_t* p) +{ + size_t size; + void* pp; + int ret = pthread_attr_getstack(get_attr(attr), &pp, &size); + *p = to_ulong(size); + return ret; +} +EXPORT int my32_pthread_attr_setdetachstate(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setdetachstate(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setguardsize(x64emu_t* emu, void* attr, size_t p) +{ + return pthread_attr_setguardsize(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setinheritsched(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setinheritsched(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setschedparam(x64emu_t* emu, void* attr, void* param) +{ + int policy; + pthread_attr_getschedpolicy(get_attr(attr), &policy); + int pmin = sched_get_priority_min(policy); + int pmax = sched_get_priority_max(policy); + if(param) { + int p = *(int*)param; + if(p>=pmin && p<=pmax) + return pthread_attr_setschedparam(get_attr(attr), param); + } + printf_log(LOG_INFO, "Warning, call to pthread_attr_setschedparam(%p, %p[%d]) ignored\n", attr, param, param?(*(int*)param):-1); + return 0; // faking success +} +EXPORT int my32_pthread_attr_setschedpolicy(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setschedpolicy(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setstackaddr(x64emu_t* emu, void* attr, void* p) +{ + ulong_t size = 2*1024*1024; + my32_pthread_attr_getstacksize(emu, attr, &size); + return pthread_attr_setstack(get_attr(attr), p, size); +} +EXPORT int my32_pthread_attr_setstacksize(x64emu_t* emu, void* attr, size_t p) +{ + ptr_t pp; + my32_pthread_attr_getstackaddr(emu, attr, &pp); + return pthread_attr_setstack(get_attr(attr), from_ptrv(pp), p); +} + + +EXPORT int my32_pthread_attr_setscope(x64emu_t* emu, void* attr, int scope) +{ + if(scope!=PTHREAD_SCOPE_SYSTEM) printf_log(LOG_INFO, "Warning, scope of call to pthread_attr_setscope(...) changed from %d to PTHREAD_SCOPE_SYSTEM\n", scope); + return pthread_attr_setscope(get_attr(attr), PTHREAD_SCOPE_SYSTEM); + //The scope is either PTHREAD_SCOPE_SYSTEM or PTHREAD_SCOPE_PROCESS + // but PTHREAD_SCOPE_PROCESS doesn't seem supported on ARM linux, and PTHREAD_SCOPE_SYSTEM is default +} + +#ifndef ANDROID +EXPORT void my32__pthread_cleanup_push_defer(x64emu_t* emu, void* buffer, void* routine, void* arg) +{ + real_pthread_cleanup_push_defer(buffer, findcleanup_routineFct(routine), arg); +} + +EXPORT void my32__pthread_cleanup_push(x64emu_t* emu, void* buffer, void* routine, void* arg) +{ + _pthread_cleanup_push(buffer, findcleanup_routineFct(routine), arg); +} + +EXPORT void my32__pthread_cleanup_pop_restore(x64emu_t* emu, void* buffer, int exec) +{ + real_pthread_cleanup_pop_restore(buffer, exec); +} + +EXPORT void my32__pthread_cleanup_pop(x64emu_t* emu, void* buffer, int exec) +{ + _pthread_cleanup_pop(buffer, exec); +} + +// getaffinity_np (pthread or attr) hav an "old" version (glibc-2.3.3) that only have 2 args, cpusetsize is omited +EXPORT int my32_pthread_getaffinity_np(x64emu_t* emu, pthread_t thread, int cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_getaffinity_np(thread, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_getaffinity_np(%p, %d, %p) errored, with errno=%d\n", (void*)thread, cpusetsize, cpuset, errno); + } + + return ret; +} + +EXPORT int my32_pthread_setaffinity_np(x64emu_t* emu, pthread_t thread, int cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_setaffinity_np(thread, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_setaffinity_np(%p, %d, %p) errored, with errno=%d\n", (void*)thread, cpusetsize, cpuset, errno); + } + + return ret; +} + +EXPORT int my32_pthread_attr_setaffinity_np(x64emu_t* emu, void* attr, uint32_t cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_attr_setaffinity_np(attr, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_attr_setaffinity_np(%p, %d, %p) errored, with errno=%d\n", attr, cpusetsize, cpuset, errno); + } + + return ret; +} +#endif + +EXPORT int my32_pthread_kill(x64emu_t* emu, void* thread, int sig) +{ + // check for old "is everything ok?" + if((thread==NULL) && (sig==0)) + return pthread_kill(pthread_self(), 0); + return pthread_kill((pthread_t)thread, sig); +} + +//EXPORT void my32_pthread_exit(x64emu_t* emu, void* retval) +//{ +// emu->quit = 1; // to be safe +// pthread_exit(retval); +//} + +// TODO: find a better way for mutex. It should be possible to use the actual mutex most of the time, especially for simple ones +// Having the mutex table behind a mutex is far from ideal! + +KHASH_MAP_INIT_INT(mutex, pthread_mutex_t*) +static kh_mutex_t* unaligned_mutex = NULL; +static pthread_rwlock_t m_lock = {0}; +pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m) +{ + pthread_mutex_t* ret = NULL; + pthread_rwlock_rdlock(&m_lock); + khint_t k = kh_get(mutex, unaligned_mutex, (uintptr_t)m); + if(k!=kh_end(unaligned_mutex)) { + ret = kh_value(unaligned_mutex, k); + } else { + int r; + pthread_rwlock_unlock(&m_lock); + pthread_rwlock_wrlock(&m_lock); + k = kh_put(mutex, unaligned_mutex, (uintptr_t)m, &r); + ret = kh_value(unaligned_mutex, k) = (pthread_mutex_t*)calloc(1, sizeof(pthread_mutex_t)); + memcpy(ret, m, 24); + } + pthread_rwlock_unlock(&m_lock); + return ret; +} +EXPORT int my32_pthread_mutex_destroy(pthread_mutex_t *m) +{ + pthread_rwlock_wrlock(&m_lock); + khint_t k = kh_get(mutex, unaligned_mutex, (uintptr_t)m); + if(k!=kh_end(unaligned_mutex)) { + pthread_mutex_t *n = kh_value(unaligned_mutex, k); + kh_del(mutex, unaligned_mutex, k); + int ret = pthread_mutex_destroy(n); + free(n); + return ret; + } + pthread_rwlock_unlock(&m_lock); + return pthread_mutex_destroy(m); +} +#define getAlignedMutexWithInit(A, B) getAlignedMutex(A) + +EXPORT int my32___pthread_mutex_destroy(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_destroy"))); + +EXPORT int my32_pthread_mutex_init(pthread_mutex_t *m, pthread_mutexattr_t *att) +{ + return pthread_mutex_init(getAlignedMutexWithInit(m, 0), att); +} +EXPORT int my32___pthread_mutex_init(pthread_mutex_t *m, pthread_mutexattr_t *att) __attribute__((alias("my32_pthread_mutex_init"))); + +EXPORT int my32_pthread_mutex_lock(pthread_mutex_t *m) +{ + return pthread_mutex_lock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_lock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_lock"))); + +EXPORT int my32_pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec * t) +{ + return pthread_mutex_timedlock(getAlignedMutex(m), t); +} + +EXPORT int my32_pthread_mutex_trylock(pthread_mutex_t *m) +{ + return pthread_mutex_trylock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_trylock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_trylock"))); + +EXPORT int my32_pthread_mutex_unlock(pthread_mutex_t *m) +{ + return pthread_mutex_unlock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_unlock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_unlock"))); + +static int done = 0; +void init_pthread_helper_32() +{ + if(done) + return; + done = 1; + real_pthread_cleanup_push_defer = (vFppp_t)dlsym(NULL, "_pthread_cleanup_push_defer"); + real_pthread_cleanup_pop_restore = (vFpi_t)dlsym(NULL, "_pthread_cleanup_pop_restore"); + + mapcond = kh_init(mapcond); + unaligned_mutex = kh_init(mutex); + pthread_key_create(&thread_key, emuthread_destroy); + pthread_setspecific(thread_key, NULL); +} + +void clean_current_emuthread_32() +{ + emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); + if(et) { + emuthread_destroy(et); + pthread_setspecific(thread_key, NULL); + } +} + +void fini_pthread_helper_32(box64context_t* context) +{ + if(!done) + return; + done = 0; + //CleanStackSize(context); + pthread_cond_t *cond; + kh_foreach_value(mapcond, cond, + pthread_cond_destroy(cond); + free(cond); + ); + kh_destroy(mapcond, mapcond); + mapcond = NULL; + pthread_mutex_t *m; + kh_foreach_value(unaligned_mutex, m, + pthread_mutex_destroy(m); + free(m); + ); + kh_destroy(mutex, unaligned_mutex); + + clean_current_emuthread_32(); +} diff --git a/src/tools/box32stack.c b/src/tools/box32stack.c new file mode 100644 index 00000000..441b27ab --- /dev/null +++ b/src/tools/box32stack.c @@ -0,0 +1,137 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <sys/mman.h> + +#include "box64stack.h" +#include "box64context.h" +#include "elfloader.h" +#include "debug.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "auxval.h" +#include "custommem.h" +#include "box32.h" + +static void PushString32(x64emu_t *emu, const char* s) +{ + int sz = strlen(s) + 1; + // round to 4 bytes boundary + R_ESP -= sz; + memcpy(from_ptrv(R_ESP), s, sz); +} + +static void Push32_32(x64emu_t *emu, uint32_t v) +{ + R_ESP -= 4; + *((uint32_t*)from_ptr(R_ESP)) = v; +} + + +EXPORTDYN +void SetupInitialStack32(x64emu_t *emu) +{ + // start with 0 + Push32_32(emu, 0); + // push program executed + PushString32(emu, emu->context->argv[0]); + uintptr_t p_arg0 = from_ptr(R_ESP); + // push envs + uintptr_t p_envv[emu->context->envc]; + for (int i=emu->context->envc-1; i>=0; --i) { + PushString32(emu, emu->context->envv[i]); + p_envv[i] = from_ptr(R_ESP); + } + // push args, also, free the argv[] string and point to the one in the main stack + uintptr_t p_argv[emu->context->argc]; + for (int i=emu->context->argc-1; i>=0; --i) { + PushString32(emu, emu->context->argv[i]); + p_argv[i] = R_ESP; + free(emu->context->argv[i]); + emu->context->argv[i] = (char*)p_argv[i]; + } + // align + uintptr_t tmp = from_ptr(R_ESP)&~(emu->context->stackalign-1); + memset((void*)tmp, 0, from_ptr(R_ESP)-tmp); + R_ESP=to_ptr(tmp); + + // push some AuxVector stuffs + PushString32(emu, "i686"); + uintptr_t p_i686 = from_ptr(R_ESP); + uintptr_t p_random = real_getauxval(25); + if(!p_random) { + for (int i=0; i<4; ++i) + Push32_32(emu, random()); + p_random = from_ptr(R_ESP); + } + // align + tmp = (R_ESP)&~(emu->context->stackalign-1); + memset((void*)tmp, 0, from_ptr(R_ESP)-tmp); + R_ESP=tmp; + + // push the AuxVector themselves + /* + 00: 00000000 + 03: 08048034 + 04: 00000020 + 05: 0000000b + 06: 00001000 + 07: f7fc0000 + 08: 00000000 + 09: 08049060 + 11: 000003e8 + 12: 000003e8 + 13: 000003e8 + 14: 000003e8 + 15: ffd8aa5b/i686 + 16: bfebfbff + 17: 00000064 + 23: 00000000 + 25: ffd8aa4b + 26: 00000000 + 31: ffd8bfeb/./testAuxVec + 32: f7fbfb40 + 33: f7fbf000 + */ + Push32_32(emu, 0); Push32_32(emu, 0); //AT_NULL(0)=0 + //Push32_32(emu, ); Push32_32(emu, 3); //AT_PHDR(3)=address of the PH of the executable + //Push32_32(emu, ); Push32_32(emu, 4); //AT_PHENT(4)=size of PH entry + //Push32_32(emu, ); Push32_32(emu, 5); //AT_PHNUM(5)=number of elf headers + Push32_32(emu, box64_pagesize); Push32_32(emu, 6); //AT_PAGESZ(6) + //Push32_32(emu, real_getauxval(7)); Push32_32(emu, 7); //AT_BASE(7)=ld-2.27.so start (in memory) + Push32_32(emu, 0); Push32_32(emu, 8); //AT_FLAGS(8)=0 + Push32_32(emu, R_EIP); Push32_32(emu, 9); //AT_ENTRY(9)=entrypoint + Push32_32(emu, from_ulong(real_getauxval(11))); Push32_32(emu, 11); //AT_UID(11) + Push32_32(emu, from_ulong(real_getauxval(12))); Push32_32(emu, 12); //AT_EUID(12) + Push32_32(emu, from_ulong(real_getauxval(13))); Push32_32(emu, 13); //AT_GID(13) + Push32_32(emu, from_ulong(real_getauxval(14))); Push32_32(emu, 14); //AT_EGID(14) + Push32_32(emu, p_i686); Push32_32(emu, 15); //AT_PLATFORM(15)=&"i686" + // Push HWCAP: + // FPU: 1<<0 ; VME: 1<<1 ; DE : 1<<2 ; PSE: 1<<3 ; TSC: 1<<4 ; MSR: 1<<5 ; PAE: 1<<6 ; MCE: 1<<7 + // CX8: 1<<8 ; APIC:1<<9 ; SEP: 1<<11; MTRR:1<<12; PGE: 1<<13; MCA: 1<<14; CMOV:1<<15 + // FCMOV:1<<16; MMX: 1<<23 + // OSFXR:1<<24; XMM: 1<<25;XMM2: 1<<26; AMD3D:1<<31 + Push32_32(emu, (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<8) | (1<<15) | (1<<16) | (1<<23) | (1<<25) | (1<<26)); + Push32_32(emu, 16); //AT_HWCAP(16)=... + //Push32_32(emu, sysconf(_SC_CLK_TCK)); Push32_32(emu, 17); //AT_CLKTCK(17)=times() frequency + Push32_32(emu, from_ulong(real_getauxval(23))); Push32_32(emu, 23); //AT_SECURE(23) + Push32_32(emu, p_random); Push32_32(emu, 25); //AT_RANDOM(25)=p_random + Push32_32(emu, 0); Push32_32(emu, 26); //AT_HWCAP2(26)=0 + Push32_32(emu, p_arg0); Push32_32(emu, 31); //AT_EXECFN(31)=p_arg0 + Push32_32(emu, emu->context->vsyscall); Push32_32(emu, 32); //AT_SYSINFO(32)=vsyscall + //Push32_32(emu, ); Push32_32(emu, 33); //AT_SYSINFO_EHDR(33)=address of vDSO + if(!emu->context->auxval_start) // store auxval start if needed + emu->context->auxval_start = (uintptr_t*)from_ptr(R_ESP); + + // push nil / envs / nil / args / argc + Push32_32(emu, 0); + for (int i=emu->context->envc-1; i>=0; --i) + Push32_32(emu, to_ptr(p_envv[i])); + emu->context->envv32 = R_ESP; + Push32_32(emu, 0); + for (int i=emu->context->argc-1; i>=0; --i) + Push32_32(emu, to_ptr(p_argv[i])); + emu->context->argv32 = R_ESP; + Push32_32(emu, emu->context->argc); +} diff --git a/src/tools/box64stack.c b/src/tools/box64stack.c index 7be31b4d..82dc9a63 100644 --- a/src/tools/box64stack.c +++ b/src/tools/box64stack.c @@ -42,9 +42,19 @@ void PushString(x64emu_t *emu, const char* s) memcpy((void*)R_RSP, s, sz); } +void SetupInitialStack32(x64emu_t *emu) +#ifndef BOX32 + { } +#else + ; +#endif EXPORTDYN void SetupInitialStack(x64emu_t *emu) { + if(box64_is32bits) { + SetupInitialStack32(emu); + return; + } // start with 0 Push64(emu, 0); // push program executed diff --git a/src/tools/callback.c b/src/tools/callback.c index 341a554d..661a3b13 100644 --- a/src/tools/callback.c +++ b/src/tools/callback.c @@ -12,43 +12,74 @@ #include "box64context.h" #include "box64stack.h" #include "dynarec.h" +#ifdef BOX32 +#include "box32.h" +#endif EXPORTDYN uint64_t RunFunction(uintptr_t fnc, int nargs, ...) { x64emu_t *emu = thread_get_emu(); - int align = (nargs>6)?(((nargs-6)&1)):0; - int stackn = align + ((nargs>6)?(nargs-6):0); - - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_RBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp - R_RSP -= stackn*sizeof(void*); // need to push in reverse order + R_ESP -= nargs*4; // need to push in reverse order - uint64_t *p = (uint64_t*)R_RSP; + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); - va_list va; - va_start (va, nargs); - for (int i=0; i<nargs; ++i) { - if(i<6) { - int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; - emu->regs[nn[i]].q[0] = va_arg(va, uint64_t); - } else { - *p = va_arg(va, uint64_t); + va_list va; + va_start (va, nargs); + for (int i=0; i<nargs; ++i) { + *p = va_arg(va, uint32_t); p++; } + va_end (va); + } else + #endif + { + int align = (nargs>6)?(((nargs-6)&1)):0; + int stackn = align + ((nargs>6)?(nargs-6):0); + + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + + R_RSP -= stackn*sizeof(void*); // need to push in reverse order + + uint64_t *p = (uint64_t*)R_RSP; + + va_list va; + va_start (va, nargs); + for (int i=0; i<nargs; ++i) { + if(i<6) { + int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; + emu->regs[nn[i]].q[0] = va_arg(va, uint64_t); + } else { + *p = va_arg(va, uint64_t); + p++; + } + } + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; DynaCall(emu, fnc); if(oldip==R_RIP) { - R_RSP = R_RBP; // mov rsp, rbp - R_RBP = Pop64(emu); // pop rbp + #ifdef BOX32 + if(box64_is32bits) { + R_RSP = R_EBP; // mov esp, ebp + R_EBP = Pop_32(emu); // pop ebp + } + #endif + { + R_RSP = R_RBP; // mov rsp, rbp + R_RBP = Pop64(emu); // pop rbp + } } - uint64_t ret = R_RAX; + uint64_t ret = box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX; return ret; } @@ -61,6 +92,27 @@ uint64_t RunFunctionFmt(uintptr_t fnc, const char* fmt, ...) int ni = 0; int ndf = 0; for (int i=0; fmt[i]; ++i) { + #ifdef BOX32 + if(box64_is32bits) + switch(fmt[i]) { + case 'd': + case 'I': + case 'U': nargs+=2; break; + case 'p': + case 'L': + case 'l': + case 'f': + case 'i': + case 'u': + case 'w': + case 'W': + case 'c': + case 'C': ++nargs; break; + default: + ++nargs; break; + } + else + #endif switch(fmt[i]) { case 'f': case 'd': if(ndf<8) ++ndf; else ++nargs; break; @@ -83,63 +135,116 @@ uint64_t RunFunctionFmt(uintptr_t fnc, const char* fmt, ...) ndf = 0; int align = nargs&1; int stackn = align + nargs; + int sizeof_ptr = sizeof(void*); + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_EBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp + sizeof_ptr = sizeof(ptr_t); + } else + #endif + { + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + } - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp - - R_RSP -= stackn*sizeof(void*); // need to push in reverse order - - uint64_t *p = (uint64_t*)R_RSP; - - static const int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; - #define GO(c, A, B, B2, C) case c: if(ni<6) emu->regs[nn[ni++]].A[0] = C va_arg(va, B2); else {*p = 0; *((B*)p) = va_arg(va, B2); ++p;}; break; - va_list va; - va_start (va, fmt); - for (int i=0; fmt[i]; ++i) { - switch(fmt[i]) { - case 'f': if(ndf<8) - emu->xmm[ndf++].f[0] = va_arg(va, double); // float are promoted to double in ... - else { - *p = 0; - *((float*)p) = va_arg(va, double); - ++p; - } - break; - case 'd': if(ndf<8) - emu->xmm[ndf++].d[0] = va_arg(va, double); - else { - *((double*)p) = va_arg(va, double); - ++p; - } - break; - GO('p', q, void*, void*, (uintptr_t)) - GO('i', sdword, int, int, ) - GO('u', dword, uint32_t, uint32_t, ) - GO('I', sq, int64_t, int64_t, ) - GO('U', q, uint64_t, uint64_t, ) - GO('L', q, uint64_t, uint64_t, ) - GO('l', sq, int64_t, int64_t, ) - GO('w', sword, int16_t, int, ) - GO('W', word, uint16_t, int, ) - GO('c', sbyte, int8_t, int, ) - GO('C', byte, uint8_t, int, ) - default: - printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); - if(ni<6) emu->regs[nn[ni++]].q[0] = va_arg(va, uint64_t); else {*p = va_arg(va, uint64_t); ++p;}; - break; + R_RSP -= stackn*sizeof_ptr; // need to push in reverse order + + #ifdef BOX32 + if(box64_is32bits) { + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); + + #define GO(c, B, B2, N) case c: *((B*)p) = va_arg(va, B2); p+=N; break + va_list va; + va_start (va, fmt); + for (int i=0; fmt[i]; ++i) { + switch(fmt[i]) { + GO('f', float, double, 1); + GO('d', double, double, 2); + case 'p': *((ptr_t*)p) = to_ptrv(va_arg(va, void*)); p+=1; break; + GO('i', int, int, 1); + GO('u', uint32_t, uint32_t, 1); + GO('I', int64_t, int64_t, 2); + GO('U', uint64_t, uint64_t, 2); + GO('L', uint32_t, uint64_t, 1); // long are 64bits on 64bits system + GO('l', int32_t, int64_t, 1); // but 32bits on 32bits system + GO('w', int16_t, int, 1); + GO('W', uint16_t, int, 1); + GO('c', int8_t, int, 1); + GO('C', uint8_t, int, 1); + default: + printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); + *p = va_arg(va, uint32_t); + ++p; + break; + } } + #undef GO + va_end (va); + } else + #endif + { + uint64_t *p = (uint64_t*)R_RSP; + + static const int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; + #define GO(c, A, B, B2, C) case c: if(ni<6) emu->regs[nn[ni++]].A[0] = C va_arg(va, B2); else {*p = 0; *((B*)p) = va_arg(va, B2); ++p;}; break; + va_list va; + va_start (va, fmt); + for (int i=0; fmt[i]; ++i) { + switch(fmt[i]) { + case 'f': if(ndf<8) + emu->xmm[ndf++].f[0] = va_arg(va, double); // float are promoted to double in ... + else { + *p = 0; + *((float*)p) = va_arg(va, double); + ++p; + } + break; + case 'd': if(ndf<8) + emu->xmm[ndf++].d[0] = va_arg(va, double); + else { + *((double*)p) = va_arg(va, double); + ++p; + } + break; + GO('p', q, void*, void*, (uintptr_t)) + GO('i', sdword, int, int, ) + GO('u', dword, uint32_t, uint32_t, ) + GO('I', sq, int64_t, int64_t, ) + GO('U', q, uint64_t, uint64_t, ) + GO('L', q, uint64_t, uint64_t, ) + GO('l', sq, int64_t, int64_t, ) + GO('w', sword, int16_t, int, ) + GO('W', word, uint16_t, int, ) + GO('c', sbyte, int8_t, int, ) + GO('C', byte, uint8_t, int, ) + default: + printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); + if(ni<6) emu->regs[nn[ni++]].q[0] = va_arg(va, uint64_t); else {*p = va_arg(va, uint64_t); ++p;}; + break; + } + } + #undef GO + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; DynaCall(emu, fnc); if(oldip==R_RIP) { - R_RSP = R_RBP; // mov rsp, rbp - R_RBP = Pop64(emu); // pop rbp + #ifdef BOX32 + if(box64_is32bits) { + R_RSP = R_EBP; // mov esp, ebp + R_RBP = Pop_32(emu); // pop ebp + } + #endif + { + R_RSP = R_RBP; // mov rsp, rbp + R_RBP = Pop64(emu); // pop rbp + } } - uint64_t ret = R_RAX; + uint64_t ret = box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX; return ret; } @@ -148,6 +253,10 @@ EXPORTDYN uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) { x64emu_t * emu = thread_get_emu(); + if(box64_is32bits) { + printf_log(LOG_NONE, "Calling RunSafeFunction in 32bits\n"); + abort(); + } int align = (nargs>6)?(((nargs-6)&1)):0; int stackn = align + ((nargs>6)?(nargs-6):0); @@ -222,28 +331,48 @@ uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) EXPORTDYN uint64_t RunFunctionWithEmu(x64emu_t *emu, int QuitOnLongJump, uintptr_t fnc, int nargs, ...) { - int align = (nargs>6)?(((nargs-6)&1)):0; - int stackn = align + ((nargs>6)?(nargs-6):0); - - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_RBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp - R_RSP -= stackn*sizeof(void*); // need to push in reverse order + R_ESP -= nargs*4; // need to push in reverse order - uint64_t *p = (uint64_t*)R_RSP; + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); - va_list va; - va_start (va, nargs); - for (int i=0; i<nargs; ++i) { - if(i<6) { - int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; - emu->regs[nn[i]].q[0] = va_arg(va, uint64_t); - } else { - *p = va_arg(va, uint64_t); + va_list va; + va_start (va, nargs); + for (int i=0; i<nargs; ++i) { + *p = va_arg(va, uint32_t); p++; } + va_end (va); + } else + #endif + { + int align = (nargs>6)?(((nargs-6)&1)):0; + int stackn = align + ((nargs>6)?(nargs-6):0); + + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + + R_RSP -= stackn*sizeof(void*); // need to push in reverse order + + uint64_t *p = (uint64_t*)R_RSP; + + va_list va; + va_start (va, nargs); + for (int i=0; i<nargs; ++i) { + if(i<6) { + int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; + emu->regs[nn[i]].q[0] = va_arg(va, uint64_t); + } else { + *p = va_arg(va, uint64_t); + p++; + } + } + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; int old_quit = emu->quit; @@ -256,20 +385,29 @@ uint64_t RunFunctionWithEmu(x64emu_t *emu, int QuitOnLongJump, uintptr_t fnc, in if(oldip==R_RIP) { R_RSP = R_RBP; // restore stack only if EIP is the one expected (else, it means return value is not the one expected) - R_RBP = Pop64(emu); //Pop EBP + #ifdef BOX32 + if(box64_is32bits) + R_RBP = Pop_32(emu); //Pop EBP + else + #endif + R_RBP = Pop64(emu); //Pop EBP } emu->quit = old_quit; emu->flags.quitonlongjmp = oldlong; - return R_RAX; + return box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX;; } EXPORTDYN uint64_t RunFunctionWindows(uintptr_t fnc, int nargs, ...) { x64emu_t *emu = thread_get_emu(); + if(box64_is32bits) { + printf_log(LOG_NONE, "Calling RunFunctionWindows in 32bits\n"); + abort(); + } int align = (nargs>4)?(((nargs-4)&1)):0; int stackn = align + ((nargs>4)?(nargs-4):0); diff --git a/src/wrapped/generated/wrappedaluredefs.h b/src/wrapped/generated/wrappedaluredefs.h index 25481ebd..ed991ac9 100644 --- a/src/wrapped/generated/wrappedaluredefs.h +++ b/src/wrapped/generated/wrappedaluredefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalureDEFS_H_ #define __wrappedalureDEFS_H_ diff --git a/src/wrapped/generated/wrappedaluretypes.h b/src/wrapped/generated/wrappedaluretypes.h index 6026c995..e7ad2fc7 100644 --- a/src/wrapped/generated/wrappedaluretypes.h +++ b/src/wrapped/generated/wrappedaluretypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalureTYPES_H_ #define __wrappedalureTYPES_H_ diff --git a/src/wrapped/generated/wrappedalureundefs.h b/src/wrapped/generated/wrappedalureundefs.h index 35d18761..e831d08b 100644 --- a/src/wrapped/generated/wrappedalureundefs.h +++ b/src/wrapped/generated/wrappedalureundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalureUNDEFS_H_ #define __wrappedalureUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedalutdefs.h b/src/wrapped/generated/wrappedalutdefs.h index 932f9b40..4159e6ec 100644 --- a/src/wrapped/generated/wrappedalutdefs.h +++ b/src/wrapped/generated/wrappedalutdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalutDEFS_H_ #define __wrappedalutDEFS_H_ diff --git a/src/wrapped/generated/wrappedaluttypes.h b/src/wrapped/generated/wrappedaluttypes.h index fd59c671..143dde60 100644 --- a/src/wrapped/generated/wrappedaluttypes.h +++ b/src/wrapped/generated/wrappedaluttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalutTYPES_H_ #define __wrappedalutTYPES_H_ diff --git a/src/wrapped/generated/wrappedalutundefs.h b/src/wrapped/generated/wrappedalutundefs.h index 837ffbd3..97eb4984 100644 --- a/src/wrapped/generated/wrappedalutundefs.h +++ b/src/wrapped/generated/wrappedalutundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedalutUNDEFS_H_ #define __wrappedalutUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedanldefs.h b/src/wrapped/generated/wrappedanldefs.h index 6c72df28..7edc8921 100644 --- a/src/wrapped/generated/wrappedanldefs.h +++ b/src/wrapped/generated/wrappedanldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedanlDEFS_H_ #define __wrappedanlDEFS_H_ diff --git a/src/wrapped/generated/wrappedanltypes.h b/src/wrapped/generated/wrappedanltypes.h index 4c56eb37..44ab3979 100644 --- a/src/wrapped/generated/wrappedanltypes.h +++ b/src/wrapped/generated/wrappedanltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedanlTYPES_H_ #define __wrappedanlTYPES_H_ diff --git a/src/wrapped/generated/wrappedanlundefs.h b/src/wrapped/generated/wrappedanlundefs.h index ed0ba39f..5da94bf1 100644 --- a/src/wrapped/generated/wrappedanlundefs.h +++ b/src/wrapped/generated/wrappedanlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedanlUNDEFS_H_ #define __wrappedanlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkbridgedefs.h b/src/wrapped/generated/wrappedatkbridgedefs.h index a7aa9e4f..631d5a84 100644 --- a/src/wrapped/generated/wrappedatkbridgedefs.h +++ b/src/wrapped/generated/wrappedatkbridgedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkbridgeDEFS_H_ #define __wrappedatkbridgeDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkbridgetypes.h b/src/wrapped/generated/wrappedatkbridgetypes.h index fc55a5e4..f564afe0 100644 --- a/src/wrapped/generated/wrappedatkbridgetypes.h +++ b/src/wrapped/generated/wrappedatkbridgetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkbridgeTYPES_H_ #define __wrappedatkbridgeTYPES_H_ diff --git a/src/wrapped/generated/wrappedatkbridgeundefs.h b/src/wrapped/generated/wrappedatkbridgeundefs.h index 2549ad2e..d3a6395c 100644 --- a/src/wrapped/generated/wrappedatkbridgeundefs.h +++ b/src/wrapped/generated/wrappedatkbridgeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkbridgeUNDEFS_H_ #define __wrappedatkbridgeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkdefs.h b/src/wrapped/generated/wrappedatkdefs.h index e5408284..5c2f53a4 100644 --- a/src/wrapped/generated/wrappedatkdefs.h +++ b/src/wrapped/generated/wrappedatkdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkDEFS_H_ #define __wrappedatkDEFS_H_ diff --git a/src/wrapped/generated/wrappedatktypes.h b/src/wrapped/generated/wrappedatktypes.h index 98cae437..fe4417db 100644 --- a/src/wrapped/generated/wrappedatktypes.h +++ b/src/wrapped/generated/wrappedatktypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkTYPES_H_ #define __wrappedatkTYPES_H_ diff --git a/src/wrapped/generated/wrappedatkundefs.h b/src/wrapped/generated/wrappedatkundefs.h index c100ca47..d9b9ee9b 100644 --- a/src/wrapped/generated/wrappedatkundefs.h +++ b/src/wrapped/generated/wrappedatkundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatkUNDEFS_H_ #define __wrappedatkUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatomicdefs.h b/src/wrapped/generated/wrappedatomicdefs.h index 7c0be638..98ebdcf6 100644 --- a/src/wrapped/generated/wrappedatomicdefs.h +++ b/src/wrapped/generated/wrappedatomicdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatomicDEFS_H_ #define __wrappedatomicDEFS_H_ diff --git a/src/wrapped/generated/wrappedatomictypes.h b/src/wrapped/generated/wrappedatomictypes.h index b7ef8829..8fb6ed69 100644 --- a/src/wrapped/generated/wrappedatomictypes.h +++ b/src/wrapped/generated/wrappedatomictypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatomicTYPES_H_ #define __wrappedatomicTYPES_H_ diff --git a/src/wrapped/generated/wrappedatomicundefs.h b/src/wrapped/generated/wrappedatomicundefs.h index 6a71a445..ad461c7d 100644 --- a/src/wrapped/generated/wrappedatomicundefs.h +++ b/src/wrapped/generated/wrappedatomicundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatomicUNDEFS_H_ #define __wrappedatomicUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatspidefs.h b/src/wrapped/generated/wrappedatspidefs.h index d7983847..06dd6d38 100644 --- a/src/wrapped/generated/wrappedatspidefs.h +++ b/src/wrapped/generated/wrappedatspidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatspiDEFS_H_ #define __wrappedatspiDEFS_H_ diff --git a/src/wrapped/generated/wrappedatspitypes.h b/src/wrapped/generated/wrappedatspitypes.h index 0293ae92..0a6b16c9 100644 --- a/src/wrapped/generated/wrappedatspitypes.h +++ b/src/wrapped/generated/wrappedatspitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatspiTYPES_H_ #define __wrappedatspiTYPES_H_ diff --git a/src/wrapped/generated/wrappedatspiundefs.h b/src/wrapped/generated/wrappedatspiundefs.h index 216cda26..fd308cc0 100644 --- a/src/wrapped/generated/wrappedatspiundefs.h +++ b/src/wrapped/generated/wrappedatspiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedatspiUNDEFS_H_ #define __wrappedatspiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3defs.h b/src/wrapped/generated/wrappedayatanaappindicator3defs.h index f5a970d2..33c49fd9 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3defs.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3DEFS_H_ #define __wrappedayatanaappindicator3DEFS_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3types.h b/src/wrapped/generated/wrappedayatanaappindicator3types.h index ac9dfa4c..fe1f19e3 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3types.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3TYPES_H_ #define __wrappedayatanaappindicator3TYPES_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3undefs.h b/src/wrapped/generated/wrappedayatanaappindicator3undefs.h index 35c9f4e9..f85739c2 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3undefs.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3UNDEFS_H_ #define __wrappedayatanaappindicator3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedbz2defs.h b/src/wrapped/generated/wrappedbz2defs.h index 7a94209b..0c38acef 100644 --- a/src/wrapped/generated/wrappedbz2defs.h +++ b/src/wrapped/generated/wrappedbz2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedbz2DEFS_H_ #define __wrappedbz2DEFS_H_ diff --git a/src/wrapped/generated/wrappedbz2types.h b/src/wrapped/generated/wrappedbz2types.h index cad85bc7..df8dea62 100644 --- a/src/wrapped/generated/wrappedbz2types.h +++ b/src/wrapped/generated/wrappedbz2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedbz2TYPES_H_ #define __wrappedbz2TYPES_H_ diff --git a/src/wrapped/generated/wrappedbz2undefs.h b/src/wrapped/generated/wrappedbz2undefs.h index 0285da9d..8930629c 100644 --- a/src/wrapped/generated/wrappedbz2undefs.h +++ b/src/wrapped/generated/wrappedbz2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedbz2UNDEFS_H_ #define __wrappedbz2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairodefs.h b/src/wrapped/generated/wrappedcairodefs.h index 3146a809..e7ddef2d 100644 --- a/src/wrapped/generated/wrappedcairodefs.h +++ b/src/wrapped/generated/wrappedcairodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairoDEFS_H_ #define __wrappedcairoDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairogobjectdefs.h b/src/wrapped/generated/wrappedcairogobjectdefs.h index 950015a2..18dd3139 100644 --- a/src/wrapped/generated/wrappedcairogobjectdefs.h +++ b/src/wrapped/generated/wrappedcairogobjectdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairogobjectDEFS_H_ #define __wrappedcairogobjectDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairogobjecttypes.h b/src/wrapped/generated/wrappedcairogobjecttypes.h index a7e969bd..35e48a25 100644 --- a/src/wrapped/generated/wrappedcairogobjecttypes.h +++ b/src/wrapped/generated/wrappedcairogobjecttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairogobjectTYPES_H_ #define __wrappedcairogobjectTYPES_H_ diff --git a/src/wrapped/generated/wrappedcairogobjectundefs.h b/src/wrapped/generated/wrappedcairogobjectundefs.h index 4f3da1b5..80947046 100644 --- a/src/wrapped/generated/wrappedcairogobjectundefs.h +++ b/src/wrapped/generated/wrappedcairogobjectundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairogobjectUNDEFS_H_ #define __wrappedcairogobjectUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairotypes.h b/src/wrapped/generated/wrappedcairotypes.h index 4020471b..703493b0 100644 --- a/src/wrapped/generated/wrappedcairotypes.h +++ b/src/wrapped/generated/wrappedcairotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairoTYPES_H_ #define __wrappedcairoTYPES_H_ diff --git a/src/wrapped/generated/wrappedcairoundefs.h b/src/wrapped/generated/wrappedcairoundefs.h index a3042b43..d416133e 100644 --- a/src/wrapped/generated/wrappedcairoundefs.h +++ b/src/wrapped/generated/wrappedcairoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcairoUNDEFS_H_ #define __wrappedcairoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcapdefs.h b/src/wrapped/generated/wrappedcapdefs.h index 57c78f12..529e275c 100644 --- a/src/wrapped/generated/wrappedcapdefs.h +++ b/src/wrapped/generated/wrappedcapdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcapDEFS_H_ #define __wrappedcapDEFS_H_ diff --git a/src/wrapped/generated/wrappedcaptypes.h b/src/wrapped/generated/wrappedcaptypes.h index 3d18ce39..cc2e63c9 100644 --- a/src/wrapped/generated/wrappedcaptypes.h +++ b/src/wrapped/generated/wrappedcaptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcapTYPES_H_ #define __wrappedcapTYPES_H_ diff --git a/src/wrapped/generated/wrappedcapundefs.h b/src/wrapped/generated/wrappedcapundefs.h index 87967b4a..dfcfee25 100644 --- a/src/wrapped/generated/wrappedcapundefs.h +++ b/src/wrapped/generated/wrappedcapundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcapUNDEFS_H_ #define __wrappedcapUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlerdefs.h b/src/wrapped/generated/wrappedcrashhandlerdefs.h index 36c4d36c..ae1f5f6b 100644 --- a/src/wrapped/generated/wrappedcrashhandlerdefs.h +++ b/src/wrapped/generated/wrappedcrashhandlerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrashhandlerDEFS_H_ #define __wrappedcrashhandlerDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlertypes.h b/src/wrapped/generated/wrappedcrashhandlertypes.h index 2acab702..16d8480b 100644 --- a/src/wrapped/generated/wrappedcrashhandlertypes.h +++ b/src/wrapped/generated/wrappedcrashhandlertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrashhandlerTYPES_H_ #define __wrappedcrashhandlerTYPES_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlerundefs.h b/src/wrapped/generated/wrappedcrashhandlerundefs.h index 3fb6554d..c584ed08 100644 --- a/src/wrapped/generated/wrappedcrashhandlerundefs.h +++ b/src/wrapped/generated/wrappedcrashhandlerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrashhandlerUNDEFS_H_ #define __wrappedcrashhandlerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrypto3defs.h b/src/wrapped/generated/wrappedcrypto3defs.h index c6874fbf..0c92c187 100644 --- a/src/wrapped/generated/wrappedcrypto3defs.h +++ b/src/wrapped/generated/wrappedcrypto3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrypto3DEFS_H_ #define __wrappedcrypto3DEFS_H_ diff --git a/src/wrapped/generated/wrappedcrypto3types.h b/src/wrapped/generated/wrappedcrypto3types.h index 175bea56..d8ab308d 100644 --- a/src/wrapped/generated/wrappedcrypto3types.h +++ b/src/wrapped/generated/wrappedcrypto3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrypto3TYPES_H_ #define __wrappedcrypto3TYPES_H_ diff --git a/src/wrapped/generated/wrappedcrypto3undefs.h b/src/wrapped/generated/wrappedcrypto3undefs.h index 1e82efc0..6285fa6c 100644 --- a/src/wrapped/generated/wrappedcrypto3undefs.h +++ b/src/wrapped/generated/wrappedcrypto3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcrypto3UNDEFS_H_ #define __wrappedcrypto3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcryptodefs.h b/src/wrapped/generated/wrappedcryptodefs.h index 2a2f3c2c..8031208e 100644 --- a/src/wrapped/generated/wrappedcryptodefs.h +++ b/src/wrapped/generated/wrappedcryptodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcryptoDEFS_H_ #define __wrappedcryptoDEFS_H_ diff --git a/src/wrapped/generated/wrappedcryptotypes.h b/src/wrapped/generated/wrappedcryptotypes.h index 6a9de7b4..1376ebcc 100644 --- a/src/wrapped/generated/wrappedcryptotypes.h +++ b/src/wrapped/generated/wrappedcryptotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcryptoTYPES_H_ #define __wrappedcryptoTYPES_H_ diff --git a/src/wrapped/generated/wrappedcryptoundefs.h b/src/wrapped/generated/wrappedcryptoundefs.h index 0604af4f..45344ad0 100644 --- a/src/wrapped/generated/wrappedcryptoundefs.h +++ b/src/wrapped/generated/wrappedcryptoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcryptoUNDEFS_H_ #define __wrappedcryptoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcurldefs.h b/src/wrapped/generated/wrappedcurldefs.h index 6e2dd59c..cf888633 100644 --- a/src/wrapped/generated/wrappedcurldefs.h +++ b/src/wrapped/generated/wrappedcurldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcurlDEFS_H_ #define __wrappedcurlDEFS_H_ diff --git a/src/wrapped/generated/wrappedcurltypes.h b/src/wrapped/generated/wrappedcurltypes.h index 5576f7a6..b5fee462 100644 --- a/src/wrapped/generated/wrappedcurltypes.h +++ b/src/wrapped/generated/wrappedcurltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcurlTYPES_H_ #define __wrappedcurlTYPES_H_ diff --git a/src/wrapped/generated/wrappedcurlundefs.h b/src/wrapped/generated/wrappedcurlundefs.h index 1b785a42..b0e50301 100644 --- a/src/wrapped/generated/wrappedcurlundefs.h +++ b/src/wrapped/generated/wrappedcurlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedcurlUNDEFS_H_ #define __wrappedcurlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9defs.h b/src/wrapped/generated/wrappedd3dadapter9defs.h index 80a0f1b5..fa28fe94 100644 --- a/src/wrapped/generated/wrappedd3dadapter9defs.h +++ b/src/wrapped/generated/wrappedd3dadapter9defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedd3dadapter9DEFS_H_ #define __wrappedd3dadapter9DEFS_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9types.h b/src/wrapped/generated/wrappedd3dadapter9types.h index c09cdf39..53c6d875 100644 --- a/src/wrapped/generated/wrappedd3dadapter9types.h +++ b/src/wrapped/generated/wrappedd3dadapter9types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedd3dadapter9TYPES_H_ #define __wrappedd3dadapter9TYPES_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9undefs.h b/src/wrapped/generated/wrappedd3dadapter9undefs.h index d6dd2ebf..7bdde12e 100644 --- a/src/wrapped/generated/wrappedd3dadapter9undefs.h +++ b/src/wrapped/generated/wrappedd3dadapter9undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedd3dadapter9UNDEFS_H_ #define __wrappedd3dadapter9UNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusdefs.h b/src/wrapped/generated/wrappeddbusdefs.h index 28ece645..afebbfbd 100644 --- a/src/wrapped/generated/wrappeddbusdefs.h +++ b/src/wrapped/generated/wrappeddbusdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusDEFS_H_ #define __wrappeddbusDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1defs.h b/src/wrapped/generated/wrappeddbusglib1defs.h index bf9d1ef1..35aa676f 100644 --- a/src/wrapped/generated/wrappeddbusglib1defs.h +++ b/src/wrapped/generated/wrappeddbusglib1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusglib1DEFS_H_ #define __wrappeddbusglib1DEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1types.h b/src/wrapped/generated/wrappeddbusglib1types.h index a6b57cf2..199693aa 100644 --- a/src/wrapped/generated/wrappeddbusglib1types.h +++ b/src/wrapped/generated/wrappeddbusglib1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusglib1TYPES_H_ #define __wrappeddbusglib1TYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1undefs.h b/src/wrapped/generated/wrappeddbusglib1undefs.h index c77048c0..eb12da9d 100644 --- a/src/wrapped/generated/wrappeddbusglib1undefs.h +++ b/src/wrapped/generated/wrappeddbusglib1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusglib1UNDEFS_H_ #define __wrappeddbusglib1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibdefs.h b/src/wrapped/generated/wrappeddbusmenuglibdefs.h index e8e738c4..3ac3cad4 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibdefs.h +++ b/src/wrapped/generated/wrappeddbusmenuglibdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusmenuglibDEFS_H_ #define __wrappeddbusmenuglibDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibtypes.h b/src/wrapped/generated/wrappeddbusmenuglibtypes.h index c795e242..850324f1 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibtypes.h +++ b/src/wrapped/generated/wrappeddbusmenuglibtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusmenuglibTYPES_H_ #define __wrappeddbusmenuglibTYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibundefs.h b/src/wrapped/generated/wrappeddbusmenuglibundefs.h index 93f1f962..3158cdb8 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibundefs.h +++ b/src/wrapped/generated/wrappeddbusmenuglibundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusmenuglibUNDEFS_H_ #define __wrappeddbusmenuglibUNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbustypes.h b/src/wrapped/generated/wrappeddbustypes.h index c19729f2..2b18d783 100644 --- a/src/wrapped/generated/wrappeddbustypes.h +++ b/src/wrapped/generated/wrappeddbustypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusTYPES_H_ #define __wrappeddbusTYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusundefs.h b/src/wrapped/generated/wrappeddbusundefs.h index e0e5f799..1d906a1d 100644 --- a/src/wrapped/generated/wrappeddbusundefs.h +++ b/src/wrapped/generated/wrappeddbusundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddbusUNDEFS_H_ #define __wrappeddbusUNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddecor0defs.h b/src/wrapped/generated/wrappeddecor0defs.h index 3f8696fd..2d83b3e7 100644 --- a/src/wrapped/generated/wrappeddecor0defs.h +++ b/src/wrapped/generated/wrappeddecor0defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddecor0DEFS_H_ #define __wrappeddecor0DEFS_H_ diff --git a/src/wrapped/generated/wrappeddecor0types.h b/src/wrapped/generated/wrappeddecor0types.h index 6fa92b9e..fcf2ff9d 100644 --- a/src/wrapped/generated/wrappeddecor0types.h +++ b/src/wrapped/generated/wrappeddecor0types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddecor0TYPES_H_ #define __wrappeddecor0TYPES_H_ diff --git a/src/wrapped/generated/wrappeddecor0undefs.h b/src/wrapped/generated/wrappeddecor0undefs.h index 8d7a76f2..3811b5bf 100644 --- a/src/wrapped/generated/wrappeddecor0undefs.h +++ b/src/wrapped/generated/wrappeddecor0undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappeddecor0UNDEFS_H_ #define __wrappeddecor0UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedevent21defs.h b/src/wrapped/generated/wrappedevent21defs.h index 8a79789f..5c0526c4 100644 --- a/src/wrapped/generated/wrappedevent21defs.h +++ b/src/wrapped/generated/wrappedevent21defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedevent21DEFS_H_ #define __wrappedevent21DEFS_H_ diff --git a/src/wrapped/generated/wrappedevent21types.h b/src/wrapped/generated/wrappedevent21types.h index dcee212e..742455d6 100644 --- a/src/wrapped/generated/wrappedevent21types.h +++ b/src/wrapped/generated/wrappedevent21types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedevent21TYPES_H_ #define __wrappedevent21TYPES_H_ diff --git a/src/wrapped/generated/wrappedevent21undefs.h b/src/wrapped/generated/wrappedevent21undefs.h index e0cd3b7c..6892fb37 100644 --- a/src/wrapped/generated/wrappedevent21undefs.h +++ b/src/wrapped/generated/wrappedevent21undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedevent21UNDEFS_H_ #define __wrappedevent21UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedexpatdefs.h b/src/wrapped/generated/wrappedexpatdefs.h index c142fbd9..2283f92a 100644 --- a/src/wrapped/generated/wrappedexpatdefs.h +++ b/src/wrapped/generated/wrappedexpatdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedexpatDEFS_H_ #define __wrappedexpatDEFS_H_ diff --git a/src/wrapped/generated/wrappedexpattypes.h b/src/wrapped/generated/wrappedexpattypes.h index 958436dc..ee8153a4 100644 --- a/src/wrapped/generated/wrappedexpattypes.h +++ b/src/wrapped/generated/wrappedexpattypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedexpatTYPES_H_ #define __wrappedexpatTYPES_H_ diff --git a/src/wrapped/generated/wrappedexpatundefs.h b/src/wrapped/generated/wrappedexpatundefs.h index 7c0e0b44..580e5c66 100644 --- a/src/wrapped/generated/wrappedexpatundefs.h +++ b/src/wrapped/generated/wrappedexpatundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedexpatUNDEFS_H_ #define __wrappedexpatUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfaudiodefs.h b/src/wrapped/generated/wrappedfaudiodefs.h index 6e118b8b..971648cb 100644 --- a/src/wrapped/generated/wrappedfaudiodefs.h +++ b/src/wrapped/generated/wrappedfaudiodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfaudioDEFS_H_ #define __wrappedfaudioDEFS_H_ diff --git a/src/wrapped/generated/wrappedfaudiotypes.h b/src/wrapped/generated/wrappedfaudiotypes.h index 1676f6f2..2e818b48 100644 --- a/src/wrapped/generated/wrappedfaudiotypes.h +++ b/src/wrapped/generated/wrappedfaudiotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfaudioTYPES_H_ #define __wrappedfaudioTYPES_H_ diff --git a/src/wrapped/generated/wrappedfaudioundefs.h b/src/wrapped/generated/wrappedfaudioundefs.h index f5e9c2af..30cb2328 100644 --- a/src/wrapped/generated/wrappedfaudioundefs.h +++ b/src/wrapped/generated/wrappedfaudioundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfaudioUNDEFS_H_ #define __wrappedfaudioUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedflacdefs.h b/src/wrapped/generated/wrappedflacdefs.h index 752417ca..5ac0fa74 100644 --- a/src/wrapped/generated/wrappedflacdefs.h +++ b/src/wrapped/generated/wrappedflacdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedflacDEFS_H_ #define __wrappedflacDEFS_H_ diff --git a/src/wrapped/generated/wrappedflactypes.h b/src/wrapped/generated/wrappedflactypes.h index 17fcd7a4..26ddc696 100644 --- a/src/wrapped/generated/wrappedflactypes.h +++ b/src/wrapped/generated/wrappedflactypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedflacTYPES_H_ #define __wrappedflacTYPES_H_ diff --git a/src/wrapped/generated/wrappedflacundefs.h b/src/wrapped/generated/wrappedflacundefs.h index c4ea0182..38d7d703 100644 --- a/src/wrapped/generated/wrappedflacundefs.h +++ b/src/wrapped/generated/wrappedflacundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedflacUNDEFS_H_ #define __wrappedflacUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfontconfigdefs.h b/src/wrapped/generated/wrappedfontconfigdefs.h index db507edc..8e56edf8 100644 --- a/src/wrapped/generated/wrappedfontconfigdefs.h +++ b/src/wrapped/generated/wrappedfontconfigdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfontconfigDEFS_H_ #define __wrappedfontconfigDEFS_H_ diff --git a/src/wrapped/generated/wrappedfontconfigtypes.h b/src/wrapped/generated/wrappedfontconfigtypes.h index f3e8d29d..036b90b5 100644 --- a/src/wrapped/generated/wrappedfontconfigtypes.h +++ b/src/wrapped/generated/wrappedfontconfigtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfontconfigTYPES_H_ #define __wrappedfontconfigTYPES_H_ diff --git a/src/wrapped/generated/wrappedfontconfigundefs.h b/src/wrapped/generated/wrappedfontconfigundefs.h index 4bdce179..5ddcc45c 100644 --- a/src/wrapped/generated/wrappedfontconfigundefs.h +++ b/src/wrapped/generated/wrappedfontconfigundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfontconfigUNDEFS_H_ #define __wrappedfontconfigUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreebl3defs.h b/src/wrapped/generated/wrappedfreebl3defs.h index 33db283d..5eb127d0 100644 --- a/src/wrapped/generated/wrappedfreebl3defs.h +++ b/src/wrapped/generated/wrappedfreebl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreebl3DEFS_H_ #define __wrappedfreebl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedfreebl3types.h b/src/wrapped/generated/wrappedfreebl3types.h index 8468e9c5..fa0925b6 100644 --- a/src/wrapped/generated/wrappedfreebl3types.h +++ b/src/wrapped/generated/wrappedfreebl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreebl3TYPES_H_ #define __wrappedfreebl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedfreebl3undefs.h b/src/wrapped/generated/wrappedfreebl3undefs.h index 88b22d7d..a03330d7 100644 --- a/src/wrapped/generated/wrappedfreebl3undefs.h +++ b/src/wrapped/generated/wrappedfreebl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreebl3UNDEFS_H_ #define __wrappedfreebl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreetypedefs.h b/src/wrapped/generated/wrappedfreetypedefs.h index fc2eb27d..50fd7cb0 100644 --- a/src/wrapped/generated/wrappedfreetypedefs.h +++ b/src/wrapped/generated/wrappedfreetypedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreetypeDEFS_H_ #define __wrappedfreetypeDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreetypetypes.h b/src/wrapped/generated/wrappedfreetypetypes.h index eb85cbb9..44d67d1f 100644 --- a/src/wrapped/generated/wrappedfreetypetypes.h +++ b/src/wrapped/generated/wrappedfreetypetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreetypeTYPES_H_ #define __wrappedfreetypeTYPES_H_ diff --git a/src/wrapped/generated/wrappedfreetypeundefs.h b/src/wrapped/generated/wrappedfreetypeundefs.h index 6b477c39..1c7663d8 100644 --- a/src/wrapped/generated/wrappedfreetypeundefs.h +++ b/src/wrapped/generated/wrappedfreetypeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedfreetypeUNDEFS_H_ #define __wrappedfreetypeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgbmdefs.h b/src/wrapped/generated/wrappedgbmdefs.h index 7e238831..4307e0dd 100644 --- a/src/wrapped/generated/wrappedgbmdefs.h +++ b/src/wrapped/generated/wrappedgbmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgbmDEFS_H_ #define __wrappedgbmDEFS_H_ diff --git a/src/wrapped/generated/wrappedgbmtypes.h b/src/wrapped/generated/wrappedgbmtypes.h index c45641fb..44605146 100644 --- a/src/wrapped/generated/wrappedgbmtypes.h +++ b/src/wrapped/generated/wrappedgbmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgbmTYPES_H_ #define __wrappedgbmTYPES_H_ diff --git a/src/wrapped/generated/wrappedgbmundefs.h b/src/wrapped/generated/wrappedgbmundefs.h index 9f4e891b..71f533d2 100644 --- a/src/wrapped/generated/wrappedgbmundefs.h +++ b/src/wrapped/generated/wrappedgbmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgbmUNDEFS_H_ #define __wrappedgbmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgconf2defs.h b/src/wrapped/generated/wrappedgconf2defs.h index 56cf7acd..f8f24214 100644 --- a/src/wrapped/generated/wrappedgconf2defs.h +++ b/src/wrapped/generated/wrappedgconf2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgconf2DEFS_H_ #define __wrappedgconf2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgconf2types.h b/src/wrapped/generated/wrappedgconf2types.h index 356c6518..e4f1a721 100644 --- a/src/wrapped/generated/wrappedgconf2types.h +++ b/src/wrapped/generated/wrappedgconf2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgconf2TYPES_H_ #define __wrappedgconf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgconf2undefs.h b/src/wrapped/generated/wrappedgconf2undefs.h index 806ab5b1..69376de0 100644 --- a/src/wrapped/generated/wrappedgconf2undefs.h +++ b/src/wrapped/generated/wrappedgconf2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgconf2UNDEFS_H_ #define __wrappedgconf2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgcryptdefs.h b/src/wrapped/generated/wrappedgcryptdefs.h index 47ea49ca..e810394d 100644 --- a/src/wrapped/generated/wrappedgcryptdefs.h +++ b/src/wrapped/generated/wrappedgcryptdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgcryptDEFS_H_ #define __wrappedgcryptDEFS_H_ diff --git a/src/wrapped/generated/wrappedgcrypttypes.h b/src/wrapped/generated/wrappedgcrypttypes.h index 07785d69..7ae0d91f 100644 --- a/src/wrapped/generated/wrappedgcrypttypes.h +++ b/src/wrapped/generated/wrappedgcrypttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgcryptTYPES_H_ #define __wrappedgcryptTYPES_H_ diff --git a/src/wrapped/generated/wrappedgcryptundefs.h b/src/wrapped/generated/wrappedgcryptundefs.h index 69c2e6f3..650917fb 100644 --- a/src/wrapped/generated/wrappedgcryptundefs.h +++ b/src/wrapped/generated/wrappedgcryptundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgcryptUNDEFS_H_ #define __wrappedgcryptUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdk3defs.h b/src/wrapped/generated/wrappedgdk3defs.h index 2d2c754e..8a7f3ee7 100644 --- a/src/wrapped/generated/wrappedgdk3defs.h +++ b/src/wrapped/generated/wrappedgdk3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdk3DEFS_H_ #define __wrappedgdk3DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdk3types.h b/src/wrapped/generated/wrappedgdk3types.h index 9fef4666..1ce09545 100644 --- a/src/wrapped/generated/wrappedgdk3types.h +++ b/src/wrapped/generated/wrappedgdk3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdk3TYPES_H_ #define __wrappedgdk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdk3undefs.h b/src/wrapped/generated/wrappedgdk3undefs.h index 2b636c1e..5d2f1896 100644 --- a/src/wrapped/generated/wrappedgdk3undefs.h +++ b/src/wrapped/generated/wrappedgdk3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdk3UNDEFS_H_ #define __wrappedgdk3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2defs.h b/src/wrapped/generated/wrappedgdkpixbuf2defs.h index b0f2a7e1..63a0a528 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2defs.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2DEFS_H_ #define __wrappedgdkpixbuf2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2types.h b/src/wrapped/generated/wrappedgdkpixbuf2types.h index 57e0d38f..f7457e91 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2types.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2TYPES_H_ #define __wrappedgdkpixbuf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2undefs.h b/src/wrapped/generated/wrappedgdkpixbuf2undefs.h index 0a6750f0..1ade154b 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2undefs.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2UNDEFS_H_ #define __wrappedgdkpixbuf2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkx112defs.h b/src/wrapped/generated/wrappedgdkx112defs.h index bd316824..a4067646 100644 --- a/src/wrapped/generated/wrappedgdkx112defs.h +++ b/src/wrapped/generated/wrappedgdkx112defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkx112DEFS_H_ #define __wrappedgdkx112DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkx112types.h b/src/wrapped/generated/wrappedgdkx112types.h index 4b36cbf4..87cfd23f 100644 --- a/src/wrapped/generated/wrappedgdkx112types.h +++ b/src/wrapped/generated/wrappedgdkx112types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkx112TYPES_H_ #define __wrappedgdkx112TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkx112undefs.h b/src/wrapped/generated/wrappedgdkx112undefs.h index 308cf824..39425e2e 100644 --- a/src/wrapped/generated/wrappedgdkx112undefs.h +++ b/src/wrapped/generated/wrappedgdkx112undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgdkx112UNDEFS_H_ #define __wrappedgdkx112UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgio2defs.h b/src/wrapped/generated/wrappedgio2defs.h index c9fad231..291981f6 100644 --- a/src/wrapped/generated/wrappedgio2defs.h +++ b/src/wrapped/generated/wrappedgio2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgio2DEFS_H_ #define __wrappedgio2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgio2types.h b/src/wrapped/generated/wrappedgio2types.h index 00790100..0176f2ba 100644 --- a/src/wrapped/generated/wrappedgio2types.h +++ b/src/wrapped/generated/wrappedgio2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgio2TYPES_H_ #define __wrappedgio2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgio2undefs.h b/src/wrapped/generated/wrappedgio2undefs.h index f14e77aa..28d43472 100644 --- a/src/wrapped/generated/wrappedgio2undefs.h +++ b/src/wrapped/generated/wrappedgio2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgio2UNDEFS_H_ #define __wrappedgio2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedglesv2defs.h b/src/wrapped/generated/wrappedglesv2defs.h index 26d20e5a..d3413bb6 100644 --- a/src/wrapped/generated/wrappedglesv2defs.h +++ b/src/wrapped/generated/wrappedglesv2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglesv2DEFS_H_ #define __wrappedglesv2DEFS_H_ diff --git a/src/wrapped/generated/wrappedglesv2types.h b/src/wrapped/generated/wrappedglesv2types.h index 586fe02b..e377afe0 100644 --- a/src/wrapped/generated/wrappedglesv2types.h +++ b/src/wrapped/generated/wrappedglesv2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglesv2TYPES_H_ #define __wrappedglesv2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglesv2undefs.h b/src/wrapped/generated/wrappedglesv2undefs.h index 9362f423..f09da98b 100644 --- a/src/wrapped/generated/wrappedglesv2undefs.h +++ b/src/wrapped/generated/wrappedglesv2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglesv2UNDEFS_H_ #define __wrappedglesv2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedglib2defs.h b/src/wrapped/generated/wrappedglib2defs.h index e203aa2b..9ce6fc0f 100644 --- a/src/wrapped/generated/wrappedglib2defs.h +++ b/src/wrapped/generated/wrappedglib2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglib2DEFS_H_ #define __wrappedglib2DEFS_H_ diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h index fc81f779..7215b932 100644 --- a/src/wrapped/generated/wrappedglib2types.h +++ b/src/wrapped/generated/wrappedglib2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglib2TYPES_H_ #define __wrappedglib2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglib2undefs.h b/src/wrapped/generated/wrappedglib2undefs.h index f6d5f437..d1aa2403 100644 --- a/src/wrapped/generated/wrappedglib2undefs.h +++ b/src/wrapped/generated/wrappedglib2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedglib2UNDEFS_H_ #define __wrappedglib2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmodule2defs.h b/src/wrapped/generated/wrappedgmodule2defs.h index 297d418b..1f408822 100644 --- a/src/wrapped/generated/wrappedgmodule2defs.h +++ b/src/wrapped/generated/wrappedgmodule2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmodule2DEFS_H_ #define __wrappedgmodule2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgmodule2types.h b/src/wrapped/generated/wrappedgmodule2types.h index 96576d22..17882f8a 100644 --- a/src/wrapped/generated/wrappedgmodule2types.h +++ b/src/wrapped/generated/wrappedgmodule2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmodule2TYPES_H_ #define __wrappedgmodule2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgmodule2undefs.h b/src/wrapped/generated/wrappedgmodule2undefs.h index 37761994..2dff2048 100644 --- a/src/wrapped/generated/wrappedgmodule2undefs.h +++ b/src/wrapped/generated/wrappedgmodule2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmodule2UNDEFS_H_ #define __wrappedgmodule2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmpdefs.h b/src/wrapped/generated/wrappedgmpdefs.h index 48916e6b..10cdeacf 100644 --- a/src/wrapped/generated/wrappedgmpdefs.h +++ b/src/wrapped/generated/wrappedgmpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmpDEFS_H_ #define __wrappedgmpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmptypes.h b/src/wrapped/generated/wrappedgmptypes.h index c7a54de0..4073c73a 100644 --- a/src/wrapped/generated/wrappedgmptypes.h +++ b/src/wrapped/generated/wrappedgmptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmpTYPES_H_ #define __wrappedgmpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgmpundefs.h b/src/wrapped/generated/wrappedgmpundefs.h index 514a6c09..310c09b6 100644 --- a/src/wrapped/generated/wrappedgmpundefs.h +++ b/src/wrapped/generated/wrappedgmpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgmpUNDEFS_H_ #define __wrappedgmpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgnutlsdefs.h b/src/wrapped/generated/wrappedgnutlsdefs.h index c7178490..c3b0cf26 100644 --- a/src/wrapped/generated/wrappedgnutlsdefs.h +++ b/src/wrapped/generated/wrappedgnutlsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgnutlsDEFS_H_ #define __wrappedgnutlsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgnutlstypes.h b/src/wrapped/generated/wrappedgnutlstypes.h index 37272839..fc5a2758 100644 --- a/src/wrapped/generated/wrappedgnutlstypes.h +++ b/src/wrapped/generated/wrappedgnutlstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgnutlsTYPES_H_ #define __wrappedgnutlsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgnutlsundefs.h b/src/wrapped/generated/wrappedgnutlsundefs.h index 8ab689c7..a33f3f5f 100644 --- a/src/wrapped/generated/wrappedgnutlsundefs.h +++ b/src/wrapped/generated/wrappedgnutlsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgnutlsUNDEFS_H_ #define __wrappedgnutlsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgobject2defs.h b/src/wrapped/generated/wrappedgobject2defs.h index 0f36947b..d0cfb465 100644 --- a/src/wrapped/generated/wrappedgobject2defs.h +++ b/src/wrapped/generated/wrappedgobject2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgobject2DEFS_H_ #define __wrappedgobject2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgobject2types.h b/src/wrapped/generated/wrappedgobject2types.h index d7a8f665..7cbd4625 100644 --- a/src/wrapped/generated/wrappedgobject2types.h +++ b/src/wrapped/generated/wrappedgobject2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgobject2TYPES_H_ #define __wrappedgobject2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgobject2undefs.h b/src/wrapped/generated/wrappedgobject2undefs.h index 5b5b37b9..d8f7d81f 100644 --- a/src/wrapped/generated/wrappedgobject2undefs.h +++ b/src/wrapped/generated/wrappedgobject2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgobject2UNDEFS_H_ #define __wrappedgobject2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgompdefs.h b/src/wrapped/generated/wrappedgompdefs.h index 5618a4d1..cf407c67 100644 --- a/src/wrapped/generated/wrappedgompdefs.h +++ b/src/wrapped/generated/wrappedgompdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgompDEFS_H_ #define __wrappedgompDEFS_H_ diff --git a/src/wrapped/generated/wrappedgomptypes.h b/src/wrapped/generated/wrappedgomptypes.h index 4b0d4c01..6ba360a1 100644 --- a/src/wrapped/generated/wrappedgomptypes.h +++ b/src/wrapped/generated/wrappedgomptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgompTYPES_H_ #define __wrappedgompTYPES_H_ diff --git a/src/wrapped/generated/wrappedgompundefs.h b/src/wrapped/generated/wrappedgompundefs.h index ae3271f1..8917656d 100644 --- a/src/wrapped/generated/wrappedgompundefs.h +++ b/src/wrapped/generated/wrappedgompundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgompUNDEFS_H_ #define __wrappedgompUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapidefs.h b/src/wrapped/generated/wrappedgssapidefs.h index 85b82b8e..2342552e 100644 --- a/src/wrapped/generated/wrappedgssapidefs.h +++ b/src/wrapped/generated/wrappedgssapidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapiDEFS_H_ #define __wrappedgssapiDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5defs.h b/src/wrapped/generated/wrappedgssapikrb5defs.h index 423cee13..22a1dc0c 100644 --- a/src/wrapped/generated/wrappedgssapikrb5defs.h +++ b/src/wrapped/generated/wrappedgssapikrb5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapikrb5DEFS_H_ #define __wrappedgssapikrb5DEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5types.h b/src/wrapped/generated/wrappedgssapikrb5types.h index 2f2c3cd5..5c7aeb3b 100644 --- a/src/wrapped/generated/wrappedgssapikrb5types.h +++ b/src/wrapped/generated/wrappedgssapikrb5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapikrb5TYPES_H_ #define __wrappedgssapikrb5TYPES_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5undefs.h b/src/wrapped/generated/wrappedgssapikrb5undefs.h index a2be1c3e..46c6936e 100644 --- a/src/wrapped/generated/wrappedgssapikrb5undefs.h +++ b/src/wrapped/generated/wrappedgssapikrb5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapikrb5UNDEFS_H_ #define __wrappedgssapikrb5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapitypes.h b/src/wrapped/generated/wrappedgssapitypes.h index 3d4ee9fe..b628366a 100644 --- a/src/wrapped/generated/wrappedgssapitypes.h +++ b/src/wrapped/generated/wrappedgssapitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapiTYPES_H_ #define __wrappedgssapiTYPES_H_ diff --git a/src/wrapped/generated/wrappedgssapiundefs.h b/src/wrapped/generated/wrappedgssapiundefs.h index c5512ffc..7eca10db 100644 --- a/src/wrapped/generated/wrappedgssapiundefs.h +++ b/src/wrapped/generated/wrappedgssapiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgssapiUNDEFS_H_ #define __wrappedgssapiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorsdefs.h b/src/wrapped/generated/wrappedgstallocatorsdefs.h index c45e3cf8..0bc601ff 100644 --- a/src/wrapped/generated/wrappedgstallocatorsdefs.h +++ b/src/wrapped/generated/wrappedgstallocatorsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstallocatorsDEFS_H_ #define __wrappedgstallocatorsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorstypes.h b/src/wrapped/generated/wrappedgstallocatorstypes.h index a98a8a1d..e3f0c4da 100644 --- a/src/wrapped/generated/wrappedgstallocatorstypes.h +++ b/src/wrapped/generated/wrappedgstallocatorstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstallocatorsTYPES_H_ #define __wrappedgstallocatorsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorsundefs.h b/src/wrapped/generated/wrappedgstallocatorsundefs.h index c672c705..676204d3 100644 --- a/src/wrapped/generated/wrappedgstallocatorsundefs.h +++ b/src/wrapped/generated/wrappedgstallocatorsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstallocatorsUNDEFS_H_ #define __wrappedgstallocatorsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstappdefs.h b/src/wrapped/generated/wrappedgstappdefs.h index 35f3ab34..e7f6a901 100644 --- a/src/wrapped/generated/wrappedgstappdefs.h +++ b/src/wrapped/generated/wrappedgstappdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstappDEFS_H_ #define __wrappedgstappDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstapptypes.h b/src/wrapped/generated/wrappedgstapptypes.h index 4ffbaf81..0c153dfe 100644 --- a/src/wrapped/generated/wrappedgstapptypes.h +++ b/src/wrapped/generated/wrappedgstapptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstappTYPES_H_ #define __wrappedgstappTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstappundefs.h b/src/wrapped/generated/wrappedgstappundefs.h index ce6a01f5..a58167f3 100644 --- a/src/wrapped/generated/wrappedgstappundefs.h +++ b/src/wrapped/generated/wrappedgstappundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstappUNDEFS_H_ #define __wrappedgstappUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstaudiodefs.h b/src/wrapped/generated/wrappedgstaudiodefs.h index 1cb16ea1..c72ddca5 100644 --- a/src/wrapped/generated/wrappedgstaudiodefs.h +++ b/src/wrapped/generated/wrappedgstaudiodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstaudioDEFS_H_ #define __wrappedgstaudioDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstaudiotypes.h b/src/wrapped/generated/wrappedgstaudiotypes.h index 82d46cc1..2900f70f 100644 --- a/src/wrapped/generated/wrappedgstaudiotypes.h +++ b/src/wrapped/generated/wrappedgstaudiotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstaudioTYPES_H_ #define __wrappedgstaudioTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstaudioundefs.h b/src/wrapped/generated/wrappedgstaudioundefs.h index fb81b07a..6ccef133 100644 --- a/src/wrapped/generated/wrappedgstaudioundefs.h +++ b/src/wrapped/generated/wrappedgstaudioundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstaudioUNDEFS_H_ #define __wrappedgstaudioUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstbasedefs.h b/src/wrapped/generated/wrappedgstbasedefs.h index d9a16ee4..5ee7cdce 100644 --- a/src/wrapped/generated/wrappedgstbasedefs.h +++ b/src/wrapped/generated/wrappedgstbasedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstbaseDEFS_H_ #define __wrappedgstbaseDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstbasetypes.h b/src/wrapped/generated/wrappedgstbasetypes.h index 4c306231..3b29db11 100644 --- a/src/wrapped/generated/wrappedgstbasetypes.h +++ b/src/wrapped/generated/wrappedgstbasetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstbaseTYPES_H_ #define __wrappedgstbaseTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstbaseundefs.h b/src/wrapped/generated/wrappedgstbaseundefs.h index 0547e9fc..5a21be1c 100644 --- a/src/wrapped/generated/wrappedgstbaseundefs.h +++ b/src/wrapped/generated/wrappedgstbaseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstbaseUNDEFS_H_ #define __wrappedgstbaseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcheckdefs.h b/src/wrapped/generated/wrappedgstcheckdefs.h index 150a1b51..5e15ab5c 100644 --- a/src/wrapped/generated/wrappedgstcheckdefs.h +++ b/src/wrapped/generated/wrappedgstcheckdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcheckDEFS_H_ #define __wrappedgstcheckDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstchecktypes.h b/src/wrapped/generated/wrappedgstchecktypes.h index 5769e178..59ae098b 100644 --- a/src/wrapped/generated/wrappedgstchecktypes.h +++ b/src/wrapped/generated/wrappedgstchecktypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcheckTYPES_H_ #define __wrappedgstcheckTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstcheckundefs.h b/src/wrapped/generated/wrappedgstcheckundefs.h index 29f89b9e..f8abd0e7 100644 --- a/src/wrapped/generated/wrappedgstcheckundefs.h +++ b/src/wrapped/generated/wrappedgstcheckundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcheckUNDEFS_H_ #define __wrappedgstcheckUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollerdefs.h b/src/wrapped/generated/wrappedgstcontrollerdefs.h index 639be35a..2e837e2b 100644 --- a/src/wrapped/generated/wrappedgstcontrollerdefs.h +++ b/src/wrapped/generated/wrappedgstcontrollerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcontrollerDEFS_H_ #define __wrappedgstcontrollerDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollertypes.h b/src/wrapped/generated/wrappedgstcontrollertypes.h index b52da4a2..03d60347 100644 --- a/src/wrapped/generated/wrappedgstcontrollertypes.h +++ b/src/wrapped/generated/wrappedgstcontrollertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcontrollerTYPES_H_ #define __wrappedgstcontrollerTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollerundefs.h b/src/wrapped/generated/wrappedgstcontrollerundefs.h index 342d0861..4df06ff4 100644 --- a/src/wrapped/generated/wrappedgstcontrollerundefs.h +++ b/src/wrapped/generated/wrappedgstcontrollerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstcontrollerUNDEFS_H_ #define __wrappedgstcontrollerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstfftdefs.h b/src/wrapped/generated/wrappedgstfftdefs.h index 8e45f8ec..51c5d2d5 100644 --- a/src/wrapped/generated/wrappedgstfftdefs.h +++ b/src/wrapped/generated/wrappedgstfftdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstfftDEFS_H_ #define __wrappedgstfftDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstffttypes.h b/src/wrapped/generated/wrappedgstffttypes.h index 1628daeb..a5c00343 100644 --- a/src/wrapped/generated/wrappedgstffttypes.h +++ b/src/wrapped/generated/wrappedgstffttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstfftTYPES_H_ #define __wrappedgstfftTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstfftundefs.h b/src/wrapped/generated/wrappedgstfftundefs.h index 26a688a8..08ae1695 100644 --- a/src/wrapped/generated/wrappedgstfftundefs.h +++ b/src/wrapped/generated/wrappedgstfftundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstfftUNDEFS_H_ #define __wrappedgstfftUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstgldefs.h b/src/wrapped/generated/wrappedgstgldefs.h index 255450f6..b36e3a43 100644 --- a/src/wrapped/generated/wrappedgstgldefs.h +++ b/src/wrapped/generated/wrappedgstgldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstglDEFS_H_ #define __wrappedgstglDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstgltypes.h b/src/wrapped/generated/wrappedgstgltypes.h index e8013056..b4fd087a 100644 --- a/src/wrapped/generated/wrappedgstgltypes.h +++ b/src/wrapped/generated/wrappedgstgltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstglTYPES_H_ #define __wrappedgstglTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstglundefs.h b/src/wrapped/generated/wrappedgstglundefs.h index 05db81ca..1c663207 100644 --- a/src/wrapped/generated/wrappedgstglundefs.h +++ b/src/wrapped/generated/wrappedgstglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstglUNDEFS_H_ #define __wrappedgstglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstnetdefs.h b/src/wrapped/generated/wrappedgstnetdefs.h index 50e75484..07c8c196 100644 --- a/src/wrapped/generated/wrappedgstnetdefs.h +++ b/src/wrapped/generated/wrappedgstnetdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstnetDEFS_H_ #define __wrappedgstnetDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstnettypes.h b/src/wrapped/generated/wrappedgstnettypes.h index a4f1dbbc..a2233ffc 100644 --- a/src/wrapped/generated/wrappedgstnettypes.h +++ b/src/wrapped/generated/wrappedgstnettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstnetTYPES_H_ #define __wrappedgstnetTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstnetundefs.h b/src/wrapped/generated/wrappedgstnetundefs.h index 3af737a4..0aa78161 100644 --- a/src/wrapped/generated/wrappedgstnetundefs.h +++ b/src/wrapped/generated/wrappedgstnetundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstnetUNDEFS_H_ #define __wrappedgstnetUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilsdefs.h b/src/wrapped/generated/wrappedgstpbutilsdefs.h index 6451ec65..550f0e85 100644 --- a/src/wrapped/generated/wrappedgstpbutilsdefs.h +++ b/src/wrapped/generated/wrappedgstpbutilsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstpbutilsDEFS_H_ #define __wrappedgstpbutilsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilstypes.h b/src/wrapped/generated/wrappedgstpbutilstypes.h index ec08b7dc..cac4c954 100644 --- a/src/wrapped/generated/wrappedgstpbutilstypes.h +++ b/src/wrapped/generated/wrappedgstpbutilstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstpbutilsTYPES_H_ #define __wrappedgstpbutilsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilsundefs.h b/src/wrapped/generated/wrappedgstpbutilsundefs.h index c4e5fb34..edd9918f 100644 --- a/src/wrapped/generated/wrappedgstpbutilsundefs.h +++ b/src/wrapped/generated/wrappedgstpbutilsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstpbutilsUNDEFS_H_ #define __wrappedgstpbutilsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstreamerdefs.h b/src/wrapped/generated/wrappedgstreamerdefs.h index 6b6714e0..64e7fd37 100644 --- a/src/wrapped/generated/wrappedgstreamerdefs.h +++ b/src/wrapped/generated/wrappedgstreamerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstreamerDEFS_H_ #define __wrappedgstreamerDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstreamertypes.h b/src/wrapped/generated/wrappedgstreamertypes.h index 939f702e..df664a5e 100644 --- a/src/wrapped/generated/wrappedgstreamertypes.h +++ b/src/wrapped/generated/wrappedgstreamertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstreamerTYPES_H_ #define __wrappedgstreamerTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstreamerundefs.h b/src/wrapped/generated/wrappedgstreamerundefs.h index 207c97a0..1dba4f5f 100644 --- a/src/wrapped/generated/wrappedgstreamerundefs.h +++ b/src/wrapped/generated/wrappedgstreamerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstreamerUNDEFS_H_ #define __wrappedgstreamerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstriffdefs.h b/src/wrapped/generated/wrappedgstriffdefs.h index 81e814b5..686cb089 100644 --- a/src/wrapped/generated/wrappedgstriffdefs.h +++ b/src/wrapped/generated/wrappedgstriffdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstriffDEFS_H_ #define __wrappedgstriffDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrifftypes.h b/src/wrapped/generated/wrappedgstrifftypes.h index 8799c1e0..ddea8ff2 100644 --- a/src/wrapped/generated/wrappedgstrifftypes.h +++ b/src/wrapped/generated/wrappedgstrifftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstriffTYPES_H_ #define __wrappedgstriffTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstriffundefs.h b/src/wrapped/generated/wrappedgstriffundefs.h index ddb6cb9e..dd543bc9 100644 --- a/src/wrapped/generated/wrappedgstriffundefs.h +++ b/src/wrapped/generated/wrappedgstriffundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstriffUNDEFS_H_ #define __wrappedgstriffUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtpdefs.h b/src/wrapped/generated/wrappedgstrtpdefs.h index 871d7f6e..43f8b5ee 100644 --- a/src/wrapped/generated/wrappedgstrtpdefs.h +++ b/src/wrapped/generated/wrappedgstrtpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtpDEFS_H_ #define __wrappedgstrtpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtptypes.h b/src/wrapped/generated/wrappedgstrtptypes.h index 54af171f..3071f761 100644 --- a/src/wrapped/generated/wrappedgstrtptypes.h +++ b/src/wrapped/generated/wrappedgstrtptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtpTYPES_H_ #define __wrappedgstrtpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstrtpundefs.h b/src/wrapped/generated/wrappedgstrtpundefs.h index 09ae5a3b..07438861 100644 --- a/src/wrapped/generated/wrappedgstrtpundefs.h +++ b/src/wrapped/generated/wrappedgstrtpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtpUNDEFS_H_ #define __wrappedgstrtpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtspdefs.h b/src/wrapped/generated/wrappedgstrtspdefs.h index cf9cd01a..13e99cb5 100644 --- a/src/wrapped/generated/wrappedgstrtspdefs.h +++ b/src/wrapped/generated/wrappedgstrtspdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtspDEFS_H_ #define __wrappedgstrtspDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtsptypes.h b/src/wrapped/generated/wrappedgstrtsptypes.h index c5ec4e6e..66b15e71 100644 --- a/src/wrapped/generated/wrappedgstrtsptypes.h +++ b/src/wrapped/generated/wrappedgstrtsptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtspTYPES_H_ #define __wrappedgstrtspTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstrtspundefs.h b/src/wrapped/generated/wrappedgstrtspundefs.h index b40cba5a..cd8ea1cf 100644 --- a/src/wrapped/generated/wrappedgstrtspundefs.h +++ b/src/wrapped/generated/wrappedgstrtspundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstrtspUNDEFS_H_ #define __wrappedgstrtspUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstsdpdefs.h b/src/wrapped/generated/wrappedgstsdpdefs.h index 1d7b9f42..e46a79dc 100644 --- a/src/wrapped/generated/wrappedgstsdpdefs.h +++ b/src/wrapped/generated/wrappedgstsdpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstsdpDEFS_H_ #define __wrappedgstsdpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstsdptypes.h b/src/wrapped/generated/wrappedgstsdptypes.h index 8d256835..f767d134 100644 --- a/src/wrapped/generated/wrappedgstsdptypes.h +++ b/src/wrapped/generated/wrappedgstsdptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstsdpTYPES_H_ #define __wrappedgstsdpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstsdpundefs.h b/src/wrapped/generated/wrappedgstsdpundefs.h index 01e5b544..63cd7144 100644 --- a/src/wrapped/generated/wrappedgstsdpundefs.h +++ b/src/wrapped/generated/wrappedgstsdpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstsdpUNDEFS_H_ #define __wrappedgstsdpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgsttagdefs.h b/src/wrapped/generated/wrappedgsttagdefs.h index f9e4019e..6f269b08 100644 --- a/src/wrapped/generated/wrappedgsttagdefs.h +++ b/src/wrapped/generated/wrappedgsttagdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgsttagDEFS_H_ #define __wrappedgsttagDEFS_H_ diff --git a/src/wrapped/generated/wrappedgsttagtypes.h b/src/wrapped/generated/wrappedgsttagtypes.h index 32da7856..a536de8c 100644 --- a/src/wrapped/generated/wrappedgsttagtypes.h +++ b/src/wrapped/generated/wrappedgsttagtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgsttagTYPES_H_ #define __wrappedgsttagTYPES_H_ diff --git a/src/wrapped/generated/wrappedgsttagundefs.h b/src/wrapped/generated/wrappedgsttagundefs.h index 7b71d720..c2b24f1b 100644 --- a/src/wrapped/generated/wrappedgsttagundefs.h +++ b/src/wrapped/generated/wrappedgsttagundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgsttagUNDEFS_H_ #define __wrappedgsttagUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstvideodefs.h b/src/wrapped/generated/wrappedgstvideodefs.h index 58d61cb0..5afd8894 100644 --- a/src/wrapped/generated/wrappedgstvideodefs.h +++ b/src/wrapped/generated/wrappedgstvideodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstvideoDEFS_H_ #define __wrappedgstvideoDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstvideotypes.h b/src/wrapped/generated/wrappedgstvideotypes.h index 33bc6241..4bb4c414 100644 --- a/src/wrapped/generated/wrappedgstvideotypes.h +++ b/src/wrapped/generated/wrappedgstvideotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstvideoTYPES_H_ #define __wrappedgstvideoTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstvideoundefs.h b/src/wrapped/generated/wrappedgstvideoundefs.h index cfe93733..5d03c95b 100644 --- a/src/wrapped/generated/wrappedgstvideoundefs.h +++ b/src/wrapped/generated/wrappedgstvideoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgstvideoUNDEFS_H_ #define __wrappedgstvideoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgthread2defs.h b/src/wrapped/generated/wrappedgthread2defs.h index 745d0049..53ec561c 100644 --- a/src/wrapped/generated/wrappedgthread2defs.h +++ b/src/wrapped/generated/wrappedgthread2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgthread2DEFS_H_ #define __wrappedgthread2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgthread2types.h b/src/wrapped/generated/wrappedgthread2types.h index 104fab88..1a9403ca 100644 --- a/src/wrapped/generated/wrappedgthread2types.h +++ b/src/wrapped/generated/wrappedgthread2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgthread2TYPES_H_ #define __wrappedgthread2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgthread2undefs.h b/src/wrapped/generated/wrappedgthread2undefs.h index 486f8801..b8c3b911 100644 --- a/src/wrapped/generated/wrappedgthread2undefs.h +++ b/src/wrapped/generated/wrappedgthread2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgthread2UNDEFS_H_ #define __wrappedgthread2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgtk3defs.h b/src/wrapped/generated/wrappedgtk3defs.h index de33868c..df76649d 100644 --- a/src/wrapped/generated/wrappedgtk3defs.h +++ b/src/wrapped/generated/wrappedgtk3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtk3DEFS_H_ #define __wrappedgtk3DEFS_H_ diff --git a/src/wrapped/generated/wrappedgtk3types.h b/src/wrapped/generated/wrappedgtk3types.h index 93850e0f..7730a006 100644 --- a/src/wrapped/generated/wrappedgtk3types.h +++ b/src/wrapped/generated/wrappedgtk3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtk3TYPES_H_ #define __wrappedgtk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgtk3undefs.h b/src/wrapped/generated/wrappedgtk3undefs.h index 763ac0e1..ad99adfa 100644 --- a/src/wrapped/generated/wrappedgtk3undefs.h +++ b/src/wrapped/generated/wrappedgtk3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtk3UNDEFS_H_ #define __wrappedgtk3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgtkx112defs.h b/src/wrapped/generated/wrappedgtkx112defs.h index b23e2b33..b4801e84 100644 --- a/src/wrapped/generated/wrappedgtkx112defs.h +++ b/src/wrapped/generated/wrappedgtkx112defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtkx112DEFS_H_ #define __wrappedgtkx112DEFS_H_ diff --git a/src/wrapped/generated/wrappedgtkx112types.h b/src/wrapped/generated/wrappedgtkx112types.h index 34566285..c9cd415b 100644 --- a/src/wrapped/generated/wrappedgtkx112types.h +++ b/src/wrapped/generated/wrappedgtkx112types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtkx112TYPES_H_ #define __wrappedgtkx112TYPES_H_ diff --git a/src/wrapped/generated/wrappedgtkx112undefs.h b/src/wrapped/generated/wrappedgtkx112undefs.h index 4f05b24d..604e0ebb 100644 --- a/src/wrapped/generated/wrappedgtkx112undefs.h +++ b/src/wrapped/generated/wrappedgtkx112undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedgtkx112UNDEFS_H_ #define __wrappedgtkx112UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n64defs.h b/src/wrapped/generated/wrappedicui18n64defs.h index 18689c5e..0111bb89 100644 --- a/src/wrapped/generated/wrappedicui18n64defs.h +++ b/src/wrapped/generated/wrappedicui18n64defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n64DEFS_H_ #define __wrappedicui18n64DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n64types.h b/src/wrapped/generated/wrappedicui18n64types.h index 849a1765..23cc9f76 100644 --- a/src/wrapped/generated/wrappedicui18n64types.h +++ b/src/wrapped/generated/wrappedicui18n64types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n64TYPES_H_ #define __wrappedicui18n64TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n64undefs.h b/src/wrapped/generated/wrappedicui18n64undefs.h index 2613c2de..24c138a6 100644 --- a/src/wrapped/generated/wrappedicui18n64undefs.h +++ b/src/wrapped/generated/wrappedicui18n64undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n64UNDEFS_H_ #define __wrappedicui18n64UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n66defs.h b/src/wrapped/generated/wrappedicui18n66defs.h index 62c4ec87..e0bd170e 100644 --- a/src/wrapped/generated/wrappedicui18n66defs.h +++ b/src/wrapped/generated/wrappedicui18n66defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n66DEFS_H_ #define __wrappedicui18n66DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n66types.h b/src/wrapped/generated/wrappedicui18n66types.h index c3aaa0c1..4801c47d 100644 --- a/src/wrapped/generated/wrappedicui18n66types.h +++ b/src/wrapped/generated/wrappedicui18n66types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n66TYPES_H_ #define __wrappedicui18n66TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n66undefs.h b/src/wrapped/generated/wrappedicui18n66undefs.h index 8c75e931..60c1fcd4 100644 --- a/src/wrapped/generated/wrappedicui18n66undefs.h +++ b/src/wrapped/generated/wrappedicui18n66undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n66UNDEFS_H_ #define __wrappedicui18n66UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n67defs.h b/src/wrapped/generated/wrappedicui18n67defs.h index 91fd2a6d..e010d670 100644 --- a/src/wrapped/generated/wrappedicui18n67defs.h +++ b/src/wrapped/generated/wrappedicui18n67defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n67DEFS_H_ #define __wrappedicui18n67DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n67types.h b/src/wrapped/generated/wrappedicui18n67types.h index f387e620..55714464 100644 --- a/src/wrapped/generated/wrappedicui18n67types.h +++ b/src/wrapped/generated/wrappedicui18n67types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n67TYPES_H_ #define __wrappedicui18n67TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n67undefs.h b/src/wrapped/generated/wrappedicui18n67undefs.h index 04164f92..00755228 100644 --- a/src/wrapped/generated/wrappedicui18n67undefs.h +++ b/src/wrapped/generated/wrappedicui18n67undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n67UNDEFS_H_ #define __wrappedicui18n67UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n72defs.h b/src/wrapped/generated/wrappedicui18n72defs.h index f065b4cb..0e3238b2 100644 --- a/src/wrapped/generated/wrappedicui18n72defs.h +++ b/src/wrapped/generated/wrappedicui18n72defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n72DEFS_H_ #define __wrappedicui18n72DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n72types.h b/src/wrapped/generated/wrappedicui18n72types.h index ba6a2e7a..df1e35fa 100644 --- a/src/wrapped/generated/wrappedicui18n72types.h +++ b/src/wrapped/generated/wrappedicui18n72types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n72TYPES_H_ #define __wrappedicui18n72TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n72undefs.h b/src/wrapped/generated/wrappedicui18n72undefs.h index fa3d7f9e..b2b75342 100644 --- a/src/wrapped/generated/wrappedicui18n72undefs.h +++ b/src/wrapped/generated/wrappedicui18n72undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n72UNDEFS_H_ #define __wrappedicui18n72UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n73defs.h b/src/wrapped/generated/wrappedicui18n73defs.h index 7dd420e8..298c1d42 100644 --- a/src/wrapped/generated/wrappedicui18n73defs.h +++ b/src/wrapped/generated/wrappedicui18n73defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n73DEFS_H_ #define __wrappedicui18n73DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n73types.h b/src/wrapped/generated/wrappedicui18n73types.h index a532595e..cf389074 100644 --- a/src/wrapped/generated/wrappedicui18n73types.h +++ b/src/wrapped/generated/wrappedicui18n73types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n73TYPES_H_ #define __wrappedicui18n73TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n73undefs.h b/src/wrapped/generated/wrappedicui18n73undefs.h index af936d37..7628830e 100644 --- a/src/wrapped/generated/wrappedicui18n73undefs.h +++ b/src/wrapped/generated/wrappedicui18n73undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n73UNDEFS_H_ #define __wrappedicui18n73UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n74defs.h b/src/wrapped/generated/wrappedicui18n74defs.h index 9d35caa0..62c37309 100644 --- a/src/wrapped/generated/wrappedicui18n74defs.h +++ b/src/wrapped/generated/wrappedicui18n74defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n74DEFS_H_ #define __wrappedicui18n74DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n74types.h b/src/wrapped/generated/wrappedicui18n74types.h index c7ab0d49..349e524f 100644 --- a/src/wrapped/generated/wrappedicui18n74types.h +++ b/src/wrapped/generated/wrappedicui18n74types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n74TYPES_H_ #define __wrappedicui18n74TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n74undefs.h b/src/wrapped/generated/wrappedicui18n74undefs.h index 6165885f..c451c934 100644 --- a/src/wrapped/generated/wrappedicui18n74undefs.h +++ b/src/wrapped/generated/wrappedicui18n74undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicui18n74UNDEFS_H_ #define __wrappedicui18n74UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc64defs.h b/src/wrapped/generated/wrappedicuuc64defs.h index b0e5e183..f83a1efe 100644 --- a/src/wrapped/generated/wrappedicuuc64defs.h +++ b/src/wrapped/generated/wrappedicuuc64defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc64DEFS_H_ #define __wrappedicuuc64DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc64types.h b/src/wrapped/generated/wrappedicuuc64types.h index afad3be7..3a0c1945 100644 --- a/src/wrapped/generated/wrappedicuuc64types.h +++ b/src/wrapped/generated/wrappedicuuc64types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc64TYPES_H_ #define __wrappedicuuc64TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc64undefs.h b/src/wrapped/generated/wrappedicuuc64undefs.h index 8405e07d..9e81564a 100644 --- a/src/wrapped/generated/wrappedicuuc64undefs.h +++ b/src/wrapped/generated/wrappedicuuc64undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc64UNDEFS_H_ #define __wrappedicuuc64UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc66defs.h b/src/wrapped/generated/wrappedicuuc66defs.h index 5236e323..31a37806 100644 --- a/src/wrapped/generated/wrappedicuuc66defs.h +++ b/src/wrapped/generated/wrappedicuuc66defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc66DEFS_H_ #define __wrappedicuuc66DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc66types.h b/src/wrapped/generated/wrappedicuuc66types.h index 050fe419..1ca92836 100644 --- a/src/wrapped/generated/wrappedicuuc66types.h +++ b/src/wrapped/generated/wrappedicuuc66types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc66TYPES_H_ #define __wrappedicuuc66TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc66undefs.h b/src/wrapped/generated/wrappedicuuc66undefs.h index 97cf2dbe..5ce0b4f2 100644 --- a/src/wrapped/generated/wrappedicuuc66undefs.h +++ b/src/wrapped/generated/wrappedicuuc66undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc66UNDEFS_H_ #define __wrappedicuuc66UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc67defs.h b/src/wrapped/generated/wrappedicuuc67defs.h index 96e34f1c..f8588ef6 100644 --- a/src/wrapped/generated/wrappedicuuc67defs.h +++ b/src/wrapped/generated/wrappedicuuc67defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc67DEFS_H_ #define __wrappedicuuc67DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc67types.h b/src/wrapped/generated/wrappedicuuc67types.h index 508d920f..f647c538 100644 --- a/src/wrapped/generated/wrappedicuuc67types.h +++ b/src/wrapped/generated/wrappedicuuc67types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc67TYPES_H_ #define __wrappedicuuc67TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc67undefs.h b/src/wrapped/generated/wrappedicuuc67undefs.h index e6043cd6..c7107958 100644 --- a/src/wrapped/generated/wrappedicuuc67undefs.h +++ b/src/wrapped/generated/wrappedicuuc67undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc67UNDEFS_H_ #define __wrappedicuuc67UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc72defs.h b/src/wrapped/generated/wrappedicuuc72defs.h index 8a512ca5..1506fa74 100644 --- a/src/wrapped/generated/wrappedicuuc72defs.h +++ b/src/wrapped/generated/wrappedicuuc72defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc72DEFS_H_ #define __wrappedicuuc72DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc72types.h b/src/wrapped/generated/wrappedicuuc72types.h index ff28ecfd..a78214de 100644 --- a/src/wrapped/generated/wrappedicuuc72types.h +++ b/src/wrapped/generated/wrappedicuuc72types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc72TYPES_H_ #define __wrappedicuuc72TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc72undefs.h b/src/wrapped/generated/wrappedicuuc72undefs.h index 82b2e329..d05452e3 100644 --- a/src/wrapped/generated/wrappedicuuc72undefs.h +++ b/src/wrapped/generated/wrappedicuuc72undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc72UNDEFS_H_ #define __wrappedicuuc72UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc73defs.h b/src/wrapped/generated/wrappedicuuc73defs.h index 93b84b08..2333d563 100644 --- a/src/wrapped/generated/wrappedicuuc73defs.h +++ b/src/wrapped/generated/wrappedicuuc73defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc73DEFS_H_ #define __wrappedicuuc73DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc73types.h b/src/wrapped/generated/wrappedicuuc73types.h index e6859dd4..dec364e0 100644 --- a/src/wrapped/generated/wrappedicuuc73types.h +++ b/src/wrapped/generated/wrappedicuuc73types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc73TYPES_H_ #define __wrappedicuuc73TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc73undefs.h b/src/wrapped/generated/wrappedicuuc73undefs.h index 8fa45188..3f76f393 100644 --- a/src/wrapped/generated/wrappedicuuc73undefs.h +++ b/src/wrapped/generated/wrappedicuuc73undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc73UNDEFS_H_ #define __wrappedicuuc73UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc74defs.h b/src/wrapped/generated/wrappedicuuc74defs.h index b8dc6163..c3a15fbf 100644 --- a/src/wrapped/generated/wrappedicuuc74defs.h +++ b/src/wrapped/generated/wrappedicuuc74defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc74DEFS_H_ #define __wrappedicuuc74DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc74types.h b/src/wrapped/generated/wrappedicuuc74types.h index 4998e102..c965a0ad 100644 --- a/src/wrapped/generated/wrappedicuuc74types.h +++ b/src/wrapped/generated/wrappedicuuc74types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc74TYPES_H_ #define __wrappedicuuc74TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc74undefs.h b/src/wrapped/generated/wrappedicuuc74undefs.h index 43d685d0..938a3bf9 100644 --- a/src/wrapped/generated/wrappedicuuc74undefs.h +++ b/src/wrapped/generated/wrappedicuuc74undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedicuuc74UNDEFS_H_ #define __wrappedicuuc74UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedidn2defs.h b/src/wrapped/generated/wrappedidn2defs.h index 4177a4af..f176b322 100644 --- a/src/wrapped/generated/wrappedidn2defs.h +++ b/src/wrapped/generated/wrappedidn2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedidn2DEFS_H_ #define __wrappedidn2DEFS_H_ diff --git a/src/wrapped/generated/wrappedidn2types.h b/src/wrapped/generated/wrappedidn2types.h index e67e4dee..abeb9ff0 100644 --- a/src/wrapped/generated/wrappedidn2types.h +++ b/src/wrapped/generated/wrappedidn2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedidn2TYPES_H_ #define __wrappedidn2TYPES_H_ diff --git a/src/wrapped/generated/wrappedidn2undefs.h b/src/wrapped/generated/wrappedidn2undefs.h index 77a2eb8c..235a0b88 100644 --- a/src/wrapped/generated/wrappedidn2undefs.h +++ b/src/wrapped/generated/wrappedidn2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedidn2UNDEFS_H_ #define __wrappedidn2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedkrb5defs.h b/src/wrapped/generated/wrappedkrb5defs.h index 1480b7a5..dee7c859 100644 --- a/src/wrapped/generated/wrappedkrb5defs.h +++ b/src/wrapped/generated/wrappedkrb5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedkrb5DEFS_H_ #define __wrappedkrb5DEFS_H_ diff --git a/src/wrapped/generated/wrappedkrb5types.h b/src/wrapped/generated/wrappedkrb5types.h index 5e8fb376..90e5d8b0 100644 --- a/src/wrapped/generated/wrappedkrb5types.h +++ b/src/wrapped/generated/wrappedkrb5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedkrb5TYPES_H_ #define __wrappedkrb5TYPES_H_ diff --git a/src/wrapped/generated/wrappedkrb5undefs.h b/src/wrapped/generated/wrappedkrb5undefs.h index 555d016b..a0dfce28 100644 --- a/src/wrapped/generated/wrappedkrb5undefs.h +++ b/src/wrapped/generated/wrappedkrb5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedkrb5UNDEFS_H_ #define __wrappedkrb5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlberdefs.h b/src/wrapped/generated/wrappedlberdefs.h index c82f0578..f8294546 100644 --- a/src/wrapped/generated/wrappedlberdefs.h +++ b/src/wrapped/generated/wrappedlberdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlberDEFS_H_ #define __wrappedlberDEFS_H_ diff --git a/src/wrapped/generated/wrappedlbertypes.h b/src/wrapped/generated/wrappedlbertypes.h index 4e0ffd66..d21ddf50 100644 --- a/src/wrapped/generated/wrappedlbertypes.h +++ b/src/wrapped/generated/wrappedlbertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlberTYPES_H_ #define __wrappedlberTYPES_H_ diff --git a/src/wrapped/generated/wrappedlberundefs.h b/src/wrapped/generated/wrappedlberundefs.h index 02a61ea1..2d914827 100644 --- a/src/wrapped/generated/wrappedlberundefs.h +++ b/src/wrapped/generated/wrappedlberundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlberUNDEFS_H_ #define __wrappedlberUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlcms2defs.h b/src/wrapped/generated/wrappedlcms2defs.h index 01abe076..b7ee692b 100644 --- a/src/wrapped/generated/wrappedlcms2defs.h +++ b/src/wrapped/generated/wrappedlcms2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlcms2DEFS_H_ #define __wrappedlcms2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlcms2types.h b/src/wrapped/generated/wrappedlcms2types.h index 9fdd10bf..fb41e489 100644 --- a/src/wrapped/generated/wrappedlcms2types.h +++ b/src/wrapped/generated/wrappedlcms2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlcms2TYPES_H_ #define __wrappedlcms2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlcms2undefs.h b/src/wrapped/generated/wrappedlcms2undefs.h index 890088f0..f4969c13 100644 --- a/src/wrapped/generated/wrappedlcms2undefs.h +++ b/src/wrapped/generated/wrappedlcms2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlcms2UNDEFS_H_ #define __wrappedlcms2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedldaprdefs.h b/src/wrapped/generated/wrappedldaprdefs.h index 0b42b5cd..b70cd0ea 100644 --- a/src/wrapped/generated/wrappedldaprdefs.h +++ b/src/wrapped/generated/wrappedldaprdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldaprDEFS_H_ #define __wrappedldaprDEFS_H_ diff --git a/src/wrapped/generated/wrappedldaprtypes.h b/src/wrapped/generated/wrappedldaprtypes.h index 8cb0a7c7..e94daa6d 100644 --- a/src/wrapped/generated/wrappedldaprtypes.h +++ b/src/wrapped/generated/wrappedldaprtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldaprTYPES_H_ #define __wrappedldaprTYPES_H_ diff --git a/src/wrapped/generated/wrappedldaprundefs.h b/src/wrapped/generated/wrappedldaprundefs.h index 1c09ce38..8c0e3e55 100644 --- a/src/wrapped/generated/wrappedldaprundefs.h +++ b/src/wrapped/generated/wrappedldaprundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldaprUNDEFS_H_ #define __wrappedldaprUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedldlinuxdefs.h b/src/wrapped/generated/wrappedldlinuxdefs.h index d7bf282c..1563667f 100644 --- a/src/wrapped/generated/wrappedldlinuxdefs.h +++ b/src/wrapped/generated/wrappedldlinuxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldlinuxDEFS_H_ #define __wrappedldlinuxDEFS_H_ diff --git a/src/wrapped/generated/wrappedldlinuxtypes.h b/src/wrapped/generated/wrappedldlinuxtypes.h index cd8e9095..6dc287a4 100644 --- a/src/wrapped/generated/wrappedldlinuxtypes.h +++ b/src/wrapped/generated/wrappedldlinuxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldlinuxTYPES_H_ #define __wrappedldlinuxTYPES_H_ diff --git a/src/wrapped/generated/wrappedldlinuxundefs.h b/src/wrapped/generated/wrappedldlinuxundefs.h index 2d70d2ac..7d745150 100644 --- a/src/wrapped/generated/wrappedldlinuxundefs.h +++ b/src/wrapped/generated/wrappedldlinuxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedldlinuxUNDEFS_H_ #define __wrappedldlinuxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibasounddefs.h b/src/wrapped/generated/wrappedlibasounddefs.h index 0c3d0af1..e8712e29 100644 --- a/src/wrapped/generated/wrappedlibasounddefs.h +++ b/src/wrapped/generated/wrappedlibasounddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibasoundDEFS_H_ #define __wrappedlibasoundDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibasoundtypes.h b/src/wrapped/generated/wrappedlibasoundtypes.h index cbea7846..f4c6d6ed 100644 --- a/src/wrapped/generated/wrappedlibasoundtypes.h +++ b/src/wrapped/generated/wrappedlibasoundtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibasoundTYPES_H_ #define __wrappedlibasoundTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibasoundundefs.h b/src/wrapped/generated/wrappedlibasoundundefs.h index b43a3e1f..8cdc33d1 100644 --- a/src/wrapped/generated/wrappedlibasoundundefs.h +++ b/src/wrapped/generated/wrappedlibasoundundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibasoundUNDEFS_H_ #define __wrappedlibasoundUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibbsddefs.h b/src/wrapped/generated/wrappedlibbsddefs.h index 6104bfc2..0e8b0ad6 100644 --- a/src/wrapped/generated/wrappedlibbsddefs.h +++ b/src/wrapped/generated/wrappedlibbsddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibbsdDEFS_H_ #define __wrappedlibbsdDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibbsdtypes.h b/src/wrapped/generated/wrappedlibbsdtypes.h index b007845a..5fc338a4 100644 --- a/src/wrapped/generated/wrappedlibbsdtypes.h +++ b/src/wrapped/generated/wrappedlibbsdtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibbsdTYPES_H_ #define __wrappedlibbsdTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibbsdundefs.h b/src/wrapped/generated/wrappedlibbsdundefs.h index 6f22a93e..d85acc02 100644 --- a/src/wrapped/generated/wrappedlibbsdundefs.h +++ b/src/wrapped/generated/wrappedlibbsdundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibbsdUNDEFS_H_ #define __wrappedlibbsdUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcdefs.h b/src/wrapped/generated/wrappedlibcdefs.h index 9b1434a0..19b0c685 100644 --- a/src/wrapped/generated/wrappedlibcdefs.h +++ b/src/wrapped/generated/wrappedlibcdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcDEFS_H_ #define __wrappedlibcDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcmusldefs.h b/src/wrapped/generated/wrappedlibcmusldefs.h index 44699686..4b4eb4ff 100644 --- a/src/wrapped/generated/wrappedlibcmusldefs.h +++ b/src/wrapped/generated/wrappedlibcmusldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcmuslDEFS_H_ #define __wrappedlibcmuslDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcmusltypes.h b/src/wrapped/generated/wrappedlibcmusltypes.h index dc4ac245..9cd02c19 100644 --- a/src/wrapped/generated/wrappedlibcmusltypes.h +++ b/src/wrapped/generated/wrappedlibcmusltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcmuslTYPES_H_ #define __wrappedlibcmuslTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcmuslundefs.h b/src/wrapped/generated/wrappedlibcmuslundefs.h index 71ff2c0e..a9efd9fd 100644 --- a/src/wrapped/generated/wrappedlibcmuslundefs.h +++ b/src/wrapped/generated/wrappedlibcmuslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcmuslUNDEFS_H_ #define __wrappedlibcmuslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcryptdefs.h b/src/wrapped/generated/wrappedlibcryptdefs.h index fc002b3b..1ad3bf07 100644 --- a/src/wrapped/generated/wrappedlibcryptdefs.h +++ b/src/wrapped/generated/wrappedlibcryptdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcryptDEFS_H_ #define __wrappedlibcryptDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcrypttypes.h b/src/wrapped/generated/wrappedlibcrypttypes.h index 41047145..3c26e75a 100644 --- a/src/wrapped/generated/wrappedlibcrypttypes.h +++ b/src/wrapped/generated/wrappedlibcrypttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcryptTYPES_H_ #define __wrappedlibcryptTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcryptundefs.h b/src/wrapped/generated/wrappedlibcryptundefs.h index 4f5de633..c695a259 100644 --- a/src/wrapped/generated/wrappedlibcryptundefs.h +++ b/src/wrapped/generated/wrappedlibcryptundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcryptUNDEFS_H_ #define __wrappedlibcryptUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index a9b5dbb1..1b899183 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcTYPES_H_ #define __wrappedlibcTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcundefs.h b/src/wrapped/generated/wrappedlibcundefs.h index 9fef3263..c8b3613e 100644 --- a/src/wrapped/generated/wrappedlibcundefs.h +++ b/src/wrapped/generated/wrappedlibcundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcUNDEFS_H_ #define __wrappedlibcUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcupsdefs.h b/src/wrapped/generated/wrappedlibcupsdefs.h index 34019153..b44e4592 100644 --- a/src/wrapped/generated/wrappedlibcupsdefs.h +++ b/src/wrapped/generated/wrappedlibcupsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcupsDEFS_H_ #define __wrappedlibcupsDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcupstypes.h b/src/wrapped/generated/wrappedlibcupstypes.h index f17b8fc0..5194024f 100644 --- a/src/wrapped/generated/wrappedlibcupstypes.h +++ b/src/wrapped/generated/wrappedlibcupstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcupsTYPES_H_ #define __wrappedlibcupsTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcupsundefs.h b/src/wrapped/generated/wrappedlibcupsundefs.h index be8baf83..c5c81317 100644 --- a/src/wrapped/generated/wrappedlibcupsundefs.h +++ b/src/wrapped/generated/wrappedlibcupsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibcupsUNDEFS_H_ #define __wrappedlibcupsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdldefs.h b/src/wrapped/generated/wrappedlibdldefs.h index 75844c4a..3e3e33d3 100644 --- a/src/wrapped/generated/wrappedlibdldefs.h +++ b/src/wrapped/generated/wrappedlibdldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdlDEFS_H_ #define __wrappedlibdlDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdltypes.h b/src/wrapped/generated/wrappedlibdltypes.h index a2535e0a..260b042d 100644 --- a/src/wrapped/generated/wrappedlibdltypes.h +++ b/src/wrapped/generated/wrappedlibdltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdlTYPES_H_ #define __wrappedlibdlTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdlundefs.h b/src/wrapped/generated/wrappedlibdlundefs.h index f09b4630..8e6fcbdc 100644 --- a/src/wrapped/generated/wrappedlibdlundefs.h +++ b/src/wrapped/generated/wrappedlibdlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdlUNDEFS_H_ #define __wrappedlibdlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgpudefs.h b/src/wrapped/generated/wrappedlibdrmamdgpudefs.h index bf8f9499..8404375c 100644 --- a/src/wrapped/generated/wrappedlibdrmamdgpudefs.h +++ b/src/wrapped/generated/wrappedlibdrmamdgpudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmamdgpuDEFS_H_ #define __wrappedlibdrmamdgpuDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgputypes.h b/src/wrapped/generated/wrappedlibdrmamdgputypes.h index 7ab8dd91..dfc40e7e 100644 --- a/src/wrapped/generated/wrappedlibdrmamdgputypes.h +++ b/src/wrapped/generated/wrappedlibdrmamdgputypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmamdgpuTYPES_H_ #define __wrappedlibdrmamdgpuTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h b/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h index 7cc76dfb..4e5f460c 100644 --- a/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h +++ b/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmamdgpuUNDEFS_H_ #define __wrappedlibdrmamdgpuUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmdefs.h b/src/wrapped/generated/wrappedlibdrmdefs.h index a94ebd04..c151ce97 100644 --- a/src/wrapped/generated/wrappedlibdrmdefs.h +++ b/src/wrapped/generated/wrappedlibdrmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmDEFS_H_ #define __wrappedlibdrmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmtypes.h b/src/wrapped/generated/wrappedlibdrmtypes.h index 8c583cb2..f6d72e04 100644 --- a/src/wrapped/generated/wrappedlibdrmtypes.h +++ b/src/wrapped/generated/wrappedlibdrmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmTYPES_H_ #define __wrappedlibdrmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdrmundefs.h b/src/wrapped/generated/wrappedlibdrmundefs.h index b52bd362..796c820a 100644 --- a/src/wrapped/generated/wrappedlibdrmundefs.h +++ b/src/wrapped/generated/wrappedlibdrmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibdrmUNDEFS_H_ #define __wrappedlibdrmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibegldefs.h b/src/wrapped/generated/wrappedlibegldefs.h index f52e5d2e..55e5fa1b 100644 --- a/src/wrapped/generated/wrappedlibegldefs.h +++ b/src/wrapped/generated/wrappedlibegldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibeglDEFS_H_ #define __wrappedlibeglDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibegltypes.h b/src/wrapped/generated/wrappedlibegltypes.h index 9488b9b4..06efef25 100644 --- a/src/wrapped/generated/wrappedlibegltypes.h +++ b/src/wrapped/generated/wrappedlibegltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibeglTYPES_H_ #define __wrappedlibeglTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibeglundefs.h b/src/wrapped/generated/wrappedlibeglundefs.h index 7364e25e..e3c387f7 100644 --- a/src/wrapped/generated/wrappedlibeglundefs.h +++ b/src/wrapped/generated/wrappedlibeglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibeglUNDEFS_H_ #define __wrappedlibeglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformdefs.h b/src/wrapped/generated/wrappedlibformdefs.h index 30a2e523..8374da7d 100644 --- a/src/wrapped/generated/wrappedlibformdefs.h +++ b/src/wrapped/generated/wrappedlibformdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformDEFS_H_ #define __wrappedlibformDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformtypes.h b/src/wrapped/generated/wrappedlibformtypes.h index 2718dd4d..ace87806 100644 --- a/src/wrapped/generated/wrappedlibformtypes.h +++ b/src/wrapped/generated/wrappedlibformtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformTYPES_H_ #define __wrappedlibformTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformundefs.h b/src/wrapped/generated/wrappedlibformundefs.h index 3c54fd75..fb380985 100644 --- a/src/wrapped/generated/wrappedlibformundefs.h +++ b/src/wrapped/generated/wrappedlibformundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformUNDEFS_H_ #define __wrappedlibformUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformw6defs.h b/src/wrapped/generated/wrappedlibformw6defs.h index 1458ae44..25d026a5 100644 --- a/src/wrapped/generated/wrappedlibformw6defs.h +++ b/src/wrapped/generated/wrappedlibformw6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformw6DEFS_H_ #define __wrappedlibformw6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformw6types.h b/src/wrapped/generated/wrappedlibformw6types.h index 682d248a..802c89d6 100644 --- a/src/wrapped/generated/wrappedlibformw6types.h +++ b/src/wrapped/generated/wrappedlibformw6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformw6TYPES_H_ #define __wrappedlibformw6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformw6undefs.h b/src/wrapped/generated/wrappedlibformw6undefs.h index 4866960f..1783e4f7 100644 --- a/src/wrapped/generated/wrappedlibformw6undefs.h +++ b/src/wrapped/generated/wrappedlibformw6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformw6UNDEFS_H_ #define __wrappedlibformw6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformwdefs.h b/src/wrapped/generated/wrappedlibformwdefs.h index 55a007b7..a0451f1d 100644 --- a/src/wrapped/generated/wrappedlibformwdefs.h +++ b/src/wrapped/generated/wrappedlibformwdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformwDEFS_H_ #define __wrappedlibformwDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformwtypes.h b/src/wrapped/generated/wrappedlibformwtypes.h index 19d8d750..bdf27ac5 100644 --- a/src/wrapped/generated/wrappedlibformwtypes.h +++ b/src/wrapped/generated/wrappedlibformwtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformwTYPES_H_ #define __wrappedlibformwTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformwundefs.h b/src/wrapped/generated/wrappedlibformwundefs.h index 35926a4a..817fd6d9 100644 --- a/src/wrapped/generated/wrappedlibformwundefs.h +++ b/src/wrapped/generated/wrappedlibformwundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibformwUNDEFS_H_ #define __wrappedlibformwUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibfusedefs.h b/src/wrapped/generated/wrappedlibfusedefs.h index d42e7a23..bdfa32d8 100644 --- a/src/wrapped/generated/wrappedlibfusedefs.h +++ b/src/wrapped/generated/wrappedlibfusedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibfuseDEFS_H_ #define __wrappedlibfuseDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibfusetypes.h b/src/wrapped/generated/wrappedlibfusetypes.h index 342a308d..be3e4c8b 100644 --- a/src/wrapped/generated/wrappedlibfusetypes.h +++ b/src/wrapped/generated/wrappedlibfusetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibfuseTYPES_H_ #define __wrappedlibfuseTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibfuseundefs.h b/src/wrapped/generated/wrappedlibfuseundefs.h index 4f194898..8bcc096c 100644 --- a/src/wrapped/generated/wrappedlibfuseundefs.h +++ b/src/wrapped/generated/wrappedlibfuseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibfuseUNDEFS_H_ #define __wrappedlibfuseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibgldefs.h b/src/wrapped/generated/wrappedlibgldefs.h index 4caba6db..c2b7cf81 100644 --- a/src/wrapped/generated/wrappedlibgldefs.h +++ b/src/wrapped/generated/wrappedlibgldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglDEFS_H_ #define __wrappedlibglDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibgltypes.h b/src/wrapped/generated/wrappedlibgltypes.h index e9d48457..c1aad887 100644 --- a/src/wrapped/generated/wrappedlibgltypes.h +++ b/src/wrapped/generated/wrappedlibgltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglTYPES_H_ #define __wrappedlibglTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibgludefs.h b/src/wrapped/generated/wrappedlibgludefs.h index f365ac3e..7f8094d1 100644 --- a/src/wrapped/generated/wrappedlibgludefs.h +++ b/src/wrapped/generated/wrappedlibgludefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibgluDEFS_H_ #define __wrappedlibgluDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglundefs.h b/src/wrapped/generated/wrappedlibglundefs.h index bca71608..af316b14 100644 --- a/src/wrapped/generated/wrappedlibglundefs.h +++ b/src/wrapped/generated/wrappedlibglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglUNDEFS_H_ #define __wrappedlibglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglutypes.h b/src/wrapped/generated/wrappedlibglutypes.h index ec000dda..da9c18b5 100644 --- a/src/wrapped/generated/wrappedlibglutypes.h +++ b/src/wrapped/generated/wrappedlibglutypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibgluTYPES_H_ #define __wrappedlibgluTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibgluundefs.h b/src/wrapped/generated/wrappedlibgluundefs.h index acf38042..e1bfc600 100644 --- a/src/wrapped/generated/wrappedlibgluundefs.h +++ b/src/wrapped/generated/wrappedlibgluundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibgluUNDEFS_H_ #define __wrappedlibgluUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglxdefs.h b/src/wrapped/generated/wrappedlibglxdefs.h index 1e947e9a..9e08adec 100644 --- a/src/wrapped/generated/wrappedlibglxdefs.h +++ b/src/wrapped/generated/wrappedlibglxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglxDEFS_H_ #define __wrappedlibglxDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglxtypes.h b/src/wrapped/generated/wrappedlibglxtypes.h index bfa19bae..5cedd91f 100644 --- a/src/wrapped/generated/wrappedlibglxtypes.h +++ b/src/wrapped/generated/wrappedlibglxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglxTYPES_H_ #define __wrappedlibglxTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibglxundefs.h b/src/wrapped/generated/wrappedlibglxundefs.h index 3c140b5d..fe8446f5 100644 --- a/src/wrapped/generated/wrappedlibglxundefs.h +++ b/src/wrapped/generated/wrappedlibglxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibglxUNDEFS_H_ #define __wrappedlibglxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzzdefs.h b/src/wrapped/generated/wrappedlibharfbuzzdefs.h index c463b59d..7aa5d647 100644 --- a/src/wrapped/generated/wrappedlibharfbuzzdefs.h +++ b/src/wrapped/generated/wrappedlibharfbuzzdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibharfbuzzDEFS_H_ #define __wrappedlibharfbuzzDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzztypes.h b/src/wrapped/generated/wrappedlibharfbuzztypes.h index b6ccb205..e19ac01c 100644 --- a/src/wrapped/generated/wrappedlibharfbuzztypes.h +++ b/src/wrapped/generated/wrappedlibharfbuzztypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibharfbuzzTYPES_H_ #define __wrappedlibharfbuzzTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzzundefs.h b/src/wrapped/generated/wrappedlibharfbuzzundefs.h index 05caf5af..3f2f3556 100644 --- a/src/wrapped/generated/wrappedlibharfbuzzundefs.h +++ b/src/wrapped/generated/wrappedlibharfbuzzundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibharfbuzzUNDEFS_H_ #define __wrappedlibharfbuzzUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6defs.h b/src/wrapped/generated/wrappedlibhogweed6defs.h index 6693e71b..6c4e872a 100644 --- a/src/wrapped/generated/wrappedlibhogweed6defs.h +++ b/src/wrapped/generated/wrappedlibhogweed6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibhogweed6DEFS_H_ #define __wrappedlibhogweed6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6types.h b/src/wrapped/generated/wrappedlibhogweed6types.h index 60fc7159..b9a5eb68 100644 --- a/src/wrapped/generated/wrappedlibhogweed6types.h +++ b/src/wrapped/generated/wrappedlibhogweed6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibhogweed6TYPES_H_ #define __wrappedlibhogweed6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6undefs.h b/src/wrapped/generated/wrappedlibhogweed6undefs.h index d83b11c3..b91049c0 100644 --- a/src/wrapped/generated/wrappedlibhogweed6undefs.h +++ b/src/wrapped/generated/wrappedlibhogweed6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibhogweed6UNDEFS_H_ #define __wrappedlibhogweed6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibibusdefs.h b/src/wrapped/generated/wrappedlibibusdefs.h index 353351f7..af902629 100644 --- a/src/wrapped/generated/wrappedlibibusdefs.h +++ b/src/wrapped/generated/wrappedlibibusdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibibusDEFS_H_ #define __wrappedlibibusDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibibustypes.h b/src/wrapped/generated/wrappedlibibustypes.h index 23612c70..5074ced7 100644 --- a/src/wrapped/generated/wrappedlibibustypes.h +++ b/src/wrapped/generated/wrappedlibibustypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibibusTYPES_H_ #define __wrappedlibibusTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibibusundefs.h b/src/wrapped/generated/wrappedlibibusundefs.h index 3bc6269b..2f681597 100644 --- a/src/wrapped/generated/wrappedlibibusundefs.h +++ b/src/wrapped/generated/wrappedlibibusundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibibusUNDEFS_H_ #define __wrappedlibibusUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibicedefs.h b/src/wrapped/generated/wrappedlibicedefs.h index 6ee5a387..cbb71c6c 100644 --- a/src/wrapped/generated/wrappedlibicedefs.h +++ b/src/wrapped/generated/wrappedlibicedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibiceDEFS_H_ #define __wrappedlibiceDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibicetypes.h b/src/wrapped/generated/wrappedlibicetypes.h index 111f9be5..f2ae1b1b 100644 --- a/src/wrapped/generated/wrappedlibicetypes.h +++ b/src/wrapped/generated/wrappedlibicetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibiceTYPES_H_ #define __wrappedlibiceTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibiceundefs.h b/src/wrapped/generated/wrappedlibiceundefs.h index 052cabfd..ebda3f71 100644 --- a/src/wrapped/generated/wrappedlibiceundefs.h +++ b/src/wrapped/generated/wrappedlibiceundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibiceUNDEFS_H_ #define __wrappedlibiceUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibmdefs.h b/src/wrapped/generated/wrappedlibmdefs.h index 6afe3229..6054e44c 100644 --- a/src/wrapped/generated/wrappedlibmdefs.h +++ b/src/wrapped/generated/wrappedlibmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibmDEFS_H_ #define __wrappedlibmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibmtypes.h b/src/wrapped/generated/wrappedlibmtypes.h index b31e0cbc..35a7ad2e 100644 --- a/src/wrapped/generated/wrappedlibmtypes.h +++ b/src/wrapped/generated/wrappedlibmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibmTYPES_H_ #define __wrappedlibmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibmundefs.h b/src/wrapped/generated/wrappedlibmundefs.h index 66b487b9..f1a81dfe 100644 --- a/src/wrapped/generated/wrappedlibmundefs.h +++ b/src/wrapped/generated/wrappedlibmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibmUNDEFS_H_ #define __wrappedlibmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6defs.h b/src/wrapped/generated/wrappedlibncurses6defs.h index 0d07108b..eb86d766 100644 --- a/src/wrapped/generated/wrappedlibncurses6defs.h +++ b/src/wrapped/generated/wrappedlibncurses6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurses6DEFS_H_ #define __wrappedlibncurses6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6types.h b/src/wrapped/generated/wrappedlibncurses6types.h index 9594091e..48814b66 100644 --- a/src/wrapped/generated/wrappedlibncurses6types.h +++ b/src/wrapped/generated/wrappedlibncurses6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurses6TYPES_H_ #define __wrappedlibncurses6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6undefs.h b/src/wrapped/generated/wrappedlibncurses6undefs.h index 17cb535a..69893938 100644 --- a/src/wrapped/generated/wrappedlibncurses6undefs.h +++ b/src/wrapped/generated/wrappedlibncurses6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurses6UNDEFS_H_ #define __wrappedlibncurses6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesdefs.h b/src/wrapped/generated/wrappedlibncursesdefs.h index 3f1e5084..bbd6920b 100644 --- a/src/wrapped/generated/wrappedlibncursesdefs.h +++ b/src/wrapped/generated/wrappedlibncursesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesDEFS_H_ #define __wrappedlibncursesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursestypes.h b/src/wrapped/generated/wrappedlibncursestypes.h index 08e551de..17756b37 100644 --- a/src/wrapped/generated/wrappedlibncursestypes.h +++ b/src/wrapped/generated/wrappedlibncursestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesTYPES_H_ #define __wrappedlibncursesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncursesundefs.h b/src/wrapped/generated/wrappedlibncursesundefs.h index ee39f268..98b149af 100644 --- a/src/wrapped/generated/wrappedlibncursesundefs.h +++ b/src/wrapped/generated/wrappedlibncursesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesUNDEFS_H_ #define __wrappedlibncursesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6defs.h b/src/wrapped/generated/wrappedlibncursesw6defs.h index 70f1a06a..19535400 100644 --- a/src/wrapped/generated/wrappedlibncursesw6defs.h +++ b/src/wrapped/generated/wrappedlibncursesw6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesw6DEFS_H_ #define __wrappedlibncursesw6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6types.h b/src/wrapped/generated/wrappedlibncursesw6types.h index 275961ec..23fea565 100644 --- a/src/wrapped/generated/wrappedlibncursesw6types.h +++ b/src/wrapped/generated/wrappedlibncursesw6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesw6TYPES_H_ #define __wrappedlibncursesw6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6undefs.h b/src/wrapped/generated/wrappedlibncursesw6undefs.h index 2207fbb6..c713aba2 100644 --- a/src/wrapped/generated/wrappedlibncursesw6undefs.h +++ b/src/wrapped/generated/wrappedlibncursesw6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncursesw6UNDEFS_H_ #define __wrappedlibncursesw6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswdefs.h b/src/wrapped/generated/wrappedlibncurseswdefs.h index 59c3a163..3079d0ef 100644 --- a/src/wrapped/generated/wrappedlibncurseswdefs.h +++ b/src/wrapped/generated/wrappedlibncurseswdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurseswDEFS_H_ #define __wrappedlibncurseswDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswtypes.h b/src/wrapped/generated/wrappedlibncurseswtypes.h index 77ea4371..4196ffe9 100644 --- a/src/wrapped/generated/wrappedlibncurseswtypes.h +++ b/src/wrapped/generated/wrappedlibncurseswtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurseswTYPES_H_ #define __wrappedlibncurseswTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswundefs.h b/src/wrapped/generated/wrappedlibncurseswundefs.h index 5dc4f358..c2077716 100644 --- a/src/wrapped/generated/wrappedlibncurseswundefs.h +++ b/src/wrapped/generated/wrappedlibncurseswundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibncurseswUNDEFS_H_ #define __wrappedlibncurseswUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8defs.h b/src/wrapped/generated/wrappedlibnettle8defs.h index 4b2b0004..1761717e 100644 --- a/src/wrapped/generated/wrappedlibnettle8defs.h +++ b/src/wrapped/generated/wrappedlibnettle8defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnettle8DEFS_H_ #define __wrappedlibnettle8DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8types.h b/src/wrapped/generated/wrappedlibnettle8types.h index d99fbea8..8de87b63 100644 --- a/src/wrapped/generated/wrappedlibnettle8types.h +++ b/src/wrapped/generated/wrappedlibnettle8types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnettle8TYPES_H_ #define __wrappedlibnettle8TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8undefs.h b/src/wrapped/generated/wrappedlibnettle8undefs.h index 6f345ec3..2090dea4 100644 --- a/src/wrapped/generated/wrappedlibnettle8undefs.h +++ b/src/wrapped/generated/wrappedlibnettle8undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnettle8UNDEFS_H_ #define __wrappedlibnettle8UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnumadefs.h b/src/wrapped/generated/wrappedlibnumadefs.h index dbbf945f..11e096c7 100644 --- a/src/wrapped/generated/wrappedlibnumadefs.h +++ b/src/wrapped/generated/wrappedlibnumadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnumaDEFS_H_ #define __wrappedlibnumaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnumatypes.h b/src/wrapped/generated/wrappedlibnumatypes.h index 722c2aaf..09ccac34 100644 --- a/src/wrapped/generated/wrappedlibnumatypes.h +++ b/src/wrapped/generated/wrappedlibnumatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnumaTYPES_H_ #define __wrappedlibnumaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibnumaundefs.h b/src/wrapped/generated/wrappedlibnumaundefs.h index 37f78933..8b58689b 100644 --- a/src/wrapped/generated/wrappedlibnumaundefs.h +++ b/src/wrapped/generated/wrappedlibnumaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibnumaUNDEFS_H_ #define __wrappedlibnumaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedliboggdefs.h b/src/wrapped/generated/wrappedliboggdefs.h index f890dfbf..6ff95835 100644 --- a/src/wrapped/generated/wrappedliboggdefs.h +++ b/src/wrapped/generated/wrappedliboggdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedliboggDEFS_H_ #define __wrappedliboggDEFS_H_ diff --git a/src/wrapped/generated/wrappedliboggtypes.h b/src/wrapped/generated/wrappedliboggtypes.h index 6ed06122..eb90f715 100644 --- a/src/wrapped/generated/wrappedliboggtypes.h +++ b/src/wrapped/generated/wrappedliboggtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedliboggTYPES_H_ #define __wrappedliboggTYPES_H_ diff --git a/src/wrapped/generated/wrappedliboggundefs.h b/src/wrapped/generated/wrappedliboggundefs.h index d62105c2..b9a38bd2 100644 --- a/src/wrapped/generated/wrappedliboggundefs.h +++ b/src/wrapped/generated/wrappedliboggundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedliboggUNDEFS_H_ #define __wrappedliboggUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpaneldefs.h b/src/wrapped/generated/wrappedlibpaneldefs.h index 05a0b2fa..b8607236 100644 --- a/src/wrapped/generated/wrappedlibpaneldefs.h +++ b/src/wrapped/generated/wrappedlibpaneldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpanelDEFS_H_ #define __wrappedlibpanelDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpaneltypes.h b/src/wrapped/generated/wrappedlibpaneltypes.h index 6f55da2c..18418543 100644 --- a/src/wrapped/generated/wrappedlibpaneltypes.h +++ b/src/wrapped/generated/wrappedlibpaneltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpanelTYPES_H_ #define __wrappedlibpanelTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpanelundefs.h b/src/wrapped/generated/wrappedlibpanelundefs.h index 7725e7b2..9f1f1a96 100644 --- a/src/wrapped/generated/wrappedlibpanelundefs.h +++ b/src/wrapped/generated/wrappedlibpanelundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpanelUNDEFS_H_ #define __wrappedlibpanelUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcidefs.h b/src/wrapped/generated/wrappedlibpcidefs.h index cb277a05..8f9209f7 100644 --- a/src/wrapped/generated/wrappedlibpcidefs.h +++ b/src/wrapped/generated/wrappedlibpcidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpciDEFS_H_ #define __wrappedlibpciDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcitypes.h b/src/wrapped/generated/wrappedlibpcitypes.h index 5c78181f..5e885d69 100644 --- a/src/wrapped/generated/wrappedlibpcitypes.h +++ b/src/wrapped/generated/wrappedlibpcitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpciTYPES_H_ #define __wrappedlibpciTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpciundefs.h b/src/wrapped/generated/wrappedlibpciundefs.h index 88b3e89b..051e9d91 100644 --- a/src/wrapped/generated/wrappedlibpciundefs.h +++ b/src/wrapped/generated/wrappedlibpciundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpciUNDEFS_H_ #define __wrappedlibpciUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcredefs.h b/src/wrapped/generated/wrappedlibpcredefs.h index aebe1a8c..c841920d 100644 --- a/src/wrapped/generated/wrappedlibpcredefs.h +++ b/src/wrapped/generated/wrappedlibpcredefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpcreDEFS_H_ #define __wrappedlibpcreDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcretypes.h b/src/wrapped/generated/wrappedlibpcretypes.h index 379b86f4..2a45f0e3 100644 --- a/src/wrapped/generated/wrappedlibpcretypes.h +++ b/src/wrapped/generated/wrappedlibpcretypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpcreTYPES_H_ #define __wrappedlibpcreTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpcreundefs.h b/src/wrapped/generated/wrappedlibpcreundefs.h index d25656d8..80e51c84 100644 --- a/src/wrapped/generated/wrappedlibpcreundefs.h +++ b/src/wrapped/generated/wrappedlibpcreundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpcreUNDEFS_H_ #define __wrappedlibpcreUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpthreaddefs.h b/src/wrapped/generated/wrappedlibpthreaddefs.h index c45f1077..2c8ba679 100644 --- a/src/wrapped/generated/wrappedlibpthreaddefs.h +++ b/src/wrapped/generated/wrappedlibpthreaddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpthreadDEFS_H_ #define __wrappedlibpthreadDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpthreadtypes.h b/src/wrapped/generated/wrappedlibpthreadtypes.h index c9e5b106..20fd7c84 100644 --- a/src/wrapped/generated/wrappedlibpthreadtypes.h +++ b/src/wrapped/generated/wrappedlibpthreadtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpthreadTYPES_H_ #define __wrappedlibpthreadTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpthreadundefs.h b/src/wrapped/generated/wrappedlibpthreadundefs.h index a54b5c82..89aef8c5 100644 --- a/src/wrapped/generated/wrappedlibpthreadundefs.h +++ b/src/wrapped/generated/wrappedlibpthreadundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibpthreadUNDEFS_H_ #define __wrappedlibpthreadUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibresolvdefs.h b/src/wrapped/generated/wrappedlibresolvdefs.h index 5ccf7db3..2d287b20 100644 --- a/src/wrapped/generated/wrappedlibresolvdefs.h +++ b/src/wrapped/generated/wrappedlibresolvdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibresolvDEFS_H_ #define __wrappedlibresolvDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibresolvtypes.h b/src/wrapped/generated/wrappedlibresolvtypes.h index 74f7c256..1a9ff8f9 100644 --- a/src/wrapped/generated/wrappedlibresolvtypes.h +++ b/src/wrapped/generated/wrappedlibresolvtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibresolvTYPES_H_ #define __wrappedlibresolvTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibresolvundefs.h b/src/wrapped/generated/wrappedlibresolvundefs.h index 964f3585..ab392dc5 100644 --- a/src/wrapped/generated/wrappedlibresolvundefs.h +++ b/src/wrapped/generated/wrappedlibresolvundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibresolvUNDEFS_H_ #define __wrappedlibresolvUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibrtdefs.h b/src/wrapped/generated/wrappedlibrtdefs.h index 959c4e2f..63819970 100644 --- a/src/wrapped/generated/wrappedlibrtdefs.h +++ b/src/wrapped/generated/wrappedlibrtdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibrtDEFS_H_ #define __wrappedlibrtDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibrttypes.h b/src/wrapped/generated/wrappedlibrttypes.h index bf1b3fd4..b315ae7b 100644 --- a/src/wrapped/generated/wrappedlibrttypes.h +++ b/src/wrapped/generated/wrappedlibrttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibrtTYPES_H_ #define __wrappedlibrtTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibrtundefs.h b/src/wrapped/generated/wrappedlibrtundefs.h index 86a1a4e9..0cdbea1d 100644 --- a/src/wrapped/generated/wrappedlibrtundefs.h +++ b/src/wrapped/generated/wrappedlibrtundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibrtUNDEFS_H_ #define __wrappedlibrtUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsmdefs.h b/src/wrapped/generated/wrappedlibsmdefs.h index 6260b394..70491367 100644 --- a/src/wrapped/generated/wrappedlibsmdefs.h +++ b/src/wrapped/generated/wrappedlibsmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsmDEFS_H_ #define __wrappedlibsmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsmtypes.h b/src/wrapped/generated/wrappedlibsmtypes.h index 0eef2429..18677b2f 100644 --- a/src/wrapped/generated/wrappedlibsmtypes.h +++ b/src/wrapped/generated/wrappedlibsmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsmTYPES_H_ #define __wrappedlibsmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsmundefs.h b/src/wrapped/generated/wrappedlibsmundefs.h index 174f1ec5..d3a8047e 100644 --- a/src/wrapped/generated/wrappedlibsmundefs.h +++ b/src/wrapped/generated/wrappedlibsmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsmUNDEFS_H_ #define __wrappedlibsmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsndfiledefs.h b/src/wrapped/generated/wrappedlibsndfiledefs.h index 32e25ee0..e6b3e9a2 100644 --- a/src/wrapped/generated/wrappedlibsndfiledefs.h +++ b/src/wrapped/generated/wrappedlibsndfiledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsndfileDEFS_H_ #define __wrappedlibsndfileDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsndfiletypes.h b/src/wrapped/generated/wrappedlibsndfiletypes.h index 5d45b788..4f2a037a 100644 --- a/src/wrapped/generated/wrappedlibsndfiletypes.h +++ b/src/wrapped/generated/wrappedlibsndfiletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsndfileTYPES_H_ #define __wrappedlibsndfileTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsndfileundefs.h b/src/wrapped/generated/wrappedlibsndfileundefs.h index 887c9b28..07a2aa1b 100644 --- a/src/wrapped/generated/wrappedlibsndfileundefs.h +++ b/src/wrapped/generated/wrappedlibsndfileundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsndfileUNDEFS_H_ #define __wrappedlibsndfileUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3defs.h b/src/wrapped/generated/wrappedlibsqlite3defs.h index 95e690c6..ce9dec0f 100644 --- a/src/wrapped/generated/wrappedlibsqlite3defs.h +++ b/src/wrapped/generated/wrappedlibsqlite3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsqlite3DEFS_H_ #define __wrappedlibsqlite3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3types.h b/src/wrapped/generated/wrappedlibsqlite3types.h index b36662f6..dc02594c 100644 --- a/src/wrapped/generated/wrappedlibsqlite3types.h +++ b/src/wrapped/generated/wrappedlibsqlite3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsqlite3TYPES_H_ #define __wrappedlibsqlite3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3undefs.h b/src/wrapped/generated/wrappedlibsqlite3undefs.h index 39570fed..da9a4c4b 100644 --- a/src/wrapped/generated/wrappedlibsqlite3undefs.h +++ b/src/wrapped/generated/wrappedlibsqlite3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsqlite3UNDEFS_H_ #define __wrappedlibsqlite3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssh2defs.h b/src/wrapped/generated/wrappedlibssh2defs.h index 96ef86f3..5493ed6f 100644 --- a/src/wrapped/generated/wrappedlibssh2defs.h +++ b/src/wrapped/generated/wrappedlibssh2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssh2DEFS_H_ #define __wrappedlibssh2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssh2types.h b/src/wrapped/generated/wrappedlibssh2types.h index 3363c6c8..f010c657 100644 --- a/src/wrapped/generated/wrappedlibssh2types.h +++ b/src/wrapped/generated/wrappedlibssh2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssh2TYPES_H_ #define __wrappedlibssh2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibssh2undefs.h b/src/wrapped/generated/wrappedlibssh2undefs.h index 8c110957..07b7e7f8 100644 --- a/src/wrapped/generated/wrappedlibssh2undefs.h +++ b/src/wrapped/generated/wrappedlibssh2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssh2UNDEFS_H_ #define __wrappedlibssh2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssl3defs.h b/src/wrapped/generated/wrappedlibssl3defs.h index 0f2f7478..579d0dd2 100644 --- a/src/wrapped/generated/wrappedlibssl3defs.h +++ b/src/wrapped/generated/wrappedlibssl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssl3DEFS_H_ #define __wrappedlibssl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssl3types.h b/src/wrapped/generated/wrappedlibssl3types.h index ec735057..f96a7938 100644 --- a/src/wrapped/generated/wrappedlibssl3types.h +++ b/src/wrapped/generated/wrappedlibssl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssl3TYPES_H_ #define __wrappedlibssl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibssl3undefs.h b/src/wrapped/generated/wrappedlibssl3undefs.h index 5c86c5e0..d8127914 100644 --- a/src/wrapped/generated/wrappedlibssl3undefs.h +++ b/src/wrapped/generated/wrappedlibssl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibssl3UNDEFS_H_ #define __wrappedlibssl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssldefs.h b/src/wrapped/generated/wrappedlibssldefs.h index 55eceb38..8128a2d5 100644 --- a/src/wrapped/generated/wrappedlibssldefs.h +++ b/src/wrapped/generated/wrappedlibssldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsslDEFS_H_ #define __wrappedlibsslDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssltypes.h b/src/wrapped/generated/wrappedlibssltypes.h index d6d337f9..9a2e8e5b 100644 --- a/src/wrapped/generated/wrappedlibssltypes.h +++ b/src/wrapped/generated/wrappedlibssltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsslTYPES_H_ #define __wrappedlibsslTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsslundefs.h b/src/wrapped/generated/wrappedlibsslundefs.h index 12278260..a69a3b7e 100644 --- a/src/wrapped/generated/wrappedlibsslundefs.h +++ b/src/wrapped/generated/wrappedlibsslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibsslUNDEFS_H_ #define __wrappedlibsslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1defs.h b/src/wrapped/generated/wrappedlibtasn1defs.h index 6a4d7bdc..3d9e8f85 100644 --- a/src/wrapped/generated/wrappedlibtasn1defs.h +++ b/src/wrapped/generated/wrappedlibtasn1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtasn1DEFS_H_ #define __wrappedlibtasn1DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1types.h b/src/wrapped/generated/wrappedlibtasn1types.h index 02a76bb5..19cd97a5 100644 --- a/src/wrapped/generated/wrappedlibtasn1types.h +++ b/src/wrapped/generated/wrappedlibtasn1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtasn1TYPES_H_ #define __wrappedlibtasn1TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1undefs.h b/src/wrapped/generated/wrappedlibtasn1undefs.h index 0e9c1681..9db62a15 100644 --- a/src/wrapped/generated/wrappedlibtasn1undefs.h +++ b/src/wrapped/generated/wrappedlibtasn1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtasn1UNDEFS_H_ #define __wrappedlibtasn1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5defs.h b/src/wrapped/generated/wrappedlibtiff5defs.h index 6e9af05d..6dbbdc55 100644 --- a/src/wrapped/generated/wrappedlibtiff5defs.h +++ b/src/wrapped/generated/wrappedlibtiff5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtiff5DEFS_H_ #define __wrappedlibtiff5DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5types.h b/src/wrapped/generated/wrappedlibtiff5types.h index eb9f8ad7..5c8c8f2e 100644 --- a/src/wrapped/generated/wrappedlibtiff5types.h +++ b/src/wrapped/generated/wrappedlibtiff5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtiff5TYPES_H_ #define __wrappedlibtiff5TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5undefs.h b/src/wrapped/generated/wrappedlibtiff5undefs.h index ced3df31..07a4c602 100644 --- a/src/wrapped/generated/wrappedlibtiff5undefs.h +++ b/src/wrapped/generated/wrappedlibtiff5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtiff5UNDEFS_H_ #define __wrappedlibtiff5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6defs.h b/src/wrapped/generated/wrappedlibtinfo6defs.h index 72facfae..8a4e4ef7 100644 --- a/src/wrapped/generated/wrappedlibtinfo6defs.h +++ b/src/wrapped/generated/wrappedlibtinfo6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfo6DEFS_H_ #define __wrappedlibtinfo6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6types.h b/src/wrapped/generated/wrappedlibtinfo6types.h index e195221b..9557411e 100644 --- a/src/wrapped/generated/wrappedlibtinfo6types.h +++ b/src/wrapped/generated/wrappedlibtinfo6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfo6TYPES_H_ #define __wrappedlibtinfo6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6undefs.h b/src/wrapped/generated/wrappedlibtinfo6undefs.h index cf063deb..08206aa0 100644 --- a/src/wrapped/generated/wrappedlibtinfo6undefs.h +++ b/src/wrapped/generated/wrappedlibtinfo6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfo6UNDEFS_H_ #define __wrappedlibtinfo6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfodefs.h b/src/wrapped/generated/wrappedlibtinfodefs.h index a04196f3..272a35f6 100644 --- a/src/wrapped/generated/wrappedlibtinfodefs.h +++ b/src/wrapped/generated/wrappedlibtinfodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfoDEFS_H_ #define __wrappedlibtinfoDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfotypes.h b/src/wrapped/generated/wrappedlibtinfotypes.h index e2762449..b82cfe84 100644 --- a/src/wrapped/generated/wrappedlibtinfotypes.h +++ b/src/wrapped/generated/wrappedlibtinfotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfoTYPES_H_ #define __wrappedlibtinfoTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtinfoundefs.h b/src/wrapped/generated/wrappedlibtinfoundefs.h index 03215958..4fd4058d 100644 --- a/src/wrapped/generated/wrappedlibtinfoundefs.h +++ b/src/wrapped/generated/wrappedlibtinfoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibtinfoUNDEFS_H_ #define __wrappedlibtinfoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2defs.h b/src/wrapped/generated/wrappedlibunistring2defs.h index 52044144..507321fb 100644 --- a/src/wrapped/generated/wrappedlibunistring2defs.h +++ b/src/wrapped/generated/wrappedlibunistring2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibunistring2DEFS_H_ #define __wrappedlibunistring2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2types.h b/src/wrapped/generated/wrappedlibunistring2types.h index 25a30d9e..c09c42e0 100644 --- a/src/wrapped/generated/wrappedlibunistring2types.h +++ b/src/wrapped/generated/wrappedlibunistring2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibunistring2TYPES_H_ #define __wrappedlibunistring2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2undefs.h b/src/wrapped/generated/wrappedlibunistring2undefs.h index 88de83f1..3556a6b3 100644 --- a/src/wrapped/generated/wrappedlibunistring2undefs.h +++ b/src/wrapped/generated/wrappedlibunistring2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibunistring2UNDEFS_H_ #define __wrappedlibunistring2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibusb1defs.h b/src/wrapped/generated/wrappedlibusb1defs.h index 9da71f8a..c3b82844 100644 --- a/src/wrapped/generated/wrappedlibusb1defs.h +++ b/src/wrapped/generated/wrappedlibusb1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibusb1DEFS_H_ #define __wrappedlibusb1DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibusb1types.h b/src/wrapped/generated/wrappedlibusb1types.h index 9155c25b..13227c92 100644 --- a/src/wrapped/generated/wrappedlibusb1types.h +++ b/src/wrapped/generated/wrappedlibusb1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibusb1TYPES_H_ #define __wrappedlibusb1TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibusb1undefs.h b/src/wrapped/generated/wrappedlibusb1undefs.h index 99ee492f..cf08b0e4 100644 --- a/src/wrapped/generated/wrappedlibusb1undefs.h +++ b/src/wrapped/generated/wrappedlibusb1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibusb1UNDEFS_H_ #define __wrappedlibusb1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibuuiddefs.h b/src/wrapped/generated/wrappedlibuuiddefs.h index c20d4b63..75dfed42 100644 --- a/src/wrapped/generated/wrappedlibuuiddefs.h +++ b/src/wrapped/generated/wrappedlibuuiddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibuuidDEFS_H_ #define __wrappedlibuuidDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibuuidtypes.h b/src/wrapped/generated/wrappedlibuuidtypes.h index a39b43d1..e2a35479 100644 --- a/src/wrapped/generated/wrappedlibuuidtypes.h +++ b/src/wrapped/generated/wrappedlibuuidtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibuuidTYPES_H_ #define __wrappedlibuuidTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibuuidundefs.h b/src/wrapped/generated/wrappedlibuuidundefs.h index e7059700..be82d005 100644 --- a/src/wrapped/generated/wrappedlibuuidundefs.h +++ b/src/wrapped/generated/wrappedlibuuidundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibuuidUNDEFS_H_ #define __wrappedlibuuidUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadefs.h b/src/wrapped/generated/wrappedlibvadefs.h index 40decd84..c6fa8efe 100644 --- a/src/wrapped/generated/wrappedlibvadefs.h +++ b/src/wrapped/generated/wrappedlibvadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvaDEFS_H_ #define __wrappedlibvaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmdefs.h b/src/wrapped/generated/wrappedlibvadrmdefs.h index 359d7063..ee2b76f5 100644 --- a/src/wrapped/generated/wrappedlibvadrmdefs.h +++ b/src/wrapped/generated/wrappedlibvadrmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvadrmDEFS_H_ #define __wrappedlibvadrmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmtypes.h b/src/wrapped/generated/wrappedlibvadrmtypes.h index b1d9979b..d82ee78e 100644 --- a/src/wrapped/generated/wrappedlibvadrmtypes.h +++ b/src/wrapped/generated/wrappedlibvadrmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvadrmTYPES_H_ #define __wrappedlibvadrmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmundefs.h b/src/wrapped/generated/wrappedlibvadrmundefs.h index a729302d..e01deef0 100644 --- a/src/wrapped/generated/wrappedlibvadrmundefs.h +++ b/src/wrapped/generated/wrappedlibvadrmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvadrmUNDEFS_H_ #define __wrappedlibvadrmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvatypes.h b/src/wrapped/generated/wrappedlibvatypes.h index 3eac0367..fb7add4b 100644 --- a/src/wrapped/generated/wrappedlibvatypes.h +++ b/src/wrapped/generated/wrappedlibvatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvaTYPES_H_ #define __wrappedlibvaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvaundefs.h b/src/wrapped/generated/wrappedlibvaundefs.h index ed6dde19..78cfc81f 100644 --- a/src/wrapped/generated/wrappedlibvaundefs.h +++ b/src/wrapped/generated/wrappedlibvaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvaUNDEFS_H_ #define __wrappedlibvaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylanddefs.h b/src/wrapped/generated/wrappedlibvawaylanddefs.h index 02a7e4b1..edf641ec 100644 --- a/src/wrapped/generated/wrappedlibvawaylanddefs.h +++ b/src/wrapped/generated/wrappedlibvawaylanddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvawaylandDEFS_H_ #define __wrappedlibvawaylandDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylandtypes.h b/src/wrapped/generated/wrappedlibvawaylandtypes.h index 96e1861e..63d74476 100644 --- a/src/wrapped/generated/wrappedlibvawaylandtypes.h +++ b/src/wrapped/generated/wrappedlibvawaylandtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvawaylandTYPES_H_ #define __wrappedlibvawaylandTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylandundefs.h b/src/wrapped/generated/wrappedlibvawaylandundefs.h index 62a23ae0..22f2d266 100644 --- a/src/wrapped/generated/wrappedlibvawaylandundefs.h +++ b/src/wrapped/generated/wrappedlibvawaylandundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvawaylandUNDEFS_H_ #define __wrappedlibvawaylandUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvax11defs.h b/src/wrapped/generated/wrappedlibvax11defs.h index afa9f011..02ad44b8 100644 --- a/src/wrapped/generated/wrappedlibvax11defs.h +++ b/src/wrapped/generated/wrappedlibvax11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvax11DEFS_H_ #define __wrappedlibvax11DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvax11types.h b/src/wrapped/generated/wrappedlibvax11types.h index 118aad9b..416a2a12 100644 --- a/src/wrapped/generated/wrappedlibvax11types.h +++ b/src/wrapped/generated/wrappedlibvax11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvax11TYPES_H_ #define __wrappedlibvax11TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvax11undefs.h b/src/wrapped/generated/wrappedlibvax11undefs.h index 265614f6..fc2e19d1 100644 --- a/src/wrapped/generated/wrappedlibvax11undefs.h +++ b/src/wrapped/generated/wrappedlibvax11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvax11UNDEFS_H_ #define __wrappedlibvax11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvdpaudefs.h b/src/wrapped/generated/wrappedlibvdpaudefs.h index 5a073777..c4734b45 100644 --- a/src/wrapped/generated/wrappedlibvdpaudefs.h +++ b/src/wrapped/generated/wrappedlibvdpaudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvdpauDEFS_H_ #define __wrappedlibvdpauDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvdpautypes.h b/src/wrapped/generated/wrappedlibvdpautypes.h index 8c041023..a99a425e 100644 --- a/src/wrapped/generated/wrappedlibvdpautypes.h +++ b/src/wrapped/generated/wrappedlibvdpautypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvdpauTYPES_H_ #define __wrappedlibvdpauTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvdpauundefs.h b/src/wrapped/generated/wrappedlibvdpauundefs.h index 3f7baa67..96eb0b76 100644 --- a/src/wrapped/generated/wrappedlibvdpauundefs.h +++ b/src/wrapped/generated/wrappedlibvdpauundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvdpauUNDEFS_H_ #define __wrappedlibvdpauUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvorbisdefs.h b/src/wrapped/generated/wrappedlibvorbisdefs.h index 73d6d3fe..4bbd1d03 100644 --- a/src/wrapped/generated/wrappedlibvorbisdefs.h +++ b/src/wrapped/generated/wrappedlibvorbisdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvorbisDEFS_H_ #define __wrappedlibvorbisDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvorbistypes.h b/src/wrapped/generated/wrappedlibvorbistypes.h index b90ae75c..a0bb9184 100644 --- a/src/wrapped/generated/wrappedlibvorbistypes.h +++ b/src/wrapped/generated/wrappedlibvorbistypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvorbisTYPES_H_ #define __wrappedlibvorbisTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvorbisundefs.h b/src/wrapped/generated/wrappedlibvorbisundefs.h index 75f1028b..5a2efb39 100644 --- a/src/wrapped/generated/wrappedlibvorbisundefs.h +++ b/src/wrapped/generated/wrappedlibvorbisundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibvorbisUNDEFS_H_ #define __wrappedlibvorbisUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11defs.h b/src/wrapped/generated/wrappedlibx11defs.h index 9c6afd1f..ac3be5ab 100644 --- a/src/wrapped/generated/wrappedlibx11defs.h +++ b/src/wrapped/generated/wrappedlibx11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11DEFS_H_ #define __wrappedlibx11DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11types.h b/src/wrapped/generated/wrappedlibx11types.h index f712ce53..df0cc168 100644 --- a/src/wrapped/generated/wrappedlibx11types.h +++ b/src/wrapped/generated/wrappedlibx11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11TYPES_H_ #define __wrappedlibx11TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibx11undefs.h b/src/wrapped/generated/wrappedlibx11undefs.h index 4fe5929e..0ed9550a 100644 --- a/src/wrapped/generated/wrappedlibx11undefs.h +++ b/src/wrapped/generated/wrappedlibx11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11UNDEFS_H_ #define __wrappedlibx11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbdefs.h b/src/wrapped/generated/wrappedlibx11xcbdefs.h index ffa5c2d9..4e890617 100644 --- a/src/wrapped/generated/wrappedlibx11xcbdefs.h +++ b/src/wrapped/generated/wrappedlibx11xcbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11xcbDEFS_H_ #define __wrappedlibx11xcbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbtypes.h b/src/wrapped/generated/wrappedlibx11xcbtypes.h index 0e534c64..6c9eb729 100644 --- a/src/wrapped/generated/wrappedlibx11xcbtypes.h +++ b/src/wrapped/generated/wrappedlibx11xcbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11xcbTYPES_H_ #define __wrappedlibx11xcbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbundefs.h b/src/wrapped/generated/wrappedlibx11xcbundefs.h index ed02c592..2a75c256 100644 --- a/src/wrapped/generated/wrappedlibx11xcbundefs.h +++ b/src/wrapped/generated/wrappedlibx11xcbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibx11xcbUNDEFS_H_ #define __wrappedlibx11xcbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxaudefs.h b/src/wrapped/generated/wrappedlibxaudefs.h index 293e4487..a62be1b7 100644 --- a/src/wrapped/generated/wrappedlibxaudefs.h +++ b/src/wrapped/generated/wrappedlibxaudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxauDEFS_H_ #define __wrappedlibxauDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxautypes.h b/src/wrapped/generated/wrappedlibxautypes.h index a19e2da6..884e6abe 100644 --- a/src/wrapped/generated/wrappedlibxautypes.h +++ b/src/wrapped/generated/wrappedlibxautypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxauTYPES_H_ #define __wrappedlibxauTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxauundefs.h b/src/wrapped/generated/wrappedlibxauundefs.h index 27c78c60..76daaf80 100644 --- a/src/wrapped/generated/wrappedlibxauundefs.h +++ b/src/wrapped/generated/wrappedlibxauundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxauUNDEFS_H_ #define __wrappedlibxauUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursordefs.h b/src/wrapped/generated/wrappedlibxcbcursordefs.h index 7db154a5..421900cb 100644 --- a/src/wrapped/generated/wrappedlibxcbcursordefs.h +++ b/src/wrapped/generated/wrappedlibxcbcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbcursorDEFS_H_ #define __wrappedlibxcbcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursortypes.h b/src/wrapped/generated/wrappedlibxcbcursortypes.h index e2dfeddb..d31c26cd 100644 --- a/src/wrapped/generated/wrappedlibxcbcursortypes.h +++ b/src/wrapped/generated/wrappedlibxcbcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbcursorTYPES_H_ #define __wrappedlibxcbcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursorundefs.h b/src/wrapped/generated/wrappedlibxcbcursorundefs.h index d85e57f9..5fdd7f70 100644 --- a/src/wrapped/generated/wrappedlibxcbcursorundefs.h +++ b/src/wrapped/generated/wrappedlibxcbcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbcursorUNDEFS_H_ #define __wrappedlibxcbcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdefs.h b/src/wrapped/generated/wrappedlibxcbdefs.h index 62930d68..839b67cd 100644 --- a/src/wrapped/generated/wrappedlibxcbdefs.h +++ b/src/wrapped/generated/wrappedlibxcbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbDEFS_H_ #define __wrappedlibxcbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2defs.h b/src/wrapped/generated/wrappedlibxcbdri2defs.h index a0914c45..b834ca43 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2defs.h +++ b/src/wrapped/generated/wrappedlibxcbdri2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri2DEFS_H_ #define __wrappedlibxcbdri2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2types.h b/src/wrapped/generated/wrappedlibxcbdri2types.h index e483d455..128354df 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2types.h +++ b/src/wrapped/generated/wrappedlibxcbdri2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri2TYPES_H_ #define __wrappedlibxcbdri2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2undefs.h b/src/wrapped/generated/wrappedlibxcbdri2undefs.h index 39e96e07..6577e033 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2undefs.h +++ b/src/wrapped/generated/wrappedlibxcbdri2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri2UNDEFS_H_ #define __wrappedlibxcbdri2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3defs.h b/src/wrapped/generated/wrappedlibxcbdri3defs.h index 2a1d6aa6..f2e3b3eb 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3defs.h +++ b/src/wrapped/generated/wrappedlibxcbdri3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri3DEFS_H_ #define __wrappedlibxcbdri3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3types.h b/src/wrapped/generated/wrappedlibxcbdri3types.h index c3928807..bb9fe157 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3types.h +++ b/src/wrapped/generated/wrappedlibxcbdri3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri3TYPES_H_ #define __wrappedlibxcbdri3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3undefs.h b/src/wrapped/generated/wrappedlibxcbdri3undefs.h index f28e6dbb..14d1a480 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3undefs.h +++ b/src/wrapped/generated/wrappedlibxcbdri3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbdri3UNDEFS_H_ #define __wrappedlibxcbdri3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxdefs.h b/src/wrapped/generated/wrappedlibxcbglxdefs.h index 892bafeb..b0337153 100644 --- a/src/wrapped/generated/wrappedlibxcbglxdefs.h +++ b/src/wrapped/generated/wrappedlibxcbglxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbglxDEFS_H_ #define __wrappedlibxcbglxDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxtypes.h b/src/wrapped/generated/wrappedlibxcbglxtypes.h index fba2309c..ff4884fe 100644 --- a/src/wrapped/generated/wrappedlibxcbglxtypes.h +++ b/src/wrapped/generated/wrappedlibxcbglxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbglxTYPES_H_ #define __wrappedlibxcbglxTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxundefs.h b/src/wrapped/generated/wrappedlibxcbglxundefs.h index 03aa022e..639cf6be 100644 --- a/src/wrapped/generated/wrappedlibxcbglxundefs.h +++ b/src/wrapped/generated/wrappedlibxcbglxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbglxUNDEFS_H_ #define __wrappedlibxcbglxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmdefs.h b/src/wrapped/generated/wrappedlibxcbicccmdefs.h index 553bf71c..0b7816f5 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmdefs.h +++ b/src/wrapped/generated/wrappedlibxcbicccmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbicccmDEFS_H_ #define __wrappedlibxcbicccmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmtypes.h b/src/wrapped/generated/wrappedlibxcbicccmtypes.h index baeff95c..04d024ea 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmtypes.h +++ b/src/wrapped/generated/wrappedlibxcbicccmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbicccmTYPES_H_ #define __wrappedlibxcbicccmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmundefs.h b/src/wrapped/generated/wrappedlibxcbicccmundefs.h index 85117de9..18d7a156 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmundefs.h +++ b/src/wrapped/generated/wrappedlibxcbicccmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbicccmUNDEFS_H_ #define __wrappedlibxcbicccmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimagedefs.h b/src/wrapped/generated/wrappedlibxcbimagedefs.h index 851c2f02..13bd75c5 100644 --- a/src/wrapped/generated/wrappedlibxcbimagedefs.h +++ b/src/wrapped/generated/wrappedlibxcbimagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbimageDEFS_H_ #define __wrappedlibxcbimageDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimagetypes.h b/src/wrapped/generated/wrappedlibxcbimagetypes.h index cde1840e..72664ecd 100644 --- a/src/wrapped/generated/wrappedlibxcbimagetypes.h +++ b/src/wrapped/generated/wrappedlibxcbimagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbimageTYPES_H_ #define __wrappedlibxcbimageTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimageundefs.h b/src/wrapped/generated/wrappedlibxcbimageundefs.h index bbcba65f..9efd0f0d 100644 --- a/src/wrapped/generated/wrappedlibxcbimageundefs.h +++ b/src/wrapped/generated/wrappedlibxcbimageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbimageUNDEFS_H_ #define __wrappedlibxcbimageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h b/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h index dacaad5a..62616851 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsDEFS_H_ #define __wrappedlibxcbkeysymsDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymstypes.h b/src/wrapped/generated/wrappedlibxcbkeysymstypes.h index e2772cc2..58ede945 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymstypes.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsTYPES_H_ #define __wrappedlibxcbkeysymsTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h b/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h index 28e2aba8..0f3f41dd 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsUNDEFS_H_ #define __wrappedlibxcbkeysymsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresentdefs.h b/src/wrapped/generated/wrappedlibxcbpresentdefs.h index bc8a3af8..3940e9aa 100644 --- a/src/wrapped/generated/wrappedlibxcbpresentdefs.h +++ b/src/wrapped/generated/wrappedlibxcbpresentdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbpresentDEFS_H_ #define __wrappedlibxcbpresentDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresenttypes.h b/src/wrapped/generated/wrappedlibxcbpresenttypes.h index 23250753..7cba6b43 100644 --- a/src/wrapped/generated/wrappedlibxcbpresenttypes.h +++ b/src/wrapped/generated/wrappedlibxcbpresenttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbpresentTYPES_H_ #define __wrappedlibxcbpresentTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresentundefs.h b/src/wrapped/generated/wrappedlibxcbpresentundefs.h index 0443c7a8..4f004da4 100644 --- a/src/wrapped/generated/wrappedlibxcbpresentundefs.h +++ b/src/wrapped/generated/wrappedlibxcbpresentundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbpresentUNDEFS_H_ #define __wrappedlibxcbpresentUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrdefs.h b/src/wrapped/generated/wrappedlibxcbrandrdefs.h index 9b44fc06..68059940 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrdefs.h +++ b/src/wrapped/generated/wrappedlibxcbrandrdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrandrDEFS_H_ #define __wrappedlibxcbrandrDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrtypes.h b/src/wrapped/generated/wrappedlibxcbrandrtypes.h index dad5eee1..4a3a5288 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrtypes.h +++ b/src/wrapped/generated/wrappedlibxcbrandrtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrandrTYPES_H_ #define __wrappedlibxcbrandrTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrundefs.h b/src/wrapped/generated/wrappedlibxcbrandrundefs.h index 5c329360..5e43aef2 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrandrundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrandrUNDEFS_H_ #define __wrappedlibxcbrandrUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderdefs.h b/src/wrapped/generated/wrappedlibxcbrenderdefs.h index da0f8736..0944592c 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderdefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderDEFS_H_ #define __wrappedlibxcbrenderDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrendertypes.h b/src/wrapped/generated/wrappedlibxcbrendertypes.h index 750fd616..275f7d5e 100644 --- a/src/wrapped/generated/wrappedlibxcbrendertypes.h +++ b/src/wrapped/generated/wrappedlibxcbrendertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderTYPES_H_ #define __wrappedlibxcbrenderTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderundefs.h b/src/wrapped/generated/wrappedlibxcbrenderundefs.h index 2a14ad1b..2e51c59b 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderUNDEFS_H_ #define __wrappedlibxcbrenderUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutildefs.h b/src/wrapped/generated/wrappedlibxcbrenderutildefs.h index 5270f1f7..d4708a91 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutildefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilDEFS_H_ #define __wrappedlibxcbrenderutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h b/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h index 2ce0dd81..7c112ef1 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilTYPES_H_ #define __wrappedlibxcbrenderutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h b/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h index 3b556168..b8265adc 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilUNDEFS_H_ #define __wrappedlibxcbrenderutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapedefs.h b/src/wrapped/generated/wrappedlibxcbshapedefs.h index 23f5ccb6..bd0a7339 100644 --- a/src/wrapped/generated/wrappedlibxcbshapedefs.h +++ b/src/wrapped/generated/wrappedlibxcbshapedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshapeDEFS_H_ #define __wrappedlibxcbshapeDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapetypes.h b/src/wrapped/generated/wrappedlibxcbshapetypes.h index c794e0be..d5115139 100644 --- a/src/wrapped/generated/wrappedlibxcbshapetypes.h +++ b/src/wrapped/generated/wrappedlibxcbshapetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshapeTYPES_H_ #define __wrappedlibxcbshapeTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapeundefs.h b/src/wrapped/generated/wrappedlibxcbshapeundefs.h index 1ec642f0..e60eafe2 100644 --- a/src/wrapped/generated/wrappedlibxcbshapeundefs.h +++ b/src/wrapped/generated/wrappedlibxcbshapeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshapeUNDEFS_H_ #define __wrappedlibxcbshapeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmdefs.h b/src/wrapped/generated/wrappedlibxcbshmdefs.h index 584c4710..89cf28e0 100644 --- a/src/wrapped/generated/wrappedlibxcbshmdefs.h +++ b/src/wrapped/generated/wrappedlibxcbshmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshmDEFS_H_ #define __wrappedlibxcbshmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmtypes.h b/src/wrapped/generated/wrappedlibxcbshmtypes.h index 82a85b4a..12e67ffe 100644 --- a/src/wrapped/generated/wrappedlibxcbshmtypes.h +++ b/src/wrapped/generated/wrappedlibxcbshmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshmTYPES_H_ #define __wrappedlibxcbshmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmundefs.h b/src/wrapped/generated/wrappedlibxcbshmundefs.h index eccdb49e..f62fc3de 100644 --- a/src/wrapped/generated/wrappedlibxcbshmundefs.h +++ b/src/wrapped/generated/wrappedlibxcbshmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbshmUNDEFS_H_ #define __wrappedlibxcbshmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsyncdefs.h b/src/wrapped/generated/wrappedlibxcbsyncdefs.h index 91787f30..5df44751 100644 --- a/src/wrapped/generated/wrappedlibxcbsyncdefs.h +++ b/src/wrapped/generated/wrappedlibxcbsyncdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbsyncDEFS_H_ #define __wrappedlibxcbsyncDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsynctypes.h b/src/wrapped/generated/wrappedlibxcbsynctypes.h index ef4d5445..30d58c27 100644 --- a/src/wrapped/generated/wrappedlibxcbsynctypes.h +++ b/src/wrapped/generated/wrappedlibxcbsynctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbsyncTYPES_H_ #define __wrappedlibxcbsyncTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsyncundefs.h b/src/wrapped/generated/wrappedlibxcbsyncundefs.h index 14b58ac8..0be1a6cd 100644 --- a/src/wrapped/generated/wrappedlibxcbsyncundefs.h +++ b/src/wrapped/generated/wrappedlibxcbsyncundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbsyncUNDEFS_H_ #define __wrappedlibxcbsyncUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbtypes.h b/src/wrapped/generated/wrappedlibxcbtypes.h index 61e03f24..44df68c0 100644 --- a/src/wrapped/generated/wrappedlibxcbtypes.h +++ b/src/wrapped/generated/wrappedlibxcbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbTYPES_H_ #define __wrappedlibxcbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbundefs.h b/src/wrapped/generated/wrappedlibxcbundefs.h index 679ee161..73e29a50 100644 --- a/src/wrapped/generated/wrappedlibxcbundefs.h +++ b/src/wrapped/generated/wrappedlibxcbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbUNDEFS_H_ #define __wrappedlibxcbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutildefs.h b/src/wrapped/generated/wrappedlibxcbutildefs.h index 5eaeeaaa..9db8639b 100644 --- a/src/wrapped/generated/wrappedlibxcbutildefs.h +++ b/src/wrapped/generated/wrappedlibxcbutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbutilDEFS_H_ #define __wrappedlibxcbutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutiltypes.h b/src/wrapped/generated/wrappedlibxcbutiltypes.h index 5d9e6437..f0bbf43d 100644 --- a/src/wrapped/generated/wrappedlibxcbutiltypes.h +++ b/src/wrapped/generated/wrappedlibxcbutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbutilTYPES_H_ #define __wrappedlibxcbutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutilundefs.h b/src/wrapped/generated/wrappedlibxcbutilundefs.h index d1776c6e..21a8362e 100644 --- a/src/wrapped/generated/wrappedlibxcbutilundefs.h +++ b/src/wrapped/generated/wrappedlibxcbutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbutilUNDEFS_H_ #define __wrappedlibxcbutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixesdefs.h b/src/wrapped/generated/wrappedlibxcbxfixesdefs.h index 580a33eb..17d266ab 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixesdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxfixesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesDEFS_H_ #define __wrappedlibxcbxfixesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixestypes.h b/src/wrapped/generated/wrappedlibxcbxfixestypes.h index 4bcc9780..ee9d5714 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixestypes.h +++ b/src/wrapped/generated/wrappedlibxcbxfixestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesTYPES_H_ #define __wrappedlibxcbxfixesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixesundefs.h b/src/wrapped/generated/wrappedlibxcbxfixesundefs.h index 9976a687..f5422947 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixesundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxfixesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesUNDEFS_H_ #define __wrappedlibxcbxfixesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramadefs.h b/src/wrapped/generated/wrappedlibxcbxineramadefs.h index ad273109..ce8da0a0 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramadefs.h +++ b/src/wrapped/generated/wrappedlibxcbxineramadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaDEFS_H_ #define __wrappedlibxcbxineramaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramatypes.h b/src/wrapped/generated/wrappedlibxcbxineramatypes.h index 98d9667e..95b263a8 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramatypes.h +++ b/src/wrapped/generated/wrappedlibxcbxineramatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaTYPES_H_ #define __wrappedlibxcbxineramaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramaundefs.h b/src/wrapped/generated/wrappedlibxcbxineramaundefs.h index 70103e11..d4f053f2 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramaundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxineramaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaUNDEFS_H_ #define __wrappedlibxcbxineramaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputdefs.h b/src/wrapped/generated/wrappedlibxcbxinputdefs.h index 0811efbe..0cffa83b 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxinputdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxinputDEFS_H_ #define __wrappedlibxcbxinputDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputtypes.h b/src/wrapped/generated/wrappedlibxcbxinputtypes.h index 366fe68c..c4f50505 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputtypes.h +++ b/src/wrapped/generated/wrappedlibxcbxinputtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxinputTYPES_H_ #define __wrappedlibxcbxinputTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputundefs.h b/src/wrapped/generated/wrappedlibxcbxinputundefs.h index 8e638afa..9fdcc397 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxinputundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxinputUNDEFS_H_ #define __wrappedlibxcbxinputUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbdefs.h b/src/wrapped/generated/wrappedlibxcbxkbdefs.h index 21f98e20..8bfe9206 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxkbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxkbDEFS_H_ #define __wrappedlibxcbxkbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbtypes.h b/src/wrapped/generated/wrappedlibxcbxkbtypes.h index cb2f33bd..8a8b36cf 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbtypes.h +++ b/src/wrapped/generated/wrappedlibxcbxkbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxkbTYPES_H_ #define __wrappedlibxcbxkbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbundefs.h b/src/wrapped/generated/wrappedlibxcbxkbundefs.h index 7fa787a4..68fbc5c8 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxkbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxkbUNDEFS_H_ #define __wrappedlibxcbxkbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtestdefs.h b/src/wrapped/generated/wrappedlibxcbxtestdefs.h index a68e8d86..3c0cc193 100644 --- a/src/wrapped/generated/wrappedlibxcbxtestdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxtestdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxtestDEFS_H_ #define __wrappedlibxcbxtestDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtesttypes.h b/src/wrapped/generated/wrappedlibxcbxtesttypes.h index 3583dd74..9c6baf70 100644 --- a/src/wrapped/generated/wrappedlibxcbxtesttypes.h +++ b/src/wrapped/generated/wrappedlibxcbxtesttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxtestTYPES_H_ #define __wrappedlibxcbxtestTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtestundefs.h b/src/wrapped/generated/wrappedlibxcbxtestundefs.h index 552c01ad..d914996e 100644 --- a/src/wrapped/generated/wrappedlibxcbxtestundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxtestundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcbxtestUNDEFS_H_ #define __wrappedlibxcbxtestUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositedefs.h b/src/wrapped/generated/wrappedlibxcompositedefs.h index 4228a448..d4ee2b28 100644 --- a/src/wrapped/generated/wrappedlibxcompositedefs.h +++ b/src/wrapped/generated/wrappedlibxcompositedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcompositeDEFS_H_ #define __wrappedlibxcompositeDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositetypes.h b/src/wrapped/generated/wrappedlibxcompositetypes.h index 0cda0e12..b6bd6f39 100644 --- a/src/wrapped/generated/wrappedlibxcompositetypes.h +++ b/src/wrapped/generated/wrappedlibxcompositetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcompositeTYPES_H_ #define __wrappedlibxcompositeTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositeundefs.h b/src/wrapped/generated/wrappedlibxcompositeundefs.h index 98be8e62..18b0a1a5 100644 --- a/src/wrapped/generated/wrappedlibxcompositeundefs.h +++ b/src/wrapped/generated/wrappedlibxcompositeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcompositeUNDEFS_H_ #define __wrappedlibxcompositeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcursordefs.h b/src/wrapped/generated/wrappedlibxcursordefs.h index 1394578d..ff65d89a 100644 --- a/src/wrapped/generated/wrappedlibxcursordefs.h +++ b/src/wrapped/generated/wrappedlibxcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcursorDEFS_H_ #define __wrappedlibxcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcursortypes.h b/src/wrapped/generated/wrappedlibxcursortypes.h index cb21afd2..ec5a698a 100644 --- a/src/wrapped/generated/wrappedlibxcursortypes.h +++ b/src/wrapped/generated/wrappedlibxcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcursorTYPES_H_ #define __wrappedlibxcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcursorundefs.h b/src/wrapped/generated/wrappedlibxcursorundefs.h index e64c2503..58ac2dad 100644 --- a/src/wrapped/generated/wrappedlibxcursorundefs.h +++ b/src/wrapped/generated/wrappedlibxcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxcursorUNDEFS_H_ #define __wrappedlibxcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdamagedefs.h b/src/wrapped/generated/wrappedlibxdamagedefs.h index f9ffdd4e..9e2b0859 100644 --- a/src/wrapped/generated/wrappedlibxdamagedefs.h +++ b/src/wrapped/generated/wrappedlibxdamagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdamageDEFS_H_ #define __wrappedlibxdamageDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdamagetypes.h b/src/wrapped/generated/wrappedlibxdamagetypes.h index 4aa79cfc..49b77975 100644 --- a/src/wrapped/generated/wrappedlibxdamagetypes.h +++ b/src/wrapped/generated/wrappedlibxdamagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdamageTYPES_H_ #define __wrappedlibxdamageTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxdamageundefs.h b/src/wrapped/generated/wrappedlibxdamageundefs.h index 3a0c70eb..df52ab20 100644 --- a/src/wrapped/generated/wrappedlibxdamageundefs.h +++ b/src/wrapped/generated/wrappedlibxdamageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdamageUNDEFS_H_ #define __wrappedlibxdamageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcpdefs.h b/src/wrapped/generated/wrappedlibxdmcpdefs.h index df3bff9b..e8b79847 100644 --- a/src/wrapped/generated/wrappedlibxdmcpdefs.h +++ b/src/wrapped/generated/wrappedlibxdmcpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdmcpDEFS_H_ #define __wrappedlibxdmcpDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcptypes.h b/src/wrapped/generated/wrappedlibxdmcptypes.h index fec3d45d..72085512 100644 --- a/src/wrapped/generated/wrappedlibxdmcptypes.h +++ b/src/wrapped/generated/wrappedlibxdmcptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdmcpTYPES_H_ #define __wrappedlibxdmcpTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcpundefs.h b/src/wrapped/generated/wrappedlibxdmcpundefs.h index 9158ebe6..af18a05e 100644 --- a/src/wrapped/generated/wrappedlibxdmcpundefs.h +++ b/src/wrapped/generated/wrappedlibxdmcpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxdmcpUNDEFS_H_ #define __wrappedlibxdmcpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxextdefs.h b/src/wrapped/generated/wrappedlibxextdefs.h index f10ce9b7..fbb5b4ed 100644 --- a/src/wrapped/generated/wrappedlibxextdefs.h +++ b/src/wrapped/generated/wrappedlibxextdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxextDEFS_H_ #define __wrappedlibxextDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxexttypes.h b/src/wrapped/generated/wrappedlibxexttypes.h index 75f71c1d..b8e1ec5d 100644 --- a/src/wrapped/generated/wrappedlibxexttypes.h +++ b/src/wrapped/generated/wrappedlibxexttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxextTYPES_H_ #define __wrappedlibxextTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxextundefs.h b/src/wrapped/generated/wrappedlibxextundefs.h index f80c8e02..2d5e227d 100644 --- a/src/wrapped/generated/wrappedlibxextundefs.h +++ b/src/wrapped/generated/wrappedlibxextundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxextUNDEFS_H_ #define __wrappedlibxextUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfixesdefs.h b/src/wrapped/generated/wrappedlibxfixesdefs.h index 71736ae8..1d30a1be 100644 --- a/src/wrapped/generated/wrappedlibxfixesdefs.h +++ b/src/wrapped/generated/wrappedlibxfixesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxfixesDEFS_H_ #define __wrappedlibxfixesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfixestypes.h b/src/wrapped/generated/wrappedlibxfixestypes.h index 38ebb612..855dbece 100644 --- a/src/wrapped/generated/wrappedlibxfixestypes.h +++ b/src/wrapped/generated/wrappedlibxfixestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxfixesTYPES_H_ #define __wrappedlibxfixesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxfixesundefs.h b/src/wrapped/generated/wrappedlibxfixesundefs.h index a6c33724..0cebf98f 100644 --- a/src/wrapped/generated/wrappedlibxfixesundefs.h +++ b/src/wrapped/generated/wrappedlibxfixesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxfixesUNDEFS_H_ #define __wrappedlibxfixesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxftdefs.h b/src/wrapped/generated/wrappedlibxftdefs.h index bce3a592..a0bb91d9 100644 --- a/src/wrapped/generated/wrappedlibxftdefs.h +++ b/src/wrapped/generated/wrappedlibxftdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxftDEFS_H_ #define __wrappedlibxftDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfttypes.h b/src/wrapped/generated/wrappedlibxfttypes.h index f2a1391a..85d9e4f0 100644 --- a/src/wrapped/generated/wrappedlibxfttypes.h +++ b/src/wrapped/generated/wrappedlibxfttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxftTYPES_H_ #define __wrappedlibxftTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxftundefs.h b/src/wrapped/generated/wrappedlibxftundefs.h index 04b418cf..21ad8824 100644 --- a/src/wrapped/generated/wrappedlibxftundefs.h +++ b/src/wrapped/generated/wrappedlibxftundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxftUNDEFS_H_ #define __wrappedlibxftUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxidefs.h b/src/wrapped/generated/wrappedlibxidefs.h index 685eb51a..1913040f 100644 --- a/src/wrapped/generated/wrappedlibxidefs.h +++ b/src/wrapped/generated/wrappedlibxidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxiDEFS_H_ #define __wrappedlibxiDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxitypes.h b/src/wrapped/generated/wrappedlibxitypes.h index fc4bcdd7..135510ee 100644 --- a/src/wrapped/generated/wrappedlibxitypes.h +++ b/src/wrapped/generated/wrappedlibxitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxiTYPES_H_ #define __wrappedlibxiTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxiundefs.h b/src/wrapped/generated/wrappedlibxiundefs.h index 0278ade6..abb1a099 100644 --- a/src/wrapped/generated/wrappedlibxiundefs.h +++ b/src/wrapped/generated/wrappedlibxiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxiUNDEFS_H_ #define __wrappedlibxiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxmudefs.h b/src/wrapped/generated/wrappedlibxmudefs.h index 22d0c803..800af8a8 100644 --- a/src/wrapped/generated/wrappedlibxmudefs.h +++ b/src/wrapped/generated/wrappedlibxmudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxmuDEFS_H_ #define __wrappedlibxmuDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxmutypes.h b/src/wrapped/generated/wrappedlibxmutypes.h index 4661c307..0a4fd97a 100644 --- a/src/wrapped/generated/wrappedlibxmutypes.h +++ b/src/wrapped/generated/wrappedlibxmutypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxmuTYPES_H_ #define __wrappedlibxmuTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxmuundefs.h b/src/wrapped/generated/wrappedlibxmuundefs.h index 9539c36c..f60f6ae0 100644 --- a/src/wrapped/generated/wrappedlibxmuundefs.h +++ b/src/wrapped/generated/wrappedlibxmuundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxmuUNDEFS_H_ #define __wrappedlibxmuUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpmdefs.h b/src/wrapped/generated/wrappedlibxpmdefs.h index df70f671..5148905a 100644 --- a/src/wrapped/generated/wrappedlibxpmdefs.h +++ b/src/wrapped/generated/wrappedlibxpmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpmDEFS_H_ #define __wrappedlibxpmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpmtypes.h b/src/wrapped/generated/wrappedlibxpmtypes.h index d2e9f2c4..e2021373 100644 --- a/src/wrapped/generated/wrappedlibxpmtypes.h +++ b/src/wrapped/generated/wrappedlibxpmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpmTYPES_H_ #define __wrappedlibxpmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxpmundefs.h b/src/wrapped/generated/wrappedlibxpmundefs.h index 895939f1..d77caa76 100644 --- a/src/wrapped/generated/wrappedlibxpmundefs.h +++ b/src/wrapped/generated/wrappedlibxpmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpmUNDEFS_H_ #define __wrappedlibxpmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpresentdefs.h b/src/wrapped/generated/wrappedlibxpresentdefs.h index de654739..9d704b70 100644 --- a/src/wrapped/generated/wrappedlibxpresentdefs.h +++ b/src/wrapped/generated/wrappedlibxpresentdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpresentDEFS_H_ #define __wrappedlibxpresentDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpresenttypes.h b/src/wrapped/generated/wrappedlibxpresenttypes.h index b5cc5243..7817a24a 100644 --- a/src/wrapped/generated/wrappedlibxpresenttypes.h +++ b/src/wrapped/generated/wrappedlibxpresenttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpresentTYPES_H_ #define __wrappedlibxpresentTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxpresentundefs.h b/src/wrapped/generated/wrappedlibxpresentundefs.h index c22f0993..0511657d 100644 --- a/src/wrapped/generated/wrappedlibxpresentundefs.h +++ b/src/wrapped/generated/wrappedlibxpresentundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxpresentUNDEFS_H_ #define __wrappedlibxpresentUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrdefs.h b/src/wrapped/generated/wrappedlibxrandrdefs.h index 1f94ada8..845d0f81 100644 --- a/src/wrapped/generated/wrappedlibxrandrdefs.h +++ b/src/wrapped/generated/wrappedlibxrandrdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrandrDEFS_H_ #define __wrappedlibxrandrDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrtypes.h b/src/wrapped/generated/wrappedlibxrandrtypes.h index d50c72ff..3a6d9825 100644 --- a/src/wrapped/generated/wrappedlibxrandrtypes.h +++ b/src/wrapped/generated/wrappedlibxrandrtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrandrTYPES_H_ #define __wrappedlibxrandrTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrundefs.h b/src/wrapped/generated/wrappedlibxrandrundefs.h index f353738f..24e48dfe 100644 --- a/src/wrapped/generated/wrappedlibxrandrundefs.h +++ b/src/wrapped/generated/wrappedlibxrandrundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrandrUNDEFS_H_ #define __wrappedlibxrandrUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrenderdefs.h b/src/wrapped/generated/wrappedlibxrenderdefs.h index d4360e47..cfd28a74 100644 --- a/src/wrapped/generated/wrappedlibxrenderdefs.h +++ b/src/wrapped/generated/wrappedlibxrenderdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrenderDEFS_H_ #define __wrappedlibxrenderDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrendertypes.h b/src/wrapped/generated/wrappedlibxrendertypes.h index 3cc99069..c35d2e83 100644 --- a/src/wrapped/generated/wrappedlibxrendertypes.h +++ b/src/wrapped/generated/wrappedlibxrendertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrenderTYPES_H_ #define __wrappedlibxrenderTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxrenderundefs.h b/src/wrapped/generated/wrappedlibxrenderundefs.h index 23a53a4c..7af5ff6d 100644 --- a/src/wrapped/generated/wrappedlibxrenderundefs.h +++ b/src/wrapped/generated/wrappedlibxrenderundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxrenderUNDEFS_H_ #define __wrappedlibxrenderUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxssdefs.h b/src/wrapped/generated/wrappedlibxssdefs.h index b9eb4edb..0d2028da 100644 --- a/src/wrapped/generated/wrappedlibxssdefs.h +++ b/src/wrapped/generated/wrappedlibxssdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxssDEFS_H_ #define __wrappedlibxssDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxsstypes.h b/src/wrapped/generated/wrappedlibxsstypes.h index a7e0e255..b29b9cf7 100644 --- a/src/wrapped/generated/wrappedlibxsstypes.h +++ b/src/wrapped/generated/wrappedlibxsstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxssTYPES_H_ #define __wrappedlibxssTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxssundefs.h b/src/wrapped/generated/wrappedlibxssundefs.h index 0fd1e949..7e0f7512 100644 --- a/src/wrapped/generated/wrappedlibxssundefs.h +++ b/src/wrapped/generated/wrappedlibxssundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxssUNDEFS_H_ #define __wrappedlibxssUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtdefs.h b/src/wrapped/generated/wrappedlibxtdefs.h index 60eff6d3..ac0a1c26 100644 --- a/src/wrapped/generated/wrappedlibxtdefs.h +++ b/src/wrapped/generated/wrappedlibxtdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtDEFS_H_ #define __wrappedlibxtDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtstdefs.h b/src/wrapped/generated/wrappedlibxtstdefs.h index fa195cba..cfe3b4f9 100644 --- a/src/wrapped/generated/wrappedlibxtstdefs.h +++ b/src/wrapped/generated/wrappedlibxtstdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtstDEFS_H_ #define __wrappedlibxtstDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtsttypes.h b/src/wrapped/generated/wrappedlibxtsttypes.h index f7cac5a2..f6ea0780 100644 --- a/src/wrapped/generated/wrappedlibxtsttypes.h +++ b/src/wrapped/generated/wrappedlibxtsttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtstTYPES_H_ #define __wrappedlibxtstTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxtstundefs.h b/src/wrapped/generated/wrappedlibxtstundefs.h index 2e5eec46..6c03f68f 100644 --- a/src/wrapped/generated/wrappedlibxtstundefs.h +++ b/src/wrapped/generated/wrappedlibxtstundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtstUNDEFS_H_ #define __wrappedlibxtstUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxttypes.h b/src/wrapped/generated/wrappedlibxttypes.h index bfa25435..354df5dc 100644 --- a/src/wrapped/generated/wrappedlibxttypes.h +++ b/src/wrapped/generated/wrappedlibxttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtTYPES_H_ #define __wrappedlibxtTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxtundefs.h b/src/wrapped/generated/wrappedlibxtundefs.h index 04d8349d..178faf66 100644 --- a/src/wrapped/generated/wrappedlibxtundefs.h +++ b/src/wrapped/generated/wrappedlibxtundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxtUNDEFS_H_ #define __wrappedlibxtUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmdefs.h b/src/wrapped/generated/wrappedlibxxf86vmdefs.h index 04dc5139..4e40aa11 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmdefs.h +++ b/src/wrapped/generated/wrappedlibxxf86vmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxxf86vmDEFS_H_ #define __wrappedlibxxf86vmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmtypes.h b/src/wrapped/generated/wrappedlibxxf86vmtypes.h index fb1b4ee4..f6ad5d57 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmtypes.h +++ b/src/wrapped/generated/wrappedlibxxf86vmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxxf86vmTYPES_H_ #define __wrappedlibxxf86vmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmundefs.h b/src/wrapped/generated/wrappedlibxxf86vmundefs.h index 836a2db4..efbf6be8 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmundefs.h +++ b/src/wrapped/generated/wrappedlibxxf86vmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibxxf86vmUNDEFS_H_ #define __wrappedlibxxf86vmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibzdefs.h b/src/wrapped/generated/wrappedlibzdefs.h index 8d486b81..ae5dd593 100644 --- a/src/wrapped/generated/wrappedlibzdefs.h +++ b/src/wrapped/generated/wrappedlibzdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibzDEFS_H_ #define __wrappedlibzDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibztypes.h b/src/wrapped/generated/wrappedlibztypes.h index 49e8dc90..2af79058 100644 --- a/src/wrapped/generated/wrappedlibztypes.h +++ b/src/wrapped/generated/wrappedlibztypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibzTYPES_H_ #define __wrappedlibzTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibzundefs.h b/src/wrapped/generated/wrappedlibzundefs.h index 72708785..a4b90b85 100644 --- a/src/wrapped/generated/wrappedlibzundefs.h +++ b/src/wrapped/generated/wrappedlibzundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlibzUNDEFS_H_ #define __wrappedlibzUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlzmadefs.h b/src/wrapped/generated/wrappedlzmadefs.h index 7d2830d1..c62e1836 100644 --- a/src/wrapped/generated/wrappedlzmadefs.h +++ b/src/wrapped/generated/wrappedlzmadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlzmaDEFS_H_ #define __wrappedlzmaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlzmatypes.h b/src/wrapped/generated/wrappedlzmatypes.h index da923ef2..a6853ba5 100644 --- a/src/wrapped/generated/wrappedlzmatypes.h +++ b/src/wrapped/generated/wrappedlzmatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlzmaTYPES_H_ #define __wrappedlzmaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlzmaundefs.h b/src/wrapped/generated/wrappedlzmaundefs.h index c50459a9..d77484ca 100644 --- a/src/wrapped/generated/wrappedlzmaundefs.h +++ b/src/wrapped/generated/wrappedlzmaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedlzmaUNDEFS_H_ #define __wrappedlzmaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedmpg123defs.h b/src/wrapped/generated/wrappedmpg123defs.h index 0a797a11..f83bd201 100644 --- a/src/wrapped/generated/wrappedmpg123defs.h +++ b/src/wrapped/generated/wrappedmpg123defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedmpg123DEFS_H_ #define __wrappedmpg123DEFS_H_ diff --git a/src/wrapped/generated/wrappedmpg123types.h b/src/wrapped/generated/wrappedmpg123types.h index 6f65c02f..e2cf6352 100644 --- a/src/wrapped/generated/wrappedmpg123types.h +++ b/src/wrapped/generated/wrappedmpg123types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedmpg123TYPES_H_ #define __wrappedmpg123TYPES_H_ diff --git a/src/wrapped/generated/wrappedmpg123undefs.h b/src/wrapped/generated/wrappedmpg123undefs.h index f243812b..7e2c120e 100644 --- a/src/wrapped/generated/wrappedmpg123undefs.h +++ b/src/wrapped/generated/wrappedmpg123undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedmpg123UNDEFS_H_ #define __wrappedmpg123UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednotifydefs.h b/src/wrapped/generated/wrappednotifydefs.h index 57f99943..62406def 100644 --- a/src/wrapped/generated/wrappednotifydefs.h +++ b/src/wrapped/generated/wrappednotifydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednotifyDEFS_H_ #define __wrappednotifyDEFS_H_ diff --git a/src/wrapped/generated/wrappednotifytypes.h b/src/wrapped/generated/wrappednotifytypes.h index 4c470cba..6f9e6ba0 100644 --- a/src/wrapped/generated/wrappednotifytypes.h +++ b/src/wrapped/generated/wrappednotifytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednotifyTYPES_H_ #define __wrappednotifyTYPES_H_ diff --git a/src/wrapped/generated/wrappednotifyundefs.h b/src/wrapped/generated/wrappednotifyundefs.h index b9e8effb..f9fe753f 100644 --- a/src/wrapped/generated/wrappednotifyundefs.h +++ b/src/wrapped/generated/wrappednotifyundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednotifyUNDEFS_H_ #define __wrappednotifyUNDEFS_H_ diff --git a/src/wrapped/generated/wrappednsldefs.h b/src/wrapped/generated/wrappednsldefs.h index ba88d8a3..0bff5c1b 100644 --- a/src/wrapped/generated/wrappednsldefs.h +++ b/src/wrapped/generated/wrappednsldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednslDEFS_H_ #define __wrappednslDEFS_H_ diff --git a/src/wrapped/generated/wrappednsltypes.h b/src/wrapped/generated/wrappednsltypes.h index 12a6ff94..7e4e5880 100644 --- a/src/wrapped/generated/wrappednsltypes.h +++ b/src/wrapped/generated/wrappednsltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednslTYPES_H_ #define __wrappednslTYPES_H_ diff --git a/src/wrapped/generated/wrappednslundefs.h b/src/wrapped/generated/wrappednslundefs.h index a0380d7b..40adacbf 100644 --- a/src/wrapped/generated/wrappednslundefs.h +++ b/src/wrapped/generated/wrappednslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednslUNDEFS_H_ #define __wrappednslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappednspr4defs.h b/src/wrapped/generated/wrappednspr4defs.h index fe8445a6..acd5c4df 100644 --- a/src/wrapped/generated/wrappednspr4defs.h +++ b/src/wrapped/generated/wrappednspr4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednspr4DEFS_H_ #define __wrappednspr4DEFS_H_ diff --git a/src/wrapped/generated/wrappednspr4types.h b/src/wrapped/generated/wrappednspr4types.h index d61c83f1..47501ba8 100644 --- a/src/wrapped/generated/wrappednspr4types.h +++ b/src/wrapped/generated/wrappednspr4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednspr4TYPES_H_ #define __wrappednspr4TYPES_H_ diff --git a/src/wrapped/generated/wrappednspr4undefs.h b/src/wrapped/generated/wrappednspr4undefs.h index 39cb34c4..5270d0ef 100644 --- a/src/wrapped/generated/wrappednspr4undefs.h +++ b/src/wrapped/generated/wrappednspr4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednspr4UNDEFS_H_ #define __wrappednspr4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednss3defs.h b/src/wrapped/generated/wrappednss3defs.h index 7df348cb..b4bb82d3 100644 --- a/src/wrapped/generated/wrappednss3defs.h +++ b/src/wrapped/generated/wrappednss3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednss3DEFS_H_ #define __wrappednss3DEFS_H_ diff --git a/src/wrapped/generated/wrappednss3types.h b/src/wrapped/generated/wrappednss3types.h index cdc8a875..3b374665 100644 --- a/src/wrapped/generated/wrappednss3types.h +++ b/src/wrapped/generated/wrappednss3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednss3TYPES_H_ #define __wrappednss3TYPES_H_ diff --git a/src/wrapped/generated/wrappednss3undefs.h b/src/wrapped/generated/wrappednss3undefs.h index 19e156eb..7d7f8f8c 100644 --- a/src/wrapped/generated/wrappednss3undefs.h +++ b/src/wrapped/generated/wrappednss3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednss3UNDEFS_H_ #define __wrappednss3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednssutil3defs.h b/src/wrapped/generated/wrappednssutil3defs.h index bcaf6bc0..163b0f6a 100644 --- a/src/wrapped/generated/wrappednssutil3defs.h +++ b/src/wrapped/generated/wrappednssutil3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednssutil3DEFS_H_ #define __wrappednssutil3DEFS_H_ diff --git a/src/wrapped/generated/wrappednssutil3types.h b/src/wrapped/generated/wrappednssutil3types.h index 4e0b0e48..239f2eb3 100644 --- a/src/wrapped/generated/wrappednssutil3types.h +++ b/src/wrapped/generated/wrappednssutil3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednssutil3TYPES_H_ #define __wrappednssutil3TYPES_H_ diff --git a/src/wrapped/generated/wrappednssutil3undefs.h b/src/wrapped/generated/wrappednssutil3undefs.h index c5d687e0..a15abd45 100644 --- a/src/wrapped/generated/wrappednssutil3undefs.h +++ b/src/wrapped/generated/wrappednssutil3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappednssutil3UNDEFS_H_ #define __wrappednssutil3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedopenaldefs.h b/src/wrapped/generated/wrappedopenaldefs.h index f49934b9..fef536a2 100644 --- a/src/wrapped/generated/wrappedopenaldefs.h +++ b/src/wrapped/generated/wrappedopenaldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenalDEFS_H_ #define __wrappedopenalDEFS_H_ diff --git a/src/wrapped/generated/wrappedopenaltypes.h b/src/wrapped/generated/wrappedopenaltypes.h index 1bd88ca3..33f4403d 100644 --- a/src/wrapped/generated/wrappedopenaltypes.h +++ b/src/wrapped/generated/wrappedopenaltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenalTYPES_H_ #define __wrappedopenalTYPES_H_ diff --git a/src/wrapped/generated/wrappedopenalundefs.h b/src/wrapped/generated/wrappedopenalundefs.h index 020eec65..978152b9 100644 --- a/src/wrapped/generated/wrappedopenalundefs.h +++ b/src/wrapped/generated/wrappedopenalundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenalUNDEFS_H_ #define __wrappedopenalUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedopencldefs.h b/src/wrapped/generated/wrappedopencldefs.h index 2536f0ff..93f2321a 100644 --- a/src/wrapped/generated/wrappedopencldefs.h +++ b/src/wrapped/generated/wrappedopencldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenclDEFS_H_ #define __wrappedopenclDEFS_H_ diff --git a/src/wrapped/generated/wrappedopencltypes.h b/src/wrapped/generated/wrappedopencltypes.h index f631b04b..9a28f3a2 100644 --- a/src/wrapped/generated/wrappedopencltypes.h +++ b/src/wrapped/generated/wrappedopencltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenclTYPES_H_ #define __wrappedopenclTYPES_H_ diff --git a/src/wrapped/generated/wrappedopenclundefs.h b/src/wrapped/generated/wrappedopenclundefs.h index 282406b5..a07ea0ab 100644 --- a/src/wrapped/generated/wrappedopenclundefs.h +++ b/src/wrapped/generated/wrappedopenclundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedopenclUNDEFS_H_ #define __wrappedopenclUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedp11kitdefs.h b/src/wrapped/generated/wrappedp11kitdefs.h index ec4bd05c..527d5e96 100644 --- a/src/wrapped/generated/wrappedp11kitdefs.h +++ b/src/wrapped/generated/wrappedp11kitdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedp11kitDEFS_H_ #define __wrappedp11kitDEFS_H_ diff --git a/src/wrapped/generated/wrappedp11kittypes.h b/src/wrapped/generated/wrappedp11kittypes.h index 46e988c8..d94f3b95 100644 --- a/src/wrapped/generated/wrappedp11kittypes.h +++ b/src/wrapped/generated/wrappedp11kittypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedp11kitTYPES_H_ #define __wrappedp11kitTYPES_H_ diff --git a/src/wrapped/generated/wrappedp11kitundefs.h b/src/wrapped/generated/wrappedp11kitundefs.h index 38b4ca53..8074f91f 100644 --- a/src/wrapped/generated/wrappedp11kitundefs.h +++ b/src/wrapped/generated/wrappedp11kitundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedp11kitUNDEFS_H_ #define __wrappedp11kitUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpamdefs.h b/src/wrapped/generated/wrappedpamdefs.h index 31a659b9..fa896a00 100644 --- a/src/wrapped/generated/wrappedpamdefs.h +++ b/src/wrapped/generated/wrappedpamdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpamDEFS_H_ #define __wrappedpamDEFS_H_ diff --git a/src/wrapped/generated/wrappedpamtypes.h b/src/wrapped/generated/wrappedpamtypes.h index 98b7782e..3328e356 100644 --- a/src/wrapped/generated/wrappedpamtypes.h +++ b/src/wrapped/generated/wrappedpamtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpamTYPES_H_ #define __wrappedpamTYPES_H_ diff --git a/src/wrapped/generated/wrappedpamundefs.h b/src/wrapped/generated/wrappedpamundefs.h index 092a7b67..bd22bc16 100644 --- a/src/wrapped/generated/wrappedpamundefs.h +++ b/src/wrapped/generated/wrappedpamundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpamUNDEFS_H_ #define __wrappedpamUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangocairodefs.h b/src/wrapped/generated/wrappedpangocairodefs.h index b552e7f5..1db27b48 100644 --- a/src/wrapped/generated/wrappedpangocairodefs.h +++ b/src/wrapped/generated/wrappedpangocairodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangocairoDEFS_H_ #define __wrappedpangocairoDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangocairotypes.h b/src/wrapped/generated/wrappedpangocairotypes.h index c2462c1b..6bfc8769 100644 --- a/src/wrapped/generated/wrappedpangocairotypes.h +++ b/src/wrapped/generated/wrappedpangocairotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangocairoTYPES_H_ #define __wrappedpangocairoTYPES_H_ diff --git a/src/wrapped/generated/wrappedpangocairoundefs.h b/src/wrapped/generated/wrappedpangocairoundefs.h index 40d338a0..c7085728 100644 --- a/src/wrapped/generated/wrappedpangocairoundefs.h +++ b/src/wrapped/generated/wrappedpangocairoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangocairoUNDEFS_H_ #define __wrappedpangocairoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangodefs.h b/src/wrapped/generated/wrappedpangodefs.h index a7e8d0c1..f2a1984d 100644 --- a/src/wrapped/generated/wrappedpangodefs.h +++ b/src/wrapped/generated/wrappedpangodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoDEFS_H_ #define __wrappedpangoDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangoft2defs.h b/src/wrapped/generated/wrappedpangoft2defs.h index c987b41f..7083edaf 100644 --- a/src/wrapped/generated/wrappedpangoft2defs.h +++ b/src/wrapped/generated/wrappedpangoft2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoft2DEFS_H_ #define __wrappedpangoft2DEFS_H_ diff --git a/src/wrapped/generated/wrappedpangoft2types.h b/src/wrapped/generated/wrappedpangoft2types.h index 616fc38a..04678d8a 100644 --- a/src/wrapped/generated/wrappedpangoft2types.h +++ b/src/wrapped/generated/wrappedpangoft2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoft2TYPES_H_ #define __wrappedpangoft2TYPES_H_ diff --git a/src/wrapped/generated/wrappedpangoft2undefs.h b/src/wrapped/generated/wrappedpangoft2undefs.h index 941a16a7..1ff51b54 100644 --- a/src/wrapped/generated/wrappedpangoft2undefs.h +++ b/src/wrapped/generated/wrappedpangoft2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoft2UNDEFS_H_ #define __wrappedpangoft2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangotypes.h b/src/wrapped/generated/wrappedpangotypes.h index d874436c..f745705e 100644 --- a/src/wrapped/generated/wrappedpangotypes.h +++ b/src/wrapped/generated/wrappedpangotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoTYPES_H_ #define __wrappedpangoTYPES_H_ diff --git a/src/wrapped/generated/wrappedpangoundefs.h b/src/wrapped/generated/wrappedpangoundefs.h index ffe11184..5761812e 100644 --- a/src/wrapped/generated/wrappedpangoundefs.h +++ b/src/wrapped/generated/wrappedpangoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpangoUNDEFS_H_ #define __wrappedpangoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedplc4defs.h b/src/wrapped/generated/wrappedplc4defs.h index ba22678e..aa0cc8d0 100644 --- a/src/wrapped/generated/wrappedplc4defs.h +++ b/src/wrapped/generated/wrappedplc4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplc4DEFS_H_ #define __wrappedplc4DEFS_H_ diff --git a/src/wrapped/generated/wrappedplc4types.h b/src/wrapped/generated/wrappedplc4types.h index 5ca8ff94..6167c6ee 100644 --- a/src/wrapped/generated/wrappedplc4types.h +++ b/src/wrapped/generated/wrappedplc4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplc4TYPES_H_ #define __wrappedplc4TYPES_H_ diff --git a/src/wrapped/generated/wrappedplc4undefs.h b/src/wrapped/generated/wrappedplc4undefs.h index 3da2719b..673dcbb2 100644 --- a/src/wrapped/generated/wrappedplc4undefs.h +++ b/src/wrapped/generated/wrappedplc4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplc4UNDEFS_H_ #define __wrappedplc4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedplds4defs.h b/src/wrapped/generated/wrappedplds4defs.h index c0620741..45fad0ec 100644 --- a/src/wrapped/generated/wrappedplds4defs.h +++ b/src/wrapped/generated/wrappedplds4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplds4DEFS_H_ #define __wrappedplds4DEFS_H_ diff --git a/src/wrapped/generated/wrappedplds4types.h b/src/wrapped/generated/wrappedplds4types.h index aaf83eb9..462311ce 100644 --- a/src/wrapped/generated/wrappedplds4types.h +++ b/src/wrapped/generated/wrappedplds4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplds4TYPES_H_ #define __wrappedplds4TYPES_H_ diff --git a/src/wrapped/generated/wrappedplds4undefs.h b/src/wrapped/generated/wrappedplds4undefs.h index 9d0868f9..6e56852f 100644 --- a/src/wrapped/generated/wrappedplds4undefs.h +++ b/src/wrapped/generated/wrappedplds4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedplds4UNDEFS_H_ #define __wrappedplds4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpng16defs.h b/src/wrapped/generated/wrappedpng16defs.h index 11d1e26a..9dc16f6a 100644 --- a/src/wrapped/generated/wrappedpng16defs.h +++ b/src/wrapped/generated/wrappedpng16defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpng16DEFS_H_ #define __wrappedpng16DEFS_H_ diff --git a/src/wrapped/generated/wrappedpng16types.h b/src/wrapped/generated/wrappedpng16types.h index 367c19e4..282ab6a3 100644 --- a/src/wrapped/generated/wrappedpng16types.h +++ b/src/wrapped/generated/wrappedpng16types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpng16TYPES_H_ #define __wrappedpng16TYPES_H_ diff --git a/src/wrapped/generated/wrappedpng16undefs.h b/src/wrapped/generated/wrappedpng16undefs.h index bbe21245..83d017e5 100644 --- a/src/wrapped/generated/wrappedpng16undefs.h +++ b/src/wrapped/generated/wrappedpng16undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpng16UNDEFS_H_ #define __wrappedpng16UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpsl5defs.h b/src/wrapped/generated/wrappedpsl5defs.h index 274c347d..0bdfd9a0 100644 --- a/src/wrapped/generated/wrappedpsl5defs.h +++ b/src/wrapped/generated/wrappedpsl5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpsl5DEFS_H_ #define __wrappedpsl5DEFS_H_ diff --git a/src/wrapped/generated/wrappedpsl5types.h b/src/wrapped/generated/wrappedpsl5types.h index 44310fa3..914eedef 100644 --- a/src/wrapped/generated/wrappedpsl5types.h +++ b/src/wrapped/generated/wrappedpsl5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpsl5TYPES_H_ #define __wrappedpsl5TYPES_H_ diff --git a/src/wrapped/generated/wrappedpsl5undefs.h b/src/wrapped/generated/wrappedpsl5undefs.h index 0db6f2e0..a9c9dbb4 100644 --- a/src/wrapped/generated/wrappedpsl5undefs.h +++ b/src/wrapped/generated/wrappedpsl5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpsl5UNDEFS_H_ #define __wrappedpsl5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsedefs.h b/src/wrapped/generated/wrappedpulsedefs.h index 1562e319..16a6b492 100644 --- a/src/wrapped/generated/wrappedpulsedefs.h +++ b/src/wrapped/generated/wrappedpulsedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulseDEFS_H_ #define __wrappedpulseDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibdefs.h b/src/wrapped/generated/wrappedpulsemainloopglibdefs.h index 41195f93..e34537ea 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibdefs.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibDEFS_H_ #define __wrappedpulsemainloopglibDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibtypes.h b/src/wrapped/generated/wrappedpulsemainloopglibtypes.h index f5d96cf0..cd536c9b 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibtypes.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibTYPES_H_ #define __wrappedpulsemainloopglibTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibundefs.h b/src/wrapped/generated/wrappedpulsemainloopglibundefs.h index d70aa31e..b00c51b1 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibundefs.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibUNDEFS_H_ #define __wrappedpulsemainloopglibUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpledefs.h b/src/wrapped/generated/wrappedpulsesimpledefs.h index 30e5fbe7..0bb9c602 100644 --- a/src/wrapped/generated/wrappedpulsesimpledefs.h +++ b/src/wrapped/generated/wrappedpulsesimpledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsesimpleDEFS_H_ #define __wrappedpulsesimpleDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpletypes.h b/src/wrapped/generated/wrappedpulsesimpletypes.h index 2a463851..f8a7e48e 100644 --- a/src/wrapped/generated/wrappedpulsesimpletypes.h +++ b/src/wrapped/generated/wrappedpulsesimpletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsesimpleTYPES_H_ #define __wrappedpulsesimpleTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpleundefs.h b/src/wrapped/generated/wrappedpulsesimpleundefs.h index 03614239..3d1c3bf2 100644 --- a/src/wrapped/generated/wrappedpulsesimpleundefs.h +++ b/src/wrapped/generated/wrappedpulsesimpleundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulsesimpleUNDEFS_H_ #define __wrappedpulsesimpleUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsetypes.h b/src/wrapped/generated/wrappedpulsetypes.h index e3ed948f..23af496b 100644 --- a/src/wrapped/generated/wrappedpulsetypes.h +++ b/src/wrapped/generated/wrappedpulsetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulseTYPES_H_ #define __wrappedpulseTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulseundefs.h b/src/wrapped/generated/wrappedpulseundefs.h index 4472c935..9d96e5c4 100644 --- a/src/wrapped/generated/wrappedpulseundefs.h +++ b/src/wrapped/generated/wrappedpulseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedpulseUNDEFS_H_ #define __wrappedpulseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1defs.h b/src/wrapped/generated/wrappedsdl1defs.h index a3219d5e..6f69f9de 100644 --- a/src/wrapped/generated/wrappedsdl1defs.h +++ b/src/wrapped/generated/wrappedsdl1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1DEFS_H_ #define __wrappedsdl1DEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1imagedefs.h b/src/wrapped/generated/wrappedsdl1imagedefs.h index e7c98144..d40763d7 100644 --- a/src/wrapped/generated/wrappedsdl1imagedefs.h +++ b/src/wrapped/generated/wrappedsdl1imagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1imageDEFS_H_ #define __wrappedsdl1imageDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1imagetypes.h b/src/wrapped/generated/wrappedsdl1imagetypes.h index 27a2fb0b..ec092a0d 100644 --- a/src/wrapped/generated/wrappedsdl1imagetypes.h +++ b/src/wrapped/generated/wrappedsdl1imagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1imageTYPES_H_ #define __wrappedsdl1imageTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1imageundefs.h b/src/wrapped/generated/wrappedsdl1imageundefs.h index 8588d278..b1466758 100644 --- a/src/wrapped/generated/wrappedsdl1imageundefs.h +++ b/src/wrapped/generated/wrappedsdl1imageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1imageUNDEFS_H_ #define __wrappedsdl1imageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixerdefs.h b/src/wrapped/generated/wrappedsdl1mixerdefs.h index c1ee043d..e02cc67c 100644 --- a/src/wrapped/generated/wrappedsdl1mixerdefs.h +++ b/src/wrapped/generated/wrappedsdl1mixerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1mixerDEFS_H_ #define __wrappedsdl1mixerDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixertypes.h b/src/wrapped/generated/wrappedsdl1mixertypes.h index 3998e3d0..a3e00b6e 100644 --- a/src/wrapped/generated/wrappedsdl1mixertypes.h +++ b/src/wrapped/generated/wrappedsdl1mixertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1mixerTYPES_H_ #define __wrappedsdl1mixerTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixerundefs.h b/src/wrapped/generated/wrappedsdl1mixerundefs.h index f943ef63..c3721126 100644 --- a/src/wrapped/generated/wrappedsdl1mixerundefs.h +++ b/src/wrapped/generated/wrappedsdl1mixerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1mixerUNDEFS_H_ #define __wrappedsdl1mixerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1netdefs.h b/src/wrapped/generated/wrappedsdl1netdefs.h index 8bef12a5..18c7699a 100644 --- a/src/wrapped/generated/wrappedsdl1netdefs.h +++ b/src/wrapped/generated/wrappedsdl1netdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1netDEFS_H_ #define __wrappedsdl1netDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1nettypes.h b/src/wrapped/generated/wrappedsdl1nettypes.h index df143a1e..e6af4d35 100644 --- a/src/wrapped/generated/wrappedsdl1nettypes.h +++ b/src/wrapped/generated/wrappedsdl1nettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1netTYPES_H_ #define __wrappedsdl1netTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1netundefs.h b/src/wrapped/generated/wrappedsdl1netundefs.h index e2492ddb..71c97045 100644 --- a/src/wrapped/generated/wrappedsdl1netundefs.h +++ b/src/wrapped/generated/wrappedsdl1netundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1netUNDEFS_H_ #define __wrappedsdl1netUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1sounddefs.h b/src/wrapped/generated/wrappedsdl1sounddefs.h index eb8bfa2d..b7fc5451 100644 --- a/src/wrapped/generated/wrappedsdl1sounddefs.h +++ b/src/wrapped/generated/wrappedsdl1sounddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1soundDEFS_H_ #define __wrappedsdl1soundDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1soundtypes.h b/src/wrapped/generated/wrappedsdl1soundtypes.h index a093993f..9c93da65 100644 --- a/src/wrapped/generated/wrappedsdl1soundtypes.h +++ b/src/wrapped/generated/wrappedsdl1soundtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1soundTYPES_H_ #define __wrappedsdl1soundTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1soundundefs.h b/src/wrapped/generated/wrappedsdl1soundundefs.h index 86a4a190..69839b0f 100644 --- a/src/wrapped/generated/wrappedsdl1soundundefs.h +++ b/src/wrapped/generated/wrappedsdl1soundundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1soundUNDEFS_H_ #define __wrappedsdl1soundUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttfdefs.h b/src/wrapped/generated/wrappedsdl1ttfdefs.h index 431c6274..84b89528 100644 --- a/src/wrapped/generated/wrappedsdl1ttfdefs.h +++ b/src/wrapped/generated/wrappedsdl1ttfdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1ttfDEFS_H_ #define __wrappedsdl1ttfDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttftypes.h b/src/wrapped/generated/wrappedsdl1ttftypes.h index 7ce6d58b..73a1906b 100644 --- a/src/wrapped/generated/wrappedsdl1ttftypes.h +++ b/src/wrapped/generated/wrappedsdl1ttftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1ttfTYPES_H_ #define __wrappedsdl1ttfTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttfundefs.h b/src/wrapped/generated/wrappedsdl1ttfundefs.h index 3643349f..16b96ad2 100644 --- a/src/wrapped/generated/wrappedsdl1ttfundefs.h +++ b/src/wrapped/generated/wrappedsdl1ttfundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1ttfUNDEFS_H_ #define __wrappedsdl1ttfUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1types.h b/src/wrapped/generated/wrappedsdl1types.h index 49567622..6fa183a9 100644 --- a/src/wrapped/generated/wrappedsdl1types.h +++ b/src/wrapped/generated/wrappedsdl1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1TYPES_H_ #define __wrappedsdl1TYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1undefs.h b/src/wrapped/generated/wrappedsdl1undefs.h index 6a49a255..a52dc164 100644 --- a/src/wrapped/generated/wrappedsdl1undefs.h +++ b/src/wrapped/generated/wrappedsdl1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl1UNDEFS_H_ #define __wrappedsdl1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2defs.h b/src/wrapped/generated/wrappedsdl2defs.h index b9a45cf1..3171e5d1 100644 --- a/src/wrapped/generated/wrappedsdl2defs.h +++ b/src/wrapped/generated/wrappedsdl2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2DEFS_H_ #define __wrappedsdl2DEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2imagedefs.h b/src/wrapped/generated/wrappedsdl2imagedefs.h index fd8334fa..e1e3266b 100644 --- a/src/wrapped/generated/wrappedsdl2imagedefs.h +++ b/src/wrapped/generated/wrappedsdl2imagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2imageDEFS_H_ #define __wrappedsdl2imageDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2imagetypes.h b/src/wrapped/generated/wrappedsdl2imagetypes.h index a7c3b66b..ebd187a6 100644 --- a/src/wrapped/generated/wrappedsdl2imagetypes.h +++ b/src/wrapped/generated/wrappedsdl2imagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2imageTYPES_H_ #define __wrappedsdl2imageTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2imageundefs.h b/src/wrapped/generated/wrappedsdl2imageundefs.h index b4b175e5..ed340281 100644 --- a/src/wrapped/generated/wrappedsdl2imageundefs.h +++ b/src/wrapped/generated/wrappedsdl2imageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2imageUNDEFS_H_ #define __wrappedsdl2imageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixerdefs.h b/src/wrapped/generated/wrappedsdl2mixerdefs.h index 1f3a729c..c1cae3d3 100644 --- a/src/wrapped/generated/wrappedsdl2mixerdefs.h +++ b/src/wrapped/generated/wrappedsdl2mixerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2mixerDEFS_H_ #define __wrappedsdl2mixerDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixertypes.h b/src/wrapped/generated/wrappedsdl2mixertypes.h index d48871c2..ec14346f 100644 --- a/src/wrapped/generated/wrappedsdl2mixertypes.h +++ b/src/wrapped/generated/wrappedsdl2mixertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2mixerTYPES_H_ #define __wrappedsdl2mixerTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixerundefs.h b/src/wrapped/generated/wrappedsdl2mixerundefs.h index 15074b60..9f34126b 100644 --- a/src/wrapped/generated/wrappedsdl2mixerundefs.h +++ b/src/wrapped/generated/wrappedsdl2mixerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2mixerUNDEFS_H_ #define __wrappedsdl2mixerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2netdefs.h b/src/wrapped/generated/wrappedsdl2netdefs.h index 8b2cc63a..f2177ebd 100644 --- a/src/wrapped/generated/wrappedsdl2netdefs.h +++ b/src/wrapped/generated/wrappedsdl2netdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2netDEFS_H_ #define __wrappedsdl2netDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2nettypes.h b/src/wrapped/generated/wrappedsdl2nettypes.h index 58ebd638..39d11e65 100644 --- a/src/wrapped/generated/wrappedsdl2nettypes.h +++ b/src/wrapped/generated/wrappedsdl2nettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2netTYPES_H_ #define __wrappedsdl2netTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2netundefs.h b/src/wrapped/generated/wrappedsdl2netundefs.h index 81e16b36..f6e51834 100644 --- a/src/wrapped/generated/wrappedsdl2netundefs.h +++ b/src/wrapped/generated/wrappedsdl2netundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2netUNDEFS_H_ #define __wrappedsdl2netUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttfdefs.h b/src/wrapped/generated/wrappedsdl2ttfdefs.h index bb8ffb64..71e407f5 100644 --- a/src/wrapped/generated/wrappedsdl2ttfdefs.h +++ b/src/wrapped/generated/wrappedsdl2ttfdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2ttfDEFS_H_ #define __wrappedsdl2ttfDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttftypes.h b/src/wrapped/generated/wrappedsdl2ttftypes.h index 6d4e02b9..ab13457a 100644 --- a/src/wrapped/generated/wrappedsdl2ttftypes.h +++ b/src/wrapped/generated/wrappedsdl2ttftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2ttfTYPES_H_ #define __wrappedsdl2ttfTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttfundefs.h b/src/wrapped/generated/wrappedsdl2ttfundefs.h index 0ff8e537..d52b2d44 100644 --- a/src/wrapped/generated/wrappedsdl2ttfundefs.h +++ b/src/wrapped/generated/wrappedsdl2ttfundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2ttfUNDEFS_H_ #define __wrappedsdl2ttfUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2types.h b/src/wrapped/generated/wrappedsdl2types.h index 8386e999..4b20e0db 100644 --- a/src/wrapped/generated/wrappedsdl2types.h +++ b/src/wrapped/generated/wrappedsdl2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2TYPES_H_ #define __wrappedsdl2TYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2undefs.h b/src/wrapped/generated/wrappedsdl2undefs.h index e27f5aee..a66d4875 100644 --- a/src/wrapped/generated/wrappedsdl2undefs.h +++ b/src/wrapped/generated/wrappedsdl2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsdl2UNDEFS_H_ #define __wrappedsdl2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsecret1defs.h b/src/wrapped/generated/wrappedsecret1defs.h index d71edbcc..7e13a0c7 100644 --- a/src/wrapped/generated/wrappedsecret1defs.h +++ b/src/wrapped/generated/wrappedsecret1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsecret1DEFS_H_ #define __wrappedsecret1DEFS_H_ diff --git a/src/wrapped/generated/wrappedsecret1types.h b/src/wrapped/generated/wrappedsecret1types.h index f9a32229..7e8ede38 100644 --- a/src/wrapped/generated/wrappedsecret1types.h +++ b/src/wrapped/generated/wrappedsecret1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsecret1TYPES_H_ #define __wrappedsecret1TYPES_H_ diff --git a/src/wrapped/generated/wrappedsecret1undefs.h b/src/wrapped/generated/wrappedsecret1undefs.h index 1ca2fefe..af8c3acf 100644 --- a/src/wrapped/generated/wrappedsecret1undefs.h +++ b/src/wrapped/generated/wrappedsecret1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsecret1UNDEFS_H_ #define __wrappedsecret1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedselinuxdefs.h b/src/wrapped/generated/wrappedselinuxdefs.h index bc11a101..5d005bd4 100644 --- a/src/wrapped/generated/wrappedselinuxdefs.h +++ b/src/wrapped/generated/wrappedselinuxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedselinuxDEFS_H_ #define __wrappedselinuxDEFS_H_ diff --git a/src/wrapped/generated/wrappedselinuxtypes.h b/src/wrapped/generated/wrappedselinuxtypes.h index b79ee173..89e4aa5e 100644 --- a/src/wrapped/generated/wrappedselinuxtypes.h +++ b/src/wrapped/generated/wrappedselinuxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedselinuxTYPES_H_ #define __wrappedselinuxTYPES_H_ diff --git a/src/wrapped/generated/wrappedselinuxundefs.h b/src/wrapped/generated/wrappedselinuxundefs.h index 8562c7db..e6c6a409 100644 --- a/src/wrapped/generated/wrappedselinuxundefs.h +++ b/src/wrapped/generated/wrappedselinuxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedselinuxUNDEFS_H_ #define __wrappedselinuxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmime3defs.h b/src/wrapped/generated/wrappedsmime3defs.h index 7f730ae2..a2b7059a 100644 --- a/src/wrapped/generated/wrappedsmime3defs.h +++ b/src/wrapped/generated/wrappedsmime3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmime3DEFS_H_ #define __wrappedsmime3DEFS_H_ diff --git a/src/wrapped/generated/wrappedsmime3types.h b/src/wrapped/generated/wrappedsmime3types.h index 6d382ecc..fdeaa8ae 100644 --- a/src/wrapped/generated/wrappedsmime3types.h +++ b/src/wrapped/generated/wrappedsmime3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmime3TYPES_H_ #define __wrappedsmime3TYPES_H_ diff --git a/src/wrapped/generated/wrappedsmime3undefs.h b/src/wrapped/generated/wrappedsmime3undefs.h index 9e4d66a7..f5812057 100644 --- a/src/wrapped/generated/wrappedsmime3undefs.h +++ b/src/wrapped/generated/wrappedsmime3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmime3UNDEFS_H_ #define __wrappedsmime3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2defs.h b/src/wrapped/generated/wrappedsmpeg2defs.h index 87313f8b..bc4058b8 100644 --- a/src/wrapped/generated/wrappedsmpeg2defs.h +++ b/src/wrapped/generated/wrappedsmpeg2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpeg2DEFS_H_ #define __wrappedsmpeg2DEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2types.h b/src/wrapped/generated/wrappedsmpeg2types.h index e9cb40d7..544d9122 100644 --- a/src/wrapped/generated/wrappedsmpeg2types.h +++ b/src/wrapped/generated/wrappedsmpeg2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpeg2TYPES_H_ #define __wrappedsmpeg2TYPES_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2undefs.h b/src/wrapped/generated/wrappedsmpeg2undefs.h index 962f137d..6c96b222 100644 --- a/src/wrapped/generated/wrappedsmpeg2undefs.h +++ b/src/wrapped/generated/wrappedsmpeg2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpeg2UNDEFS_H_ #define __wrappedsmpeg2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpegdefs.h b/src/wrapped/generated/wrappedsmpegdefs.h index 2c6beebc..68505b19 100644 --- a/src/wrapped/generated/wrappedsmpegdefs.h +++ b/src/wrapped/generated/wrappedsmpegdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpegDEFS_H_ #define __wrappedsmpegDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpegtypes.h b/src/wrapped/generated/wrappedsmpegtypes.h index 15d7494d..339866ea 100644 --- a/src/wrapped/generated/wrappedsmpegtypes.h +++ b/src/wrapped/generated/wrappedsmpegtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpegTYPES_H_ #define __wrappedsmpegTYPES_H_ diff --git a/src/wrapped/generated/wrappedsmpegundefs.h b/src/wrapped/generated/wrappedsmpegundefs.h index d7682a7d..bd435470 100644 --- a/src/wrapped/generated/wrappedsmpegundefs.h +++ b/src/wrapped/generated/wrappedsmpegundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsmpegUNDEFS_H_ #define __wrappedsmpegUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3defs.h b/src/wrapped/generated/wrappedsoftokn3defs.h index 8c8fa0ee..1a627329 100644 --- a/src/wrapped/generated/wrappedsoftokn3defs.h +++ b/src/wrapped/generated/wrappedsoftokn3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsoftokn3DEFS_H_ #define __wrappedsoftokn3DEFS_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3types.h b/src/wrapped/generated/wrappedsoftokn3types.h index 1cc54de9..8eeb435a 100644 --- a/src/wrapped/generated/wrappedsoftokn3types.h +++ b/src/wrapped/generated/wrappedsoftokn3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsoftokn3TYPES_H_ #define __wrappedsoftokn3TYPES_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3undefs.h b/src/wrapped/generated/wrappedsoftokn3undefs.h index 2566450b..6f6a57d3 100644 --- a/src/wrapped/generated/wrappedsoftokn3undefs.h +++ b/src/wrapped/generated/wrappedsoftokn3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedsoftokn3UNDEFS_H_ #define __wrappedsoftokn3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedssl3defs.h b/src/wrapped/generated/wrappedssl3defs.h index ae087e0a..89771c8a 100644 --- a/src/wrapped/generated/wrappedssl3defs.h +++ b/src/wrapped/generated/wrappedssl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedssl3DEFS_H_ #define __wrappedssl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedssl3types.h b/src/wrapped/generated/wrappedssl3types.h index 1927a230..1bd0eabd 100644 --- a/src/wrapped/generated/wrappedssl3types.h +++ b/src/wrapped/generated/wrappedssl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedssl3TYPES_H_ #define __wrappedssl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedssl3undefs.h b/src/wrapped/generated/wrappedssl3undefs.h index 16eb9faa..254450b5 100644 --- a/src/wrapped/generated/wrappedssl3undefs.h +++ b/src/wrapped/generated/wrappedssl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedssl3UNDEFS_H_ #define __wrappedssl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbbinddefs.h b/src/wrapped/generated/wrappedtbbbinddefs.h index aba756fb..d51741a6 100644 --- a/src/wrapped/generated/wrappedtbbbinddefs.h +++ b/src/wrapped/generated/wrappedtbbbinddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbbindDEFS_H_ #define __wrappedtbbbindDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbbindtypes.h b/src/wrapped/generated/wrappedtbbbindtypes.h index c898ebce..75f04714 100644 --- a/src/wrapped/generated/wrappedtbbbindtypes.h +++ b/src/wrapped/generated/wrappedtbbbindtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbbindTYPES_H_ #define __wrappedtbbbindTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbbindundefs.h b/src/wrapped/generated/wrappedtbbbindundefs.h index 408e8fb0..af6e6d16 100644 --- a/src/wrapped/generated/wrappedtbbbindundefs.h +++ b/src/wrapped/generated/wrappedtbbbindundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbbindUNDEFS_H_ #define __wrappedtbbbindUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocdefs.h b/src/wrapped/generated/wrappedtbbmallocdefs.h index b0fe962a..bd7b74cd 100644 --- a/src/wrapped/generated/wrappedtbbmallocdefs.h +++ b/src/wrapped/generated/wrappedtbbmallocdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocDEFS_H_ #define __wrappedtbbmallocDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxydefs.h b/src/wrapped/generated/wrappedtbbmallocproxydefs.h index fab8b48a..09056e97 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxydefs.h +++ b/src/wrapped/generated/wrappedtbbmallocproxydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyDEFS_H_ #define __wrappedtbbmallocproxyDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxytypes.h b/src/wrapped/generated/wrappedtbbmallocproxytypes.h index 661340a0..28214d00 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxytypes.h +++ b/src/wrapped/generated/wrappedtbbmallocproxytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyTYPES_H_ #define __wrappedtbbmallocproxyTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxyundefs.h b/src/wrapped/generated/wrappedtbbmallocproxyundefs.h index ed68ff0e..c77870f6 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxyundefs.h +++ b/src/wrapped/generated/wrappedtbbmallocproxyundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyUNDEFS_H_ #define __wrappedtbbmallocproxyUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmalloctypes.h b/src/wrapped/generated/wrappedtbbmalloctypes.h index caec388b..19fc878c 100644 --- a/src/wrapped/generated/wrappedtbbmalloctypes.h +++ b/src/wrapped/generated/wrappedtbbmalloctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocTYPES_H_ #define __wrappedtbbmallocTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocundefs.h b/src/wrapped/generated/wrappedtbbmallocundefs.h index 0e22b278..7085778d 100644 --- a/src/wrapped/generated/wrappedtbbmallocundefs.h +++ b/src/wrapped/generated/wrappedtbbmallocundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtbbmallocUNDEFS_H_ #define __wrappedtbbmallocUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimaldefs.h b/src/wrapped/generated/wrappedtcmallocminimaldefs.h index c22b54d0..85a2658c 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaldefs.h +++ b/src/wrapped/generated/wrappedtcmallocminimaldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtcmallocminimalDEFS_H_ #define __wrappedtcmallocminimalDEFS_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimaltypes.h b/src/wrapped/generated/wrappedtcmallocminimaltypes.h index 52e03b2d..964363e0 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaltypes.h +++ b/src/wrapped/generated/wrappedtcmallocminimaltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtcmallocminimalTYPES_H_ #define __wrappedtcmallocminimalTYPES_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimalundefs.h b/src/wrapped/generated/wrappedtcmallocminimalundefs.h index 2dc85a79..d3f6349b 100644 --- a/src/wrapped/generated/wrappedtcmallocminimalundefs.h +++ b/src/wrapped/generated/wrappedtcmallocminimalundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedtcmallocminimalUNDEFS_H_ #define __wrappedtcmallocminimalUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedudev0defs.h b/src/wrapped/generated/wrappedudev0defs.h index 23e9251e..99837005 100644 --- a/src/wrapped/generated/wrappedudev0defs.h +++ b/src/wrapped/generated/wrappedudev0defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev0DEFS_H_ #define __wrappedudev0DEFS_H_ diff --git a/src/wrapped/generated/wrappedudev0types.h b/src/wrapped/generated/wrappedudev0types.h index 9226453b..4577d427 100644 --- a/src/wrapped/generated/wrappedudev0types.h +++ b/src/wrapped/generated/wrappedudev0types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev0TYPES_H_ #define __wrappedudev0TYPES_H_ diff --git a/src/wrapped/generated/wrappedudev0undefs.h b/src/wrapped/generated/wrappedudev0undefs.h index ca9b005c..5a52481c 100644 --- a/src/wrapped/generated/wrappedudev0undefs.h +++ b/src/wrapped/generated/wrappedudev0undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev0UNDEFS_H_ #define __wrappedudev0UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedudev1defs.h b/src/wrapped/generated/wrappedudev1defs.h index 040be66a..899f57fb 100644 --- a/src/wrapped/generated/wrappedudev1defs.h +++ b/src/wrapped/generated/wrappedudev1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev1DEFS_H_ #define __wrappedudev1DEFS_H_ diff --git a/src/wrapped/generated/wrappedudev1types.h b/src/wrapped/generated/wrappedudev1types.h index 7d1681bf..c56a3635 100644 --- a/src/wrapped/generated/wrappedudev1types.h +++ b/src/wrapped/generated/wrappedudev1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev1TYPES_H_ #define __wrappedudev1TYPES_H_ diff --git a/src/wrapped/generated/wrappedudev1undefs.h b/src/wrapped/generated/wrappedudev1undefs.h index 814025c7..f5ff3583 100644 --- a/src/wrapped/generated/wrappedudev1undefs.h +++ b/src/wrapped/generated/wrappedudev1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedudev1UNDEFS_H_ #define __wrappedudev1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedunwinddefs.h b/src/wrapped/generated/wrappedunwinddefs.h index 6b5b16e6..3518970a 100644 --- a/src/wrapped/generated/wrappedunwinddefs.h +++ b/src/wrapped/generated/wrappedunwinddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedunwindDEFS_H_ #define __wrappedunwindDEFS_H_ diff --git a/src/wrapped/generated/wrappedunwindtypes.h b/src/wrapped/generated/wrappedunwindtypes.h index 78977ea6..f554d503 100644 --- a/src/wrapped/generated/wrappedunwindtypes.h +++ b/src/wrapped/generated/wrappedunwindtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedunwindTYPES_H_ #define __wrappedunwindTYPES_H_ diff --git a/src/wrapped/generated/wrappedunwindundefs.h b/src/wrapped/generated/wrappedunwindundefs.h index 13d2afbb..818ce97f 100644 --- a/src/wrapped/generated/wrappedunwindundefs.h +++ b/src/wrapped/generated/wrappedunwindundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedunwindUNDEFS_H_ #define __wrappedunwindUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedutildefs.h b/src/wrapped/generated/wrappedutildefs.h index 14920bc0..8531b62c 100644 --- a/src/wrapped/generated/wrappedutildefs.h +++ b/src/wrapped/generated/wrappedutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedutilDEFS_H_ #define __wrappedutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedutiltypes.h b/src/wrapped/generated/wrappedutiltypes.h index 8b462767..d21cb30b 100644 --- a/src/wrapped/generated/wrappedutiltypes.h +++ b/src/wrapped/generated/wrappedutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedutilTYPES_H_ #define __wrappedutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedutilundefs.h b/src/wrapped/generated/wrappedutilundefs.h index 69632e8d..4f029787 100644 --- a/src/wrapped/generated/wrappedutilundefs.h +++ b/src/wrapped/generated/wrappedutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedutilUNDEFS_H_ #define __wrappedutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedvorbisfiledefs.h b/src/wrapped/generated/wrappedvorbisfiledefs.h index 50057e6d..12eb528a 100644 --- a/src/wrapped/generated/wrappedvorbisfiledefs.h +++ b/src/wrapped/generated/wrappedvorbisfiledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvorbisfileDEFS_H_ #define __wrappedvorbisfileDEFS_H_ diff --git a/src/wrapped/generated/wrappedvorbisfiletypes.h b/src/wrapped/generated/wrappedvorbisfiletypes.h index 1533cbac..3d3ca086 100644 --- a/src/wrapped/generated/wrappedvorbisfiletypes.h +++ b/src/wrapped/generated/wrappedvorbisfiletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvorbisfileTYPES_H_ #define __wrappedvorbisfileTYPES_H_ diff --git a/src/wrapped/generated/wrappedvorbisfileundefs.h b/src/wrapped/generated/wrappedvorbisfileundefs.h index 329c731d..63edd380 100644 --- a/src/wrapped/generated/wrappedvorbisfileundefs.h +++ b/src/wrapped/generated/wrappedvorbisfileundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvorbisfileUNDEFS_H_ #define __wrappedvorbisfileUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedvulkandefs.h b/src/wrapped/generated/wrappedvulkandefs.h index f976c2da..35af1f42 100644 --- a/src/wrapped/generated/wrappedvulkandefs.h +++ b/src/wrapped/generated/wrappedvulkandefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvulkanDEFS_H_ #define __wrappedvulkanDEFS_H_ diff --git a/src/wrapped/generated/wrappedvulkantypes.h b/src/wrapped/generated/wrappedvulkantypes.h index fd784391..0a60dc11 100644 --- a/src/wrapped/generated/wrappedvulkantypes.h +++ b/src/wrapped/generated/wrappedvulkantypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvulkanTYPES_H_ #define __wrappedvulkanTYPES_H_ diff --git a/src/wrapped/generated/wrappedvulkanundefs.h b/src/wrapped/generated/wrappedvulkanundefs.h index a43e9a6d..6c55b09f 100644 --- a/src/wrapped/generated/wrappedvulkanundefs.h +++ b/src/wrapped/generated/wrappedvulkanundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedvulkanUNDEFS_H_ #define __wrappedvulkanUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandclientdefs.h b/src/wrapped/generated/wrappedwaylandclientdefs.h index b1aa284e..ce7bef17 100644 --- a/src/wrapped/generated/wrappedwaylandclientdefs.h +++ b/src/wrapped/generated/wrappedwaylandclientdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandclientDEFS_H_ #define __wrappedwaylandclientDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandclienttypes.h b/src/wrapped/generated/wrappedwaylandclienttypes.h index fe0f4d8e..c08ac376 100644 --- a/src/wrapped/generated/wrappedwaylandclienttypes.h +++ b/src/wrapped/generated/wrappedwaylandclienttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandclientTYPES_H_ #define __wrappedwaylandclientTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandclientundefs.h b/src/wrapped/generated/wrappedwaylandclientundefs.h index 3848289a..11e55f1c 100644 --- a/src/wrapped/generated/wrappedwaylandclientundefs.h +++ b/src/wrapped/generated/wrappedwaylandclientundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandclientUNDEFS_H_ #define __wrappedwaylandclientUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursordefs.h b/src/wrapped/generated/wrappedwaylandcursordefs.h index 0a3c0aef..054580ed 100644 --- a/src/wrapped/generated/wrappedwaylandcursordefs.h +++ b/src/wrapped/generated/wrappedwaylandcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandcursorDEFS_H_ #define __wrappedwaylandcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursortypes.h b/src/wrapped/generated/wrappedwaylandcursortypes.h index b04183af..b9ef07e6 100644 --- a/src/wrapped/generated/wrappedwaylandcursortypes.h +++ b/src/wrapped/generated/wrappedwaylandcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandcursorTYPES_H_ #define __wrappedwaylandcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursorundefs.h b/src/wrapped/generated/wrappedwaylandcursorundefs.h index 88cfda9f..38056633 100644 --- a/src/wrapped/generated/wrappedwaylandcursorundefs.h +++ b/src/wrapped/generated/wrappedwaylandcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandcursorUNDEFS_H_ #define __wrappedwaylandcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandegldefs.h b/src/wrapped/generated/wrappedwaylandegldefs.h index 7887ffc1..55a102c5 100644 --- a/src/wrapped/generated/wrappedwaylandegldefs.h +++ b/src/wrapped/generated/wrappedwaylandegldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandeglDEFS_H_ #define __wrappedwaylandeglDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandegltypes.h b/src/wrapped/generated/wrappedwaylandegltypes.h index 91c5de4d..08da258d 100644 --- a/src/wrapped/generated/wrappedwaylandegltypes.h +++ b/src/wrapped/generated/wrappedwaylandegltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandeglTYPES_H_ #define __wrappedwaylandeglTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandeglundefs.h b/src/wrapped/generated/wrappedwaylandeglundefs.h index 84f92a37..e2c625d1 100644 --- a/src/wrapped/generated/wrappedwaylandeglundefs.h +++ b/src/wrapped/generated/wrappedwaylandeglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedwaylandeglUNDEFS_H_ #define __wrappedwaylandeglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxineramadefs.h b/src/wrapped/generated/wrappedxineramadefs.h index 5d869c98..5eac29c8 100644 --- a/src/wrapped/generated/wrappedxineramadefs.h +++ b/src/wrapped/generated/wrappedxineramadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxineramaDEFS_H_ #define __wrappedxineramaDEFS_H_ diff --git a/src/wrapped/generated/wrappedxineramatypes.h b/src/wrapped/generated/wrappedxineramatypes.h index 111c7e7e..b33b6c63 100644 --- a/src/wrapped/generated/wrappedxineramatypes.h +++ b/src/wrapped/generated/wrappedxineramatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxineramaTYPES_H_ #define __wrappedxineramaTYPES_H_ diff --git a/src/wrapped/generated/wrappedxineramaundefs.h b/src/wrapped/generated/wrappedxineramaundefs.h index 8c55ca09..ecc0660b 100644 --- a/src/wrapped/generated/wrappedxineramaundefs.h +++ b/src/wrapped/generated/wrappedxineramaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxineramaUNDEFS_H_ #define __wrappedxineramaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommondefs.h b/src/wrapped/generated/wrappedxkbcommondefs.h index 692dd5ca..a3ce1209 100644 --- a/src/wrapped/generated/wrappedxkbcommondefs.h +++ b/src/wrapped/generated/wrappedxkbcommondefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonDEFS_H_ #define __wrappedxkbcommonDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommontypes.h b/src/wrapped/generated/wrappedxkbcommontypes.h index 8ed4d900..dede9085 100644 --- a/src/wrapped/generated/wrappedxkbcommontypes.h +++ b/src/wrapped/generated/wrappedxkbcommontypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonTYPES_H_ #define __wrappedxkbcommonTYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonundefs.h b/src/wrapped/generated/wrappedxkbcommonundefs.h index 50f35582..c5555c37 100644 --- a/src/wrapped/generated/wrappedxkbcommonundefs.h +++ b/src/wrapped/generated/wrappedxkbcommonundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonUNDEFS_H_ #define __wrappedxkbcommonUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11defs.h b/src/wrapped/generated/wrappedxkbcommonx11defs.h index d182bec9..66f2eae6 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11defs.h +++ b/src/wrapped/generated/wrappedxkbcommonx11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonx11DEFS_H_ #define __wrappedxkbcommonx11DEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11types.h b/src/wrapped/generated/wrappedxkbcommonx11types.h index 790d388e..64f5facb 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11types.h +++ b/src/wrapped/generated/wrappedxkbcommonx11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonx11TYPES_H_ #define __wrappedxkbcommonx11TYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11undefs.h b/src/wrapped/generated/wrappedxkbcommonx11undefs.h index 3d21600a..93ba7b62 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11undefs.h +++ b/src/wrapped/generated/wrappedxkbcommonx11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbcommonx11UNDEFS_H_ #define __wrappedxkbcommonx11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbregistrydefs.h b/src/wrapped/generated/wrappedxkbregistrydefs.h index 2a054780..a417dd0a 100644 --- a/src/wrapped/generated/wrappedxkbregistrydefs.h +++ b/src/wrapped/generated/wrappedxkbregistrydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbregistryDEFS_H_ #define __wrappedxkbregistryDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbregistrytypes.h b/src/wrapped/generated/wrappedxkbregistrytypes.h index 51cfef34..07078d1d 100644 --- a/src/wrapped/generated/wrappedxkbregistrytypes.h +++ b/src/wrapped/generated/wrappedxkbregistrytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbregistryTYPES_H_ #define __wrappedxkbregistryTYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbregistryundefs.h b/src/wrapped/generated/wrappedxkbregistryundefs.h index f106d4af..e5ae5c3b 100644 --- a/src/wrapped/generated/wrappedxkbregistryundefs.h +++ b/src/wrapped/generated/wrappedxkbregistryundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxkbregistryUNDEFS_H_ #define __wrappedxkbregistryUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxml2defs.h b/src/wrapped/generated/wrappedxml2defs.h index 9e06efca..8c6db69a 100644 --- a/src/wrapped/generated/wrappedxml2defs.h +++ b/src/wrapped/generated/wrappedxml2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxml2DEFS_H_ #define __wrappedxml2DEFS_H_ diff --git a/src/wrapped/generated/wrappedxml2types.h b/src/wrapped/generated/wrappedxml2types.h index bed5ff59..47edb9d7 100644 --- a/src/wrapped/generated/wrappedxml2types.h +++ b/src/wrapped/generated/wrappedxml2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxml2TYPES_H_ #define __wrappedxml2TYPES_H_ diff --git a/src/wrapped/generated/wrappedxml2undefs.h b/src/wrapped/generated/wrappedxml2undefs.h index cb9cbb73..19339c57 100644 --- a/src/wrapped/generated/wrappedxml2undefs.h +++ b/src/wrapped/generated/wrappedxml2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxml2UNDEFS_H_ #define __wrappedxml2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxshmfencedefs.h b/src/wrapped/generated/wrappedxshmfencedefs.h index 38ffbde4..85daaf5f 100644 --- a/src/wrapped/generated/wrappedxshmfencedefs.h +++ b/src/wrapped/generated/wrappedxshmfencedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxshmfenceDEFS_H_ #define __wrappedxshmfenceDEFS_H_ diff --git a/src/wrapped/generated/wrappedxshmfencetypes.h b/src/wrapped/generated/wrappedxshmfencetypes.h index 01c92a21..1cda4799 100644 --- a/src/wrapped/generated/wrappedxshmfencetypes.h +++ b/src/wrapped/generated/wrappedxshmfencetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxshmfenceTYPES_H_ #define __wrappedxshmfenceTYPES_H_ diff --git a/src/wrapped/generated/wrappedxshmfenceundefs.h b/src/wrapped/generated/wrappedxshmfenceundefs.h index 57603fd9..51ab1383 100644 --- a/src/wrapped/generated/wrappedxshmfenceundefs.h +++ b/src/wrapped/generated/wrappedxshmfenceundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxshmfenceUNDEFS_H_ #define __wrappedxshmfenceUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxsltdefs.h b/src/wrapped/generated/wrappedxsltdefs.h index bc87e360..22873927 100644 --- a/src/wrapped/generated/wrappedxsltdefs.h +++ b/src/wrapped/generated/wrappedxsltdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxsltDEFS_H_ #define __wrappedxsltDEFS_H_ diff --git a/src/wrapped/generated/wrappedxslttypes.h b/src/wrapped/generated/wrappedxslttypes.h index c96a3646..ff2d23b7 100644 --- a/src/wrapped/generated/wrappedxslttypes.h +++ b/src/wrapped/generated/wrappedxslttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxsltTYPES_H_ #define __wrappedxsltTYPES_H_ diff --git a/src/wrapped/generated/wrappedxsltundefs.h b/src/wrapped/generated/wrappedxsltundefs.h index 057facc4..f9d72dfd 100644 --- a/src/wrapped/generated/wrappedxsltundefs.h +++ b/src/wrapped/generated/wrappedxsltundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __wrappedxsltUNDEFS_H_ #define __wrappedxsltUNDEFS_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index ed48f1f4..bacb0849 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #include <stdio.h> #include <stdlib.h> @@ -6358,6 +6358,7 @@ void iFEpuvvppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; #if defined(ARM64) int isSimpleWrapper(wrapper_t fun) { + if (box64_is32bits) return 0; if (fun == &vFv) return 1; if (fun == &vFc) return 1; if (fun == &vFw) return 1; @@ -8222,6 +8223,7 @@ int isSimpleWrapper(wrapper_t fun) { } #elif defined(RV64) int isSimpleWrapper(wrapper_t fun) { + if (box64_is32bits) return 0; if (fun == &vFv) return 1; if (fun == &vFC) return 1; if (fun == &vFW) return 1; @@ -8573,13 +8575,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpppffff) return 9; return 0; } - #else int isSimpleWrapper(wrapper_t fun) { return 0; } #endif +int isRetX87Wrapper32(wrapper_t fun) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif + int isRetX87Wrapper(wrapper_t fun) { if (fun == &DFDi) return 1; if (fun == &DFDD) return 1; diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index b1d0158a..a1f2bb2b 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.4.0.23) * *******************************************************************/ #ifndef __WRAPPER_H_ #define __WRAPPER_H_ diff --git a/src/wrapped/wrappedlibdl.c b/src/wrapped/wrappedlibdl.c index 27252850..62744466 100644 --- a/src/wrapped/wrappedlibdl.c +++ b/src/wrapped/wrappedlibdl.c @@ -64,6 +64,47 @@ int my_dlinfo(x64emu_t* emu, void* handle, int request, void* info) EXPORT; #endif #define CLEARERR if(dl->last_error) {box_free(dl->last_error); dl->last_error = NULL;} +void dl_clear_error() +{ + dlprivate_t *dl = my_context->dlprivate; + CLEARERR; +} + +void dl_set_error(const char* msg) +{ + dlprivate_t *dl = my_context->dlprivate; + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "%s", msg); +} + +library_t* dl_get_library(void* handle) +{ + dlprivate_t *dl = my_context->dlprivate; + CLEARERR + size_t nlib = (size_t)handle; + --nlib; + // size_t is unsigned + if(nlib>=dl->lib_sz) { + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "Bad handle %p)\n", handle); + return (void*)-1LL; + } + if(!dl->dllibs[nlib].count || !dl->dllibs[nlib].full) { + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "Bad handle %p (already closed))\n", handle); + return (void*)-1LL; + } + return dl->dllibs[nlib].lib; +} + +char* dl_last_error() +{ + dlprivate_t *dl = my_context->dlprivate; + return dl->last_error; +} void RemoveDlopen(library_t** lib, size_t idx) { @@ -613,6 +654,11 @@ void closeAllDLOpenned() //extern void* _dlfcn_hook; #endif +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + #define CUSTOM_FINI \ closeAllDLOpenned(); diff --git a/src/wrapped/wrappedlibrt.c b/src/wrapped/wrappedlibrt.c index 1ca32859..438b3312 100644 --- a/src/wrapped/wrappedlibrt.c +++ b/src/wrapped/wrappedlibrt.c @@ -162,4 +162,9 @@ EXPORT int my_lio_listio(x64emu_t* emu, int mode, void* list[], int nent, struct extern int __mq_open_2(const char*, int); #endif +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + #include "wrappedlib_init.h" diff --git a/src/wrapped32/generated/converter32.c b/src/wrapped32/generated/converter32.c new file mode 100644 index 00000000..e098645a --- /dev/null +++ b/src/wrapped32/generated/converter32.c @@ -0,0 +1,61 @@ +// Manually created for now +#include "converter32.h" + +void from_struct_p(struct_p_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_p(ptr_t d, const struct_p_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; +} + +void from_struct_L(struct_L_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_L(ptr_t d, const struct_L_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; +} + + +void from_struct_h(struct_h_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->h0 = from_hash(*(ulong_t*)src); src += 4; +} +void to_struct_h(ptr_t d, const struct_h_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_hash(src->h0); dest += 4; +} + +void from_struct_H(struct_H_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->H0 = from_hash_d(*(ulong_t*)src); src += 4; +} +void to_struct_H(ptr_t d, const struct_H_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_hash_d(src->H0); dest += 4; +} + +void from_struct_ppppp(struct_ppppp_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = *(void**)src; src += 4; + dest->p1 = *(void**)src; src += 4; + dest->p2 = *(void**)src; src += 4; + dest->p3 = *(void**)src; src += 4; + dest->p4 = *(void**)src; src += 4; +} +void to_struct_ppppp(ptr_t d, const struct_ppppp_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p3); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p4); dest += 4; +} diff --git a/src/wrapped32/generated/converter32.h b/src/wrapped32/generated/converter32.h new file mode 100644 index 00000000..86dd3e21 --- /dev/null +++ b/src/wrapped32/generated/converter32.h @@ -0,0 +1,37 @@ +// Manually created for now +#ifndef __CONVERTER_H_ +#define __CONVERTER_H_ + +#include "box32.h" + +typedef struct struct_p_s { + void *p0; +} struct_p_t; +void from_struct_p(struct_p_t *dest, ptr_t src); +void to_struct_p(ptr_t dest, const struct_p_t *src); +typedef struct struct_L_s { + unsigned long L0; +} struct_L_t; +void from_struct_L(struct_L_t *dest, ptr_t src); +void to_struct_L(ptr_t dest, const struct_L_t *src); +typedef struct struct_h_s { + uintptr_t h0; +} struct_h_t; +void from_struct_h(struct_h_t *dest, ptr_t src); +void to_struct_h(ptr_t dest, const struct_h_t *src); +typedef struct struct_H_s { + uintptr_t H0; +} struct_H_t; +void from_struct_H(struct_H_t *dest, ptr_t src); +void to_struct_H(ptr_t dest, const struct_H_t *src); +typedef struct struct_ppppp_s { + void* p0; + void* p1; + void* p2; + void* p3; + void* p4; +} struct_ppppp_t; +void from_struct_ppppp(struct_ppppp_t *dest, ptr_t src); +void to_struct_ppppp(ptr_t dest, const struct_ppppp_t *src); + +#endif // __CONVERTER_H_ diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt new file mode 100644 index 00000000..28592269 --- /dev/null +++ b/src/wrapped32/generated/functions_list.txt @@ -0,0 +1,365 @@ +#() vFv -> vFv +#() vFi -> vFi +#() vFu -> vFu +#() vFp -> vFp +#() vFA -> vFA +#() iFv -> iFv +#() iFi -> iFi +#() iFI -> iFI +#() iFu -> iFu +#() iFf -> iFf +#() iFd -> iFd +#() iFL -> iFL +#() iFp -> iFp +#() iFh -> iFh +#() iFH -> iFH +#() IFf -> IFf +#() IFd -> IFd +#() uFv -> uFv +#() uFu -> uFu +#() uFU -> uFU +#() UFs -> UFs +#() fFf -> fFf +#() dFv -> dFv +#() dFd -> dFd +#() lFi -> lFi +#() lFp -> lFp +#() LFv -> LFv +#() LFL -> LFL +#() pFu -> pFu +#() pFL -> pFL +#() pFp -> pFp +#() hFv -> hFv +#() aFa -> aFa +#() vFEv -> vFEv +#() vFEp -> vFEp +#() iFEv -> iFEv +#() iFEi -> iFEi +#() iFEL -> iFEL +#() iFEp -> iFEp +#() iFEh -> iFEh +#() iFEO -> iFEO +#() iFii -> iFii +#() iFiI -> iFiI +#() iFiu -> iFiu +#() iFip -> iFip +#() iFuu -> iFuu +#() iFup -> iFup +#() iFli -> iFli +#() iFpi -> iFpi +#() iFpp -> iFpp +#() iFhp -> iFhp +#() iFhh -> iFhh +#() IFII -> IFII +#() uFEu -> uFEu +#() uFEV -> uFEV +#() uFpa -> uFpa +#() UFii -> UFii +#() UFUU -> UFUU +#() UFss -> UFss +#() fFif -> fFif +#() fFfi -> fFfi +#() fFff -> fFff +#() fFfD -> fFfD +#() fFfp -> fFfp +#() dFid -> dFid +#() dFdi -> dFdi +#() dFdd -> dFdd +#() dFdD -> dFdD +#() dFdp -> dFdp +#() LFpp -> LFpp +#() pFEv -> pFEv +#() pFEp -> pFEp +#() pFLL -> pFLL +#() aFia -> aFia +#() iFHBp_ -> iFHB +#() vFEip -> vFEip +#() vFEpi -> vFEpi +#() vFEpu -> vFEpu +#() vFfpp -> vFfpp +#() vFdpp -> vFdpp +#() iFEpi -> iFEpi +#() iFEpL -> iFEpL +#() iFEpp -> iFEpp +#() iFEpV -> iFEpV +#() iFiii -> iFiii +#() iFiiI -> iFiiI +#() iFiiu -> iFiiu +#() iFiiO -> iFiiO +#() iFiII -> iFiII +#() iFiuu -> iFiuu +#() iFiLN -> iFiLN +#() iFipp -> iFipp +#() iFuii -> iFuii +#() iFuip -> iFuip +#() iFuui -> iFuui +#() iFuuu -> iFuuu +#() iFuLp -> iFuLp +#() iFupp -> iFupp +#() iFpiu -> iFpiu +#() iFpip -> iFpip +#() iFpuu -> iFpuu +#() iFppu -> iFppu +#() iFppL -> iFppL +#() iFppp -> iFppp +#() iFpOu -> iFpOu +#() IFiIi -> IFiIi +#() fFfff -> fFfff +#() fFffp -> fFffp +#() dFddd -> dFddd +#() dFddp -> dFddp +#() pFEip -> pFEip +#() pFEpi -> pFEpi +#() pFEpp -> pFEpp +#() pFppL -> pFppL +#() pFpOM -> pFpOM +#() hFEpp -> hFEpp +#() aFipa -> aFipa +#() lFpBp_i -> lFpBi +#() vFEipV -> vFEipV +#() vFEppp -> vFEppp +#() iFEiiN -> iFEiiN +#() iFEipp -> iFEipp +#() iFELup -> iFELup +#() iFEpip -> iFEpip +#() iFEpup -> iFEpup +#() iFEppu -> iFEppu +#() iFEppL -> iFEppL +#() iFEppp -> iFEppp +#() iFiiII -> iFiiII +#() iFiuui -> iFiuui +#() LFpLLh -> LFpLLh +#() pFEppi -> pFEppi +#() pFEppp -> pFEppp +#() pFppuL -> pFppuL +#() pFppLL -> pFppLL +#() iFEppiV -> iFEppiV +#() iFEpppi -> iFEpppi +#() iFiLLLL -> iFiLLLL +#() iFEBh_ppp -> iFEBppp +#() iFEpippppp -> iFEpippppp +#defined(ANDROID) pFv -> pFv +#defined(ANDROID) vFEpppp -> vFEpppp +#defined(HAVE_LD80BITS) DFD -> DFD +#defined(HAVE_LD80BITS) DFDD -> DFDD +#defined(HAVE_LD80BITS) DFDp -> DFDp +#!defined(HAVE_LD80BITS) KFK -> KFK +#!defined(HAVE_LD80BITS) KFKK -> KFKK +#!defined(HAVE_LD80BITS) KFKp -> KFKp +#() iFEvpV -> iFEpV +#() UFsvvs -> UFss +wrappedcrashhandler: +wrappedldlinux: +- pFv: + - ___tls_get_addr +- pFp: + - __tls_get_addr +wrappedlibc: +- vFv: +- vFp: +- iFv: +- iFi: + - __close_nocancel +- iFL: +- iFp: +- iFO: +- uFu: +- uFV: +- LFL: +- pFL: +- vFip: +- vFpi: +- vFpu: +- iFpp: +- iFpV: +- IFII: +- UFUU: +- pFip: + - signal +- hFpp: +- vFipV: +- iFvpV: +- iFiiN: +- iFipp: +- iFppp: +- vFpppp: + - __libc_init +- iFiiII: +- iFppiV: +- iFpippppp: +wrappedlibdl: +- iFp: + - dlclose +- pFv: + - dlerror +- iFpp: + - _dl_find_object + - dladdr +- pFpi: + - dlopen +- pFpp: + - dlsym +- iFpip: + - dlinfo +- pFppi: + - dlmopen +- pFppp: + - dlvsym +- iFpppi: + - dladdr1 +wrappedlibm: +- UFs: + - cacosf + - cacoshf + - casinf + - casinhf + - catanf + - catanhf + - ccosf + - ccoshf + - cexpf + - clogf + - cprojf + - csinf + - csinhf + - csqrtf + - ctanf + - ctanhf +- fFf: + - __acosf_finite + - __acoshf_finite + - __asinf_finite + - __coshf_finite + - __exp2f_finite + - __expf_finite + - __log10f_finite + - __log2f_finite + - __logf_finite + - __sinhf_finite + - __sqrtf_finite +- dFd: + - __acos_finite + - __acosh_finite + - __asin_finite + - __cosh_finite + - __exp2_finite + - __exp_finite + - __log10_finite + - __log2_finite + - __log_finite + - __sinh_finite + - __sqrt_finite +- DFD: + - pow10l +- KFK: + - acoshl + - acosl + - asinhl + - asinl + - atanhl + - cbrtl + - erfcl + - erfl + - ldexpl + - lgammal + - logl + - pow10l + - tgammal +- fFff: + - __atan2f_finite + - __hypotf_finite + - __powf_finite +- dFdd: + - __atan2_finite + - __hypot_finite + - __pow_finite +- KFKK: + - fmodl + - powl +- KFKp: + - frexpl + - lgammal_r +- UFsvvs: + - cpowf +wrappedlibpthread: +- vFv: + - __pthread_initialize +- vFp: + - __pthread_register_cancel + - __pthread_unregister_cancel + - __pthread_unwind_next +- iFp: + - __pthread_mutex_destroy + - __pthread_mutex_lock + - __pthread_mutex_trylock + - __pthread_mutex_unlock + - pthread_attr_destroy + - pthread_attr_init + - pthread_cond_broadcast@GLIBC_2.0 + - pthread_cond_destroy@GLIBC_2.0 + - pthread_cond_signal@GLIBC_2.0 + - pthread_mutex_destroy + - pthread_mutex_lock + - pthread_mutex_trylock + - pthread_mutex_unlock + - pthread_rwlock_rdlock + - pthread_rwlock_unlock + - pthread_rwlock_wrlock +- iFh: + - pthread_detach +- vFpi: + - _pthread_cleanup_pop + - _pthread_cleanup_pop_restore +- iFpi: + - pthread_attr_setdetachstate + - pthread_attr_setinheritsched + - pthread_attr_setschedpolicy + - pthread_attr_setscope + - pthread_kill + - pthread_mutexattr_setkind_np +- iFpL: + - pthread_attr_setguardsize + - pthread_attr_setstacksize +- iFpp: + - __pthread_key_create + - __pthread_mutex_init + - __pthread_once + - pthread_attr_getdetachstate + - pthread_attr_getguardsize + - pthread_attr_getinheritsched + - pthread_attr_getschedparam + - pthread_attr_getschedpolicy + - pthread_attr_getscope + - pthread_attr_getstackaddr + - pthread_attr_getstacksize + - pthread_attr_setschedparam + - pthread_attr_setstackaddr + - pthread_cond_init@GLIBC_2.0 + - pthread_cond_wait + - pthread_cond_wait@GLIBC_2.0 + - pthread_key_create + - pthread_mutex_init + - pthread_mutex_timedlock + - pthread_once + - pthread_setname_np +- vFppp: + - _pthread_cleanup_push + - _pthread_cleanup_push_defer +- iFLup: + - pthread_setaffinity_np +- iFpup: + - pthread_attr_setaffinity_np + - pthread_getaffinity_np +- iFppu: + - pthread_getname_np +- iFppL: + - pthread_attr_setstack +- iFppp: + - __pthread_atfork + - pthread_atfork + - pthread_attr_getstack + - pthread_cond_timedwait + - pthread_cond_timedwait@GLIBC_2.0 +- iFhppp: + - pthread_create +wrappedlibrt: diff --git a/src/wrapped32/generated/wrappedcrashhandlerdefs32.h b/src/wrapped32/generated/wrappedcrashhandlerdefs32.h new file mode 100644 index 00000000..83e132a1 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlerdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedcrashhandlerDEFS32_H_ +#define __wrappedcrashhandlerDEFS32_H_ + + +#endif // __wrappedcrashhandlerDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedcrashhandlertypes32.h b/src/wrapped32/generated/wrappedcrashhandlertypes32.h new file mode 100644 index 00000000..5b75966f --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlertypes32.h @@ -0,0 +1,17 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedcrashhandlerTYPES32_H_ +#define __wrappedcrashhandlerTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedcrashhandlerTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedcrashhandlerundefs32.h b/src/wrapped32/generated/wrappedcrashhandlerundefs32.h new file mode 100644 index 00000000..d70f6207 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlerundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedcrashhandlerUNDEFS32_H_ +#define __wrappedcrashhandlerUNDEFS32_H_ + + +#endif // __wrappedcrashhandlerUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxdefs32.h b/src/wrapped32/generated/wrappedldlinuxdefs32.h new file mode 100644 index 00000000..24962643 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedldlinuxDEFS32_H_ +#define __wrappedldlinuxDEFS32_H_ + + +#endif // __wrappedldlinuxDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxtypes32.h b/src/wrapped32/generated/wrappedldlinuxtypes32.h new file mode 100644 index 00000000..e010f126 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxtypes32.h @@ -0,0 +1,21 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedldlinuxTYPES32_H_ +#define __wrappedldlinuxTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFv_t)(void); +typedef void* (*pFp_t)(void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(___tls_get_addr, pFv_t) \ + GO(__tls_get_addr, pFp_t) + +#endif // __wrappedldlinuxTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxundefs32.h b/src/wrapped32/generated/wrappedldlinuxundefs32.h new file mode 100644 index 00000000..0ab4c7e3 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedldlinuxUNDEFS32_H_ +#define __wrappedldlinuxUNDEFS32_H_ + + +#endif // __wrappedldlinuxUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibcdefs32.h b/src/wrapped32/generated/wrappedlibcdefs32.h new file mode 100644 index 00000000..bcd18301 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibcdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibcDEFS32_H_ +#define __wrappedlibcDEFS32_H_ + + +#endif // __wrappedlibcDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h new file mode 100644 index 00000000..1b3d5ab3 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibctypes32.h @@ -0,0 +1,49 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibcTYPES32_H_ +#define __wrappedlibcTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFv_t)(void); +typedef void (*vFp_t)(void*); +typedef int32_t (*iFv_t)(void); +typedef int32_t (*iFi_t)(int32_t); +typedef int32_t (*iFL_t)(uintptr_t); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFO_t)(int32_t); +typedef uint32_t (*uFu_t)(uint32_t); +typedef uint32_t (*uFV_t)(...); +typedef uintptr_t (*LFL_t)(uintptr_t); +typedef void* (*pFL_t)(uintptr_t); +typedef void (*vFip_t)(int32_t, void*); +typedef void (*vFpi_t)(void*, int32_t); +typedef void (*vFpu_t)(void*, uint32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFpV_t)(void*, ...); +typedef int64_t (*IFII_t)(int64_t, int64_t); +typedef uint64_t (*UFUU_t)(uint64_t, uint64_t); +typedef void* (*pFip_t)(int32_t, void*); +typedef uintptr_t (*hFpp_t)(void*, void*); +typedef void (*vFipV_t)(int32_t, void*, ...); +typedef int32_t (*iFvpV_t)(void, void*, ...); +typedef int32_t (*iFiiN_t)(int32_t, int32_t, ...); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef void (*vFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iFiiII_t)(int32_t, int32_t, int64_t, int64_t); +typedef int32_t (*iFppiV_t)(void*, void*, int32_t, ...); +typedef int32_t (*iFpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(__close_nocancel, iFi_t) \ + GO(signal, pFip_t) \ + GO(__libc_init, vFpppp_t) + +#endif // __wrappedlibcTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibcundefs32.h b/src/wrapped32/generated/wrappedlibcundefs32.h new file mode 100644 index 00000000..13e37512 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibcundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibcUNDEFS32_H_ +#define __wrappedlibcUNDEFS32_H_ + + +#endif // __wrappedlibcUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibdldefs32.h b/src/wrapped32/generated/wrappedlibdldefs32.h new file mode 100644 index 00000000..a817cc31 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdldefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibdlDEFS32_H_ +#define __wrappedlibdlDEFS32_H_ + + +#endif // __wrappedlibdlDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibdltypes32.h b/src/wrapped32/generated/wrappedlibdltypes32.h new file mode 100644 index 00000000..6368b9a1 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdltypes32.h @@ -0,0 +1,36 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibdlTYPES32_H_ +#define __wrappedlibdlTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFp_t)(void*); +typedef void* (*pFv_t)(void); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void* (*pFpp_t)(void*, void*); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef void* (*pFppi_t)(void*, void*, int32_t); +typedef void* (*pFppp_t)(void*, void*, void*); +typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(dlclose, iFp_t) \ + GO(dlerror, pFv_t) \ + GO(_dl_find_object, iFpp_t) \ + GO(dladdr, iFpp_t) \ + GO(dlopen, pFpi_t) \ + GO(dlsym, pFpp_t) \ + GO(dlinfo, iFpip_t) \ + GO(dlmopen, pFppi_t) \ + GO(dlvsym, pFppp_t) \ + GO(dladdr1, iFpppi_t) + +#endif // __wrappedlibdlTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibdlundefs32.h b/src/wrapped32/generated/wrappedlibdlundefs32.h new file mode 100644 index 00000000..1a512d1a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdlundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibdlUNDEFS32_H_ +#define __wrappedlibdlUNDEFS32_H_ + + +#endif // __wrappedlibdlUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibmdefs32.h b/src/wrapped32/generated/wrappedlibmdefs32.h new file mode 100644 index 00000000..abfcbb76 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibmDEFS32_H_ +#define __wrappedlibmDEFS32_H_ + + +#endif // __wrappedlibmDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibmtypes32.h b/src/wrapped32/generated/wrappedlibmtypes32.h new file mode 100644 index 00000000..589a2f45 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmtypes32.h @@ -0,0 +1,90 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibmTYPES32_H_ +#define __wrappedlibmTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef uint64_t (*UFs_t)(void*); +typedef float (*fFf_t)(float); +typedef double (*dFd_t)(double); +typedef long double (*DFD_t)(long double); +typedef double (*KFK_t)(double); +typedef float (*fFff_t)(float, float); +typedef double (*dFdd_t)(double, double); +typedef double (*KFKK_t)(double, double); +typedef double (*KFKp_t)(double, void*); +typedef uint64_t (*UFsvvs_t)(void*, void, void, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(cacosf, UFs_t) \ + GO(cacoshf, UFs_t) \ + GO(casinf, UFs_t) \ + GO(casinhf, UFs_t) \ + GO(catanf, UFs_t) \ + GO(catanhf, UFs_t) \ + GO(ccosf, UFs_t) \ + GO(ccoshf, UFs_t) \ + GO(cexpf, UFs_t) \ + GO(clogf, UFs_t) \ + GO(cprojf, UFs_t) \ + GO(csinf, UFs_t) \ + GO(csinhf, UFs_t) \ + GO(csqrtf, UFs_t) \ + GO(ctanf, UFs_t) \ + GO(ctanhf, UFs_t) \ + GO(__acosf_finite, fFf_t) \ + GO(__acoshf_finite, fFf_t) \ + GO(__asinf_finite, fFf_t) \ + GO(__coshf_finite, fFf_t) \ + GO(__exp2f_finite, fFf_t) \ + GO(__expf_finite, fFf_t) \ + GO(__log10f_finite, fFf_t) \ + GO(__log2f_finite, fFf_t) \ + GO(__logf_finite, fFf_t) \ + GO(__sinhf_finite, fFf_t) \ + GO(__sqrtf_finite, fFf_t) \ + GO(__acos_finite, dFd_t) \ + GO(__acosh_finite, dFd_t) \ + GO(__asin_finite, dFd_t) \ + GO(__cosh_finite, dFd_t) \ + GO(__exp2_finite, dFd_t) \ + GO(__exp_finite, dFd_t) \ + GO(__log10_finite, dFd_t) \ + GO(__log2_finite, dFd_t) \ + GO(__log_finite, dFd_t) \ + GO(__sinh_finite, dFd_t) \ + GO(__sqrt_finite, dFd_t) \ + GO(pow10l, DFD_t) \ + GO(acoshl, KFK_t) \ + GO(acosl, KFK_t) \ + GO(asinhl, KFK_t) \ + GO(asinl, KFK_t) \ + GO(atanhl, KFK_t) \ + GO(cbrtl, KFK_t) \ + GO(erfcl, KFK_t) \ + GO(erfl, KFK_t) \ + GO(ldexpl, KFK_t) \ + GO(lgammal, KFK_t) \ + GO(logl, KFK_t) \ + GO(pow10l, KFK_t) \ + GO(tgammal, KFK_t) \ + GO(__atan2f_finite, fFff_t) \ + GO(__hypotf_finite, fFff_t) \ + GO(__powf_finite, fFff_t) \ + GO(__atan2_finite, dFdd_t) \ + GO(__hypot_finite, dFdd_t) \ + GO(__pow_finite, dFdd_t) \ + GO(fmodl, KFKK_t) \ + GO(powl, KFKK_t) \ + GO(frexpl, KFKp_t) \ + GO(lgammal_r, KFKp_t) \ + GO(cpowf, UFsvvs_t) + +#endif // __wrappedlibmTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibmundefs32.h b/src/wrapped32/generated/wrappedlibmundefs32.h new file mode 100644 index 00000000..f9a4b404 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibmUNDEFS32_H_ +#define __wrappedlibmUNDEFS32_H_ + + +#endif // __wrappedlibmUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreaddefs32.h b/src/wrapped32/generated/wrappedlibpthreaddefs32.h new file mode 100644 index 00000000..4192688c --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreaddefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibpthreadDEFS32_H_ +#define __wrappedlibpthreadDEFS32_H_ + + +#endif // __wrappedlibpthreadDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreadtypes32.h b/src/wrapped32/generated/wrappedlibpthreadtypes32.h new file mode 100644 index 00000000..74b615de --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreadtypes32.h @@ -0,0 +1,97 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibpthreadTYPES32_H_ +#define __wrappedlibpthreadTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFv_t)(void); +typedef void (*vFp_t)(void*); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFh_t)(uintptr_t); +typedef void (*vFpi_t)(void*, int32_t); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpL_t)(void*, uintptr_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void (*vFppp_t)(void*, void*, void*); +typedef int32_t (*iFLup_t)(uintptr_t, uint32_t, void*); +typedef int32_t (*iFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef int32_t (*iFhppp_t)(uintptr_t, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(__pthread_initialize, vFv_t) \ + GO(__pthread_register_cancel, vFp_t) \ + GO(__pthread_unregister_cancel, vFp_t) \ + GO(__pthread_unwind_next, vFp_t) \ + GO(__pthread_mutex_destroy, iFp_t) \ + GO(__pthread_mutex_lock, iFp_t) \ + GO(__pthread_mutex_trylock, iFp_t) \ + GO(__pthread_mutex_unlock, iFp_t) \ + GO(pthread_attr_destroy, iFp_t) \ + GO(pthread_attr_init, iFp_t) \ + GO(pthread_cond_broadcast@GLIBC_2.0, iFp_t) \ + GO(pthread_cond_destroy@GLIBC_2.0, iFp_t) \ + GO(pthread_cond_signal@GLIBC_2.0, iFp_t) \ + GO(pthread_mutex_destroy, iFp_t) \ + GO(pthread_mutex_lock, iFp_t) \ + GO(pthread_mutex_trylock, iFp_t) \ + GO(pthread_mutex_unlock, iFp_t) \ + GO(pthread_rwlock_rdlock, iFp_t) \ + GO(pthread_rwlock_unlock, iFp_t) \ + GO(pthread_rwlock_wrlock, iFp_t) \ + GO(pthread_detach, iFh_t) \ + GO(_pthread_cleanup_pop, vFpi_t) \ + GO(_pthread_cleanup_pop_restore, vFpi_t) \ + GO(pthread_attr_setdetachstate, iFpi_t) \ + GO(pthread_attr_setinheritsched, iFpi_t) \ + GO(pthread_attr_setschedpolicy, iFpi_t) \ + GO(pthread_attr_setscope, iFpi_t) \ + GO(pthread_kill, iFpi_t) \ + GO(pthread_mutexattr_setkind_np, iFpi_t) \ + GO(pthread_attr_setguardsize, iFpL_t) \ + GO(pthread_attr_setstacksize, iFpL_t) \ + GO(__pthread_key_create, iFpp_t) \ + GO(__pthread_mutex_init, iFpp_t) \ + GO(__pthread_once, iFpp_t) \ + GO(pthread_attr_getdetachstate, iFpp_t) \ + GO(pthread_attr_getguardsize, iFpp_t) \ + GO(pthread_attr_getinheritsched, iFpp_t) \ + GO(pthread_attr_getschedparam, iFpp_t) \ + GO(pthread_attr_getschedpolicy, iFpp_t) \ + GO(pthread_attr_getscope, iFpp_t) \ + GO(pthread_attr_getstackaddr, iFpp_t) \ + GO(pthread_attr_getstacksize, iFpp_t) \ + GO(pthread_attr_setschedparam, iFpp_t) \ + GO(pthread_attr_setstackaddr, iFpp_t) \ + GO(pthread_cond_init@GLIBC_2.0, iFpp_t) \ + GO(pthread_cond_wait, iFpp_t) \ + GO(pthread_cond_wait@GLIBC_2.0, iFpp_t) \ + GO(pthread_key_create, iFpp_t) \ + GO(pthread_mutex_init, iFpp_t) \ + GO(pthread_mutex_timedlock, iFpp_t) \ + GO(pthread_once, iFpp_t) \ + GO(pthread_setname_np, iFpp_t) \ + GO(_pthread_cleanup_push, vFppp_t) \ + GO(_pthread_cleanup_push_defer, vFppp_t) \ + GO(pthread_setaffinity_np, iFLup_t) \ + GO(pthread_attr_setaffinity_np, iFpup_t) \ + GO(pthread_getaffinity_np, iFpup_t) \ + GO(pthread_getname_np, iFppu_t) \ + GO(pthread_attr_setstack, iFppL_t) \ + GO(__pthread_atfork, iFppp_t) \ + GO(pthread_atfork, iFppp_t) \ + GO(pthread_attr_getstack, iFppp_t) \ + GO(pthread_cond_timedwait, iFppp_t) \ + GO(pthread_cond_timedwait@GLIBC_2.0, iFppp_t) \ + GO(pthread_create, iFhppp_t) + +#endif // __wrappedlibpthreadTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreadundefs32.h b/src/wrapped32/generated/wrappedlibpthreadundefs32.h new file mode 100644 index 00000000..687cec63 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreadundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibpthreadUNDEFS32_H_ +#define __wrappedlibpthreadUNDEFS32_H_ + + +#endif // __wrappedlibpthreadUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibrtdefs32.h b/src/wrapped32/generated/wrappedlibrtdefs32.h new file mode 100644 index 00000000..5c2c26cb --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrtdefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibrtDEFS32_H_ +#define __wrappedlibrtDEFS32_H_ + + +#endif // __wrappedlibrtDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibrttypes32.h b/src/wrapped32/generated/wrappedlibrttypes32.h new file mode 100644 index 00000000..41bb06d3 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrttypes32.h @@ -0,0 +1,17 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibrtTYPES32_H_ +#define __wrappedlibrtTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibrtTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibrtundefs32.h b/src/wrapped32/generated/wrappedlibrtundefs32.h new file mode 100644 index 00000000..13b52f67 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrtundefs32.h @@ -0,0 +1,8 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __wrappedlibrtUNDEFS32_H_ +#define __wrappedlibrtUNDEFS32_H_ + + +#endif // __wrappedlibrtUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c new file mode 100644 index 00000000..1d8c2890 --- /dev/null +++ b/src/wrapped32/generated/wrapper32.c @@ -0,0 +1,423 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> + +#include "wrapper32.h" +#include "emu/x64emu_private.h" +#include "emu/x87emu_private.h" +#include "regs.h" +#include "x64emu.h" +#include "box32.h" +#include "converter32.h" + +typedef union ui64_s { + int64_t i; + uint64_t u; + uint32_t d[2]; +} ui64_t; + +typedef struct _2uint_struct_s { + uint32_t a; + uint32_t b; +} _2uint_struct_t; + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + +static void* io_convert(void* v) +{ + if(!v) + return v; + if(v==my__IO_2_1_stderr_) + return stderr; + if(v==my__IO_2_1_stdin_) + return stdin; + if(v==my__IO_2_1_stdout_) + return stdout; + return v; +} + +typedef struct my_GValue_s +{ + int g_type; + union { + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + } data[2]; +} my_GValue_t; + +static void alignGValue(my_GValue_t* v, void* value) +{ + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); +} +static void unalignGValue(void* value, my_GValue_t* v) +{ + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); +} + +void* VulkanFromx86(void* src, void** save); +void VulkanTox86(void* src, void* save); + +#define ST0val ST0.d + +int of_convert32(int); + +typedef void (*vFv_t)(void); +typedef void (*vFi_t)(int32_t); +typedef void (*vFu_t)(uint32_t); +typedef void (*vFp_t)(void*); +typedef void (*vFA_t)(void*); +typedef int32_t (*iFv_t)(void); +typedef int32_t (*iFi_t)(int32_t); +typedef int32_t (*iFI_t)(int64_t); +typedef int32_t (*iFu_t)(uint32_t); +typedef int32_t (*iFf_t)(float); +typedef int32_t (*iFd_t)(double); +typedef int32_t (*iFL_t)(uintptr_t); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFh_t)(uintptr_t); +typedef int32_t (*iFH_t)(uintptr_t); +typedef int64_t (*IFf_t)(float); +typedef int64_t (*IFd_t)(double); +typedef uint32_t (*uFv_t)(void); +typedef uint32_t (*uFu_t)(uint32_t); +typedef uint32_t (*uFU_t)(uint64_t); +typedef uint64_t (*UFs_t)(void*); +typedef float (*fFf_t)(float); +typedef double (*dFv_t)(void); +typedef double (*dFd_t)(double); +typedef intptr_t (*lFi_t)(int32_t); +typedef intptr_t (*lFp_t)(void*); +typedef uintptr_t (*LFv_t)(void); +typedef uintptr_t (*LFL_t)(uintptr_t); +typedef void* (*pFu_t)(uint32_t); +typedef void* (*pFL_t)(uintptr_t); +typedef void* (*pFp_t)(void*); +typedef uintptr_t (*hFv_t)(void); +typedef void* (*aFa_t)(void*); +typedef void (*vFEv_t)(x64emu_t*); +typedef void (*vFEp_t)(x64emu_t*, void*); +typedef int32_t (*iFEv_t)(x64emu_t*); +typedef int32_t (*iFEi_t)(x64emu_t*, int32_t); +typedef int32_t (*iFEL_t)(x64emu_t*, uintptr_t); +typedef int32_t (*iFEp_t)(x64emu_t*, void*); +typedef int32_t (*iFEh_t)(x64emu_t*, uintptr_t); +typedef int32_t (*iFEO_t)(x64emu_t*, int32_t); +typedef int32_t (*iFii_t)(int32_t, int32_t); +typedef int32_t (*iFiI_t)(int32_t, int64_t); +typedef int32_t (*iFiu_t)(int32_t, uint32_t); +typedef int32_t (*iFip_t)(int32_t, void*); +typedef int32_t (*iFuu_t)(uint32_t, uint32_t); +typedef int32_t (*iFup_t)(uint32_t, void*); +typedef int32_t (*iFli_t)(intptr_t, int32_t); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFhp_t)(uintptr_t, void*); +typedef int32_t (*iFhh_t)(uintptr_t, uintptr_t); +typedef int64_t (*IFII_t)(int64_t, int64_t); +typedef uint32_t (*uFEu_t)(x64emu_t*, uint32_t); +typedef uint32_t (*uFEV_t)(x64emu_t*, void*); +typedef uint32_t (*uFpa_t)(void*, void*); +typedef uint64_t (*UFii_t)(int32_t, int32_t); +typedef uint64_t (*UFUU_t)(uint64_t, uint64_t); +typedef uint64_t (*UFss_t)(void*, void*); +typedef float (*fFif_t)(int32_t, float); +typedef float (*fFfi_t)(float, int32_t); +typedef float (*fFff_t)(float, float); +typedef float (*fFfD_t)(float, long double); +typedef float (*fFfp_t)(float, void*); +typedef double (*dFid_t)(int32_t, double); +typedef double (*dFdi_t)(double, int32_t); +typedef double (*dFdd_t)(double, double); +typedef double (*dFdD_t)(double, long double); +typedef double (*dFdp_t)(double, void*); +typedef uintptr_t (*LFpp_t)(void*, void*); +typedef void* (*pFEv_t)(x64emu_t*); +typedef void* (*pFEp_t)(x64emu_t*, void*); +typedef void* (*pFLL_t)(uintptr_t, uintptr_t); +typedef void* (*aFia_t)(int32_t, void*); +typedef int32_t (*iFHBp__t)(uintptr_t, struct_p_t*); +typedef void (*vFEip_t)(x64emu_t*, int32_t, void*); +typedef void (*vFEpi_t)(x64emu_t*, void*, int32_t); +typedef void (*vFEpu_t)(x64emu_t*, void*, uint32_t); +typedef void (*vFfpp_t)(float, void*, void*); +typedef void (*vFdpp_t)(double, void*, void*); +typedef int32_t (*iFEpi_t)(x64emu_t*, void*, int32_t); +typedef int32_t (*iFEpL_t)(x64emu_t*, void*, uintptr_t); +typedef int32_t (*iFEpp_t)(x64emu_t*, void*, void*); +typedef int32_t (*iFEpV_t)(x64emu_t*, void*, void*); +typedef int32_t (*iFiii_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iFiiI_t)(int32_t, int32_t, int64_t); +typedef int32_t (*iFiiu_t)(int32_t, int32_t, uint32_t); +typedef int32_t (*iFiiO_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iFiII_t)(int32_t, int64_t, int64_t); +typedef int32_t (*iFiuu_t)(int32_t, uint32_t, uint32_t); +typedef int32_t (*iFiLN_t)(int32_t, uintptr_t, ...); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFuii_t)(uint32_t, int32_t, int32_t); +typedef int32_t (*iFuip_t)(uint32_t, int32_t, void*); +typedef int32_t (*iFuui_t)(uint32_t, uint32_t, int32_t); +typedef int32_t (*iFuuu_t)(uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFuLp_t)(uint32_t, uintptr_t, void*); +typedef int32_t (*iFupp_t)(uint32_t, void*, void*); +typedef int32_t (*iFpiu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef int32_t (*iFpOu_t)(void*, int32_t, uint32_t); +typedef int64_t (*IFiIi_t)(int32_t, int64_t, int32_t); +typedef float (*fFfff_t)(float, float, float); +typedef float (*fFffp_t)(float, float, void*); +typedef double (*dFddd_t)(double, double, double); +typedef double (*dFddp_t)(double, double, void*); +typedef void* (*pFEip_t)(x64emu_t*, int32_t, void*); +typedef void* (*pFEpi_t)(x64emu_t*, void*, int32_t); +typedef void* (*pFEpp_t)(x64emu_t*, void*, void*); +typedef void* (*pFppL_t)(void*, void*, uintptr_t); +typedef void* (*pFpOM_t)(void*, int32_t, ...); +typedef uintptr_t (*hFEpp_t)(x64emu_t*, void*, void*); +typedef void* (*aFipa_t)(int32_t, void*, void*); +typedef intptr_t (*lFpBp_i_t)(void*, struct_p_t*, int32_t); +typedef void (*vFEipV_t)(x64emu_t*, int32_t, void*, void*); +typedef void (*vFEppp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFEiiN_t)(x64emu_t*, int32_t, int32_t, ...); +typedef int32_t (*iFEipp_t)(x64emu_t*, int32_t, void*, void*); +typedef int32_t (*iFELup_t)(x64emu_t*, uintptr_t, uint32_t, void*); +typedef int32_t (*iFEpip_t)(x64emu_t*, void*, int32_t, void*); +typedef int32_t (*iFEpup_t)(x64emu_t*, void*, uint32_t, void*); +typedef int32_t (*iFEppu_t)(x64emu_t*, void*, void*, uint32_t); +typedef int32_t (*iFEppL_t)(x64emu_t*, void*, void*, uintptr_t); +typedef int32_t (*iFEppp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFiiII_t)(int32_t, int32_t, int64_t, int64_t); +typedef int32_t (*iFiuui_t)(int32_t, uint32_t, uint32_t, int32_t); +typedef uintptr_t (*LFpLLh_t)(void*, uintptr_t, uintptr_t, uintptr_t); +typedef void* (*pFEppi_t)(x64emu_t*, void*, void*, int32_t); +typedef void* (*pFEppp_t)(x64emu_t*, void*, void*, void*); +typedef void* (*pFppuL_t)(void*, void*, uint32_t, uintptr_t); +typedef void* (*pFppLL_t)(void*, void*, uintptr_t, uintptr_t); +typedef int32_t (*iFEppiV_t)(x64emu_t*, void*, void*, int32_t, void*); +typedef int32_t (*iFEpppi_t)(x64emu_t*, void*, void*, void*, int32_t); +typedef int32_t (*iFiLLLL_t)(int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFEBh_ppp_t)(x64emu_t*, struct_h_t*, void*, void*, void*); +typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); + +#if defined(ANDROID) +typedef void* (*pFv_t)(void); +typedef void (*vFEpppp_t)(x64emu_t*, void*, void*, void*, void*); +#endif + +#if defined(HAVE_LD80BITS) +typedef long double (*DFD_t)(long double); +typedef long double (*DFDD_t)(long double, long double); +typedef long double (*DFDp_t)(long double, void*); +#endif + +#if !defined(HAVE_LD80BITS) +typedef double (*KFK_t)(double); +typedef double (*KFKK_t)(double, double); +typedef double (*KFKp_t)(double, void*); +#endif + +void vFv_32(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); } +void vFi_32(x64emu_t *emu, uintptr_t fcn) { vFi_t fn = (vFi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4)); } +void vFu_32(x64emu_t *emu, uintptr_t fcn) { vFu_t fn = (vFu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4)); } +void vFp_32(x64emu_t *emu, uintptr_t fcn) { vFp_t fn = (vFp_t)fcn; fn(from_ptriv(R_ESP + 4)); } +void vFA_32(x64emu_t *emu, uintptr_t fcn) { vFA_t fn = (vFA_t)fcn; fn(from_locale_d(from_ptri(ptr_t, R_ESP + 4))); } +void iFv_32(x64emu_t *emu, uintptr_t fcn) { iFv_t fn = (iFv_t)fcn; R_EAX = fn(); } +void iFi_32(x64emu_t *emu, uintptr_t fcn) { iFi_t fn = (iFi_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4)); } +void iFI_32(x64emu_t *emu, uintptr_t fcn) { iFI_t fn = (iFI_t)fcn; R_EAX = fn(from_ptri(int64_t, R_ESP + 4)); } +void iFu_32(x64emu_t *emu, uintptr_t fcn) { iFu_t fn = (iFu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4)); } +void iFf_32(x64emu_t *emu, uintptr_t fcn) { iFf_t fn = (iFf_t)fcn; R_EAX = fn(from_ptri(float, R_ESP + 4)); } +void iFd_32(x64emu_t *emu, uintptr_t fcn) { iFd_t fn = (iFd_t)fcn; R_EAX = fn(from_ptri(double, R_ESP + 4)); } +void iFL_32(x64emu_t *emu, uintptr_t fcn) { iFL_t fn = (iFL_t)fcn; R_EAX = fn(to_ulong(from_ptri(ulong_t, R_ESP + 4))); } +void iFp_32(x64emu_t *emu, uintptr_t fcn) { iFp_t fn = (iFp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4)); } +void iFh_32(x64emu_t *emu, uintptr_t fcn) { iFh_t fn = (iFh_t)fcn; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4))); } +void iFH_32(x64emu_t *emu, uintptr_t fcn) { iFH_t fn = (iFH_t)fcn; R_EAX = fn(from_hash_d(from_ptri(ptr_t, R_ESP + 4))); } +void IFf_32(x64emu_t *emu, uintptr_t fcn) { IFf_t fn = (IFf_t)fcn; ui64_t r; r.i = fn(from_ptri(float, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void IFd_32(x64emu_t *emu, uintptr_t fcn) { IFd_t fn = (IFd_t)fcn; ui64_t r; r.i = fn(from_ptri(double, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void uFv_32(x64emu_t *emu, uintptr_t fcn) { uFv_t fn = (uFv_t)fcn; R_EAX = (uint32_t)fn(); } +void uFu_32(x64emu_t *emu, uintptr_t fcn) { uFu_t fn = (uFu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4)); } +void uFU_32(x64emu_t *emu, uintptr_t fcn) { uFU_t fn = (uFU_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint64_t, R_ESP + 4)); } +void UFs_32(x64emu_t *emu, uintptr_t fcn) { UFs_t fn = (UFs_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void fFf_32(x64emu_t *emu, uintptr_t fcn) { fFf_t fn = (fFf_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4)); fpu_do_push(emu); ST0val = fl; } +void dFv_32(x64emu_t *emu, uintptr_t fcn) { dFv_t fn = (dFv_t)fcn; double db = fn(); fpu_do_push(emu); ST0val = db; } +void dFd_32(x64emu_t *emu, uintptr_t fcn) { dFd_t fn = (dFd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4)); fpu_do_push(emu); ST0val = db; } +void lFi_32(x64emu_t *emu, uintptr_t fcn) { lFi_t fn = (lFi_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4))); } +void lFp_32(x64emu_t *emu, uintptr_t fcn) { lFp_t fn = (lFp_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4))); } +void LFv_32(x64emu_t *emu, uintptr_t fcn) { LFv_t fn = (LFv_t)fcn; R_EAX = to_ulong(fn()); } +void LFL_32(x64emu_t *emu, uintptr_t fcn) { LFL_t fn = (LFL_t)fcn; R_EAX = to_ulong(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)))); } +void pFu_32(x64emu_t *emu, uintptr_t fcn) { pFu_t fn = (pFu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4))); } +void pFL_32(x64emu_t *emu, uintptr_t fcn) { pFL_t fn = (pFL_t)fcn; R_EAX = to_ptrv(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)))); } +void pFp_32(x64emu_t *emu, uintptr_t fcn) { pFp_t fn = (pFp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4))); } +void hFv_32(x64emu_t *emu, uintptr_t fcn) { hFv_t fn = (hFv_t)fcn; R_EAX = to_hash(fn()); } +void aFa_32(x64emu_t *emu, uintptr_t fcn) { aFa_t fn = (aFa_t)fcn; R_EAX = to_locale(fn(from_locale(from_ptri(ptr_t, R_ESP + 4)))); } +void vFEv_32(x64emu_t *emu, uintptr_t fcn) { vFEv_t fn = (vFEv_t)fcn; fn(emu); } +void vFEp_32(x64emu_t *emu, uintptr_t fcn) { vFEp_t fn = (vFEp_t)fcn; fn(emu, from_ptriv(R_ESP + 4)); } +void iFEv_32(x64emu_t *emu, uintptr_t fcn) { iFEv_t fn = (iFEv_t)fcn; R_EAX = fn(emu); } +void iFEi_32(x64emu_t *emu, uintptr_t fcn) { iFEi_t fn = (iFEi_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4)); } +void iFEL_32(x64emu_t *emu, uintptr_t fcn) { iFEL_t fn = (iFEL_t)fcn; R_EAX = fn(emu, to_ulong(from_ptri(ulong_t, R_ESP + 4))); } +void iFEp_32(x64emu_t *emu, uintptr_t fcn) { iFEp_t fn = (iFEp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4)); } +void iFEh_32(x64emu_t *emu, uintptr_t fcn) { iFEh_t fn = (iFEh_t)fcn; R_EAX = fn(emu, from_hash(from_ptri(ptr_t, R_ESP + 4))); } +void iFEO_32(x64emu_t *emu, uintptr_t fcn) { iFEO_t fn = (iFEO_t)fcn; R_EAX = fn(emu, of_convert32(from_ptri(int32_t, R_ESP + 4))); } +void iFii_32(x64emu_t *emu, uintptr_t fcn) { iFii_t fn = (iFii_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFiI_32(x64emu_t *emu, uintptr_t fcn) { iFiI_t fn = (iFiI_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8)); } +void iFiu_32(x64emu_t *emu, uintptr_t fcn) { iFiu_t fn = (iFiu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iFip_32(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFuu_32(x64emu_t *emu, uintptr_t fcn) { iFuu_t fn = (iFuu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iFup_32(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFli_32(x64emu_t *emu, uintptr_t fcn) { iFli_t fn = (iFli_t)fcn; R_EAX = fn(to_long(from_ptri(long_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); } +void iFpi_32(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFpp_32(x64emu_t *emu, uintptr_t fcn) { iFpp_t fn = (iFpp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFhp_32(x64emu_t *emu, uintptr_t fcn) { iFhp_t fn = (iFhp_t)fcn; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void iFhh_32(x64emu_t *emu, uintptr_t fcn) { iFhh_t fn = (iFhh_t)fcn; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_hash(from_ptri(ptr_t, R_ESP + 8))); } +void IFII_32(x64emu_t *emu, uintptr_t fcn) { IFII_t fn = (IFII_t)fcn; ui64_t r; r.i = fn(from_ptri(int64_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void uFEu_32(x64emu_t *emu, uintptr_t fcn) { uFEu_t fn = (uFEu_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptri(uint32_t, R_ESP + 4)); } +void uFEV_32(x64emu_t *emu, uintptr_t fcn) { uFEV_t fn = (uFEV_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptrv(R_ESP + 4)); } +void uFpa_32(x64emu_t *emu, uintptr_t fcn) { uFpa_t fn = (uFpa_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8))); } +void UFii_32(x64emu_t *emu, uintptr_t fcn) { UFii_t fn = (UFii_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UFUU_32(x64emu_t *emu, uintptr_t fcn) { UFUU_t fn = (UFUU_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UFss_32(x64emu_t *emu, uintptr_t fcn) { UFss_t fn = (UFss_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4), from_ptrv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void fFif_32(x64emu_t *emu, uintptr_t fcn) { fFif_t fn = (fFif_t)fcn; float fl = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fFfi_32(x64emu_t *emu, uintptr_t fcn) { fFfi_t fn = (fFfi_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fFff_32(x64emu_t *emu, uintptr_t fcn) { fFff_t fn = (fFff_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fFfD_32(x64emu_t *emu, uintptr_t fcn) { fFfD_t fn = (fFfD_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), LD2localLD(from_ptrv(R_ESP + 8))); fpu_do_push(emu); ST0val = fl; } +void fFfp_32(x64emu_t *emu, uintptr_t fcn) { fFfp_t fn = (fFfp_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptriv(R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void dFid_32(x64emu_t *emu, uintptr_t fcn) { dFid_t fn = (dFid_t)fcn; double db = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8)); fpu_do_push(emu); ST0val = db; } +void dFdi_32(x64emu_t *emu, uintptr_t fcn) { dFdi_t fn = (dFdi_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void dFdd_32(x64emu_t *emu, uintptr_t fcn) { dFdd_t fn = (dFdd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void dFdD_32(x64emu_t *emu, uintptr_t fcn) { dFdD_t fn = (dFdD_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), LD2localLD(from_ptrv(R_ESP + 12))); fpu_do_push(emu); ST0val = db; } +void dFdp_32(x64emu_t *emu, uintptr_t fcn) { dFdp_t fn = (dFdp_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void LFpp_32(x64emu_t *emu, uintptr_t fcn) { LFpp_t fn = (LFpp_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFEv_32(x64emu_t *emu, uintptr_t fcn) { pFEv_t fn = (pFEv_t)fcn; R_EAX = to_ptrv(fn(emu)); } +void pFEp_32(x64emu_t *emu, uintptr_t fcn) { pFEp_t fn = (pFEp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4))); } +void pFLL_32(x64emu_t *emu, uintptr_t fcn) { pFLL_t fn = (pFLL_t)fcn; R_EAX = to_ptrv(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)), to_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void aFia_32(x64emu_t *emu, uintptr_t fcn) { aFia_t fn = (aFia_t)fcn; R_EAX = to_locale(fn(from_ptri(int32_t, R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8)))); } +void iFHBp__32(x64emu_t *emu, uintptr_t fcn) { iFHBp__t fn = (iFHBp__t)fcn; struct_p_t arg_8; R_EAX = fn(from_hash_d(from_ptri(ptr_t, R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFEip_32(x64emu_t *emu, uintptr_t fcn) { vFEip_t fn = (vFEip_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vFEpi_32(x64emu_t *emu, uintptr_t fcn) { vFEpi_t fn = (vFEpi_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void vFEpu_32(x64emu_t *emu, uintptr_t fcn) { vFEpu_t fn = (vFEpu_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void vFfpp_32(x64emu_t *emu, uintptr_t fcn) { vFfpp_t fn = (vFfpp_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFdpp_32(x64emu_t *emu, uintptr_t fcn) { vFdpp_t fn = (vFdpp_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFEpi_32(x64emu_t *emu, uintptr_t fcn) { iFEpi_t fn = (iFEpi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFEpL_32(x64emu_t *emu, uintptr_t fcn) { iFEpL_t fn = (iFEpL_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void iFEpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iFEpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8)); } +void iFiii_32(x64emu_t *emu, uintptr_t fcn) { iFiii_t fn = (iFiii_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFiiI_32(x64emu_t *emu, uintptr_t fcn) { iFiiI_t fn = (iFiiI_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12)); } +void iFiiu_32(x64emu_t *emu, uintptr_t fcn) { iFiiu_t fn = (iFiiu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFiiO_32(x64emu_t *emu, uintptr_t fcn) { iFiiO_t fn = (iFiiO_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), of_convert32(from_ptri(int32_t, R_ESP + 12))); } +void iFiII_32(x64emu_t *emu, uintptr_t fcn) { iFiII_t fn = (iFiII_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16)); } +void iFiuu_32(x64emu_t *emu, uintptr_t fcn) { iFiuu_t fn = (iFiuu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFiLN_32(x64emu_t *emu, uintptr_t fcn) { iFiLN_t fn = (iFiLN_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFipp_32(x64emu_t *emu, uintptr_t fcn) { iFipp_t fn = (iFipp_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFuii_32(x64emu_t *emu, uintptr_t fcn) { iFuii_t fn = (iFuii_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFuip_32(x64emu_t *emu, uintptr_t fcn) { iFuip_t fn = (iFuip_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFuui_32(x64emu_t *emu, uintptr_t fcn) { iFuui_t fn = (iFuui_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFuuu_32(x64emu_t *emu, uintptr_t fcn) { iFuuu_t fn = (iFuuu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFuLp_32(x64emu_t *emu, uintptr_t fcn) { iFuLp_t fn = (iFuLp_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFupp_32(x64emu_t *emu, uintptr_t fcn) { iFupp_t fn = (iFupp_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpiu_32(x64emu_t *emu, uintptr_t fcn) { iFpiu_t fn = (iFpiu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFpip_32(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFppu_32(x64emu_t *emu, uintptr_t fcn) { iFppu_t fn = (iFppu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFppL_32(x64emu_t *emu, uintptr_t fcn) { iFppL_t fn = (iFppL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFppp_32(x64emu_t *emu, uintptr_t fcn) { iFppp_t fn = (iFppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpOu_32(x64emu_t *emu, uintptr_t fcn) { iFpOu_t fn = (iFpOu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12)); } +void IFiIi_32(x64emu_t *emu, uintptr_t fcn) { IFiIi_t fn = (IFiIi_t)fcn; ui64_t r; r.i = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void fFfff_32(x64emu_t *emu, uintptr_t fcn) { fFfff_t fn = (fFfff_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); fpu_do_push(emu); ST0val = fl; } +void fFffp_32(x64emu_t *emu, uintptr_t fcn) { fFffp_t fn = (fFffp_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = fl; } +void dFddd_32(x64emu_t *emu, uintptr_t fcn) { dFddd_t fn = (dFddd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20)); fpu_do_push(emu); ST0val = db; } +void dFddp_32(x64emu_t *emu, uintptr_t fcn) { dFddp_t fn = (dFddp_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptriv(R_ESP + 20)); fpu_do_push(emu); ST0val = db; } +void pFEip_32(x64emu_t *emu, uintptr_t fcn) { pFEip_t fn = (pFEip_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFEpi_32(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void pFEpp_32(x64emu_t *emu, uintptr_t fcn) { pFEpp_t fn = (pFEpp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFppL_32(x64emu_t *emu, uintptr_t fcn) { pFppL_t fn = (pFppL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void pFpOM_32(x64emu_t *emu, uintptr_t fcn) { pFpOM_t fn = (pFpOM_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptriv(R_ESP + 12),from_ptriv(R_ESP + 12 + 4))); } +void hFEpp_32(x64emu_t *emu, uintptr_t fcn) { hFEpp_t fn = (hFEpp_t)fcn; R_EAX = to_hash(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void aFipa_32(x64emu_t *emu, uintptr_t fcn) { aFipa_t fn = (aFipa_t)fcn; R_EAX = to_locale(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_locale(from_ptri(ptr_t, R_ESP + 12)))); } +void lFpBp_i_32(x64emu_t *emu, uintptr_t fcn) { lFpBp_i_t fn = (lFpBp_i_t)fcn; struct_p_t arg_8; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFEipV_32(x64emu_t *emu, uintptr_t fcn) { vFEipV_t fn = (vFEipV_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); } +void vFEppp_32(x64emu_t *emu, uintptr_t fcn) { vFEppp_t fn = (vFEppp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEiiN_32(x64emu_t *emu, uintptr_t fcn) { iFEiiN_t fn = (iFEiiN_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEipp_32(x64emu_t *emu, uintptr_t fcn) { iFEipp_t fn = (iFEipp_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFELup_32(x64emu_t *emu, uintptr_t fcn) { iFELup_t fn = (iFELup_t)fcn; R_EAX = fn(emu, to_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEpip_32(x64emu_t *emu, uintptr_t fcn) { iFEpip_t fn = (iFEpip_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEpup_32(x64emu_t *emu, uintptr_t fcn) { iFEpup_t fn = (iFEpup_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEppu_32(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFEppL_32(x64emu_t *emu, uintptr_t fcn) { iFEppL_t fn = (iFEppL_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFEppp_32(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFiiII_32(x64emu_t *emu, uintptr_t fcn) { iFiiII_t fn = (iFiiII_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20)); } +void iFiuui_32(x64emu_t *emu, uintptr_t fcn) { iFiuui_t fn = (iFiuui_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void LFpLLh_32(x64emu_t *emu, uintptr_t fcn) { LFpLLh_t fn = (LFpLLh_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), to_ulong(from_ptri(ulong_t, R_ESP + 12)), from_hash(from_ptri(ptr_t, R_ESP + 16)))); } +void pFEppi_32(x64emu_t *emu, uintptr_t fcn) { pFEppi_t fn = (pFEppi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFEppp_32(x64emu_t *emu, uintptr_t fcn) { pFEppp_t fn = (pFEppp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFppuL_32(x64emu_t *emu, uintptr_t fcn) { pFppuL_t fn = (pFppuL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), to_ulong(from_ptri(ulong_t, R_ESP + 16)))); } +void pFppLL_32(x64emu_t *emu, uintptr_t fcn) { pFppLL_t fn = (pFppLL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)), to_ulong(from_ptri(ulong_t, R_ESP + 16)))); } +void iFEppiV_32(x64emu_t *emu, uintptr_t fcn) { iFEppiV_t fn = (iFEppiV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptrv(R_ESP + 16)); } +void iFEpppi_32(x64emu_t *emu, uintptr_t fcn) { iFEpppi_t fn = (iFEpppi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFiLLLL_32(x64emu_t *emu, uintptr_t fcn) { iFiLLLL_t fn = (iFiLLLL_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), to_ulong(from_ptri(ulong_t, R_ESP + 12)), to_ulong(from_ptri(ulong_t, R_ESP + 16)), to_ulong(from_ptri(ulong_t, R_ESP + 20))); } +void iFEBh_ppp_32(x64emu_t *emu, uintptr_t fcn) { iFEBh_ppp_t fn = (iFEBh_ppp_t)fcn; struct_h_t arg_4; R_EAX = fn(emu, *(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_h(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFEpippppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } + +#if defined(ANDROID) +void pFv_32(x64emu_t *emu, uintptr_t fcn) { pFv_t fn = (pFv_t)fcn; R_EAX = to_ptrv(fn()); } +void vFEpppp_32(x64emu_t *emu, uintptr_t fcn) { vFEpppp_t fn = (vFEpppp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +#endif + +#if defined(HAVE_LD80BITS) +void DFD_32(x64emu_t *emu, uintptr_t fcn) { DFD_t fn = (DFD_t)fcn; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4))); fpu_do_push(emu); ST0val = ld; } +void DFDD_32(x64emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4)), LD2localLD(from_ptrv(R_ESP + 16))); fpu_do_push(emu); ST0val = ld; } +void DFDp_32(x64emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4)), from_ptriv(R_ESP + 16)); fpu_do_push(emu); ST0val = ld; } +#endif + +#if !defined(HAVE_LD80BITS) +void KFK_32(x64emu_t *emu, uintptr_t fcn) { KFK_t fn = (KFK_t)fcn; double db = fn(FromLD(from_ptrv(R_ESP + 4))); fpu_do_push(emu); ST0val = db; } +void KFKK_32(x64emu_t *emu, uintptr_t fcn) { KFKK_t fn = (KFKK_t)fcn; double db = fn(FromLD(from_ptrv(R_ESP + 4)), FromLD(from_ptrv(R_ESP + 16))); fpu_do_push(emu); ST0val = db; } +void KFKp_32(x64emu_t *emu, uintptr_t fcn) { KFKp_t fn = (KFKp_t)fcn; double db = fn(FromLD(from_ptrv(R_ESP + 4)), from_ptriv(R_ESP + 16)); fpu_do_push(emu); ST0val = db; } +#endif + +void iFEvpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); } +void UFsvvs_32(x64emu_t *emu, uintptr_t fcn) { UFss_t fn = (UFss_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4), from_ptrv(R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; } + +int isRetX87Wrapper32(wrapper_t fun) { + if (fun == &fFf_32) return 1; + if (fun == &dFv_32) return 1; + if (fun == &dFd_32) return 1; + if (fun == &fFif_32) return 1; + if (fun == &fFfi_32) return 1; + if (fun == &fFff_32) return 1; + if (fun == &fFfD_32) return 1; + if (fun == &fFfp_32) return 1; + if (fun == &dFid_32) return 1; + if (fun == &dFdi_32) return 1; + if (fun == &dFdd_32) return 1; + if (fun == &dFdD_32) return 1; + if (fun == &dFdp_32) return 1; + if (fun == &fFfff_32) return 1; + if (fun == &fFffp_32) return 1; + if (fun == &dFddd_32) return 1; + if (fun == &dFddp_32) return 1; +#if defined(HAVE_LD80BITS) + if (fun == &DFD_32) return 1; + if (fun == &DFDD_32) return 1; + if (fun == &DFDp_32) return 1; +#endif +#if !defined(HAVE_LD80BITS) + if (fun == &KFK_32) return 1; + if (fun == &KFKK_32) return 1; + if (fun == &KFKp_32) return 1; +#endif + return 0; +} diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h new file mode 100644 index 00000000..3496a5ea --- /dev/null +++ b/src/wrapped32/generated/wrapper32.h @@ -0,0 +1,200 @@ +/****************************************************************** + * File automatically generated by rebuild_wrappers_32.py (v0.0.1.1) * + ******************************************************************/ +#ifndef __WRAPPER32_H_ +#define __WRAPPER32_H_ +#include <stdint.h> +#include <string.h> + +typedef struct x64emu_s x64emu_t; + +// the generic wrapper pointer functions +typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc); + +// list of defined wrappers +// E = current x64emu struct +// v = void +// C = unsigned byte c = char +// W = unsigned short w = short +// u = uint32, i = int32 +// U = uint64, I = int64 +// L = unsigned long, l = signed long (long is an int with the size of a pointer) +// p = pointer +// h = hash (32<->64bits) +// H = hash (32<->64bits) that will be deleted from hashmaps +// a = locale +// A = locale that will be deleted from hashmaps +// f = float, d = double, D = long double, K = fake long double +// V = vaargs, s = address on the stack (doesn't move forward the pointer) +// O = libc O_ flags bitfield +// o = stdout +// S = _IO_2_1_stdXXX_ pointer (or FILE*) +// 2 = struct of 2 uint +// N = ... automatically sending 1 arg +// M = ... automatically sending 2 args +// P = Vulkan struct pointer +// s..._ = pointer to read-only structure +// B..._ = pointer to write-only structure +// b..._ = pointer to read-write structure + +void vFv_32(x64emu_t *emu, uintptr_t fnc); +void vFi_32(x64emu_t *emu, uintptr_t fnc); +void vFu_32(x64emu_t *emu, uintptr_t fnc); +void vFp_32(x64emu_t *emu, uintptr_t fnc); +void vFA_32(x64emu_t *emu, uintptr_t fnc); +void iFv_32(x64emu_t *emu, uintptr_t fnc); +void iFi_32(x64emu_t *emu, uintptr_t fnc); +void iFI_32(x64emu_t *emu, uintptr_t fnc); +void iFu_32(x64emu_t *emu, uintptr_t fnc); +void iFf_32(x64emu_t *emu, uintptr_t fnc); +void iFd_32(x64emu_t *emu, uintptr_t fnc); +void iFL_32(x64emu_t *emu, uintptr_t fnc); +void iFp_32(x64emu_t *emu, uintptr_t fnc); +void iFh_32(x64emu_t *emu, uintptr_t fnc); +void iFH_32(x64emu_t *emu, uintptr_t fnc); +void IFf_32(x64emu_t *emu, uintptr_t fnc); +void IFd_32(x64emu_t *emu, uintptr_t fnc); +void uFv_32(x64emu_t *emu, uintptr_t fnc); +void uFu_32(x64emu_t *emu, uintptr_t fnc); +void uFU_32(x64emu_t *emu, uintptr_t fnc); +void UFs_32(x64emu_t *emu, uintptr_t fnc); +void fFf_32(x64emu_t *emu, uintptr_t fnc); +void dFv_32(x64emu_t *emu, uintptr_t fnc); +void dFd_32(x64emu_t *emu, uintptr_t fnc); +void lFi_32(x64emu_t *emu, uintptr_t fnc); +void lFp_32(x64emu_t *emu, uintptr_t fnc); +void LFv_32(x64emu_t *emu, uintptr_t fnc); +void LFL_32(x64emu_t *emu, uintptr_t fnc); +void pFu_32(x64emu_t *emu, uintptr_t fnc); +void pFL_32(x64emu_t *emu, uintptr_t fnc); +void pFp_32(x64emu_t *emu, uintptr_t fnc); +void hFv_32(x64emu_t *emu, uintptr_t fnc); +void aFa_32(x64emu_t *emu, uintptr_t fnc); +void vFEv_32(x64emu_t *emu, uintptr_t fnc); +void vFEp_32(x64emu_t *emu, uintptr_t fnc); +void iFEv_32(x64emu_t *emu, uintptr_t fnc); +void iFEi_32(x64emu_t *emu, uintptr_t fnc); +void iFEL_32(x64emu_t *emu, uintptr_t fnc); +void iFEp_32(x64emu_t *emu, uintptr_t fnc); +void iFEh_32(x64emu_t *emu, uintptr_t fnc); +void iFEO_32(x64emu_t *emu, uintptr_t fnc); +void iFii_32(x64emu_t *emu, uintptr_t fnc); +void iFiI_32(x64emu_t *emu, uintptr_t fnc); +void iFiu_32(x64emu_t *emu, uintptr_t fnc); +void iFip_32(x64emu_t *emu, uintptr_t fnc); +void iFuu_32(x64emu_t *emu, uintptr_t fnc); +void iFup_32(x64emu_t *emu, uintptr_t fnc); +void iFli_32(x64emu_t *emu, uintptr_t fnc); +void iFpi_32(x64emu_t *emu, uintptr_t fnc); +void iFpp_32(x64emu_t *emu, uintptr_t fnc); +void iFhp_32(x64emu_t *emu, uintptr_t fnc); +void iFhh_32(x64emu_t *emu, uintptr_t fnc); +void IFII_32(x64emu_t *emu, uintptr_t fnc); +void uFEu_32(x64emu_t *emu, uintptr_t fnc); +void uFEV_32(x64emu_t *emu, uintptr_t fnc); +void uFpa_32(x64emu_t *emu, uintptr_t fnc); +void UFii_32(x64emu_t *emu, uintptr_t fnc); +void UFUU_32(x64emu_t *emu, uintptr_t fnc); +void UFss_32(x64emu_t *emu, uintptr_t fnc); +void fFif_32(x64emu_t *emu, uintptr_t fnc); +void fFfi_32(x64emu_t *emu, uintptr_t fnc); +void fFff_32(x64emu_t *emu, uintptr_t fnc); +void fFfD_32(x64emu_t *emu, uintptr_t fnc); +void fFfp_32(x64emu_t *emu, uintptr_t fnc); +void dFid_32(x64emu_t *emu, uintptr_t fnc); +void dFdi_32(x64emu_t *emu, uintptr_t fnc); +void dFdd_32(x64emu_t *emu, uintptr_t fnc); +void dFdD_32(x64emu_t *emu, uintptr_t fnc); +void dFdp_32(x64emu_t *emu, uintptr_t fnc); +void LFpp_32(x64emu_t *emu, uintptr_t fnc); +void pFEv_32(x64emu_t *emu, uintptr_t fnc); +void pFEp_32(x64emu_t *emu, uintptr_t fnc); +void pFLL_32(x64emu_t *emu, uintptr_t fnc); +void aFia_32(x64emu_t *emu, uintptr_t fnc); +void iFHBp__32(x64emu_t *emu, uintptr_t fnc); +void vFEip_32(x64emu_t *emu, uintptr_t fnc); +void vFEpi_32(x64emu_t *emu, uintptr_t fnc); +void vFEpu_32(x64emu_t *emu, uintptr_t fnc); +void vFfpp_32(x64emu_t *emu, uintptr_t fnc); +void vFdpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpL_32(x64emu_t *emu, uintptr_t fnc); +void iFEpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpV_32(x64emu_t *emu, uintptr_t fnc); +void iFiii_32(x64emu_t *emu, uintptr_t fnc); +void iFiiI_32(x64emu_t *emu, uintptr_t fnc); +void iFiiu_32(x64emu_t *emu, uintptr_t fnc); +void iFiiO_32(x64emu_t *emu, uintptr_t fnc); +void iFiII_32(x64emu_t *emu, uintptr_t fnc); +void iFiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFiLN_32(x64emu_t *emu, uintptr_t fnc); +void iFipp_32(x64emu_t *emu, uintptr_t fnc); +void iFuii_32(x64emu_t *emu, uintptr_t fnc); +void iFuip_32(x64emu_t *emu, uintptr_t fnc); +void iFuui_32(x64emu_t *emu, uintptr_t fnc); +void iFuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFuLp_32(x64emu_t *emu, uintptr_t fnc); +void iFupp_32(x64emu_t *emu, uintptr_t fnc); +void iFpiu_32(x64emu_t *emu, uintptr_t fnc); +void iFpip_32(x64emu_t *emu, uintptr_t fnc); +void iFpuu_32(x64emu_t *emu, uintptr_t fnc); +void iFppu_32(x64emu_t *emu, uintptr_t fnc); +void iFppL_32(x64emu_t *emu, uintptr_t fnc); +void iFppp_32(x64emu_t *emu, uintptr_t fnc); +void iFpOu_32(x64emu_t *emu, uintptr_t fnc); +void IFiIi_32(x64emu_t *emu, uintptr_t fnc); +void fFfff_32(x64emu_t *emu, uintptr_t fnc); +void fFffp_32(x64emu_t *emu, uintptr_t fnc); +void dFddd_32(x64emu_t *emu, uintptr_t fnc); +void dFddp_32(x64emu_t *emu, uintptr_t fnc); +void pFEip_32(x64emu_t *emu, uintptr_t fnc); +void pFEpi_32(x64emu_t *emu, uintptr_t fnc); +void pFEpp_32(x64emu_t *emu, uintptr_t fnc); +void pFppL_32(x64emu_t *emu, uintptr_t fnc); +void pFpOM_32(x64emu_t *emu, uintptr_t fnc); +void hFEpp_32(x64emu_t *emu, uintptr_t fnc); +void aFipa_32(x64emu_t *emu, uintptr_t fnc); +void lFpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void vFEipV_32(x64emu_t *emu, uintptr_t fnc); +void vFEppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEiiN_32(x64emu_t *emu, uintptr_t fnc); +void iFEipp_32(x64emu_t *emu, uintptr_t fnc); +void iFELup_32(x64emu_t *emu, uintptr_t fnc); +void iFEpip_32(x64emu_t *emu, uintptr_t fnc); +void iFEpup_32(x64emu_t *emu, uintptr_t fnc); +void iFEppu_32(x64emu_t *emu, uintptr_t fnc); +void iFEppL_32(x64emu_t *emu, uintptr_t fnc); +void iFEppp_32(x64emu_t *emu, uintptr_t fnc); +void iFiiII_32(x64emu_t *emu, uintptr_t fnc); +void iFiuui_32(x64emu_t *emu, uintptr_t fnc); +void LFpLLh_32(x64emu_t *emu, uintptr_t fnc); +void pFEppi_32(x64emu_t *emu, uintptr_t fnc); +void pFEppp_32(x64emu_t *emu, uintptr_t fnc); +void pFppuL_32(x64emu_t *emu, uintptr_t fnc); +void pFppLL_32(x64emu_t *emu, uintptr_t fnc); +void iFEppiV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpppi_32(x64emu_t *emu, uintptr_t fnc); +void iFiLLLL_32(x64emu_t *emu, uintptr_t fnc); +void iFEBh_ppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpippppp_32(x64emu_t *emu, uintptr_t fnc); + +#if defined(ANDROID) +void pFv_32(x64emu_t *emu, uintptr_t fnc); +void vFEpppp_32(x64emu_t *emu, uintptr_t fnc); +#endif + +#if defined(HAVE_LD80BITS) +void DFD_32(x64emu_t *emu, uintptr_t fnc); +void DFDD_32(x64emu_t *emu, uintptr_t fnc); +void DFDp_32(x64emu_t *emu, uintptr_t fnc); +#endif + +#if !defined(HAVE_LD80BITS) +void KFK_32(x64emu_t *emu, uintptr_t fnc); +void KFKK_32(x64emu_t *emu, uintptr_t fnc); +void KFKp_32(x64emu_t *emu, uintptr_t fnc); +#endif + +void iFEvpV_32(x64emu_t *emu, uintptr_t fnc); +void UFsvvs_32(x64emu_t *emu, uintptr_t fnc); +#endif // __WRAPPER32_H_ diff --git a/src/wrapped32/wrappedcrashhandler.c b/src/wrapped32/wrappedcrashhandler.c new file mode 100755 index 00000000..ed9b3b1e --- /dev/null +++ b/src/wrapped32/wrappedcrashhandler.c @@ -0,0 +1,32 @@ +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +static const char* crashhandlerName = "crashhandler.so"; +#define LIBNAME crashhandler + +#define PRE_INIT \ + if(!box64_steam) \ + return -1; \ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\ + else + + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedcrashhandler_private.h b/src/wrapped32/wrappedcrashhandler_private.h new file mode 100755 index 00000000..52ed57d6 --- /dev/null +++ b/src/wrapped32/wrappedcrashhandler_private.h @@ -0,0 +1,49 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh.... +#endif + +//GO(Breakpad_SetSteamID, +//DATAB(__bss_start, +//GO(CreateInterface, +//DATAB(_edata, +//DATAB(_end, +//GO(_fini, +//GO(_init, +//GO(SteamRealPath, +//GO(__wrap_access, +//GO(__wrap_chmod, +//GO(__wrap_chown, +//GO(__wrap_dlmopen, +//GO(__wrap_dlopen, +//GO(__wrap_fopen, +//GO(__wrap_fopen64, +//GO(__wrap_freopen, +//GO(__wrap_lchown, +//GO(__wrap_link, +//GO(__wrap_lstat, +//GO(__wrap_lstat64, +//GO(__wrap___lxstat, +//GO(__wrap___lxstat64, +//GO(__wrap_mkdir, +//GO(__wrap_mkfifo, +//GO(__wrap_mknod, +//GO(__wrap_mount, +//GO(__wrap_open, +//GO(__wrap_open64, +//GO(__wrap_opendir, +//GO(__wrap_rename, +//GO(__wrap_rmdir, +//GO(__wrap_scandir, +//GO(__wrap_scandir64, +//GO(__wrap_stat, +//GO(__wrap_stat64, +//GO(__wrap_statfs, +//GO(__wrap_statfs64, +//GO(__wrap_statvfs, +//GO(__wrap_statvfs64, +//GO(__wrap_symlink, +//GO(__wrap_unlink, +//GO(__wrap_utime, +//GO(__wrap_utimes, +//GO(__wrap___xstat, +//GO(__wrap___xstat64, diff --git a/src/wrapped32/wrappedldlinux.c b/src/wrapped32/wrappedldlinux.c new file mode 100755 index 00000000..f0c8bf89 --- /dev/null +++ b/src/wrapped32/wrappedldlinux.c @@ -0,0 +1,58 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "elfloader.h" +#include "box32context.h" + +typedef struct my32_tls_s { + int i; + uint32_t o; +} my32_tls_t; + +EXPORT void* my32___tls_get_addr(x64emu_t* emu, void* p) +{ + my32_tls_t *t = (my32_tls_t*)p; + return GetDTatOffset(emu->context, t->i, t->o); +} + +EXPORT void* my32____tls_get_addr(x64emu_t* emu) +{ + // the GNU version (with 3 '_') use register for the parameter! + my32_tls_t *t = (my32_tls_t*)from_ptrv(R_EAX); + return GetDTatOffset(emu->context, t->i, t->o); +} + +EXPORT ptr_t my32___libc_stack_end; +static void stSetup32(box64context_t* context) +{ + my32___libc_stack_end = to_ptrv(context->stack); // is this the end, or should I add stasz? +} + +// don't try to load the actual ld-linux (because name is variable), just use box64 itself, as it's linked to ld-linux +static const char* ldlinuxName = "ld-linux.so.3"; +#define LIBNAME ldlinux + +// fake (ignored) _r_data structure +EXPORT void* my32__r_debug[5]; + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_INIT \ + stSetup32(box64); \ + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedldlinux_private.h b/src/wrapped32/wrappedldlinux_private.h new file mode 100755 index 00000000..cfff7731 --- /dev/null +++ b/src/wrapped32/wrappedldlinux_private.h @@ -0,0 +1,25 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// _dl_allocate_tls +// _dl_allocate_tls_init +// _dl_argv //type B +// _dl_cache_libcmp +// _dl_deallocate_tls +// _dl_debug_state +// _dl_get_tls_static_info +// _dl_make_stack_executable +// _dl_mcount +// _dl_rtld_di_serinfo +// _dl_tls_setup +DATA(__libc_enable_secure, 4) +DATA(__libc_stack_end, 4) +DATA(__pointer_chk_guard, 4) +DATAM(_r_debug, 20) //type B +DATA(_rtld_global, 4) +DATA(_rtld_global_ro, 4) +DATA(__stack_chk_guard, 4) +// defini dans glibc/sysdeps/i386/dl-tls.h +GOM(___tls_get_addr, pFEv) //the parameter tls_index is in a register (EAX?) +GOM(__tls_get_addr, pFEp) //same, but the parameter is in the stack diff --git a/src/wrapped32/wrappedlib_init32.h b/src/wrapped32/wrappedlib_init32.h new file mode 100644 index 00000000..65736fa2 --- /dev/null +++ b/src/wrapped32/wrappedlib_init32.h @@ -0,0 +1,325 @@ +#ifndef LIBNAME +#error Meh +#endif + +#include "debug.h" +#include "librarian/library_inner.h" + +#define FUNC3(M,N) wrapped##M##N +#define FUNC2(M,N) FUNC3(M,N) +#define FUNC(N) FUNC2(LIBNAME,N) +#define QUOTE(M) #M +#define PRIVATE2(P) QUOTE(wrapped##P##_private.h) +#define PRIVATE(P) PRIVATE2(P) +#define MAPNAME3(N,M) N##M +#define MAPNAME2(N,M) MAPNAME3(N,M) +#define MAPNAME(N) MAPNAME2(LIBNAME,N) + +// prepare the maps +#define _DOIT(P,Q) QUOTE(generated/wrapped##P##Q.h) +#define DOIT(P,Q) _DOIT(P,Q) +#include DOIT(LIBNAME,defs32) + +// regular symbol mapped to itself +#define GO(N, W) +// regular symbol mapped to itself, but weak +#define GOW(N, W) +// symbol mapped to my32_symbol +#define GOM(N, W) +// symbol mapped to my32_symbol, but weak +#define GOWM(N, W) +// regular symbol mapped to itself, that returns a structure +#define GOS(N, W) +// symbol mapped to another one +#define GO2(N, W, O) +// weak symbol mapped to another one +#define GOW2(N, W, O) +// data +#define DATA(N, S) +// data, Weak (type V) +#define DATAV(N, S) +// data, Uninitialized (type B) +#define DATAB(N, S) +// data, "my32_" type +#define DATAM(N, S) + +// #define the 4 maps first +#undef GO +#undef GOW +#ifdef STATICBUILD +#define GO(N, W) {#N, W##_32, 0, &N}, +#define GOW(N, W) {#N, W##_32, 1, &N}, +#else +#define GO(N, W) {#N, W##_32, 0}, +#define GOW(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(symbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GO +#undef GOW +#undef GOM +#undef GOWM +#define GO(N, W) +#define GOW(N, W) +#ifdef STATICBUILD +#define GOM(N, W) {#N, W##_32, 0, &my32_##N}, +#define GOWM(N, W) {#N, W##_32, 1, &my32_##N}, +#else +#define GOM(N, W) {#N, W##_32, 0}, +#define GOWM(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(mysymbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GOM +#undef GOWM +#undef GOS +#define GOM(N, W) +#define GOWM(N, W) +#ifdef STATICBUILD +#define GOS(N, W) {#N, W##_32, 0, &my32_##N}, +#else +#define GOS(N, W) {#N, W##_32, 0}, +#endif +static const map_onesymbol_t MAPNAME(stsymbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GOS +#define GOS(N, W) +#undef GO2 +#undef GOW2 +#ifdef STATICBUILD +#define GO2(N, W, O) {#N, W##_32, 0, #O, &O}, +#define GOW2(N, W, O) {#N, W##_32, 1, #O, &O}, +#else +#define GO2(N, W, O) {#N, W##_32, 0, #O}, +#define GOW2(N, W, O) {#N, W##_32, 1, #O}, +#endif +static const map_onesymbol2_t MAPNAME(symbol2map)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GO2 +#define GO2(N, W, O) +#undef GOW2 +#define GOW2(N, W, O) +#undef DATA +#undef DATAV +#undef DATAB +#ifdef STATICBUILD +#define DATA(N, S) {#N, S, 0, (void*)&N}, +#define DATAV(N, S) {#N, S, 1, (void*)&N}, +#define DATAB(N, S) {#N, S, 0, (void*)&N}, +#else +#define DATA(N, S) {#N, S, 0}, +#define DATAV(N, S) {#N, S, 1}, +#define DATAB(N, S) {#N, S, 0}, +#endif +static const map_onedata_t MAPNAME(datamap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef DATA +#undef DATAV +#undef DATAB +#define DATA(N, S) +#define DATAV(N, S) +#define DATAB(N, S) +#undef DATAM +#ifdef STATICBUILD +#define DATAM(N, S) {#N, S, 0, &my32_##N}, +#else +#define DATAM(N, S) {#N, S, 0}, +#endif +static const map_onedata_t MAPNAME(mydatamap)[] = { + #include PRIVATE(LIBNAME) +}; + +#undef GO +#undef GOW +#undef GOM +#undef GOWM +#undef GO2 +#undef GOS +#undef DATA +#undef DATAV +#undef DATAB +#undef DATAM + +#include DOIT(LIBNAME,undefs32) +#undef DOIT +#undef _DOIT + +#if !defined(ALTNAME) && defined(ALTNAME2) +#error Please define ALTNAME before defining ALTNAME2 +#endif + +#define COUNT_NARGS(...) COUNT_NARGS_AUX(__VA_ARGS__, 5, 4, 3, 2, 1, 0) +#define COUNT_NARGS_AUX(_1, _2, _3, _4, _5, n, ...) COUNT_NARGS_AUX##n(This should not appear, too many libraries) +#define COUNT_NARGS_AUX1(v1, v2) 1 +#define COUNT_NARGS_AUX2(v1, v2) 2 +#define COUNT_NARGS_AUX3(v1, v2) 3 +#define COUNT_NARGS_AUX4(v1, v2) 4 +#define COUNT_NARGS_AUX5(v1, v2) 5 + +int FUNC(_init32)(library_t* lib, box64context_t* box64) +{ + (void)box64; + + // Init first + free(lib->path); lib->path=NULL; +#ifdef PRE_INIT + PRE_INIT +#endif + { +#ifndef STATICBUILD + lib->w.lib = dlopen(MAPNAME(Name), RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) { +#ifdef ALTNAME + lib->w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) { +#ifdef ALTNAME2 + lib->w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) +#endif +#endif + return -1; +#ifdef ALTNAME +#ifdef ALTNAME2 + else lib->path = box_strdup(ALTNAME2); +#endif + } else lib->path = box_strdup(ALTNAME); +#endif + } else lib->path = box_strdup(MAPNAME(Name)); +#else + lib->path = box_strdup(MAPNAME(Name)); +#endif + } + WrappedLib_CommonInit(lib); + + khint_t k; + int ret; + int cnt; + + // populates maps... +#ifdef STATICBUILD +#define DOIT(mapname) \ + cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t); \ + for (int i = 0; i < cnt; ++i) { \ + if (MAPNAME(mapname)[i].weak) { \ + k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.w##mapname, k).resolved = 0; \ + kh_value(lib->w.w##mapname, k).addr = (uintptr_t)MAPNAME(mapname)[i].addr; \ + } else { \ + k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.mapname, k).resolved = 0; \ + kh_value(lib->w.mapname, k).addr = (uintptr_t)MAPNAME(mapname)[i].addr; \ + } \ + if (strchr(MAPNAME(mapname)[i].name, '@')) \ + AddDictionnary(box64->versym, MAPNAME(mapname)[i].name); \ + } +#else +#define DOIT(mapname) \ + cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t); \ + for (int i = 0; i < cnt; ++i) { \ + if (MAPNAME(mapname)[i].weak) { \ + k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.w##mapname, k).resolved = 0; \ + } else { \ + k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.mapname, k).resolved = 0; \ + } \ + if (strchr(MAPNAME(mapname)[i].name, '@')) \ + AddDictionnary(box64->versym, MAPNAME(mapname)[i].name); \ + } +#endif + DOIT(symbolmap) + DOIT(mysymbolmap) +#undef DOIT + cnt = sizeof(MAPNAME(stsymbolmap))/sizeof(map_onesymbol_t); + for (int i=0; i<cnt; ++i) { + k = kh_put(symbolmap, lib->w.stsymbolmap, MAPNAME(stsymbolmap)[i].name, &ret); + kh_value(lib->w.stsymbolmap, k).w = MAPNAME(stsymbolmap)[i].w; + #ifdef STATICBUILD + kh_value(lib->w.stsymbolmap, k).resolved = 1; + kh_value(lib->w.stsymbolmap, k).addr = (uintptr_t)MAPNAME(stsymbolmap)[i].addr; + #else + kh_value(lib->w.stsymbolmap, k).resolved = 0; + #endif + if(strchr(MAPNAME(stsymbolmap)[i].name, '@')) + AddDictionnary(box64->versym, MAPNAME(stsymbolmap)[i].name); + } + cnt = sizeof(MAPNAME(symbol2map))/sizeof(map_onesymbol2_t); + for (int i=0; i<cnt; ++i) { + k = kh_put(symbol2map, lib->w.symbol2map, MAPNAME(symbol2map)[i].name, &ret); + kh_value(lib->w.symbol2map, k).name = MAPNAME(symbol2map)[i].name2; + kh_value(lib->w.symbol2map, k).w = MAPNAME(symbol2map)[i].w; + kh_value(lib->w.symbol2map, k).weak = MAPNAME(symbol2map)[i].weak; + #ifdef STATICBUILD + kh_value(lib->w.symbol2map, k).resolved = 1; + kh_value(lib->w.symbol2map, k).addr = (uintptr_t)MAPNAME(symbol2map)[i].addr; + #else + kh_value(lib->w.symbol2map, k).resolved = 0; + #endif + if(strchr(MAPNAME(symbol2map)[i].name, '@')) + AddDictionnary(box64->versym, MAPNAME(symbol2map)[i].name); + } + cnt = sizeof(MAPNAME(datamap))/sizeof(map_onedata_t); + for (int i=0; i<cnt; ++i) { + if(MAPNAME(datamap)[i].weak) { + k = kh_put(datamap, lib->w.wdatamap, MAPNAME(datamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.wdatamap, k).size = MAPNAME(datamap)[i].sz; + kh_value(lib->w.wdatamap, k).addr = (uintptr_t)MAPNAME(datamap)[i].addr; + #else + kh_value(lib->w.wdatamap, k) = MAPNAME(datamap)[i].sz; + #endif + } else { + k = kh_put(datamap, lib->w.datamap, MAPNAME(datamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.datamap, k).size = MAPNAME(datamap)[i].sz; + kh_value(lib->w.datamap, k).addr = (uintptr_t)MAPNAME(datamap)[i].addr; + #else + kh_value(lib->w.datamap, k) = MAPNAME(datamap)[i].sz; + #endif + } + } + cnt = sizeof(MAPNAME(mydatamap))/sizeof(map_onedata_t); + for (int i=0; i<cnt; ++i) { + k = kh_put(datamap, lib->w.mydatamap, MAPNAME(mydatamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.mydatamap, k).size = MAPNAME(mydatamap)[i].sz; + kh_value(lib->w.mydatamap, k).addr = (uintptr_t)MAPNAME(mydatamap)[i].addr; + #else + kh_value(lib->w.mydatamap, k) = MAPNAME(mydatamap)[i].sz; + #endif + } +#ifdef ALTMY + SETALT(ALTMY); +#endif +#ifdef HAS_MY + getMy(lib); +#endif +#ifdef CUSTOM_INIT + CUSTOM_INIT +#endif +#ifdef NEEDED_LIBS + setNeededLibs(lib, COUNT_NARGS(NEEDED_LIBS), NEEDED_LIBS); +#endif + + return 0; +} + +void FUNC(_fini32)(library_t* lib) +{ +#ifdef HAS_MY + freeMy(); +#endif +#ifdef CUSTOM_FINI + CUSTOM_FINI +#endif + WrappedLib_FinishFini(lib); +} diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c new file mode 100755 index 00000000..952d7f7f --- /dev/null +++ b/src/wrapped32/wrappedlibc.c @@ -0,0 +1,2867 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <stdlib.h> +#include <stdio.h> +#include <stddef.h> +#include <string.h> +#include <wchar.h> +#include <dlfcn.h> +#include <signal.h> +#include <errno.h> +#include <err.h> +#include <stdarg.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/select.h> +#include <unistd.h> +#include <fcntl.h> +#include <glob.h> +#include <ctype.h> +#include <dirent.h> +#include <search.h> +#include <sys/types.h> +#include <poll.h> +#include <sys/epoll.h> +#include <ftw.h> +#include <sys/syscall.h> +#include <sys/socket.h> +#include <sys/utsname.h> +#include <sys/mman.h> +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/sem.h> +#include <setjmp.h> +#include <sys/vfs.h> +#include <spawn.h> +#include <getopt.h> +#include <pwd.h> +#include <locale.h> + +#include "wrappedlibs.h" + +#include "box64stack.h" +#include "x64emu.h" +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "callback.h" +#include "librarian.h" +#include "librarian/library_private.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "myalign32.h" +#include "signals.h" +#include "fileutils.h" +#include "auxval.h" +#include "elfloader.h" +#include "bridge.h" +#include "globalsymbols.h" +#include "box32.h" + +#ifdef PANDORA +#ifndef __NR_preadv +#define __NR_preadv (__NR_SYSCALL_BASE+361) +#endif +#ifndef __NR_pwritev +#define __NR_pwritev (__NR_SYSCALL_BASE+362) +#endif +#ifndef __NR_accept4 +#define __NR_accept4 (__NR_SYSCALL_BASE+366) +#endif +#ifndef __NR_sendmmsg +#define __NR_sendmmsg (__NR_SYSCALL_BASE+374) +#endif +#ifndef __NR_prlimit64 +#define __NR_prlimit64 (__NR_SYSCALL_BASE+369) +#endif +#ifndef __NR_recvmmsg +#define __NR_recvmmsg (__NR_SYSCALL_BASE+365) +#endif +#elif defined(__arm__) +#ifndef __NR_accept4 +#define __NR_accept4 (__NR_SYSCALL_BASE+366) +#endif +#endif + +// need to undef all read / read64 stuffs! +#undef pread +#undef pwrite +#undef lseek +#undef fseeko +#undef ftello +#undef fseekpos +#undef fsetpos +#undef fgetpos +#undef fopen +#undef statfs +#undef fstatfs +#undef freopen +#undef truncate +#undef ftruncate +#undef tmpfile +#undef lockf +#undef fscanf +#undef scanf +#undef sscanf +#undef vfscanf +#undef vscanf +#undef vsscanf +#undef getc +#undef putc +#undef mkstemp +#undef mkstemps +#undef mkostemp +#undef mkostemps +#undef open +#undef openat +#undef read +#undef write +#undef creat +#undef scandir +#undef mmap +#undef fcntl +#undef stat +#undef __xstat +#undef xstat +#undef scandir +#undef ftw +#undef nftw +#undef glob + +#define LIBNAME libc + +static const char* libcName = +#ifdef ANDROID + "libc.so" +#else + "libc.so.6" +#endif + ; + +static library_t* my_lib = NULL; + +extern int fix_64bit_inodes; +#if 0 +typedef int (*iFL_t)(unsigned long); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFpL_t)(void*, size_t); +typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFppi_t)(void*, void*, int32_t); +typedef int32_t (*iFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFiiII_t)(int, int, int64_t, int64_t); +typedef int32_t (*iFiiiV_t)(int, int, int, ...); +typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iFpLpp_t)(void*, size_t, void*, void*); +typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFipuu_t)(int32_t, void*, uint32_t, uint32_t); +typedef int32_t (*iFipiI_t)(int32_t, void*, int32_t, int64_t); +typedef int32_t (*iFipuup_t)(int32_t, void*, uint32_t, uint32_t, void*); +typedef int32_t (*iFiiV_t)(int32_t, int32_t, ...); +typedef void* (*pFp_t)(void*); +typedef void* (*pFu_t)(uint32_t); +#define SUPER() \ + GO(_ITM_addUserCommitAction, iFpup_t) \ + GO(_IO_file_stat, iFpp_t) + +#endif + +//#include "wrappercallback.h" + +#if 0 +// utility functions +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) + +// compare +#define GO(A) \ +static uintptr_t my32_compare_fct_##A = 0; \ +static int my32_compare_##A(void* a, void* b) \ +{ \ + return (int)RunFunction(my_context, my32_compare_fct_##A, 2, a, b);\ +} +SUPER() +#undef GO +static void* findcompareFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare_fct_##A == (uintptr_t)fct) return my32_compare_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare_fct_##A == 0) {my32_compare_fct_##A = (uintptr_t)fct; return my32_compare_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare callback\n"); + return NULL; +} + +// ftw +#define GO(A) \ +static uintptr_t my32_ftw_fct_##A = 0; \ +static int my32_ftw_##A(void* fpath, void* sb, int flag) \ +{ \ + return (int)RunFunction(my_context, my32_ftw_fct_##A, 3, fpath, sb, flag); \ +} +SUPER() +#undef GO +static void* findftwFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_ftw_fct_##A == (uintptr_t)fct) return my32_ftw_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ftw_fct_##A == 0) {my32_ftw_fct_##A = (uintptr_t)fct; return my32_ftw_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc ftw callback\n"); + return NULL; +} + +// ftw64 +#define GO(A) \ +static uintptr_t my32_ftw64_fct_##A = 0; \ +static int my32_ftw64_##A(void* fpath, void* sb, int flag) \ +{ \ + struct i386_stat64 i386st; \ + UnalignStat64(sb, &i386st); \ + return (int)RunFunction(my_context, my32_ftw64_fct_##A, 3, fpath, &i386st, flag); \ +} +SUPER() +#undef GO +static void* findftw64Fct(void* fct) +{ + if(!fct) return NULL; + #define GO(A) if(my32_ftw64_fct_##A == (uintptr_t)fct) return my32_ftw64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ftw64_fct_##A == 0) {my32_ftw64_fct_##A = (uintptr_t)fct; return my32_ftw64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc ftw64 callback\n"); + return NULL; +} + +// nftw +#define GO(A) \ +static uintptr_t my32_nftw_fct_##A = 0; \ +static int my32_nftw_##A(void* fpath, void* sb, int flag, void* ftwbuff) \ +{ \ + return (int)RunFunction(my_context, my32_nftw_fct_##A, 4, fpath, sb, flag, ftwbuff); \ +} +SUPER() +#undef GO +static void* findnftwFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_nftw_fct_##A == (uintptr_t)fct) return my32_nftw_##A; + SUPER() + #undef GO + #define GO(A) if(my32_nftw_fct_##A == 0) {my32_nftw_fct_##A = (uintptr_t)fct; return my32_nftw_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc nftw callback\n"); + return NULL; +} + +// nftw64 +#define GO(A) \ +static uintptr_t my32_nftw64_fct_##A = 0; \ +static int my32_nftw64_##A(void* fpath, void* sb, int flag, void* ftwbuff) \ +{ \ + struct i386_stat64 i386st; \ + UnalignStat64(sb, &i386st); \ + return (int)RunFunction(my_context, my32_nftw64_fct_##A, 4, fpath, &i386st, flag, ftwbuff); \ +} +SUPER() +#undef GO +static void* findnftw64Fct(void* fct) +{ + if(!fct) return NULL; + #define GO(A) if(my32_nftw64_fct_##A == (uintptr_t)fct) return my32_nftw64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_nftw64_fct_##A == 0) {my32_nftw64_fct_##A = (uintptr_t)fct; return my32_nftw64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc nftw64 callback\n"); + return NULL; +} + +// globerr +#define GO(A) \ +static uintptr_t my32_globerr_fct_##A = 0; \ +static int my32_globerr_##A(void* epath, int eerrno) \ +{ \ + return (int)RunFunction(my_context, my32_globerr_fct_##A, 2, epath, eerrno); \ +} +SUPER() +#undef GO +static void* findgloberrFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_globerr_fct_##A == (uintptr_t)fct) return my32_globerr_##A; + SUPER() + #undef GO + #define GO(A) if(my32_globerr_fct_##A == 0) {my32_globerr_fct_##A = (uintptr_t)fct; return my32_globerr_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc globerr callback\n"); + return NULL; +} +#undef dirent +// filter_dir +#define GO(A) \ +static uintptr_t my32_filter_dir_fct_##A = 0; \ +static int my32_filter_dir_##A(const struct dirent* a) \ +{ \ + return (int)RunFunction(my_context, my32_filter_dir_fct_##A, 1, a); \ +} +SUPER() +#undef GO +static void* findfilter_dirFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_filter_dir_fct_##A == (uintptr_t)fct) return my32_filter_dir_##A; + SUPER() + #undef GO + #define GO(A) if(my32_filter_dir_fct_##A == 0) {my32_filter_dir_fct_##A = (uintptr_t)fct; return my32_filter_dir_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc filter_dir callback\n"); + return NULL; +} +// compare_dir +#define GO(A) \ +static uintptr_t my32_compare_dir_fct_##A = 0; \ +static int my32_compare_dir_##A(const struct dirent* a, const struct dirent* b) \ +{ \ + return (int)RunFunction(my_context, my32_compare_dir_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findcompare_dirFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare_dir_fct_##A == (uintptr_t)fct) return my32_compare_dir_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare_dir_fct_##A == 0) {my32_compare_dir_fct_##A = (uintptr_t)fct; return my32_compare_dir_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare_dir callback\n"); + return NULL; +} + +// filter64 +#define GO(A) \ +static uintptr_t my32_filter64_fct_##A = 0; \ +static int my32_filter64_##A(const struct dirent64* a) \ +{ \ + return (int)RunFunction(my_context, my32_filter64_fct_##A, 1, a); \ +} +SUPER() +#undef GO +static void* findfilter64Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_filter64_fct_##A == (uintptr_t)fct) return my32_filter64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_filter64_fct_##A == 0) {my32_filter64_fct_##A = (uintptr_t)fct; return my32_filter64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc filter64 callback\n"); + return NULL; +} +// compare64 +#define GO(A) \ +static uintptr_t my32_compare64_fct_##A = 0; \ +static int my32_compare64_##A(const struct dirent64* a, const struct dirent64* b) \ +{ \ + return (int)RunFunction(my_context, my32_compare64_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findcompare64Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare64_fct_##A == (uintptr_t)fct) return my32_compare64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare64_fct_##A == 0) {my32_compare64_fct_##A = (uintptr_t)fct; return my32_compare64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare64 callback\n"); + return NULL; +} +// on_exit +#define GO(A) \ +static uintptr_t my32_on_exit_fct_##A = 0; \ +static void my32_on_exit_##A(int a, const void* b) \ +{ \ + RunFunction(my_context, my32_on_exit_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findon_exitFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_on_exit_fct_##A == (uintptr_t)fct) return my32_on_exit_##A; + SUPER() + #undef GO + #define GO(A) if(my32_on_exit_fct_##A == 0) {my32_on_exit_fct_##A = (uintptr_t)fct; return my32_on_exit_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc on_exit callback\n"); + return NULL; +} +#undef SUPER +#endif + +// some my32_XXX declare and defines +int32_t my32___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), + int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), + void (*rtld_fini) (void), void (* stack_end)); // implemented in x64run_private.c +EXPORT void my32___libc_init_first(x64emu_t* emu, int argc, char* arg0, char** b) +{ + // do nothing specific for now + return; +} +uint32_t my32_syscall(x64emu_t *emu); // implemented in x64syscall.c +void EXPORT my32___stack_chk_fail(x64emu_t* emu) +{ + char buff[200]; + #ifdef HAVE_TRACE + sprintf(buff, "%p: Stack is corrupted, aborting (prev IP=%p)\n", (void*)emu->old_ip, (void*)emu->prev2_ip); + #else + sprintf(buff, "%p: Stack is corrupted, aborting\n", (void*)emu->old_ip); + #endif + StopEmu(emu, buff, 1); +} +void EXPORT my32___gmon_start__(x64emu_t *emu) +{ + printf_log(LOG_DEBUG, "__gmon_start__ called (dummy call)\n"); +} +int EXPORT my32___cxa_atexit(x64emu_t* emu, void* p, void* a, void* d) +{ + AddCleanup1Arg(emu, p, a,FindElfAddress(my_context, (uintptr_t)d)); + return 0; +} +void EXPORT my32___cxa_finalize(x64emu_t* emu, void* p) +{ + if(!p) { + // p is null, call (and remove) all Cleanup functions + CallAllCleanup(emu); + return; + } + CallCleanup(emu, p); +} +int EXPORT my32_atexit(x64emu_t* emu, void *p) +{ + AddCleanup(emu, p); + return 0; +} + + +int my32_getcontext(x64emu_t* emu, void* ucp); +int my32_setcontext(x64emu_t* emu, void* ucp); +int my32_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, void* argv); +int my32_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2); + +// All signal and context functions defined in signals.c + +// All fts function defined in myfts.c + +// getauxval implemented in auxval.c + + +// this one is defined in elfloader.c +int my32_dl_iterate_phdr(x64emu_t *emu, void* F, void *data); + +pid_t EXPORT my32_fork(x64emu_t* emu) +{ +/* #if 1 + emu->quit = 1; + emu->fork = 1; + return 0; + #else + return 0; + #endif*/ + // execute atforks prepare functions, in reverse order + for (int i=my_context->atfork_sz-1; i>=0; --i) + if(my_context->atforks[i].prepare) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].prepare, 0); + int type = emu->type; + pid_t v; + v = fork(); + if(type == EMUTYPE_MAIN) + thread_set_emu(emu); + if(v<0) { + printf_log(LOG_NONE, "BOX32: Warning, fork errored... (%d)\n", v); + // error... + } else if(v>0) { + // execute atforks parent functions + for (int i=0; i<my_context->atfork_sz; --i) + if(my_context->atforks[i].parent) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].parent, 0); + + } else /*if(v==0)*/ { + // execute atforks child functions + for (int i=0; i<my_context->atfork_sz; --i) + if(my_context->atforks[i].child) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].child, 0); + } + return v; +} +pid_t EXPORT my32___fork(x64emu_t* emu) __attribute__((alias("my32_fork"))); +pid_t EXPORT my32_vfork(x64emu_t* emu) +{ + #if 1 + emu->quit = 1; + emu->fork = 1; // use regular fork... + return 0; + #else + return 0; + #endif +} + +int EXPORT my32_uname(struct utsname *buf) +{ + //TODO: check sizeof(struct utsname) == 390 + int ret = uname(buf); + strcpy(buf->machine, "x86_64"); + return ret; +} + +// X86_O_RDONLY 0x00 +#define X86_O_WRONLY 0x01 // octal 01 +#define X86_O_RDWR 0x02 // octal 02 +#define X86_O_CREAT 0x40 // octal 0100 +#define X86_O_EXCL 0x80 // octal 0200 +#define X86_O_NOCTTY 0x100 // octal 0400 +#define X86_O_TRUNC 0x200 // octal 01000 +#define X86_O_APPEND 0x400 // octal 02000 +#define X86_O_NONBLOCK 0x800 // octal 04000 +#define X86_O_SYNC 0x101000 // octal 04010000 +#define X86_O_DSYNC 0x1000 // octal 010000 +#define X86_O_RSYNC O_SYNC +#define X86_FASYNC 020000 +#define X86_O_DIRECT 040000 +#define X86_O_LARGEFILE 0100000 +#define X86_O_DIRECTORY 0200000 +#define X86_O_NOFOLLOW 0400000 +#define X86_O_NOATIME 01000000 +#define X86_O_CLOEXEC 02000000 +#define X86_O_PATH 010000000 +#define X86_O_TMPFILE 020200000 + +#ifndef O_TMPFILE +#define O_TMPFILE (020000000 | O_DIRECTORY) +#endif +#ifndef O_PATH +#define O_PATH 010000000 +#endif + +#define SUPER() \ + GO(O_WRONLY) \ + GO(O_RDWR) \ + GO(O_CREAT) \ + GO(O_EXCL) \ + GO(O_NOCTTY) \ + GO(O_TRUNC) \ + GO(O_APPEND) \ + GO(O_NONBLOCK) \ + GO(O_SYNC) \ + GO(O_DSYNC) \ + GO(O_RSYNC) \ + GO(FASYNC) \ + GO(O_DIRECT) \ + GO(O_LARGEFILE) \ + GO(O_TMPFILE) \ + GO(O_DIRECTORY) \ + GO(O_NOFOLLOW) \ + GO(O_NOATIME) \ + GO(O_CLOEXEC) \ + GO(O_PATH) \ + +// x86->arm +int of_convert32(int a) +{ + if(!a || a==-1) return a; + int b=0; + #define GO(A) if((a&X86_##A)==X86_##A) {a&=~X86_##A; b|=A;} + SUPER(); + #undef GO + if(a) { + printf_log(LOG_NONE, "Warning, of_convert32(...) left over 0x%x, converted 0x%x\n", a, b); + } + return a|b; +} + +// arm->x86 +int of_unconvert32(int a) +{ + if(!a || a==-1) return a; + int b=0; + #define GO(A) if((a&A)==A) {a&=~A; b|=X86_##A;} + SUPER(); + #undef GO + if(a) { + printf_log(LOG_NONE, "Warning, of_unconvert32(...) left over 0x%x, converted 0x%x\n", a, b); + } + return a|b; +} +#undef SUPER + +#if 0 +EXPORT void* my32__ZGTtnaX (size_t a) { printf("warning _ZGTtnaX called\n"); return NULL; } +EXPORT void my32__ZGTtdlPv (void* a) { printf("warning _ZGTtdlPv called\n"); } +EXPORT uint8_t my32__ITM_RU1(const uint8_t * a) { printf("warning _ITM_RU1 called\n"); return 0; } +EXPORT uint32_t my32__ITM_RU4(const uint32_t * a) { printf("warning _ITM_RU4 called\n"); return 0; } +EXPORT uint64_t my32__ITM_RU8(const uint64_t * a) { printf("warning _ITM_RU8 called\n"); return 0; } +EXPORT void my32__ITM_memcpyRtWn(void * a, const void * b, size_t c) {printf("warning _ITM_memcpyRtWn called\n"); } +EXPORT void my32__ITM_memcpyRnWt(void * a, const void * b, size_t c) {printf("warning _ITM_memcpyRtWn called\n"); } +#endif +EXPORT void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); +EXPORT void my32__longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); +EXPORT void my32_siglongjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); +EXPORT void my32___longjmp_chk(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); + +//EXPORT int32_t my32_setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p); +//EXPORT int32_t my32__setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) __attribute__((alias("my32_setjmp"))); +//EXPORT int32_t my32___sigsetjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) __attribute__((alias("my32_setjmp"))); +#if 0 +EXPORT void my32_exit(x64emu_t *emu, int32_t status) +{ + R_EAX = (uint32_t)status; + emu->quit = 1; +} +EXPORT void my32__exit(x64emu_t *emu, int32_t status) __attribute__((alias("my32_exit"))); +EXPORT void my32__Exit(x64emu_t *emu, int32_t status) __attribute__((alias("my32_exit"))); +#endif +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack); // align st into mystack according to fmt (for v(f)printf(...)) +typedef int (*iFpp_t)(void*, void*); +typedef int (*iFppp_t)(void*, void*, void*); +typedef int (*iFpupp_t)(void*, uint32_t, void*, void*); +EXPORT int my32_printf(x64emu_t *emu, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vprintf((const char*)fmt, VARARGS_32); +} +EXPORT int my32___printf_chk(x64emu_t *emu, void* fmt, void* b) __attribute__((alias("my32_printf"))); +#if 0 + +EXPORT int my32_vprintf(x64emu_t *emu, void* fmt, void* b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vprintf(fmt, b); + #endif +} +EXPORT int my32___vprintf_chk(x64emu_t *emu, void* fmt, void* b) __attribute__((alias("my32_vprintf"))); + +EXPORT int my32_vfprintf(x64emu_t *emu, void* F, void* fmt, void* b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vfprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + // other platform don't need that + return vfprintf(F, fmt, b); + #endif +} +EXPORT int my32___vfprintf_chk(x64emu_t *emu, void* F, void* fmt, void* b) __attribute__((alias("my32_vfprintf"))); +EXPORT int my32__IO_vfprintf(x64emu_t *emu, void* F, void* fmt, void* b) __attribute__((alias("my32_vfprintf"))); + +EXPORT int my32_dprintf(x64emu_t *emu, int fd, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vdprintf; + return ((iFipp_t)f)(fd, fmt, VARARGS_32); + #else + return vdprintf(fd, (const char*)fmt, (va_list)V); + #endif +} +EXPORT int my32___dprintf_chk(x64emu_t *emu, int fd, void* fmt, void* V) __attribute__((alias("my32_dprintf"))); + +EXPORT int my32_fprintf(x64emu_t *emu, void* F, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vfprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + return vfprintf((FILE*)F, (const char*)fmt, (va_list)V); + #endif +} +EXPORT int my32___fprintf_chk(x64emu_t *emu, void* F, void* fmt, void* V) __attribute__((alias("my32_fprintf"))); + +EXPORT int my32_wprintf(x64emu_t *emu, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vwprintf((const wchar_t*)fmt, (va_list)V); + #endif +} +EXPORT int my32___wprintf_chk(x64emu_t *emu, int flag, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vwprintf((const wchar_t*)fmt, (va_list)V); + #endif +} +EXPORT int my32_fwprintf(x64emu_t *emu, void* F, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vfwprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + // other platform don't need that + return vfwprintf((FILE*)F, (const wchar_t*)fmt, V); + #endif +} +EXPORT int my32___fwprintf_chk(x64emu_t *emu, void* F, void* fmt, void* V) __attribute__((alias("my32_fwprintf"))); + +EXPORT int my32_vfwprintf(x64emu_t *emu, void* F, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vfwprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + return vfwprintf(F, fmt, b); + #endif +} + +EXPORT int my32_vwprintf(x64emu_t *emu, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + void* f = vwprintf; + return ((iFpp_t)f)(fmt, b); + #endif +} + +EXPORT void *my32_div(void *result, int numerator, int denominator) { + *(div_t *)result = div(numerator, denominator); + return result; +} + +EXPORT int my32_snprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsnprintf; + return ((iFpLpp_t)f)(buff, s, fmt, VARARGS_32); + #else + return vsnprintf((char*)buff, s, (char*)fmt, b); + #endif +} +EXPORT int my32___snprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) __attribute__((alias("my32_snprintf"))); + +EXPORT int my32___snprintf_chk(x64emu_t* emu, void* buff, size_t s, int f1, int f2, void * fmt, void * b) { + (void)f1; (void)f2; + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsnprintf; + return ((iFpLpp_t)f)(buff, s, fmt, VARARGS_32); + #else + return vsnprintf((char*)buff, s, (char*)fmt, b); + #endif +} + + +EXPORT int my32_sprintf(x64emu_t* emu, void* buff, void * fmt, void * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsprintf; + return ((iFppp_t)f)(buff, fmt, VARARGS_32); + #else + return vsprintf((char*)buff, (char*)fmt, b); + #endif +} +EXPORT int my32___sprintf_chk(x64emu_t* emu, void* buff, void * fmt, void * b) __attribute__((alias("my32_sprintf"))); + +EXPORT int my32_asprintf(x64emu_t* emu, void** buff, void * fmt, void * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + return ((iFppp_t)f)(buff, fmt, VARARGS_32); + #else + return vasprintf((char**)buff, (char*)fmt, b); + #endif +} +EXPORT int my32___asprintf(x64emu_t* emu, void** buff, void * fmt, void * b) __attribute__((alias("my32_asprintf"))); + +EXPORT int my32_vsprintf(x64emu_t* emu, void* buff, void * fmt, uint32_t * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, VARARGS_32); + return r; + #else + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, b); + return r; + #endif +} +EXPORT int my32___vsprintf_chk(x64emu_t* emu, void* buff, int flags, size_t len, void * fmt, uint32_t * b) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, VARARGS_32); + return r; + #else + void* f = vsprintf; + int r = ((iFppp_t)f)(buff, fmt, b); + return r; + #endif +} + +#ifdef POWERPCLE +EXPORT int my32_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) // probably uneeded to do a GOM, a simple wrap should enough +{ + //myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32_(b); + void* f = vfscanf; + + return ((iFppp_t)f)(stream, fmt, VARARGS_32_(b)); +} + + + +EXPORT int my32_vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) +{ + //myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32_(b); + void* f = vsscanf; + + return ((iFppp_t)f)(stream, fmt, VARARGS_32_(b)); +} + +EXPORT int my32__vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); +EXPORT int my32_sscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); + +EXPORT int my32__IO_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32___isoc99_vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); + +EXPORT int my32___isoc99_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32___isoc99_fscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); + +EXPORT int my32___isoc99_sscanf(x64emu_t* emu, void* stream, void* fmt, void* b) +{ + void* f = sscanf; + PREPARE_VALIST_32; + + return ((iFppp_t)f)(stream, fmt, VARARGS_32); +} +#endif + +EXPORT int my32_vsnprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) { + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vsnprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); + return r; + #else + void* f = vsnprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + return r; + #endif +} +EXPORT int my32___vsnprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my32_vsnprintf"))); +EXPORT int my32___vsnprintf_chk(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my32_vsnprintf"))); + +EXPORT int my32_vasprintf(x64emu_t* emu, void* strp, void* fmt, void* b, va_list V) +{ + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, VARARGS_32); + return r; + #else + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, (uint32_t*)b); + return r; + #endif +} +EXPORT int my32___vasprintf_chk(x64emu_t* emu, void* strp, int flags, void* fmt, void* b, va_list V) +{ + #ifndef NOALIGN + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, VARARGS_32); + return r; + #else + void* f = vasprintf; + int r = ((iFppp_t)f)(strp, fmt, (uint32_t*)b); + return r; + #endif +} + +EXPORT int my32___asprintf_chk(x64emu_t* emu, void* result_ptr, int flags, void* fmt, void* b) +{ + #ifndef NOALIGN + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vasprintf; + return ((iFppp_t)f)(result_ptr, fmt, VARARGS_32); + #else + return vasprintf((char**)result_ptr, (char*)fmt, b); + #endif +} + +EXPORT int my32_vswprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + return r; + #endif +} +EXPORT int my32___vswprintf(x64emu_t* emu, void* buff, uint32_t s, void * fmt, void * b, va_list V) __attribute__((alias("my32_vswprintf"))); +EXPORT int my32___vswprintf_chk(x64emu_t* emu, void* buff, size_t s, int flags, size_t m, void * fmt, void * b, va_list V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(buff, s, fmt, (uint32_t*)b); + return r; + #endif +} + +EXPORT void my32_verr(x64emu_t* emu, int eval, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = verr; + ((vFipp_t)f)(eval, fmt, VARARGS_32); + #else + void* f = verr; + ((vFipp_t)f)(eval, fmt, (uint32_t*)b); + #endif +} + +EXPORT void my32_vwarn(x64emu_t* emu, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vwarn; + ((vFpp_t)f)(fmt, VARARGS_32); + #else + void* f = vwarn; + ((vFpp_t)f)(fmt, (uint32_t*)b); + #endif +} + +EXPORT int my32___swprintf_chk(x64emu_t* emu, void* s, uint32_t n, int32_t flag, uint32_t slen, void* fmt, void * b) +{ + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, b); + return r; + #endif +} +EXPORT int my32_swprintf(x64emu_t* emu, void* s, uint32_t n, void* fmt, void *b) +{ + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, VARARGS_32); + return r; + #else + void* f = vswprintf; + int r = ((iFpupp_t)f)(s, n, fmt, b); + return r; + #endif +} + +EXPORT void my32__ITM_addUserCommitAction(x64emu_t* emu, void* cb, uint32_t b, void* c) +{ + // disabled for now... Are all this _ITM_ stuff really mendatory? + #if 0 + // quick and dirty... Should store the callback to be removed later.... + libc_my32_t *my = (libc_my32_t *)emu->context->libclib->priv.w.p2; + x64emu_t *cbemu = AddCallback(emu, (uintptr_t)cb, 1, c, NULL, NULL, NULL); + my->_ITM_addUserCommitAction(libc1ArgCallback, b, cbemu); + // should keep track of cbemu to remove at some point... + #else + printf("warning _ITM_addUserCommitAction called\n"); + #endif +} +#endif +EXPORT void my32__ITM_registerTMCloneTable(x64emu_t* emu, void* p, uint32_t s) {} +EXPORT void my32__ITM_deregisterTMCloneTable(x64emu_t* emu, void* p) {} + + +struct i386_stat { + uint64_t st_dev; + uint32_t __pad1; + uint32_t st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint32_t __pad2; + int32_t st_size; + int32_t st_blksize; + int32_t st_blocks; + int32_t st_atime_sec; + uint32_t st_atime_nsec; + int32_t st_mtime_sec; + uint32_t st_mtime_nsec; + int32_t st_ctime_sec; + uint32_t st_ctime_nsec; + uint32_t __unused4; + uint32_t __unused5; +} __attribute__((packed)); + +static int FillStatFromStat64(int vers, const struct stat64 *st64, void *st32) +{ + struct i386_stat *i386st = (struct i386_stat *)st32; + + if (vers != 3) + { + errno = EINVAL; + return -1; + } + + i386st->st_dev = st64->st_dev; + i386st->__pad1 = 0; + if (fix_64bit_inodes) + { + i386st->st_ino = st64->st_ino ^ (st64->st_ino >> 32); + } + else + { + i386st->st_ino = st64->st_ino; + if ((st64->st_ino >> 32) != 0) + { + errno = EOVERFLOW; + return -1; + } + } + i386st->st_mode = st64->st_mode; + i386st->st_nlink = st64->st_nlink; + i386st->st_uid = st64->st_uid; + i386st->st_gid = st64->st_gid; + i386st->st_rdev = st64->st_rdev; + i386st->__pad2 = 0; + i386st->st_size = st64->st_size; + if ((i386st->st_size >> 31) != (int32_t)(st64->st_size >> 32)) + { + errno = EOVERFLOW; + return -1; + } + i386st->st_blksize = st64->st_blksize; + i386st->st_blocks = st64->st_blocks; + if ((i386st->st_blocks >> 31) != (int32_t)(st64->st_blocks >> 32)) + { + errno = EOVERFLOW; + return -1; + } + i386st->st_atime_sec = st64->st_atim.tv_sec; + i386st->st_atime_nsec = st64->st_atim.tv_nsec; + i386st->st_mtime_sec = st64->st_mtim.tv_sec; + i386st->st_mtime_nsec = st64->st_mtim.tv_nsec; + i386st->st_ctime_sec = st64->st_ctim.tv_sec; + i386st->st_ctime_nsec = st64->st_ctim.tv_nsec; + i386st->__unused4 = 0; + i386st->__unused5 = 0; + return 0; +} +#if 0 +#ifdef ANDROID +EXPORT int my32_stat(char* path, void* buf) +{ + struct stat64 st; + int r = stat64(path, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_fstat(int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_lstat(char* path, void* buf) +{ + struct stat64 st; + int r = lstat64(path, &st); + UnalignStat64(&st, buf); + return r; +} +#endif + +EXPORT int my32___fxstat(x64emu_t *emu, int vers, int fd, void* buf) +{ + if (vers == 1) + { + static iFiip_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + errno = EINVAL; + return -1; + } + f = (iFiip_t)dlsym(lib->priv.w.lib, "__fxstat"); + } + + return f(vers, fd, buf); + } + struct stat64 st; + int r = fstat64(fd, &st); + if (r) return r; + r = FillStatFromStat64(vers, &st, buf); + return r; +} + +EXPORT int my32___fxstat64(x64emu_t *emu, int vers, int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + //int r = syscall(__NR_stat64, fd, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_stat64(x64emu_t* emu, void* path, void* buf) +{ + struct stat64 st; + int r = stat64(path, &st); + UnalignStat64(&st, buf); + return r; +} +EXPORT int my32_lstat64(x64emu_t* emu, void* path, void* buf) +{ + struct stat64 st; + int r = lstat64(path, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32___xstat(x64emu_t* emu, int v, void* path, void* buf) +{ + if (v == 1) + { + static iFipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + errno = EINVAL; + return -1; + } + f = (iFipp_t)dlsym(lib->priv.w.lib, "__xstat"); + } + + return f(v, path, buf); + } + struct stat64 st; + int r = stat64((const char*)path, &st); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___xstat64(x64emu_t* emu, int v, void* path, void* buf) +{ + struct stat64 st; + int r = stat64((const char*)path, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32___lxstat(x64emu_t* emu, int v, void* name, void* buf) +{ + if (v == 1) + { + static iFipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + errno = EINVAL; + return -1; + } + f = (iFipp_t)dlsym(lib->priv.w.lib, "__lxstat"); + } + + return f(v, name, buf); + } + struct stat64 st; + int r = lstat64((const char*)name, &st); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___lxstat64(x64emu_t* emu, int v, void* name, void* buf) +{ + struct stat64 st; + int r = lstat64((const char*)name, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32___fxstatat(x64emu_t* emu, int v, int d, void* path, void* buf, int flags) +{ + struct stat64 st; + int r = fstatat64(d, path, &st, flags); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___fxstatat64(x64emu_t* emu, int v, int d, void* path, void* buf, int flags) +{ + struct stat64 st; + int r = fstatat64(d, path, &st, flags); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32__IO_file_stat(x64emu_t* emu, void* f, void* buf) +{ + struct stat64 st; + libc_my32_t *my = (libc_my32_t *)emu->context->libclib->priv.w.p2; + int r = my->_IO_file_stat(f, &st); + UnalignStat64(&st, buf); + return r; +} + +EXPORT int my32_fstatfs64(int fd, void* buf) +{ + struct statfs64 st; + int r = fstatfs64(fd, &st); + UnalignStatFS64(&st, buf); + return r; +} + +EXPORT int my32_statfs64(const char* path, void* buf) +{ + struct statfs64 st; + int r = statfs64(path, &st); + UnalignStatFS64(&st, buf); + return r; +} + + +#ifdef ANDROID +typedef int (*__compar_d_fn_t)(const void*, const void*, void*); + +static size_t qsort_r_partition(void* base, size_t size, __compar_d_fn_t compar, void* arg, size_t lo, size_t hi) +{ + void* tmp = malloc(size); + void* pivot = ((char*)base) + lo * size; + size_t i = lo; + for (size_t j = lo; j <= hi; j++) + { + void* base_i = ((char*)base) + i * size; + void* base_j = ((char*)base) + j * size; + if (compar(base_j, pivot, arg) < 0) + { + memcpy(tmp, base_i, size); + memcpy(base_i, base_j, size); + memcpy(base_j, tmp, size); + i++; + } + } + void* base_i = ((char *)base) + i * size; + void* base_hi = ((char *)base) + hi * size; + memcpy(tmp, base_i, size); + memcpy(base_i, base_hi, size); + memcpy(base_hi, tmp, size); + free(tmp); + return i; +} + +static void qsort_r_helper(void* base, size_t size, __compar_d_fn_t compar, void* arg, ssize_t lo, ssize_t hi) +{ + if (lo < hi) + { + size_t p = qsort_r_partition(base, size, compar, arg, lo, hi); + qsort_r_helper(base, size, compar, arg, lo, p - 1); + qsort_r_helper(base, size, compar, arg, p + 1, hi); + } +} + +static void qsort_r(void* base, size_t nmemb, size_t size, __compar_d_fn_t compar, void* arg) +{ + return qsort_r_helper(base, size, compar, arg, 0, nmemb - 1); +} +#endif + +typedef struct compare_r_s { + x64emu_t* emu; + uintptr_t f; + void* data; + int r; +} compare_r_t; + +static int my32_compare_r_cb(void* a, void* b, compare_r_t* arg) +{ + return (int)RunFunctionWithEmu(arg->emu, 0, arg->f, 2+arg->r, a, b, arg->data); +} +EXPORT void my32_qsort(x64emu_t* emu, void* base, size_t nmemb, size_t size, void* fnc) +{ + compare_r_t args; + args.emu = emu; args.f = (uintptr_t)fnc; args.r = 0; args.data = NULL; + qsort_r(base, nmemb, size, (__compar_d_fn_t)my32_compare_r_cb, &args); +} +EXPORT void my32_qsort_r(x64emu_t* emu, void* base, size_t nmemb, size_t size, void* fnc, void* data) +{ + compare_r_t args; + args.emu = emu; args.f = (uintptr_t)fnc; args.r = 1; args.data = data; + qsort_r(base, nmemb, size, (__compar_d_fn_t)my32_compare_r_cb, &args); +} + +EXPORT void* my32_bsearch(x64emu_t* emu, void* key, void* base, size_t nmemb, size_t size, void* fnc) +{ + return bsearch(key, base, nmemb, size, findcompareFct(fnc)); +} + +EXPORT void* my32_lsearch(x64emu_t* emu, void* key, void* base, size_t* nmemb, size_t size, void* fnc) +{ + return lsearch(key, base, nmemb, size, findcompareFct(fnc)); +} +EXPORT void* my32_lfind(x64emu_t* emu, void* key, void* base, size_t* nmemb, size_t size, void* fnc) +{ + return lfind(key, base, nmemb, size, findcompareFct(fnc)); +} + + +struct i386_dirent { + uint32_t d_ino; + int32_t d_off; + uint16_t d_reclen; + uint8_t d_type; + char d_name[256]; +}; + +EXPORT void* my32_readdir(x64emu_t* emu, void* dirp) +{ + if (fix_64bit_inodes) + { + struct dirent64 *dp64 = readdir64((DIR *)dirp); + if (!dp64) return NULL; + uint32_t ino32 = dp64->d_ino ^ (dp64->d_ino >> 32); + int32_t off32 = dp64->d_off; + struct i386_dirent *dp32 = (struct i386_dirent *)&(dp64->d_off); + dp32->d_ino = ino32; + dp32->d_off = off32; + dp32->d_reclen -= 8; + return dp32; + } + else + { + static pFp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return NULL; + f = (pFp_t)dlsym(lib->priv.w.lib, "readdir"); + } + + return f(dirp); + } +} + +EXPORT int32_t my32_readdir_r(x64emu_t* emu, void* dirp, void* entry, void** result) +{ + struct dirent64 d64, *dp64; + if (fix_64bit_inodes && (sizeof(d64.d_name) > 1)) + { + static iFppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + *result = NULL; + return 0; + } + f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir64_r"); + } + + int r = f(dirp, &d64, &dp64); + if (r || !dp64 || !entry) + { + *result = NULL; + return r; + } + + struct i386_dirent *dp32 = (struct i386_dirent *)entry; + int namelen = dp64->d_reclen - offsetof(struct dirent64, d_name); + if (namelen > sizeof(dp32->d_name)) + { + *result = NULL; + return ENAMETOOLONG; + } + + dp32->d_ino = dp64->d_ino ^ (dp64->d_ino >> 32); + dp32->d_off = dp64->d_off; + dp32->d_reclen = namelen + offsetof(struct i386_dirent, d_name); + dp32->d_type = dp64->d_type; + memcpy(dp32->d_name, dp64->d_name, namelen); + *result = dp32; + return 0; + } + else + { + static iFppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + *result = NULL; + return 0; + } + f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir_r"); + } + + return f(dirp, entry, result); + } +} +#endif +static int isProcSelf(const char *path, const char* w) +{ + if(strncmp(path, "/proc/", 6)==0) { + char tmp[64]; + // check if self .... + sprintf(tmp, "/proc/self/%s", w); + if(strcmp((const char*)path, tmp)==0) + return 1; + // check if self PID .... + pid_t pid = getpid(); + sprintf(tmp, "/proc/%d/%s", pid, w); + if(strcmp((const char*)path, tmp)==0) + return 1; + } + return 0; +} + +EXPORT int32_t my32_readlink(x64emu_t* emu, void* path, void* buf, uint32_t sz) +{ + if(isProcSelf((const char*)path, "exe")) { + // special case for self... + return strlen(strncpy((char*)buf, emu->context->fullpath, sz)); + } + return readlink((const char*)path, (char*)buf, sz); +} +#ifndef NOALIGN + +void CreateCPUInfoFile(int fd); +int getNCpu(); +static int isCpuTopology(const char* p) { + if(strstr(p, "/sys/devices/system/cpu/cpu")!=p) + return -1; //nope + if( FileExist(p, -1)) + return -1; //no need to fake it + char buf[512]; + const char* p2 = p + strlen("/sys/devices/system/cpu/cpu"); + int n = 0; + while(*p2>='0' && *p2<='9') { + n = n*10+ *p2 - '0'; + ++p2; + } + if(n>=getNCpu()) // filter for non existing cpu + return -1; + snprintf(buf, 512, "/sys/devices/system/cpu/cpu%d/topology/core_id", n); + if(!strcmp(p, buf)) + return n; + return -1; +} +static void CreateCPUTopologyCoreID(int fd, int cpu) +{ + char buf[512]; + snprintf(buf, 512, "%d\n", cpu); + size_t dummy = write(fd, buf, strlen(buf)); + (void)dummy; +} + + +#ifdef ANDROID +static int shm_open(const char *name, int oflag, mode_t mode) { + return -1; +} +static int shm_unlink(const char *name) { + return -1; +} +#endif +#endif +#define TMP_CPUINFO "box32_tmpcpuinfo" +#define TMP_CPUTOPO "box32_tmpcputopo%d" + +#define TMP_MEMMAP "box32_tmpmemmap" +#define TMP_CMDLINE "box32_tmpcmdline" +EXPORT int32_t my32_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode) +{ + if(isProcSelf((const char*) pathname, "cmdline")) { + // special case for self command line... + #if 0 + char tmpcmdline[200] = {0}; + char tmpbuff[100] = {0}; + sprintf(tmpbuff, "%s/cmdlineXXXXXX", getenv("TMP")?getenv("TMP"):"."); + int tmp = mkstemp(tmpbuff); + int dummy; + if(tmp<0) return open(pathname, flags, mode); + dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + for (int i=1; i<emu->context->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek(tmp, 0, SEEK_SET); + #else + int tmp = shm_open(TMP_CMDLINE, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open(pathname, flags, mode); + shm_unlink(TMP_CMDLINE); // remove the shm file, but it will still exist because it's currently in use + int dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + (void)dummy; + for (int i=1; i<emu->context->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek(tmp, 0, SEEK_SET); + #endif + return tmp; + } + if(isProcSelf((const char*)pathname, "exe")) { + return open(emu->context->fullpath, flags, mode); + } + #ifndef NOALIGN + if(strcmp((const char*)pathname, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open(pathname, flags, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + if(isCpuTopology((const char*)pathname)!=-1) { + int n = isCpuTopology((const char*)pathname); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open(pathname, flags, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + #endif + int ret = open(pathname, flags, mode); + return ret; +} +EXPORT int32_t my32___open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode) __attribute__((alias("my32_open"))); + +#ifdef DYNAREC +static int hasDBFromAddress(uintptr_t addr) +{ + int idx = (addr>>DYNAMAP_SHIFT); + return getDB(idx)?1:0; +} +#endif + +EXPORT int32_t my32_read(int fd, void* buf, uint32_t count) +{ + int ret = read(fd, buf, count); +#ifdef DYNAREC + if(ret!=count && ret>0) { + // continue reading... + void* p = buf+ret; + if(hasDBFromAddress((uintptr_t)p)) { + // allow writing the whole block (this happens with HalfLife, libMiles load code directly from .mix and other file like that) + unprotectDB((uintptr_t)p, count-ret, 1); + int l; + do { + l = read(fd, p, count-ret); + if(l>0) { + p+=l; ret+=l; + } + } while(l>0); + } + } +#endif + return ret; +} + +EXPORT int32_t my32_open64(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode) +{ + if(isProcSelf((const char*)pathname, "cmdline")) { + // special case for self command line... + #if 0 + char tmpcmdline[200] = {0}; + char tmpbuff[100] = {0}; + sprintf(tmpbuff, "%s/cmdlineXXXXXX", getenv("TMP")?getenv("TMP"):"."); + int tmp = mkstemp64(tmpbuff); + int dummy; + if(tmp<0) return open64(pathname, flags, mode); + dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + for (int i=1; i<emu->context->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek64(tmp, 0, SEEK_SET); + #else + int tmp = shm_open(TMP_CMDLINE, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, flags, mode); + shm_unlink(TMP_CMDLINE); // remove the shm file, but it will still exist because it's currently in use + int dummy = write(tmp, emu->context->fullpath, strlen(emu->context->fullpath)+1); + (void)dummy; + for (int i=1; i<emu->context->argc; ++i) + dummy = write(tmp, emu->context->argv[i], strlen(emu->context->argv[i])+1); + lseek(tmp, 0, SEEK_SET); + #endif + return tmp; + } + if(isProcSelf((const char*)pathname, "exe")) { + return open64(emu->context->fullpath, flags, mode); + } + #ifndef NOALIGN + if(strcmp((const char*)pathname, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, flags, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + if(isCpuTopology((const char*)pathname)!=-1) { + int n = isCpuTopology((const char*)pathname); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return open64(pathname, flags, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return tmp; + } + #endif + return open64(pathname, flags, mode); +} + +EXPORT FILE* my32_fopen(x64emu_t* emu, const char* path, const char* mode) +{ + if(isProcSelf(path, "maps")) { + // special case for self memory map + int tmp = shm_open(TMP_MEMMAP, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(TMP_MEMMAP); // remove the shm file, but it will still exist because it's currently in use + CreateMemorymapFile(emu->context, tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + #ifndef NOALIGN + if(strcmp(path, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + if(isCpuTopology(path)!=-1) { + int n = isCpuTopology(path); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode);; + } + #endif + if(isProcSelf(path, "exe")) { + return fopen(emu->context->fullpath, mode); + } + return fopen(path, mode); +} + +EXPORT FILE* my32_fopen64(x64emu_t* emu, const char* path, const char* mode) +{ + if(isProcSelf(path, "maps")) { + // special case for self memory map + int tmp = shm_open(TMP_MEMMAP, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen64(path, mode); // error fallback + shm_unlink(TMP_MEMMAP); // remove the shm file, but it will still exist because it's currently in use + CreateMemorymapFile(emu->context, tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + #ifndef NOALIGN + if(strcmp(path, "/proc/cpuinfo")==0) { + // special case for cpuinfo + int tmp = shm_open(TMP_CPUINFO, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen64(path, mode); // error fallback + shm_unlink(TMP_CPUINFO); // remove the shm file, but it will still exist because it's currently in use + CreateCPUInfoFile(tmp); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode); + } + if(isCpuTopology(path)!=-1) { + int n = isCpuTopology(path); + char buf[512]; + snprintf(buf, 512, TMP_CPUTOPO, n); + int tmp = shm_open(buf, O_RDWR | O_CREAT, S_IRWXU); + if(tmp<0) return fopen(path, mode); // error fallback + shm_unlink(buf); // remove the shm file, but it will still exist because it's currently in use + CreateCPUTopologyCoreID(tmp, n); + lseek(tmp, 0, SEEK_SET); + return fdopen(tmp, mode);; + } + #endif + if(isProcSelf(path, "exe")) { + return fopen64(emu->context->fullpath, mode); + } + return fopen64(path, mode); +} + +#if 0 +EXPORT int my32_mkstemps64(x64emu_t* emu, char* template, int suffixlen) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "mkstemps64"); + if(f) + return ((iFpi_t)f)(template, suffixlen); + // implement own version... + // TODO: check size of template, and if really XXXXXX is there + char* fname = strdup(template); + do { + strcpy(fname, template); + char num[8]; + sprintf(num, "%06d", rand()%999999); + memcpy(fname+strlen(fname)-suffixlen-6, num, 6); + } while(!FileExist(fname, -1)); + int ret = open64(fname, O_EXCL); + free(fname); + return ret; +} + +EXPORT int32_t my32_ftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd) +{ + static iFppi_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFppi_t)dlsym(lib->priv.w.lib, "ftw"); + } + + return f(pathname, findftwFct(B), nopenfd); +} + +EXPORT int32_t my32_nftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd, int32_t flags) +{ + static iFppii_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFppii_t)dlsym(lib->priv.w.lib, "nftw"); + } + + return f(pathname, findnftwFct(B), nopenfd, flags); +} + +EXPORT void* my32_ldiv(x64emu_t* emu, void* p, int32_t num, int32_t den) +{ + *((ldiv_t*)p) = ldiv(num, den); + return p; +} + +#ifndef NOALIGN +EXPORT int my32_epoll_create(x64emu_t* emu, int size) +{ + return epoll_create(size); +} +EXPORT int my32_epoll_create1(x64emu_t* emu, int flags) +{ + return epoll_create1(flags); +} +EXPORT int32_t my32_epoll_ctl(x64emu_t* emu, int32_t epfd, int32_t op, int32_t fd, void* event) +{ + struct epoll_event _event[1] = {0}; + if(event && (op!=EPOLL_CTL_DEL)) + AlignEpollEvent(_event, event, 1); + return epoll_ctl(epfd, op, fd, event?_event:event); +} +EXPORT int32_t my32_epoll_wait(x64emu_t* emu, int32_t epfd, void* events, int32_t maxevents, int32_t timeout) +{ + struct epoll_event _events[maxevents]; + //AlignEpollEvent(_events, events, maxevents); + int32_t ret = epoll_wait(epfd, events?_events:NULL, maxevents, timeout); + if(ret>0) + UnalignEpollEvent(events, _events, ret); + return ret; +} +#endif + +EXPORT int32_t my32_glob(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) +{ + static iFpipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFpipp_t)dlsym(lib->priv.w.lib, "glob"); + } + + return f(pat, flags, findgloberrFct(errfnc), pglob); +} + +#ifndef ANDROID +EXPORT int32_t my32_glob64(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) +{ + return glob64(pat, flags, findgloberrFct(errfnc), pglob); +} +#endif + +EXPORT int my32_scandir64(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) +{ + return scandir64(dir, namelist, findfilter64Fct(sel), findcompare64Fct(comp)); +} + +EXPORT int my32_scandir(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) +{ + static iFpppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFpppp_t)dlsym(lib->priv.w.lib, "scandir"); + } + + return f(dir, namelist, findfilter_dirFct(sel), findcompare_dirFct(comp)); +} + +EXPORT int my32_ftw64(x64emu_t* emu, void* filename, void* func, int descriptors) +{ + return ftw64(filename, findftw64Fct(func), descriptors); +} + +EXPORT int32_t my32_nftw64(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd, int32_t flags) +{ + return nftw64(pathname, findnftw64Fct(B), nopenfd, flags); +} + +EXPORT int32_t my32_execv(x64emu_t* emu, const char* path, char* const argv[]) +{ + int self = isProcSelf(path, "exe"); + int x86 = FileIsX86ELF(path); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + printf_log(LOG_DEBUG, "execv(\"%s\", %p) is x86=%d\n", path, argv, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(path)>=strlen("wine-preloader") && strcmp(path+strlen(path)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + memcpy(newargv+1, argv+skip_first, sizeof(char*)*(n+1)); + if(self) newargv[1] = emu->context->fullpath; + printf_log(LOG_DEBUG, " => execv(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execv(newargv[0], (char* const*)newargv); + free(newargv); + return ret; + } + return execv(path, argv); +} +#endif +EXPORT int32_t my32_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]) +{ + int self = isProcSelf(path, "exe"); + int x86 = FileIsX86ELF(path); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + // hack to update the environ var if needed + if(envp == my_context->envv && environ) { + envp = environ; + } + printf_log(LOG_DEBUG, "execve(\"%s\", %p, %p) is x86=%d\n", path, argv, envp, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(path)>=strlen("wine-preloader") && strcmp(path+strlen(path)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + memcpy(newargv+1, argv+skip_first, sizeof(char*)*(n+1)); + if(self) newargv[1] = emu->context->fullpath; + printf_log(LOG_DEBUG, " => execve(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execve(newargv[0], (char* const*)newargv, envp); + free(newargv); + return ret; + } + if(!strcmp(path + strlen(path) - strlen("/uname"), "/uname") + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box32 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + return execve(path, argv2, envp); + } + + return execve(path, argv, envp); +} +#if 0 +// execvp should use PATH to search for the program first +EXPORT int32_t my32_execvp(x64emu_t* emu, const char* path, char* const argv[]) +{ + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box32_path); + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + printf_log(LOG_DEBUG, "execvp(\"%s\", %p), IsX86=%d / fullpath=\"%s\"\n", path, argv, x86, fullpath); + free(fullpath); + if (x86 || self) { + // count argv... + int i=0; + while(argv[i]) ++i; + char** newargv = (char**)calloc(i+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for (int j=0; j<i; ++j) + newargv[j+1] = argv[j]; + if(self) newargv[1] = emu->context->fullpath; + printf_log(LOG_DEBUG, " => execvp(\"%s\", %p [\"%s\", \"%s\"...:%d])\n", newargv[0], newargv, newargv[1], i?newargv[2]:"", i); + int ret = execvp(newargv[0], newargv); + free(newargv); + return ret; + } + if((!strcmp(path + strlen(path) - strlen("/uname"), "/uname") || !strcmp(path, "uname")) + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box32 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + return execvp(path, argv2); + } + + // fullpath is gone, so the search will only be on PATH, not on BOX32_PATH (is that an issue?) + return execvp(path, argv); +} + +// execvp should use PATH to search for the program first +EXPORT int32_t my32_posix_spawnp(x64emu_t* emu, pid_t* pid, const char* path, + const posix_spawn_file_actions_t *actions, const posix_spawnattr_t* attrp, char* const argv[], char* const envp[]) +{ + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box32_path); + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = my_context->box64path?FileIsX64ELF(path):0; + printf_log(LOG_DEBUG, "posix_spawnp(%p, \"%s\", %p, %p, %p, %p), IsX86=%d / fullpath=\"%s\"\n", pid, path, actions, attrp, argv, envp, x86, fullpath); + free(fullpath); + if ((x86 || self)) { + // count argv... + int i=0; + while(argv[i]) ++i; + char** newargv = (char**)calloc(i+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for (int j=0; j<i; ++j) + newargv[j+1] = argv[j]; + if(self) newargv[1] = emu->context->fullpath; + printf_log(LOG_DEBUG, " => posix_spawnp(%p, \"%s\", %p, %p, %p [\"%s\", \"%s\"...:%d], %p)\n", pid, newargv[0], actions, attrp, newargv, newargv[1], i?newargv[2]:"", i, envp); + int ret = posix_spawnp(pid, newargv[0], actions, attrp, newargv, envp); + printf_log(LOG_DEBUG, "posix_spawnp returned %d\n", ret); + //free(newargv); + return ret; + } + // fullpath is gone, so the search will only be on PATH, not on BOX32_PATH (is that an issue?) + return posix_spawnp(pid, path, actions, attrp, argv, envp); +} +#endif +EXPORT void my32__Jv_RegisterClasses() {} + +EXPORT int32_t my32___cxa_thread_atexit_impl(x64emu_t* emu, void* dtor, void* obj, void* dso) +{ + printf_log(LOG_INFO, "Warning, call to __cxa_thread_atexit_impl(%p, %p, %p) ignored\n", dtor, obj, dso); + return 0; +} +#if 0 +#ifndef ANDROID +extern void __chk_fail(); +EXPORT unsigned long int my32___fdelt_chk (unsigned long int d) +{ + if (d >= FD_SETSIZE) + __chk_fail (); + + return d / __NFDBITS; +} +#endif + +EXPORT int32_t my32_getrandom(x64emu_t* emu, void* buf, uint32_t buflen, uint32_t flags) +{ + // not always implemented on old linux version... + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "getrandom"); + if(f) + return ((iFpuu_t)f)(buf, buflen, flags); + // do what should not be done, but it's better then nothing.... + FILE * rnd = fopen("/dev/urandom", "rb"); + uint32_t r = fread(buf, 1, buflen, rnd); + fclose(rnd); + return r; +} + +static struct passwd fakepwd = {}; +EXPORT void* my32_getpwuid(x64emu_t* emu, uint32_t uid) +{ + void *ret = NULL; + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "getpwuid"); + if(f) + ret = ((pFu_t)f)(uid); + + // In case of failure, provide a fake one. Evil hack :/ + if (!ret && !fakepwd.pw_name) { + fakepwd.pw_name = strdup("root"); + fakepwd.pw_passwd = strdup("fakehash"); + fakepwd.pw_uid = 0; + fakepwd.pw_gid = 0; + fakepwd.pw_gecos = strdup("root"); + fakepwd.pw_dir = getenv("HOME"); + fakepwd.pw_shell = strdup("/bin/bash"); + } + + return ret ? ret : (void*)&fakepwd; +} + +EXPORT int32_t my32_recvmmsg(x64emu_t* emu, int32_t fd, void* msgvec, uint32_t vlen, uint32_t flags, void* timeout) +{ + // Implemented starting glibc 2.12+ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "recvmmsg"); + if(f) + return ((iFipuup_t)f)(fd, msgvec, vlen, flags, timeout); + // Use the syscall + return syscall(__NR_recvmmsg, fd, msgvec, vlen, flags, timeout); +} + +EXPORT int32_t my32___sendmmsg(x64emu_t* emu, int32_t fd, void* msgvec, uint32_t vlen, uint32_t flags) +{ + // Implemented starting glibc 2.14+ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "__sendmmsg"); + if(f) + return ((iFipuu_t)f)(fd, msgvec, vlen, flags); + // Use the syscall + return syscall(__NR_sendmmsg, fd, msgvec, vlen, flags); +} + +EXPORT int32_t my32___register_atfork(x64emu_t *emu, void* prepare, void* parent, void* child, void* handle) +{ + // this is partly incorrect, because the emulated funcionts should be executed by actual fork and not by my32_atfork... + if(my_context->atfork_sz==my_context->atfork_cap) { + my_context->atfork_cap += 4; + my_context->atforks = (atfork_fnc_t*)realloc(my_context->atforks, my_context->atfork_cap*sizeof(atfork_fnc_t)); + } + my_context->atforks[my_context->atfork_sz].prepare = (uintptr_t)prepare; + my_context->atforks[my_context->atfork_sz].parent = (uintptr_t)parent; + my_context->atforks[my_context->atfork_sz].child = (uintptr_t)child; + my_context->atforks[my_context->atfork_sz].handle = handle; + return 0; +} + +EXPORT uint64_t my32___umoddi3(uint64_t a, uint64_t b) +{ + return a%b; +} +EXPORT uint64_t my32___udivdi3(uint64_t a, uint64_t b) +{ + return a/b; +} +EXPORT int64_t my32___divdi3(int64_t a, int64_t b) +{ + return a/b; +} + +EXPORT int32_t my32___poll_chk(void* a, uint32_t b, int c, int l) +{ + return poll(a, b, c); // no check... +} + +EXPORT int32_t my32_fcntl64(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) +{ + // Implemented starting glibc 2.14+ + library_t* lib = my_lib; + if(!lib) return 0; + iFiiV_t f = dlsym(lib->priv.w.lib, "fcntl64"); + if(b==F_SETFL) + d1 = of_convert32(d1); + if(b==F_GETLK64 || b==F_SETLK64 || b==F_SETLKW64) + { + my32_flock64_t fl; + AlignFlock64(&fl, (void*)d1); + int ret = f?f(a, b, &fl):fcntl(a, b, &fl); + UnalignFlock64((void*)d1, &fl); + return ret; + } + //TODO: check if better to use the syscall or regular fcntl? + //return syscall(__NR_fcntl64, a, b, d1); // should be enough + int ret = f?f(a, b, d1):fcntl(a, b, d1); + + if(b==F_GETFL && ret!=-1) + ret = of_unconvert32(ret); + + return ret; +} + +EXPORT int32_t my32_fcntl(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) +{ + if(b==F_SETFL && d1==0xFFFFF7FF) { + // special case for ~O_NONBLOCK... + int flags = fcntl(a, F_GETFL); + if(flags&X86_O_NONBLOCK) { + flags &= ~O_NONBLOCK; + return fcntl(a, b, flags); + } + return 0; + } + if(b==F_SETFL) + d1 = of_convert32(d1); + if(b==F_GETLK64 || b==F_SETLK64 || b==F_SETLKW64) + { + my32_flock64_t fl; + AlignFlock64(&fl, (void*)d1); + int ret = fcntl(a, b, &fl); + UnalignFlock64((void*)d1, &fl); + return ret; + } + int ret = fcntl(a, b, d1); + if(b==F_GETFL && ret!=-1) + ret = of_unconvert32(ret); + + return ret; +} +EXPORT int32_t my32___fcntl(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) __attribute__((alias("my32_fcntl"))); + +EXPORT int32_t my32_preadv64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_t o) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "preadv64"); + if(f) + return ((iFipiI_t)f)(fd, v, c, o); + return syscall(__NR_preadv, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); +} + +EXPORT int32_t my32_pwritev64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_t o) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "pwritev64"); + if(f) + return ((iFipiI_t)f)(fd, v, c, o); + #ifdef __arm__ + return syscall(__NR_pwritev, fd, v, c, 0, (uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); + // on arm, 64bits args needs to be on even/odd register, so need to put a 0 for aligment + #else + return syscall(__NR_pwritev, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); + #endif +} + +EXPORT int32_t my32_accept4(x64emu_t* emu, int32_t fd, void* a, void* l, int32_t flags) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "accept4"); + if(f) + return ((iFippi_t)f)(fd, a, l, flags); + if(!flags) + return accept(fd, a, l); + return syscall(__NR_accept4, fd, a, l, flags); +} + +EXPORT int32_t my32_fallocate64(int fd, int mode, int64_t offs, int64_t len) +{ + iFiiII_t f = NULL; + static int done = 0; + if(!done) { + library_t* lib = my_lib; + f = (iFiiII_t)dlsym(lib->priv.w.lib, "fallocate64"); + done = 1; + } + if(f) + return f(fd, mode, offs, len); + else + return syscall(__NR_fallocate, fd, mode, (uint32_t)(offs&0xffffffff), (uint32_t)((offs>>32)&0xffffffff), (uint32_t)(len&0xffffffff), (uint32_t)((len>>32)&0xffffffff)); + //return posix_fallocate64(fd, offs, len); +} + +EXPORT int my32_getopt(int argc, char* const argv[], const char *optstring) +{ + int ret = getopt(argc, argv, optstring); + my32_checkGlobalOpt(); + return ret; +} + +EXPORT int my32_getopt_long(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) +{ + int ret = getopt_long(argc, argv, optstring, longopts, longindex); + my32_checkGlobalOpt(); + return ret; +} + +EXPORT int my32_getopt_long_only(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) +{ + int ret = getopt_long_only(argc, argv, optstring, longopts, longindex); + my32_checkGlobalOpt(); + return ret; +} +#endif + +EXPORT struct __processor_model +{ + unsigned int __cpu_vendor; + unsigned int __cpu_type; + unsigned int __cpu_subtype; + unsigned int __cpu_features[1]; +} my32___cpu_model; + +#include "cpu_info.h" +void InitCpuModel() +{ + // some pseudo random cpu info... + my32___cpu_model.__cpu_vendor = VENDOR_INTEL; + my32___cpu_model.__cpu_type = INTEL_PENTIUM_M; + my32___cpu_model.__cpu_subtype = 0; // N/A + my32___cpu_model.__cpu_features[0] = (1<<FEATURE_CMOV) + | (1<<FEATURE_MMX) + | (1<<FEATURE_SSE) + | (1<<FEATURE_SSE2) + | (1<<FEATURE_SSE3) + | (1<<FEATURE_SSSE3) + | (1<<FEATURE_MOVBE) + | (1<<FEATURE_ADX); +} + +EXPORT const unsigned short int *my32___ctype_b; +EXPORT const int32_t *my32___ctype_tolower; +EXPORT const int32_t *my32___ctype_toupper; + +#ifdef ANDROID +static void ctSetup() +{ +} +#else +static void ctSetup() +{ + my32___ctype_b = *(__ctype_b_loc()); + my32___ctype_toupper = *(__ctype_toupper_loc()); + my32___ctype_tolower = *(__ctype_tolower_loc()); +} +#endif + +#if 0 +EXPORT void my32___register_frame_info(void* a, void* b) +{ + // nothing +} +EXPORT void* my32___deregister_frame_info(void* a) +{ + return NULL; +} + +EXPORT void* my32____brk_addr = NULL; +#endif +// longjmp / setjmp +typedef struct jump_buff_i386_s { + uint32_t save_ebx; + uint32_t save_esi; + uint32_t save_edi; + uint32_t save_ebp; + uint32_t save_esp; + uint32_t save_eip; +} jump_buff_i386_t; + +typedef struct __jmp_buf_tag_s { + jump_buff_i386_t __jmpbuf; + int __mask_was_saved; + sigset_t __saved_mask; +} __jmp_buf_tag_t; + +void EXPORT my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) +{ + jump_buff_i386_t *jpbuff = &((__jmp_buf_tag_t*)p)->__jmpbuf; + //restore regs + R_EBX = jpbuff->save_ebx; + R_ESI = jpbuff->save_esi; + R_EDI = jpbuff->save_edi; + R_EBP = jpbuff->save_ebp; + R_ESP = jpbuff->save_esp; + // jmp to saved location, plus restore val to eax + R_EAX = __val; + R_EIP = jpbuff->save_eip; + if(((__jmp_buf_tag_t*)p)->__mask_was_saved) { + sigprocmask(SIG_SETMASK, &((__jmp_buf_tag_t*)p)->__saved_mask, NULL); + } + if(emu->flags.quitonlongjmp) { + emu->flags.longjmp = 1; + emu->quit = 1; + } +} + +EXPORT int32_t my32___sigsetjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int savesigs) +{ + jump_buff_i386_t *jpbuff = &((__jmp_buf_tag_t*)p)->__jmpbuf; + // save the buffer + jpbuff->save_ebx = R_EBX; + jpbuff->save_esi = R_ESI; + jpbuff->save_edi = R_EDI; + jpbuff->save_ebp = R_EBP; + jpbuff->save_esp = R_ESP+4; // include "return address" + jpbuff->save_eip = *(uint32_t*)from_ptr(R_ESP); + if(savesigs) { + if(sigprocmask(SIG_SETMASK, NULL, &((__jmp_buf_tag_t*)p)->__saved_mask)) + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 0; + else + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 1; + } else + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 0; + return 0; +} + +EXPORT int32_t my32__setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) +{ + return my32___sigsetjmp(emu, p, 0); +} +EXPORT int32_t my32_setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) +{ + return my32___sigsetjmp(emu, p, 1); +} +#if 0 +EXPORT void my32___explicit_bzero_chk(x64emu_t* emu, void* dst, uint32_t len, uint32_t dstlen) +{ + memset(dst, 0, len); +} + +EXPORT void* my32_realpath(x64emu_t* emu, void* path, void* resolved_path) +{ + + if(isProcSelf(path, "exe")) { + return realpath(emu->context->fullpath, resolved_path); + } + return realpath(path, resolved_path); +} + +EXPORT int my32_readlinkat(x64emu_t* emu, int fd, void* path, void* buf, size_t bufsize) +{ + if(isProcSelf(path, "exe")) { + strncpy(buf, emu->context->fullpath, bufsize); + size_t l = strlen(emu->context->fullpath); + return (l>bufsize)?bufsize:(l+1); + } + return readlinkat(fd, path, buf, bufsize); +} + +#endif +EXPORT void* my32_mmap(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, int offset) +{ + if(prot&PROT_WRITE) + prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on i386 + #ifdef __x86_64__ + flags |= MAP_32BIT; + #endif + if(box64_log<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "mmap(%p, %zu, 0x%x, 0x%x, %d, %d) =>", addr, length, prot, flags, fd, offset);} + void* new_addr = addr?addr:find32bitBlock(length); + void* ret = mmap(new_addr, length, prot, flags, fd, offset); + if(!addr && ret!=new_addr && ret!=(void*)-1) { + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(addr, length, 0); // is this the best way? + ret = mmap(new_addr, length, prot, flags, fd, offset); + } + if(box64_log<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "%p\n", ret);} + #ifdef DYNAREC + if(box64_dynarec && ret!=(void*)-1) { + if(flags&0x100000 && addr!=ret) + { + // program used MAP_FIXED_NOREPLACE but the host linux didn't support it + // and responded with a different address, so ignore it + } else { + if(prot& PROT_EXEC) + addDBFromAddressRange((uintptr_t)ret, length); + else + cleanDBFromAddressRange((uintptr_t)ret, length, prot?0:1); + } + } + #endif + if(ret!=(void*)-1) + setProtection((uintptr_t)ret, length, prot); + return ret; +} + +EXPORT void* my32_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, int64_t offset) +{ + if(prot&PROT_WRITE) + prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on i386 + if(box64_log<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "mmap64(%p, %zu, 0x%x, 0x%x, %d, %ld) =>", addr, length, prot, flags, fd, offset);} + void* new_addr = (flags&MAP_FIXED)?addr:find31bitBlockNearHint(addr, length, 0); + void* ret = mmap64(new_addr, length, prot, flags, fd, offset); + if(!addr && ret!=new_addr && ret!=(void*)-1) { + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(addr, length, 0); + ret = mmap64(new_addr, length, prot, flags, fd, offset); + } else if(addr && ret!=(void*)-1 && ret!=new_addr && + ((uintptr_t)ret&0xffff) && !(flags&MAP_FIXED) && box64_wine) { + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(addr, length, 0); + ret = mmap64(new_addr, length, prot, flags, fd, offset); + if(ret!=(void*)-1 && ret!=addr && ((uintptr_t)ret&0xffff) && box64_wine) { + // addr is probably too high, start again with a low address + munmap(ret, length); + loadProtectionFromMap(); // reload map, because something went wrong previously + new_addr = find31bitBlockNearHint(NULL, length, 0); // is this the best way? + ret = mmap64(new_addr, length, prot, flags, fd, offset); + if(ret!=(void*)-1 && (uintptr_t)ret&0xffff) { + munmap(ret, length); + ret = (void*)-1; + } + } + } + if(box64_log<LOG_DEBUG) {dynarec_log(LOG_DEBUG, "%p\n", ret);} + #ifdef DYNAREC + if(box64_dynarec && ret!=(void*)-1) { + if(flags&0x100000 && addr!=ret) + { + // program used MAP_FIXED_NOREPLACE but the host linux didn't support it + // and responded with a different address, so ignore it + } else { + if(prot& PROT_EXEC) + addDBFromAddressRange((uintptr_t)ret, length); + else + cleanDBFromAddressRange((uintptr_t)ret, length, prot?0:1); + } + } + #endif + if(ret!=(void*)-1) + setProtection((uintptr_t)ret, length, prot); + return ret; +} + +EXPORT void* my32_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t new_size, int flags, void* new_addr) +{ + dynarec_log(/*LOG_DEBUG*/LOG_NONE, "mremap(%p, %zu, %zu, %d, %p)=>", old_addr, old_size, new_size, flags, new_addr); + void* ret = mremap(old_addr, old_size, new_size, flags, new_addr); + dynarec_log(/*LOG_DEBUG*/LOG_NONE, "%p\n", ret); + if(ret==(void*)-1) + return ret; // failed... + uint32_t prot = getProtection((uintptr_t)old_addr)&~PROT_CUSTOM; + if(ret==old_addr) { + if(old_size && old_size<new_size) { + setProtection((uintptr_t)ret+old_size, new_size-old_size, prot); + #ifdef DYNAREC + if(box64_dynarec) + addDBFromAddressRange((uintptr_t)ret+old_size, new_size-old_size); + #endif + } else if(old_size && new_size<old_size) { + freeProtection((uintptr_t)ret+new_size, old_size-new_size); + #ifdef DYNAREC + if(box64_dynarec) + cleanDBFromAddressRange((uintptr_t)ret+new_size, new_size-old_size, 1); + #endif + } else if(!old_size) { + setProtection((uintptr_t)ret, new_size, prot); + #ifdef DYNAREC + if(box64_dynarec) + addDBFromAddressRange((uintptr_t)ret, new_size); + #endif + } + } else { + if(old_size + #ifdef MREMAP_DONTUNMAP + && !(flags&MREMAP_DONTUNMAP) + #endif + ) { + freeProtection((uintptr_t)old_addr, old_size); + #ifdef DYNAREC + if(box64_dynarec) + cleanDBFromAddressRange((uintptr_t)old_addr, old_size, 1); + #endif + } + setProtection((uintptr_t)ret, new_size, prot); // should copy the protection from old block + #ifdef DYNAREC + if(box64_dynarec) + addDBFromAddressRange((uintptr_t)ret, new_size); + #endif + } + return ret; +} + +EXPORT int my32_munmap(x64emu_t* emu, void* addr, unsigned long length) +{ + dynarec_log(LOG_DEBUG, "munmap(%p, %lu)\n", addr, length); + #ifdef DYNAREC + if(box64_dynarec) { + cleanDBFromAddressRange((uintptr_t)addr, length, 1); + } + #endif + int ret = munmap(addr, length); + if(!ret) + freeProtection((uintptr_t)addr, length); + return ret; +} + +EXPORT int my32_mprotect(x64emu_t* emu, void *addr, unsigned long len, int prot) +{ + dynarec_log(LOG_DEBUG, "mprotect(%p, %lu, 0x%x)\n", addr, len, prot); + if(prot&PROT_WRITE) + prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on i386 + int ret = mprotect(addr, len, prot); + #ifdef DYNAREC + if(box64_dynarec) { + if(prot& PROT_EXEC) + addDBFromAddressRange((uintptr_t)addr, len); + else + cleanDBFromAddressRange((uintptr_t)addr, len, 0); + } + #endif + if(!ret) + updateProtection((uintptr_t)addr, len, prot); + return ret; +} +#if 0 +#ifndef ANDROID +typedef struct my32_cookie_s { + uintptr_t r, w, s, c; + void* cookie; +} my32_cookie_t; + +static ssize_t my32_cookie_read(void *p, char *buf, size_t size) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return (ssize_t)RunFunction(my_context, cookie->r, 3, cookie->cookie, buf, size); +} +static ssize_t my32_cookie_write(void *p, const char *buf, size_t size) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return (ssize_t)RunFunction(my_context, cookie->w, 3, cookie->cookie, buf, size); +} +static int my32_cookie_seek(void *p, off64_t *offset, int whence) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return RunFunction(my_context, cookie->s, 3, cookie->cookie, offset, whence); +} +static int my32_cookie_close(void *p) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + int ret = 0; + if(cookie->c) + ret = RunFunction(my_context, cookie->c, 1, cookie->cookie); + free(cookie); + return ret; +} +EXPORT void* my32_fopencookie(x64emu_t* emu, void* cookie, void* mode, void* read, void* write, void* seek, void* close) +{ + cookie_io_functions_t io_funcs = {read?my32_cookie_read:NULL, write?my32_cookie_write:NULL, seek?my32_cookie_seek:NULL, my32_cookie_close}; + my32_cookie_t *cb = (my32_cookie_t*)calloc(1, sizeof(my32_cookie_t)); + cb->r = (uintptr_t)read; + cb->w = (uintptr_t)write; + cb->s = (uintptr_t)seek; + cb->c = (uintptr_t)close; + cb->cookie = cookie; + return fopencookie(cb, mode, io_funcs); +} +#endif + +EXPORT long my32_prlimit64(void* pid, uint32_t res, void* new_rlim, void* old_rlim) +{ + return syscall(__NR_prlimit64, pid, res, new_rlim, old_rlim); +} + +EXPORT void* my32_reallocarray(void* ptr, size_t nmemb, size_t size) +{ + return realloc(ptr, nmemb*size); +} + +#ifndef __OPEN_NEEDS_MODE +# define __OPEN_NEEDS_MODE(oflag) \ + (((oflag) & O_CREAT) != 0) +// || ((oflag) & __O_TMPFILE) == __O_TMPFILE) +#endif +EXPORT int my32___open_nocancel(x64emu_t* emu, void* file, int oflag, int* b) +{ + int mode = 0; + if (__OPEN_NEEDS_MODE (oflag)) + mode = b[0]; + return openat(AT_FDCWD, file, oflag, mode); +} + +EXPORT int my32___libc_alloca_cutoff(x64emu_t* emu, size_t size) +{ + // not always implemented on old linux version... + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "__libc_alloca_cutoff"); + if(f) + return ((iFL_t)f)(size); + // approximate version but it's better than nothing.... + return (size<=(65536*4)); +} + +// DL functions from wrappedlibdl.c +void* my32_dlopen(x64emu_t* emu, void *filename, int flag); +int my32_dlclose(x64emu_t* emu, void *handle); +void* my32_dlsym(x64emu_t* emu, void *handle, void *symbol); +EXPORT int my32___libc_dlclose(x64emu_t* emu, void* handle) +{ + return my32_dlclose(emu, handle); +} +EXPORT void* my32___libc_dlopen_mode(x64emu_t* emu, void* name, int mode) +{ + return my32_dlopen(emu, name, mode); +} +EXPORT void* my32___libc_dlsym(x64emu_t* emu, void* handle, void* name) +{ + return my32_dlsym(emu, handle, name); +} +#endif +// all obstack function defined in obstack.c file +void obstackSetup(); +#if 0 +EXPORT int my32_nanosleep(const struct timespec *req, struct timespec *rem) +{ + if(!req) + return 0; // workaround for some strange calls + return nanosleep(req, rem); +} +#endif +// wrapped malloc using calloc, it seems x86 malloc set alloc'd block to zero somehow +EXPORT void* my32_malloc(unsigned long size) +{ + return calloc(1, size); +} +#if 0 +#ifndef __NR_memfd_create +#define MFD_CLOEXEC 0x0001U +#define MFD_ALLOW_SEALING 0x0002U +EXPORT int my32_memfd_create(x64emu_t* emu, void* name, uint32_t flags) +{ + // try to simulate that function + uint32_t fl = O_RDWR | O_CREAT; + if(flags&MFD_CLOEXEC) + fl |= O_CLOEXEC; + int tmp = shm_open(name, fl, S_IRWXU); + if(tmp<0) return -1; + shm_unlink(name); // remove the shm file, but it will still exist because it's currently in use + return tmp; +} +#endif + +#ifndef GRND_RANDOM +#define GRND_RANDOM 0x0002 +#endif +EXPORT int my32_getentropy(x64emu_t* emu, void* buffer, size_t length) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "getentropy"); + if(f) + return ((iFpL_t)f)(buffer, length); + // custom implementation + if(length>256) { + errno = EIO; + return -1; + } + int ret = my32_getrandom(emu, buffer, length, GRND_RANDOM); + if(ret!=length) { + errno = EIO; + return -1; + } + return 0; +} + +EXPORT void my32_mcount(void* frompc, void* selfpc) +{ + // stub doing nothing... + return; +} + +#ifndef ANDROID +union semun { + int val; /* Value for SETVAL */ + struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* Array for GETALL, SETALL */ + struct seminfo *__buf; /* Buffer for IPC_INFO + (Linux-specific) */ +}; +#endif + +EXPORT int my32_semctl(x64emu_t* emu, int semid, int semnum, int cmd, union semun b) +{ + iFiiiV_t f = semctl; + return ((iFiiiV_t)f)(semid, semnum, cmd, b); +} + +#ifndef ANDROID +EXPORT int my32_on_exit(x64emu_t* emu, void* f, void* args) +{ + return on_exit(findon_exitFct(f), args); +} +#endif +#endif + +EXPORT long my32_strtol(void* nptr, ptr_t* endptr, int base) +{ + void* endp; + long ret = strtol(nptr, (char**)(endptr?(&endp):NULL), base); + if(endptr) + *endptr = to_ptrv(endp); + return ret; +} + +EXPORT char** my32_environ = NULL; +EXPORT char** my32__environ = NULL; +EXPORT char** my32___environ = NULL; // all aliases + +EXPORT char* my32___progname = NULL; +EXPORT char* my32___progname_full = NULL; +EXPORT char* my32_program_invocation_name = NULL; +EXPORT char* my32_program_invocation_short_name = NULL; + +EXPORT ptr_t my32_stdin = 0; +EXPORT ptr_t my32_stdout = 0; +EXPORT ptr_t my32_stderr = 0; + +EXPORT int my32___libc_single_threaded = 0; + +#define PRE_INIT\ + if(1) \ + my_lib = lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\ + else + +#ifdef ANDROID +//#define NEEDED_LIBS \ +// "libm.so", "libdl.so" +#else +#define NEEDED_LIBS \ + "ld-linux.so.2", "libpthread.so.0", "librt.so.1", "libdl.so.2" +#endif + +#define CUSTOM_INIT \ + box64->libclib = lib; \ + my_lib = lib; \ + InitCpuModel(); \ + ctSetup(); \ + /*obstackSetup();*/ \ + my32_environ = my32__environ = my32___environ = box64->envv; \ + my32___progname_full = my32_program_invocation_name = box64->argv[0]; \ + my32___progname = my32_program_invocation_short_name = \ + strrchr(box64->argv[0], '/'); \ + my32_stdin = to_hashv(stdin); \ + my32_stdout = to_hashv(stdout);\ + my32_stderr = to_hashv(stderr); + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h new file mode 100755 index 00000000..c43f0f21 --- /dev/null +++ b/src/wrapped32/wrappedlibc_private.h @@ -0,0 +1,2178 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#error Meh... +#endif + +// FILE* is h (because stdin/stdout/stderr might be 64bits, maybe other special file can be too) +// locale_t needs special handling, with to_locale / from_locale (and is a / A) + +// a64l +//GO(abort, vFv) +//GO(abs, iFi) +//GOW(accept, iFipp) +//GOM(accept4, iFEippi) //%% glibc 2.10+ +//GOW(access, iFpi) +// acct +//GOW(addmntent, iFpp) +// addseverity +// adjtime // Weak +// adjtimex // Weak +// __adjtimex +// advance // Weak +// __aeabi_assert +// __aeabi_atexit +// __aeabi_errno_addr +// __aeabi_localeconv +// __aeabi_MB_CUR_MAX +// __aeabi_memclr +// __aeabi_memclr4 +// __aeabi_memclr8 +// __aeabi_memcpy +// __aeabi_memcpy4 +// __aeabi_memcpy8 +// __aeabi_memmove +// __aeabi_memmove4 +// __aeabi_memmove8 +// __aeabi_memset +// __aeabi_memset4 +// __aeabi_memset8 +//DATAV(__after_morecore_hook, 4) +GO(alarm, iFu) +//GO2(aligned_alloc, pFuu, memalign) +//GO(alphasort, iFpp) +//GO(alphasort64, iFpp) +//DATA(argp_err_exit_status, 4) +// argp_error // Weak +// argp_failure // Weak +// argp_help // Weak +// argp_parse // Weak +// argp_program_bug_address // type B +// argp_program_version // type B +// argp_program_version_hook // type B +// argp_state_help // Weak +// argp_usage // Weak +// argz_add // Weak +// argz_add_sep // Weak +// argz_append // Weak +// __argz_count +// argz_count // Weak +// argz_create // Weak +//GOW(argz_create_sep, iFpipp) +// argz_delete +// argz_extract // Weak +//GOW(argz_insert, iFpppp) +// __argz_next +//GOW(argz_next, pFpLp) +// argz_replace // Weak +// __argz_stringify +//GOW(argz_stringify, vFpLi) +//GO(asctime, pFp) +//GOW(asctime_r, pFpp) +//GOWM(asprintf, iFEppV) //%% +//GOM(__asprintf, iFEppV) //%% +//GOM(__asprintf_chk, iFEpipV) //%% +// __assert +//GO(__assert_fail, vFppup) +//GO(__assert_perror_fail, vFipup) +//GO(atof, dFp) +//GO(atoi, iFp) +//GO(atol, lFp) +//GO(atoll, IFp) +// authdes_create +// authdes_getucred +// authdes_pk_create +// _authenticate +// authnone_create +// authunix_create +// authunix_create_default +//GOW(backtrace, iFpi) //TODO: probably a my_backtrace version, that use emulated stack instead +//GO(__backtrace, iFpi) +//GO(__backtrace_symbols, pFpi) +//GOW(backtrace_symbols, pFpi) +//GO(__backtrace_symbols_fd, vFpii) +//GOW(backtrace_symbols_fd, vFpii) +//GO(basename, pFp) +//GOW(bcmp, iFppL) +//GO(bcopy, vFppL) +// bdflush +//GOW(bind, iFipu) +// bindresvport +//GOW(bindtextdomain, pFpp) +//GOW(bind_textdomain_codeset, pFpp) +//GOW(brk, iFp) +// __bsd_getpgrp +// bsd_signal // Weak +//GOM(bsearch, pFEppLLp) //%% +GOW(btowc, iFi) +//GOW(bzero, vFpL) +//GO(__bzero, vFpL) +GOW(calloc, pFLL) +// callrpc +//GOW(canonicalize_file_name, pFp) +// capget +// capset +//GO(catclose, iFp) +//GO(catgets, pFpiip) +//GO(catopen, pFpi) +// cbc_crypt +//GO(cfgetispeed, uFp) +//GO(cfgetospeed, uFp) +//GO(cfmakeraw, vFp) +//GOW(cfree, vFp) +//GO(cfsetispeed, iFpu) +//GO(cfsetospeed, iFpu) +//GO(cfsetspeed, iFpi) +//GOW(chdir, iFp) +//DATA(__check_rhosts_file, 4) +// chflags +// __chk_fail +//GOW(chmod, iFpu) +GOW(chown, iFpuu) +//GO(chroot, iFp) +//GOW(clearenv, iFv) +//GO(clearerr, vFp) +//GO(clearerr_unlocked, vFp) +// clnt_broadcast +// clnt_create +// clnt_pcreateerror +// clnt_perrno +// clnt_perror +// clntraw_create +// clnt_spcreateerror +// clnt_sperrno +// clnt_sperror +// clnttcp_create +// clntudp_bufcreate +// clntudp_create +// clntunix_create +GO(clock, LFv) +// clone // Weak +// __clone +GOW(close, iFi) +// __close // Weak +//GOW(closedir, iFp) +GO(closelog, vFv) +//GO(__cmsg_nxthdr, pFpp) +//GO(confstr, uFipu) +// __confstr_chk +//GOW(connect, iFipu) +//GOW(__connect, iFipu) +// copysign // Weak +// copysignf // Weak +// copysignl // Weak +//GOW(creat, iFpu) +//GO(creat64, iFpu) +// create_module // Weak +//GO(ctermid, pFp) +//GO(ctime, pFp) +//GO(ctime_r, pFpp) +//DATAM(__ctype_b, 4) +//GO(__ctype_b_loc, pFv) +//GOW(__ctype_get_mb_cur_max, LFv) +//DATAM(__ctype_tolower, 4) +//GO(__ctype_tolower_loc, pFv) +//DATAM(__ctype_toupper, 4) +//GO(__ctype_toupper_loc, pFv) +// __curbrk // type B +//GO(cuserid, pFp) +GOM(__cxa_atexit, iFEppp) //%% +GOM(atexit, iFEp) //%% just in case +GOM(__cxa_finalize, vFEp) //%% +DATAM(__cpu_model, 16) +//GOM(__cxa_thread_atexit_impl, iFEppp) //%% +// __cyg_profile_func_enter +// __cyg_profile_func_exit +// daemon +//DATAV(daylight, 4) +// __daylight // type B +//GOW(dcgettext, pFppi) +//GO(__dcgettext, pFppi) +//GOW(dcngettext, pFpppui) +// __default_morecore +// __default_rt_sa_restorer_v1 +// __default_rt_sa_restorer_v2 +// __default_sa_restorer_v1 +// __default_sa_restorer_v2 +// delete_module +// des_setparity +//GOW(dgettext, pFpp) +//GO(__dgettext, pFpp) +//GO(difftime, dFuu) +//GO(dirfd, iFp) +//GO(dirname, pFp) +//GOS(div, pFpii) //%%,noE +// _dl_addr +//GOM(dl_iterate_phdr, iFEpp) //%% +// _dl_mcount_wrapper +// _dl_mcount_wrapper_check +// _dl_open_hook // type B +// _dl_starting_up // Weak +// _dl_sym +// _dl_vsym +//GOW(dngettext, pFpppu) +//GOM(dprintf, iFEipV) +//GOM(__dprintf_chk, iFEivpV) //%% +GO(drand48, dFv) +// drand48_r +GOW(dup, iFi) +GOW(dup2, iFii) +GO(__dup2, iFii) +GO(dup3, iFiiO) +//GOW(duplocale, pFp) +//GO(__duplocale, pFp) +// dysize +//GOW(eaccess, iFpi) +// ecb_crypt +// ecvt +//GO(ecvt_r, iFdipppL) +// endaliasent +// endfsent +GO(endgrent, vFv) +GO(endhostent, vFv) +//GOW(endmntent, iFp) +// __endmntent +// endnetent +// endnetgrent +GO(endprotoent, vFv) +GO(endpwent, vFv) +// endrpcent +GO(endservent, vFv) +GO(endspent, vFv) +// endttyent +// endusershell +GOW(endutent, vFv) +// endutxent +//DATAM(environ, 4) +//DATAM(_environ, 4) +//DATAM(__environ, 4) // type B +// envz_add +// envz_entry +// envz_get +// envz_merge +// envz_remove +// envz_strip +GOM(epoll_create, iFEi) //%% not needed, but used in syscall +GOM(epoll_create1, iFEO) //%% +//GOM(epoll_ctl, iFEiiip) //%% align epool_event structure +// epoll_pwait +//GOM(epoll_wait, iFEipii) //%% need realign of epoll_event structure +// erand48 +// erand48_r // Weak +//GO(err, vFippppppppp) +// errno // type B +//GO(__errno_location, pFv) +//GOW(error, vFiippppppppp) // Simple attempt: there is a vararg, but the alignment will/may be off if it tries some Double in the "printf" part +// error_at_line // Weak +// error_message_count // type B +// error_one_per_line // type B +// error_print_progname // type B +//GO(errx, vFippppppppp) +//GO(ether_aton, pFp) +//GO(ether_aton_r, pFpp) +//GO(ether_hostton, iFpp) +//GO(ether_line, iFppp) +//GO(ether_ntoa, pFp) +//GO(ether_ntoa_r, pFpp) +//GO(ether_ntohost, iFpp) +//GOW(euidaccess, iFpi) +//GO(eventfd, iFui) +//GO(eventfd_read, iFip) +//GO(eventfd_write, iFiU) +//GO2(execl, iFEpV, my_execv) +//GO2(execle, iFEpV, my_execve) // Nope! This one needs wrapping, because is char*, char*, ..., char*[] +//GO2(execlp, iFpV, execvp) +//GOWM(execv, iFEpp) //%% +//GOM(execve, iFEppp) //%% and this one too... +//GOWM(execvp, iFEpp) +GO(exit, vFi) +GO(_exit, vFi) +GOW(_Exit, vFi) +//GOM(__explicit_bzero_chk, vFEpuu) //%% not always defined +//GO(faccessat, iFipii) +// fattach +//GO(__fbufsize, uFp) +GOW(fchdir, iFi) +// fchflags +GOW(fchmod, iFiu) +//GO(fchmodat, iFipui) +GOW(fchown, iFiuu) +//GO(fchownat, iFipuii) +GO(fclose, iFH) +GOW(fcloseall, iFv) +GOM(fcntl, iFEiiN) //%% this also use a vararg for 3rd argument +GOM(__fcntl, iFEiiN) //%% +GOM(fcntl64, iFEiiN) //%% +//GO(fcvt, pFdipp) +//GO(fcvt_r, iFdipppL) +GO(fdatasync, iFi) +// fdetach +//GO(fdopen, pFip) +//GOW(fdopendir, pFi) +//GOW(feof, iFp) +//GO(feof_unlocked, iFp) +//GOW(ferror, iFp) +//GO(ferror_unlocked, iFp) +//GO(fexecve, iFipp) //TODO: Check if needed to be wrapped, and target checked for x86 / native? +GOW(fflush, iFh) +//GO(fflush_unlocked, iFS) +GO(ffs, iFi) +// __ffs +GOW(ffsl, iFi) +GO(ffsll, iFI) +GOW(fgetc, iFh) +GOW(fgetc_unlocked, iFh) +// fgetgrent +// fgetgrent_r // Weak +//GO(fgetpos, iFpp) +//GO(fgetpos64, iFpp) +// fgetpwent +// fgetpwent_r // Weak +//GOW(fgets, pFpip) +//GO(__fgets_chk, pFpuip) +// fgetspent +// fgetspent_r // Weak +//GO(fgets_unlocked, pFpip) +// __fgets_unlocked_chk +//GOW(fgetwc, iFp) +//GOW(fgetwc_unlocked, iFp) +//GO(fgetws, pFpip) +// __fgetws_chk +//GO(fgetws_unlocked, pFpip) +// __fgetws_unlocked_chk +//GO(fgetxattr, iFippu) +//GO(fileno, iFp) +//GOW(fileno_unlocked, iFp) +GOW(finite, iFd) +GO(__finite, iFd) +GOW(finitef, iFf) +// __finitef +// finitel // Weak +// __finitel +// __flbf +//GO(flistxattr, iFipu) +GOW(flock, iFii) +//GOW(flockfile, vFp) +GOW(_flushlbf, vFv) +//GO(fmemopen, pFpup) +// fmtmsg +//GO(fnmatch, iFppi) +GOM(fopen, hFEpp) //%% +//GOWM(fopen64, pFEpp) //%% +//GOM(fopencookie, pFEpppppp) //%% last 4p are a struct with 4 callbacks... +GOWM(fork, iFEv) //%% +GOM(__fork, iFEv) //%% +// __fortify_fail +GOW(fpathconf, iFii) +//GO(__fpending, uFp) +//GOM(fprintf, iFEppV) //%% +//GOM(__fprintf_chk, iFEpvpV) //%% +// __fpu_control // type B +//GO(__fpurge, vFp) +//GOW(fputc, iFip) +//GO(fputc_unlocked, iFip) +GOW(fputs, iFhp) // Weak +//GO(fputs_unlocked, iFpp) +//GO(fputwc, iFip) +//GO(fputwc_unlocked, iFip) +//GO(fputws, iFpp) +//GO(fputws_unlocked, iFpp) +//GOW(fread, LFpLLp) +//GO(__freadable, iFp) +//GO(__fread_chk, uFpuuup) +//GO(__freading, iFp) +//GO(fread_unlocked, uFpuup) +//GO(__fread_unlocked_chk, uFpuuup) +GO(free, vFp) +//GO(freeaddrinfo, vFp) +//DATAV(__free_hook, 4) +//GO(freeifaddrs, vFp) +GOW(freelocale, vFA) +GO(__freelocale, vFA) +//GO(fremovexattr, iFip) +//GO(freopen, pFppp) +//GO(freopen64, pFppp) +// frexp // Weak +// frexpf // Weak +// frexpl // Weak +//GO2(fscanf, iFppV, vfscanf) +//GO(fseek, iFpli) +//GO(fseeko, iFpli) +//GO(fseeko64, iFpIi) +//GO(__fsetlocking, iFpi) +//GO(fsetpos, iFpp) +//GO(fsetpos64, iFpp) +//GO(fsetxattr, iFippui) +//GOW(fstatfs, iFip) +//GOWM(fstatfs64, iFip) //%%,noE +//GO(fstatvfs, iFip) +//GOW(fstatvfs64, iFip) // alignment? +GOW(fsync, iFi) +//GOW(ftell, lFp) +//GO(ftello, lFp) +//GO(ftello64, IFp) +//GO(ftime, iFp) +//GO(ftok, iFpi) +GOW(ftruncate, iFiu) +GOW(ftruncate64, iFiI) +//GOW(ftrylockfile, iFp) +//GOM(fts_children, pFEpi) //%% +//GOM(fts_close, iFEp) //%% +//GOM(fts_open, pFEpip) //%% +//GOM(fts_read, pFEp) //%% +// fts_set +//GOM(ftw, iFEppi) //%% +//GOM(ftw64, iFEppi) //%% +//GOW(funlockfile, vFp) +//GO(futimens, iFip) +//GOW(futimes, iFip) //int futimes(int fd, const struct timeval tv[2]) +//GO(futimesat, iFippp) +// fwide +//GOWM(fwprintf, iFEppV) //%% +//GOM(__fwprintf_chk, iFEpvpV) //%% +//GO(__fwritable, iFp) +GOW(fwrite, LFpLLh) +//GO(fwrite_unlocked, uFpuup) +//GO(__fwriting, iFp) +// fwscanf +//GOM(__fxstat, iFEiip) //%% +//GOM(__fxstat64, iFEiip) //%% need reaalign of struct stat64 +//GOM(__fxstatat, iFEiippi) //%% +//GOM(__fxstatat64, iFEiippi) //%% struct stat64 again +// __gai_sigqueue +//GO(gai_strerror, pFi) +// __gconv_get_alias_db +// __gconv_get_cache +// __gconv_get_modules_db +// gcvt +//GO(getaddrinfo, iFpppp) +// getaliasbyname +// getaliasbyname_r +// getaliasent +// getaliasent_r +// get_avphys_pages // Weak +//GOW(getc, iFp) +GOW(getchar, iFv) +GO(getchar_unlocked, iFv) +GOM(getcontext, iFEp) //%% +//GOW(getc_unlocked, iFp) +//GO(get_current_dir_name, pFv) +//GOW(getcwd, pFpL) +//GO(__getcwd_chk, pFpLL) +//GO(getdate, pFp) +// getdate_err // type B +// getdate_r // Weak +//GOW(getdelim, iFppip) +//GOW(__getdelim, iFppip) +// getdirentries +// getdirentries64 +//GO(getdomainname, iFpu) +// __getdomainname_chk +GOW(getdtablesize, iFv) +GOW(getegid, iFv) +GO(getenv, pFp) +//GOW(geteuid, pFv) +// getfsent +// getfsfile +// getfsspec +GOW(getgid, iFv) +//GO(getgrent, pFv) +// getgrent_r +//GO(getgrgid, pFu) +//GO(getgrgid_r, iFuppup) +//GO(getgrnam, pFp) +//GO(getgrnam_r, iFpppup) +//GO(getgrouplist, iFpipp) +GOW(getgroups, iFiu) +// __getgroups_chk +//GO(gethostbyaddr, pFpui) +//GO(gethostbyaddr_r, iFpuippupp) +//GO(gethostbyname, pFp) +//GO(gethostbyname2, pFpi) +//GO(gethostbyname2_r, iFpippupp) +//GO(gethostbyname_r, iFpppupp) +//GO(gethostent, pFv) +//GO(gethostent_r, iFppupp) +// gethostid +//GOW(gethostname, iFpu) +// __gethostname_chk +//GO(getifaddrs, iFp) +// getipv4sourcefilter +//GOW(getitimer, iFip) +// get_kernel_syms // Weak +//GOW(getline, iFppp) +//GO(getloadavg, iFpi) +//GO(getlogin, pFv) +//GO(getlogin_r, iFpu) +// __getlogin_r_chk +//GO(getmntent, pFp) +// __getmntent_r +//GOW(getmntent_r, pFpppi) +// getmsg +// get_myaddress +//GO(getnameinfo, iFpupupui) +// getnetbyaddr +// getnetbyaddr_r +// getnetbyname +// getnetbyname_r +// getnetent +// getnetent_r +// getnetgrent +// getnetgrent_r // Weak +// getnetname +//GOW(get_nprocs, iFv) +//GOW(get_nprocs_conf, iFv) +//GOM(getopt, iFipp) //%noE +//GOM(getopt_long, iFipppp) //%noE +//GOM(getopt_long_only, iFipppp) //%noE +GOW(getpagesize, iFv) +GO(__getpagesize, iFv) +//GO(getpass, pFp) +//GOW(getpeername, iFipp) +GOW(getpgid, uFu) +// __getpgid +GO(getpgrp, iFv) +// get_phys_pages // Weak +GO(getpid, uFv) +GO(__getpid, uFv) +// getpmsg +GOW(getppid, uFv) +GO(getpriority, iFii) +//GOM(getrandom, iFEpuu) //%% +//GO(getprotobyname, pFp) +//GO(getprotobyname_r, iFpppup) +//GO(getprotobynumber, pFi) +//GO(getprotobynumber_r, iFippup) +//GO(getprotoent, pFv) +//GO(getprotoent_r, iFppup) +GOW(getpt, iFv) +// getpublickey +// getpw // Weak +//GO(getpwent, pFv) +// getpwent_r +//GO(getpwnam, pFp) +//GO(getpwnam_r, iFpppup) +//GOM(getpwuid, pFEu) +//GO(getpwuid_r, iFuppup) +//GOW(getresgid, iFppp) +//GOW(getresuid, iFppp) +//GO(getrlimit, iFip) +//GO(getrlimit64, iFip) +// getrpcbyname +// getrpcbyname_r +// getrpcbynumber +// getrpcbynumber_r +// getrpcent +// getrpcent_r +// getrpcport +//GOW(getrusage, iFip) +//GOW(gets, pFp) +// __gets_chk +// getsecretkey +//GO(getservbyname, pFpp) +//GO(getservbyname_r, iFppppup) +//GO(getservbyport, pFip) +//GO(getservbyport_r, iFipppup) +// getservent +//GO(getservent_r, iFppup) +GO(getsid, uFu) +//GOW(getsockname, iFipp) +//GOW(getsockopt, iFiiipp) +// getsourcefilter +//GO(getspent, pFv) +// getspent_r +//GO(getspnam, pFp) +// getspnam_r +// getsubopt +//GOW(gettext, pFp) +//GOW(gettimeofday, iFpp) +//GO(__gettimeofday, iFpp) +// getttyent +// getttynam +GOW(getuid, uFv) +// getusershell +//GOW(getutent, pFv) +//GOW(getutent_r, iFpp) +//GOW(getutid, pFp) +//GOW(getutid_r, iFppp) +//GOW(getutline, pFp) +//GOW(getutline_r, iFppp) +// getutmp +// getutmpx +// getutxent +// getutxid +// getutxline +// getw +//GO2(getwc, iFp, fgetwc) +GO(getwchar, iFv) +GO(getwchar_unlocked, iFv) +//GOW(getwc_unlocked, iFp) +//GO(getwd, pFp) +// __getwd_chk +//GO(getxattr, iFpppu) +//GOM(glob, iFEpipp) //%% +//GOM(glob64, iFEpipp) //%% +//GO(globfree, vFp) +//GO(globfree64, vFp) +// glob_pattern_p // Weak +//GO(gmtime, pFp) +//GO(__gmtime_r, pFpp) +//GOW(gmtime_r, pFpp) +GO(gnu_dev_major, uFU) +GO(gnu_dev_makedev, UFii) // dev_t seems to be a u64 +GO(gnu_dev_minor, uFU) +//GOW(gnu_get_libc_release, pFv) +//GOW(gnu_get_libc_version, pFv) +// __gnu_mcount_nc +// __gnu_Unwind_Find_exidx +GO(grantpt, iFi) +// group_member // Weak +// gsignal // Weak +// gtty +//GOW(hasmntopt, pFpp) +// hcreate +// hcreate_r +// hdestroy // Weak +// hdestroy_r +//DATA(h_errlist, 4) +// h_errno // type B +//GO(__h_errno_location, pFv) +//GO(herror, vFp) +// h_nerr // type R +// host2netname +// hsearch +// hsearch_r +//GO(hstrerror, pFi) +GO(htonl, uFu) +GO(htons, uFu) +//GO(iconv, LFLpppp) +//GO(iconv_canonicalize, pFp) +GO(iconv_close, iFL) +//GO(iconv_open, LFpp) +//GO(if_freenameindex, vFp) +//GO(if_indextoname, pFup) +//GO(if_nameindex, pFv) +//GO(if_nametoindex, uFp) +// imaxabs // Weak +GOW(imaxdiv, IFII) +//DATA(in6addr_any, 16) // type R +//DATA(in6addr_loopback, 16) // type R +// inb // Weak +//GOW(index, pFpi) +// inet6_opt_append +// inet6_opt_find +// inet6_opt_finish +// inet6_opt_get_val +// inet6_opt_init +// inet6_option_alloc +// inet6_option_append +// inet6_option_find +// inet6_option_init +// inet6_option_next +// inet6_option_space +// inet6_opt_next +// inet6_opt_set_val +// inet6_rth_add +// inet6_rth_getaddr +// inet6_rth_init +// inet6_rth_reverse +// inet6_rth_segments +// inet6_rth_space +//GO(inet_addr, uFp) +//GOW(inet_aton, iFpp) +// inet_lnaof +// inet_makeaddr +// inet_netof +//GO(inet_network, iFp) +// inet_nsap_addr +//GO(inet_nsap_ntoa, pFipp) +//GO(inet_ntoa, pFu) +//GO(inet_ntop, pFippu) +//GO(inet_pton, iFipp) +//GO(initgroups, iFpi) +// init_module +// initstate // Weak +//GOW(initstate_r, iFupup) +// inl // Weak +// innetgr +//GO(inotify_add_watch, iFipu) +GO(inotify_init, iFv) +GO(inotify_init1, iFi) +GO(inotify_rm_watch, iFii) +// insque +// __internal_endnetgrent +// __internal_getnetgrent_r +// __internal_setnetgrent +// inw // Weak +//DATA(_IO_2_1_stderr_, 152) //sizeof(struct _IO_FILE_plus) +//DATA(_IO_2_1_stdin_, 152) +//DATA(_IO_2_1_stdout_, 152) +//GO(_IO_adjust_column, uFupi) +// _IO_adjust_wcolumn +GO(ioctl, iFiLN) //the vararg is just to have optional arg of various type, but only 1 arg +//GO(_IO_default_doallocate, iFS) +//GO(_IO_default_finish, vFSi) +//GO(_IO_default_pbackfail, iFSi) +//GO(_IO_default_uflow, iFS) +//GO(_IO_default_xsgetn, LFSpL) +//GO(_IO_default_xsputn, LFSpL) +//GO(_IO_doallocbuf, vFS) +//GO(_IO_do_write, iFSpL) +// _IO_fclose +// _IO_fdopen +// _IO_feof +// _IO_ferror +// _IO_fflush +// _IO_fgetpos +// _IO_fgetpos64 +// _IO_fgets +//GO(_IO_file_attach, pFSi) +//GO(_IO_file_close, iFS) +//GO(_IO_file_close_it, iFS) +//GO(_IO_file_doallocate, iFS) +// _IO_file_finish +//GO(_IO_file_fopen, pFSppi) +//GO(_IO_file_init, vFS) +//DATA(_IO_file_jumps, 4) +//GO(_IO_file_open, pFSpiiii) +//GO(_IO_file_overflow, iFSi) +//GO(_IO_file_read, lFSpl) +//GO(_IO_file_seek, IFSIi) +//GO(_IO_file_seekoff, IFSIii) +//GO(_IO_file_setbuf, pFSpl) +//GOM(_IO_file_stat, iFESp) +//GO(_IO_file_sync, iFS) +//GO(_IO_file_underflow, iFS) +//GO(_IO_file_write, lFSpl) +//GO(_IO_file_xsputn, LFSpL) +//GO(_IO_flockfile, vFS) +//GO(_IO_flush_all, iFv) +//GO(_IO_flush_all_linebuffered, vFv) +// _IO_fopen +// _IO_fprintf // Weak +// _IO_fputs +// _IO_fread +//GO(_IO_free_backup_area, vFS) +// _IO_free_wbackup_area +// _IO_fsetpos +// _IO_fsetpos64 +// _IO_ftell +// _IO_ftrylockfile +//GO(_IO_funlockfile, vFS) +// _IO_fwrite +//GO(_IO_getc, iFS) +// _IO_getline +//GO(_IO_getline_info, LFSpLiip) +// _IO_gets +//GO(_IO_init, vFSi) +//GO(_IO_init_marker, vFpS) +// _IO_init_wmarker +// _IO_iter_begin +// _IO_iter_end +// _IO_iter_file +// _IO_iter_next +// _IO_least_wmarker +//GO(_IO_link_in, vFp) +//DATA(_IO_list_all, 4) +// _IO_list_lock +// _IO_list_resetlock +// _IO_list_unlock +//GO(_IO_marker_delta, iFp) +//GO(_IO_marker_difference, iFpp) +//GO(_IO_padn, iFpii) +//GO(_IO_peekc_locked, iFp) +GOW(ioperm, iFuui) +GOW(iopl, iFi) +// _IO_popen +// _IO_printf +//GO(_IO_proc_close, iFS) +//GO(_IO_proc_open, pFSpp) +//GO(_IO_putc, iFip) +// _IO_puts +//GO(_IO_remove_marker, vFp) +//GO(_IO_seekmark, iFSpi) +//GO(_IO_seekoff, IFSIii) +//GO(_IO_seekpos, IFSIi) +// _IO_seekwmark +//GO(_IO_setb, vFSppi) +// _IO_setbuffer +// _IO_setvbuf +//GO(_IO_sgetn, uFppu) +// _IO_sprintf +//GO(_IO_sputbackc, iFSi) +// _IO_sputbackwc +// _IO_sscanf +//GO(_IO_str_init_readonly, vFppi) +//GO(_IO_str_init_static, vFppup) +//GO(_IO_str_overflow, iFSi) +//GO(_IO_str_pbackfail, iFSi) +//GO(_IO_str_seekoff, UFSUii) +//GO(_IO_str_underflow, iFS) +//GO(_IO_sungetc, iFp) +// _IO_sungetwc +//GO(_IO_switch_to_get_mode, iFp) +// _IO_switch_to_main_wget_area +// _IO_switch_to_wbackup_area +// _IO_switch_to_wget_mode +// _IO_ungetc +//GO(_IO_un_link, vFp) +//GO(_IO_unsave_markers, vFp) +// _IO_unsave_wmarkers +//GOM(_IO_vfprintf, iFEpppp) //%% +//GOM(_IO_vfscanf, iFEppp) //%% +// _IO_vsprintf +// _IO_wdefault_doallocate +// _IO_wdefault_finish +// _IO_wdefault_pbackfail +// _IO_wdefault_uflow +// _IO_wdefault_xsgetn +// _IO_wdefault_xsputn +// _IO_wdoallocbuf +// _IO_wdo_write +//DATA(_IO_wfile_jumps, 4) +// _IO_wfile_overflow +// _IO_wfile_seekoff +// _IO_wfile_sync +// _IO_wfile_underflow +// _IO_wfile_xsputn +// _IO_wmarker_delta +// _IO_wsetb +// iruserok +// iruserok_af +GO(isalnum, iFi) +// __isalnum_l +// isalnum_l // Weak +GO(isalpha, iFi) +// __isalpha_l +// isalpha_l // Weak +GO(isascii, iFi) +// __isascii_l // Weak +// isastream +GOW(isatty, iFi) +GO(isblank, iFi) +// __isblank_l +// isblank_l // Weak +GO(iscntrl, iFi) +// __iscntrl_l +// iscntrl_l // Weak +// isctype // Weak +// __isctype +GO(isdigit, iFi) +// __isdigit_l +// isdigit_l // Weak +// isfdtype +GO(isgraph, iFi) +// __isgraph_l +// isgraph_l // Weak +GOW(isinf, iFd) +GO(__isinf, iFd) +GOW(isinff, iFf) +GO(__isinff, iFf) +// isinfl // Weak +// __isinfl +GO(islower, iFi) +// __islower_l +// islower_l // Weak +GOW(isnan, iFd) +GO(__isnan, iFd) +GOW(isnanf, iFf) +GO(__isnanf, iFf) +// isnanl // Weak +// __isnanl +//GOM(__isoc99_fscanf, iFEppV) //%% +// __isoc99_fwscanf +// __isoc99_scanf +//GOM(__isoc99_sscanf, iFEppV) //%% +// __isoc99_swscanf +//GOM(__isoc99_vfscanf, iFEppp) //%% +// __isoc99_vfwscanf +// __isoc99_vscanf +//GOM(__isoc99_vsscanf, iFEppp) //%% TODO: check if ok +// __isoc99_vswscanf +// __isoc99_vwscanf +// __isoc99_wscanf +GO(isprint, iFi) +// __isprint_l +// isprint_l // Weak +GO(ispunct, iFi) +// __ispunct_l +// ispunct_l // Weak +GO(isspace, iFi) +// __isspace_l +// isspace_l // Weak +GO(isupper, iFi) +// __isupper_l +// isupper_l // Weak +GOW(iswalnum, iFi) +// __iswalnum_l +//GOW(iswalnum_l, iFip) +GOW(iswalpha, iFi) +// __iswalpha_l +//GOW(iswalpha_l, iFip) +GOW(iswblank, iFi) +// __iswblank_l +GOW(iswblank_l, iFip) +GOW(iswcntrl, iFi) +// __iswcntrl_l +GOW(iswcntrl_l, iFip) +GOW(iswctype, iFiu) +// __iswctype +GO(__iswctype_l, iFuLp) +// iswctype_l // Weak +GOW(iswdigit, iFi) +// __iswdigit_l +//GOW(iswdigit_l, iFip) +GOW(iswgraph, iFi) +// __iswgraph_l +//GOW(iswgraph_l, iFip) +GOW(iswlower, iFi) +// __iswlower_l +//GOW(iswlower_l, iFip) +GOW(iswprint, iFi) +// __iswprint_l +//GOW(iswprint_l, iFip) +GOW(iswpunct, iFi) +// __iswpunct_l +//GOW(iswpunct_l, iFip) +GOW(iswspace, iFi) +// __iswspace_l +//GOW(iswspace_l, iFip) +GOW(iswupper, iFi) +// __iswupper_l +//GOW(iswupper_l, iFip) +GOW(iswxdigit, iFi) +// __iswxdigit_l +//GOW(iswxdigit_l, iFip) +GO(isxdigit, iFi) +// __isxdigit_l +// isxdigit_l // Weak +// _itoa_lower_digits // type R +// __ivaliduser +//GO(jrand48, iFp) +// jrand48_r // Weak +// key_decryptsession +// key_decryptsession_pk +// __key_decryptsession_pk_LOCAL // type B +// key_encryptsession +// key_encryptsession_pk +// __key_encryptsession_pk_LOCAL // type B +// key_gendes +// __key_gendes_LOCAL // type B +// key_get_conv +// key_secretkey_is_set +// key_setnet +// key_setsecret +GOW(kill, iFli) +GO(killpg, iFii) +// klogctl +// l64a +GO(labs, iFi) +// lchmod +//GOW(lchown, iFpuu) +// lckpwdf // Weak +// lcong48 +// lcong48_r // Weak +// ldexp // Weak +// ldexpf // Weak +// ldexpl // Weak +//GOS(ldiv, pFEpii) //%% return a struct, so address of stuct is on the stack, as a shadow 1st element +//GOM(lfind, pFEpppLp) //%% +//GO(lgetxattr, iFpppu) +GOM(__libc_alloca_cutoff, iFEL) //%% +// __libc_allocate_rtsig +// __libc_allocate_rtsig_private +//GO(__libc_calloc, pFLL) +// __libc_clntudp_bufcreate +GO(__libc_current_sigrtmax, iFv) +// __libc_current_sigrtmax_private +GO(__libc_current_sigrtmin, iFv) +// __libc_current_sigrtmin_private +//GOM(__libc_dlclose, iFEp) //%% +// __libc_dl_error_tsd +//GOM(__libc_dlopen_mode, pFEpi) //%% +//GOM(__libc_dlsym, pFEpp) //%% +// __libc_fatal +// __libc_fork +//GO(__libc_free, vFp) +// __libc_freeres +GOM(__libc_init_first, vFEipV) //%% +// _libc_intl_domainname // type R +//GO2(__libc_open, iFEpOu, my_open) +// __libc_longjmp +// __libc_mallinfo +//GO(__libc_malloc, pFL) +// __libc_mallopt +//GO(__libc_memalign, pFLL) +// __libc_pthread_init +//GO(__libc_pvalloc, pFL) +// __libc_pwrite +//GO2(__libc_read, lFipL, my_read) //%%,noE +//GO(__libc_realloc, pFpL) +// __libc_sa_len +// __libc_siglongjmp +GOM(__libc_start_main, iFEpippppp) //%% +GO2(__libc_sigaction, iFEipp, my32_sigaction) //%% +// __libc_system +// __libc_thread_freeres +//GO(__libc_valloc, pFL) +//GOW(link, iFpp) +//GO(linkat, iFipipi) +GOW(listen, iFii) +//GO(listxattr, iFppu) +// llabs +// lldiv +//GO(llistxattr, iFppu) +// llseek // Weak +// loc1 // type B +// loc2 // type B +//GOW(localeconv, pFv) +//GO(localtime, pFp) +//GOW(localtime_r, pFpp) +GO(lockf, iFiiu) +GO(lockf64, iFiiI) +// locs // type B +GOM(longjmp, vFEpi) //%% +GOM(_longjmp, vFEpi) //%% +GOM(__longjmp_chk, vFEpi) //%% +GO(lrand48, iFv) +// lrand48_r +//GO(lremovexattr, iFpp) +//GOM(lsearch, pFEpppLp) //%% +GOW(lseek, iFiii) +// __lseek // Weak +GOW(lseek64, IFiIi) +//GO(lsetxattr, iFpppui) +//GO(lutimes, iFpp) +//GOM(__lxstat, iFEipp) //%% +//GOM(__lxstat64, iFEipp) //%% +//GO(madvise, iFpLi) +GOM(makecontext, iFEppiV) //%% +//GOW(mallinfo, pFv) +GOM(malloc, pFL) //%%,noE +// malloc_get_state // Weak +//DATAV(__malloc_hook, 4) +//DATAV(__malloc_initialize_hook, 4) +// malloc_set_state // Weak +// malloc_stats // Weak +GOW(malloc_trim, iFu) +//GOW(malloc_usable_size, LFp) +GOW(mallopt, iFii) // Weak +// mallwatch // type B +//GO(mblen, iFpL) +//GOW(mbrlen, LFpLp) +//GO(__mbrlen, LFpLp) +//GOW(mbrtowc, LFppLp) +//GO(__mbrtowc, LFppLp) +//GOW(mbsinit, iFp) +//GOW(mbsnrtowcs, LFppLLp) +// __mbsnrtowcs_chk +//GOW(mbsrtowcs, LFppLp) +// __mbsrtowcs_chk +//GO(mbstowcs, LFppL) +// __mbstowcs_chk +//GO(mbtowc, iFppL) +// mcheck +// mcheck_check_all +// mcheck_pedantic +// _mcleanup +//GOWM(mcount, vFpp) //%%,noE +// _mcount +//GOW(memalign, pFLL) +//DATAV(__memalign_hook, 4) +//GOW(memccpy, pFppiL) +//GO(memchr, pFpiL) +GO(memcmp, iFppL) +GO(memcpy, pFppL) +GO(__memcpy_chk, pFppuL) +// memfrob +//GO(memmem, pFpupu) +//GO(memmove, pFppL) +//GO(__memmove_chk, pFppLL) +//GO(mempcpy, pFppL) +//GO(__mempcpy, pFppu) +// __mempcpy_chk +// __mempcpy_small +//GOW(memrchr, pFpiL) +//GO(memset, pFpiL) +//GO(__memset_chk, pFpiLL) +//GO(mincore, iFpLp) +//GOW(mkdir, iFpu) +//GO(mkdirat, iFipu) +//GO(mkdtemp, pFp) +//GO(mkfifo, iFpu) +//GO(mkfifoat, iFipu) +//GO(mkostemp, iFpi) +//GO(mkostemp64, iFpi) +//GO(mkstemp, iFp) +//GO(mkstemp64, iFp) +//GO(mktemp, pFp) +//GO(mktime, LFp) +//GO(mlock, iFpL) +//GO(mlockall, iFi) +//GOM(mmap, pFEpLiiii) //%% +//GOM(mmap64, pFEpLiiiI) //%% +// modf // Weak +// modff // Weak +// modfl // Weak +// moncontrol // Weak +// monstartup // Weak +// __monstartup +//DATA(__morecore, 4) +//GOW(mount, iFpppup) +// mprobe +//GOM(mprotect, iFEpLi) //%% +// mrand48 +// mrand48_r +//GOWM(mremap, pFEpLLiN) //%% 5th hidden paramerer "void* new_addr" if flags is MREMAP_FIXED +//GO(msgctl, iFiip) +//GOW(msgget, iFpi) +//GOW(msgrcv, lFipLli) +//GOW(msgsnd, iFipLi) +//GOW(msync, iFpLi) +// mtrace +//GO(munlock, iFpL) +//GO(munlockall, iFv) +//GOM(munmap, iFEpL) //%% +// muntrace +//GOWM(nanosleep, iFpp) //%%,noE +// __nanosleep // Weak +// netname2host +// netname2user +GOW(newlocale, aFipa) +GO(__newlocale, aFipa) +// nfsservctl +//GOM(nftw, iFEppii) //%% +//GOM(nftw64, iFEppii) //%% +//GOW(ngettext, pFppu) +GO(nice, iFi) +// _nl_default_dirname // type R +// _nl_domain_bindings // type B +//GO(nl_langinfo, pFu) +//GO(__nl_langinfo_l, pFup) +//GOW(nl_langinfo_l, pFup) +//DATAB(_nl_msg_cat_cntr, 4) // type B +// nrand48 +// nrand48_r // Weak +// __nss_configure_lookup +// __nss_database_lookup +// __nss_disable_nscd +// _nss_files_parse_grent +// _nss_files_parse_pwent +// _nss_files_parse_spent +// __nss_group_lookup +// __nss_group_lookup2 +// __nss_hostname_digits_dots +// __nss_hosts_lookup +// __nss_hosts_lookup2 +// __nss_lookup_function +// __nss_next +// __nss_next2 +// __nss_passwd_lookup +// __nss_passwd_lookup2 +// __nss_services_lookup2 +GOW(ntohl, uFu) +GOW(ntohs, uFu) +// ntp_adjtime // Weak +// ntp_gettime +// _null_auth // type B +// _obstack_allocated_p +//DATAM(obstack_alloc_failed_handler, 4) +//GOM(_obstack_begin, iFpLLpp) //%%,noE +// _obstack_begin_1 +//DATA(obstack_exit_failure, 4) +//GOM(_obstack_free, vFpp) //%%,noE +//GOM(obstack_free, vFpp) //%%,noE +// _obstack_memory_used +//GOM(_obstack_newchunk, vFpi) //%%,noE +// obstack_printf // Weak +// __obstack_printf_chk +//GOWM(obstack_vprintf, iFEpppp) //%% +// __obstack_vprintf_chk +//GOWM(on_exit, iFEpp) //%% +//GO2(__on_exit, iFEpp, my_on_exit) //%% +//GOWM(open, iFEpOu) //%% +//GOWM(__open, iFEpOu) //%% +//GO(__open_2, iFpO) +//GOWM(open64, iFEpOu) //%% +// __open64 // Weak +//GO(__open64_2, iFpO) +//GOW(openat, iFipON) +// __openat_2 +//GOW(openat64, iFipON) +//GO(__openat64_2, iFipON) +// __open_catalog +//GOW(opendir, pFp) +//GO(openlog, vFpii) +// open_memstream +// open_wmemstream +//DATAB(optarg, 4) +//DATA(opterr, 4) +//DATA(optind, 4) +//DATA(optopt, 4) +// outb // Weak +// outl // Weak +// outw // Weak +//GO(__overflow, iFpi) +//GO(parse_printf_format, uFpup) +// passwd2des +//GOW(pathconf, iFpi) +GOW(pause, iFv) +//GO(pclose, iFp) +//GO(perror, vFp) +// personality // Weak +//GOW(pipe, iFp) // the array of 2 int seems to converted as a pointer, on both x86 and arm (and x86_64 too) +// __pipe +//GOW(pipe2, iFpO) // assuming this works the same as pipe, so pointer for array of 2 int +// pivot_root +// pmap_getmaps +// pmap_getport +// pmap_rmtcall +// pmap_set +// pmap_unset +//GOW(poll, iFpui) // poll have an array of struct as 1st argument +//GO(__poll, iFpui) +//GO(popen, pFpp) +GO(posix_fadvise, iFiuui) +GO(posix_fadvise64, iFiuui) +GO(posix_fallocate, iFiii) +GO(posix_fallocate64, iFiII) +// posix_madvise +//GOW(posix_memalign, iFpLL) +// posix_openpt // Weak +//GO(posix_spawn, iFpppppp) +// posix_spawnattr_destroy +// posix_spawnattr_getflags +// posix_spawnattr_getpgroup +// posix_spawnattr_getschedparam +// posix_spawnattr_getschedpolicy +// posix_spawnattr_getsigdefault +// posix_spawnattr_getsigmask +// posix_spawnattr_init +// posix_spawnattr_setflags +// posix_spawnattr_setpgroup +// posix_spawnattr_setschedparam +// posix_spawnattr_setschedpolicy +// posix_spawnattr_setsigdefault +// posix_spawnattr_setsigmask +// posix_spawn_file_actions_addclose +//GO(posix_spawn_file_actions_adddup2, iFpii) +//GO(posix_spawn_file_actions_addopen, iFpipii) +//GO(posix_spawn_file_actions_destroy, iFp) +//GO(posix_spawn_file_actions_init, iFp) +//GOM(posix_spawnp, iFEpppppp) //%% +//GO(ppoll, iFpupp) +GOW(prctl, iFiLLLL) +//GOW(pread, lFipLl) +//GOW(pread64, lFipLI) +// __pread64 // Weak +// __pread64_chk +//GOM(preadv64, lFEipiI) //%% not always present +// __pread_chk +GOM(printf, iFEpV) //%% +GOM(__printf_chk, iFEvpV) //%% +//GO(__printf_fp, iFppp) // does this needs aligment? +// printf_size +// printf_size_info +// profil // Weak +// __profile_frequency +//DATAM(__progname, 4) +//DATAM(__progname_full, 4) +//DATAM(program_invocation_name, 4) +//DATAM(program_invocation_short_name, 4) +//GOW(pselect, iFippppp) +// psignal +//GO(ptrace, iFiupp) // will that work??? +//GO(ptsname, pFi) +//GOW(ptsname_r, iFipu) +// __ptsname_r_chk +GOW(putc, iFip) +GO(putchar, iFi) +GO(putchar_unlocked, iFi) +//GO(putc_unlocked, iFip) +//GO(putenv, iFp) +// putgrent +// putmsg +// putpmsg +// putpwent +GOW(puts, iFp) +// putspent +//GOW(pututline, pFp) +// pututxline +// putw +//GO(putwc, iFip) +// putwchar +GO(putwchar_unlocked, iFi) +//GO(putwc_unlocked, iFip) +// pvalloc // Weak +// pwrite // Weak +//GOW(pwrite64, lFipLI) +// __pwrite64 // Weak +//GOM(pwritev64, lFEipiI) //%% not always present +// qecvt +#ifdef HAVE_LD80BITS +//GO(qecvt_r, iFDipppL) +#else +//GO(qecvt_r, iFKipppL) +#endif +// qfcvt +#ifdef HAVE_LD80BITS +//GO(qfcvt_r, iFDipppL) +#else +//GO(qfcvt_r, iFKipppL) +#endif +// qgcvt +//GOM(qsort, vFEpLLp) //%% +//GOM(qsort_r, vFEpLLpp) //%% +// query_module // Weak +//GO(quotactl, iFipip) +GO(raise, iFi) +GO(rand, iFv) +GOW(random, iFv) +//GOW(random_r, iFpp) +//GO(rand_r, iFp) +//GOW(rawmemchr, pFpi) +//GO(__rawmemchr, pFpi) +// rcmd +// rcmd_af +// __rcmd_errstr // type B +//GOM(read, lFipL) //%%,noE +//GOW(__read, lFipL) +// readahead // Weak +//GO(__read_chk, lFipLL) +//GOM(readdir, pFEp) //%% should also be weak +//GO(readdir64, pFp) // check if alignement is correct +// readdir64_r +//GOM(readdir_r, iFEppp) //%% should also be weak +//GOM(readlink, iFEppL) //%% +//GOM(readlinkat, iFEippL) +// __readlinkat_chk +// __readlink_chk +//GO(readv, lFipi) +//GO(realloc, pFpL) +//DATAV(__realloc_hook, 4) +//GOM(realpath, pFEpp) //%% +//GO(__realpath_chk, pFppu) +// reboot +// re_comp // Weak +// re_compile_fastmap // Weak +//GOW(re_compile_pattern, pFpup) +//GO(recv, lFipLi) +//GO(__recv_chk, iFipuui) +//GOW(recvfrom, lFipLipp) +// __recvfrom_chk +//GOM(recvmmsg, iFEipuup) //%% actual recvmmsg is glibc 2.12+. The syscall is Linux 2.6.33+, so use syscall... +//GOW(recvmsg, lFipi) +// re_exec // Weak +//GOW(regcomp, iFppi) +//GOW(regerror, uFippu) +//GO(regexec, iFppupi) +//GOW(regfree, vFp) +//GOM(__register_atfork, iFEpppp) //%% +// register_printf_function // Weak +// registerrpc +// remap_file_pages // Weak +//GOW(re_match, iFppiip) +// re_match_2 // Weak +//GO(remove, iFp) +//GO(removexattr, iFpp) +// remque +//GO(rename, iFpp) +//GO(renameat, iFipip) +//GO(renameat2, iFipipu) +// _res // type B +//GOW(re_search, iFppiiip) +//GOW(re_search_2, iFppipiiipi) +// re_set_registers // Weak +GOW(re_set_syntax, uFu) +// _res_hconf // type B +//GO(__res_iclose, vFpi) +GO(__res_init, iFv) +//GO(__res_maybe_init, iFpi) +//GO(__res_nclose, vFp) +//GO(__res_ninit, iFp) +//DATA(__resp, 4) +// __res_randomid +//GO(__res_state, pFv) +//DATA(re_syntax_options, 4) // type B +// revoke +//GO(rewind, vFp) +//GO(rewinddir, vFp) +// rexec +// rexec_af +// rexecoptions // type B +//GOW(rindex, pFpi) +//GOW(rmdir, iFp) +//GO(readdir64_r, iFppp) // is this present? +// rpc_createerr // type B +// _rpc_dtablesize +// __rpc_thread_createerr +// __rpc_thread_svc_fdset +// __rpc_thread_svc_max_pollfd +// __rpc_thread_svc_pollfd +//GO(rpmatch, iFp) +// rresvport +// rresvport_af +// rtime +// ruserok +// ruserok_af +// ruserpass +//GOW(sbrk, pFl) +//GO(__sbrk, pFl) +// scalbn // Weak +// scalbnf // Weak +// scalbnl // Weak +//GOM(scandir, iFEpppp) //%% +//GOM(scandir64, iFEpppp) //%% +//GO2(scanf, iFpp, vscanf) +//GO(__sched_cpualloc, pFu) //TODO: check, return cpu_set_t* : should this be aligned/changed? +//GO(__sched_cpucount, iFup) +//GO(__sched_cpufree, vFp) +//GO(sched_getaffinity, iFiup) +GO(sched_getcpu, iFv) +//GO(__sched_getparam, iFip) +//GOW(sched_getparam, iFip) +GO(__sched_get_priority_max, iFi) +GOW(sched_get_priority_max, iFi) +GO(__sched_get_priority_min, iFi) +GOW(sched_get_priority_min, iFi) +GO(__sched_getscheduler, iFi) +GOW(sched_getscheduler, iFi) +//GOW(sched_rr_get_interval, iFip) +//GO(sched_setaffinity, iFiup) +//GOW(sched_setparam, iFip) +//GO(__sched_setscheduler, iFiip) +//GOW(sched_setscheduler, iFiip) +GO(__sched_yield, iFv) +GOW(sched_yield, iFv) +GO(__secure_getenv, pFp) +GO(secure_getenv, pFp) +// seed48 +// seed48_r // Weak +//GO(seekdir, vFpi) +//GOW(select, iFipppp) +//GO(__select, iFipppp) +//GO(semctl, iFiiiN) +GOW(semget, iFuii) +//GOW(semop, iFipL) +//GO(semtimedop, iFipup) +//GOW(send, lFipLi) +// __send // Weak +//GO(sendfile, lFiipL) +//GO(sendfile64, lFiipL) +//GOW(sendmsg, lFipi) +//GOM(__sendmmsg, iFEipuu) //%% actual __sendmmsg is glibc 2.14+. The syscall is Linux 3.0+, so use syscall... +//GOW(sendto, lFipLipu) +// setaliasent +//GOW(setbuf, vFpp) +//GOW(setbuffer, vFppL) +GOM(setcontext, iFEp) //%% +// setdomainname +GO(setegid, iFu) +//GOW(setenv, iFppi) +// _seterr_reply +GO(seteuid, iFu) +// setfsent +// setfsgid +// setfsuid +GOW(setgid, iFu) +GO(setgrent, vFv) +//GO(setgroups, iFup) +GO(sethostent, vFi) +// sethostid +//GO(sethostname, iFpu) +// setipv4sourcefilter +//GOW(setitimer, iFipp) +GOM(setjmp, iFEp) //%% +GOM(_setjmp, iFEp) //%% +//GO(setlinebuf, vFp) +GO(setlocale, aFia) +// setlogin +GO(setlogmask, iFi) +//GOW(setmntent, pFpp) +// __setmntent +// setnetent +// setnetgrent +GOW(setpgid, iFuu) +// __setpgid +GO(setpgrp, iFv) +GO(setpriority, iFiii) +GO(setprotoent, vFi) +GO(setpwent, vFv) +GOW(setregid, iFuu) +GOW(setresgid, iFuuu) +GOW(setresuid, iFuuu) +GOW(setreuid, iFuu) +//GO(setrlimit, iFip) +//GO(setrlimit64, iFip) +// setrpcent +// setservent +GOW(setsid, iFv) +//GOW(setsockopt, iFiiipu) +// setsourcefilter +GO(setspent, vFv) +// setstate // Weak +//GOW(setstate_r, iFpp) +//GOW(settimeofday, iFpp) +// setttyent +GOW(setuid, iFu) +// setusershell +GOW(setutent, vFv) +// setutxent +//GOW(setvbuf, iFppiL) +//GO(setxattr, iFpppui) +// sgetspent +// sgetspent_r // Weak +//GOW(shmat, pFipi) +//GOW(shmctl, iFiip) +//GOW(shmdt, iFp) +GOW(shmget, iFuui) +GOW(shutdown, iFii) +//GOWM(sigaction, iFEipp) //%% +//GOWM(__sigaction, iFEipp) //%% +//GO(sigaddset, iFpi) +// __sigaddset +GOWM(sigaltstack, iFEpp) //%% +// sigandset +GOW(sigblock, iFi) +//GO(sigdelset, iFpi) +// __sigdelset +//GO(sigemptyset, iFp) +//GO(sigfillset, iFp) +GO(siggetmask, iFv) +// sighold +// sigignore +GO(siginterrupt, iFii) // no need to wrap this one? +// sigisemptyset +//GO(sigismember, iFpi) +// __sigismember +GOM(siglongjmp, vFEip) //%% +GOW2(signal, pFEip, my_signal) +// signalfd +GO(__signbit, iFd) +GO(__signbitf, iFf) +// sigorset +// sigpause // Weak +// __sigpause +//GO(sigpending, iFp) +//GOW(sigprocmask, iFipp) +// sigqueue // Weak +// sigrelse +// sigreturn // Weak +GOM(sigset, pFEip) //%% +GOM(__sigsetjmp, iFEp) //%% +GOW(sigsetmask, iFi) +// sigstack +//GOW(sigsuspend, iFp) +// __sigsuspend +//GOW(sigtimedwait, iFppp) +//GOW(sigvec, iFipp) +//GOW(sigwait, iFpp) +//GOW(sigwaitinfo, iFpp) +GOW(sleep, uFu) +//GOM(snprintf, iFEpLpV) //%% +//GOM(__snprintf_chk, iFEpLiipV) //%% +//GOM(__snprintf, iFEpLpV) //%% +// sockatmark +GOW(socket, iFiii) +//GOW(socketpair, iFiiip) +//GO(splice, iFipipuu) +//GOM(sprintf, iFEppV) //%% +//GOM(__sprintf_chk, iFEpvvpV) //%% +// sprofil // Weak +GOW(srand, vFu) +GO(srand48, vFi) +// srand48_r // Weak +GOW(srandom, vFu) +//GOW(srandom_r, iFup) +//GOM(sscanf, iFEppV) //%% +// ssignal // Weak +// sstk +GOM(__stack_chk_fail, vFEv) //%% +//GOM(lstat64, iFpp) //%%,noE +//GOM(stat64, iFpp) //%%,noE +//GOW(statfs, iFpp) +// __statfs +//GOWM(statfs64, iFpp) //%%,noE +//GO(statvfs, iFpp) +//GOW(statvfs64, iFpp) // is alignment ok? +DATAM(stderr, 4) +DATAM(stdin, 4) +DATAM(stdout, 4) +// step // Weak +// stime +//GO(stpcpy, pFpp) +// __stpcpy +//GO(__stpcpy_chk, pFppL) +// __stpcpy_small +//GOW(stpncpy, pFppL) +//GO(__stpncpy, pFppL) +//GO(__stpncpy_chk, pFppLL) +//GOW(strcasecmp, iFpp) +//GO(__strcasecmp, iFpp) +// __strcasecmp_l +// strcasecmp_l // Weak +//GOW(strcasestr, pFpp) +//GO(__strcasestr, pFpp) +//GO(strcat, pFpp) +//GO(__strcat_chk, pFppL) +//GO(strchr, pFpi) +//GOW(strchrnul, pFpi) +GO(strcmp, iFpp) +//GO(strcoll, iFpp) +//GO(__strcoll_l, iFppp) +//GOW(strcoll_l, iFppp) +//GO(strcpy, pFpp) +//GO(__strcpy_chk, pFppL) +// __strcpy_small +GO(strcspn, LFpp) +// __strcspn_c1 +// __strcspn_c2 +// __strcspn_c3 +//GOW(strdup, pFp) +//GO(__strdup, pFp) +//GO(strerror, pFi) +//GO(strerror_l, pFip) +//GO(__strerror_r, pFipu) +//GOW(strerror_r, pFipu) +//GO(strfmon, lFpLpppppppppp) //vaarg, probably needs align, there are just double... +// __strfmon_l +// strfmon_l // Weak +// strfry +//GO(strftime, LFpLpp) +//GO(__strftime_l, LFpLppL) +//GOW(strftime_l, LFpLppL) +//GO(strlen, LFp) +//GOW(strncasecmp, iFppL) +// __strncasecmp_l +// strncasecmp_l // Weak +//GO(strncat, pFppL) +//GO(__strncat_chk, pFppLL) +//GO(strncmp, iFppL) +//GO(strncpy, pFppL) +//GO(__strncpy_chk, pFppLL) +//GOW(strndup, pFpL) +//GO(__strndup, pFpL) +//GO(strnlen, LFpL) +//GO(strpbrk, pFpp) +// __strpbrk_c2 +// __strpbrk_c3 +//GO(strptime, pFppp) +// strptime_l // Weak +//GO(strrchr, pFpi) +//GOW(strsep, pFpp) +// __strsep_1c +// __strsep_2c +// __strsep_3c +// __strsep_g +//GO(strsignal, pFi) +//GO(strspn, LFpp) +// __strspn_c1 +// __strspn_c2 +// __strspn_c3 +//GO(strstr, pFpp) +//GO(strtod, dFpp) +//GO(__strtod_internal, dFppi) +//GO(__strtod_l, dFppp) +//GOW(strtod_l, dFppu) +//GO(strtof, fFpp) +//GO(__strtof_internal, fFppp) +//GO(__strtof_l, fFppp) +//GOW(strtof_l, fFppu) +//GO(strtoimax, IFppi) +//GO(strtok, pFpp) +//GO(__strtok_r, pFppp) +//GOW(strtok_r, pFppp) +// __strtok_r_1c +GO(strtol, lFpBp_i) +#ifdef HAVE_LD80BITS +//GO(strtold, DFpp) +//GO(__strtold_internal, DFppi) +//GO(__strtold_l, DFppip) +//GOW(strtold_l, DFppu) +#else +//GO(strtold, KFpp) +//GO2(__strtold_internal, KFppi, __strtod_internal) +//GO2(__strtold_l, KFppip, __strtod_l) +//GOW2(strtold_l, KFppu, strtod_l) +#endif +//GO(__strtol_internal, lFppi) +//GO(strtoll, IFppi) +//GO(__strtol_l, lFppiip) +//GOW(strtol_l, lFppiip) +//GO(__strtoll_internal, IFppii) +//GO(__strtoll_l, IFppip) +//GOW(strtoll_l, IFppip) +//GOW(strtoq, IFppi) // is that ok? +//GO(strtoul, LFppi) +//GO(__strtoul_internal, LFppii) +//GO(strtoull, UFppi) +//GO(__strtoul_l, uFppip) +//GOW(strtoul_l, LFppip) +//GO(__strtoull_internal, UFppii) +//GO(__strtoull_l, UFppip) +//GOW(strtoull_l, UFppip) +//GO(strtoumax, UFppi) +//GOW(strtouq, UFppi) // ok? +//GOW(strverscmp, iFpp) +// __strverscmp +//GO(strxfrm, uFppu) +//GO(__strxfrm_l, uFppup) +//GO(strxfrm_l, uFppup) +// stty +// svcauthdes_stats // type B +// svcerr_auth +// svcerr_decode +// svcerr_noproc +// svcerr_noprog +// svcerr_progvers +// svcerr_systemerr +// svcerr_weakauth +// svc_exit +// svcfd_create +// svc_fdset // type B +// svc_getreq +// svc_getreq_common +// svc_getreq_poll +// svc_getreqset +// svc_max_pollfd // type B +// svc_pollfd // type B +// svcraw_create +// svc_register +// svc_run +// svc_sendreply +// svctcp_create +// svcudp_bufcreate +// svcudp_create +// svcudp_enablecache +// svcunix_create +// svcunixfd_create +// svc_unregister +//GO(swab, vFppi) +GOM(swapcontext, iFEpp) //%% +// swapoff // Weak +// swapon // Weak +//GOM(swprintf, iFEpupV) //%% +//GOM(__swprintf_chk, iFEpuiupV) //%% +//GO2(swscanf, iFppV, vswscanf) // swscanf va_list is only pointer, no realign to do +//GOW(symlink, iFpp) +//GO(symlinkat, iFpip) +GO(sync, vFv) +GO(syncfs, iFi) +// sync_file_range +GOM(syscall, uFEV) //%% +GOW(sysconf, lFi) +GO(__sysconf, lFi) +// sysctl // Weak +//GO(__sysctl, iFp) +//DATA(_sys_errlist, 4) +//DATA(sys_errlist, 4) +//GO(sysinfo, iFp) +//GO2(syslog, vFipV, vsyslog) +//GO2(__syslog_chk, vFiipV, __vsyslog_chk) +//DATA(_sys_nerr, 4) // type R +//DATA(sys_nerr, 4) // type R +//DATA(sys_sigabbrev, 4) +//DATA(_sys_siglist, 4) +//DATA(sys_siglist, 4) +//GOW(system, iFp) // Need to wrap to use box86 if needed? +//GOM(__sysv_signal, pFEip) //%% +//GOWM(sysv_signal, pFEip) //%% +GOW(tcdrain, iFi) +GO(tcflow, iFii) +GO(tcflush, iFii) +//GOW(tcgetattr, iFip) +GO(tcgetpgrp, iFi) +// tcgetsid +GO(tcsendbreak, iFii) +//GO(tcsetattr, iFiip) +GO(tcsetpgrp, iFii) +// tdelete // Weak +// tdestroy // Weak +// tee +//GO(telldir, iFp) +//GO(tempnam, pFpp) +//GOW(textdomain, pFp) +// tfind // Weak +//GO(time, LFp) +//GO(timegm, LFp) +// timelocal // Weak +GO(timerfd_create, iFii) +//GO(timerfd_gettime, iFip) +//GO(timerfd_settime, iFiipp) +//GOW(times, iFp) +//DATAV(timezone, 4) +//DATAB(__timezone, 4) // type B +//GO(tmpfile, pFv) +//GO(tmpfile64, pFv) +//GO(tmpnam, pFp) +//GO(tmpnam_r, pFp) +GO(toascii, iFi) +// __toascii_l // Weak +GO(tolower, iFi) +// _tolower +// __tolower_l +//GOW(tolower_l, iFip) +GO(toupper, iFi) +// _toupper +// __toupper_l +//GOW(toupper_l, iFip) +// towctrans // Weak +// __towctrans +// __towctrans_l +// towctrans_l // Weak +GO(towlower, iFi) +//GO(__towlower_l, iFip) +//GOW(towlower_l, iFip) +//GO(towupper, iFi) +//GO(__towupper_l, iFip) +//GOW(towupper_l, iFip) +// tr_break +//GOW(truncate, iFpu) +//GO(truncate64, iFpU) +// tsearch // Weak +//GO(ttyname, pFi) +//GOW(ttyname_r, iFipu) +// __ttyname_r_chk +// ttyslot +// twalk // Weak +//DATAV(tzname, 4) +//DATA(__tzname, 4) +GOW(tzset, vFv) +// ualarm +//GO(__uflow, iFp) +// ulckpwdf // Weak +// ulimit // Weak +GOW(umask, uFu) +//GOW(umount, iFp) +//GOW(umount2, iFpi) +//GOWM(uname, iFp) //%%,noE +//GO(__underflow, iFp) +//GOW(ungetc, iFip) +//GO(ungetwc, iFip) +//GOW(unlink, iFp) +//GO(unlinkat, iFipi) +GO(unlockpt, iFi) +//GOW(unsetenv, iFp) +// unshare +//GOW(updwtmp, vFpp) +// updwtmpx +// uselib +GOW(uselocale, aFa) +GO(__uselocale, aFa) +// user2netname +GO(usleep, iFu) +// ustat +//GO(utime, iFpp) +//GO(utimensat, iFippi) +//GOW(utimes, iFpp) //TODO: check, signature is int utimes(const char *filename, const struct timeval times[2]); +//GOW(utmpname, iFp) +// utmpxname +//GOW(valloc, pFu) +//GOM(vasprintf, iFEpppp) //%% +//GOM(__vasprintf_chk, iFEpippp) //%% +// vdprintf // Weak +// __vdprintf_chk +//GOM(verr, vFEpV) //%% +// verrx +//GO(versionsort, iFpp) +//GO(versionsort64, iFpp) //need to align dirent64? +GOWM(vfork, iFEv) //%% +// __vfork +//GOM(vfprintf, iFEppp) //%% +//GOM(__vfprintf_chk, iFEpvpp) //%% +//GOWM(vfscanf, iFEppp) //%% +// __vfscanf +//GOWM(vfwprintf, iFEppp) //%% +//GO2(__vfwprintf_chk, iFEpvpp, my_vfwprintf) +//GOW(vfwscanf, iFppp) +// vhangup +// vlimit +// vmsplice +//GOM(vprintf, iFEpp) //%% +//GOM(__vprintf_chk, iFEvpp) //%% +// vscanf // Weak +//GOWM(vsnprintf, iFEpLppp) //%% +//GOWM(__vsnprintf, iFEpuppp) //%% +//GOM(__vsnprintf_chk, iFEpuvvppp) //%% +//GOWM(vsprintf, iFEppp) //%% +//GOM(__vsprintf_chk, iFEpiLpp) //%% +//GOM(vsscanf, iFEppp) //%% +// __vsscanf // Weak +//GOWM(vswprintf, iFEpuppp) //%% +//GOWM(__vswprintf_chk, iFEpLiLppp) //%% +//GO(vswscanf, iFppp) +//GO(vsyslog, vFipp) +//GO(__vsyslog_chk, vFiipp) +// vtimes +//GOM(vwarn, vFEppp) //%% +// vwarnx +//GOM(vwprintf, iFEpp) //%% +//GO2(__vwprintf_chk, iFEvpp, my_vwprintf) +//GO(vwscanf, iFpp) +//GOW(wait, iFp) +//GOW(__wait, iFp) +//GOW(wait3, iFpip) +//GOW(wait4, iFipip) +//GOW(waitid, iFiipi) +//GOW(waitpid, lFlpi) +//GOW(__waitpid, lFlpi) +//GO(warn, vFppppppppp) +//GO(warnx, vFppppppppp) +//GOW(wcpcpy, pFpp) +// __wcpcpy_chk +//GOW(wcpncpy, pFpp) +// __wcpncpy_chk +//GOW(wcrtomb, LFpip) +// __wcrtomb_chk +//GOW(wcscasecmp, iFpp) +// __wcscasecmp_l +//GOW(wcscasecmp_l, iFppp) +//GOW(wcscat, pFpp) +//GO(__wcscat_chk, pFppu) +//GO(wcschr, pFpi) +// wcschrnul // Weak +//GO(wcscmp, iFpp) +//GOW(wcscoll, iFpp) +//GO(__wcscoll_l, iFppp) +//GOW(wcscoll_l, iFppp) +//GO(wcscpy, pFpp) +//GO(__wcscpy_chk, pFppu) +//GO(wcscspn, uFpp) +//GO(wcsdup, pFp) +//GO(wcsftime, LFpLpp) +//GO(__wcsftime_l, LFpLppp) +//GOW(wcsftime_l, LFpLppp) +//GOW(wcslen, LFp) +//GOW(wcsncasecmp, iFppu) +// __wcsncasecmp_l +//GOW(wcsncasecmp_l, iFppup) +//GO(wcsncat, pFppu) +// __wcsncat_chk +//GO(wcsncmp, iFppu) +//GOW(wcsncpy, pFppu) +//GO(__wcsncpy_chk, pFppuu) +//GOW(wcsnlen, LFpL) +//GOW(wcsnrtombs, LFppLLp) +// __wcsnrtombs_chk +//GO(wcspbrk, pFpp) +//GO(wcsrchr, pFpi) +//GOW(wcsrtombs, uFppup) +// __wcsrtombs_chk +//GO(wcsspn, uFpp) +//GO(wcsstr, pFpp) +//GO(wcstod, dFpp) +//GO(__wcstod_internal, dFppi) +// __wcstod_l +// wcstod_l // Weak +//GO(wcstof, fFpp) +// __wcstof_internal +// __wcstof_l +// wcstof_l // Weak +// wcstoimax +//GO(wcstok, pFppp) +//GO(wcstol, iFppi) +//GO(wcstold, DFpp) +// __wcstold_internal +// __wcstold_l +// wcstold_l // Weak +//GO(__wcstol_internal, iFppii) +//GO(wcstoll, IFppi) +// __wcstol_l +// wcstol_l // Weak +// __wcstoll_internal +// __wcstoll_l +// wcstoll_l // Weak +//GO(wcstombs, uFppu) +// __wcstombs_chk +// wcstoq // Weak +//GO(wcstoul, iFppi) +//GO(__wcstoul_internal, LFppii) +//GO(wcstoull, UFppi) +// __wcstoul_l +// wcstoul_l // Weak +// __wcstoull_internal +// __wcstoull_l +// wcstoull_l // Weak +// wcstoumax +// wcstouq // Weak +// wcswcs // Weak +//GO(wcswidth, iFpu) +//GO(wcsxfrm, uFppu) +//GOW(wcsxfrm_l, uFppup) +//GO(__wcsxfrm_l, uFppup) +GO(wctob, iFi) +//GO(wctomb, iFpi) +//GO(__wctomb_chk, iFpuL) +// wctrans // Weak +// __wctrans_l +// wctrans_l // Weak +//GOW(wctype, uFp) +GO(__wctype_l, uFpa) +GOW(wctype_l, uFpa) +//GO(wcwidth, iFu) +//GOW(wmemchr, pFpuL) +GO(wmemcmp, iFppL) +GOW(wmemcpy, pFppL) +GO(__wmemcpy_chk, pFppLL) +//GOW(wmemmove, pFppL) +// __wmemmove_chk +// wmempcpy // Weak +// __wmempcpy_chk +//GO(wmemset, pFpuL) +// __wmemset_chk +//GO(wordexp, iFppi) +//GO(wordfree, vFp) +// __woverflow +//GOM(wprintf, iFEpV) //%% +//GOM(__wprintf_chk, iFEipV) //%% +//GOW(write, lFipL) +//GOW(__write, lFipL) +//GOW(writev, lFipi) +// wscanf +// __wuflow +// __wunderflow +// xdecrypt +// xdr_accepted_reply +// xdr_array +// xdr_authdes_cred +// xdr_authdes_verf +// xdr_authunix_parms +// xdr_bool +// xdr_bytes +// xdr_callhdr +// xdr_callmsg +// xdr_char +// xdr_cryptkeyarg +// xdr_cryptkeyarg2 +// xdr_cryptkeyres +// xdr_des_block +// xdr_double +// xdr_enum +// xdr_float +// xdr_free +// xdr_getcredres +// xdr_hyper +//GO(xdr_int, iFpp) +// xdr_int16_t +// xdr_int32_t +// xdr_int64_t +// xdr_int8_t +// xdr_keybuf +// xdr_key_netstarg +// xdr_key_netstres +// xdr_keystatus +// xdr_long +// xdr_longlong_t +// xdrmem_create +// xdr_netnamestr +// xdr_netobj +// xdr_opaque +// xdr_opaque_auth +// xdr_pmap +// xdr_pmaplist +// xdr_pointer +// xdr_quad_t +// xdrrec_create +// xdrrec_endofrecord +// xdrrec_eof +// xdrrec_skiprecord +// xdr_reference +// xdr_rejected_reply +// xdr_replymsg +// xdr_rmtcall_args +// xdr_rmtcallres +// xdr_short +// xdr_sizeof +// xdrstdio_create +// xdr_string +// xdr_u_char +// xdr_u_hyper +//GO(xdr_u_int, iFpp) +// xdr_uint16_t +// xdr_uint32_t +// xdr_uint64_t +// xdr_uint8_t +// xdr_u_long +// xdr_u_longlong_t +// xdr_union +// xdr_unixcred +// xdr_u_quad_t +// xdr_u_short +// xdr_vector +// xdr_void +// xdr_wrapstring +// xencrypt +//GO(__xmknod, iFipup) +//GO(__xmknodat, iFiipip) +//GO(__xpg_basename, pFp) +// __xpg_sigpause // Weak +//GO(__xpg_strerror_r, pFipu) +// xprt_register +// xprt_unregister +//GOM(__xstat, iFEipp) //%% +//GOM(__xstat64, iFEipp) //%% + +// forcing a custom __gmon_start__ that does nothing +GOM(__gmon_start__, vFEv) //%% + +GOM(_Jv_RegisterClasses, vFv) //%%,noE dummy + +GOM(__fdelt_chk, LFL) //%%,noE + +GOM(getauxval, uFEu) //%% implemented since glibc 2.16 + +//GOM(prlimit64, lFpupp) //%%,noE +//GO(process_vm_readv, lFipLpLL) +//GO(process_vm_writev, lFipLpLL) +//GOM(reallocarray, pFpLL) //%%,noE +//GOM(__open_nocancel, iFEpOV) //%% +//GO2(__read_nocancel, lFipL, read) +GO2(__close_nocancel, iFi, close) + +//GOM(mkstemps64, iFEpi) //%% not always implemented +//GOM(getentropy, iFEpL) //%% starting from glibc 2.25 + +// not found (libitm???), but it seems OK to declare dummies: + +//GOM(_ITM_RU1, uFp) //%%,noE +//GOM(_ITM_RU4, uFp) //%%,noE +//GOM(_ITM_RU8, UFp) +//GOM(_ITM_memcpyRtWn, vFppu) //%%,noE register(2) +//GOM(_ITM_memcpyRnWt, vFppu) //%%,noE register(2) +//GOM(_ITM_addUserCommitAction, vFEpup) +GOM(_ITM_registerTMCloneTable, vFEpu) //%% +GOM(_ITM_deregisterTMCloneTable, vFEp) //%% + +GOM(__umoddi3, UFUU) //%%,noE +GOM(__udivdi3, UFUU) //%%,noE +GOM(__divdi3, IFII) //%%,noE +//GOM(__poll_chk, iFpuii) //%%,noE + +GOM(fallocate64, iFiiII) //%%,noE + +//DATAM(__libc_stack_end, sizeof(void*)) + +//DATAM(___brk_addr, 4) +//DATA(__libc_enable_secure, 4) + +//GOM(__register_frame_info, vFpp) //%%,noE faked function +//GOM(__deregister_frame_info, pFp) //%%,noE + +//GO(name_to_handle_at, iFipppi) // only glibc 2.14+, so may not be present... + +//GOM(modify_ldt, iFEipL) // there is suposedly no glibc wrapper for this one + +#ifdef ANDROID +GOM(__libc_init, vFEpppp) +GO(__errno, pFv) +#else +// Those symbols don't exist in non-Android builds +//GOM(__libc_init, +//GO(__errno, +#endif + +//GOM(stat, +//GOM(lstat, +//GOM(fstat, +//GO(setprogname, +//GO(getprogname, + +DATAM(__libc_single_threaded, 4) //B type diff --git a/src/wrapped32/wrappedlibdl.c b/src/wrapped32/wrappedlibdl.c new file mode 100755 index 00000000..c3a79feb --- /dev/null +++ b/src/wrapped32/wrappedlibdl.c @@ -0,0 +1,165 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> +#include <elf.h> +#include <link.h> + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "emu/x64emu_private.h" +#include "library.h" +#include "librarian.h" +#include "box32context.h" +#include "elfloader.h" +#include "elfs/elfloader_private.h" +#include "x64emu.h" + + +#define LIBNAME libdl +#ifdef ANDROID + static const char* libdlName = "libdl.so"; +#else + static const char* libdlName = "libdl.so.2"; +#endif + +void* my_dlopen(x64emu_t* emu, void *filename, int flag) EXPORT; +void* my_dlmopen(x64emu_t* emu, void* mlid, void *filename, int flag) EXPORT; +char* my_dlerror(x64emu_t* emu) EXPORT; +void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) EXPORT; +int my_dlclose(x64emu_t* emu, void *handle) EXPORT; +int my32_dladdr(x64emu_t* emu, void *addr, void *info) EXPORT; +int my32_dladdr1(x64emu_t* emu, void *addr, void *info, void** extra_info, int flags) EXPORT; +void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, const char *vername) EXPORT; +int my32_dlinfo(x64emu_t* emu, void* handle, int request, void* info) EXPORT; + +#ifndef RTLD_DL_SYMENT +#define RTLD_DL_SYMENT 1 +#endif +#ifndef RTLD_DL_LINKMAP +#define RTLD_DL_LINKMAP 2 +#endif + +void dl_clear_error(); +#define CLEARERR dl_clear_error() +void dl_set_error(const char*); +char* dl_last_error(); +library_t* dl_get_library(void* handle); + +typedef struct my_dl_info_32_s +{ + ptr_t dli_fname; // const char* + ptr_t dli_fbase; // void* + ptr_t dli_sname; // const char* + ptr_t dli_saddr; // void* +} my_dl_info_32_t; + +int my32_dladdr1(x64emu_t* emu, void *addr, void *i, void** extra_info, int flags) +{ + //int dladdr(void *addr, my_dl_info_32_t *info); + CLEARERR; + my_dl_info_32_t *info = (my_dl_info_32_t*)i; + printf_log(LOG_DEBUG, "Warning: partially unimplement call to dladdr/dladdr1(%p, %p, %p, %d)\n", addr, info, extra_info, flags); + + //emu->quit = 1; + library_t* lib = NULL; + info->dli_saddr = 0; + info->dli_fname = 0; + void* start = NULL; + const char* fname = NULL; + void* base = NULL; + const char* sname = FindSymbolName(my_context->maplib, addr, &start, NULL, &fname, &base, &lib); + info->dli_saddr = to_ptrv(start); + info->dli_fname = to_ptrv((void*)fname); + info->dli_fbase = to_ptrv(base); + info->dli_sname = to_ptrv((void*)sname); + printf_log(LOG_DEBUG, " dladdr return saddr=%p, fname=\"%s\", sname=\"%s\"\n", start, sname?sname:"", fname?fname:""); + if(flags==RTLD_DL_SYMENT) { + printf_log(LOG_INFO, "Warning, unimplement call to dladdr1 with RTLD_DL_SYMENT flags\n"); + } else if (flags==RTLD_DL_LINKMAP) { + printf_log(LOG_INFO, "Warning, unimplemented call to dladdr1 with RTLD_DL_LINKMAP flags\n"); + *(ptr_t*)extra_info = to_ptrv(getLinkMapLib32(lib)); + } + return (info->dli_sname)?1:0; // success is non-null here... +} +int my32_dladdr(x64emu_t* emu, void *addr, void *i) +{ + return my32_dladdr1(emu, addr, i, NULL, 0); +} + +int my32_dlinfo(x64emu_t* emu, void* handle, int request, void* info) +{ + (void)emu; + printf_dlsym(LOG_DEBUG, "Call to dlinfo(%p, %d, %p)\n", handle, request, info); + CLEARERR; + library_t *lib = dl_get_library(handle); + if(lib==(library_t*)-1LL) { + printf_dlsym(LOG_DEBUG, "dlinfo: %s\n", dl_last_error()); + return -1; + } + //elfheader_t *h = (GetElfIndex(lib)>-1)?my_context->elfs[GetElfIndex(lib)]:NULL; + switch(request) { + case 2: // RTLD_DI_LINKMAP + { + *(linkmap32_t**)info = getLinkMapLib32(lib); + } + return 0; + default: + printf_log(LOG_NONE, "Warning, unsupported call to dlinfo(%p, %d, %p)\n", handle, request, info); + { + char tmp[129] = {0}; + snprintf(tmp, 129, "unsupported call to dlinfo request:%d\n", request); + dl_set_error(tmp); + } + } + return -1; +} + +typedef struct my_dl_find_object_s { + uint64_t dlfo_flags; + ptr_t dlfo_map_start; + ptr_t dlfo_map_end; + ptr_t dlf_link_map; //struct link_map * + ptr_t dlfo_eh_frame; + // other stuff... +} my_dl_find_object_t; + +EXPORT int my32__dl_find_object(x64emu_t* emu, void* addr, my_dl_find_object_t* result) +{ + //printf_log(LOG_INFO, "Unimplemented _dl_find_object called\n"); + uintptr_t start=0, sz=0; + elfheader_t* h = FindElfAddress(my_context, (uintptr_t)addr); + if(h) { + // find an actual elf + const char* name = FindNearestSymbolName(h, addr, &start, &sz); + result->dlfo_map_start = start; + result->dlfo_map_end = start+sz-1; + result->dlfo_eh_frame = h->ehframehdr+h->delta; + result->dlfo_flags = 0; // unused it seems + result->dlf_link_map = to_ptrv(getLinkMapElf32(h)); + return 0; + } + return -1; +} + +//#define CUSTOM_INIT\ +// if(!box32_isglibc234) setNeededLibs(lib, 1, "libc.so.6"); + + +void closeAllDLOpenned(); + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_FINI \ + closeAllDLOpenned(); + +// define all standard library functions +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibdl_private.h b/src/wrapped32/wrappedlibdl_private.h new file mode 100755 index 00000000..5df76d7d --- /dev/null +++ b/src/wrapped32/wrappedlibdl_private.h @@ -0,0 +1,15 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#error Meh... +#endif + +GOM(dladdr, iFEpp) +GOM(dladdr1, iFEpppi) +GO2(dlclose, iFEp, my_dlclose) +GO2(dlerror, pFEv, my_dlerror) +//DATAB(_dlfcn_hook, 4) +GOM(dlinfo, iFEpip) +GO2(dlmopen, pFEppi, my_dlmopen) +GO2(dlopen, pFEpi, my_dlopen) +GO2(dlsym, pFEpp, my_dlsym) +GO2(dlvsym, pFEppp, my_dlvsym) // Weak +GOM(_dl_find_object, iFEpp) diff --git a/src/wrapped32/wrappedlibm.c b/src/wrapped32/wrappedlibm.c new file mode 100755 index 00000000..a36a3227 --- /dev/null +++ b/src/wrapped32/wrappedlibm.c @@ -0,0 +1,154 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> +#include <complex.h> +#include <math.h> + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "box32.h" + +static const char* libmName = +#ifdef ANDROID + "libm.so" +#else + "libm.so.6" +#endif + ; +#define LIBNAME libm + +static library_t* my_lib = NULL; + +typedef float (*fFff_t) (float, float); +typedef double (*dFdd_t) (double, double); +typedef float (*fFf_t) (float); +typedef double (*dFd_t) (double); +#if 0 +typedef union my_float_complex_s { + float complex f; + uint64_t u64; +} my_float_complex_t; + +// complex <- FUNC(complex) wrapper +#define GO_cFc(N) \ +EXPORT void* my_##N(void* p, void* c) \ +{ \ + *(double complex*)p = N(*(double complex*)c); \ + return p; \ +} \ +EXPORT uint64_t my_##N##f(void* c) \ +{ \ + my_float_complex_t ret; \ + ret.f = N##f(*(float complex*)c); \ + return ret.u64; \ +} +// complex <- FUNC(complex, complex) wrapper +#define GO_cFcc(N) \ +EXPORT void* my_##N(void* p, void* c, void* d) \ +{ \ + *(double complex*)p = N(*(double complex*)c, *(double complex*)d); \ + return p; \ +} \ +EXPORT uint64_t my_##N##f(void* c, void* d) \ +{ \ + my_float_complex_t ret; \ + ret.f = N##f(*(float complex*)c, *(float complex*)c); \ + return ret.u64; \ +} + +GO_cFc(clog) +GO_cFc(csqrt) +GO_cFc(cproj) +GO_cFc(cexp) +GO_cFc(ccos) +GO_cFc(csin) +GO_cFc(ccosh) +GO_cFc(csinh) +GO_cFc(ctan) +GO_cFc(ctanh) +GO_cFc(cacos) +GO_cFc(casin) +GO_cFc(cacosh) +GO_cFc(casinh) +GO_cFc(catan) +GO_cFc(catanh) +GO_cFcc(cpow) + +#undef GO_cFc +#undef GO_cFcc +#endif + +#define FINITE(N, T, R, P, ...) \ +EXPORT R my32___##N##_finite P \ +{ \ + static int check = 0; \ + static T f = NULL; \ + if(!check) { \ + f = (T)dlsym(my_lib->w.lib, "__" #N "_finite"); \ + ++check; \ + } \ + if(f) \ + return f(__VA_ARGS__); \ + else \ + return N(__VA_ARGS__); \ +} + +#define F1F(N) FINITE(N, fFf_t, float, (float a), a) +#define F1D(N) FINITE(N, dFd_t, double, (double a), a) +#define F2F(N) FINITE(N, fFff_t, float, (float a, float b), a, b) +#define F2D(N) FINITE(N, dFdd_t, double, (double a, double b), a, b) + +F2F(powf) +F2D(pow) +F1F(sinhf) +F1D(sinh) +F1F(sqrtf) +F1D(sqrt) +F1F(acosf) +F1D(acos) +F1F(acoshf) +F1D(acosh) +F1F(asinf) +F1D(asin) +F2F(atan2f) +F2D(atan2) +F1F(coshf) +F1D(cosh) +F1F(exp2f) +F1D(exp2) +F1F(expf) +F1D(exp) +F2F(hypotf) +F2D(hypot) +F1F(log10f) +F1D(log10) +F1F(log2f) +F1D(log2) +F1F(logf) +F1D(log) + +#undef F2D +#undef F2F +#undef F1D +#undef F1F +#undef FINITE + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_INIT \ + my_lib = lib; + +#define CUSTOM_FINI \ + my_lib = NULL; + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibm_private.h b/src/wrapped32/wrappedlibm_private.h new file mode 100755 index 00000000..156cfac6 --- /dev/null +++ b/src/wrapped32/wrappedlibm_private.h @@ -0,0 +1,446 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// Complex numbers are passed in as an address in the stack + +GOW(acos, dFd) +GOW(acosf, fFf) +GOM(__acosf_finite, fFf) //%noE +GOM(__acos_finite, dFd) //%noE +GOW(acosh, dFd) +GOW(acoshf, fFf) +GOM(__acoshf_finite, fFf) //%noE +GOM(__acosh_finite, dFd) //%noE +#ifdef HAVE_LD80BITS +GOW(acoshl, DFD) +#else +GOW2(acoshl, KFK, acosh) +#endif +#ifdef HAVE_LD80BITS +GOW(acosl, DFD) +#else +GOW2(acosl, KFK, acos) +#endif +GOW(asin, dFd) +GOW(asinf, fFf) +GOM(__asinf_finite, fFf) //%noE +GOM(__asin_finite, dFd) //%noE +GOW(asinh, dFd) +GOW(asinhf, fFf) +#ifdef HAVE_LD80BITS +GOW(asinhl, DFD) +#else +GOW2(asinhl, KFK, asinh) +#endif +#ifdef HAVE_LD80BITS +GOW(asinl, DFD) +#else +GOW2(asinl, KFK, asin) +#endif +GO(atan, dFd) +GOW(atan2, dFdd) +GOW(atan2f, fFff) +GOM(__atan2f_finite, fFff) //%noE +GOM(__atan2_finite, dFdd) //%noE +// atan2l // Weak +GOW(atanf, fFf) +GOW(atanh, dFd) +GOW(atanhf, fFf) +// __atanhf_finite +// __atanh_finite +#ifdef HAVE_LD80BITS +GOW(atanhl, DFD) +#else +GOW2(atanhl, KFK, atanh) +#endif +// atanl // Weak +//GOW(cabs, dFdd) // only 1 arg, but is a double complex +GOW(cabsf, fFff) // only 1 arg, but is a float complex +// cabsl // Weak +//GOWS(cacos, pFps) //%% complex +GOWM(cacosf, UFs) //%noE +//GOWS(cacosh, pFps) //%% complex +GOWM(cacoshf, UFs) //%noE +// cacoshl // Weak +// cacosl // Weak +//GOW(carg, dFdd) // 1arg, double complex +GOW(cargf, fFff) // 1arg, float complex +// cargl // Weak +//GOWS(casin, pFps) //%% complex +GOWM(casinf, UFs) //%noE +//GOWS(casinh, pFps) //%% complex +GOWM(casinhf, UFs) //%noE +// casinhl // Weak +// casinl // Weak +//GOWS(catan, pFps) //%% complex +GOWM(catanf, UFs) //%noE +//GOWS(catanh, pFps) //%% complex +GOWM(catanhf, UFs) //%noE +// catanhl // Weak +// catanl // Weak +GOW(cbrt, dFd) +GOW(cbrtf, fFf) +#ifdef HAVE_LD80BITS +GOW(cbrtl, DFD) +#else +GOW2(cbrtl, KFK, cbrt) +#endif +//GOWS(ccos, pFps) //%% return complex +GOWM(ccosf, UFs) //%noE return complex +//GOWS(ccosh, pFps) //%% return complex +GOWM(ccoshf, UFs) //%noE return complex +// ccoshl // Weak +// ccosl // Weak +//GOW(ceil, dFd) +//GOW(ceilf, fFf) +// ceill // Weak +//GOWS(cexp, pFps) //%% return complex +GOWM(cexpf, UFs) //%noE return complex +// cexpl // Weak +// cimag // Weak +// cimagf // Weak +// cimagl // Weak +//GOS(clog, pFps) //%% return a double complex, so ret 4 +// clog10 // Weak +// __clog10 +// clog10f // Weak +// __clog10f +// clog10l // Weak +// __clog10l +GOM(clogf, UFs) //%noE float complex doesn't trigger the ret 4, but returns an u64! +// clogl // Weak +// conj // Weak +// conjf // Weak +// conjl // Weak +GOW(copysign, dFdd) +GOW(copysignf, fFff) +// copysignl // Weak +GOW(cos, dFd) +GOW(cosf, fFf) +GOW(cosh, dFd) +GOW(coshf, fFf) +GOM(__coshf_finite, fFf) //%noE +GOM(__cosh_finite, dFd) //%noE +// coshl // Weak +// cosl // Weak +//GOWS(cpow, pFpsvvvvs) //%% return complex +GOWM(cpowf, UFsvvs) //%noE +// cpowl // Weak +//GOS(cproj, pFps) //%% double complex +GOM(cprojf, UFs) //%noE +// cprojl // Weak +// creal // Weak +// crealf // Weak +// creall // Weak +//GOWS(csin, pFps) //%% return complex +GOWM(csinf, UFs) //%noE return complex +//GOWS(csinh, pFps) //%% return complex +GOWM(csinhf, UFs) //%noE return complex +// csinhl // Weak +// csinl // Weak +//GOWS(csqrt, pFps) //%% +GOWM(csqrtf, UFs) //%noE +// csqrtl // Weak +//GOWS(ctan, pFps) //%% return complex +GOWM(ctanf, UFs) //%noE return complex +//GOWS(ctanh, pFps) //%% return complex +GOWM(ctanhf, UFs) //%noE return complex +// ctanhl // Weak +// ctanl // Weak +// __cxa_finalize // Weak +// drem // Weak +// dremf // Weak +// dreml // Weak +GOW(erf, dFd) +GOW(erfc, dFd) +GOW(erfcf, fFf) +#ifdef HAVE_LD80BITS +GOW(erfcl, DFD) +#else +GOW2(erfcl, KFK, erfc) +#endif +GOW(erff, fFf) +#ifdef HAVE_LD80BITS +GOW(erfl, DFD) +#else +GOW2(erfl, KFK, erf) +#endif +GOW(exp, dFd) +GOW(exp10, dFd) +GOW(exp10f, fFf) +// __exp10f_finite +// __exp10_finite +// exp10l // Weak +GOW(exp2, dFd) +GOW(exp2f, fFf) +GOM(__exp2f_finite, fFf) //%noE +GOM(__exp2_finite, dFd) //%noE +// exp2l // Weak +GOW(expf, fFf) +GOM(__expf_finite, fFf) //%noE +GOM(__exp_finite, dFd) //%noE +// expl // Weak +GOW(expm1, dFd) +GOW(expm1f, fFf) +// expm1l // Weak +GOW(fabs, dFd) +GOW(fabsf, fFf) +// fabsl // Weak +// fdim // Weak +// fdimf // Weak +// fdiml // Weak +GO(feclearexcept, iFi) +GO(fedisableexcept, iFi) +GO(feenableexcept, iFi) +GO(fegetenv, iFp) +GO(fegetexcept, iFv) +GO(fegetexceptflag, iFpi) +GO(fegetround, iFv) +GO(feholdexcept, iFp) +GO(feraiseexcept, iFi) +GO(fesetenv, iFp) +GO(fesetexceptflag, iFpi) +GO(fesetround, iFi) +GO(fetestexcept, iFi) +GO(feupdateenv, iFp) +GOW(finite, iFd) +// __finite +GOW(finitef, iFf) +GO(__finitef, iFf) +// finitel // Weak +// __finitel +GOW(floor, dFd) +GOW(floorf, fFf) +// floorl // Weak +GOW(fma, dFddd) +GOW(fmaf, fFfff) +// fmal // Weak +GOW(fmax, dFdd) +GOW(fmaxf, fFff) +// fmaxl // Weak +GOW(fmin, dFdd) +GOW(fminf, fFff) +// fminl // Weak +GOW(fmod, dFdd) +GOW(fmodf, fFff) +// __fmodf_finite +// __fmod_finite +#ifdef HAVE_LD80BITS +GOW(fmodl, DFDD) +#else +GOW2(fmodl, KFKK, fmod) +#endif +GO(__fpclassify, iFd) +GO(__fpclassifyf, iFf) +GOW(frexp, dFdp) +GOW(frexpf, fFfp) +#ifdef HAVE_LD80BITS +GOW(frexpl, DFDp) +#else +GOW2(frexpl, KFKp, frexp) +#endif +// gamma // Weak +// gammaf // Weak +// __gammaf_r_finite +// gammal // Weak +// __gamma_r_finite +// __gmon_start__ // Weak +GOW(hypot, dFdd) +GOW(hypotf, fFff) +GOM(__hypotf_finite, fFff) //%noE +GOM(__hypot_finite, dFdd) //%noE +// hypotl // Weak +GOW(ilogb, iFd) +GOW(ilogbf, iFf) +// ilogbl // Weak +// __issignaling +// __issignalingf +// _ITM_deregisterTMCloneTable // Weak +// _ITM_registerTMCloneTable // Weak +GO(j0, dFd) +GO(j0f, fFf) +// __j0f_finite +// __j0_finite +// j0l +GO(j1, dFd) +GO(j1f, fFf) +// __j1f_finite +// __j1_finite +// j1l +GO(jn, dFid) +GO(jnf, fFif) +// __jnf_finite +// __jn_finite +// jnl +GOW(ldexp, dFdi) +GOW(ldexpf, fFfi) +#ifdef HAVE_LD80BITS +GOW(ldexpl, DFD) +#else +GOW2(ldexpl, KFK, ldexp) +#endif +GOW(lgamma, dFd) +GOW(lgammaf, fFf) +GOW(lgammaf_r, fFfp) +// __lgammaf_r_finite +#ifdef HAVE_LD80BITS +GOW(lgammal, DFD) +#else +GOW2(lgammal, KFK, lgamma) +#endif +#ifdef HAVE_LD80BITS +GOW(lgammal_r, DFDp) +#else +GOW2(lgammal_r, KFKp, lgamma_r) +#endif +GOW(lgamma_r, dFdp) +// __lgamma_r_finite +DATAV(_LIB_VERSION, 4) +GOW(llrint, IFd) +GOW(llrintf, IFf) +// llrintl // Weak +GOW(llround, IFd) +GOW(llroundf, IFf) +// llroundl // Weak +GOW(log, dFd) +GOW(log10, dFd) +GOW(log10f, fFf) +GOM(__log10f_finite, fFf) //%noE +GOM(__log10_finite, dFd) //%noE +// log10l // Weak +GOW(log1p, dFd) +GOW(log1pf, fFf) +// log1pl // Weak +GOW(log2, dFd) +GOW(log2f, fFf) +GOM(__log2f_finite, fFf) //%noE +GOM(__log2_finite, dFd) //%noE +// log2l // Weak +GOW(logb, dFd) +GOW(logbf, fFf) +// logbl // Weak +GOW(logf, fFf) +GOM(__logf_finite, fFf) //%noE +GOM(__log_finite, dFd) //%noE +#ifdef HAVE_LD80BITS +GOW(logl, DFD) +#else +GOW2(logl, KFK, log) +#endif +GOW(lrint, iFd) +GOW(lrintf, iFf) +// lrintl // Weak +GOW(lround, iFd) +GOW(lroundf, iFf) +// lroundl // Weak +// matherr // Weak +GOW(modf, dFdp) +GOW(modff, fFfp) +// modfl // Weak +// nan // Weak +// nanf // Weak +// nanl // Weak +GOW(nearbyint, dFd) +GOW(nearbyintf, fFf) +// nearbyintl // Weak +GOW(nextafter, dFdd) +GOW(nextafterf, fFff) +// nextafterl // Weak +GOW(nexttoward, dFdD) +GOW(nexttowardf, fFfD) +// nexttowardl // Weak +GOW(pow, dFdd) +GOW(pow10, dFd) +GOW(pow10f, fFf) +#ifdef HAVE_LD80BITS +GOWM(pow10l, DFD) //%noE +#else +GOWM(pow10l, KFK) //%noE +#endif +GOW(powf, fFff) +GOM(__powf_finite, fFff) //%noE +GOM(__pow_finite, dFdd) //%noE +#ifdef HAVE_LD80BITS +GOW(powl, DFDD) +#else +GOW2(powl, KFKK, pow) +#endif +GOW(remainder, dFdd) +GOW(remainderf, fFff) +// __remainderf_finite +// __remainder_finite +// remainderl // Weak +GOW(remquo, dFddp) +GOW(remquof, fFffp) +// remquol // Weak +GOW(rint, dFd) +GOW(rintf, fFf) +// rintl // Weak +GOW(round, dFd) +GOW(roundf, fFf) +// roundl // Weak +// scalb // Weak +// scalbf // Weak +// __scalbf_finite +// __scalb_finite +// scalbl // Weak +GOW(scalbln, dFdi) +GOW(scalblnf, fFfi) +// scalblnl // Weak +GOW(scalbn, dFdi) +GOW(scalbnf, fFfi) +// scalbnl // Weak +// __signbit +// __signbitf +DATAB(signgam, 4) +// significand // Weak +// significandf // Weak +// significandl // Weak +GOW(sin, dFd) +GOW(sincos, vFdpp) +GOW(sincosf, vFfpp) +// sincosl // Weak +GOW(sinf, fFf) +GOW(sinh, dFd) +GOW(sinhf, fFf) +GOM(__sinhf_finite, fFf) //%noE +GOM(__sinh_finite, dFd) //%noE +// sinhl // Weak +// sinl // Weak +GOW(sqrt, dFd) +GOW(sqrtf, fFf) +GOM(__sqrtf_finite, fFf) //%noE +GOM(__sqrt_finite, dFd) //%noE +// sqrtl // Weak +GO(tan, dFd) +GOW(tanf, fFf) +GOW(tanh, dFd) +GOW(tanhf, fFf) +// tanhl // Weak +// tanl // Weak +GOW(tgamma, dFd) +GOW(tgammaf, fFf) +#ifdef HAVE_LD80BITS +GOW(tgammal, DFD) +#else +GOW2(tgammal, KFK, tgamma) +#endif +GOW(trunc, dFd) +GOW(truncf, fFf) +// truncl // Weak +GO(y0, dFd) +GO(y0f, fFf) +// __y0f_finite +// __y0_finite +// y0l +GO(y1, dFd) +GO(y1f, fFf) +// __y1f_finite +// __y1_finite +// y1l +GO(yn, dFid) +GO(ynf, fFif) +// __ynf_finite +// __yn_finite +// ynl diff --git a/src/wrapped32/wrappedlibpthread.c b/src/wrapped32/wrappedlibpthread.c new file mode 100755 index 00000000..d7881f6b --- /dev/null +++ b/src/wrapped32/wrappedlibpthread.c @@ -0,0 +1,97 @@ +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> +#include <errno.h> +#include <pthread.h> + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "librarian.h" + +static const char* libpthreadName = "libpthread.so.0"; +#define LIBNAME libpthread + +typedef int (*iFpp_t)(void*, void*); +typedef int (*iFppu_t)(void*, void*, uint32_t); +EXPORT int my32_pthread_setname_np(x64emu_t* emu, void* t, void* n) +{ + static void* f = NULL; + static int need_load = 1; + if(need_load) { + library_t* lib = GetLibInternal(libpthreadName); + if(!lib) return 0; + f = dlsym(lib->w.lib, "pthread_setname_np"); + need_load = 0; + } + if(f) + return ((iFpp_t)f)(t, n); + return 0; +} +EXPORT int my32_pthread_getname_np(x64emu_t* emu, void* t, void* n, uint32_t s) +{ + static void* f = NULL; + static int need_load = 1; + if(need_load) { + library_t* lib = GetLibInternal(libpthreadName); + if(!lib) return 0; + f = dlsym(lib->w.lib, "pthread_getname_np"); + need_load = 0; + } + if(f) + return ((iFppu_t)f)(t, n, s); + else + strncpy((char*)n, "dummy", s); + return 0; +} + +EXPORT int my32_pthread_rwlock_wrlock(pthread_rwlock_t *rwlock) +{ + return pthread_rwlock_wrlock(rwlock); +} +EXPORT int my32_pthread_rwlock_rdlock(pthread_rwlock_t* rwlock) +{ + return pthread_rwlock_rdlock(rwlock); +} +EXPORT int my32_pthread_rwlock_unlock(pthread_rwlock_t *rwlock) +{ + return pthread_rwlock_unlock(rwlock); +} + +EXPORT int32_t my32_pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child) +{ + // this is partly incorrect, because the emulated functions should be executed by actual fork and not by my32_atfork... + if(my_context->atfork_sz==my_context->atfork_cap) { + my_context->atfork_cap += 4; + my_context->atforks = (atfork_fnc_t*)realloc(my_context->atforks, my_context->atfork_cap*sizeof(atfork_fnc_t)); + } + int i = my_context->atfork_sz++; + my_context->atforks[i].prepare = (uintptr_t)prepare; + my_context->atforks[i].parent = (uintptr_t)parent; + my_context->atforks[i].child = (uintptr_t)child; + my_context->atforks[i].handle = NULL; + + return 0; +} +EXPORT int32_t my32___pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child) __attribute__((alias("my32_pthread_atfork"))); + +EXPORT void my32___pthread_initialize() +{ + // nothing, the lib initialize itself now +} + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedlibpthread_private.h b/src/wrapped32/wrappedlibpthread_private.h new file mode 100755 index 00000000..be13d397 --- /dev/null +++ b/src/wrapped32/wrappedlibpthread_private.h @@ -0,0 +1,187 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif +// General note: pthread_t is unsigned long int +// cpu_set_t is a struct with an array, default size is fixed for all architecture + +// __errno_location +// fork +// __fork +// __h_errno_location +// _IO_flockfile +// _IO_ftrylockfile +// _IO_funlockfile +// __libc_allocate_rtsig +// __libc_current_sigrtmax +// __libc_current_sigrtmin +GOM(pthread_atfork, iFEppp) +GOM(__pthread_atfork, iFEppp) +GOM(pthread_attr_destroy, iFEp) +// pthread_attr_getaffinity_np +GOM(pthread_attr_getdetachstate, iFEpp) +GOM(pthread_attr_getguardsize, iFEpp) +GOM(pthread_attr_getinheritsched, iFEpp) +GOM(pthread_attr_getschedparam, iFEpp) +GOM(pthread_attr_getschedpolicy, iFEpp) +GOM(pthread_attr_getscope, iFEpp) +GOM(pthread_attr_getstack, iFEppp) +GOM(pthread_attr_getstackaddr, iFEpp) +GOM(pthread_attr_getstacksize, iFEpp) +GOM(pthread_attr_init, iFEp) +GOM(pthread_attr_setaffinity_np, iFEpup) +GOM(pthread_attr_setdetachstate, iFEpi) +GOM(pthread_attr_setguardsize, iFEpL) +GOM(pthread_attr_setinheritsched, iFEpi) +GOM(pthread_attr_setschedparam, iFEpp) +GOM(pthread_attr_setschedpolicy, iFEpi) +GOM(pthread_attr_setscope, iFEpi) +GOM(pthread_attr_setstack, iFEppL) +GOM(pthread_attr_setstackaddr, iFEpp) +GOM(pthread_attr_setstacksize, iFEpL) +GO(pthread_barrierattr_destroy, iFp) +GO(pthread_barrierattr_getpshared, iFpp) +GO(pthread_barrierattr_init, iFp) +GO(pthread_barrierattr_setpshared, iFpi) +GO(pthread_barrier_destroy, iFp) +GO(pthread_barrier_init, iFppu) +GO(pthread_barrier_wait, iFp) +GO(pthread_cancel, iFh) +GOM(_pthread_cleanup_pop, vFEpi) +GOM(_pthread_cleanup_pop_restore, vFEpi) +GOM(_pthread_cleanup_push, vFEppp) +GOM(_pthread_cleanup_push_defer, vFEppp) +// __pthread_cleanup_routine +GO(pthread_condattr_destroy, iFp) +GO(pthread_condattr_getclock, iFpp) +GO(pthread_condattr_getpshared, iFpp) +GO(pthread_condattr_init, iFp) +GO(pthread_condattr_setclock, iFpp) +GO(pthread_condattr_setpshared, iFpi) +GO2(pthread_cond_broadcast@GLIBC_2.0, iFEp, my32_pthread_cond_broadcast_old) +GO2(pthread_cond_destroy@GLIBC_2.0, iFEp, my32_pthread_cond_destroy_old) +GO2(pthread_cond_init@GLIBC_2.0, iFEpp, my32_pthread_cond_init_old) +GO2(pthread_cond_signal@GLIBC_2.0, iFEp, my32_pthread_cond_signal_old) +GO2(pthread_cond_timedwait@GLIBC_2.0, iFEppp, my32_pthread_cond_timedwait_old) +GO2(pthread_cond_wait@GLIBC_2.0, iFEpp, my32_pthread_cond_wait_old) +GO(pthread_cond_broadcast, iFp) +GO(pthread_cond_destroy, iFp) +GO(pthread_cond_init, iFpp) +GO(pthread_cond_signal, iFp) +GOM(pthread_cond_timedwait, iFEppp) +GOM(pthread_cond_wait, iFEpp) +GOM(pthread_create, iFEBh_ppp) +GOM(pthread_detach, iFEh) +GO(pthread_equal, iFhh) +GO(pthread_exit, vFp) +GOM(pthread_getaffinity_np, iFEpup) +GO(pthread_getattr_np, iFup) +GO(pthread_getconcurrency, iFv) +GO(pthread_getcpuclockid, iFup) +GO(pthread_getschedparam, iFupp) +GO(__pthread_getspecific, pFu) +GO(pthread_getspecific, pFu) +GOM(pthread_getname_np, iFEppu) //not present on Pandora +GOM(__pthread_initialize, vFv) //%noE doesn't exist anymore... +// __pthread_initialize_minimal +GO(pthread_join, iFHBp_) +GOM(__pthread_key_create, iFEpp) +GOM(pthread_key_create, iFEpp) +GO(pthread_key_delete, iFu) +GOM(pthread_kill, iFEpi) +// pthread_kill_other_threads_np +GO(__pthread_mutexattr_destroy, iFp) +GO(pthread_mutexattr_destroy, iFp) +GO(pthread_mutexattr_getprioceiling, iFpp) +GO(pthread_mutexattr_getprotocol, iFpp) +// pthread_mutexattr_getpshared +// pthread_mutexattr_getrobust_np +GO(pthread_mutexattr_gettype, iFpp) +GO(__pthread_mutexattr_init, iFp) +GO(pthread_mutexattr_init, iFp) +GO(pthread_mutexattr_setprioceiling, iFpi) +GO(pthread_mutexattr_setprotocol, iFpp) +GO(pthread_mutexattr_setpshared, iFpi) +// pthread_mutexattr_setrobust_np +GO(__pthread_mutexattr_settype, iFpi) +GO(pthread_mutexattr_settype, iFpi) +// pthread_mutex_consistent_np +GOM(__pthread_mutex_destroy, iFp) //%noE +GOM(pthread_mutex_destroy, iFp) //%noE +// pthread_mutex_getprioceiling +GOM(__pthread_mutex_init, iFpp) //%noE +GOM(pthread_mutex_init, iFpp) //%noE +GOM(__pthread_mutex_lock, iFp) //%noE +GOM(pthread_mutex_lock, iFp) //%noE +// pthread_mutex_setprioceiling +GOM(pthread_mutex_timedlock, iFpp) //%noE +GOM(__pthread_mutex_trylock, iFp) //%noE +GOM(pthread_mutex_trylock, iFp) //%noE +GOM(__pthread_mutex_unlock, iFp) //%noE +GOM(pthread_mutex_unlock, iFp) //%noE +GOM(pthread_once, iFEpp) +GOM(__pthread_once, iFEpp) +GOM(__pthread_register_cancel, vFEp) +// __pthread_register_cancel_defer +GO(pthread_rwlockattr_destroy, vFp) +GO(pthread_rwlockattr_getkind_np, iFpp) +// pthread_rwlockattr_getpshared +GO(pthread_rwlockattr_init, iFp) +GO(pthread_rwlockattr_setkind_np, iFpi) +// pthread_rwlockattr_setpshared +// __pthread_rwlock_destroy +GO(pthread_rwlock_destroy, iFp) +GO(__pthread_rwlock_init, iFpp) +GO(pthread_rwlock_init, iFpp) +GO(__pthread_rwlock_rdlock, iFp) +GOM(pthread_rwlock_rdlock, iFp) //%noE +// pthread_rwlock_timedrdlock +// pthread_rwlock_timedwrlock +// __pthread_rwlock_tryrdlock +GO(pthread_rwlock_tryrdlock, iFp) +// __pthread_rwlock_trywrlock +GO(pthread_rwlock_trywrlock, iFp) +GO(__pthread_rwlock_unlock, iFp) +GOM(pthread_rwlock_unlock, iFp) //%noE +GO(__pthread_rwlock_wrlock, iFp) +GOM(pthread_rwlock_wrlock, iFp) //%noE +GO(pthread_self, hFv) +GOM(pthread_setaffinity_np, iFELup) +GO(pthread_setcancelstate, iFip) +GO(pthread_setcanceltype, iFip) +GO(pthread_setconcurrency, iFi) +GOM(pthread_setname_np, iFEpp) // not present on the Pandora +GO(pthread_setschedparam, iFuip) +GO(pthread_setschedprio, iFpi) +GO(__pthread_setspecific, iFup) +GO(pthread_setspecific, iFup) +GO(pthread_sigmask, iFipp) +GO(pthread_spin_destroy, iFp) +GO(pthread_spin_init, iFpi) +GO(pthread_spin_lock, iFp) +GO(pthread_spin_trylock, iFp) +GO(pthread_spin_unlock, iFp) +GO(pthread_testcancel, vFv) +GO(pthread_timedjoin_np, iFppp) +GO(pthread_tryjoin_np, iFpp) +GOM(__pthread_unregister_cancel, vFEp) +// __pthread_unregister_cancel_restore +// __pthread_unwind +GOM(__pthread_unwind_next, vFEp) +GO(pthread_yield, iFv) +// raise +// __res_state +GO(sem_close, iFp) +GO(sem_destroy, iFp) +GO(sem_getvalue, iFpp) +GO(sem_init, iFpiu) +GO(sem_open, pFpOM) +GO(sem_post, iFp) +GO(sem_timedwait, iFpp) +GO(sem_trywait, iFp) +GO(sem_unlink, iFp) +GO(sem_wait, iFp) +// __sigaction +// system +// __vfork + +GOM(pthread_mutexattr_setkind_np, iFEpi) // deprecated diff --git a/src/wrapped32/wrappedlibrt.c b/src/wrapped32/wrappedlibrt.c new file mode 100755 index 00000000..84b7730e --- /dev/null +++ b/src/wrapped32/wrappedlibrt.c @@ -0,0 +1,80 @@ +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dlfcn.h> +#include <signal.h> + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +#undef aio_suspend +#undef aio_return +#undef aio_write +#undef aio_read +#undef aio_error + +#undef clock_gettime + +static const char* librtName = "librt.so.1"; +#define LIBNAME librt + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) + +// sigev_notify +#define GO(A) \ +static uintptr_t my32_sigev_notify_fct_##A = 0; \ +static void my32_sigev_notify_##A(void* sigval) \ +{ \ + RunFunctionFmt(my32_sigev_notify_fct_##A, "p", to_ptrv(sigval));\ +} +SUPER() +#undef GO +static void* findsigev_notifyFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_sigev_notify_fct_##A == (uintptr_t)fct) return my32_sigev_notify_##A; + SUPER() + #undef GO + #define GO(A) if(my32_sigev_notify_fct_##A == 0) {my32_sigev_notify_fct_##A = (uintptr_t)fct; return my32_sigev_notify_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libpng12 sigev_notify callback\n"); + return NULL; +} + +#undef SUPER + +EXPORT int my32_timer_create(x64emu_t* emu, uint32_t clockid, void* sevp, timer_t* timerid) +{ + struct sigevent sevent; + memcpy(&sevent, sevp, sizeof(sevent)); + + if(sevent.sigev_notify == SIGEV_THREAD) { + sevent.sigev_notify_function = findsigev_notifyFct(sevent.sigev_notify_function); + } + + return timer_create(clockid, &sevent, timerid); +} + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibrt_private.h b/src/wrapped32/wrappedlibrt_private.h new file mode 100755 index 00000000..dffbc20f --- /dev/null +++ b/src/wrapped32/wrappedlibrt_private.h @@ -0,0 +1,50 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//clockid_t is uint32? +// pid_t is uint32 too? (for clock_getcpuclockid) +// time_t is long +// timespec is struct LL +// itimerspec is struct 2 timespec (so LLLL) + +// aio_cancel +// aio_cancel64 +// aio_error +GO(aio_error64, iFp) +GO(aio_fsync, iFip) +GO(aio_fsync64, iFip) +// aio_init +// aio_read +GO(aio_read64, iFp) +// aio_return +GO(aio_return64, lFp) +GO(aio_suspend, iFpip) +GO(aio_suspend64, iFpip) +// aio_write +GO(aio_write64, iFp) +GO(clock_getcpuclockid, iFup) +GO(clock_getres, iFup) +//GO(clock_gettime, iFup) // p is *timespec +//GO(clock_nanosleep, iFuipp) +//GO(clock_settime, iFup) +// lio_listio +// lio_listio64 +// mq_close +GO(mq_getattr, iFip) +// mq_notify +// mq_open +// __mq_open_2 +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +GO(shm_open, iFpOu) +GO(shm_unlink, iFp) +//GOM(timer_create, iFEupp) +GO(timer_delete, iFu) +GO(timer_getoverrun, iFu) +//GO(timer_gettime, iFup) //time_t is L, timespec is struct LL, itimerspec (the p) is 2 timespec +//GO(timer_settime, iFuipp) //same, p are itimerspec |