diff options
author | Derek Bruening <bruening@google.com> | 2016-05-24 22:22:20 +0000 |
---|---|---|
committer | Derek Bruening <bruening@google.com> | 2016-05-24 22:22:20 +0000 |
commit | aa4e6eea9cbe85813515530f1b15b7f6b9474be1 (patch) | |
tree | 40b0cd5b31966d84cfcc833545bef5feb71a91c3 /lib/esan | |
parent | a0f78dd9c1b9699258bbd392412fad201d3865b0 (diff) |
[esan] Add compilation unit init/exit routines.
Summary:
Adds processCompilationUnitInit and processCompilationUnitExit
for compilation unit init/exit.
Adds a tool-specific argument passed to esan_init.
Adds the dtor and esan_exit called from the dtor.
A test will be added separately (adding it here results in failure until
the corresponding compilation patch is in place).
Reviewers: aizatsky
Subscribers: kubabrecka, bruening, kcc, vitalybuka, eugenis, llvm-commits
Differential Revision: http://reviews.llvm.org/D20486
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@270624 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/esan')
-rw-r--r-- | lib/esan/esan.cpp | 10 | ||||
-rw-r--r-- | lib/esan/esan.h | 4 | ||||
-rw-r--r-- | lib/esan/esan.syms.extra | 1 | ||||
-rw-r--r-- | lib/esan/esan_interface.cpp | 8 | ||||
-rw-r--r-- | lib/esan/esan_interface_internal.h | 3 |
5 files changed, 24 insertions, 2 deletions
diff --git a/lib/esan/esan.cpp b/lib/esan/esan.cpp index 1499895eb..746575f66 100644 --- a/lib/esan/esan.cpp +++ b/lib/esan/esan.cpp @@ -179,4 +179,14 @@ int finalizeLibrary() { return 0; } +void processCompilationUnitInit(void *Ptr) { + VPrintf(2, "in esan::%s\n", __FUNCTION__); +} + +// This is called when the containing module is unloaded. +// For the main executable module, this is called after finalizeLibrary. +void processCompilationUnitExit(void *Ptr) { + VPrintf(2, "in esan::%s\n", __FUNCTION__); +} + } // namespace __esan diff --git a/lib/esan/esan.h b/lib/esan/esan.h index c231d3c21..2dc8d1991 100644 --- a/lib/esan/esan.h +++ b/lib/esan/esan.h @@ -37,6 +37,10 @@ extern ToolType WhichTool; void initializeLibrary(ToolType Tool); int finalizeLibrary(); +// Esan creates the variable per tool per compilation unit at compile time +// and passes its pointer Ptr to the runtime library. +void processCompilationUnitInit(void *Ptr); +void processCompilationUnitExit(void *Ptr); void processRangeAccess(uptr PC, uptr Addr, int Size, bool IsWrite); void initializeInterceptors(); diff --git a/lib/esan/esan.syms.extra b/lib/esan/esan.syms.extra index bef023d5f..d6397d4c3 100644 --- a/lib/esan/esan.syms.extra +++ b/lib/esan/esan.syms.extra @@ -1,3 +1,4 @@ __esan_init +__esan_exit __esan_aligned* __esan_unaligned* diff --git a/lib/esan/esan_interface.cpp b/lib/esan/esan_interface.cpp index f8a562e55..5b10f7f2e 100644 --- a/lib/esan/esan_interface.cpp +++ b/lib/esan/esan_interface.cpp @@ -17,8 +17,14 @@ using namespace __esan; // NOLINT -void __esan_init(ToolType Tool) { +void __esan_init(ToolType Tool, void *Ptr) { + WhichTool = Tool; initializeLibrary(Tool); + processCompilationUnitInit(Ptr); +} + +void __esan_exit(void *Ptr) { + processCompilationUnitExit(Ptr); } void __esan_aligned_load1(void *Addr) { diff --git a/lib/esan/esan_interface_internal.h b/lib/esan/esan_interface_internal.h index a8b9e0887..577c7e3cf 100644 --- a/lib/esan/esan_interface_internal.h +++ b/lib/esan/esan_interface_internal.h @@ -32,7 +32,8 @@ typedef enum Type : u32 { // This function should be called at the very beginning of the process, // before any instrumented code is executed and before any call to malloc. -SANITIZER_INTERFACE_ATTRIBUTE void __esan_init(ToolType Tool); +SANITIZER_INTERFACE_ATTRIBUTE void __esan_init(ToolType Tool, void *Ptr); +SANITIZER_INTERFACE_ATTRIBUTE void __esan_exit(void *Ptr); // The instrumentation module will insert a call to one of these routines prior // to each load and store instruction for which we do not have "fastpath" |