| // This tests that default-null weak symbols (a GNU extension) are created | |
| // properly via the .weak directive. | |
| // RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -t | FileCheck %s | |
| // RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj -t | FileCheck %s | |
| .def _main; | |
| .scl 2; | |
| .type 32; | |
| .endef | |
| .text | |
| .globl _main | |
| .align 16, 0x90 | |
| _main: # @main | |
| # %bb.0: # %entry | |
| subl $4, %esp | |
| movl $_test_weak, %eax | |
| testl %eax, %eax | |
| je LBB0_2 | |
| # %bb.1: # %if.then | |
| call _test_weak | |
| movl $1, %eax | |
| addl $4, %esp | |
| ret | |
| LBB0_2: # %return | |
| xorl %eax, %eax | |
| addl $4, %esp | |
| ret | |
| .weak _test_weak | |
| .weak _test_weak_alias | |
| _test_weak_alias=_main | |
| // CHECK: Symbols [ | |
| // CHECK: Symbol { | |
| // CHECK: Name: _main | |
| // CHECK-NEXT: Value: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: BaseType: Null | |
| // CHECK-NEXT: ComplexType: Function | |
| // CHECK-NEXT: StorageClass: External | |
| // CHECK-NEXT: AuxSymbolCount: 0 | |
| // CHECK-NEXT: } | |
| // CHECK: Symbol { | |
| // CHECK: Name: _test_weak | |
| // CHECK-NEXT: Value: 0 | |
| // CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) | |
| // CHECK-NEXT: BaseType: Null | |
| // CHECK-NEXT: ComplexType: Null | |
| // CHECK-NEXT: StorageClass: WeakExternal | |
| // CHECK-NEXT: AuxSymbolCount: 1 | |
| // CHECK-NEXT: AuxWeakExternal { | |
| // CHECK-NEXT: Linked: .weak._test_weak.default | |
| // CHECK-NEXT: Search: Library | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: } | |
| // CHECK: Symbol { | |
| // CHECK: Name: .weak._test_weak.default | |
| // CHECK-NEXT: Value: 0 | |
| // CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) | |
| // CHECK-NEXT: BaseType: Null | |
| // CHECK-NEXT: ComplexType: Null | |
| // CHECK-NEXT: StorageClass: External | |
| // CHECK-NEXT: AuxSymbolCount: 0 | |
| // CHECK-NEXT: } | |
| // CHECK: Symbol { | |
| // CHECK: Name: _test_weak_alias | |
| // CHECK-NEXT: Value: 0 | |
| // CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) | |
| // CHECK-NEXT: BaseType: Null | |
| // CHECK-NEXT: ComplexType: Null | |
| // CHECK-NEXT: StorageClass: WeakExternal | |
| // CHECK-NEXT: AuxSymbolCount: 1 | |
| // CHECK-NEXT: AuxWeakExternal { | |
| // CHECK-NEXT: Linked: .weak._test_weak_alias.default | |
| // CHECK-NEXT: Search: Library | |
| // CHECK-NEXT: } | |
| // CHECK-NEXT: } | |
| // CHECK: Symbol { | |
| // CHECK: Name: .weak._test_weak_alias.default | |
| // CHECK-NEXT: Value: 0 | |
| // CHECK-NEXT: Section: .text | |
| // CHECK-NEXT: BaseType: Null | |
| // CHECK-NEXT: ComplexType: Null | |
| // CHECK-NEXT: StorageClass: External | |
| // CHECK-NEXT: AuxSymbolCount: 0 | |
| // CHECK-NEXT: } |