diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-05 10:16:02 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-05 10:16:02 +0100 |
| commit | 7716633bf762db3e57e51e325d045d4a3eebdb50 (patch) | |
| tree | 9a2bf4df911a4ed1c4acc2cfe8fb5f9faceb3342 /src/include | |
| parent | 2e3c25f8e17fd73edd59d3e818e48e56f373c058 (diff) | |
| download | box64-7716633bf762db3e57e51e325d045d4a3eebdb50.tar.gz box64-7716633bf762db3e57e51e325d045d4a3eebdb50.zip | |
Added printf wrapped function and some VA_ARG work
Diffstat (limited to 'src/include')
| -rwxr-xr-x | src/include/myalign.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/include/myalign.h b/src/include/myalign.h new file mode 100755 index 00000000..1d5a6b72 --- /dev/null +++ b/src/include/myalign.h @@ -0,0 +1,43 @@ +#include <stdint.h> + +#ifdef __x86_64__ +// x86_64, 6 64bits general regs and 16 or 8? 128bits float regs +#define CREATE_SYSV_VALIST(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=(6*8); \ + sysv_varargs->fp_offset=(6*8)+(16*16); \ + sysv_varargs->overflow_arg_area=A; +#elif defined(__aarch64__) +// aarch64: 8 64bits general regs and 8 128bits float regs +#define CREATE_SYSV_VALIST(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=(8*8); \ + sysv_varargs->fp_offset=(8*8)+(8*16); \ + sysv_varargs->overflow_arg_area=A; +#elif defined(__powerpc64__) +// TODO, is this correct? +#define CREATE_SYSV_VALIST(A) \ + va_list sysv_varargs; \ + sysv_varargs->gpr=8; \ + sysv_varargs->fpr=8; \ + sysv_varargs->overflow_arg_area=A; +#else +#error Unknown architecture! +#endif + + +#define VARARGS sysv_varargs +#define PREPARE_VALIST CREATE_SYSV_VALIST(emu->scratch) +#define VARARGS_(A) sysv_varargs +#define PREPARE_VALIST_(A) CREATE_SYSV_VALIST(A) + +typedef struct x64emu_s x64emu_t; + +// 1st pos is of vaarg is 0, not 1! +void myStackAlign(x64emu_t* emu, const char* fmt, uint64_t* st, uint64_t* mystack, int xmm, int pos); +void myStackAlignGVariantNew(x64emu_t* emu, const char* fmt, uint64_t* st, uint64_t* mystack, int xmm, int pos); +void myStackAlignW(x64emu_t* emu, const char* fmt, uint64_t* st, uint64_t* mystack, int xmm, int pos); + +// defined in wrapperlibc.c +int of_convert(int); // x86->arm +int of_unconvert(int); // arm->x86 |