Have separate prepareSharedObject and prepareObject.
Also, provide option for prepareObject to specify relocation model.
Change-Id: Ia9f51f1a463165d069dc918654e0f55189e7a274
diff --git a/lib/ExecutionEngine/bcc.cpp b/lib/ExecutionEngine/bcc.cpp
index 60cefc4..075d6c1 100644
--- a/lib/ExecutionEngine/bcc.cpp
+++ b/lib/ExecutionEngine/bcc.cpp
@@ -29,6 +29,7 @@
#include <string>
#include <utils/StopWatch.h>
+#include <llvm/Support/CodeGen.h>
using namespace bcc;
@@ -123,11 +124,26 @@
}
-extern "C" int bccPrepareSharedObject(BCCScriptRef script,
- char const *cacheDir,
- char const *cacheName,
- unsigned long flags) {
- return unwrap(script)->prepareSharedObject(cacheDir, cacheName, flags);
+extern "C" int bccPrepareObject(BCCScriptRef script,
+ char const *cacheDir,
+ char const *cacheName,
+ bccRelocModelEnum RelocModel,
+ unsigned long flags) {
+ BCC_FUNC_LOGGER();
+ llvm::Reloc::Model RM;
+
+ switch (RelocModel) {
+ case bccRelocDefault: RM = llvm::Reloc::Default; break;
+ case bccRelocStatic: RM = llvm::Reloc::Static; break;
+ case bccRelocPIC: RM = llvm::Reloc::PIC_; break;
+ case bccRelocDynamicNoPIC: RM = llvm::Reloc::DynamicNoPIC; break;
+ default: {
+ ALOGE("Unrecognized relocation model for bccPrepareObject!");
+ return BCC_INVALID_VALUE;
+ }
+ }
+
+ return unwrap(script)->prepareObject(cacheDir, cacheName, RM, flags);
}
@@ -202,4 +218,3 @@
#endif
}
}
-