aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCSectionCOFF.cpp
diff options
context:
space:
mode:
authorNathan Jeffords <blunted2night@gmail.com>2010-05-12 04:26:09 +0000
committerNathan Jeffords <blunted2night@gmail.com>2010-05-12 04:26:09 +0000
commit76a07580ad0603c933889b0e5bacd40016cb0f3d (patch)
tree8a0d3b69afb2a4e4f99fded0777e2fc99c74c2ec /llvm/lib/MC/MCSectionCOFF.cpp
parent42464b8b92853c8c72a2653d8656f8c7ded0d990 (diff)
downloadllvm-76a07580ad0603c933889b0e5bacd40016cb0f3d.zip
llvm-76a07580ad0603c933889b0e5bacd40016cb0f3d.tar.gz
llvm-76a07580ad0603c933889b0e5bacd40016cb0f3d.tar.bz2
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. llvm-svn: 103568
Diffstat (limited to 'llvm/lib/MC/MCSectionCOFF.cpp')
-rw-r--r--llvm/lib/MC/MCSectionCOFF.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCSectionCOFF.cpp b/llvm/lib/MC/MCSectionCOFF.cpp
index 103a80f..786bc7b 100644
--- a/llvm/lib/MC/MCSectionCOFF.cpp
+++ b/llvm/lib/MC/MCSectionCOFF.cpp
@@ -47,4 +47,30 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,
if (getCharacteristics() & MCSectionCOFF::IMAGE_SCN_MEM_DISCARDABLE)
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;
+ }
+ }
}