<div dir="ltr">Should this test be Linux-specific? It fails on Mac with:<div>ld: unknown option: --soname<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Feb 24, 2014 at 6:31 PM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugenis<br>
Date: Mon Feb 24 08:31:28 2014<br>
New Revision: 202037<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=202037&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=202037&view=rev</a><br>
Log:<br>
[asan] Add a test for interceptors in shared libraries.<br>
<br>
Added:<br>
    compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc   (with props)<br>
Modified:<br>
    compiler-rt/trunk/test/asan/TestCases/SharedLibs/shared-lib-test-so.cc<br>
    compiler-rt/trunk/test/asan/TestCases/asan-symbolize-sanity-test.cc<br>
<br>
Modified: compiler-rt/trunk/test/asan/TestCases/SharedLibs/shared-lib-test-so.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/SharedLibs/shared-lib-test-so.cc?rev=202037&r1=202036&r2=202037&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/SharedLibs/shared-lib-test-so.cc?rev=202037&r1=202036&r2=202037&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/test/asan/TestCases/SharedLibs/shared-lib-test-so.cc (original)<br>
+++ compiler-rt/trunk/test/asan/TestCases/SharedLibs/shared-lib-test-so.cc Mon Feb 24 08:31:28 2014<br>
@@ -11,6 +11,7 @@<br>
 //<br>
 //===----------------------------------------------------------------------===//<br>
 #include <stdio.h><br>
+#include <string.h><br>
<br>
 int pad[10];<br>
 int GLOB[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};<br>
@@ -24,3 +25,8 @@ extern "C"<br>
 void inc2(int *a, int index) {<br>
   a[index]++;<br>
 }<br>
+<br>
+extern "C"<br>
+void my_memset(void *p, size_t sz) {<br>
+  memset(p, 0, sz);<br>
+}<br>
<br>
Modified: compiler-rt/trunk/test/asan/TestCases/asan-symbolize-sanity-test.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/asan-symbolize-sanity-test.cc?rev=202037&r1=202036&r2=202037&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/asan-symbolize-sanity-test.cc?rev=202037&r1=202036&r2=202037&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/test/asan/TestCases/asan-symbolize-sanity-test.cc (original)<br>
+++ compiler-rt/trunk/test/asan/TestCases/asan-symbolize-sanity-test.cc Mon Feb 24 08:31:28 2014<br>
@@ -30,7 +30,7 @@ int main(int argc, char *argv[]) {<br>
   inc2(array, -1);  // BOOM<br>
   // CHECK: ERROR: AddressSanitizer: heap-buffer-overflow<br>
   // CHECK: READ of size 4 at 0x{{.*}}<br>
-  // CHECK: #0 {{.*}} in inc2 {{.*}}shared-lib-test-so.cc:25<br>
+  // CHECK: #0 {{.*}} in inc2 {{.*}}shared-lib-test-so.cc:26<br>
   // CHECK: #1 {{.*}} in main {{.*}}asan-symbolize-sanity-test.cc:[[@LINE-4]]<br>
   // CHECK: allocated by thread T{{.*}} here:<br>
   // CHECK: #{{.*}} in {{(wrap_|__interceptor_)?}}malloc<br>
<br>
Added: compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc?rev=202037&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc?rev=202037&view=auto</a><br>

==============================================================================<br>
--- compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc (added)<br>
+++ compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc Mon Feb 24 08:31:28 2014<br>
@@ -0,0 +1,21 @@<br>
+// Check that memset() call from a shared library gets intercepted.<br>
+<br>
+// RUN: %clangxx_asan -O0 %p/SharedLibs/shared-lib-test-so.cc \<br>
+// RUN:     -shared -o %T/libinterception-in-shared-lib-test.so \<br>
+// RUN:     -fPIC -Wl,--soname,libinterception-in-shared-lib-test.so<br>
+// RUN: %clangxx_asan -O0 %s -o %t -Wl,-R,\$ORIGIN -L%T -linterception-in-shared-lib-test && \<br>
+// RUN:     not %t 2>&1 | FileCheck %s<br>
+<br>
+#include <stdio.h><br>
+#include <string.h><br>
+<br>
+extern "C" void my_memset(void *p, size_t sz);<br>
+<br>
+int main(int argc, char *argv[]) {<br>
+  char buf[10];<br>
+  my_memset(buf, 11);<br>
+  // CHECK: {{.*ERROR: AddressSanitizer: stack-buffer-overflow}}<br>
+  // CHECK: {{WRITE of size 11 at 0x.* thread T0}}<br>
+  // CHECK: {{    #0 0x.* in my_memset .*shared-lib-test-so.cc:31}}<br>
+  return 0;<br>
+}<br>
<br>
Propchange: compiler-rt/trunk/test/asan/TestCases/interception-in-shared-lib-test.cc<br>
------------------------------------------------------------------------------<br>
    svn:eol-style = LF<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div>