On Fri, Nov 22, 2013 at 12:47:17PM +0100, Arnaud Charlet wrote: > > >>> Looks like another issue for the libsanitizer maintainers. > > >> > > >> I've been doing bootstraps, but didn't see this because the > > >> kernel header linux/vt.h use on the RHEL6 system I was doing > > >> builds on has that field renamed. Looking at our SLES11 > > >> devel system I do see the problematic header file. > > > > > > Yes, it only seems to be a problem with SUSE kernels: > > > http://gcc.gnu.org/ml/gcc/2013-11/msg00090.html > > > > As my bugreport is being ignored it would help if one ouf our > > partners (hint! hint!) would raise this issue via the appropriate > > channel ;) > > BTW I do not know if this is related, but my build of GCC is stuck > currently with this error message: > > << > /users/charlet/fsf/trunk/libsanitizer/sanitizer_common/sanitizer_linux.cc: > Assembler messages: > /users/charlet/fsf/trunk/libsanitizer/sanitizer_common/sanitizer_linux.cc:821: > Error: .cfi_endproc without corresponding .cfi_startproc > :21485: Error: open CFI at the end of file; missing .cfi_endproc directive > make[4]: *** [sanitizer_linux.lo] Error 1 > >> > > Would appreciate a fix/work around!
I guess something like this could fix this. Though, no idea if clang has any similar macro, or if llvm always uses .cfi_* directives, or what. Certainly for GCC, if __GCC_HAVE_DWARF2_CFI_ASM isn't defined, then GCC doesn't emit them (either as doesn't support them, or gcc simply hasn't been configured to use them, etc.). In that case GCC emits .eh_frame by hand, and it isn't really possible to tweak that. Kostya? --- libsanitizer/sanitizer_common/sanitizer_linux.cc 2013-11-12 11:31:00.154740857 +0100 +++ libsanitizer/sanitizer_common/sanitizer_linux.cc 2013-11-22 12:50:50.107420695 +0100 @@ -785,7 +785,9 @@ uptr internal_clone(int (*fn)(void *), v * %r8 = new_tls, * %r10 = child_tidptr) */ +#ifdef __GCC_HAVE_DWARF2_CFI_ASM ".cfi_endproc\n" +#endif "syscall\n" /* if (%rax != 0) @@ -795,8 +797,10 @@ uptr internal_clone(int (*fn)(void *), v "jnz 1f\n" /* In the child. Terminate unwind chain. */ +#ifdef __GCC_HAVE_DWARF2_CFI_ASM ".cfi_startproc\n" ".cfi_undefined %%rip;\n" +#endif "xorq %%rbp,%%rbp\n" /* Call "fn(arg)". */ Jakub