diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-05 10:29:34 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-05 10:29:34 +0100 |
| commit | f93ef5a7db7e87263985d53c977dd476726a107a (patch) | |
| tree | 4d0bf91142ec5593994b34ca74729fde25d5ff7b /src/include | |
| parent | 7716633bf762db3e57e51e325d045d4a3eebdb50 (diff) | |
| download | box64-f93ef5a7db7e87263985d53c977dd476726a107a.tar.gz box64-f93ef5a7db7e87263985d53c977dd476726a107a.zip | |
A bit more work on va_list handling
Diffstat (limited to 'src/include')
| -rwxr-xr-x | src/include/myalign.h | 25 |
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) \ |