summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-10-15 19:30:18 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-10-15 19:30:18 +0000
commit78206c35769fe9196e2370519de2c1576347a167 (patch)
tree90d7bb18bac1cf265cce27ef3a36ab51b5f7c07c /llvm/lib
parent90c2f1455ae1e88aa31e68f4e7cdcdf955c945ed (diff)
downloadbcm5719-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.cpp9
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);
OpenPOWER on IntegriCloud