diff options
author | Eli Bendersky <eliben@chromium.org> | 2013-07-01 12:32:35 -0700 |
---|---|---|
committer | Eli Bendersky <eliben@chromium.org> | 2013-07-01 12:32:35 -0700 |
commit | 777f0e911fc0cbd0b07f9b3ae395b5361d19b270 (patch) | |
tree | f11ab12ed8817c9fe044b286a5b7e6fe0541dd7f | |
parent | ec8e5bad316e85ea87716793b499dd6f204d78c0 (diff) |
Internalize all symbols except _start.
BUG=https://code.google.com/p/nativeclient/issues/detail?id=3532
R=mseaborn@chromium.org
Review URL: https://codereview.chromium.org/18348008
-rw-r--r-- | lib/Transforms/NaCl/PNaClABISimplify.cpp | 5 | ||||
-rw-r--r-- | test/Transforms/NaCl/pnacl-abi-internalize-symbols.ll | 20 |
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/Transforms/NaCl/PNaClABISimplify.cpp b/lib/Transforms/NaCl/PNaClABISimplify.cpp index 81fce8ce13..f8f78135a8 100644 --- a/lib/Transforms/NaCl/PNaClABISimplify.cpp +++ b/lib/Transforms/NaCl/PNaClABISimplify.cpp @@ -22,6 +22,11 @@ using namespace llvm; void llvm::PNaClABISimplifyAddPreOptPasses(PassManager &PM) { + // Internalize all symbols in the module except _start, which is the only + // symbol a stable PNaCl pexe is allowed to export. + const char *SymbolsToPreserve[] = { "_start" }; + PM.add(createInternalizePass(SymbolsToPreserve)); + // LowerExpect converts Intrinsic::expect into branch weights, // which can then be removed after BlockPlacement. PM.add(createLowerExpectIntrinsicPass()); diff --git a/test/Transforms/NaCl/pnacl-abi-internalize-symbols.ll b/test/Transforms/NaCl/pnacl-abi-internalize-symbols.ll new file mode 100644 index 0000000000..e6e14b6690 --- /dev/null +++ b/test/Transforms/NaCl/pnacl-abi-internalize-symbols.ll @@ -0,0 +1,20 @@ +; RUN: opt %s -pnacl-abi-simplify-preopt -S | FileCheck %s + +; Checks that PNaCl ABI pre-opt simplification correctly internalizes +; symbols except _start. + +define void @main() { +; CHECK: define internal void @main + ret void +} + +define external void @foobarbaz() { +; CHECK: define internal void @foobarbaz + ret void +} + +define void @_start() { +; CHECK: define void @_start + ret void +} + |