[PATCH] Add NATIVE_EXEC macro for building client for running in DynamoRIO hybrid mode only

Qin Zhao zhaoqin at google.com
Fri Oct 25 07:39:11 PDT 2013


  - rename NATIVE_EXEC to MSANDR_NATIVE_EXEC.
  - set MSANDR_NATIVE_EXEC default to be OFF

Hi eugenis,

http://llvm-reviews.chandlerc.com/D1942

CHANGE SINCE LAST DIFF
  http://llvm-reviews.chandlerc.com/D1942?vs=4932&id=5155#toc

Files:
  msandr.cc
  CMakeLists.txt

Index: msandr.cc
===================================================================
--- msandr.cc
+++ msandr.cc
@@ -62,6 +62,12 @@
 
 namespace {
 
+std::string g_app_path;
+
+int msan_retval_tls_offset;
+int msan_param_tls_offset;
+
+#ifndef MSANDR_NATIVE_EXEC
 class ModuleData {
 public:
   ModuleData();
@@ -78,11 +84,6 @@
   bool executed_;
 };
 
-std::string g_app_path;
-
-int msan_retval_tls_offset;
-int msan_param_tls_offset;
-
 // A vector of loaded modules sorted by module bounds.  We lookup the current PC
 // in here from the bb event.  This is better than an rb tree because the lookup
 // is faster and the bb event occurs far more than the module load event.
@@ -99,6 +100,7 @@
       // We'll check the black/white lists later and adjust this.
       should_instrument_(true), executed_(false) {
 }
+#endif /* !MSANDR_NATIVE_EXEC */
 
 int(*__msan_get_retval_tls_offset)();
 int(*__msan_get_param_tls_offset)();
@@ -319,6 +321,7 @@
   // a prefix.
 }
 
+#ifndef MSANDR_NATIVE_EXEC
 // For use with binary search.  Modules shouldn't overlap, so we shouldn't have
 // to look at end_.  If that can happen, we won't support such an application.
 bool ModuleDataCompareStart(const ModuleData &left, const ModuleData &right) {
@@ -373,22 +376,26 @@
   }
   return true;
 }
+#endif /* !NATIVE_CLIENT */
 
 // TODO(rnk): Make sure we instrument after __msan_init.
 dr_emit_flags_t
 event_basic_block_app2app(void *drcontext, void *tag, instrlist_t *bb,
                           bool for_trace, bool translating) {
+#ifndef MSANDR_NATIVE_EXEC
   app_pc pc = dr_fragment_app_pc(tag);
-
   if (ShouldInstrumentPc(pc, NULL))
     CHECK(drutil_expand_rep_string(drcontext, bb));
-
+#else  /* MSANDR_NATIVE_EXEC */
+  CHECK(drutil_expand_rep_string(drcontext, bb));
+#endif /* MSANDR_NATIVE_EXEC */
   return DR_EMIT_PERSISTABLE;
 }
 
 dr_emit_flags_t event_basic_block(void *drcontext, void *tag, instrlist_t *bb,
                                   bool for_trace, bool translating) {
   app_pc pc = dr_fragment_app_pc(tag);
+#ifndef MSANDR_NATIVE_EXEC
   ModuleData *mod_data;
 
   if (!ShouldInstrumentPc(pc, &mod_data))
@@ -411,6 +418,8 @@
           pc - mod_data->start_);
     }
   }
+#endif /* !MSANDR_NATIVE_EXEC */
+
   if (VERBOSITY > 1) {
     instrlist_disassemble(drcontext, pc, bb, STDOUT);
     instr_t *instr;
@@ -474,6 +483,7 @@
   return DR_EMIT_PERSISTABLE;
 }
 
+#ifndef MSANDR_NATIVE_EXEC
 void event_module_load(void *drcontext, const module_data_t *info,
                        bool loaded) {
   // Insert the module into the list while maintaining the ordering.
@@ -507,6 +517,7 @@
         it->end_ == mod_data.end_ && it->path_ == mod_data.path_);
   g_module_list.erase(it);
 }
+#endif /* !MSANDR_NATIVE_EXEC */
 
 void event_exit() {
   // Clean up so DR doesn't tell us we're leaking memory.
@@ -551,6 +562,7 @@
     drsys_syscall_t *syscall = (drsys_syscall_t *)user_data;
     const char *name;
     res = drsys_syscall_name(syscall, &name);
+    CHECK(res == DRMF_SUCCESS);
     dr_printf("drsyscall: syscall '%s' arg %d wrote range [%p, %p)\n",
               name, arg->ordinal, arg->start_addr,
               (char *)arg->start_addr + sz);
@@ -719,8 +731,10 @@
 
   drmgr_register_bb_app2app_event(event_basic_block_app2app, &priority);
   drmgr_register_bb_instru2instru_event(event_basic_block, &priority);
+#ifndef MSANDR_NATIVE_EXEC
   drmgr_register_module_load_event(event_module_load);
   drmgr_register_module_unload_event(event_module_unload);
+#endif /* MSANDR_NATIVE_EXEC */
   if (VERBOSITY > 0)
     dr_printf("==MSANDR== Starting!\n");
 }
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -4,6 +4,11 @@
   find_package(DynamoRIO)
   find_package(DrMemoryFramework)
 
+  option(MSANDR_NATIVE_EXEC "Building msandr client for running in DynamoRIO hybrid mode, which allows some module running natively" OFF)
+  if (MSANDR_NATIVE_EXEC)
+    add_definitions(-DMSANDR_NATIVE_EXEC)
+  endif (MSANDR_NATIVE_EXEC)
+
   set(arch "x86_64")
   add_library(clang_rt.msandr-${arch} SHARED msandr.cc)
   configure_DynamoRIO_client(clang_rt.msandr-${arch})
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1942.2.patch
Type: text/x-patch
Size: 4184 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131025/a13f545b/attachment.bin>


More information about the llvm-commits mailing list