Home | History | Annotate | Download | only in COFF
      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
     25 LBB0_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: _main
     39 // CHECK-NEXT:   Value: 0
     40 // CHECK-NEXT:   Section: .text
     41 // CHECK-NEXT:   BaseType: Null
     42 // CHECK-NEXT:   ComplexType: Function
     43 // CHECK-NEXT:   StorageClass: External
     44 // CHECK-NEXT:   AuxSymbolCount: 0
     45 // CHECK-NEXT: }
     46 
     47 // CHECK:      Symbol {
     48 // CHECK:        Name:           _test_weak
     49 // CHECK-NEXT:   Value:          0
     50 // CHECK-NEXT:   Section:        IMAGE_SYM_UNDEFINED (0)
     51 // CHECK-NEXT:   BaseType:       Null
     52 // CHECK-NEXT:   ComplexType:    Null
     53 // CHECK-NEXT:   StorageClass:   WeakExternal
     54 // CHECK-NEXT:   AuxSymbolCount: 1
     55 // CHECK-NEXT:   AuxWeakExternal {
     56 // CHECK-NEXT:     Linked: .weak._test_weak.default
     57 // CHECK-NEXT:      Search: Library
     58 // CHECK-NEXT:   }
     59 // CHECK-NEXT: }
     60 
     61 // CHECK:      Symbol {
     62 // CHECK:        Name:                .weak._test_weak.default
     63 // CHECK-NEXT:   Value:               0
     64 // CHECK-NEXT:   Section:             IMAGE_SYM_ABSOLUTE (-1)
     65 // CHECK-NEXT:   BaseType:            Null
     66 // CHECK-NEXT:   ComplexType:         Null
     67 // CHECK-NEXT:   StorageClass:        External
     68 // CHECK-NEXT:   AuxSymbolCount:      0
     69 // CHECK-NEXT: }
     70 
     71 // CHECK:      Symbol {
     72 // CHECK:        Name:           _test_weak_alias
     73 // CHECK-NEXT:   Value:          0
     74 // CHECK-NEXT:   Section:        IMAGE_SYM_UNDEFINED (0)
     75 // CHECK-NEXT:   BaseType:       Null
     76 // CHECK-NEXT:   ComplexType:    Null
     77 // CHECK-NEXT:   StorageClass:   WeakExternal
     78 // CHECK-NEXT:   AuxSymbolCount: 1
     79 // CHECK-NEXT:   AuxWeakExternal {
     80 // CHECK-NEXT:     Linked: .weak._test_weak_alias.default
     81 // CHECK-NEXT:      Search: Library
     82 // CHECK-NEXT:   }
     83 // CHECK-NEXT: }
     84 
     85 // CHECK:      Symbol {
     86 // CHECK:        Name: .weak._test_weak_alias.default
     87 // CHECK-NEXT:   Value: 0
     88 // CHECK-NEXT:   Section: .text
     89 // CHECK-NEXT:   BaseType: Null
     90 // CHECK-NEXT:   ComplexType: Null
     91 // CHECK-NEXT:   StorageClass: External
     92 // CHECK-NEXT:   AuxSymbolCount: 0
     93 // CHECK-NEXT: }
     94