mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Refactor to avoid code duplication. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217207 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
295a0088db
commit
27589ac952
@ -358,8 +358,11 @@ TargetLoweringObjectFileELF::getSectionForConstant(SectionKind Kind,
|
||||
return DataRelROSection;
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::getStaticCtorSection(
|
||||
unsigned Priority, const MCSymbol *KeySym) const {
|
||||
static const MCSectionELF *getStaticStructorSection(MCContext &Ctx,
|
||||
bool UseInitArray,
|
||||
bool IsCtor,
|
||||
unsigned Priority,
|
||||
const MCSymbol *KeySym) {
|
||||
std::string Name;
|
||||
unsigned Type;
|
||||
unsigned Flags = ELF::SHF_ALLOC | ELF::SHF_WRITE;
|
||||
@ -370,16 +373,24 @@ const MCSection *TargetLoweringObjectFileELF::getStaticCtorSection(
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
|
||||
if (UseInitArray) {
|
||||
Name = ".init_array";
|
||||
if (IsCtor) {
|
||||
Type = ELF::SHT_INIT_ARRAY;
|
||||
Name = ".init_array";
|
||||
} else {
|
||||
Type = ELF::SHT_FINI_ARRAY;
|
||||
Name = ".fini_array";
|
||||
}
|
||||
if (Priority != 65535) {
|
||||
Name += '.';
|
||||
Name += utostr(Priority);
|
||||
}
|
||||
Type = ELF::SHT_INIT_ARRAY;
|
||||
} else {
|
||||
// The default scheme is .ctor / .dtor, so we have to invert the priority
|
||||
// numbering.
|
||||
Name = std::string(".ctors");
|
||||
if (IsCtor)
|
||||
Name = ".ctors";
|
||||
else
|
||||
Name = ".dtors";
|
||||
if (Priority != 65535) {
|
||||
Name += '.';
|
||||
Name += utostr(65535 - Priority);
|
||||
@ -387,39 +398,19 @@ const MCSection *TargetLoweringObjectFileELF::getStaticCtorSection(
|
||||
Type = ELF::SHT_PROGBITS;
|
||||
}
|
||||
|
||||
return getContext().getELFSection(Name, Type, Flags, Kind, 0, COMDAT);
|
||||
return Ctx.getELFSection(Name, Type, Flags, Kind, 0, COMDAT);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::getStaticCtorSection(
|
||||
unsigned Priority, const MCSymbol *KeySym) const {
|
||||
return getStaticStructorSection(getContext(), UseInitArray, true, Priority,
|
||||
KeySym);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::getStaticDtorSection(
|
||||
unsigned Priority, const MCSymbol *KeySym) const {
|
||||
std::string Name;
|
||||
unsigned Type;
|
||||
unsigned Flags = ELF::SHF_ALLOC | ELF::SHF_WRITE;
|
||||
SectionKind Kind = SectionKind::getDataRel();
|
||||
StringRef COMDAT = KeySym ? KeySym->getName() : "";
|
||||
|
||||
if (KeySym)
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
|
||||
if (UseInitArray) {
|
||||
Name = ".fini_array";
|
||||
if (Priority != 65535) {
|
||||
Name += '.';
|
||||
Name += utostr(Priority);
|
||||
}
|
||||
Type = ELF::SHT_FINI_ARRAY;
|
||||
} else {
|
||||
// The default scheme is .ctor / .dtor, so we have to invert the priority
|
||||
// numbering.
|
||||
Name = ".dtors";
|
||||
if (Priority != 65535) {
|
||||
Name += '.';
|
||||
Name += utostr(65535 - Priority);
|
||||
}
|
||||
Type = ELF::SHT_PROGBITS;
|
||||
}
|
||||
|
||||
return getContext().getELFSection(Name, Type, Flags, Kind, 0, COMDAT);
|
||||
return getStaticStructorSection(getContext(), UseInitArray, false, Priority,
|
||||
KeySym);
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user