LLVM: lib/MC/MCAsmInfoXCOFF.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

16

17using namespace llvm;

18

19namespace llvm {

21}

22

49

51

52

53 if (C == '[' || C == ']')

54 return true;

55

56

57

58

59 return isAlnum(C) || C == '_' || C == '.';

60}

61

65

67

68void MCSectionXCOFF::printCsectDirective(raw_ostream &OS) const {

69 OS << "\t.csect " << QualName->getName() << "," << Log2(getAlign()) << '\n';

70}

71

75 auto &Sec = static_cast<const MCSectionXCOFF &>(Section);

76 if (Sec.getKind().isText()) {

78 report_fatal_error("Unhandled storage-mapping class for .text csect");

79

80 Sec.printCsectDirective(OS);

81 return;

82 }

83

84 if (Sec.getKind().isReadOnly()) {

87 report_fatal_error("Unhandled storage-mapping class for .rodata csect.");

88 Sec.printCsectDirective(OS);

89 return;

90 }

91

92 if (Sec.getKind().isReadOnlyWithRel()) {

97 "Unexepected storage-mapping class for ReadOnlyWithRel kind");

98 Sec.printCsectDirective(OS);

99 return;

100 }

101

102

103 if (Sec.getKind().isThreadData()) {

104

106 report_fatal_error("Unhandled storage-mapping class for .tdata csect.");

107 Sec.printCsectDirective(OS);

108 return;

109 }

110

111 if (Sec.getKind().isData()) {

112 switch (Sec.getMappingClass()) {

116 Sec.printCsectDirective(OS);

117 break;

120 break;

122 OS << "\t.toc\n";

123 break;

124 default:

125 report_fatal_error("Unhandled storage-mapping class for .data csect.");

126 }

127 return;

128 }

129

130 if (Sec.isCsect() && Sec.getMappingClass() == XCOFF::XMC_TD) {

131

132

133 if (Sec.getKind().isCommon() && !Sec.getKind().isBSSLocal())

134 return;

135

136 assert(Sec.getKind().isBSS() && "Unexpected section kind for toc-data");

137 Sec.printCsectDirective(OS);

138 return;

139 }

140

141

142 if (Sec.isCsect() && Sec.getCSectType() == XCOFF::XTY_CM) {

146 "Generated a storage-mapping class for a common/bss/tbss csect we "

147 "don't "

148 "understand how to switch to.");

149

150

151

152

153 assert((Sec.getKind().isBSSLocal() || Sec.getKind().isCommon() ||

154 Sec.getKind().isThreadBSS()) &&

155 "wrong symbol type for .bss/.tbss csect");

156

157

158

159 return;

160 }

161

162

163

164 if (Sec.getKind().isThreadBSS()) {

165 Sec.printCsectDirective(OS);

166 return;

167 }

168

169

170 if (Sec.getKind().isMetadata() && Sec.isDwarfSect()) {

171 OS << "\n\t.dwsect " << format("0x%" PRIx32, *Sec.getDwarfSubtypeFlags())

172 << '\n';

173 OS << Sec.getName() << ':' << '\n';

174 return;

175 }

176

177 report_fatal_error("Printing for this SectionKind is unimplemented.");

178}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

void printSwitchToSection(const MCSection &, uint32_t, const Triple &, raw_ostream &) const final

Definition MCAsmInfoXCOFF.cpp:72

bool useCodeAlign(const MCSection &Sec) const final

Definition MCAsmInfoXCOFF.cpp:62

bool isAcceptableChar(char C) const override

Return true if C is an acceptable character inside a symbol name.

Definition MCAsmInfoXCOFF.cpp:50

MCAsmInfoXCOFF()

Definition MCAsmInfoXCOFF.cpp:23

const char * Data16bitsDirective

const char * AsciiDirective

This directive allows emission of an ascii string with the standard C escape characters embedded into...

ExceptionHandling ExceptionsType

Exception handling format for the target. Defaults to None.

StringRef PrivateGlobalPrefix

This prefix is used for globals like constant pool entries that are completely private to the ....

const char * Data32bitsDirective

LCOMM::LCOMMType LCOMMDirectiveAlignmentType

Describes if the .lcomm directive for the target supports an alignment argument and how it is interpr...

StringRef PrivateLabelPrefix

This prefix is used for labels for basic blocks.

bool HasDotTypeDotSizeDirective

True if the target has .type and .size directives, this is true for most ELF targets.

bool ParseInlineAsmUsingAsmParser

Use AsmParser to parse inlineAsm when UseIntegratedAssembler is not set.

bool COMMDirectiveAlignmentIsInBytes

True is .comm's and .lcomms optional alignment is to be specified in bytes instead of log2(n).

AsmCharLiteralSyntax CharacterLiteralSyntax

Form used for character literals in the assembly syntax.

const char * ZeroDirective

This should be set to the directive used to get some number of zero (and non-zero if supported by the...

bool SupportsQuotedNames

If this is true, symbol names with invalid characters will be printed in quotes.

const char * AscizDirective

If not null, this allows for special handling of zero terminated strings on this target.

bool IsLittleEndian

True if target is little endian. Default is true.

@ ACLS_SingleQuotePrefix

Unknown; character literals not used by LLVM for this target.

bool HasLEB128Directives

True if the target supports LEB128 directives.

Instances of this class represent a uniqued identifier for a section in the current translation unit.

StringRef getName() const

getName - Get the symbol name.

Triple - Helper class for working with autoconf configuration names.

This class implements an extremely fast bulk output stream that can only output to a stream.

@ C

The default llvm calling convention, compatible with C.

@ XMC_TE

Symbol mapped at the end of TOC.

@ XMC_TC0

TOC Anchor for TOC Addressability.

@ XMC_DS

Descriptor csect.

@ XMC_TL

Initialized thread-local variable.

@ XMC_RO

Read Only Constant.

@ XMC_TD

Scalar data item in the TOC.

@ XMC_UL

Uninitialized thread-local variable.

@ XMC_BS

BSS class (uninitialized static internal)

@ XMC_TC

General TOC item.

@ XTY_CM

Common csect definition. For uninitialized storage.

This is an optimization pass for GlobalISel generic memory operations.

@ AIX

AIX Exception Handling.

LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)

bool isAlnum(char C)

Checks whether character C is either a decimal digit or an uppercase or lowercase letter as classifie...

format_object< Ts... > format(const char *Fmt, const Ts &... Vals)

These are helper functions used to produce formatted output.

cl::opt< cl::boolOrDefault > UseLEB128Directives("use-leb128-directives", cl::Hidden, cl::desc("Disable the usage of LEB128 directives, and generate .byte instead."), cl::init(cl::BOU_UNSET))

Definition MCAsmInfoXCOFF.cpp:20

unsigned Log2(Align A)

Returns the log2 of the alignment.