[PATCH] D52003: [WebAssembly] Add --export-default/--no-export-default options

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 12 14:09:58 PDT 2018


sbc100 created this revision.
Herald added subscribers: llvm-commits, sunfish, aheejin, jgravelle-google, dschuff.

These option control weather or not symbols marked as visibility
default are exported in the output binary.

By default this is true, but emscripten prefers to control the
exported symbol list explicitly at link time and ignore the
symbol attributes.


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D52003

Files:
  test/wasm/visibility-hidden.ll
  wasm/Config.h
  wasm/Driver.cpp
  wasm/Options.td
  wasm/Symbols.cpp


Index: wasm/Symbols.cpp
===================================================================
--- wasm/Symbols.cpp
+++ wasm/Symbols.cpp
@@ -105,6 +105,9 @@
   if (ForceExport || Config->ExportAll)
     return true;
 
+  if (!Config->ExportDefault)
+    return false;
+
   return !isHidden();
 }
 
Index: wasm/Options.td
===================================================================
--- wasm/Options.td
+++ wasm/Options.td
@@ -30,6 +30,10 @@
     "Demangle symbol names",
     "Do not demangle symbol names">;
 
+defm export_default: B<"export-default",
+    "Export symbols marked as 'default' visibility",
+    "Do not export symbols marked as 'default' visibility">;
+
 def entry: S<"entry">, MetaVarName<"<entry>">,
   HelpText<"Name of entry point symbol">;
 
Index: wasm/Driver.cpp
===================================================================
--- wasm/Driver.cpp
+++ wasm/Driver.cpp
@@ -373,6 +373,8 @@
   Config->DisableVerify = Args.hasArg(OPT_disable_verify);
   Config->Entry = getEntry(Args, Args.hasArg(OPT_relocatable) ? "" : "_start");
   Config->ExportAll = Args.hasArg(OPT_export_all);
+  Config->ExportDefault = Args.hasFlag(OPT_export_default,
+      OPT_no_export_default, true);
   Config->ExportTable = Args.hasArg(OPT_export_table);
   errorHandler().FatalWarnings =
       Args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false);
Index: wasm/Config.h
===================================================================
--- wasm/Config.h
+++ wasm/Config.h
@@ -24,6 +24,7 @@
   bool Demangle;
   bool DisableVerify;
   bool ExportAll;
+  bool ExportDefault;
   bool ExportTable;
   bool GcSections;
   bool ImportMemory;
Index: test/wasm/visibility-hidden.ll
===================================================================
--- test/wasm/visibility-hidden.ll
+++ test/wasm/visibility-hidden.ll
@@ -2,11 +2,17 @@
 ; RUN: llc -filetype=obj %S/Inputs/hidden.ll -o %t2.o
 ; RUN: rm -f %t2.a
 ; RUN: llvm-ar rcs %t2.a %t2.o
-; RUN: wasm-ld %t.o %t2.a -o %t.wasm
-; RUN: obj2yaml %t.wasm | FileCheck %s
 
 ; Test that hidden symbols are not exported, whether pulled in from an archive
 ; or directly.
+; RUN: wasm-ld %t.o %t2.a -o %t.wasm
+; RUN: obj2yaml %t.wasm | FileCheck %s
+
+; Test that symbols with default visitiblity are not exported when
+; --no-export-default is passed.
+; RUN: wasm-ld --no-export-default %t.o %t2.a -o %t.nodef.wasm
+; RUN: obj2yaml %t.nodef.wasm | FileCheck %s -check-prefix=NO-DEFAULT
+
 
 target triple = "wasm32-unknown-unknown"
 
@@ -53,3 +59,11 @@
 ; CHECK-NEXT:         Kind:            FUNCTION
 ; CHECK-NEXT:         Index:           5
 ; CHECK-NEXT:   - Type:
+
+
+; NO-DEFAULT:        - Type:            EXPORT
+; NO-DEFAULT-NEXT:     Exports:
+; NO-DEFAULT-NEXT:       - Name:            memory
+; NO-DEFAULT-NEXT:         Kind:            MEMORY
+; NO-DEFAULT-NEXT:         Index:           0
+; NO-DEFAULT-NEXT:   - Type:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52003.165147.patch
Type: text/x-patch
Size: 2902 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180912/a1f29854/attachment.bin>


More information about the llvm-commits mailing list