[WebAssembly] Export the stack pointer when using --emit-relocs

This solves the problem that --emit-relocs needs the stack-pointer
to be exported, in order to write out any relocations that reference
the __stack_pointer symbol by its symbol index.

Patch by Nicholas Wilson!

Differential Revision: https://reviews.llvm.org/D42237

llvm-svn: 322911
This commit is contained in:
Sam Clegg 2018-01-18 23:57:55 +00:00
parent 84b26b90d1
commit 14ae6e7c5c
2 changed files with 9 additions and 3 deletions

View File

@ -58,6 +58,9 @@ entry:
; CHECK-NEXT: - Name: __wasm_call_ctors
; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 1
; CHECK-NEXT: - Name: __stack_pointer
; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 0
; CHECK-NEXT: - Name: __heap_base
; CHECK-NEXT: Kind: GLOBAL
; CHECK-NEXT: Index: 1

View File

@ -659,9 +659,12 @@ void Writer::calculateExports() {
}
for (const Symbol *Sym : DefinedGlobals) {
// Can't export the SP right now because it's mutable and mutable globals
// cannot be exported.
if (Sym == Config->StackPointerSymbol)
// Can't export the SP right now because its mutable, and mutuable globals
// are yet supported in the official binary format. However, for
// intermediate output we need to export it in case it is the target of any
// relocations.
// TODO(sbc): Remove this if/when the "mutable global" proposal is accepted.
if (Sym == Config->StackPointerSymbol && !Config->EmitRelocs)
continue;
ExportedSymbols.emplace_back(WasmExportEntry{Sym, BudgeLocalName(Sym)});
}