From 1410f7ffc63aa3ad4b7937491ef860d862846245 Mon Sep 17 00:00:00 2001 From: Anders Waldenborg Date: Mon, 17 Feb 2014 20:48:32 +0000 Subject: 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 --- .../MC/AsmParser/dot-symbol-assignment-backwards.s | 12 +++++++++ test/MC/AsmParser/dot-symbol-assignment.s | 31 ++++++++++++++++++++++ test/MC/AsmParser/dot-symbol-non-absolute.s | 9 +++++++ test/MC/AsmParser/dot-symbol.s | 5 +--- test/MC/ELF/dot-symbol-assignment.s | 22 +++++++++++++++ 5 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 test/MC/AsmParser/dot-symbol-assignment-backwards.s create mode 100644 test/MC/AsmParser/dot-symbol-assignment.s create mode 100644 test/MC/AsmParser/dot-symbol-non-absolute.s create mode 100644 test/MC/ELF/dot-symbol-assignment.s (limited to 'test') 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: ) -- cgit v1.2.3