1. Remove PROT_EXEC for global variables, per srhines' suggestion.
2. For code memory, make it writable only when bcc is INSIDE the code
   emission of a given function.

Change-Id: I8de1e9841d540511adef3965c3f7ecb9f2fc29c4
diff --git a/bcc.cpp b/bcc.cpp
index c9e649f..1da5997 100644
--- a/bcc.cpp
+++ b/bcc.cpp
@@ -514,7 +514,7 @@
       reset();
       std::string ErrMsg;
 
-      mpCodeMem = ::mmap(NULL, MaxCodeSize, PROT_READ | PROT_WRITE | PROT_EXEC,
+      mpCodeMem = ::mmap(NULL, MaxCodeSize, PROT_READ | PROT_EXEC,
                          MAP_PRIVATE | MAP_ANON, -1, 0);
       if (mpCodeMem == MAP_FAILED)
         llvm::report_fatal_error(
@@ -522,7 +522,7 @@
                                 );
 
       mpGVMem = ::mmap(mpCodeMem, MaxGlobalVarSize,
-                       PROT_READ | PROT_WRITE | PROT_EXEC,
+                       PROT_READ | PROT_WRITE,
                        MAP_PRIVATE | MAP_ANON, -1, 0);
       if (mpGVMem == MAP_FAILED)
         llvm::report_fatal_error(