mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-11 08:29:25 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217176 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -967,29 +967,14 @@ emitModuleFlags(MCStreamer &Streamer,
|
||||
}
|
||||
}
|
||||
|
||||
static const MCSection *getAssociativeCOFFSection(MCContext &Ctx,
|
||||
const MCSection *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.
|
||||
const MCSectionCOFF *SecCOFF = cast<MCSectionCOFF>(Sec);
|
||||
unsigned Characteristics =
|
||||
SecCOFF->getCharacteristics() | COFF::IMAGE_SCN_LNK_COMDAT;
|
||||
return Ctx.getCOFFSection(SecCOFF->getSectionName(), Characteristics,
|
||||
SecCOFF->getKind(), KeySym->getName(),
|
||||
COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileCOFF::getStaticCtorSection(
|
||||
unsigned Priority, const MCSymbol *KeySym) const {
|
||||
return getAssociativeCOFFSection(getContext(), StaticCtorSection, KeySym);
|
||||
return getContext().getAssociativeCOFFSection(
|
||||
cast<MCSectionCOFF>(StaticCtorSection), KeySym);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileCOFF::getStaticDtorSection(
|
||||
unsigned Priority, const MCSymbol *KeySym) const {
|
||||
return getAssociativeCOFFSection(getContext(), StaticDtorSection, KeySym);
|
||||
return getContext().getAssociativeCOFFSection(
|
||||
cast<MCSectionCOFF>(StaticDtorSection), KeySym);
|
||||
}
|
||||
|
Reference in New Issue
Block a user