diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-05-26 09:21:04 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-05-26 09:21:04 +0200 |
| commit | d09a48fd03466e7160752d8ed17c9df3976d11f9 (patch) | |
| tree | c862d8ae9e7df0b439645b08ed4e5265c174b908 /src/libtools | |
| parent | b5c0a857ca18fa91d0416a35e5ea9c7acf790d79 (diff) | |
| download | box64-d09a48fd03466e7160752d8ed17c9df3976d11f9.tar.gz box64-d09a48fd03466e7160752d8ed17c9df3976d11f9.zip | |
[INTERPRETER] my first avx opcode
Diffstat (limited to 'src/libtools')
| -rw-r--r-- | src/libtools/signals.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/libtools/signals.c b/src/libtools/signals.c index 97ab274a..1f86f0f8 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -119,8 +119,7 @@ struct x64_fpstate uint32_t mxcsr_mask; struct x64_fpreg _st[8]; struct x64_xmmreg _xmm[16]; - uint32_t res[12]; - uint32_t res2[12]; + uint32_t res[24]; }__attribute__((packed)); typedef struct x64_fpstate *x64_fpregset_t; @@ -988,6 +987,8 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void // TODO: do I need to really setup 2 stack frame? That doesn't seems right! // setup stack frame + frame -= 512+64+16*16; + void* xstate = (void*)frame; frame -= sizeof(siginfo_t); siginfo_t* info2 = (siginfo_t*)frame; memcpy(info2, info, sizeof(siginfo_t)); @@ -1082,10 +1083,10 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void #endif #endif // get FloatPoint status - sigcontext->uc_mcontext.fpregs = (struct x64_libc_fpstate*)&sigcontext->xstate; - fpu_fxsave64(emu, &sigcontext->xstate); - // add custom SIGN in reserved area - //((unsigned int *)(&sigcontext.xstate.fpstate.padding))[8*4+12] = 0x46505853; // not yet, when XSAVE / XRSTR will be ready + sigcontext->uc_mcontext.fpregs = xstate;//(struct x64_libc_fpstate*)&sigcontext->xstate; + fpu_xsave_mask(emu, xstate, 0, 0b111); + memcpy(&sigcontext->xstate, xstate, sizeof(sigcontext->xstate)); + ((struct x64_fpstate*)xstate)->res[12] = 0x46505853; // magic number to signal an XSTATE type of fpregs // get signal mask if(new_ss) { |