forked from OSchip/llvm-project
Add support for assemblers that don't support periods in a name
llvm-svn: 102594
This commit is contained in:
parent
d65a1e782b
commit
b0a0a26df1
|
@ -97,7 +97,11 @@ namespace llvm {
|
|||
/// AllowNameToStartWithDigit - This is true if the assembler allows symbol
|
||||
/// names to start with a digit (e.g., "0x0021"). This defaults to false.
|
||||
bool AllowNameToStartWithDigit;
|
||||
|
||||
|
||||
/// AllowPeriodsInName - This is true if the assembler allows periods in
|
||||
/// symbol names. This defaults to true.
|
||||
bool AllowPeriodsInName;
|
||||
|
||||
//===--- Data Emission Directives -------------------------------------===//
|
||||
|
||||
/// ZeroDirective - this should be set to the directive used to get some
|
||||
|
@ -341,6 +345,9 @@ namespace llvm {
|
|||
bool doesAllowNameToStartWithDigit() const {
|
||||
return AllowNameToStartWithDigit;
|
||||
}
|
||||
bool doesAllowPeriodsInName() const {
|
||||
return AllowPeriodsInName;
|
||||
}
|
||||
const char *getZeroDirective() const {
|
||||
return ZeroDirective;
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ MCAsmInfo::MCAsmInfo() {
|
|||
AssemblerDialect = 0;
|
||||
AllowQuotesInName = false;
|
||||
AllowNameToStartWithDigit = false;
|
||||
AllowPeriodsInName = true;
|
||||
ZeroDirective = "\t.zero\t";
|
||||
AsciiDirective = "\t.ascii\t";
|
||||
AscizDirective = "\t.asciz\t";
|
||||
|
|
|
@ -22,11 +22,12 @@
|
|||
#include "llvm/ADT/Twine.h"
|
||||
using namespace llvm;
|
||||
|
||||
static bool isAcceptableChar(char C) {
|
||||
static bool isAcceptableChar(char C, bool AllowPeriod) {
|
||||
if ((C < 'a' || C > 'z') &&
|
||||
(C < 'A' || C > 'Z') &&
|
||||
(C < '0' || C > '9') &&
|
||||
C != '_' && C != '$' && C != '.' && C != '@')
|
||||
C != '_' && C != '$' && C != '@' &&
|
||||
!(AllowPeriod && C == '.'))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
@ -54,8 +55,9 @@ static bool NameNeedsEscaping(StringRef Str, const MCAsmInfo &MAI) {
|
|||
|
||||
// If any of the characters in the string is an unacceptable character, force
|
||||
// quotes.
|
||||
bool AllowPeriod = MAI.doesAllowPeriodsInName();
|
||||
for (unsigned i = 0, e = Str.size(); i != e; ++i)
|
||||
if (!isAcceptableChar(Str[i]))
|
||||
if (!isAcceptableChar(Str[i], AllowPeriod))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
@ -70,9 +72,10 @@ static void appendMangledName(SmallVectorImpl<char> &OutName, StringRef Str,
|
|||
MangleLetter(OutName, Str[0]);
|
||||
Str = Str.substr(1);
|
||||
}
|
||||
|
||||
|
||||
bool AllowPeriod = MAI.doesAllowPeriodsInName();
|
||||
for (unsigned i = 0, e = Str.size(); i != e; ++i) {
|
||||
if (!isAcceptableChar(Str[i]))
|
||||
if (!isAcceptableChar(Str[i], AllowPeriod))
|
||||
MangleLetter(OutName, Str[i]);
|
||||
else
|
||||
OutName.push_back(Str[i]);
|
||||
|
|
Loading…
Reference in New Issue