mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 06:00:28 +00:00
updated support for the COFF .linkonce
Now, the .linkonce directive is emitted as part of MCSectionCOFF::PrintSwitchToSection instead of AsmPrinter::EmitLinkage since it is an attribute of the section the symbol was placed into not the symbol itself. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103568 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5bdc2aa264
commit
871bb94c43
@ -208,13 +208,7 @@ void AsmPrinter::EmitLinkage(unsigned Linkage, MCSymbol *GVSym) const {
|
|||||||
} else if (const char *LinkOnce = MAI->getLinkOnceDirective()) {
|
} else if (const char *LinkOnce = MAI->getLinkOnceDirective()) {
|
||||||
// .globl _foo
|
// .globl _foo
|
||||||
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Global);
|
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Global);
|
||||||
// FIXME: linkonce should be a section attribute, handled by COFF Section
|
//NOTE: linkonce is handling by the section the symbol was assigned to
|
||||||
// assignment.
|
|
||||||
// http://sourceware.org/binutils/docs-2.20/as/Linkonce.html#Linkonce
|
|
||||||
// .linkonce discard
|
|
||||||
// FIXME: It would be nice to use .linkonce samesize for non-common
|
|
||||||
// globals.
|
|
||||||
OutStreamer.EmitRawText(StringRef(LinkOnce));
|
|
||||||
} else {
|
} else {
|
||||||
// .weak _foo
|
// .weak _foo
|
||||||
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Weak);
|
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Weak);
|
||||||
|
@ -47,4 +47,30 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
|||||||
if (getCharacteristics() & MCSectionCOFF::IMAGE_SCN_MEM_DISCARDABLE)
|
if (getCharacteristics() & MCSectionCOFF::IMAGE_SCN_MEM_DISCARDABLE)
|
||||||
OS << 'n';
|
OS << 'n';
|
||||||
OS << "\"\n";
|
OS << "\"\n";
|
||||||
|
|
||||||
|
if (getCharacteristics() & MCSectionCOFF::IMAGE_SCN_LNK_COMDAT) {
|
||||||
|
switch (Selection) {
|
||||||
|
default:
|
||||||
|
assert (0 && "unsupported COFF selection type");
|
||||||
|
break;
|
||||||
|
case IMAGE_COMDAT_SELECT_NODUPLICATES:
|
||||||
|
OS << "\t.linkonce one_only\n";
|
||||||
|
break;
|
||||||
|
case IMAGE_COMDAT_SELECT_ANY:
|
||||||
|
OS << "\t.linkonce discard\n";
|
||||||
|
break;
|
||||||
|
case IMAGE_COMDAT_SELECT_SAME_SIZE:
|
||||||
|
OS << "\t.linkonce same_size\n";
|
||||||
|
break;
|
||||||
|
case IMAGE_COMDAT_SELECT_EXACT_MATCH:
|
||||||
|
OS << "\t.linkonce same_contents\n";
|
||||||
|
break;
|
||||||
|
// ".linkonce largest" is not documented as being an option.
|
||||||
|
// It seems odd that a link attribute designed essentially for PE/COFF
|
||||||
|
// wouldn't support all the options (at least as of binutils 2.20)
|
||||||
|
//case IMAGE_COMDAT_SELECT_LARGEST:
|
||||||
|
// OS << "\t.linkonce largest\n";
|
||||||
|
// break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user