Make compiler class reentrant within a single process
Change-Id: I422947bbbf8667234794737d6632449ed4e5f193
diff --git a/bcc.cpp b/bcc.cpp
index 08328dc..89e33ea 100644
--- a/bcc.cpp
+++ b/bcc.cpp
@@ -2532,6 +2532,7 @@
public:
Compiler() : mpSymbolLookupFn(NULL), mpSymbolLookupContext(NULL), mModule(NULL) {
+ llvm::remove_fatal_error_handler();
llvm::install_fatal_error_handler(LLVMErrorHandler, &mError);
return;
}
@@ -2831,7 +2832,7 @@
~Compiler() {
delete mModule;
- llvm::llvm_shutdown();
+ //llvm::llvm_shutdown();
return;
}
}; /* End of Class Compiler */
diff --git a/tests/main.cpp b/tests/main.cpp
index 1007b94..e73a8d3 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -23,12 +23,12 @@
typedef int (*MainPtr)(int, char**);
// This is a separate function so it can easily be set by breakpoint in gdb.
-static int run(MainPtr mainFunc, int argc, char** argv)
+static int run(MainPtr mainFunc, int argc, char** argv)
{
return mainFunc(argc, argv);
}
-static BCCvoid* symbolLookup(BCCvoid* pContext, const BCCchar* name)
+static BCCvoid* symbolLookup(BCCvoid* pContext, const BCCchar* name)
{
return (BCCvoid*) dlsym(RTLD_DEFAULT, name);
}
@@ -85,7 +85,7 @@
}
}
delete[] labels;
- }
+ }
return 1;
}
@@ -158,7 +158,7 @@
switch(c) {
case 'R':
- runResults = true;
+ runResults = true;
break;
case 'S':
@@ -211,7 +211,7 @@
rewind(in);
BCCchar* bitcode = new BCCchar[codeSize + 1];
size_t bytesRead = fread(bitcode, 1, codeSize, in);
- if (bytesRead != codeSize)
+ if (bytesRead != codeSize)
fprintf(stderr, "Could not read all of file %s\n", inFile);
BCCscript* script = bccCreateScript();
@@ -232,17 +232,17 @@
if (result != 0) {
BCCsizei bufferLength;
bccGetScriptInfoLog(script, 0, &bufferLength, NULL);
- char* buf = (char*) malloc(bufferLength + 1);
+ char* buf = (char*) malloc(bufferLength + 1);
if (buf != NULL) {
bccGetScriptInfoLog(script, bufferLength + 1, NULL, buf);
fprintf(stderr, "%s", buf);
free(buf);
} else {
fprintf(stderr, "Out of memory.\n");
- }
+ }
bccDeleteScript(script);
return 0;
- }
+ }
{
BCCsizei numPragmaStrings;
@@ -250,7 +250,7 @@
if (numPragmaStrings) {
char** strings = new char*[numPragmaStrings];
bccGetPragmas(script, NULL, numPragmaStrings, strings);
- for(BCCsizei i = 0; i < numPragmaStrings; i += 2)
+ for(BCCsizei i = 0; i < numPragmaStrings; i += 2)
fprintf(stderr, "#pragma %s(%s)\n", strings[i], strings[i+1]);
delete[] strings;
}
@@ -262,11 +262,11 @@
static int runMain(BCCscript* script, int argc, char** argv) {
MainPtr mainPointer = 0;
- bccGetScriptLabel(script, "main", (BCCvoid**) &mainPointer);
+ bccGetScriptLabel(script, "root", (BCCvoid**) &mainPointer);
int result = bccGetError(script);
if (result != BCC_NO_ERROR) {
- fprintf(stderr, "Could not find main: %d\n", result);
+ fprintf(stderr, "Could not find root: %d\n", result);
} else {
fprintf(stderr, "Executing compiled code:\n");
int codeArgc = argc - optind;
@@ -274,13 +274,13 @@
//codeArgv[0] = (char*) (inFile ? inFile : "stdin");
result = run(mainPointer, codeArgc, codeArgv);
fprintf(stderr, "result: %d\n", result);
- }
+ }
return 1;
}
-int main(int argc, char** argv)
+int main(int argc, char** argv)
{
int result = 0;
BCCscript* script;
@@ -288,7 +288,7 @@
if(!parseOption(argc, argv)) {
result = 1;
fprintf(stderr, "failed to parse option\n");
- goto exit;
+ goto exit;
}
if((script = loadScript()) == NULL) {