[PATCH] D64085: [GWP-ASan] [Scudo] Add GWP-ASan backtrace for alloc/free to Scudo.

Mitch Phillips via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 2 09:55:30 PDT 2019


hctim created this revision.
hctim added a reviewer: cryptoad.
Herald added subscribers: llvm-commits, Sanitizers, mgorny, kubamracek.
Herald added projects: Sanitizers, LLVM.
hctim updated this revision to Diff 207584.
hctim added a comment.

- Readded newline from merge conflict cleanup.


Adds allocation and deallocation stack trace support to Scudo. The
default provided backtrace library for GWP-ASan is supplied by the libc
unwinder, and is suitable for production variants of Scudo. If Scudo in future
has its own unwinder, it may choose to use its own over the generic unwinder
instead.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D64085

Files:
  compiler-rt/lib/scudo/CMakeLists.txt
  compiler-rt/lib/scudo/scudo_allocator.cpp


Index: compiler-rt/lib/scudo/scudo_allocator.cpp
===================================================================
--- compiler-rt/lib/scudo/scudo_allocator.cpp
+++ compiler-rt/lib/scudo/scudo_allocator.cpp
@@ -27,6 +27,7 @@
 
 #ifdef GWP_ASAN_HOOKS
 # include "gwp_asan/guarded_pool_allocator.h"
+# include "gwp_asan/optional/backtrace.h"
 # include "gwp_asan/optional/options_parser.h"
 #endif // GWP_ASAN_HOOKS
 
@@ -671,7 +672,10 @@
   Instance.init();
 #ifdef GWP_ASAN_HOOKS
   gwp_asan::options::initOptions();
-  GuardedAlloc.init(gwp_asan::options::getOptions());
+  gwp_asan::options::Options &Opts = gwp_asan::options::getOptions();
+  Opts.Backtrace = gwp_asan::options::getBacktraceFunction();
+  Opts.PrintBacktrace = gwp_asan::options::getPrintBacktraceFunction();
+  GuardedAlloc.init(Opts);
 #endif // GWP_ASAN_HOOKS
 }
 
Index: compiler-rt/lib/scudo/CMakeLists.txt
===================================================================
--- compiler-rt/lib/scudo/CMakeLists.txt
+++ compiler-rt/lib/scudo/CMakeLists.txt
@@ -12,6 +12,10 @@
 append_list_if(COMPILER_RT_HAS_LIBRT rt SCUDO_MINIMAL_DYNAMIC_LIBS)
 append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread SCUDO_MINIMAL_DYNAMIC_LIBS)
 append_list_if(COMPILER_RT_HAS_LIBLOG log SCUDO_MINIMAL_DYNAMIC_LIBS)
+append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fno-omit-frame-pointer
+               SCUDO_CFLAGS)
+append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG
+               -mno-omit-leaf-frame-pointer SCUDO_CFLAGS)
 
 set(SCUDO_DYNAMIC_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})
 # Use gc-sections by default to avoid unused code being pulled in.
@@ -35,7 +39,8 @@
   # Currently, Scudo uses the GwpAsan flag parser. This backs onto the flag
   # parsing mechanism of sanitizer_common. Once Scudo has its own flag parsing,
   # and parses GwpAsan options, you can remove this dependency.
-  list(APPEND SCUDO_MINIMAL_OBJECT_LIBS RTGwpAsan RTGwpAsanOptionsParser)
+  list(APPEND SCUDO_MINIMAL_OBJECT_LIBS RTGwpAsan RTGwpAsanOptionsParser
+                                        RTGwpAsanBacktraceLibc)
   list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS)
 endif()
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64085.207584.patch
Type: text/x-patch
Size: 2141 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190702/3ff5a6a5/attachment-0001.bin>


More information about the llvm-commits mailing list