/// Defaults to false.
bool AllowAtInName;
+ /// If this is true, symbol names will not attempt to be quoted when printed.
+ bool NoSymbolNameQuoting;
+
/// This is true if data region markers should be printed as
/// ".data_region/.end_data_region" directives. If false, use "$d/$a" labels
/// instead.
const char *getCode64Directive() const { return Code64Directive; }
unsigned getAssemblerDialect() const { return AssemblerDialect; }
bool doesAllowAtInName() const { return AllowAtInName; }
+ bool noSymbolNameQuoting() const { return NoSymbolNameQuoting; }
bool doesSupportDataRegionDirectives() const {
return UseDataRegionDirectives;
}
/// "Lfoo" or ".foo".
unsigned IsTemporary : 1;
+ /// True if the name should be quoted if "unacceptable" characters are used
+ /// in the name.
+ unsigned NoQuoting : 1;
+
/// \brief True if this symbol can be redefined.
unsigned IsRedefinable : 1;
private: // MCContext creates and uniques these.
friend class MCExpr;
friend class MCContext;
- MCSymbol(StringRef name, bool isTemporary)
+ MCSymbol(StringRef name, bool isTemporary, bool noQuoting)
: Name(name), Section(nullptr), Value(nullptr),
- IsTemporary(isTemporary), IsRedefinable(false), IsUsed(false) {}
+ IsTemporary(isTemporary), NoQuoting(noQuoting),
+ IsRedefinable(false), IsUsed(false) {}
MCSymbol(const MCSymbol&) = delete;
void operator=(const MCSymbol&) = delete;
Code64Directive = ".code64";
AssemblerDialect = 0;
AllowAtInName = false;
+ NoSymbolNameQuoting = false;
UseDataRegionDirectives = false;
ZeroDirective = "\t.zero\t";
AsciiDirective = "\t.ascii\t";
}
auto NameIter = UsedNames.insert(std::make_pair(Name, true)).first;
- Sym = new (*this) MCSymbol(NameIter->getKey(), /*isTemporary*/ false);
+ Sym = new (*this) MCSymbol(NameIter->getKey(), /*isTemporary*/ false,
+ MAI->noSymbolNameQuoting());
if (!OldSym)
OldSym = Sym;
// Ok, we found a name. Have the MCSymbol object itself refer to the copy
// of the string that is embedded in the UsedNames entry.
MCSymbol *Result =
- new (*this) MCSymbol(NameEntry.first->getKey(), IsTemporary);
+ new (*this) MCSymbol(NameEntry.first->getKey(), IsTemporary,
+ MAI->noSymbolNameQuoting());
return Result;
}
assert(IsTemporary && "Cannot rename non-temporary symbols");
// some targets support quoting names with funny characters. If the name
// contains a funny character, then print it quoted.
StringRef Name = getName();
- if (!NameNeedsQuoting(Name)) {
+ if (NoQuoting || !NameNeedsQuoting(Name)) {
OS << Name;
return;
}