diff options
author | Sam Clegg <sbc@chromium.org> | 2017-09-20 21:17:04 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2017-09-20 21:17:04 +0000 |
commit | 31a2c8093593a8e17a05022915eb505dcb7020e3 (patch) | |
tree | 7f21c266b4295bdb7d2000d6ef60d87fb733ad78 /llvm/lib/Object/WasmObjectFile.cpp | |
parent | 1e72f65077f9f87cccaa490131803431958d90e2 (diff) | |
download | llvm-31a2c8093593a8e17a05022915eb505dcb7020e3.zip llvm-31a2c8093593a8e17a05022915eb505dcb7020e3.tar.gz llvm-31a2c8093593a8e17a05022915eb505dcb7020e3.tar.bz2 |
[WebAssembly] Add support for local symbol bindings
Differential Revision: https://reviews.llvm.org/D38096
llvm-svn: 313817
Diffstat (limited to 'llvm/lib/Object/WasmObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/WasmObjectFile.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp index d2d3aba..3b62ccf 100644 --- a/llvm/lib/Object/WasmObjectFile.cpp +++ b/llvm/lib/Object/WasmObjectFile.cpp @@ -767,15 +767,17 @@ uint32_t WasmObjectFile::getSymbolFlags(DataRefImpl Symb) const { const WasmSymbol &Sym = getWasmSymbol(Symb); DEBUG(dbgs() << "getSymbolFlags: ptr=" << &Sym << " " << Sym << "\n"); - if (Sym.Flags & wasm::WASM_SYMBOL_FLAG_WEAK) + if (Sym.isWeak()) Result |= SymbolRef::SF_Weak; + else if (Sym.isGlobal()) + Result |= SymbolRef::SF_Global; switch (Sym.Type) { case WasmSymbol::SymbolType::FUNCTION_IMPORT: Result |= SymbolRef::SF_Undefined | SymbolRef::SF_Executable; break; case WasmSymbol::SymbolType::FUNCTION_EXPORT: - Result |= SymbolRef::SF_Global | SymbolRef::SF_Executable; + Result |= SymbolRef::SF_Executable; break; case WasmSymbol::SymbolType::DEBUG_FUNCTION_NAME: Result |= SymbolRef::SF_Executable; @@ -785,7 +787,6 @@ uint32_t WasmObjectFile::getSymbolFlags(DataRefImpl Symb) const { Result |= SymbolRef::SF_Undefined; break; case WasmSymbol::SymbolType::GLOBAL_EXPORT: - Result |= SymbolRef::SF_Global; break; } @@ -820,8 +821,7 @@ Expected<uint64_t> WasmObjectFile::getSymbolAddress(DataRefImpl Symb) const { return getSymbolValue(Symb); } -uint64_t WasmObjectFile::getSymbolValueImpl(DataRefImpl Symb) const { - const WasmSymbol& Sym = getWasmSymbol(Symb); +uint64_t WasmObjectFile::getWasmSymbolValue(const WasmSymbol& Sym) const { switch (Sym.Type) { case WasmSymbol::SymbolType::FUNCTION_IMPORT: case WasmSymbol::SymbolType::GLOBAL_IMPORT: @@ -842,6 +842,10 @@ uint64_t WasmObjectFile::getSymbolValueImpl(DataRefImpl Symb) const { llvm_unreachable("invalid symbol type"); } +uint64_t WasmObjectFile::getSymbolValueImpl(DataRefImpl Symb) const { + return getWasmSymbolValue(getWasmSymbol(Symb)); +} + uint32_t WasmObjectFile::getSymbolAlignment(DataRefImpl Symb) const { llvm_unreachable("not yet implemented"); return 0; |