Handle \n's in value names for more targets. The asm printers

really really really need refactoring :(



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47171 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-02-15 19:04:54 +00:00
parent 3502d0dac3
commit ec321b4d64
3 changed files with 40 additions and 13 deletions

View File

@ -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

View File

@ -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!

View File

@ -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";