summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/WinCOFFObjectWriter.cpp
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2019-12-28 23:38:41 +0200
committerMartin Storsjö <martin@martin.st>2019-12-28 23:45:50 +0200
commitbc5b7217dceecd3eec69593026a9e38dfbfd6908 (patch)
tree51303ad151825730217452e01e16334dcf2fd46f /llvm/lib/MC/WinCOFFObjectWriter.cpp
parent36fb199ecaa5c75bd339f530277cd6d1f32033b3 (diff)
downloadbcm5719-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.cpp22
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;
}
OpenPOWER on IntegriCloud