diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-10-15 19:30:18 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-10-15 19:30:18 +0000 |
commit | 78206c35769fe9196e2370519de2c1576347a167 (patch) | |
tree | 90d7bb18bac1cf265cce27ef3a36ab51b5f7c07c /llvm/lib | |
parent | 90c2f1455ae1e88aa31e68f4e7cdcdf955c945ed (diff) | |
download | bcm5719-llvm-78206c35769fe9196e2370519de2c1576347a167.tar.gz bcm5719-llvm-78206c35769fe9196e2370519de2c1576347a167.zip |
Allow forward references to section symbols.
llvm-svn: 219835
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 3ac8d658873..ea6db142fd7 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -119,11 +119,18 @@ MCSymbol *MCContext::getOrCreateSectionSymbol(const MCSectionELF &Section) { return Sym; StringRef Name = Section.getSectionName(); + + StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name); + MCSymbol *OldSym = Entry.getValue(); + if (OldSym && OldSym->isUndefined()) { + Sym = OldSym; + return OldSym; + } + StringMapEntry<bool> *NameEntry = &UsedNames.GetOrCreateValue(Name); NameEntry->setValue(true); Sym = new (*this) MCSymbol(NameEntry->getKey(), /*isTemporary*/ false); - StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name); if (!Entry.getValue()) Entry.setValue(Sym); |