Re: [libcxxabi] r313215 - Reland "When built with ASan, __cxa_throw calls __asan_handle_no_return"

2017-09-14 Thread Kostya Serebryany via cfe-commits
The bot is unhappy:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/7880/steps/build%20libcxx%2Fasan/logs/stdio

1/6] Building CXX object
projects/libcxxabi/src/CMakeFiles/cxxabi_objects.dir/cxa_exception.cpp.o
FAILED: projects/libcxxabi/src/CMakeFiles/cxxabi_objects.dir/cxa_exception.cpp.o
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build0/bin/clang++
  -DHAVE___CXA_THREAD_ATEXIT_IMPL -D_DEBUG -D_GNU_SOURCE
-D_LIBCPP_DISABLE_EXTERN_TEMPLATE -D_LIBCXXABI_BUILDING_LIBRARY
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-Iprojects/libcxxabi/src
-I/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/projects/libcxxabi/src
-I/usr/include/libxml2 -Iinclude
-I/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include
-I/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/projects/libcxxabi/include
-I/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/projects/libcxx/include
-fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall
-W -Wno-unused-parameter -Wwrite-strings -Wcast-qual
-Wmissing-field-initializers -pedantic -Wno-long-long
-Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor
-Wstring-conversion -fno-omit-frame-pointer -gline-tables-only
-fsanitize=address -fsanitize-address-use-after-scope
-fcolor-diagnostics -ffunction-sections -fdata-sections  -O3  -fPIC
-UNDEBUG -nostdinc++ -Werror=return-type -W -Wall -Wchar-subscripts
-Wconversion -Wmismatched-tags -Wmissing-braces -Wnewline-eof
-Wunused-function -Wshadow -Wshorten-64-to-32 -Wsign-compare
-Wsign-conversion -Wstrict-aliasing=2 -Wstrict-overflow=4
-Wunused-parameter -Wunused-variable -Wwrite-strings -Wundef
-Wno-error -pedantic -fstrict-aliasing -funwind-tables -D_DEBUG
-UNDEBUG -std=c++11 -MD -MT
projects/libcxxabi/src/CMakeFiles/cxxabi_objects.dir/cxa_exception.cpp.o
-MF projects/libcxxabi/src/CMakeFiles/cxxabi_objects.dir/cxa_exception.cpp.o.d
-o projects/libcxxabi/src/CMakeFiles/cxxabi_objects.dir/cxa_exception.cpp.o
-c 
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/projects/libcxxabi/src/cxa_exception.cpp
/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/projects/libcxxabi/src/cxa_exception.cpp:227:5:
error: use of undeclared identifier '__asan_handle_no_return'
__asan_handle_no_return();
^


On Wed, Sep 13, 2017 at 4:35 PM, Petr Hosek via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: phosek
> Date: Wed Sep 13 16:35:07 2017
> New Revision: 313215
>
> URL: http://llvm.org/viewvc/llvm-project?rev=313215=rev
> Log:
> Reland "When built with ASan, __cxa_throw calls __asan_handle_no_return"
>
> The ASan runtime on many systems intercepts cxa_throw just so it
> can call asan_handle_no_return first. Some newer systems such as
> Fuchsia don't use interceptors on standard library functions at all,
> but instead use sanitizer-instrumented versions of the standard
> libraries. When libc++abi is built with ASan, cxa_throw can just
> call asan_handle_no_return itself so no interceptor is required.
>
> Patch by Roland McGrath
>
> Differential Revision: https://reviews.llvm.org/D37229
>
> Modified:
> libcxxabi/trunk/src/cxa_exception.cpp
>
> Modified: libcxxabi/trunk/src/cxa_exception.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/
> cxa_exception.cpp?rev=313215=313214=313215=diff
> 
> ==
> --- libcxxabi/trunk/src/cxa_exception.cpp (original)
> +++ libcxxabi/trunk/src/cxa_exception.cpp Wed Sep 13 16:35:07 2017
> @@ -19,6 +19,10 @@
>  #include "cxa_handlers.hpp"
>  #include "fallback_malloc.h"
>
> +#if __has_feature(address_sanitizer)
> +#include 
> +#endif
> +
>  // +---+-+-
> --+
>  // | __cxa_exception   | _Unwind_Exception CLNGC++\0 | thrown
> object |
>  // +---+-+-
> --+
> @@ -217,6 +221,12 @@ __cxa_throw(void *thrown_object, std::ty
>  globals->uncaughtExceptions += 1;   // Not atomically, since globals
> are thread-local
>
>  exception_header->unwindHeader.exception_cleanup =
> exception_cleanup_func;
> +
> +#if __has_feature(address_sanitizer)
> +// Inform the ASan runtime that now might be a good time to clean
> stuff up.
> +__asan_handle_no_return();
> +#endif
> +
>  #ifdef __USING_SJLJ_EXCEPTIONS__
>  _Unwind_SjLj_RaiseException(_header->unwindHeader);
>  #else
>
>
> ___
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[libcxxabi] r313215 - Reland "When built with ASan, __cxa_throw calls __asan_handle_no_return"

2017-09-13 Thread Petr Hosek via cfe-commits
Author: phosek
Date: Wed Sep 13 16:35:07 2017
New Revision: 313215

URL: http://llvm.org/viewvc/llvm-project?rev=313215=rev
Log:
Reland "When built with ASan, __cxa_throw calls __asan_handle_no_return"

The ASan runtime on many systems intercepts cxa_throw just so it
can call asan_handle_no_return first. Some newer systems such as
Fuchsia don't use interceptors on standard library functions at all,
but instead use sanitizer-instrumented versions of the standard
libraries. When libc++abi is built with ASan, cxa_throw can just
call asan_handle_no_return itself so no interceptor is required.

Patch by Roland McGrath

Differential Revision: https://reviews.llvm.org/D37229

Modified:
libcxxabi/trunk/src/cxa_exception.cpp

Modified: libcxxabi/trunk/src/cxa_exception.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/cxa_exception.cpp?rev=313215=313214=313215=diff
==
--- libcxxabi/trunk/src/cxa_exception.cpp (original)
+++ libcxxabi/trunk/src/cxa_exception.cpp Wed Sep 13 16:35:07 2017
@@ -19,6 +19,10 @@
 #include "cxa_handlers.hpp"
 #include "fallback_malloc.h"
 
+#if __has_feature(address_sanitizer)
+#include 
+#endif
+
 // +---+-+---+
 // | __cxa_exception   | _Unwind_Exception CLNGC++\0 | thrown object |
 // +---+-+---+
@@ -217,6 +221,12 @@ __cxa_throw(void *thrown_object, std::ty
 globals->uncaughtExceptions += 1;   // Not atomically, since globals are 
thread-local
 
 exception_header->unwindHeader.exception_cleanup = exception_cleanup_func;
+
+#if __has_feature(address_sanitizer)
+// Inform the ASan runtime that now might be a good time to clean stuff up.
+__asan_handle_no_return();
+#endif
+
 #ifdef __USING_SJLJ_EXCEPTIONS__
 _Unwind_SjLj_RaiseException(_header->unwindHeader);
 #else


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits