diff options
author | Nathan Jeffords <blunted2night@gmail.com> | 2010-05-12 04:26:09 +0000 |
---|---|---|
committer | Nathan Jeffords <blunted2night@gmail.com> | 2010-05-12 04:26:09 +0000 |
commit | 76a07580ad0603c933889b0e5bacd40016cb0f3d (patch) | |
tree | 8a0d3b69afb2a4e4f99fded0777e2fc99c74c2ec /llvm/lib/MC/MCSectionCOFF.cpp | |
parent | 42464b8b92853c8c72a2653d8656f8c7ded0d990 (diff) | |
download | llvm-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.cpp | 26 |
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; + } + } } |