On 6/15/11 10:58 AM, Kostik Belousov wrote:
On Wed, Jun 15, 2011 at 10:24:46AM -0400, Eric McCorkle wrote:
On 6/15/11 8:23 AM, Holger Kipp wrote:
Dear all,

I had installed FreeBSD 9 amd64 from snapshot (ISO-image) located here:
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/201101/FreeBSD-9.0-CURRENT-201101-amd64-dvd1.iso


Today I wanted to cvsup to a later date to upgrade to ZFS v28
and compiled port /usr/ports/net/cvsup-without-gui without problems.

Starting freshly compiled cvsup then gives me

"Illegal Instruction"

This error seems to be identical to
http://lists.freebsd.org/pipermail/freebsd-current/2010-September/020083.html


I've gotten the same problem, and managed to diagnose it.  The problem
actually isn't an illegal instruction, but a stack misalignment.  If you
load it in gdb, it will die with SIGSEGV somewhere in libc.so.7, on a
callq instruction.  This is because callq needs the stack to be 16-byte
aligned, and it's not for some reason.
Stack alignment requirement is an ABI convention, and it is not enforced
by CPU, except several special cases. In particular, either EFLAGS.AC
bit should be set, that usually is not, or SSE instruction explicitely
disallowing non-aligned access executed. Anyway, you will not get
Illegal instruction fault for unaligned access.

I took a closer look this afternoon, and you're right. callq with an unaligned stack pointer does *not* cause a fault. If anyone does a movaps, however, you will get a fault (SIGBUS, I believe), and if the ABI says stacks are 16-byte aligned, then libraries may assume it's safe to load from the stack with movaps, and you'll get a fault. This is what happened to mlton on Mac OS, so I thought it might be something similar going on here.

Anyways, I'll look into it more.
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to