Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.h
35294 views
1
//===-- RISCVELFStreamer.h - RISC-V ELF Target Streamer ---------*- C++ -*-===//
2
//
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
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVELFSTREAMER_H
10
#define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVELFSTREAMER_H
11
12
#include "RISCVTargetStreamer.h"
13
#include "llvm/MC/MCELFStreamer.h"
14
15
using namespace llvm;
16
17
class RISCVELFStreamer : public MCELFStreamer {
18
void reset() override;
19
void emitDataMappingSymbol();
20
void emitInstructionsMappingSymbol();
21
void emitMappingSymbol(StringRef Name);
22
23
enum ElfMappingSymbol { EMS_None, EMS_Instructions, EMS_Data };
24
25
DenseMap<const MCSection *, ElfMappingSymbol> LastMappingSymbols;
26
ElfMappingSymbol LastEMS = EMS_None;
27
28
public:
29
RISCVELFStreamer(MCContext &C, std::unique_ptr<MCAsmBackend> MAB,
30
std::unique_ptr<MCObjectWriter> MOW,
31
std::unique_ptr<MCCodeEmitter> MCE)
32
: MCELFStreamer(C, std::move(MAB), std::move(MOW), std::move(MCE)) {}
33
34
void changeSection(MCSection *Section, uint32_t Subsection) override;
35
void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override;
36
void emitBytes(StringRef Data) override;
37
void emitFill(const MCExpr &NumBytes, uint64_t FillValue, SMLoc Loc) override;
38
void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override;
39
};
40
41
namespace llvm {
42
43
class RISCVTargetELFStreamer : public RISCVTargetStreamer {
44
private:
45
StringRef CurrentVendor;
46
47
MCSection *AttributeSection = nullptr;
48
49
void emitAttribute(unsigned Attribute, unsigned Value) override;
50
void emitTextAttribute(unsigned Attribute, StringRef String) override;
51
void emitIntTextAttribute(unsigned Attribute, unsigned IntValue,
52
StringRef StringValue) override;
53
void finishAttributeSection() override;
54
55
void reset() override;
56
57
public:
58
RISCVELFStreamer &getStreamer();
59
RISCVTargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI);
60
61
void emitDirectiveOptionPush() override;
62
void emitDirectiveOptionPop() override;
63
void emitDirectiveOptionPIC() override;
64
void emitDirectiveOptionNoPIC() override;
65
void emitDirectiveOptionRVC() override;
66
void emitDirectiveOptionNoRVC() override;
67
void emitDirectiveOptionRelax() override;
68
void emitDirectiveOptionNoRelax() override;
69
void emitDirectiveVariantCC(MCSymbol &Symbol) override;
70
71
void finish() override;
72
};
73
74
MCELFStreamer *createRISCVELFStreamer(MCContext &C,
75
std::unique_ptr<MCAsmBackend> MAB,
76
std::unique_ptr<MCObjectWriter> MOW,
77
std::unique_ptr<MCCodeEmitter> MCE);
78
}
79
#endif
80
81