From 7716633bf762db3e57e51e325d045d4a3eebdb50 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Fri, 5 Mar 2021 10:16:02 +0100 Subject: Added printf wrapped function and some VA_ARG work --- src/include/myalign.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 src/include/myalign.h (limited to 'src/include') 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 + +#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 -- cgit 1.4.1