mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Obtain the exit function before execution just in case the module
disappears before we get to calling the exit function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34953 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
38f6a15df6
commit
124294bc59
@ -124,6 +124,10 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// If the program doesn't explicitly call exit, we will need the Exit
|
||||
// function later on to make an explicit call, so get the function now.
|
||||
Constant *Exit = Mod->getOrInsertFunction("exit", Type::VoidTy,
|
||||
Type::Int32Ty, NULL);
|
||||
// Run static constructors.
|
||||
EE->runStaticConstructorsDestructors(false);
|
||||
|
||||
@ -133,14 +137,12 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
// Run static destructors.
|
||||
EE->runStaticConstructorsDestructors(true);
|
||||
|
||||
// If the program didn't explicitly call exit, call exit now, for the
|
||||
// program. This ensures that any atexit handlers get called correctly.
|
||||
Constant *Exit = Mod->getOrInsertFunction("exit", Type::VoidTy,
|
||||
Type::Int32Ty, NULL);
|
||||
// If the program didn't call exit explicitly, we should call it now.
|
||||
// This ensures that any atexit handlers get called correctly.
|
||||
if (Function *ExitF = dyn_cast<Function>(Exit)) {
|
||||
std::vector<GenericValue> Args;
|
||||
GenericValue ResultGV;
|
||||
ResultGV.Int32Val = Result;
|
||||
ResultGV.IntVal = APInt(32, Result);
|
||||
Args.push_back(ResultGV);
|
||||
EE->runFunction(ExitF, Args);
|
||||
std::cerr << "ERROR: exit(" << Result << ") returned!\n";
|
||||
|
Loading…
Reference in New Issue
Block a user