<div dir="ltr">Thank you!</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Apr 21, 2017 at 1:36 AM Diana Picus <<a href="mailto:diana.picus@linaro.org">diana.picus@linaro.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Reverted in r300955 since the bots have been red for over 7h. Sorry!<br>
Please let me know if I can help reproduce.<br>
<br>
Cheers,<br>
Diana<br>
<br>
On 21 April 2017 at 10:20, Diana Picus <<a href="mailto:diana.picus@linaro.org" target="_blank">diana.picus@linaro.org</a>> wrote:<br>
> I don't think r300939 fixed everything:<br>
> <a href="http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15-full/builds/6087" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15-full/builds/6087</a><br>
><br>
><br>
> On 21 April 2017 at 03:30, Vitaly Buka via llvm-commits<br>
> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
>> Thanks,<br>
>> Maybe r300939 would fix.<br>
>><br>
>> On Thu, Apr 20, 2017 at 6:20 PM Ahmed Bougacha <<a href="mailto:ahmed.bougacha@gmail.com" target="_blank">ahmed.bougacha@gmail.com</a>><br>
>> wrote:<br>
>>><br>
>>> Hey Vitaly,<br>
>>><br>
>>> I saw your fixes in r300906 and r300935, but this fails differently<br>
>>> for me on Darwin:<br>
>>><br>
>>><br>
>>> ASAN:DEADLYSIGNAL<br>
>>> =================================================================<br>
>>> ==52312==ERROR: AddressSanitizer: BUS on unknown address<br>
>>> 0x00010affd000 (pc 0x7fff999a7168 bp 0x7fff57e31270 sp 0x7fff57e31270<br>
>>> T0)<br>
>>>     #0 0x7fff999a7167 in strlen (libsystem_c.dylib:x86_64+0x1167)<br>
>>>     #1 0x107dee5bb in wrap_strchr sanitizer_common_interceptors.inc:578<br>
>>>     #2 0x107dceaa5 in main strchr.c:29<br>
>>>     #3 0x7fff970345ac in start (libdyld.dylib:x86_64+0x35ac)<br>
>>><br>
>>> ==52312==Register values:<br>
>>> ....<br>
>>> AddressSanitizer can not provide additional info.<br>
>>> SUMMARY: AddressSanitizer: BUS (libsystem_c.dylib:x86_64+0x1167) in strlen<br>
>>> ==52312==ABORTING<br>
>>><br>
>>><br>
>>> Does that ring a bell?<br>
>>><br>
>>> Thanks!<br>
>>> -Ahmed<br>
>>><br>
>>><br>
>>> On Thu, Apr 20, 2017 at 1:59 PM, Vitaly Buka via llvm-commits<br>
>>> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
>>> > Author: vitalybuka<br>
>>> > Date: Thu Apr 20 15:59:37 2017<br>
>>> > New Revision: 300889<br>
>>> ><br>
>>> > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=300889&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=300889&view=rev</a><br>
>>> > Log:<br>
>>> > [asan] Optimize strchr for strict_string_checks=false<br>
>>> ><br>
>>> > Summary:<br>
>>> > strchr interceptor does not need to call strlen if strict_string_checks<br>
>>> > is not<br>
>>> > enabled. Unnecessary strlen calls affect python parser performance.<br>
>>> ><br>
>>> > Reviewers: eugenis, kcc<br>
>>> ><br>
>>> > Subscribers: llvm-commits, kubamracek<br>
>>> ><br>
>>> > Differential Revision: <a href="https://reviews.llvm.org/D32264" rel="noreferrer" target="_blank">https://reviews.llvm.org/D32264</a><br>
>>> ><br>
>>> > Added:<br>
>>> >     compiler-rt/trunk/test/asan/TestCases/Posix/strchr.c<br>
>>> > Modified:<br>
>>> ><br>
>>> > compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
>>> ><br>
>>> > Modified:<br>
>>> > compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
>>> > URL:<br>
>>> > <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=300889&r1=300888&r2=300889&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=300889&r1=300888&r2=300889&view=diff</a><br>
>>> ><br>
>>> > ==============================================================================<br>
>>> > ---<br>
>>> > compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
>>> > (original)<br>
>>> > +++<br>
>>> > compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc Thu<br>
>>> > Apr 20 15:59:37 2017<br>
>>> > @@ -139,12 +139,9 @@ bool PlatformHasDifferentMemcpyAndMemmov<br>
>>> >  #define COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED (0)<br>
>>> >  #endif<br>
>>> ><br>
>>> > -#define COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s, len, n)       \<br>
>>> > -    COMMON_INTERCEPTOR_READ_RANGE((ctx), (s),                       \<br>
>>> > -      common_flags()->strict_string_checks ? (len) + 1 : (n) )<br>
>>> > -<br>
>>> >  #define COMMON_INTERCEPTOR_READ_STRING(ctx, s, n)                   \<br>
>>> > -    COMMON_INTERCEPTOR_READ_STRING_OF_LEN((ctx), (s), REAL(strlen)(s),<br>
>>> > (n))<br>
>>> > +    COMMON_INTERCEPTOR_READ_RANGE((ctx), (s),                       \<br>
>>> > +      common_flags()->strict_string_checks ? (REAL(strlen)(s)) + 1 :<br>
>>> > (n) )<br>
>>> ><br>
>>> >  #ifndef COMMON_INTERCEPTOR_ON_DLOPEN<br>
>>> >  #define COMMON_INTERCEPTOR_ON_DLOPEN(filename, flag) \<br>
>>> > @@ -450,8 +447,7 @@ static inline void StrstrCheck(void *ctx<br>
>>> >                                 const char *s2) {<br>
>>> >      uptr len1 = REAL(strlen)(s1);<br>
>>> >      uptr len2 = REAL(strlen)(s2);<br>
>>> > -    COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s1, len1,<br>
>>> > -                                          r ? r - s1 + len2 : len1 +<br>
>>> > 1);<br>
>>> > +    COMMON_INTERCEPTOR_READ_STRING(ctx, s1, r ? r - s1 + len2 : len1 +<br>
>>> > 1);<br>
>>> >      COMMON_INTERCEPTOR_READ_RANGE(ctx, s2, len2 + 1);<br>
>>> >  }<br>
>>> >  #endif<br>
>>> > @@ -577,10 +573,11 @@ INTERCEPTOR(char*, strchr, const char *s<br>
>>> >      return internal_strchr(s, c);<br>
>>> >    COMMON_INTERCEPTOR_ENTER(ctx, strchr, s, c);<br>
>>> >    char *result = REAL(strchr)(s, c);<br>
>>> > -  uptr len = internal_strlen(s);<br>
>>> > -  uptr n = result ? result - s + 1 : len + 1;<br>
>>> > -  if (common_flags()->intercept_strchr)<br>
>>> > -    COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s, len, n);<br>
>>> > +  if (common_flags()->intercept_strchr) {<br>
>>> > +    // Keep strlen as macro argument, as macro may ignore it.<br>
>>> > +    COMMON_INTERCEPTOR_READ_STRING(ctx, s,<br>
>>> > +      (result ? result - s : REAL(strlen)(s)) + 1);<br>
>>> > +  }<br>
>>> >    return result;<br>
>>> >  }<br>
>>> >  #define INIT_STRCHR COMMON_INTERCEPT_FUNCTION(strchr)<br>
>>> > @@ -609,9 +606,8 @@ INTERCEPTOR(char*, strrchr, const char *<br>
>>> >    if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED)<br>
>>> >      return internal_strrchr(s, c);<br>
>>> >    COMMON_INTERCEPTOR_ENTER(ctx, strrchr, s, c);<br>
>>> > -  uptr len = internal_strlen(s);<br>
>>> >    if (common_flags()->intercept_strchr)<br>
>>> > -    COMMON_INTERCEPTOR_READ_STRING_OF_LEN(ctx, s, len, len + 1);<br>
>>> > +    COMMON_INTERCEPTOR_READ_RANGE(ctx, s, REAL(strlen)(s) + 1);<br>
>>> >    return REAL(strrchr)(s, c);<br>
>>> >  }<br>
>>> >  #define INIT_STRRCHR COMMON_INTERCEPT_FUNCTION(strrchr)<br>
>>> ><br>
>>> > Added: compiler-rt/trunk/test/asan/TestCases/Posix/strchr.c<br>
>>> > URL:<br>
>>> > <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/strchr.c?rev=300889&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/strchr.c?rev=300889&view=auto</a><br>
>>> ><br>
>>> > ==============================================================================<br>
>>> > --- compiler-rt/trunk/test/asan/TestCases/Posix/strchr.c (added)<br>
>>> > +++ compiler-rt/trunk/test/asan/TestCases/Posix/strchr.c Thu Apr 20<br>
>>> > 15:59:37 2017<br>
>>> > @@ -0,0 +1,36 @@<br>
>>> > +// Test strchr for strict_string_checks=false does not look beyond<br>
>>> > necessary<br>
>>> > +// char.<br>
>>> > +// RUN: %clang_asan %s -o %t<br>
>>> > +// RUN: %env_asan_opts=strict_string_checks=false %run %t 2>&1<br>
>>> > +// RUN: %env_asan_opts=strict_string_checks=true not %run %t 2>&1 |<br>
>>> > FileCheck %s<br>
>>> > +<br>
>>> > +#include <assert.h><br>
>>> > +#include <stdint.h><br>
>>> > +#include <stdlib.h><br>
>>> > +#include <string.h><br>
>>> > +#include <sys/mman.h><br>
>>> > +#include <unistd.h><br>
>>> > +<br>
>>> > +int main(int argc, char **argv) {<br>
>>> > +  size_t page_size = sysconf(_SC_PAGE_SIZE);<br>
>>> > +  size_t size = 2 * page_size;<br>
>>> > +  char *s = (char *)mmap(0, size, PROT_READ | PROT_WRITE,<br>
>>> > +                         MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);<br>
>>> > +  assert(s);<br>
>>> > +  assert(((uintptr_t)s & (page_size - 1)) == 0);<br>
>>> > +  memset(s, 'o', size);<br>
>>> > +  s[size - 1] = 0;<br>
>>> > +<br>
>>> > +  char *p = s + page_size - 1;<br>
>>> > +  *p = 'x';<br>
>>> > +<br>
>>> > +  if (mprotect(p + 1, 1, PROT_NONE))<br>
>>> > +    return 1;<br>
>>> > +  char *r = strchr(s, 'x');<br>
>>> > +  // CHECK: AddressSanitizer: SEGV on unknown address<br>
>>> > +  // CHECK: The signal is caused by a READ memory access<br>
>>> > +  // CHECK: strchr.c:[[@LINE-3]]<br>
>>> > +  assert(r == p);<br>
>>> > +<br>
>>> > +  return 0;<br>
>>> > +}<br>
>>> ><br>
>>> ><br>
>>> > _______________________________________________<br>
>>> > llvm-commits mailing list<br>
>>> > <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
>>> > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
>><br>
</blockquote></div>