aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Bendersky <eliben@chromium.org>2013-07-01 12:32:35 -0700
committerEli Bendersky <eliben@chromium.org>2013-07-01 12:32:35 -0700
commit777f0e911fc0cbd0b07f9b3ae395b5361d19b270 (patch)
treef11ab12ed8817c9fe044b286a5b7e6fe0541dd7f
parentec8e5bad316e85ea87716793b499dd6f204d78c0 (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.cpp5
-rw-r--r--test/Transforms/NaCl/pnacl-abi-internalize-symbols.ll20
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
+}
+