diff options
| author | Bill Wendling <isanbard@gmail.com> | 2012-04-13 01:06:27 +0000 |
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2012-04-13 01:06:27 +0000 |
| commit | aab3c0cb077f741af3447cc030c28bedd23b491c (patch) | |
| tree | e9d7b18884f4fc3e1fa36f5b1c919d4b972f3414 | |
| parent | 511568dd1f9863de1633b0db8bb105f783e8ac50 (diff) | |
| download | external_llvm-aab3c0cb077f741af3447cc030c28bedd23b491c.zip external_llvm-aab3c0cb077f741af3447cc030c28bedd23b491c.tar.gz external_llvm-aab3c0cb077f741af3447cc030c28bedd23b491c.tar.bz2 | |
Code-gen may inject code into the IR before it emits the ASM. The linker
obviously cannot know that this code is present, let alone used. So prevent the
internalize pass from internalizing those global values which code-gen may
insert.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154645 91177308-0d34-0410-b5e6-96231b3b80d8
| -rw-r--r-- | lib/Transforms/IPO/Internalize.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp index af5b9bd..cd29e7a 100644 --- a/lib/Transforms/IPO/Internalize.cpp +++ b/lib/Transforms/IPO/Internalize.cpp @@ -122,6 +122,9 @@ bool InternalizePass::runOnModule(Module &M) { bool Changed = false; + // Never internalize functions which code-gen might insert. + ExternalNames.insert("__stack_chk_fail"); + // Mark all functions not in the api as internal. // FIXME: maybe use private linkage? for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) @@ -150,6 +153,9 @@ bool InternalizePass::runOnModule(Module &M) { ExternalNames.insert("llvm.global_dtors"); ExternalNames.insert("llvm.global.annotations"); + // Never internalize symbols code-gen inserts. + ExternalNames.insert("__stack_chk_guard"); + // Mark all global variables with initializers that are not in the api as // internal as well. // FIXME: maybe use private linkage? |
