diff options
author | Anders Waldenborg <anders@0x63.nu> | 2014-02-17 20:48:32 +0000 |
---|---|---|
committer | Anders Waldenborg <anders@0x63.nu> | 2014-02-17 20:48:32 +0000 |
commit | 1410f7ffc63aa3ad4b7937491ef860d862846245 (patch) | |
tree | 78e8cf6c395e7b452c214cd6c19c0c3f8fcaa2aa /test | |
parent | 3457506fb9e5256fcc3c51ea3fd5bbd0221dead0 (diff) | |
download | llvm-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.s | 12 | ||||
-rw-r--r-- | test/MC/AsmParser/dot-symbol-assignment.s | 31 | ||||
-rw-r--r-- | test/MC/AsmParser/dot-symbol-non-absolute.s | 9 | ||||
-rw-r--r-- | test/MC/AsmParser/dot-symbol.s | 5 | ||||
-rw-r--r-- | test/MC/ELF/dot-symbol-assignment.s | 22 |
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: ) |