| // RUN: llvm-mc -filetype=obj -triple i686-pc-mingw32 %s | llvm-readobj -s -sr -sd | FileCheck %s |
| |
| // COFF resolves differences between labels in the same section, unless that |
| // label is declared with function type. |
| |
| .section baz, "xr" |
| .globl X |
| X: |
| mov Y-X+42, %eax |
| retl |
| |
| .globl Y |
| Y: |
| retl |
| |
| .def _foobar; |
| .scl 2; |
| .type 32; |
| .endef |
| .text |
| .long 0 |
| .globl _foobar |
| .align 16, 0x90 |
| _foobar: # @foobar |
| # %bb.0: |
| ret |
| |
| .globl _baz |
| _baz: |
| calll _foobar |
| retl |
| |
| .data |
| .globl _rust_crate # @rust_crate |
| .align 4 |
| _rust_crate: |
| .long 0 |
| .long _foobar |
| .long _foobar-_rust_crate |
| .long _foobar-_rust_crate |
| |
| // Even though _baz and _foobar are in the same .text section, we keep the |
| // relocation for compatibility with the VC linker's /guard:cf and /incremental |
| // flags, even on mingw. |
| |
| // CHECK: Name: .text |
| // CHECK: Relocations [ |
| // CHECK-NEXT: 0x12 IMAGE_REL_I386_REL32 _foobar |
| // CHECK-NEXT: ] |
| |
| // CHECK: Name: .data |
| // CHECK: Relocations [ |
| // CHECK-NEXT: 0x4 IMAGE_REL_I386_DIR32 _foobar |
| // CHECK-NEXT: 0x8 IMAGE_REL_I386_REL32 _foobar |
| // CHECK-NEXT: 0xC IMAGE_REL_I386_REL32 _foobar |
| // CHECK-NEXT: ] |
| // CHECK: SectionData ( |
| // CHECK-NEXT: 0000: 00000000 00000000 0C000000 10000000 |
| // CHECK-NEXT: ) |
| |
| // CHECK: Name: baz |
| // CHECK: Relocations [ |
| // CHECK-NEXT: ] |
| // CHECK: SectionData ( |
| // CHECK-NEXT: 0000: A1300000 00C3C3 |
| // CHECK-NEXT: ) |