diff options
Diffstat (limited to 'contrib/llvm/lib/MC/MCSectionCOFF.cpp')
| -rw-r--r-- | contrib/llvm/lib/MC/MCSectionCOFF.cpp | 33 | 
1 files changed, 19 insertions, 14 deletions
diff --git a/contrib/llvm/lib/MC/MCSectionCOFF.cpp b/contrib/llvm/lib/MC/MCSectionCOFF.cpp index 64aa2c5c49ea..fc2bd365e16d 100644 --- a/contrib/llvm/lib/MC/MCSectionCOFF.cpp +++ b/contrib/llvm/lib/MC/MCSectionCOFF.cpp @@ -20,6 +20,8 @@ MCSectionCOFF::~MCSectionCOFF() {} // anchor.  // should be printed before the section name  bool MCSectionCOFF::ShouldOmitSectionDirective(StringRef Name,                                                 const MCAsmInfo &MAI) const { +  if (COMDATSymbol) +    return false;    // FIXME: Does .section .bss/.data/.text work everywhere??    if (Name == ".text" || Name == ".data" || Name == ".bss") @@ -28,14 +30,9 @@ bool MCSectionCOFF::ShouldOmitSectionDirective(StringRef Name,    return false;  } -void MCSectionCOFF::setSelection(int Selection, -                                 const MCSectionCOFF *Assoc) const { +void MCSectionCOFF::setSelection(int Selection) const {    assert(Selection != 0 && "invalid COMDAT selection type"); -  assert((Selection == COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) == -         (Assoc != 0) && -    "associative COMDAT section must have an associated section");    this->Selection = Selection; -  this->Assoc = Assoc;    Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;  } @@ -52,42 +49,50 @@ void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,    OS << "\t.section\t" << getSectionName() << ",\"";    if (getKind().isText())      OS << 'x'; +  else if (getKind().isBSS()) +    OS << 'b';    if (getKind().isWriteable())      OS << 'w';    else      OS << 'r';    if (getCharacteristics() & COFF::IMAGE_SCN_MEM_DISCARDABLE)      OS << 'n'; -  OS << "\"\n"; +  if (getCharacteristics() & COFF::IMAGE_SCN_CNT_INITIALIZED_DATA) +    OS << 'd'; +  OS << '"';    if (getCharacteristics() & COFF::IMAGE_SCN_LNK_COMDAT) { +    OS << ",";      switch (Selection) {        case COFF::IMAGE_COMDAT_SELECT_NODUPLICATES: -        OS << "\t.linkonce one_only\n"; +        OS << "one_only,";          break;        case COFF::IMAGE_COMDAT_SELECT_ANY: -        OS << "\t.linkonce discard\n"; +        OS << "discard,";          break;        case COFF::IMAGE_COMDAT_SELECT_SAME_SIZE: -        OS << "\t.linkonce same_size\n"; +        OS << "same_size,";          break;        case COFF::IMAGE_COMDAT_SELECT_EXACT_MATCH: -        OS << "\t.linkonce same_contents\n"; +        OS << "same_contents,";          break;        case COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE: -        OS << "\t.linkonce associative " << Assoc->getSectionName() << "\n"; +        OS << "associative,";          break;        case COFF::IMAGE_COMDAT_SELECT_LARGEST: -        OS << "\t.linkonce largest\n"; +        OS << "largest,";          break;        case COFF::IMAGE_COMDAT_SELECT_NEWEST: -        OS << "\t.linkonce newest\n"; +        OS << "newest,";          break;        default:          assert (0 && "unsupported COFF selection type");          break;      } +    assert(COMDATSymbol); +    OS << *COMDATSymbol;    } +  OS << '\n';  }  bool MCSectionCOFF::UseCodeAlign() const {  | 
