<div dir="ltr">The official GNU Assembler documentation seems to say that quotes in section names are fine:<div><br></div><div>"To generate a symbol name containing multibyte characters enclose it within double quotes and use escape codes. [1]"<br>
</div><div><br></div><div>[1] <a href="https://sourceware.org/binutils/docs/as/Symbol-Names.html">https://sourceware.org/binutils/docs/as/Symbol-Names.html</a></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Wed, Oct 16, 2013 at 1:22 AM, NAKAMURA Takumi <span dir="ltr"><<a href="mailto:geek4civic@gmail.com" target="_blank">geek4civic@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: chapuni<br>
Date: Wed Oct 16 03:22:49 2013<br>
New Revision: 192775<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=192775&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=192775&view=rev</a><br>
Log:<br>
Revert r192758 (and r192759), "MC: Better handling of tricky symbol and section names"<br>
<br>
GNU AS didn't like quotes in symbol names.<br>
<br>
Error: junk at end of line, first unrecognized character is `"'<br>
<br>
.def "@feat.00";<br>
"@feat.00" = 1<br>
<br>
Reproduced on Cygwin's 2.23.52.20130309 and mingw32's 2.20.1.20100303.<br>
<br>
Removed:<br>
llvm/trunk/test/MC/COFF/quoted-names.ll<br>
Modified:<br>
llvm/trunk/lib/MC/MCParser/AsmParser.cpp<br>
llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp<br>
llvm/trunk/lib/MC/MCSectionCOFF.cpp<br>
llvm/trunk/lib/MC/MCSymbol.cpp<br>
llvm/trunk/test/CodeGen/X86/coff-feat00.ll<br>
llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll<br>
llvm/trunk/test/CodeGen/X86/stdcall.ll<br>
<br>
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Wed Oct 16 03:22:49 2013<br>
@@ -792,25 +792,19 @@ bool AsmParser::parsePrimaryExpr(const M<br>
EndLoc = SMLoc::getFromPointer(Identifier.end());<br>
<br>
// This is a symbol reference.<br>
- StringRef SymbolName = Identifier;<br>
- MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;<br>
std::pair<StringRef, StringRef> Split = Identifier.split('@');<br>
-<br>
- if (Split.first.size() != Identifier.size() &&<br>
- FirstTokenKind != AsmToken::String) {<br>
- SymbolName = Split.first;<br>
- StringRef VariantName = Split.second;<br>
+ MCSymbol *Sym = getContext().GetOrCreateSymbol(Split.first);<br>
<br>
- // Lookup the symbol variant.<br>
- Variant = MCSymbolRefExpr::getVariantKindForName(VariantName);<br>
+ // Lookup the symbol variant if used.<br>
+ MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;<br>
+ if (Split.first.size() != Identifier.size()) {<br>
+ Variant = MCSymbolRefExpr::getVariantKindForName(Split.second);<br>
if (Variant == MCSymbolRefExpr::VK_Invalid) {<br>
Variant = MCSymbolRefExpr::VK_None;<br>
- return TokError("invalid variant '" + VariantName + "'");<br>
+ return TokError("invalid variant '" + Split.second + "'");<br>
}<br>
}<br>
<br>
- MCSymbol *Sym = getContext().GetOrCreateSymbol(SymbolName);<br>
-<br>
// If this is an absolute variable reference, substitute it now to preserve<br>
// semantics in the face of reassignment.<br>
if (Sym->isVariable() && isa<MCConstantExpr>(Sym->getVariableValue())) {<br>
<br>
Modified: llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp Wed Oct 16 03:22:49 2013<br>
@@ -295,7 +295,12 @@ bool COFFAsmParser::ParseSectionSwitch(S<br>
}<br>
<br>
bool COFFAsmParser::ParseSectionName(StringRef &SectionName) {<br>
- return getParser().parseIdentifier(SectionName);<br>
+ if (!getLexer().is(AsmToken::Identifier))<br>
+ return true;<br>
+<br>
+ SectionName = getTok().getIdentifier();<br>
+ Lex();<br>
+ return false;<br>
}<br>
<br>
// .section name [, "flags"]<br>
<br>
Modified: llvm/trunk/lib/MC/MCSectionCOFF.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionCOFF.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionCOFF.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/MC/MCSectionCOFF.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCSectionCOFF.cpp Wed Oct 16 03:22:49 2013<br>
@@ -39,22 +39,6 @@ void MCSectionCOFF::setSelection(int Sel<br>
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;<br>
}<br>
<br>
-static bool isAcceptableSectionNameChar(char C) {<br>
- return (C >= 'a' && C <= 'z') ||<br>
- (C >= 'A' && C <= 'Z') ||<br>
- (C >= '0' && C <= '9') ||<br>
- C == '_' || C == '$' || C == '.';<br>
-}<br>
-<br>
-/// NameNeedsQuoting - Return true if the identifier \p Str needs quotes to be<br>
-/// syntactically correct.<br>
-static bool sectionNameNeedsQuoting(StringRef Name) {<br>
- for (unsigned i = 0, e = Name.size(); i != e; ++i)<br>
- if (!isAcceptableSectionNameChar(Name[i]))<br>
- return true;<br>
- return false;<br>
-}<br>
-<br>
void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,<br>
raw_ostream &OS,<br>
const MCExpr *Subsection) const {<br>
@@ -65,10 +49,7 @@ void MCSectionCOFF::PrintSwitchToSection<br>
return;<br>
}<br>
<br>
- if (sectionNameNeedsQuoting(getSectionName()))<br>
- OS << "\t.section\t" << '"' << getSectionName() << '"' << ",\"";<br>
- else<br>
- OS << "\t.section\t" << getSectionName() << ",\"";<br>
+ OS << "\t.section\t" << getSectionName() << ",\"";<br>
if (getKind().isText())<br>
OS << 'x';<br>
if (getKind().isWriteable())<br>
<br>
Modified: llvm/trunk/lib/MC/MCSymbol.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSymbol.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSymbol.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/MC/MCSymbol.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCSymbol.cpp Wed Oct 16 03:22:49 2013<br>
@@ -18,10 +18,12 @@ const MCSection *MCSymbol::AbsolutePseud<br>
reinterpret_cast<const MCSection *>(1);<br>
<br>
static bool isAcceptableChar(char C) {<br>
- return (C >= 'a' && C <= 'z') ||<br>
- (C >= 'A' && C <= 'Z') ||<br>
- (C >= '0' && C <= '9') ||<br>
- C == '_' || C == '$' || C == '.';<br>
+ if ((C < 'a' || C > 'z') &&<br>
+ (C < 'A' || C > 'Z') &&<br>
+ (C < '0' || C > '9') &&<br>
+ C != '_' && C != '$' && C != '.' && C != '@')<br>
+ return false;<br>
+ return true;<br>
}<br>
<br>
/// NameNeedsQuoting - Return true if the identifier \p Str needs quotes to be<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/coff-feat00.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coff-feat00.ll?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coff-feat00.ll?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/coff-feat00.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/coff-feat00.ll Wed Oct 16 03:22:49 2013<br>
@@ -4,4 +4,4 @@ define i32 @foo() {<br>
ret i32 0<br>
}<br>
<br>
-; CHECK: "@feat.00" = 1<br>
+; CHECK: @feat.00 = 1<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll Wed Oct 16 03:22:49 2013<br>
@@ -3,7 +3,7 @@<br>
; Check that a fastcall function gets correct mangling<br>
<br>
define x86_fastcallcc void @func(i64 %X, i8 %Y, i8 %G, i16 %Z) {<br>
-; CHECK: "@func@20":<br>
+; CHECK: @func@20:<br>
ret void<br>
}<br>
<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/stdcall.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stdcall.ll?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stdcall.ll?rev=192775&r1=192774&r2=192775&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/stdcall.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/stdcall.ll Wed Oct 16 03:22:49 2013<br>
@@ -5,7 +5,7 @@<br>
<br>
define internal x86_stdcallcc void @MyFunc() nounwind {<br>
entry:<br>
-; CHECK: "_MyFunc@0":<br>
+; CHECK: MyFunc@0:<br>
; CHECK: ret<br>
ret void<br>
}<br>
@@ -20,5 +20,5 @@ entry:<br>
<br>
@B = global %0 { void (...)* bitcast (void ()* @MyFunc to void (...)*) }, align 4<br>
; CHECK: _B:<br>
-; CHECK: .long "_MyFunc@0"<br>
+; CHECK: .long _MyFunc@0<br>
<br>
<br>
Removed: llvm/trunk/test/MC/COFF/quoted-names.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/quoted-names.ll?rev=192774&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/quoted-names.ll?rev=192774&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/MC/COFF/quoted-names.ll (original)<br>
+++ llvm/trunk/test/MC/COFF/quoted-names.ll (removed)<br>
@@ -1,20 +0,0 @@<br>
-; Check that certain symbol and section names are quoted in the asm output.<br>
-; RUN: llc -mtriple=i686-pc-win32 %s -o - | FileCheck %s<br>
-<br>
-; Check that the symbol and section names can round-trip through the assembler.<br>
-; RUN: llc -mtriple=i686-pc-win32 %s -o - | llvm-mc -triple i686-pc-win32 -filetype=obj | llvm-readobj -s -section-symbols | FileCheck %s --check-prefix=READOBJ<br>
-<br>
-@"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ" = global i32 0<br>
-<br>
-define weak i32 @"\01??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"() section ".text" {<br>
- %res = load i32* @"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ"<br>
- ret i32 %res<br>
-}<br>
-<br>
-; CHECK: .section ".text$??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51","xr"<br>
-; CHECK: .globl "??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"<br>
-; CHECK: "??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"<br>
-<br>
-; READOBJ: Symbol<br>
-; READOBJ: Name: ??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51<br>
-; READOBJ: Section: .text$??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>