[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Bus error on MacOS
- From: Jay Carlson <nop@...>
- Date: Sun, 5 May 2013 19:17:17 -0400
On May 4, 2013, at 10:04 PM, Eric Wing wrote:
> On 5/4/13, Dong Feng <middle.fengdong@gmail.com> wrote:
>> GCC on Mac is of low priority on Apple's radar. Maybe time to change
>> the default compiler in make to clang for Mac OS X.
>
> gcc and the GNU toolchain has already been removed from the latest
> Xcode distributions.
Not removed from the public ones yet.
The generated assembly code reads:
+20 movl $0x0,04(%eax)
+27 mov 0x4(%eax),%eax
[epilog]
+37 jmp *%eax # TAILCALL
So that would be a problem. The 64-bit version uses %rcx.
Searching for "tail" in http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?view=log is fun. I've got my eye on http://llvm.org/viewvc/llvm-project?view=revision&revision=95280 although there's stuff in the 47xxx range too.
If Apple's de-supported the whole thing there's little point in me spending a lot of time fixing. lhf, you're going to need some kind of hack; the big question is what to predicate it on. Probably the least objectionable is to add an indigestible asm:
static int aux_close (lua_State *L) {
LStream *p = tolstream(L);
lua_CFunction cf = p->closef;
#ifdef __APPLE_CC__
#if defined(__i386__) && defined(__llvm__) && \
!defined(__clang__) && (__APPLE_CC__ == 5658)
asm("");
#endif
#endif
p->closef = NULL; /* mark stream as closed */
return (*cf)(L); /* close it */
}
Obviously you can move the body into an include file etc.
Jay