Compilation with clang: clang do not recognise .end directive
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SBCL |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
SBCL cannot be compiled with clang. Since clang is primary compiler on FreeBSD it is impossible to compile sbcl on FreeBSD without additional manipulations.
The cause is that clang do not understand .end assembler directive from end of each src/runtime/
.end is added by expanding END() macro which is defined in x86-assem.S as follows:
#if defined(
#define END()
#define TRAP ud2
#else
#define END() .end
#define TRAP int3
#endif
and in x86-64-assem.S as follows:
#if defined(
/* global symbol x86-64 sym(%rip) hack:*/
#define GSYM(name) name(%rip)
#define END()
#else
#define GSYM(name) $name
#define END() .end
#endif
Why it depends on LISP_FEATURE_
The other thing I am uncertain about is GCC Thread Local Storage used in FreeBSD. It seems that clang has this feature too. All thread-related tests pass when compiled with clang (when END() macro is commented).
Can I send a patch or there are underwater stones here?
Changed in sbcl: | |
status: | Fix Committed → Fix Released |
What about removing this END() thing completely?