diff options
author | Kevin Enderby <enderby@apple.com> | 2013-08-28 17:50:59 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2013-08-28 17:50:59 +0000 |
commit | 4f066b6db8a7a95b206725aecf99a64fd6e9415c (patch) | |
tree | 76d28f54ec99c6c9b5e2bd3bc95b2d154e26bf76 /test/MC/MachO | |
parent | 980879e618d32f7516aa3bbf1ee084b06e52d0ef (diff) | |
download | llvm-4f066b6db8a7a95b206725aecf99a64fd6e9415c.tar.gz llvm-4f066b6db8a7a95b206725aecf99a64fd6e9415c.tar.bz2 llvm-4f066b6db8a7a95b206725aecf99a64fd6e9415c.tar.xz |
The integrated darwin assembler can hang in an infinite loop (or get an assert
with a debug build) with this buggy .indirect_symbol directive usage:
% cat test.s
x: .indirect_symbol _y
The assertion is because it is trying to get the symbol index for the
symbol _y when it is writing out the indirect symbol table. This line of
code in MachObjectWriter::WriteObject() :
Write32(Asm.getSymbolData(*it->Symbol).getIndex());
And while there is a symbol _y it does not have any getSymbolData set which
is only done in MachObjectWriter::BindIndirectSymbols() for pointer sections
or stub sections. I added a check and an error in there to catch this in case
something slips through.
But to get a better error the parser should detect when a .indirect_symbol
directive is used and it is not in a pointer section or stub section. To make
that work I moved the handling of the indirect symbol out of the target
independent AsmParser code into the DarwinAsmParser code that can check
for the proper Mach-O section types.
rdar://14825505
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189497 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/MachO')
-rw-r--r-- | test/MC/MachO/bad-indirect-symbols.s | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/test/MC/MachO/bad-indirect-symbols.s b/test/MC/MachO/bad-indirect-symbols.s new file mode 100644 index 0000000000..7c16e90522 --- /dev/null +++ b/test/MC/MachO/bad-indirect-symbols.s @@ -0,0 +1,5 @@ +// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s -filetype=obj -o - 2> %t.err > %t +// RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s + +x: .indirect_symbol _y +// CHECK-ERROR: 4:4: error: indirect symbol not in a symbol pointer or stub section |