diff options
author | Martin Storsjö <martin@martin.st> | 2019-12-28 23:38:41 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2019-12-28 23:45:50 +0200 |
commit | bc5b7217dceecd3eec69593026a9e38dfbfd6908 (patch) | |
tree | 51303ad151825730217452e01e16334dcf2fd46f /llvm/lib/MC/WinCOFFObjectWriter.cpp | |
parent | 36fb199ecaa5c75bd339f530277cd6d1f32033b3 (diff) | |
download | bcm5719-llvm-bc5b7217dceecd3eec69593026a9e38dfbfd6908.tar.gz bcm5719-llvm-bc5b7217dceecd3eec69593026a9e38dfbfd6908.zip |
Revert "[COFF] Make the autogenerated .weak.<name>.default symbols static"
This reverts commit 7ca86ee6494d4307333b300bae80e42df4a5140f.
Apparently this change causes MS link.exe to error out with
"LNK1235: corrupt or invalid COFF symbol table".
Diffstat (limited to 'llvm/lib/MC/WinCOFFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/WinCOFFObjectWriter.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp index d314533a574..749ed8badfa 100644 --- a/llvm/lib/MC/WinCOFFObjectWriter.cpp +++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -352,10 +352,9 @@ COFFSymbol *WinCOFFObjectWriter::getLinkedSymbol(const MCSymbol &Symbol) { /// This function takes a symbol data object from the assembler /// and creates the associated COFF symbol staging object. -void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric, +void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSym, MCAssembler &Assembler, const MCAsmLayout &Layout) { - const auto &MCSym = cast<MCSymbolCOFF>(MCSymGeneric); COFFSymbol *Sym = GetOrCreateCOFFSymbol(&MCSym); const MCSymbol *Base = Layout.getBaseSymbol(MCSym); COFFSection *Sec = nullptr; @@ -366,7 +365,7 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric, } COFFSymbol *Local = nullptr; - if (MCSym.isWeakExternal()) { + if (cast<MCSymbolCOFF>(MCSym).isWeakExternal()) { Sym->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL; COFFSymbol *WeakDefault = getLinkedSymbol(MCSym); @@ -377,9 +376,6 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric, WeakDefault->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE; else WeakDefault->Section = Sec; - // Make the default symbol static, in order to not conflict with - // similar default symbols for the same weak in other objects. - WeakDefault->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC; Local = WeakDefault; } @@ -398,8 +394,14 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric, else Sym->Section = Sec; Local = Sym; + } - Local->Data.StorageClass = MCSym.getClass(); + if (Local) { + Local->Data.Value = getSymbolValue(MCSym, Layout); + + const MCSymbolCOFF &SymbolCOFF = cast<MCSymbolCOFF>(MCSym); + Local->Data.Type = SymbolCOFF.getType(); + Local->Data.StorageClass = SymbolCOFF.getClass(); // If no storage class was specified in the streamer, define it here. if (Local->Data.StorageClass == COFF::IMAGE_SYM_CLASS_NULL) { @@ -411,12 +413,6 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric, } } - if (Local) { - Local->Data.Value = getSymbolValue(MCSym, Layout); - - Local->Data.Type = MCSym.getType(); - } - Sym->MC = &MCSym; } |