summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2013-08-29 00:19:03 +0000
committerKevin Enderby <enderby@apple.com>2013-08-29 00:19:03 +0000
commit74946758a0cfbe5f1fe08aa9cfdebf21871cd267 (patch)
tree146686a4f583bf9781aa1013312f9dcbae780a55
parent8d5f31432e6e1f542baa917331bb5c271560c601 (diff)
downloadbcm5719-llvm-74946758a0cfbe5f1fe08aa9cfdebf21871cd267.tar.gz
bcm5719-llvm-74946758a0cfbe5f1fe08aa9cfdebf21871cd267.zip
The darwin integrated assembler for X86 in 64-bit mode is not rejecting
32-bit absolute addressing in instructions likei this: mov $_f, %rsi which is not supported in 64-bit mode. rdar://8827134 llvm-svn: 189543
-rw-r--r--llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp7
-rw-r--r--llvm/test/MC/MachO/bad-darwin-x86_64-32-bit-abs-addr.s5
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
index 6eff224e261..9db4cabb1ca 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
@@ -323,8 +323,13 @@ void X86MachObjectWriter::RecordX86_64Relocation(MachObjectWriter *Writer,
report_fatal_error("TLVP symbol modifier should have been rip-rel");
} else if (Modifier != MCSymbolRefExpr::VK_None)
report_fatal_error("unsupported symbol modifier in relocation");
- else
+ else {
Type = macho::RIT_X86_64_Unsigned;
+ unsigned Kind = Fixup.getKind();
+ if (Kind == X86::reloc_signed_4byte)
+ report_fatal_error("32-bit absolute addressing is not supported in "
+ "64-bit mode");
+ }
}
}
diff --git a/llvm/test/MC/MachO/bad-darwin-x86_64-32-bit-abs-addr.s b/llvm/test/MC/MachO/bad-darwin-x86_64-32-bit-abs-addr.s
new file mode 100644
index 00000000000..5fcd3162602
--- /dev/null
+++ b/llvm/test/MC/MachO/bad-darwin-x86_64-32-bit-abs-addr.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
+
+mov $_f, %rsi
+// CHECK-ERROR: 32-bit absolute addressing is not supported in 64-bit mode
OpenPOWER on IntegriCloud