File indexing completed on 2026-05-10 08:44:14
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef LLVM_MC_MCOBJECTFILEINFO_H
0014 #define LLVM_MC_MCOBJECTFILEINFO_H
0015
0016 #include "llvm/BinaryFormat/Swift.h"
0017 #include "llvm/MC/MCSection.h"
0018 #include "llvm/Support/VersionTuple.h"
0019 #include "llvm/TargetParser/Triple.h"
0020
0021 #include <array>
0022 #include <optional>
0023
0024 namespace llvm {
0025 class MCContext;
0026 class MCSection;
0027
0028 class MCObjectFileInfo {
0029 protected:
0030
0031
0032 bool SupportsWeakOmittedEHFrame = false;
0033
0034
0035
0036 bool SupportsCompactUnwindWithoutEHFrame = false;
0037
0038
0039
0040
0041 bool OmitDwarfIfHaveCompactUnwind = false;
0042
0043
0044
0045
0046
0047 unsigned FDECFIEncoding = 0;
0048
0049
0050 unsigned CompactUnwindDwarfEHFrameOnly = 0;
0051
0052
0053 MCSection *TextSection = nullptr;
0054
0055
0056 MCSection *DataSection = nullptr;
0057
0058
0059 MCSection *BSSSection = nullptr;
0060
0061
0062
0063
0064
0065 MCSection *ReadOnlySection = nullptr;
0066
0067
0068
0069 MCSection *LSDASection = nullptr;
0070
0071
0072
0073
0074 MCSection *CompactUnwindSection = nullptr;
0075
0076
0077
0078 MCSection *ImportCallSection = nullptr;
0079
0080
0081
0082 MCSection *DwarfAbbrevSection = nullptr;
0083 MCSection *DwarfInfoSection = nullptr;
0084 MCSection *DwarfLineSection = nullptr;
0085 MCSection *DwarfLineStrSection = nullptr;
0086 MCSection *DwarfFrameSection = nullptr;
0087 MCSection *DwarfPubTypesSection = nullptr;
0088 const MCSection *DwarfDebugInlineSection = nullptr;
0089 MCSection *DwarfStrSection = nullptr;
0090 MCSection *DwarfLocSection = nullptr;
0091 MCSection *DwarfARangesSection = nullptr;
0092 MCSection *DwarfRangesSection = nullptr;
0093 MCSection *DwarfMacinfoSection = nullptr;
0094 MCSection *DwarfMacroSection = nullptr;
0095
0096
0097 MCSection *DwarfPubNamesSection = nullptr;
0098
0099
0100
0101
0102
0103 MCSection *DwarfDebugNamesSection = nullptr;
0104 MCSection *DwarfAccelNamesSection = nullptr;
0105 MCSection *DwarfAccelObjCSection = nullptr;
0106 MCSection *DwarfAccelNamespaceSection = nullptr;
0107 MCSection *DwarfAccelTypesSection = nullptr;
0108
0109
0110 MCSection *DwarfInfoDWOSection = nullptr;
0111 MCSection *DwarfTypesDWOSection = nullptr;
0112 MCSection *DwarfAbbrevDWOSection = nullptr;
0113 MCSection *DwarfStrDWOSection = nullptr;
0114 MCSection *DwarfLineDWOSection = nullptr;
0115 MCSection *DwarfLocDWOSection = nullptr;
0116 MCSection *DwarfStrOffDWOSection = nullptr;
0117 MCSection *DwarfMacinfoDWOSection = nullptr;
0118 MCSection *DwarfMacroDWOSection = nullptr;
0119
0120
0121 MCSection *DwarfStrOffSection = nullptr;
0122 MCSection *DwarfAddrSection = nullptr;
0123
0124 MCSection *DwarfRnglistsSection = nullptr;
0125
0126 MCSection *DwarfLoclistsSection = nullptr;
0127
0128
0129 MCSection *DwarfRnglistsDWOSection = nullptr;
0130 MCSection *DwarfLoclistsDWOSection = nullptr;
0131
0132
0133 MCSection *DwarfCUIndexSection = nullptr;
0134 MCSection *DwarfTUIndexSection = nullptr;
0135
0136
0137 MCSection *DwarfGnuPubNamesSection = nullptr;
0138
0139 MCSection *DwarfGnuPubTypesSection = nullptr;
0140
0141
0142 MCSection *DwarfSwiftASTSection = nullptr;
0143
0144 MCSection *COFFDebugSymbolsSection = nullptr;
0145 MCSection *COFFDebugTypesSection = nullptr;
0146 MCSection *COFFGlobalTypeHashesSection = nullptr;
0147
0148
0149
0150
0151
0152 MCSection *TLSExtraDataSection = nullptr;
0153
0154
0155 MCSection *TLSDataSection = nullptr;
0156
0157
0158
0159
0160 MCSection *TLSBSSSection = nullptr;
0161
0162
0163 MCSection *StackMapSection = nullptr;
0164
0165
0166 MCSection *FaultMapSection = nullptr;
0167
0168
0169 MCSection *RemarksSection = nullptr;
0170
0171
0172
0173
0174 MCSection *EHFrameSection = nullptr;
0175
0176
0177 MCSection *StackSizesSection = nullptr;
0178
0179
0180 MCSection *PseudoProbeSection = nullptr;
0181 MCSection *PseudoProbeDescSection = nullptr;
0182
0183
0184 MCSection *LLVMStatsSection = nullptr;
0185
0186
0187 MCSection *DataRelROSection = nullptr;
0188 MCSection *MergeableConst4Section = nullptr;
0189 MCSection *MergeableConst8Section = nullptr;
0190 MCSection *MergeableConst16Section = nullptr;
0191 MCSection *MergeableConst32Section = nullptr;
0192
0193
0194
0195
0196
0197
0198
0199 MCSection *TLSTLVSection = nullptr;
0200
0201
0202
0203 const MCSection *TLSThreadInitSection = nullptr;
0204
0205 MCSection *CStringSection = nullptr;
0206 MCSection *UStringSection = nullptr;
0207 MCSection *TextCoalSection = nullptr;
0208 MCSection *ConstTextCoalSection = nullptr;
0209 MCSection *ConstDataSection = nullptr;
0210 MCSection *DataCoalSection = nullptr;
0211 MCSection *ConstDataCoalSection = nullptr;
0212 MCSection *DataCommonSection = nullptr;
0213 MCSection *DataBSSSection = nullptr;
0214 MCSection *FourByteConstantSection = nullptr;
0215 MCSection *EightByteConstantSection = nullptr;
0216 MCSection *SixteenByteConstantSection = nullptr;
0217 MCSection *LazySymbolPointerSection = nullptr;
0218 MCSection *NonLazySymbolPointerSection = nullptr;
0219 MCSection *ThreadLocalPointerSection = nullptr;
0220 MCSection *AddrSigSection = nullptr;
0221
0222
0223 MCSection *DrectveSection = nullptr;
0224 MCSection *PDataSection = nullptr;
0225 MCSection *XDataSection = nullptr;
0226 MCSection *SXDataSection = nullptr;
0227 MCSection *GEHContSection = nullptr;
0228 MCSection *GFIDsSection = nullptr;
0229 MCSection *GIATsSection = nullptr;
0230 MCSection *GLJMPSection = nullptr;
0231
0232
0233 MCSection *PPA1Section = nullptr;
0234 MCSection *PPA2Section = nullptr;
0235 MCSection *PPA2ListSection = nullptr;
0236 MCSection *ADASection = nullptr;
0237 MCSection *IDRLSection = nullptr;
0238
0239
0240 MCSection *TOCBaseSection = nullptr;
0241 MCSection *ReadOnly8Section = nullptr;
0242 MCSection *ReadOnly16Section = nullptr;
0243
0244
0245 std::array<MCSection *, binaryformat::Swift5ReflectionSectionKind::last>
0246 Swift5ReflectionSections = {};
0247
0248 public:
0249 void initMCObjectFileInfo(MCContext &MCCtx, bool PIC,
0250 bool LargeCodeModel = false);
0251 virtual ~MCObjectFileInfo();
0252 MCContext &getContext() const { return *Ctx; }
0253
0254 bool getSupportsWeakOmittedEHFrame() const {
0255 return SupportsWeakOmittedEHFrame;
0256 }
0257 bool getSupportsCompactUnwindWithoutEHFrame() const {
0258 return SupportsCompactUnwindWithoutEHFrame;
0259 }
0260 bool getOmitDwarfIfHaveCompactUnwind() const {
0261 return OmitDwarfIfHaveCompactUnwind;
0262 }
0263
0264 unsigned getFDEEncoding() const { return FDECFIEncoding; }
0265
0266 unsigned getCompactUnwindDwarfEHFrameOnly() const {
0267 return CompactUnwindDwarfEHFrameOnly;
0268 }
0269
0270 virtual unsigned getTextSectionAlignment() const { return 4; }
0271 MCSection *getTextSection() const { return TextSection; }
0272 MCSection *getDataSection() const { return DataSection; }
0273 MCSection *getBSSSection() const { return BSSSection; }
0274 MCSection *getReadOnlySection() const { return ReadOnlySection; }
0275 MCSection *getLSDASection() const { return LSDASection; }
0276 MCSection *getImportCallSection() const { return ImportCallSection; }
0277 MCSection *getCompactUnwindSection() const { return CompactUnwindSection; }
0278 MCSection *getDwarfAbbrevSection() const { return DwarfAbbrevSection; }
0279 MCSection *getDwarfInfoSection() const { return DwarfInfoSection; }
0280 MCSection *getDwarfInfoSection(uint64_t Hash) const {
0281 return getDwarfComdatSection(".debug_info", Hash);
0282 }
0283 MCSection *getDwarfLineSection() const { return DwarfLineSection; }
0284 MCSection *getDwarfLineStrSection() const { return DwarfLineStrSection; }
0285 MCSection *getDwarfFrameSection() const { return DwarfFrameSection; }
0286 MCSection *getDwarfPubNamesSection() const { return DwarfPubNamesSection; }
0287 MCSection *getDwarfPubTypesSection() const { return DwarfPubTypesSection; }
0288 MCSection *getDwarfGnuPubNamesSection() const {
0289 return DwarfGnuPubNamesSection;
0290 }
0291 MCSection *getDwarfGnuPubTypesSection() const {
0292 return DwarfGnuPubTypesSection;
0293 }
0294 const MCSection *getDwarfDebugInlineSection() const {
0295 return DwarfDebugInlineSection;
0296 }
0297 MCSection *getDwarfStrSection() const { return DwarfStrSection; }
0298 MCSection *getDwarfLocSection() const { return DwarfLocSection; }
0299 MCSection *getDwarfARangesSection() const { return DwarfARangesSection; }
0300 MCSection *getDwarfRangesSection() const { return DwarfRangesSection; }
0301 MCSection *getDwarfRnglistsSection() const { return DwarfRnglistsSection; }
0302 MCSection *getDwarfLoclistsSection() const { return DwarfLoclistsSection; }
0303 MCSection *getDwarfMacinfoSection() const { return DwarfMacinfoSection; }
0304 MCSection *getDwarfMacroSection() const { return DwarfMacroSection; }
0305
0306 MCSection *getDwarfDebugNamesSection() const {
0307 return DwarfDebugNamesSection;
0308 }
0309 MCSection *getDwarfAccelNamesSection() const {
0310 return DwarfAccelNamesSection;
0311 }
0312 MCSection *getDwarfAccelObjCSection() const { return DwarfAccelObjCSection; }
0313 MCSection *getDwarfAccelNamespaceSection() const {
0314 return DwarfAccelNamespaceSection;
0315 }
0316 MCSection *getDwarfAccelTypesSection() const {
0317 return DwarfAccelTypesSection;
0318 }
0319 MCSection *getDwarfInfoDWOSection() const { return DwarfInfoDWOSection; }
0320 MCSection *getDwarfTypesSection(uint64_t Hash) const {
0321 return getDwarfComdatSection(".debug_types", Hash);
0322 }
0323 MCSection *getDwarfTypesDWOSection() const { return DwarfTypesDWOSection; }
0324 MCSection *getDwarfAbbrevDWOSection() const { return DwarfAbbrevDWOSection; }
0325 MCSection *getDwarfStrDWOSection() const { return DwarfStrDWOSection; }
0326 MCSection *getDwarfLineDWOSection() const { return DwarfLineDWOSection; }
0327 MCSection *getDwarfLocDWOSection() const { return DwarfLocDWOSection; }
0328 MCSection *getDwarfStrOffDWOSection() const { return DwarfStrOffDWOSection; }
0329 MCSection *getDwarfStrOffSection() const { return DwarfStrOffSection; }
0330 MCSection *getDwarfAddrSection() const { return DwarfAddrSection; }
0331 MCSection *getDwarfRnglistsDWOSection() const {
0332 return DwarfRnglistsDWOSection;
0333 }
0334 MCSection *getDwarfLoclistsDWOSection() const {
0335 return DwarfLoclistsDWOSection;
0336 }
0337 MCSection *getDwarfMacroDWOSection() const { return DwarfMacroDWOSection; }
0338 MCSection *getDwarfMacinfoDWOSection() const {
0339 return DwarfMacinfoDWOSection;
0340 }
0341 MCSection *getDwarfCUIndexSection() const { return DwarfCUIndexSection; }
0342 MCSection *getDwarfTUIndexSection() const { return DwarfTUIndexSection; }
0343 MCSection *getDwarfSwiftASTSection() const { return DwarfSwiftASTSection; }
0344
0345 MCSection *getCOFFDebugSymbolsSection() const {
0346 return COFFDebugSymbolsSection;
0347 }
0348 MCSection *getCOFFDebugTypesSection() const {
0349 return COFFDebugTypesSection;
0350 }
0351 MCSection *getCOFFGlobalTypeHashesSection() const {
0352 return COFFGlobalTypeHashesSection;
0353 }
0354
0355 MCSection *getTLSExtraDataSection() const { return TLSExtraDataSection; }
0356 const MCSection *getTLSDataSection() const { return TLSDataSection; }
0357 MCSection *getTLSBSSSection() const { return TLSBSSSection; }
0358
0359 MCSection *getStackMapSection() const { return StackMapSection; }
0360 MCSection *getFaultMapSection() const { return FaultMapSection; }
0361 MCSection *getRemarksSection() const { return RemarksSection; }
0362
0363 MCSection *getStackSizesSection(const MCSection &TextSec) const;
0364
0365 MCSection *getBBAddrMapSection(const MCSection &TextSec) const;
0366
0367 MCSection *getKCFITrapSection(const MCSection &TextSec) const;
0368
0369 MCSection *getPseudoProbeSection(const MCSection &TextSec) const;
0370
0371 MCSection *getPseudoProbeDescSection(StringRef FuncName) const;
0372
0373 MCSection *getLLVMStatsSection() const;
0374
0375 MCSection *getPCSection(StringRef Name, const MCSection *TextSec) const;
0376
0377
0378 MCSection *getDataRelROSection() const { return DataRelROSection; }
0379 const MCSection *getMergeableConst4Section() const {
0380 return MergeableConst4Section;
0381 }
0382 const MCSection *getMergeableConst8Section() const {
0383 return MergeableConst8Section;
0384 }
0385 const MCSection *getMergeableConst16Section() const {
0386 return MergeableConst16Section;
0387 }
0388 const MCSection *getMergeableConst32Section() const {
0389 return MergeableConst32Section;
0390 }
0391
0392
0393 const MCSection *getTLSTLVSection() const { return TLSTLVSection; }
0394 const MCSection *getTLSThreadInitSection() const {
0395 return TLSThreadInitSection;
0396 }
0397 const MCSection *getCStringSection() const { return CStringSection; }
0398 const MCSection *getUStringSection() const { return UStringSection; }
0399 MCSection *getTextCoalSection() const { return TextCoalSection; }
0400 const MCSection *getConstTextCoalSection() const {
0401 return ConstTextCoalSection;
0402 }
0403 const MCSection *getConstDataSection() const { return ConstDataSection; }
0404 const MCSection *getDataCoalSection() const { return DataCoalSection; }
0405 const MCSection *getConstDataCoalSection() const {
0406 return ConstDataCoalSection;
0407 }
0408 const MCSection *getDataCommonSection() const { return DataCommonSection; }
0409 MCSection *getDataBSSSection() const { return DataBSSSection; }
0410 const MCSection *getFourByteConstantSection() const {
0411 return FourByteConstantSection;
0412 }
0413 const MCSection *getEightByteConstantSection() const {
0414 return EightByteConstantSection;
0415 }
0416 const MCSection *getSixteenByteConstantSection() const {
0417 return SixteenByteConstantSection;
0418 }
0419 MCSection *getLazySymbolPointerSection() const {
0420 return LazySymbolPointerSection;
0421 }
0422 MCSection *getNonLazySymbolPointerSection() const {
0423 return NonLazySymbolPointerSection;
0424 }
0425 MCSection *getThreadLocalPointerSection() const {
0426 return ThreadLocalPointerSection;
0427 }
0428 MCSection *getAddrSigSection() const { return AddrSigSection; }
0429
0430
0431 MCSection *getDrectveSection() const { return DrectveSection; }
0432 MCSection *getPDataSection() const { return PDataSection; }
0433 MCSection *getXDataSection() const { return XDataSection; }
0434 MCSection *getSXDataSection() const { return SXDataSection; }
0435 MCSection *getGEHContSection() const { return GEHContSection; }
0436 MCSection *getGFIDsSection() const { return GFIDsSection; }
0437 MCSection *getGIATsSection() const { return GIATsSection; }
0438 MCSection *getGLJMPSection() const { return GLJMPSection; }
0439
0440
0441 MCSection *getPPA1Section() const { return PPA1Section; }
0442 MCSection *getPPA2Section() const { return PPA2Section; }
0443 MCSection *getPPA2ListSection() const { return PPA2ListSection; }
0444 MCSection *getADASection() const { return ADASection; }
0445 MCSection *getIDRLSection() const { return IDRLSection; }
0446
0447
0448 MCSection *getTOCBaseSection() const { return TOCBaseSection; }
0449
0450 MCSection *getEHFrameSection() const { return EHFrameSection; }
0451
0452 bool isPositionIndependent() const { return PositionIndependent; }
0453
0454
0455 MCSection *getSwift5ReflectionSection(
0456 llvm::binaryformat::Swift5ReflectionSectionKind ReflSectionKind) {
0457 return ReflSectionKind !=
0458 llvm::binaryformat::Swift5ReflectionSectionKind::unknown
0459 ? Swift5ReflectionSections[ReflSectionKind]
0460 : nullptr;
0461 }
0462
0463 private:
0464 bool PositionIndependent = false;
0465 MCContext *Ctx = nullptr;
0466
0467 void initMachOMCObjectFileInfo(const Triple &T);
0468 void initELFMCObjectFileInfo(const Triple &T, bool Large);
0469 void initGOFFMCObjectFileInfo(const Triple &T);
0470 void initCOFFMCObjectFileInfo(const Triple &T);
0471 void initSPIRVMCObjectFileInfo(const Triple &T);
0472 void initWasmMCObjectFileInfo(const Triple &T);
0473 void initXCOFFMCObjectFileInfo(const Triple &T);
0474 void initDXContainerObjectFileInfo(const Triple &T);
0475 MCSection *getDwarfComdatSection(const char *Name, uint64_t Hash) const;
0476 };
0477
0478 }
0479
0480 #endif