1 //===- lib/MC/MCSectionWasm.cpp - Wasm Code Section Representation --------===//
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 #include "llvm/MC/MCSectionWasm.h"
10 #include "llvm/MC/MCAsmInfo.h"
11 #include "llvm/MC/MCExpr.h"
12 #include "llvm/MC/MCSymbolWasm.h"
13 #include "llvm/Support/raw_ostream.h"
17 // Decides whether a '.section' directive
18 // should be printed before the section name.
19 bool MCSectionWasm::shouldOmitSectionDirective(StringRef Name
,
20 const MCAsmInfo
&MAI
) const {
21 return MAI
.shouldOmitSectionDirective(Name
);
24 static void printName(raw_ostream
&OS
, StringRef Name
) {
25 if (Name
.find_first_not_of("0123456789_."
26 "abcdefghijklmnopqrstuvwxyz"
27 "ABCDEFGHIJKLMNOPQRSTUVWXYZ") == Name
.npos
) {
32 for (const char *B
= Name
.begin(), *E
= Name
.end(); B
< E
; ++B
) {
33 if (*B
== '"') // Unquoted "
35 else if (*B
!= '\\') // Neither " or backslash
37 else if (B
+ 1 == E
) // Trailing backslash
40 OS
<< B
[0] << B
[1]; // Quoted character
47 void MCSectionWasm::printSwitchToSection(const MCAsmInfo
&MAI
, const Triple
&T
,
49 uint32_t Subsection
) const {
51 if (shouldOmitSectionDirective(getName(), MAI
)) {
52 OS
<< '\t' << getName();
54 OS
<< '\t' << Subsection
;
60 printName(OS
, getName());
67 if (SegmentFlags
& wasm::WASM_SEG_FLAG_STRINGS
)
69 if (SegmentFlags
& wasm::WASM_SEG_FLAG_TLS
)
71 if (SegmentFlags
& wasm::WASM_SEG_FLAG_RETAIN
)
78 // If comment string is '@', e.g. as on ARM - use '%' instead
79 if (MAI
.getCommentString()[0] == '@')
84 // TODO: Print section type.
88 printName(OS
, Group
->getName());
93 OS
<< ",unique," << UniqueID
;
98 OS
<< "\t.subsection\t" << Subsection
<< '\n';
101 bool MCSectionWasm::useCodeAlign() const { return false; }