[PATCH] D20486: [esan] Add compilation unit init/exit routines.
Qin Zhao via llvm-commits
llvm-commits at lists.llvm.org
Tue May 24 14:52:07 PDT 2016
zhaoqin updated this revision to Diff 58325.
zhaoqin added a comment.
Remove struct-simple.cpp to avoid test bot failure.
The correct CL landing order:
http://reviews.llvm.org/D20486: implement __esan_exit
http://reviews.llvm.org/D20488: add calls to __esan_exit
Add test struct-simple.cpp: check printout from __esan_exit.
http://reviews.llvm.org/D20486
Files:
lib/esan/esan.cpp
lib/esan/esan.h
lib/esan/esan.syms.extra
lib/esan/esan_interface.cpp
lib/esan/esan_interface_internal.h
Index: lib/esan/esan_interface_internal.h
===================================================================
--- lib/esan/esan_interface_internal.h
+++ lib/esan/esan_interface_internal.h
@@ -32,7 +32,8 @@
// 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"
Index: lib/esan/esan_interface.cpp
===================================================================
--- lib/esan/esan_interface.cpp
+++ 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) {
Index: lib/esan/esan.syms.extra
===================================================================
--- lib/esan/esan.syms.extra
+++ lib/esan/esan.syms.extra
@@ -1,3 +1,4 @@
__esan_init
+__esan_exit
__esan_aligned*
__esan_unaligned*
Index: lib/esan/esan.h
===================================================================
--- lib/esan/esan.h
+++ lib/esan/esan.h
@@ -37,6 +37,10 @@
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();
Index: lib/esan/esan.cpp
===================================================================
--- lib/esan/esan.cpp
+++ lib/esan/esan.cpp
@@ -177,4 +177,14 @@
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20486.58325.patch
Type: text/x-patch
Size: 2526 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160524/f353364f/attachment.bin>
More information about the llvm-commits
mailing list