LLVM
20.0.0git
lib
Target
MSP430
MCTargetDesc
MSP430ELFStreamer.cpp
Go to the documentation of this file.
1
//===-- MSP430ELFStreamer.cpp - MSP430 ELF Target Streamer Methods --------===//
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
// This file provides MSP430 specific target streamer methods.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "
MSP430MCTargetDesc.h
"
14
#include "
llvm/BinaryFormat/ELF.h
"
15
#include "
llvm/MC/MCAssembler.h
"
16
#include "
llvm/MC/MCContext.h
"
17
#include "
llvm/MC/MCELFStreamer.h
"
18
#include "
llvm/MC/MCSectionELF.h
"
19
#include "
llvm/MC/MCStreamer.h
"
20
#include "
llvm/MC/MCSubtargetInfo.h
"
21
#include "
llvm/Support/MSP430Attributes.h
"
22
23
using namespace
llvm
;
24
using namespace
llvm::MSP430Attrs
;
25
26
namespace
llvm
{
27
28
class
MSP430TargetELFStreamer
:
public
MCTargetStreamer
{
29
public
:
30
MCELFStreamer
&
getStreamer
();
31
MSP430TargetELFStreamer
(
MCStreamer
&S,
const
MCSubtargetInfo
&STI);
32
};
33
34
// This part is for ELF object output.
35
MSP430TargetELFStreamer::MSP430TargetELFStreamer
(
MCStreamer
&S,
36
const
MCSubtargetInfo
&STI)
37
:
MCTargetStreamer
(S) {
38
// Emit build attributes section according to
39
// MSP430 EABI (slaa534.pdf, part 13).
40
MCSection
*AttributeSection =
getStreamer
().
getContext
().
getELFSection
(
41
".MSP430.attributes"
,
ELF::SHT_MSP430_ATTRIBUTES
, 0);
42
Streamer
.
switchSection
(AttributeSection);
43
44
// Format version.
45
Streamer
.
emitInt8
(0x41);
46
// Subsection length.
47
Streamer
.
emitInt32
(22);
48
// Vendor name string, zero-terminated.
49
Streamer
.
emitBytes
(
"mspabi"
);
50
Streamer
.
emitInt8
(0);
51
52
// Attribute vector scope tag. 1 stands for the entire file.
53
Streamer
.
emitInt8
(1);
54
// Attribute vector length.
55
Streamer
.
emitInt32
(11);
56
57
Streamer
.
emitInt8
(
TagISA
);
58
Streamer
.
emitInt8
(STI.
hasFeature
(MSP430::FeatureX) ?
ISAMSP430X
:
ISAMSP430
);
59
Streamer
.
emitInt8
(
TagCodeModel
);
60
Streamer
.
emitInt8
(
CMSmall
);
61
Streamer
.
emitInt8
(
TagDataModel
);
62
Streamer
.
emitInt8
(
DMSmall
);
63
// Don't emit TagEnumSize, for full GCC compatibility.
64
}
65
66
MCELFStreamer
&
MSP430TargetELFStreamer::getStreamer
() {
67
return
static_cast<
MCELFStreamer
&
>
(
Streamer
);
68
}
69
70
MCTargetStreamer
*
71
createMSP430ObjectTargetStreamer
(
MCStreamer
&S,
const
MCSubtargetInfo
&STI) {
72
const
Triple
&TT = STI.
getTargetTriple
();
73
if
(TT.isOSBinFormatELF())
74
return
new
MSP430TargetELFStreamer
(S, STI);
75
return
nullptr
;
76
}
77
78
}
// namespace llvm
ELF.h
MCAssembler.h
MCContext.h
MCELFStreamer.h
MCSectionELF.h
MCStreamer.h
MCSubtargetInfo.h
MSP430Attributes.h
This file contains enumerations for MSP430 ELF build attributes as defined in the MSP430 ELF psABI sp...
MSP430MCTargetDesc.h
llvm::MCContext::getELFSection
MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)
Definition:
MCContext.h:551
llvm::MCELFStreamer
Definition:
MCELFStreamer.h:32
llvm::MCSection
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition:
MCSection.h:36
llvm::MCStreamer
Streaming machine code generation interface.
Definition:
MCStreamer.h:213
llvm::MCStreamer::getContext
MCContext & getContext() const
Definition:
MCStreamer.h:300
llvm::MCStreamer::switchSection
virtual void switchSection(MCSection *Section, uint32_t Subsec=0)
Set the current section where code is being emitted to Section.
Definition:
MCStreamer.cpp:1259
llvm::MCStreamer::emitInt32
void emitInt32(uint64_t Value)
Definition:
MCStreamer.h:719
llvm::MCStreamer::emitInt8
void emitInt8(uint64_t Value)
Definition:
MCStreamer.h:717
llvm::MCStreamer::emitBytes
virtual void emitBytes(StringRef Data)
Emit the bytes in Data into the output.
Definition:
MCStreamer.cpp:1222
llvm::MCSubtargetInfo
Generic base class for all target subtargets.
Definition:
MCSubtargetInfo.h:76
llvm::MCSubtargetInfo::hasFeature
bool hasFeature(unsigned Feature) const
Definition:
MCSubtargetInfo.h:119
llvm::MCSubtargetInfo::getTargetTriple
const Triple & getTargetTriple() const
Definition:
MCSubtargetInfo.h:108
llvm::MCTargetStreamer
Target specific streamer interface.
Definition:
MCStreamer.h:94
llvm::MCTargetStreamer::Streamer
MCStreamer & Streamer
Definition:
MCStreamer.h:96
llvm::MSP430TargetELFStreamer
Definition:
MSP430ELFStreamer.cpp:28
llvm::MSP430TargetELFStreamer::MSP430TargetELFStreamer
MSP430TargetELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
Definition:
MSP430ELFStreamer.cpp:35
llvm::MSP430TargetELFStreamer::getStreamer
MCELFStreamer & getStreamer()
Definition:
MSP430ELFStreamer.cpp:66
llvm::Triple
Triple - Helper class for working with autoconf configuration names.
Definition:
Triple.h:44
llvm::ELF::SHT_MSP430_ATTRIBUTES
@ SHT_MSP430_ATTRIBUTES
Definition:
ELF.h:1167
llvm::MSP430Attrs
Definition:
MSP430Attributes.h:24
llvm::MSP430Attrs::TagDataModel
@ TagDataModel
Definition:
MSP430Attributes.h:32
llvm::MSP430Attrs::TagISA
@ TagISA
Definition:
MSP430Attributes.h:30
llvm::MSP430Attrs::TagCodeModel
@ TagCodeModel
Definition:
MSP430Attributes.h:31
llvm::MSP430Attrs::CMSmall
@ CMSmall
Definition:
MSP430Attributes.h:37
llvm::MSP430Attrs::ISAMSP430
@ ISAMSP430
Definition:
MSP430Attributes.h:36
llvm::MSP430Attrs::ISAMSP430X
@ ISAMSP430X
Definition:
MSP430Attributes.h:36
llvm::MSP430Attrs::DMSmall
@ DMSmall
Definition:
MSP430Attributes.h:38
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:
AddressRanges.h:18
llvm::createMSP430ObjectTargetStreamer
MCTargetStreamer * createMSP430ObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)
Definition:
MSP430ELFStreamer.cpp:71
Generated on Wed Nov 20 2024 08:42:50 for LLVM by
1.9.6