[compiler-rt] r293741 - [sanitizer] Support SANITIZER_INTERCEPTOR_HOOKS on Darwin

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 2 17:41:49 PST 2017


On Thu, Feb 2, 2017 at 4:34 PM, Marcos Pividori <mpividori at google.com>
wrote:

> Hi,
> I think the problem is that in Chrome you are defining the hooks without
> visibility default. I mean the strong hooks, that you want to use. So, they
> get the hidden visibility.
> So, the linker first sees that definition with hidden vissibility, and
> then it sees the weak definition added in link
> <https://github.com/llvm-mirror/compiler-rt/commit/55845b4a38ec980454781b2b37fcf4a92ebe48ce> with
> default visibility. And because of that it prints that warning.
> Based on this: https://bugs.chromium.org/p/chromium/issues/detail?id=
> 368351
> So, I think the solution is to add visibility default for the weak hooks
> that you define in Chrome.
> Thanks,
> Marcos
>

We don't define any hooks in chrome, only in libFuzzer.
And yes, they don't have __attribute__((visibility("default")))
Mike, please try adding ATTRIBUTE_INTERFACE to the hooks
in FuzzerTraceState.cpp and see if it helps.



>
> On Thu, Feb 2, 2017 at 3:45 PM, Mike Aizatsky <aizatsky at google.com> wrote:
>
>> Justin, Marcos,
>>
>> Because of the recent changes ToT clang has stopped building fuzzers in
>> the chrome (see below).
>>
>> This change:
>>
>> https://github.com/llvm-mirror/compiler-rt/commit/55845b4a38
>> ec980454781b2b37fcf4a92ebe48ce
>>
>> is an obvious suspect, but I feel there might be an error in weak-related
>> recent changes elsewhere.
>>
>> Do you think this is related?
>>
>> FAILED: ../../../../../out/llvm/bootstrap/bin/clang++ -Wl,--fatal-warnings -fPIC -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro -fuse-ld=gold -B../../third_party/binutils/Linux_x64/Release/bin -Wl,--threads -Wl,--thread-count=4 -m64 -pthread -Werror -Wl,-O1 -Wl,--gc-sections --sysroot=../../build/linux/debian_wheezy_amd64-sysroot -L/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/lib/x86_64-linux-gnu -Wl,-rpath-link=/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/lib/x86_64-linux-gnu -L/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/usr/lib/x86_64-linux-gnu -Wl,-rpath-link=/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/usr/lib/x86_64-linux-gnu -L/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6 -Wl,-rpath-link=/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/usr/lib -Wl,-rpath-link=/usr/local/google/home/aizatsky/src/chrome/src/build/linux/debian_wheezy_amd64-sysroot/usr/lib -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=leak -fsanitize-coverage=trace-pc-guard -Wl,-rpath-link=. -Wl,--disable-new-dtags -Wl,-rpath=\$ORIGIN/. -Wl,-rpath-link=. -Wl,--export-dynamic -Wl,-u_sanitizer_options_link_helper -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=leak -fsanitize-coverage=trace-pc-guard -stdlib=libc++ -Wl,-rpath,\$ORIGIN/ -L. -o "./webcrypto_ec_import_key_spki_fuzzer" -Wl,--start-group @"./webcrypto_ec_import_key_spki_fuzzer.rsp" ./libc++.so -Wl,--end-group  -ldl -lrt -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lglib-2.0 -lnss3 -lnssutil3 -lsmime3 -lplds4 -lplc4 -lnspr4 -lpangocairo-1.0 -lpango-1.0 -lcairo -lfontconfig -lfreetype -lgio-2.0 -lX11 -lX11-xcb -lxcb -lXcomposite -lXcursor -lXdamage -lXext -lXfixes -lXi -lXrender -lXtst -lXrandr -lXss -lgconf-2 -lresolv -lasound -lm -lz -ldbus-1
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_strcmp'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_strncmp'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_strcasecmp'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_strncasecmp'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_strstr'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_strcasestr'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_memmem'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: warning: Cannot export local symbol '__sanitizer_weak_hook_memcmp'
>> ../../third_party/binutils/Linux_x64/Release/bin/ld.gold: error: treating warnings as errors
>>
>>
>> On Tue, Jan 31, 2017 at 7:42 PM Justin Bogner via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: bogner
>>> Date: Tue Jan 31 21:31:09 2017
>>> New Revision: 293741
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=293741&view=rev
>>> Log:
>>> [sanitizer] Support SANITIZER_INTERCEPTOR_HOOKS on Darwin
>>>
>>> This basically already worked other than weak symbols needing
>>> definitions on darwin.
>>>
>>> Added:
>>>     compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/weak
>>> _hook_test.cc
>>>       - copied, changed from r293734, compiler-rt/trunk/test/sanitiz
>>> er_common/TestCases/Linux/weak_hook_test.cc
>>> Removed:
>>>     compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/weak
>>> _hook_test.cc
>>> Modified:
>>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_inte
>>> rceptors.inc
>>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_in
>>> terceptors.h
>>>
>>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_inte
>>> rceptors.inc
>>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sa
>>> nitizer_common/sanitizer_common_interceptors.inc?rev=293741&
>>> r1=293740&r2=293741&view=diff
>>> ============================================================
>>> ==================
>>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
>>> (original)
>>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc
>>> Tue Jan 31 21:31:09 2017
>>> @@ -44,15 +44,9 @@
>>>  #include <stdarg.h>
>>>
>>>  #if SANITIZER_INTERCEPTOR_HOOKS
>>> -#define CALL_WEAK_INTERCEPTOR_HOOK(f, ...)
>>>        \
>>> -  do {
>>>        \
>>> -    if (f)
>>>        \
>>> -      f(__VA_ARGS__);
>>>         \
>>> -  } while (false);
>>> -#define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...)
>>>         \
>>> -  extern "C" {
>>>        \
>>> -  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE void
>>> f(__VA_ARGS__);  \
>>> -  } // extern "C"
>>> +#define CALL_WEAK_INTERCEPTOR_HOOK(f, ...) f(__VA_ARGS__);
>>> +#define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...) \
>>> +  SANITIZER_INTERFACE_WEAK_DEF(void, f, __VA_ARGS__) {}
>>>  #else
>>>  #define DECLARE_WEAK_INTERCEPTOR_HOOK(f, ...)
>>>  #define CALL_WEAK_INTERCEPTOR_HOOK(f, ...)
>>>
>>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_in
>>> terceptors.h
>>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sa
>>> nitizer_common/sanitizer_platform_interceptors.h?rev=293741&
>>> r1=293740&r2=293741&view=diff
>>> ============================================================
>>> ==================
>>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
>>> (original)
>>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h
>>> Tue Jan 31 21:31:09 2017
>>> @@ -302,7 +302,7 @@
>>>  #define SANITIZER_INTERCEPT_CTERMID SI_LINUX || SI_MAC || SI_FREEBSD
>>>  #define SANITIZER_INTERCEPT_CTERMID_R SI_MAC || SI_FREEBSD
>>>
>>> -#define SANITIZER_INTERCEPTOR_HOOKS SI_LINUX
>>> +#define SANITIZER_INTERCEPTOR_HOOKS SI_LINUX || SI_MAC
>>>  #define SANITIZER_INTERCEPT_RECV_RECVFROM SI_NOT_WINDOWS
>>>  #define SANITIZER_INTERCEPT_SEND_SENDTO SI_NOT_WINDOWS
>>>  #define SANITIZER_INTERCEPT_EVENTFD_READ_WRITE SI_LINUX
>>>
>>> Removed: compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/weak
>>> _hook_test.cc
>>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/s
>>> anitizer_common/TestCases/Linux/weak_hook_test.cc?rev=293740&view=auto
>>> ============================================================
>>> ==================
>>> --- compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/weak_hook_test.cc
>>> (original)
>>> +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/weak_hook_test.cc
>>> (removed)
>>> @@ -1,82 +0,0 @@
>>> -// Test the weak hooks.
>>> -// RUN: %clangxx %s -o %t
>>> -// RUN: %run %t
>>> -
>>> -// Hooks are not implemented for lsan.
>>> -// XFAIL: lsan
>>> -
>>> -#include <string.h>
>>> -#include <assert.h>
>>> -
>>> -bool seen_memcmp, seen_strncmp, seen_strncasecmp, seen_strcmp,
>>> seen_strcasecmp,
>>> -    seen_strstr, seen_strcasestr, seen_memmem;
>>> -
>>> -extern "C" {
>>> -void __sanitizer_weak_hook_memcmp(void *called_pc, const void *s1,
>>> -                                  const void *s2, size_t n, int result)
>>> {
>>> -  seen_memcmp = true;
>>> -}
>>> -void __sanitizer_weak_hook_strncmp(void *called_pc, const char *s1,
>>> -                                   const char *s2, size_t n, int
>>> result) {
>>> -  seen_strncmp = true;
>>> -}
>>> -void __sanitizer_weak_hook_strncasecmp(void *called_pc, const char *s1,
>>> -                                       const char *s2, size_t n, int
>>> result){
>>> -  seen_strncasecmp = true;
>>> -}
>>> -void __sanitizer_weak_hook_strcmp(void *called_pc, const char *s1,
>>> -                                  const char *s2, int result){
>>> -  seen_strcmp = true;
>>> -}
>>> -void __sanitizer_weak_hook_strcasecmp(void *called_pc, const char *s1,
>>> -                                      const char *s2, int result){
>>> -  seen_strcasecmp = true;
>>> -}
>>> -void __sanitizer_weak_hook_strstr(void *called_pc, const char *s1,
>>> -                                  const char *s2, char *result){
>>> -  seen_strstr = true;
>>> -}
>>> -void __sanitizer_weak_hook_strcasestr(void *called_pc, const char *s1,
>>> -                                      const char *s2, char *result){
>>> -  seen_strcasestr = true;
>>> -}
>>> -void __sanitizer_weak_hook_memmem(void *called_pc, const void *s1,
>>> size_t len1,
>>> -                                  const void *s2, size_t len2, void
>>> *result){
>>> -  seen_memmem = true;
>>> -}
>>> -} // extern "C"
>>> -
>>> -char s1[] = "ABCDEF";
>>> -char s2[] = "CDE";
>>> -
>>> -static volatile int int_sink;
>>> -static volatile void *ptr_sink;
>>> -
>>> -int main() {
>>> -  assert(sizeof(s2) < sizeof(s1));
>>> -
>>> -  int_sink = memcmp(s1, s2, sizeof(s2));
>>> -  assert(seen_memcmp);
>>> -
>>> -  int_sink = strncmp(s1, s2, sizeof(s2));
>>> -  assert(seen_strncmp);
>>> -
>>> -  int_sink = strncasecmp(s1, s2, sizeof(s2));
>>> -  assert(seen_strncasecmp);
>>> -
>>> -  int_sink = strcmp(s1, s2);
>>> -  assert(seen_strcmp);
>>> -
>>> -  int_sink = strcasecmp(s1, s2);
>>> -  assert(seen_strcasecmp);
>>> -
>>> -  ptr_sink = strstr(s1, s2);
>>> -  assert(seen_strstr);
>>> -
>>> -  ptr_sink = strcasestr(s1, s2);
>>> -  assert(seen_strcasestr);
>>> -
>>> -  ptr_sink = memmem(s1, sizeof(s1), s2, sizeof(s2));
>>> -  assert(seen_memmem);
>>> -  return 0;
>>> -}
>>>
>>> Copied: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/weak_hook_test.cc
>>> (from r293734, compiler-rt/trunk/test/sanitiz
>>> er_common/TestCases/Linux/weak_hook_test.cc)
>>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/s
>>> anitizer_common/TestCases/Posix/weak_hook_test.cc?p2=compile
>>> r-rt/trunk/test/sanitizer_common/TestCases/Posix/weak_
>>> hook_test.cc&p1=compiler-rt/trunk/test/sanitizer_common/
>>> TestCases/Linux/weak_hook_test.cc&r1=293734&r2=293741&
>>> rev=293741&view=diff
>>> ============================================================
>>> ==================
>>>     (empty)
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>> --
>> Mike
>> Sent from phone
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170202/6310e88c/attachment.html>


More information about the llvm-commits mailing list