mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
Handle \n's in value names for more targets. The asm printers
really really really need refactoring :( llvm-svn: 47171
This commit is contained in:
parent
cf98f7291b
commit
d55c26a77d
@ -807,6 +807,15 @@ bool ARMAsmPrinter::doInitialization(Module &M) {
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// PrintUnmangledNameSafely - Print out the printable characters in the name.
|
||||
/// Don't print things like \n or \0.
|
||||
static void PrintUnmangledNameSafely(const Value *V, std::ostream &OS) {
|
||||
for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen();
|
||||
Name != E; ++Name)
|
||||
if (isprint(*Name))
|
||||
OS << *Name;
|
||||
}
|
||||
|
||||
bool ARMAsmPrinter::doFinalization(Module &M) {
|
||||
const TargetData *TD = TM.getTargetData();
|
||||
|
||||
@ -875,7 +884,9 @@ bool ARMAsmPrinter::doFinalization(Module &M) {
|
||||
if (TAI->getCOMMDirectiveTakesAlignment())
|
||||
O << "," << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
|
||||
}
|
||||
O << "\t\t" << TAI->getCommentString() << " " << I->getName() << "\n";
|
||||
O << "\t\t" << TAI->getCommentString() << " ";
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "\n";
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -961,8 +972,9 @@ bool ARMAsmPrinter::doFinalization(Module &M) {
|
||||
}
|
||||
|
||||
EmitAlignment(Align, I);
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " " << I->getName()
|
||||
<< "\n";
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " ";
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "\n";
|
||||
if (TAI->hasDotTypeDotSizeDirective())
|
||||
O << "\t.size " << name << ", " << Size << "\n";
|
||||
// If the initializer is a extern weak symbol, remember to emit the weak
|
||||
|
@ -639,6 +639,15 @@ bool LinuxAsmPrinter::doInitialization(Module &M) {
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// PrintUnmangledNameSafely - Print out the printable characters in the name.
|
||||
/// Don't print things like \n or \0.
|
||||
static void PrintUnmangledNameSafely(const Value *V, std::ostream &OS) {
|
||||
for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen();
|
||||
Name != E; ++Name)
|
||||
if (isprint(*Name))
|
||||
OS << *Name;
|
||||
}
|
||||
|
||||
bool LinuxAsmPrinter::doFinalization(Module &M) {
|
||||
const TargetData *TD = TM.getTargetData();
|
||||
|
||||
@ -680,7 +689,9 @@ bool LinuxAsmPrinter::doFinalization(Module &M) {
|
||||
SwitchToDataSection("\t.data", I);
|
||||
O << ".comm " << name << "," << Size;
|
||||
}
|
||||
O << "\t\t" << TAI->getCommentString() << " '" << I->getName() << "'\n";
|
||||
O << "\t\t" << TAI->getCommentString() << " '";
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "'\n";
|
||||
} else {
|
||||
switch (I->getLinkage()) {
|
||||
case GlobalValue::LinkOnceLinkage:
|
||||
@ -727,8 +738,9 @@ bool LinuxAsmPrinter::doFinalization(Module &M) {
|
||||
}
|
||||
|
||||
EmitAlignment(Align, I);
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " '"
|
||||
<< I->getName() << "'\n";
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " '";
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "'\n";
|
||||
|
||||
// If the initializer is a extern weak symbol, remember to emit the weak
|
||||
// reference!
|
||||
@ -942,7 +954,9 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
|
||||
if (Subtarget.isDarwin9())
|
||||
O << "," << Align;
|
||||
}
|
||||
O << "\t\t" << TAI->getCommentString() << " '" << I->getName() << "'\n";
|
||||
O << "\t\t" << TAI->getCommentString() << " '";
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "'\n";
|
||||
} else {
|
||||
switch (I->getLinkage()) {
|
||||
case GlobalValue::LinkOnceLinkage:
|
||||
@ -999,8 +1013,9 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
|
||||
}
|
||||
|
||||
EmitAlignment(Align, I);
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " '"
|
||||
<< I->getName() << "'\n";
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " '";
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "'\n";
|
||||
|
||||
// If the initializer is a extern weak symbol, remember to emit the weak
|
||||
// reference!
|
||||
|
@ -138,9 +138,9 @@ bool X86SharedAsmPrinter::doInitialization(Module &M) {
|
||||
return Result;
|
||||
}
|
||||
|
||||
/// PrintUnamedNameSafely - Print out the printable characters in the name.
|
||||
/// PrintUnmangledNameSafely - Print out the printable characters in the name.
|
||||
/// Don't print things like \n or \0.
|
||||
static void PrintUnamedNameSafely(const Value *V, std::ostream &OS) {
|
||||
static void PrintUnmangledNameSafely(const Value *V, std::ostream &OS) {
|
||||
for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen();
|
||||
Name != E; ++Name)
|
||||
if (isprint(*Name))
|
||||
@ -228,7 +228,7 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
|
||||
O << "," << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
|
||||
}
|
||||
O << "\t\t" << TAI->getCommentString() << " ";
|
||||
PrintUnamedNameSafely(I, O);
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "\n";
|
||||
continue;
|
||||
}
|
||||
@ -331,7 +331,7 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
|
||||
|
||||
EmitAlignment(Align, I);
|
||||
O << name << ":\t\t\t\t" << TAI->getCommentString() << " ";
|
||||
PrintUnamedNameSafely(I, O);
|
||||
PrintUnmangledNameSafely(I, O);
|
||||
O << "\n";
|
||||
if (TAI->hasDotTypeDotSizeDirective())
|
||||
O << "\t.size\t" << name << ", " << Size << "\n";
|
||||
|
Loading…
Reference in New Issue
Block a user