diff options
| author | Martin Storsjo <martin@martin.st> | 2018-07-26 20:11:26 +0000 |
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2018-07-26 20:11:26 +0000 |
| commit | 390bce43220111640bfe94733282ae7db4708f82 (patch) | |
| tree | 31f0e39688b71bf1077cdead6cb942935fc86bc8 /llvm/test | |
| parent | e6e75bf84c94e03313594c1b5faf2b8065969c39 (diff) | |
| download | bcm5719-llvm-390bce43220111640bfe94733282ae7db4708f82.tar.gz bcm5719-llvm-390bce43220111640bfe94733282ae7db4708f82.zip | |
[MC] Add support for the .rva assembler directive for COFF targets
Even though gas doesn't document it, it has been supported there for
a very long time.
This produces the 32 bit relative virtual address (aka image relative
address) for a given symbol. ".rva foo" is essentially equal to
".long foo@imgrel".
Differential Revision: https://reviews.llvm.org/D49821
llvm-svn: 338063
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/MC/COFF/relocation-imgrel.s | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/llvm/test/MC/COFF/relocation-imgrel.s b/llvm/test/MC/COFF/relocation-imgrel.s index ccd19ee318b..2f8d70ced2a 100644 --- a/llvm/test/MC/COFF/relocation-imgrel.s +++ b/llvm/test/MC/COFF/relocation-imgrel.s @@ -3,15 +3,23 @@ // Test that we produce image-relative relocations (IMAGE_REL_I386_DIR32NB // and IMAGE_REL_AMD64_ADDR32NB) when accessing foo@imgrel. -// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -r | FileCheck --check-prefix=W32 %s -// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj -r | FileCheck --check-prefix=W64 %s +// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s > %t.w32.obj +// RUN: llvm-readobj -r %t.w32.obj | FileCheck --check-prefix=W32 %s +// RUN: llvm-objdump -s %t.w32.obj | FileCheck --check-prefix=W32OBJ %s +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s > %t.w64.obj +// RUN: llvm-readobj -r %t.w64.obj | FileCheck --check-prefix=W64 %s +// RUN: llvm-objdump -s %t.w64.obj | FileCheck --check-prefix=W64OBJ %s .data foo: .long 1 + .long .Llabel@imgrel + .rva .Llabel, .Llabel + 16, foo, .Lother - 3 .text +.Llabel: mov foo@IMGREL(%ebx, %ecx, 4), %eax +.Lother: mov foo@imgrel(%ebx, %ecx, 4), %eax // W32: Relocations [ @@ -19,11 +27,33 @@ foo: // W32-NEXT: 0x3 IMAGE_REL_I386_DIR32NB foo // W32-NEXT: 0xA IMAGE_REL_I386_DIR32NB foo // W32-NEXT: } +// W32-NEXT: Section (2) .data { +// W32-NEXT: 0x4 IMAGE_REL_I386_DIR32NB .Llabel +// W32-NEXT: 0x8 IMAGE_REL_I386_DIR32NB .Llabel +// W32-NEXT: 0xC IMAGE_REL_I386_DIR32NB .Llabel +// W32-NEXT: 0x10 IMAGE_REL_I386_DIR32NB foo +// W32-NEXT: 0x14 IMAGE_REL_I386_DIR32NB .Lother +// W32-NEXT: } // W32-NEXT: ] +// W32OBJ: Contents of section .data: +// W32OBJ-NEXT: 0000 01000000 00000000 00000000 10000000 +// W32OBJ-NEXT: 0010 00000000 fdffffff + // W64: Relocations [ // W64-NEXT: Section (1) .text { // W64-NEXT: 0x4 IMAGE_REL_AMD64_ADDR32NB foo // W64-NEXT: 0xC IMAGE_REL_AMD64_ADDR32NB foo // W64-NEXT: } +// W64-NEXT: Section (2) .data { +// W64-NEXT: 0x4 IMAGE_REL_AMD64_ADDR32NB .text +// W64-NEXT: 0x8 IMAGE_REL_AMD64_ADDR32NB .text +// W64-NEXT: 0xC IMAGE_REL_AMD64_ADDR32NB .text +// W64-NEXT: 0x10 IMAGE_REL_AMD64_ADDR32NB foo +// W64-NEXT: 0x14 IMAGE_REL_AMD64_ADDR32NB .text +// W64-NEXT: } // W64-NEXT: ] + +// W64OBJ: Contents of section .data: +// W64OBJ-NEXT: 0000 01000000 00000000 00000000 10000000 +// W64OBJ-NEXT: 0010 00000000 05000000 |

