From 0c9ea1053058be474a58859be2ab212aaf33ea31 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Fri, 29 Mar 2019 00:05:00 +0000 Subject: [PATCH] Revert "[WebAssembly] Improve invalid relocation error message" This reverts commit 0805ec5f7b5c80474352531a99e721c30e73e77f. llvm-svn: 357225 --- lld/test/wasm/undefined-data.ll | 2 +- lld/wasm/InputChunks.cpp | 2 +- lld/wasm/InputChunks.h | 2 -- lld/wasm/Writer.cpp | 29 ++++++++++++----------------- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/lld/test/wasm/undefined-data.ll b/lld/test/wasm/undefined-data.ll index 21691bc3cfc1..8063d333efae 100644 --- a/lld/test/wasm/undefined-data.ll +++ b/lld/test/wasm/undefined-data.ll @@ -13,4 +13,4 @@ entry: } ; UNDEF: undefined symbol: data_external -; BADRELOC: undefined-data.ll.tmp.o: relocation R_WASM_MEMORY_ADDR_LEB cannot be used againt symbol data_external; recompile with -fPIC +; BADRELOC: undefined-data.ll.tmp.o: relocation of type R_WASM_MEMORY_ADDR_* against undefined data symbol: data_external diff --git a/lld/wasm/InputChunks.cpp b/lld/wasm/InputChunks.cpp index 15e57a8e4c22..5d6dfa0d989e 100644 --- a/lld/wasm/InputChunks.cpp +++ b/lld/wasm/InputChunks.cpp @@ -22,7 +22,7 @@ using namespace llvm::support::endian; using namespace lld; using namespace lld::wasm; -StringRef lld::reloctTypeToString(uint8_t RelocType) { +static StringRef reloctTypeToString(uint8_t RelocType) { switch (RelocType) { #define WASM_RELOC(NAME, REL) \ case REL: \ diff --git a/lld/wasm/InputChunks.h b/lld/wasm/InputChunks.h index 8f0999abac60..20b8f01f61a6 100644 --- a/lld/wasm/InputChunks.h +++ b/lld/wasm/InputChunks.h @@ -218,8 +218,6 @@ protected: } // namespace wasm std::string toString(const wasm::InputChunk *); -StringRef reloctTypeToString(uint8_t RelocType); - } // namespace lld #endif // LLD_WASM_INPUT_CHUNKS_H diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index 4697540e5e52..480257f18bd8 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -1141,6 +1141,18 @@ void Writer::processRelocations(InputChunk *Chunk) { File->TypeMap[Reloc.Index] = registerType(Types[Reloc.Index]); File->TypeIsUsed[Reloc.Index] = true; break; + case R_WASM_MEMORY_ADDR_SLEB: + case R_WASM_MEMORY_ADDR_I32: + case R_WASM_MEMORY_ADDR_LEB: { + DataSymbol *DataSym = File->getDataSymbol(Reloc.Index); + if (!Config->Relocatable && !isa(DataSym) && + !DataSym->isWeak()) + error(File->getName() + + ": relocation of type R_WASM_MEMORY_ADDR_* " + "against undefined data symbol: " + + DataSym->getName()); + break; + } case R_WASM_GLOBAL_INDEX_LEB: { auto* Sym = File->getSymbols()[Reloc.Index]; if (!isa(Sym) && !Sym->isInGOT()) { @@ -1149,23 +1161,6 @@ void Writer::processRelocations(InputChunk *Chunk) { } } } - - if (!Config->Relocatable) { - switch (Reloc.Type) { - // These relocations types appear the code section. - // They should never appear in code compiled with -fPIC. - case R_WASM_TABLE_INDEX_SLEB: - case R_WASM_MEMORY_ADDR_I32: - case R_WASM_MEMORY_ADDR_LEB: { - auto *Sym = File->getSymbols()[Reloc.Index]; - if (Sym->isUndefined() && !Sym->isWeak()) - error(File->getName() + ": relocation " + - reloctTypeToString(Reloc.Type) + - " cannot be used againt symbol " + Sym->getName() + - "; recompile with -fPIC"); - } - } - } } }