summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnders Waldenborg <anders@0x63.nu>2014-02-17 20:48:32 +0000
committerAnders Waldenborg <anders@0x63.nu>2014-02-17 20:48:32 +0000
commit1410f7ffc63aa3ad4b7937491ef860d862846245 (patch)
tree78e8cf6c395e7b452c214cd6c19c0c3f8fcaa2aa /test
parent3457506fb9e5256fcc3c51ea3fd5bbd0221dead0 (diff)
downloadllvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.gz
llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.bz2
llvm-1410f7ffc63aa3ad4b7937491ef860d862846245.tar.xz
Add support for assigning to . in AsmParser.
This is implemented by handling assignments to the '.' pseudo symbol as ".org" directives. Differential Revision: http://llvm-reviews.chandlerc.com/D2625 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/MC/AsmParser/dot-symbol-assignment-backwards.s12
-rw-r--r--test/MC/AsmParser/dot-symbol-assignment.s31
-rw-r--r--test/MC/AsmParser/dot-symbol-non-absolute.s9
-rw-r--r--test/MC/AsmParser/dot-symbol.s5
-rw-r--r--test/MC/ELF/dot-symbol-assignment.s22
5 files changed, 75 insertions, 4 deletions
diff --git a/test/MC/AsmParser/dot-symbol-assignment-backwards.s b/test/MC/AsmParser/dot-symbol-assignment-backwards.s
new file mode 100644
index 0000000000..2619788203
--- /dev/null
+++ b/test/MC/AsmParser/dot-symbol-assignment-backwards.s
@@ -0,0 +1,12 @@
+# RUN: not llvm-mc -filetype=obj -triple i386-unknown-unknown %s 2> %t
+# RUN: FileCheck -input-file %t %s
+
+. = 0x10
+ .byte 1
+
+. = . + 10
+ .byte 2
+
+# CHECK: LLVM ERROR: invalid .org offset '24' (at offset '28')
+. = 0x18
+ .byte 3
diff --git a/test/MC/AsmParser/dot-symbol-assignment.s b/test/MC/AsmParser/dot-symbol-assignment.s
new file mode 100644
index 0000000000..65651d7748
--- /dev/null
+++ b/test/MC/AsmParser/dot-symbol-assignment.s
@@ -0,0 +1,31 @@
+# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
+
+ .extern start
+
+# CHECK: .org 1024, 0
+. = 0x400
+ lgdt 0x400 + 0x100
+
+ ljmpl $0x08, $(0x400 + 0x150)
+
+
+# CHECK: .org 1280, 0
+. = 0x400 + 0x100
+ .word (3*8)-1
+ .quad (0x400 + 0x110)
+
+# CHECK: .org 1296, 0
+. = 0x400 + 0x110
+ .quad 0x0
+ .quad 0x0020980000000000
+ .quad 0x0000900000000000
+
+ .code64
+
+# CHECK: .org 1360, 0
+. = 0x400 + 0x150
+ movabsq $start, %rcx
+ jmp *%rcx
+
+
+. = 0x300
diff --git a/test/MC/AsmParser/dot-symbol-non-absolute.s b/test/MC/AsmParser/dot-symbol-non-absolute.s
new file mode 100644
index 0000000000..7342365fe1
--- /dev/null
+++ b/test/MC/AsmParser/dot-symbol-non-absolute.s
@@ -0,0 +1,9 @@
+# RUN: not llvm-mc -filetype=obj -triple i386-unknown-unknown %s 2> %t
+# RUN: FileCheck -input-file %t %s
+
+
+ .extern foo
+
+# CHECK: error: expected absolute expression
+. = foo + 10
+ .byte 1
diff --git a/test/MC/AsmParser/dot-symbol.s b/test/MC/AsmParser/dot-symbol.s
index 4a38a40532..4bae323186 100644
--- a/test/MC/AsmParser/dot-symbol.s
+++ b/test/MC/AsmParser/dot-symbol.s
@@ -1,12 +1,9 @@
# Historically 'as' treats '.' as a reference to the current location in
-# arbitrary contects. We don't support this in general.
+# arbitrary contexts. We don't support this in general.
# RUN: not llvm-mc -triple i386-unknown-unknown %s 2> %t
# RUN: FileCheck -input-file %t %s
-# CHECK: assignment to pseudo-symbol '.' is unsupported (use '.space' or '.org').
-. = . + 8
-
# CHECK: invalid use of pseudo-symbol '.' as a label
.:
.long 0
diff --git a/test/MC/ELF/dot-symbol-assignment.s b/test/MC/ELF/dot-symbol-assignment.s
new file mode 100644
index 0000000000..00fe205082
--- /dev/null
+++ b/test/MC/ELF/dot-symbol-assignment.s
@@ -0,0 +1,22 @@
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -sections -section-data | FileCheck %s
+
+one:
+ .quad 0xffffffffffffffff
+
+. = . + 16
+two:
+ .quad 0xeeeeeeeeeeeeeeee
+
+. = 0x20
+three:
+ .quad 0xdddddddddddddddd
+
+// CHECK: Section {
+// CHECK: Name: .text
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Flags [
+// CHECK: SectionData (
+// CHECK-NEXT: 0000: FFFFFFFF FFFFFFFF 00000000 00000000
+// CHECK-NEXT: 0010: 00000000 00000000 EEEEEEEE EEEEEEEE
+// CHECK-NEXT: 0020: DDDDDDDD DDDDDDDD
+// CHECK-NEXT: )