problems with cvsup on FreeBSD 9 snapshot 201101
eric at shadowsun.net
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 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.
More information about the freebsd-current