diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-09-04 17:42:03 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-09-04 17:42:03 +0000 |
commit | 7c4059eb8929eb2819ff81137033e190b1b550dd (patch) | |
tree | ba73a0bc6df98b5579e89a72bc14bac4f88e47c5 /llvm/lib/MC/MCContext.cpp | |
parent | 84897b8b7d01f5ccf7cb51e153f29c8bbb4f9191 (diff) | |
download | bcm5719-llvm-7c4059eb8929eb2819ff81137033e190b1b550dd.tar.gz bcm5719-llvm-7c4059eb8929eb2819ff81137033e190b1b550dd.zip |
MC Win64: Put unwind info for COMDAT code into the same COMDAT group
Summary:
This fixes a long standing issue where we would emit many little .text
sections and only one .pdata and .xdata section. Now we generate one
.pdata / .xdata pair per .text section and associate them correctly.
Fixes PR19667.
Reviewers: majnemer
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D5181
llvm-svn: 217176
Diffstat (limited to 'llvm/lib/MC/MCContext.cpp')
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 7702da3540c..4266759b1f0 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -317,6 +317,22 @@ const MCSectionCOFF *MCContext::getCOFFSection(StringRef Section) { return Iter->second; } +const MCSectionCOFF * +MCContext::getAssociativeCOFFSection(const MCSectionCOFF *Sec, + const MCSymbol *KeySym) { + // Return the normal section if we don't have to be associative. + if (!KeySym) + return Sec; + + // Make an associative section with the same name and kind as the normal + // section. + unsigned Characteristics = + Sec->getCharacteristics() | COFF::IMAGE_SCN_LNK_COMDAT; + return getCOFFSection(Sec->getSectionName(), Characteristics, Sec->getKind(), + KeySym->getName(), + COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE); +} + //===----------------------------------------------------------------------===// // Dwarf Management //===----------------------------------------------------------------------===// |