<div dir="ltr"><div dir="ltr">The bot is failing, please fix or revert.</div><div dir="ltr">Or will it fix itself once the compiler change is committed? <br><div><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">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></div><div><pre style="font-family:"Courier New",courier,monotype,monospace;color:rgb(0,0,0);font-size:medium"><span class="gmail-stdout">FAIL: HWAddressSanitizer-aarch64 :: TestCases/mem-intrinsics.c (444 of 1381)
******************** TEST 'HWAddressSanitizer-aarch64 :: TestCases/mem-intrinsics.c' FAILED ********************
Script:
--
: '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
: '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
: '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=a</span><span class="gmail-stdout">arch64-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
</span><span class="gmail-stdout">: '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
--
Exit Code: 1

Command Output (stderr):
--
clang (LLVM option parsing): Unknown command line argument '-hwasan-instrument-mem-intrinsics'.  Try: 'clang (LLVM option parsing) -help'
clang (LLVM option parsing): Did you mean '-esan-instrument-memintrinsics'?

--

********************
Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. 
Testing Time: 211.25s
********************
Failing Tests (1):
    HWAddressSanitizer-aarch64 :: TestCases/mem-intrinsics.c
</span></pre><br class="gmail-Apple-interchange-newline"></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 20, 2018 at 1:13 AM Eugene Leviant via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</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">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>