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

Reply via email to