summaryrefslogtreecommitdiffstats
path: root/lld/wasm/Writer.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2018-02-28 00:28:07 +0000
committerRui Ueyama <ruiu@google.com>2018-02-28 00:28:07 +0000
commit8bfa2a629dd493fb224867d5a2f8b3eaf541282e (patch)
tree16b6478fadee364d2b9a9b5919e003519d722d5f /lld/wasm/Writer.cpp
parent419889e26669d3c26e94a20ec92c0553ed8a15ad (diff)
downloadbcm5719-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.cpp24
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);
}
OpenPOWER on IntegriCloud