diff options
| author | Rui Ueyama <ruiu@google.com> | 2018-02-28 00:28:07 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2018-02-28 00:28:07 +0000 |
| commit | 8bfa2a629dd493fb224867d5a2f8b3eaf541282e (patch) | |
| tree | 16b6478fadee364d2b9a9b5919e003519d722d5f /lld/wasm/Writer.cpp | |
| parent | 419889e26669d3c26e94a20ec92c0553ed8a15ad (diff) | |
| download | bcm5719-llvm-8bfa2a629dd493fb224867d5a2f8b3eaf541282e.tar.gz bcm5719-llvm-8bfa2a629dd493fb224867d5a2f8b3eaf541282e.zip | |
[WebAssembly] Simplify createLikingSection.
Summary: [WebAssembly] Simplify createLikingSection.
Reviewers: sbc100
Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish, llvm-commits
Differential Revision: https://reviews.llvm.org/D43715
llvm-svn: 326279
Diffstat (limited to 'lld/wasm/Writer.cpp')
| -rw-r--r-- | lld/wasm/Writer.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index 6c4ccab31d4..285f7191386 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -371,6 +371,19 @@ void Writer::createRelocSections() { } } +static uint32_t getWasmFlags(const Symbol *Sym) { + uint32_t Flags = 0; + if (Sym->isLocal()) + Flags |= WASM_SYMBOL_BINDING_LOCAL; + if (Sym->isWeak()) + Flags |= WASM_SYMBOL_BINDING_WEAK; + if (Sym->isHidden()) + Flags |= WASM_SYMBOL_VISIBILITY_HIDDEN; + if (Sym->isUndefined()) + Flags |= WASM_SYMBOL_UNDEFINED; + return Flags; +} + // Create the custom "linking" section containing linker metadata. // This is only created when relocatable output is requested. void Writer::createLinkingSection() { @@ -387,15 +400,11 @@ void Writer::createLinkingSection() { for (const Symbol *Sym : SymtabEntries) { assert(Sym->isDefined() || Sym->isUndefined()); WasmSymbolType Kind = Sym->getWasmType(); - uint32_t Flags = Sym->isLocal() ? WASM_SYMBOL_BINDING_LOCAL : 0; - if (Sym->isWeak()) - Flags |= WASM_SYMBOL_BINDING_WEAK; - if (Sym->isHidden()) - Flags |= WASM_SYMBOL_VISIBILITY_HIDDEN; - if (Sym->isUndefined()) - Flags |= WASM_SYMBOL_UNDEFINED; + uint32_t Flags = getWasmFlags(Sym); + writeUleb128(SubSection.getStream(), Kind, "sym kind"); writeUleb128(SubSection.getStream(), Flags, "sym flags"); + switch (Kind) { case llvm::wasm::WASM_SYMBOL_TYPE_FUNCTION: case llvm::wasm::WASM_SYMBOL_TYPE_GLOBAL: @@ -415,6 +424,7 @@ void Writer::createLinkingSection() { break; } } + SubSection.finalizeContents(); SubSection.writeToStream(OS); } |

