Simplify selectELFSectionForGlobal by pulling out the entry size

determination for mergeable sections into a small static function.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338469 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher
2018-08-01 01:29:30 +00:00
parent bf9b77d2fa
commit 5311a6ea83
+27 -22
View File
@@ -422,32 +422,34 @@ static StringRef getSectionPrefixForGlobal(SectionKind Kind) {
return ".data.rel.ro";
}
static unsigned getEntrySizeForKind(SectionKind Kind) {
if (Kind.isMergeable1ByteCString())
return 1;
else if (Kind.isMergeable2ByteCString())
return 2;
else if (Kind.isMergeable4ByteCString())
return 4;
else if (Kind.isMergeableConst4())
return 4;
else if (Kind.isMergeableConst8())
return 8;
else if (Kind.isMergeableConst16())
return 16;
else if (Kind.isMergeableConst32())
return 32;
else {
// We shouldn't have mergeable C strings or mergeable constants that we
// didn't handle above.
assert(!Kind.isMergeableCString() && "unknown string width");
assert(!Kind.isMergeableConst() && "unknown data width");
return 0;
}
}
static MCSectionELF *selectELFSectionForGlobal(
MCContext &Ctx, const GlobalObject *GO, SectionKind Kind, Mangler &Mang,
const TargetMachine &TM, bool EmitUniqueSection, unsigned Flags,
unsigned *NextUniqueID, const MCSymbolELF *AssociatedSymbol) {
unsigned EntrySize = 0;
if (Kind.isMergeableCString()) {
if (Kind.isMergeable2ByteCString()) {
EntrySize = 2;
} else if (Kind.isMergeable4ByteCString()) {
EntrySize = 4;
} else {
EntrySize = 1;
assert(Kind.isMergeable1ByteCString() && "unknown string width");
}
} else if (Kind.isMergeableConst()) {
if (Kind.isMergeableConst4()) {
EntrySize = 4;
} else if (Kind.isMergeableConst8()) {
EntrySize = 8;
} else if (Kind.isMergeableConst16()) {
EntrySize = 16;
} else {
assert(Kind.isMergeableConst32() && "unknown data width");
EntrySize = 32;
}
}
StringRef Group = "";
if (const Comdat *C = getELFComdat(GO)) {
@@ -455,6 +457,9 @@ static MCSectionELF *selectELFSectionForGlobal(
Group = C->getName();
}
// Get the section entry size based on the kind.
unsigned EntrySize = getEntrySizeForKind(Kind);
SmallString<128> Name;
if (Kind.isMergeableCString()) {
// We also need alignment here.