about summary refs log tree commit diff stats
path: root/src/include
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-05 10:29:34 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-05 10:29:34 +0100
commitf93ef5a7db7e87263985d53c977dd476726a107a (patch)
tree4d0bf91142ec5593994b34ca74729fde25d5ff7b /src/include
parent7716633bf762db3e57e51e325d045d4a3eebdb50 (diff)
downloadbox64-f93ef5a7db7e87263985d53c977dd476726a107a.tar.gz
box64-f93ef5a7db7e87263985d53c977dd476726a107a.zip
A bit more work on va_list handling
Diffstat (limited to 'src/include')
-rwxr-xr-xsrc/include/myalign.h25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/include/myalign.h b/src/include/myalign.h
index 1d5a6b72..e6f3355f 100755
--- a/src/include/myalign.h
+++ b/src/include/myalign.h
@@ -2,6 +2,15 @@
 
 #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(A) \
   va_list sysv_varargs; \
   sysv_varargs->gp_offset=(6*8); \
@@ -9,11 +18,21 @@
   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(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;
+  sysv_varargs.gr_offs=(8*8); \
+  sysv_varargs.vr_offs=(8*16); \
+  sysv_varargs.stack=A;
 #elif defined(__powerpc64__)
 // TODO, is this correct?
 #define CREATE_SYSV_VALIST(A) \