diff options
-rw-r--r-- | lib/Transforms/IPO/Internalize.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp index 85a7abd..eeee63b 100644 --- a/lib/Transforms/IPO/Internalize.cpp +++ b/lib/Transforms/IPO/Internalize.cpp @@ -41,12 +41,16 @@ namespace { class InternalizePass : public ModulePass { std::set<std::string> ExternalNames; + bool DontInternalize; public: - InternalizePass() { + InternalizePass(bool InternalizeEverything = true) : DontInternalize(false){ if (!APIFile.empty()) // If a filename is specified, use it LoadFile(APIFile.c_str()); - else // Else, if a list is specified, use it. + else if (!APIList.empty()) // Else, if a list is specified, use it. ExternalNames.insert(APIList.begin(), APIList.end()); + else if (!InternalizeEverything) + // Finally, if we're allowed to, internalize all but main. + DontInternalize = true; } void LoadFile(const char *Filename) { @@ -66,6 +70,8 @@ namespace { } virtual bool runOnModule(Module &M) { + if (DontInternalize) return false; + // If no list or file of symbols was specified, check to see if there is a // "main" symbol defined in the module. If so, use it, otherwise do not // internalize the module, it must be a library or something. @@ -117,6 +123,6 @@ namespace { RegisterOpt<InternalizePass> X("internalize", "Internalize Global Symbols"); } // end anonymous namespace -ModulePass *llvm::createInternalizePass() { - return new InternalizePass(); +ModulePass *llvm::createInternalizePass(bool InternalizeEverything) { + return new InternalizePass(InternalizeEverything); } |