<div dir="ltr">script is fixed and bot is green after clean rebuild</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 20, 2018 at 11:21 AM Vitaly Buka <<a href="mailto:vitalybuka@google.com">vitalybuka@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="gmail-m_-5850327640860898775gmail-stdout">I'll check buildbot script.
</span></pre><br class="gmail-m_-5850327640860898775gmail-Apple-interchange-newline"></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 20, 2018 at 11:13 AM Evgenii Stepanov <<a href="mailto:eugenis@google.com" target="_blank">eugenis@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">How interesting, this bot failed to rebuild clang (for an unclear<br>
reason) and then failed to report it:<br>
<a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/18269/steps/bootstrap%20clang/logs/stdio" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/18269/steps/bootstrap%20clang/logs/stdio</a><br>
<br>
On Thu, Dec 20, 2018 at 10:58 AM Kostya Serebryany <<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>> wrote:<br>
><br>
> The bot is failing, please fix or revert.<br>
> Or will it fix itself once the compiler change is committed?<br>
> <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/18269/steps/run%20lit%20tests%20%5Baarch64%2Fbullhead-user%2FOPM6.171019.030.B1%5D/logs/stdio" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/18269/steps/run%20lit%20tests%20%5Baarch64%2Fbullhead-user%2FOPM6.171019.030.B1%5D/logs/stdio</a><br>
><br>
> FAIL: HWAddressSanitizer-aarch64 :: TestCases/mem-intrinsics.c (444 of 1381)<br>
> ******************** TEST 'HWAddressSanitizer-aarch64 :: TestCases/mem-intrinsics.c' FAILED ********************<br>
> Script:<br>
> --<br>
> : 'RUN: at line 1';     /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/sanitizer_common/android_commands/android_compile.py  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm_build64/bin/clang  -fsanitize=hwaddress -mllvm -hwasan-generate-tags-with-calls  --target=aarch64-linux-android --sysroot=/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64/sysroot -B/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64 -pie -fuse-ld=gold -Wl,--enable-new-dtags  -gline-tables-only /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c -DTEST_NO=1 -mllvm -hwasan-instrument-mem-intrinsics -o /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp && not  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp 2>&1 | FileCheck /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c --check-prefix=WRITE<br>
> : 'RUN: at line 2';     /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/sanitizer_common/android_commands/android_compile.py  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm_build64/bin/clang  -fsanitize=hwaddress -mllvm -hwasan-generate-tags-with-calls  --target=aarch64-linux-android --sysroot=/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64/sysroot -B/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64 -pie -fuse-ld=gold -Wl,--enable-new-dtags  -gline-tables-only /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c -DTEST_NO=2 -mllvm -hwasan-instrument-mem-intrinsics -o /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp && not  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp 2>&1 | FileCheck /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c --check-prefix=READ<br>
> : 'RUN: at line 3';     /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/sanitizer_common/android_commands/android_compile.py  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm_build64/bin/clang  -fsanitize=hwaddress -mllvm -hwasan-generate-tags-with-calls  --target=aarch64-linux-android --sysroot=/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64/sysroot -B/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64 -pie -fuse-ld=gold -Wl,--enable-new-dtags  -gline-tables-only /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c -DTEST_NO=3 -mllvm -hwasan-instrument-mem-intrinsics -o /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp && not  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp 2>&1 | FileCheck /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c --check-prefix=WRITE<br>
> : 'RUN: at line 4';     /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/sanitizer_common/android_commands/android_compile.py  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm_build64/bin/clang  -fsanitize=hwaddress -mllvm -hwasan-generate-tags-with-calls  --target=aarch64-linux-android --sysroot=/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64/sysroot -B/var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/android_ndk/standalone-aarch64 -pie -fuse-ld=gold -Wl,--enable-new-dtags  -gline-tables-only /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c -DTEST_NO=2 -mllvm -hwasan-instrument-mem-intrinsics -o /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp && not env HWASAN_OPTIONS=disable_allocator_tagging=1:random_tags=0:abort_on_error=0:halt_on_error=0  /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/compiler_rt_build_android_aarch64/test/hwasan/AARCH64/TestCases/Output/mem-intrinsics.c.tmp 2>&1 | FileCheck /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm/projects/compiler-rt/test/hwasan/TestCases/mem-intrinsics.c --check-prefix=RECOVER<br>
> --<br>
> Exit Code: 1<br>
><br>
> Command Output (stderr):<br>
> --<br>
> clang (LLVM option parsing): Unknown command line argument '-hwasan-instrument-mem-intrinsics'.  Try: 'clang (LLVM option parsing) -help'<br>
> clang (LLVM option parsing): Did you mean '-esan-instrument-memintrinsics'?<br>
><br>
> --<br>
><br>
> ********************<br>
> Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..<br>
> Testing Time: 211.25s<br>
> ********************<br>
> Failing Tests (1):<br>
>     HWAddressSanitizer-aarch64 :: TestCases/mem-intrinsics.c<br>
><br>
><br>
><br>
> On Thu, Dec 20, 2018 at 1:13 AM Eugene Leviant via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>> Author: evgeny777<br>
>> Date: Thu Dec 20 01:10:03 2018<br>
>> New Revision: 349730<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=349730&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=349730&view=rev</a><br>
>> Log:<br>
>> [HWASAN] Add support for memory intrinsics<br>
>><br>
>> This is patch complements D55117 implementing __hwasan_mem*<br>
>> functions in runtime<br>
>><br>
>> Differential revision: <a href="https://reviews.llvm.org/D55554" rel="noreferrer" target="_blank">https://reviews.llvm.org/D55554</a><br>
>><br>
>> Added:<br>
>>     compiler-rt/trunk/lib/hwasan/hwasan_checks.h<br>
>>     compiler-rt/trunk/lib/hwasan/hwasan_memintrinsics.cc<br>
>>     compiler-rt/trunk/test/hwasan/TestCases/mem-intrinsics.c<br>
>> Modified:<br>
>>     compiler-rt/trunk/lib/hwasan/CMakeLists.txt<br>
>>     compiler-rt/trunk/lib/hwasan/hwasan.cc<br>
>>     compiler-rt/trunk/lib/hwasan/hwasan_interface_internal.h<br>
>><br>
>> Modified: compiler-rt/trunk/lib/hwasan/CMakeLists.txt<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/CMakeLists.txt?rev=349730&r1=349729&r2=349730&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/CMakeLists.txt?rev=349730&r1=349729&r2=349730&view=diff</a><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/hwasan/CMakeLists.txt (original)<br>
>> +++ compiler-rt/trunk/lib/hwasan/CMakeLists.txt Thu Dec 20 01:10:03 2018<br>
>> @@ -7,6 +7,7 @@ set(HWASAN_RTL_SOURCES<br>
>>    hwasan_dynamic_shadow.cc<br>
>>    hwasan_interceptors.cc<br>
>>    hwasan_linux.cc<br>
>> +  hwasan_memintrinsics.cc<br>
>>    hwasan_poisoning.cc<br>
>>    hwasan_report.cc<br>
>>    hwasan_thread.cc<br>
>><br>
>> Modified: compiler-rt/trunk/lib/hwasan/hwasan.cc<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan.cc?rev=349730&r1=349729&r2=349730&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan.cc?rev=349730&r1=349729&r2=349730&view=diff</a><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/hwasan/hwasan.cc (original)<br>
>> +++ compiler-rt/trunk/lib/hwasan/hwasan.cc Thu Dec 20 01:10:03 2018<br>
>> @@ -13,20 +13,20 @@<br>
>>  //===----------------------------------------------------------------------===//<br>
>><br>
>>  #include "hwasan.h"<br>
>> -#include "hwasan_mapping.h"<br>
>> +#include "hwasan_checks.h"<br>
>>  #include "hwasan_poisoning.h"<br>
>>  #include "hwasan_report.h"<br>
>>  #include "hwasan_thread.h"<br>
>>  #include "hwasan_thread_list.h"<br>
>>  #include "sanitizer_common/sanitizer_atomic.h"<br>
>>  #include "sanitizer_common/sanitizer_common.h"<br>
>> -#include "sanitizer_common/sanitizer_flags.h"<br>
>>  #include "sanitizer_common/sanitizer_flag_parser.h"<br>
>> +#include "sanitizer_common/sanitizer_flags.h"<br>
>>  #include "sanitizer_common/sanitizer_libc.h"<br>
>>  #include "sanitizer_common/sanitizer_procmaps.h"<br>
>> +#include "sanitizer_common/sanitizer_stackdepot.h"<br>
>>  #include "sanitizer_common/sanitizer_stacktrace.h"<br>
>>  #include "sanitizer_common/sanitizer_symbolizer.h"<br>
>> -#include "sanitizer_common/sanitizer_stackdepot.h"<br>
>>  #include "ubsan/ubsan_flags.h"<br>
>>  #include "ubsan/ubsan_init.h"<br>
>><br>
>> @@ -365,63 +365,6 @@ void __sanitizer_unaligned_store64(uu64<br>
>>    *p = x;<br>
>>  }<br>
>><br>
>> -template<unsigned X><br>
>> -__attribute__((always_inline))<br>
>> -static void SigTrap(uptr p) {<br>
>> -#if defined(__aarch64__)<br>
>> -  (void)p;<br>
>> -  // 0x900 is added to do not interfere with the kernel use of lower values of<br>
>> -  // brk immediate.<br>
>> -  // FIXME: Add a constraint to put the pointer into x0, the same as x86 branch.<br>
>> -  asm("brk %0\n\t" ::"n"(0x900 + X));<br>
>> -#elif defined(__x86_64__)<br>
>> -  // INT3 + NOP DWORD ptr [EAX + X] to pass X to our signal handler, 5 bytes<br>
>> -  // total. The pointer is passed via rdi.<br>
>> -  // 0x40 is added as a safeguard, to help distinguish our trap from others and<br>
>> -  // to avoid 0 offsets in the command (otherwise it'll be reduced to a<br>
>> -  // different nop command, the three bytes one).<br>
>> -  asm volatile(<br>
>> -      "int3\n"<br>
>> -      "nopl %c0(%%rax)\n"<br>
>> -      :: "n"(0x40 + X), "D"(p));<br>
>> -#else<br>
>> -  // FIXME: not always sigill.<br>
>> -  __builtin_trap();<br>
>> -#endif<br>
>> -  // __builtin_unreachable();<br>
>> -}<br>
>> -<br>
>> -enum class ErrorAction { Abort, Recover };<br>
>> -enum class AccessType { Load, Store };<br>
>> -<br>
>> -template <ErrorAction EA, AccessType AT, unsigned LogSize><br>
>> -__attribute__((always_inline, nodebug)) static void CheckAddress(uptr p) {<br>
>> -  tag_t ptr_tag = GetTagFromPointer(p);<br>
>> -  uptr ptr_raw = p & ~kAddressTagMask;<br>
>> -  tag_t mem_tag = *(tag_t *)MemToShadow(ptr_raw);<br>
>> -  if (UNLIKELY(ptr_tag != mem_tag)) {<br>
>> -    SigTrap<0x20 * (EA == ErrorAction::Recover) +<br>
>> -           0x10 * (AT == AccessType::Store) + LogSize>(p);<br>
>> -    if (EA == ErrorAction::Abort) __builtin_unreachable();<br>
>> -  }<br>
>> -}<br>
>> -<br>
>> -template <ErrorAction EA, AccessType AT><br>
>> -__attribute__((always_inline, nodebug)) static void CheckAddressSized(uptr p,<br>
>> -                                                                      uptr sz) {<br>
>> -  CHECK_NE(0, sz);<br>
>> -  tag_t ptr_tag = GetTagFromPointer(p);<br>
>> -  uptr ptr_raw = p & ~kAddressTagMask;<br>
>> -  tag_t *shadow_first = (tag_t *)MemToShadow(ptr_raw);<br>
>> -  tag_t *shadow_last = (tag_t *)MemToShadow(ptr_raw + sz - 1);<br>
>> -  for (tag_t *t = shadow_first; t <= shadow_last; ++t)<br>
>> -    if (UNLIKELY(ptr_tag != *t)) {<br>
>> -      SigTrap<0x20 * (EA == ErrorAction::Recover) +<br>
>> -             0x10 * (AT == AccessType::Store) + 0xf>(p);<br>
>> -      if (EA == ErrorAction::Abort) __builtin_unreachable();<br>
>> -    }<br>
>> -}<br>
>> -<br>
>>  void __hwasan_loadN(uptr p, uptr sz) {<br>
>>    CheckAddressSized<ErrorAction::Abort, AccessType::Load>(p, sz);<br>
>>  }<br>
>><br>
>> Added: compiler-rt/trunk/lib/hwasan/hwasan_checks.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_checks.h?rev=349730&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_checks.h?rev=349730&view=auto</a><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/hwasan/hwasan_checks.h (added)<br>
>> +++ compiler-rt/trunk/lib/hwasan/hwasan_checks.h Thu Dec 20 01:10:03 2018<br>
>> @@ -0,0 +1,79 @@<br>
>> +//===-- hwasan_checks.h -----------------------------------------*- C++ -*-===//<br>
>> +//<br>
>> +//                     The LLVM Compiler Infrastructure<br>
>> +//<br>
>> +// This file is distributed under the University of Illinois Open Source<br>
>> +// License. See LICENSE.TXT for details.<br>
>> +//<br>
>> +//===----------------------------------------------------------------------===//<br>
>> +//<br>
>> +// This file is a part of HWAddressSanitizer.<br>
>> +//<br>
>> +//===----------------------------------------------------------------------===//<br>
>> +<br>
>> +#ifndef HWASAN_CHECKS_H<br>
>> +#define HWASAN_CHECKS_H<br>
>> +<br>
>> +#include "hwasan_mapping.h"<br>
>> +<br>
>> +namespace __hwasan {<br>
>> +template <unsigned X><br>
>> +__attribute__((always_inline)) static void SigTrap(uptr p) {<br>
>> +#if defined(__aarch64__)<br>
>> +  (void)p;<br>
>> +  // 0x900 is added to do not interfere with the kernel use of lower values of<br>
>> +  // brk immediate.<br>
>> +  // FIXME: Add a constraint to put the pointer into x0, the same as x86 branch.<br>
>> +  asm("brk %0\n\t" ::"n"(0x900 + X));<br>
>> +#elif defined(__x86_64__)<br>
>> +  // INT3 + NOP DWORD ptr [EAX + X] to pass X to our signal handler, 5 bytes<br>
>> +  // total. The pointer is passed via rdi.<br>
>> +  // 0x40 is added as a safeguard, to help distinguish our trap from others and<br>
>> +  // to avoid 0 offsets in the command (otherwise it'll be reduced to a<br>
>> +  // different nop command, the three bytes one).<br>
>> +  asm volatile(<br>
>> +      "int3\n"<br>
>> +      "nopl %c0(%%rax)\n" ::"n"(0x40 + X),<br>
>> +      "D"(p));<br>
>> +#else<br>
>> +  // FIXME: not always sigill.<br>
>> +  __builtin_trap();<br>
>> +#endif<br>
>> +  // __builtin_unreachable();<br>
>> +}<br>
>> +<br>
>> +enum class ErrorAction { Abort, Recover };<br>
>> +enum class AccessType { Load, Store };<br>
>> +<br>
>> +template <ErrorAction EA, AccessType AT, unsigned LogSize><br>
>> +__attribute__((always_inline, nodebug)) static void CheckAddress(uptr p) {<br>
>> +  tag_t ptr_tag = GetTagFromPointer(p);<br>
>> +  uptr ptr_raw = p & ~kAddressTagMask;<br>
>> +  tag_t mem_tag = *(tag_t *)MemToShadow(ptr_raw);<br>
>> +  if (UNLIKELY(ptr_tag != mem_tag)) {<br>
>> +    SigTrap<0x20 * (EA == ErrorAction::Recover) +<br>
>> +            0x10 * (AT == AccessType::Store) + LogSize>(p);<br>
>> +    if (EA == ErrorAction::Abort)<br>
>> +      __builtin_unreachable();<br>
>> +  }<br>
>> +}<br>
>> +<br>
>> +template <ErrorAction EA, AccessType AT><br>
>> +__attribute__((always_inline, nodebug)) static void CheckAddressSized(uptr p,<br>
>> +                                                                      uptr sz) {<br>
>> +  CHECK_NE(0, sz);<br>
>> +  tag_t ptr_tag = GetTagFromPointer(p);<br>
>> +  uptr ptr_raw = p & ~kAddressTagMask;<br>
>> +  tag_t *shadow_first = (tag_t *)MemToShadow(ptr_raw);<br>
>> +  tag_t *shadow_last = (tag_t *)MemToShadow(ptr_raw + sz - 1);<br>
>> +  for (tag_t *t = shadow_first; t <= shadow_last; ++t)<br>
>> +    if (UNLIKELY(ptr_tag != *t)) {<br>
>> +      SigTrap<0x20 * (EA == ErrorAction::Recover) +<br>
>> +              0x10 * (AT == AccessType::Store) + 0xf>(p);<br>
>> +      if (EA == ErrorAction::Abort)<br>
>> +        __builtin_unreachable();<br>
>> +    }<br>
>> +}<br>
>> +}  // end namespace __hwasan<br>
>> +<br>
>> +#endif  // HWASAN_CHECKS_H<br>
>><br>
>> Modified: compiler-rt/trunk/lib/hwasan/hwasan_interface_internal.h<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_interface_internal.h?rev=349730&r1=349729&r2=349730&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_interface_internal.h?rev=349730&r1=349729&r2=349730&view=diff</a><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/hwasan/hwasan_interface_internal.h (original)<br>
>> +++ compiler-rt/trunk/lib/hwasan/hwasan_interface_internal.h Thu Dec 20 01:10:03 2018<br>
>> @@ -194,6 +194,13 @@ void * __sanitizer_realloc(void *ptr, up<br>
>><br>
>>  SANITIZER_INTERFACE_ATTRIBUTE<br>
>>  void * __sanitizer_malloc(uptr size);<br>
>> +<br>
>> +SANITIZER_INTERFACE_ATTRIBUTE<br>
>> +void *__hwasan_memcpy(void *dst, const void *src, uptr size);<br>
>> +SANITIZER_INTERFACE_ATTRIBUTE<br>
>> +void *__hwasan_memset(void *s, int c, uptr n);<br>
>> +SANITIZER_INTERFACE_ATTRIBUTE<br>
>> +void *__hwasan_memmove(void *dest, const void *src, uptr n);<br>
>>  }  // extern "C"<br>
>><br>
>>  #endif  // HWASAN_INTERFACE_INTERNAL_H<br>
>><br>
>> Added: compiler-rt/trunk/lib/hwasan/hwasan_memintrinsics.cc<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_memintrinsics.cc?rev=349730&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_memintrinsics.cc?rev=349730&view=auto</a><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/hwasan/hwasan_memintrinsics.cc (added)<br>
>> +++ compiler-rt/trunk/lib/hwasan/hwasan_memintrinsics.cc Thu Dec 20 01:10:03 2018<br>
>> @@ -0,0 +1,45 @@<br>
>> +//===-- hwasan_memintrinsics.cc ---------------------------------*- C++ -*-===//<br>
>> +//<br>
>> +//                     The LLVM Compiler Infrastructure<br>
>> +//<br>
>> +// This file is distributed under the University of Illinois Open Source<br>
>> +// License. See LICENSE.TXT for details.<br>
>> +//<br>
>> +//===----------------------------------------------------------------------===//<br>
>> +///<br>
>> +/// \file<br>
>> +/// This file is a part of HWAddressSanitizer and contains HWASAN versions of<br>
>> +/// memset, memcpy and memmove<br>
>> +///<br>
>> +//===----------------------------------------------------------------------===//<br>
>> +<br>
>> +#include <string.h><br>
>> +#include "hwasan.h"<br>
>> +#include "hwasan_checks.h"<br>
>> +#include "hwasan_flags.h"<br>
>> +#include "hwasan_interface_internal.h"<br>
>> +#include "sanitizer_common/sanitizer_libc.h"<br>
>> +<br>
>> +using namespace __hwasan;<br>
>> +<br>
>> +void *__hwasan_memset(void *block, int c, uptr size) {<br>
>> +  CheckAddressSized<ErrorAction::Recover, AccessType::Store>(<br>
>> +      reinterpret_cast<uptr>(block), size);<br>
>> +  return memset(UntagPtr(block), c, size);<br>
>> +}<br>
>> +<br>
>> +void *__hwasan_memcpy(void *to, const void *from, uptr size) {<br>
>> +  CheckAddressSized<ErrorAction::Recover, AccessType::Store>(<br>
>> +      reinterpret_cast<uptr>(to), size);<br>
>> +  CheckAddressSized<ErrorAction::Recover, AccessType::Load>(<br>
>> +      reinterpret_cast<uptr>(from), size);<br>
>> +  return memcpy(UntagPtr(to), UntagPtr(from), size);<br>
>> +}<br>
>> +<br>
>> +void *__hwasan_memmove(void *to, const void *from, uptr size) {<br>
>> +  CheckAddressSized<ErrorAction::Recover, AccessType::Store>(<br>
>> +      reinterpret_cast<uptr>(to), size);<br>
>> +  CheckAddressSized<ErrorAction::Recover, AccessType::Load>(<br>
>> +      reinterpret_cast<uptr>(from), size);<br>
>> +  return memmove(UntagPtr(to), UntagPtr(from), size);<br>
>> +}<br>
>><br>
>> Added: compiler-rt/trunk/test/hwasan/TestCases/mem-intrinsics.c<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/hwasan/TestCases/mem-intrinsics.c?rev=349730&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/hwasan/TestCases/mem-intrinsics.c?rev=349730&view=auto</a><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/test/hwasan/TestCases/mem-intrinsics.c (added)<br>
>> +++ compiler-rt/trunk/test/hwasan/TestCases/mem-intrinsics.c Thu Dec 20 01:10:03 2018<br>
>> @@ -0,0 +1,37 @@<br>
>> +// RUN: %clang_hwasan %s -DTEST_NO=1 -mllvm -hwasan-instrument-mem-intrinsics -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=WRITE<br>
>> +// RUN: %clang_hwasan %s -DTEST_NO=2 -mllvm -hwasan-instrument-mem-intrinsics -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=READ<br>
>> +// RUN: %clang_hwasan %s -DTEST_NO=3 -mllvm -hwasan-instrument-mem-intrinsics -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=WRITE<br>
>> +// RUN: %clang_hwasan %s -DTEST_NO=2 -mllvm -hwasan-instrument-mem-intrinsics -o %t && not %env_hwasan_opts=halt_on_error=0 %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER<br>
>> +<br>
>> +// REQUIRES: stable-runtime<br>
>> +<br>
>> +#include <stdio.h><br>
>> +#include <stdlib.h><br>
>> +#include <unistd.h><br>
>> +<br>
>> +int main() {<br>
>> +  char Q[16];<br>
>> +  char P[16];<br>
>> +#if TEST_NO == 1<br>
>> +  memset(Q, 0, 32);<br>
>> +#elif TEST_NO == 2<br>
>> +  memmove(Q, Q + 16, 16);<br>
>> +#elif TEST_NO == 3<br>
>> +  memcpy(Q, P, 32);<br>
>> +#endif<br>
>> +  write(STDOUT_FILENO, "recovered\n", 10);<br>
>> +  // WRITE: ERROR: HWAddressSanitizer: tag-mismatch on address<br>
>> +  // WRITE: WRITE {{.*}} tags: [[PTR_TAG:..]]/[[MEM_TAG:..]] (ptr/mem)<br>
>> +  // WRITE: Memory tags around the buggy address (one tag corresponds to 16 bytes):<br>
>> +  // WRITE: =>{{.*}}[[MEM_TAG]]<br>
>> +  // WRITE-NOT: recovered<br>
>> +<br>
>> +  // READ: ERROR: HWAddressSanitizer: tag-mismatch on address<br>
>> +  // READ: READ {{.*}} tags: [[PTR_TAG:..]]/[[MEM_TAG:..]] (ptr/mem)<br>
>> +  // READ: Memory tags around the buggy address (one tag corresponds to 16 bytes):<br>
>> +  // READ: =>{{.*}}[[MEM_TAG]]<br>
>> +  // READ-NOT: recovered<br>
>> +<br>
>> +  // RECOVER: recovered<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>
</blockquote></div>
</blockquote></div>