[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