forked from OSchip/llvm-project
[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
This commit is contained in:
parent
24b6d3690c
commit
4e62418b25
|
@ -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:
|
||||
|
|
|
@ -24,6 +24,7 @@ struct Configuration {
|
|||
bool Demangle;
|
||||
bool DisableVerify;
|
||||
bool ExportAll;
|
||||
bool ExportDefault;
|
||||
bool ExportTable;
|
||||
bool GcSections;
|
||||
bool ImportMemory;
|
||||
|
|
|
@ -373,6 +373,8 @@ void LinkerDriver::link(ArrayRef<const char *> 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);
|
||||
|
|
|
@ -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<"<entry>">,
|
||||
HelpText<"Name of entry point symbol">;
|
||||
|
||||
|
|
|
@ -105,6 +105,9 @@ bool Symbol::isExported() const {
|
|||
if (ForceExport || Config->ExportAll)
|
||||
return true;
|
||||
|
||||
if (!Config->ExportDefault)
|
||||
return false;
|
||||
|
||||
return !isHidden();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue