mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
Fix a crash with X86 Mach-O and a subtraction expression where both symbols are
undefined and produce an error message instead as this is a non-relocatable expression with X86 Mach-O. rdar://8920876 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188218 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4f96b7e147
commit
ebc573ed5b
@ -175,6 +175,11 @@ void X86MachObjectWriter::RecordX86_64Relocation(MachObjectWriter *Writer,
|
||||
if (A_Base == B_Base && A_Base)
|
||||
report_fatal_error("unsupported relocation with identical base");
|
||||
|
||||
// A subtraction expression where both symbols are undefined is a
|
||||
// non-relocatable expression.
|
||||
if (A->isUndefined() && B->isUndefined())
|
||||
report_fatal_error("unsupported relocation with subtraction expression");
|
||||
|
||||
Value += Writer->getSymbolAddress(&A_SD, Layout) -
|
||||
(A_Base == NULL ? 0 : Writer->getSymbolAddress(A_Base, Layout));
|
||||
Value -= Writer->getSymbolAddress(&B_SD, Layout) -
|
||||
|
5
test/MC/MachO/bad-darwin-x86_64-diff-relocs.s
Normal file
5
test/MC/MachO/bad-darwin-x86_64-diff-relocs.s
Normal file
@ -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
|
||||
|
||||
.quad _foo - _bar
|
||||
// CHECK-ERROR: unsupported relocation with subtraction expression
|
Loading…
Reference in New Issue
Block a user