[PATCH] [compiler-rt] Remove -fomit-frame-pointer from sanitizers CFLAGS
Kuba Brecka
kuba.brecka at gmail.com
Wed Jul 9 15:57:36 PDT 2014
Patch that enables frame pointer only for the selected GCD functions (block-based ones). In all the other, frame pointer is already enabled implicitly by using GET_STACK_TRACE_THREAD.
In the macro I didn't use GET_CALLER_PC as suggested, because it seems this one doesn't enable the frame pointer. Instead I used GET_CURRENT_FRAME, which does the trick.
http://reviews.llvm.org/D4305
Files:
lib/asan/asan_mac.cc
lib/sanitizer_common/sanitizer_internal_defs.h
Index: lib/asan/asan_mac.cc
===================================================================
--- lib/asan/asan_mac.cc
+++ lib/asan/asan_mac.cc
@@ -376,30 +376,35 @@
INTERCEPTOR(void, dispatch_async,
dispatch_queue_t dq, void(^work)(void)) {
+ ENABLE_FRAME_POINTERS;
GET_ASAN_BLOCK(work);
REAL(dispatch_async)(dq, asan_block);
}
INTERCEPTOR(void, dispatch_group_async,
dispatch_group_t dg, dispatch_queue_t dq, void(^work)(void)) {
+ ENABLE_FRAME_POINTERS;
GET_ASAN_BLOCK(work);
REAL(dispatch_group_async)(dg, dq, asan_block);
}
INTERCEPTOR(void, dispatch_after,
dispatch_time_t when, dispatch_queue_t queue, void(^work)(void)) {
+ ENABLE_FRAME_POINTERS;
GET_ASAN_BLOCK(work);
REAL(dispatch_after)(when, queue, asan_block);
}
INTERCEPTOR(void, dispatch_source_set_cancel_handler,
dispatch_source_t ds, void(^work)(void)) {
+ ENABLE_FRAME_POINTERS;
GET_ASAN_BLOCK(work);
REAL(dispatch_source_set_cancel_handler)(ds, asan_block);
}
INTERCEPTOR(void, dispatch_source_set_event_handler,
dispatch_source_t ds, void(^work)(void)) {
+ ENABLE_FRAME_POINTERS;
GET_ASAN_BLOCK(work);
REAL(dispatch_source_set_event_handler)(ds, asan_block);
}
Index: lib/sanitizer_common/sanitizer_internal_defs.h
===================================================================
--- lib/sanitizer_common/sanitizer_internal_defs.h
+++ lib/sanitizer_common/sanitizer_internal_defs.h
@@ -308,6 +308,13 @@
# define GET_CURRENT_FRAME() (uptr)0xDEADBEEF
#endif
+// forces the compiler to generate a frame pointer in the calling function
+#define ENABLE_FRAME_POINTERS \
+ do { \
+ volatile uptr enable_fp; \
+ enable_fp = GET_CURRENT_FRAME(); \
+ } while (0)
+
#define HANDLE_EINTR(res, f) \
{ \
int rverrno; \
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4305.11228.patch
Type: text/x-patch
Size: 2139 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140709/a9fd8fae/attachment.bin>
More information about the llvm-commits
mailing list