diff options
author | Hans Wennborg <hans@hanshq.net> | 2013-10-17 01:13:02 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2013-10-17 01:13:02 +0000 |
commit | b74b88edac9ab490ba428aef0bdebc957399bbd7 (patch) | |
tree | 58dfe9bdbad54da6018b7a8159f9283d9179bce0 /test/MC/COFF | |
parent | 88a68cbbb57aa9caef60dbd2f63d908983e77465 (diff) |
Re-commit r192758 - MC: quote tricky symbol names in asm output
The reason this got reverted was that the @feat.00 symbol which was emitted
for every TU became quoted, and on cygwin/mingw we use the gas assembler which
couldn't handle the quotes.
This commit fixes the problem by only emitting @feat.00 for win32, where we use
clang -cc1as to assemble. gas would just drop this symbol anyway, so there is no
loss there.
With @feat.00 gone, there shouldn't be quoted symbols showing up on cygwin since
it uses the Itanium ABI, which doesn't put these funny characters in symbols.
> Because of win32 mangling, we produce symbol and section names with
> funny characters in them, most notably @ characters.
>
> MC would choke on trying to parse its own assembly output. This patch addresses
> that by:
>
> - Making @ trigger quoting of symbol names
> - Also quote section names in the same way
> - Just parse section names like other identifiers (to allow for quotes)
> - Don't assume @ signifies a symbol variant if it is in a string.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192859 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/COFF')
-rw-r--r-- | test/MC/COFF/quoted-names.ll | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/MC/COFF/quoted-names.ll b/test/MC/COFF/quoted-names.ll new file mode 100644 index 00000000000..920035f555b --- /dev/null +++ b/test/MC/COFF/quoted-names.ll @@ -0,0 +1,20 @@ +; Check that certain symbol and section names are quoted in the asm output. +; RUN: llc -mtriple=i686-pc-win32 %s -o - | FileCheck %s + +; Check that the symbol and section names can round-trip through the assembler. +; 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 + +@"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ" = global i32 0 + +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" { + %res = load i32* @"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ" + ret i32 %res +} + +; 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" +; 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" +; CHECK: "??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51" + +; READOBJ: Symbol +; 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 +; 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 |