aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
diff options
context:
space:
mode:
authorNick Desaulniers <ndesaulniers@google.com>2018-10-10 22:52:32 +0000
committerNick Desaulniers <ndesaulniers@google.com>2018-10-10 22:52:32 +0000
commit335315697ac4079a9ec4a2e9911373ab4ba9dc2f (patch)
tree0b430efcbbdb85cb35fd8ff571f1de5e50958fc0 /llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
parent3c4344810a54989a0c5b7546fce9580800a12e50 (diff)
downloadllvm-335315697ac4079a9ec4a2e9911373ab4ba9dc2f.zip
llvm-335315697ac4079a9ec4a2e9911373ab4ba9dc2f.tar.gz
llvm-335315697ac4079a9ec4a2e9911373ab4ba9dc2f.tar.bz2
[MC][ELF] compute entity size for explicit sections
Summary: Global variables might declare themselves to be in explicit sections. Calculate the entity size always to prevent assembler warnings "entity size for SHF_MERGE not specified" when sections are to be marked merge-able. Fixes PR31828. Reviewers: rnk, echristo Reviewed By: rnk Subscribers: llvm-commits, pirama, srhines Differential Revision: https://reviews.llvm.org/D53056 llvm-svn: 344197
Diffstat (limited to 'llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp')
-rw-r--r--llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp50
1 files changed, 25 insertions, 25 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index f6882c4..b046cd81 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -506,6 +506,30 @@ static const MCSymbolELF *getAssociatedSymbol(const GlobalObject *GO,
return OtherGO ? dyn_cast<MCSymbolELF>(TM.getSymbol(OtherGO)) : nullptr;
}
+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;
+ }
+}
+
MCSection *TargetLoweringObjectFileELF::getExplicitSectionGlobal(
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
StringRef SectionName = GO->getSection();
@@ -550,7 +574,7 @@ MCSection *TargetLoweringObjectFileELF::getExplicitSectionGlobal(
MCSectionELF *Section = getContext().getELFSection(
SectionName, getELFSectionType(SectionName, Kind), Flags,
- /*EntrySize=*/0, Group, UniqueID, AssociatedSymbol);
+ getEntrySizeForKind(Kind), Group, UniqueID, AssociatedSymbol);
// Make sure that we did not get some other section with incompatible sh_link.
// This should not be possible due to UniqueID code above.
assert(Section->getAssociatedSymbol() == AssociatedSymbol &&
@@ -577,30 +601,6 @@ 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,