Now
MAIN commitmail json YAML
src/sys/arch/x86/include/cpufunc.h@1.42
/
diff
/
nxr@1.42
src/sys/arch/x86/include/fpu.h@1.23 / diff / nxr@1.23
src/sys/arch/x86/x86/fpu.c@1.76 / diff / nxr@1.76
src/sys/dev/nvmm/x86/nvmm_x86_svm.c@1.82 / diff / nxr@1.82
src/sys/dev/nvmm/x86/nvmm_x86_vmx.c@1.81 / diff / nxr@1.81
src/tests/lib/libc/sys/t_ptrace_x86_wait.h@1.30 / diff / nxr@1.30
src/sys/arch/x86/include/fpu.h@1.23 / diff / nxr@1.23
src/sys/arch/x86/x86/fpu.c@1.76 / diff / nxr@1.76
src/sys/dev/nvmm/x86/nvmm_x86_svm.c@1.82 / diff / nxr@1.82
src/sys/dev/nvmm/x86/nvmm_x86_vmx.c@1.81 / diff / nxr@1.81
src/tests/lib/libc/sys/t_ptrace_x86_wait.h@1.30 / diff / nxr@1.30
Issue 64-bit versions of *XSAVE* for 64-bit amd64 programs
When calling FXSAVE, XSAVE, FXRSTOR, ... for 64-bit programs on amd64
use the 64-suffixed variant in order to include the complete FIP/FDP
registers in the x87 area.
The difference between the two variants is that the FXSAVE64 (new)
variant represents FIP/FDP as 64-bit fields (union fp_addr.fa_64),
while the legacy FXSAVE variant uses split fields: 32-bit offset,
16-bit segment and 16-bit reserved field (union fp_addr.fa_32).
The latter implies that the actual addresses are truncated to 32 bits
which is insufficient in modern programs.
The change is applied only to 64-bit programs on amd64. Plain i386
and compat32 continue using plain FXSAVE. Similarly, NVMM is not
changed as I am not familiar with that code.
This is a potentially breaking change. However, I don't think it likely
to actually break anything because the data provided by the old variant
were not meaningful (because of the truncated pointer).
When calling FXSAVE, XSAVE, FXRSTOR, ... for 64-bit programs on amd64
use the 64-suffixed variant in order to include the complete FIP/FDP
registers in the x87 area.
The difference between the two variants is that the FXSAVE64 (new)
variant represents FIP/FDP as 64-bit fields (union fp_addr.fa_64),
while the legacy FXSAVE variant uses split fields: 32-bit offset,
16-bit segment and 16-bit reserved field (union fp_addr.fa_32).
The latter implies that the actual addresses are truncated to 32 bits
which is insufficient in modern programs.
The change is applied only to 64-bit programs on amd64. Plain i386
and compat32 continue using plain FXSAVE. Similarly, NVMM is not
changed as I am not familiar with that code.
This is a potentially breaking change. However, I don't think it likely
to actually break anything because the data provided by the old variant
were not meaningful (because of the truncated pointer).