diff options
| author | Christian Krinitsin <mail@krinitsin.com> | 2025-06-01 21:35:14 +0200 |
|---|---|---|
| committer | Christian Krinitsin <mail@krinitsin.com> | 2025-06-01 21:35:14 +0200 |
| commit | 3e4c5a6261770bced301b5e74233e7866166ea5b (patch) | |
| tree | 9379fddaba693ef8a045da06efee8529baa5f6f4 /gitlab/issues_text/target_i386/host_missing/accel_missing/1648 | |
| parent | e5634e2806195bee44407853c4bf8776f7abfa4f (diff) | |
| download | qemu-analysis-3e4c5a6261770bced301b5e74233e7866166ea5b.tar.gz qemu-analysis-3e4c5a6261770bced301b5e74233e7866166ea5b.zip | |
clean up repository
Diffstat (limited to 'gitlab/issues_text/target_i386/host_missing/accel_missing/1648')
| -rw-r--r-- | gitlab/issues_text/target_i386/host_missing/accel_missing/1648 | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/gitlab/issues_text/target_i386/host_missing/accel_missing/1648 b/gitlab/issues_text/target_i386/host_missing/accel_missing/1648 deleted file mode 100644 index 653700577..000000000 --- a/gitlab/issues_text/target_i386/host_missing/accel_missing/1648 +++ /dev/null @@ -1,58 +0,0 @@ -linux-user: incorrect alignment of sigframe::pretcode & rt_sigframe::pretcode cause crash -Description of problem: -Corrent Print Result: - -sp: cdd3b4e8 - -SUCCEEDED! - -qemu-x86_64 Print Result: - -sp: 2804170 - -qemu: uncaught target signal 11 (Segmentation fault) - core dumped - -Segmentation fault - -Reason of Bug: - -sigframe::pretcode & rt_sigframe::pretcode must align of 16n-sizeof(void*) instead of 16n, Because rsp align of 16n before instruction "call" in caller, After "call", push address of "call" in caller. sp of begin in callee is 16n-sizeof(void*) - -For example on x86_64: - -reference to "qemu/linux-user/i386/signal.c" - -``` -# define TARGET_FPSTATE_FXSAVE_OFFSET 0 - -struct rt_sigframe { - abi_ulong pretcode; - struct target_ucontext uc; - struct target_siginfo info; - struct target_fpstate fpstate QEMU_ALIGNED(16); -}; -#define TARGET_RT_SIGFRAME_FXSAVE_OFFSET ( \ - offsetof(struct rt_sigframe, fpstate) + TARGET_FPSTATE_FXSAVE_OFFSET) -``` - -offsetof(struct rt_sigframe, fpstate) align of 16 - -TARGET_FPSTATE_FXSAVE_OFFSET is 0 - -TARGET_RT_SIGFRAME_FXSAVE_OFFSET is 16n, also alignment of fxsave is 64 - -so address of rt_sigframe::pretcode is 16n instead of 16n - sizeof(void*), It is incorect! - -Fix the bug: - -``` -struct rt_sigframe { - abi_ulong pretcode; - struct target_ucontext uc; - struct target_siginfo info; - abi_ulong unused QEMU_ALIGNED(16); - struct target_fpstate fpstate; -}; -``` - -offsetof(struct rt_sigframe, fpstate) is 16n+8, so address of rt_sigframe::pretcode is 16n-8 on x86_64. |