Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/arch



Le 14/11/2017 à 15:15, Joerg Sonnenberger a écrit :
On Tue, Nov 14, 2017 at 03:06:00PM +0100, Maxime Villard wrote:
Le 11/11/2017 à 10:10, Manuel Bouyer a écrit :
Module Name:	src
Committed By:	bouyer
Date:		Sat Nov 11 09:10:19 UTC 2017

Modified Files:
	src/sys/arch/x86/x86: cpu.c fpu.c identcpu.c
	src/sys/arch/xen/x86: cpu.c

Log Message:
Revert http://mail-index.netbsd.org/source-changes/2017/11/08/msg089525.html,
it breaks Xen:
http://www-soc.lip6.fr/~bouyer/NetBSD-tests/xen/HEAD/amd64/201711082340Z_anita.txt


To generate a diff of this commit:
cvs rdiff -u -r1.139 -r1.140 src/sys/arch/x86/x86/cpu.c
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/x86/x86/fpu.c
cvs rdiff -u -r1.65 -r1.66 src/sys/arch/x86/x86/identcpu.c
cvs rdiff -u -r1.114 -r1.115 src/sys/arch/xen/x86/cpu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

You have %rdi = 0xffffa0000c194c18, so the stack is not aligned to 64 bytes,
and that's why fxsave faults. Looks like you are triggering another bug earlier
in the boot procedure - on my dom0-amd64 fxsave worked correctly.

The stack on AMD64 is not 64byte aligned, but depending on when exactly
you check, 16byte aligned with or without an offset of 8byte.

GCC assumes 16byte alignment, and pushes __aligned(64) variables following
this assumption. The fact that we end up with a non-aligned value being passed
to fxsave means this assumption was broken at some point earlier - as if we
had done a "jmp label" instead of "callq label" which pushed %rbp but no %rip,
leading to a 8byte offset as you said.


Home | Main Index | Thread Index | Old Index