On Fri, Nov 22, 2013 at 4:31 PM, Konstantin Serebryany <konstantin.s.serebry...@gmail.com> wrote: > On Fri, Nov 22, 2013 at 3:56 PM, Jakub Jelinek <ja...@redhat.com> wrote: >> 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)". */ > > These CFI directives were completely removed in upstream at > http://llvm.org/viewvc/llvm-project?rev=192196&view=rev > Strangely, this did not get into the last merge...
Ah, no surprise. The merge was done from llvm's r191666, which is earlier than 192196 > > Anyway, these cfi_* will (should, at least) disappear with the next > merge which I hope to do in ~ 1 week. > (Or anyone is welcome to delete these now as a separate commit, but > please make sure the code matches the one in upstream) > > --kcc > > >> >> Jakub