1// This tests that default-null weak symbols (a GNU extension) are created 2// properly via the .weak directive. 3 4// RUN: llvm-mc -filetype=obj -triple i686-pc-win32 %s | llvm-readobj -t | FileCheck %s 5// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s | llvm-readobj -t | FileCheck %s 6 7 .def _main; 8 .scl 2; 9 .type 32; 10 .endef 11 .text 12 .globl _main 13 .align 16, 0x90 14_main: # @main 15# BB#0: # %entry 16 subl $4, %esp 17 movl $_test_weak, %eax 18 testl %eax, %eax 19 je LBB0_2 20# BB#1: # %if.then 21 call _test_weak 22 movl $1, %eax 23 addl $4, %esp 24 ret 25LBB0_2: # %return 26 xorl %eax, %eax 27 addl $4, %esp 28 ret 29 30 .weak _test_weak 31 32 .weak _test_weak_alias 33 _test_weak_alias=_main 34 35// CHECK: Symbols [ 36 37// CHECK: Symbol { 38// CHECK: Name: _test_weak 39// CHECK-NEXT: Value: 0 40// CHECK-NEXT: Section: (0) 41// CHECK-NEXT: BaseType: Null 42// CHECK-NEXT: ComplexType: Null 43// CHECK-NEXT: StorageClass: WeakExternal 44// CHECK-NEXT: AuxSymbolCount: 1 45// CHECK-NEXT: AuxWeakExternal { 46// CHECK-NEXT: Linked: .weak._test_weak.default 47// CHECK-NEXT: Search: Library 48// CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00) 49// CHECK-NEXT: } 50// CHECK-NEXT: } 51 52// CHECK: Symbol { 53// CHECK: Name: .weak._test_weak.default 54// CHECK-NEXT: Value: 0 55// CHECK-NEXT: Section: (65535) 56// CHECK-NEXT: BaseType: Null 57// CHECK-NEXT: ComplexType: Null 58// CHECK-NEXT: StorageClass: External 59// CHECK-NEXT: AuxSymbolCount: 0 60// CHECK-NEXT: } 61 62// CHECK: Symbol { 63// CHECK: Name: _test_weak_alias 64// CHECK-NEXT: Value: 0 65// CHECK-NEXT: Section: (0) 66// CHECK-NEXT: BaseType: Null 67// CHECK-NEXT: ComplexType: Null 68// CHECK-NEXT: StorageClass: WeakExternal 69// CHECK-NEXT: AuxSymbolCount: 1 70// CHECK-NEXT: AuxWeakExternal { 71// CHECK-NEXT: Linked: _main 72// CHECK-NEXT: Search: Library 73// CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00) 74// CHECK-NEXT: } 75// CHECK-NEXT: } 76