1 //===- MCSectionWasm.h - Wasm Machine Code Sections -------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file declares the MCSectionWasm class.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_MC_MCSECTIONWASM_H
14 #define LLVM_MC_MCSECTIONWASM_H
16 #include "llvm/ADT/Twine.h"
17 #include "llvm/MC/MCSection.h"
18 #include "llvm/MC/MCSymbolWasm.h"
19 #include "llvm/Support/Debug.h"
20 #include "llvm/Support/raw_ostream.h"
26 /// This represents a section on wasm.
27 class MCSectionWasm final
: public MCSection
{
28 /// This is the name of the section. The referenced memory is owned by
29 /// TargetLoweringObjectFileWasm's WasmUniqueMap.
30 StringRef SectionName
;
34 const MCSymbolWasm
*Group
;
36 // The offset of the MC function/data section in the wasm code/data section.
37 // For data relocations the offset is relative to start of the data payload
38 // itself and does not include the size of the section header.
39 uint64_t SectionOffset
= 0;
41 // For data sections, this is the index of of the corresponding wasm data
43 uint32_t SegmentIndex
= 0;
45 // Whether this data segment is passive
46 bool IsPassive
= false;
48 friend class MCContext
;
49 MCSectionWasm(StringRef Section
, SectionKind K
, const MCSymbolWasm
*group
,
50 unsigned UniqueID
, MCSymbol
*Begin
)
51 : MCSection(SV_Wasm
, K
, Begin
), SectionName(Section
), UniqueID(UniqueID
),
55 /// Decides whether a '.section' directive should be printed before the
57 bool shouldOmitSectionDirective(StringRef Name
, const MCAsmInfo
&MAI
) const;
59 StringRef
getSectionName() const { return SectionName
; }
60 const MCSymbolWasm
*getGroup() const { return Group
; }
62 void PrintSwitchToSection(const MCAsmInfo
&MAI
, const Triple
&T
,
64 const MCExpr
*Subsection
) const override
;
65 bool UseCodeAlign() const override
;
66 bool isVirtualSection() const override
;
68 bool isWasmData() const {
69 return Kind
.isGlobalWriteableData() || Kind
.isReadOnly() ||
73 bool isUnique() const { return UniqueID
!= ~0U; }
74 unsigned getUniqueID() const { return UniqueID
; }
76 uint64_t getSectionOffset() const { return SectionOffset
; }
77 void setSectionOffset(uint64_t Offset
) { SectionOffset
= Offset
; }
79 uint32_t getSegmentIndex() const { return SegmentIndex
; }
80 void setSegmentIndex(uint32_t Index
) { SegmentIndex
= Index
; }
82 bool getPassive() const {
86 void setPassive(bool V
= true) {
90 static bool classof(const MCSection
*S
) { return S
->getVariant() == SV_Wasm
; }
93 } // end namespace llvm