From: Sam Clegg Date: Tue, 25 Sep 2018 21:50:15 +0000 (+0000) Subject: [WebAssembly] Add --export-default/--no-export-default options X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e62418b25de4dcf476c54e77e48abd39821332b;p=platform%2Fupstream%2Fllvm.git [WebAssembly] Add --export-default/--no-export-default options 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. Differential Revision: https://reviews.llvm.org/D52003 llvm-svn: 343034 --- diff --git a/lld/test/wasm/visibility-hidden.ll b/lld/test/wasm/visibility-hidden.ll index f553c08..d1a83cd 100644 --- a/lld/test/wasm/visibility-hidden.ll +++ b/lld/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 @@ entry: ; 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: diff --git a/lld/wasm/Config.h b/lld/wasm/Config.h index 76a7805..ae8989f 100644 --- a/lld/wasm/Config.h +++ b/lld/wasm/Config.h @@ -24,6 +24,7 @@ struct Configuration { bool Demangle; bool DisableVerify; bool ExportAll; + bool ExportDefault; bool ExportTable; bool GcSections; bool ImportMemory; diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp index f477ba3..789bda9 100644 --- a/lld/wasm/Driver.cpp +++ b/lld/wasm/Driver.cpp @@ -373,6 +373,8 @@ void LinkerDriver::link(ArrayRef ArgsArr) { 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); diff --git a/lld/wasm/Options.td b/lld/wasm/Options.td index e2922c2..e98b1b9 100644 --- a/lld/wasm/Options.td +++ b/lld/wasm/Options.td @@ -30,6 +30,10 @@ defm demangle: B<"demangle", "Demangle symbol names", "Do not demangle symbol names">; +defm export_default: B<"export-default", + "Export symbols marked as 'default' visibility (default)", + "Do not export symbols marked as 'default' visibility">; + def entry: S<"entry">, MetaVarName<"">, HelpText<"Name of entry point symbol">; diff --git a/lld/wasm/Symbols.cpp b/lld/wasm/Symbols.cpp index a11081c..68bcadb 100644 --- a/lld/wasm/Symbols.cpp +++ b/lld/wasm/Symbols.cpp @@ -105,6 +105,9 @@ bool Symbol::isExported() const { if (ForceExport || Config->ExportAll) return true; + if (!Config->ExportDefault) + return false; + return !isHidden(); }