about summary refs log tree commit diff stats
path: root/src/include
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-09-19 18:59:34 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-09-19 18:59:34 +0200
commitb2bd3103d878628d7b2eeb68f469c00c9574f94a (patch)
tree919044b20da53dd01173b0dd3807443d52ef13db /src/include
parent745fd1b702ebe4d2913118372d67ad8bac489516 (diff)
downloadbox64-b2bd3103d878628d7b2eeb68f469c00c9574f94a.tar.gz
box64-b2bd3103d878628d7b2eeb68f469c00c9574f94a.zip
Fixed va_list conversion for aarch64
Diffstat (limited to 'src/include')
-rwxr-xr-xsrc/include/myalign.h62
1 files changed, 31 insertions, 31 deletions
diff --git a/src/include/myalign.h b/src/include/myalign.h
index 0ad36a93..80cc1449 100755
--- a/src/include/myalign.h
+++ b/src/include/myalign.h
@@ -21,31 +21,31 @@ typedef struct {
    void *reg_save_area;
 } va_list[1];
 */
-#define CREATE_SYSV_VALIST(A) \
-  va_list sysv_varargs; \
+#define CREATE_SYSV_VALIST(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;
+  sysv_varargs->reg_save_area=(A);        \
+  sysv_varargs->overflow_arg_area=A
 
-#define CONVERT_VALIST(A) \
-  va_list sysv_varargs; \
+#define CONVERT_VALIST(A)                 \
+  va_list sysv_varargs;                   \
   sysv_varargs->gp_offset=(A)->gp_offset; \
   sysv_varargs->fp_offset=(A)->fp_offset; \
   sysv_varargs->reg_save_area=(A)->reg_save_area;  \
   sysv_varargs->overflow_arg_area=(A)->overflow_arg_area;
 
 #define CREATE_VALIST_FROM_VAARG(STACK, SCRATCH, N) \
-  va_list sysv_varargs;                     \
-  sysv_varargs->gp_offset=(6-((N<6)?N:6))*8;\
-  sysv_varargs->fp_offset=(6*8);            \
-  sysv_varargs->reg_save_area=SCRATCH;      \
-  sysv_varargs->overflow_arg_area=STACK;    \
-  {                                         \
-    uint64_t *p = (uint64_t*)SCRATCH;       \
-    p[0]=R_RDI; p[1]=R_RSI; p[2]=R_RDX;     \
-    p[3]=R_RCX; p[4]=R_R8; p[5]=R_R9;       \
-    memcpy(&p[6], emu->xmm, 8*16);          \
+  va_list sysv_varargs;                             \
+  sysv_varargs->gp_offset=(6-(((N)<6)?(N):6))*8;    \
+  sysv_varargs->fp_offset=(6*8);                    \
+  sysv_varargs->reg_save_area=(SCRATCH);            \
+  sysv_varargs->overflow_arg_area=(STACK);          \
+  {                                                 \
+    uint64_t *p = (uint64_t*)(SCRATCH);             \
+    p[0]=R_RDI; p[1]=R_RSI; p[2]=R_RDX;             \
+    p[3]=R_RCX; p[4]=R_R8; p[5]=R_R9;               \
+    memcpy(&p[6], emu->xmm, 8*16);                  \
   }
 
 
@@ -66,28 +66,28 @@ typedef struct  va_list {
   va_list sysv_varargs; \
   sysv_varargs.__gr_offs=(8*8); \
   sysv_varargs.__vr_offs=(8*16); \
-  sysv_varargs.__stack=A;
+  sysv_varargs.__stack=(A)
 
-#define CONVERT_VALIST(A)                                       \
-  va_list sysv_varargs;                                         \
+#define CONVERT_VALIST(A)                                         \
+  va_list sysv_varargs;                                           \
   sysv_varargs.__gr_offs=-(6*8)+(A)->gp_offset;                   \
   sysv_varargs.__vr_offs=-(8*16)+((A)->fp_offset-X64_VA_MAX_REG); \
   sysv_varargs.__stack=(A)->overflow_arg_area;                    \
   sysv_varargs.__gr_top=(A)->reg_save_area + X64_VA_MAX_REG;      \
   sysv_varargs.__vr_top=(A)->reg_save_area + X64_VA_MAX_XMM;
 
-#define CREATE_VALIST_FROM_VAARG(STACK, SCRATCH, N)   \
-  va_list sysv_varargs;                               \
-  sysv_varargs.__gr_offs=(8*(2+((N<6)?N:6)));         \
-  sysv_varargs.__vr_offs=0;                           \
-  sysv_varargs.__stack=STACK;                         \
-  sysv_varargs.__gr_top=SCRATCH + X64_VA_MAX_REG;     \
-  sysv_varargs.__vr_top=SCRATCH + X64_VA_MAX_XMM;     \
-  {                                                   \
-    uint64_t *p = (uint64_t*)SCRATCH;                 \
-    p[0]=R_RDI; p[1]=R_RSI; p[2]=R_RDX;               \
-    p[3]=R_RCX; p[4]=R_R8; p[5]=R_R9;                 \
-    memcpy(&p[6], emu->xmm, 8*16);                    \
+#define CREATE_VALIST_FROM_VAARG(STACK, SCRATCH, N)                     \
+  va_list sysv_varargs;                                                 \
+  sysv_varargs.__gr_offs=-(6*8)+(8*(((N)<6)?(N):6));                    \
+  sysv_varargs.__vr_offs=-(8*16);                                       \
+  sysv_varargs.__stack=(STACK);                                         \
+  sysv_varargs.__gr_top=(void*)((uintptr_t)(SCRATCH) + X64_VA_MAX_REG); \
+  sysv_varargs.__vr_top=(void*)((uintptr_t)(SCRATCH) + X64_VA_MAX_XMM); \
+  {                                                                     \
+    uintptr_t *p = (uintptr_t*)(SCRATCH);                               \
+    p[0]=R_RDI; p[1]=R_RSI; p[2]=R_RDX;                                 \
+    p[3]=R_RCX; p[4]=R_R8; p[5]=R_R9;                                   \
+    memcpy(&p[6], emu->xmm, 8*16);                                      \
   }
 
 #elif defined(__powerpc64__)