problems with cvsup on FreeBSD 9 snapshot 201101

Eric McCorkle eric at
Thu Jun 16 00:49:45 UTC 2011

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:
>>> 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
>> 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, 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.

More information about the freebsd-current mailing list