[WebAssembly] Add check to ensure symbol VA is only set once. NFC.

Also remove resulting unneeded function.

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

llvm-svn: 320118
This commit is contained in:
Sam Clegg 2017-12-08 00:13:14 +00:00
parent 2569edd9b8
commit c5872e864a
2 changed files with 2 additions and 12 deletions

View File

@ -134,17 +134,6 @@ static Optional<std::string> findFile(StringRef Path1, const Twine &Path2) {
return None;
}
// Inject a new wasm global into the output binary with the given value.
// Wasm global are used in relocatable object files to model symbol imports
// and exports. In the final executable the only use of wasm globals is
// for the exlicit stack pointer (__stack_pointer).
static Symbol* addSyntheticGlobal(StringRef Name, int32_t Value) {
log("injecting global: " + Name);
Symbol *S = Symtab->addDefinedGlobal(Name);
S->setVirtualAddress(Value);
return S;
}
// Inject a new undefined symbol into the link. This will cause the link to
// fail unless this symbol can be found.
static void addSyntheticUndefinedFunction(StringRef Name,
@ -285,7 +274,7 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
for (StringRef S : args::getStrings(Args, OPT_undefined))
addSyntheticUndefinedFunction(S, nullptr);
Config->StackPointerSymbol = addSyntheticGlobal("__stack_pointer", 0);
Config->StackPointerSymbol = Symtab->addDefinedGlobal("__stack_pointer");
}
createFiles(Args);

View File

@ -61,6 +61,7 @@ uint32_t Symbol::getOutputIndex() const {
void Symbol::setVirtualAddress(uint32_t Value) {
DEBUG(dbgs() << "setVirtualAddress " << Name << " -> " << Value << "\n");
assert(!VirtualAddress.hasValue());
VirtualAddress = Value;
}