[llvm] r364370 - MC: correct the emission of weak aliases in COFF

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 25 18:09:52 PDT 2019


Author: compnerd
Date: Tue Jun 25 18:09:52 2019
New Revision: 364370

URL: http://llvm.org/viewvc/llvm-project?rev=364370&view=rev
Log:
MC: correct the emission of weak aliases in COFF

The weak alias should have the characteristics set to
`IMAGE_EXTERN_WEAK_SEARCH_ALIAS` to indicate that the weak external here
is a symbol alias and that the symbol is aliased to a locally defined
symbol.  We were previously setting the characteristics to
`IMAGE_EXTERN_WEAK_SEARCH_LIBRARY` which indicates that the symbol
should be looked for in the libraries.

Modified:
    llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
    llvm/trunk/test/MC/COFF/alias.s
    llvm/trunk/test/MC/COFF/weak-alias-local.s
    llvm/trunk/test/MC/COFF/weak-val.s
    llvm/trunk/test/MC/COFF/weak.s
    llvm/trunk/test/Object/X86/nm-coff.s

Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=364370&r1=364369&r2=364370&view=diff
==============================================================================
--- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Tue Jun 25 18:09:52 2019
@@ -387,7 +387,7 @@ void WinCOFFObjectWriter::DefineSymbol(c
     Sym->Aux[0].AuxType = ATWeakExternal;
     Sym->Aux[0].Aux.WeakExternal.TagIndex = 0;
     Sym->Aux[0].Aux.WeakExternal.Characteristics =
-        COFF::IMAGE_WEAK_EXTERN_SEARCH_LIBRARY;
+        COFF::IMAGE_WEAK_EXTERN_SEARCH_ALIAS;
   } else {
     if (!Base)
       Sym->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;

Modified: llvm/trunk/test/MC/COFF/alias.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/alias.s?rev=364370&r1=364369&r2=364370&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/alias.s (original)
+++ llvm/trunk/test/MC/COFF/alias.s Tue Jun 25 18:09:52 2019
@@ -91,7 +91,7 @@ weak_aliased_to_external = external2
 // CHECK-NEXT:     AuxSymbolCount: 1
 // CHECK-NEXT:     AuxWeakExternal {
 // CHECK-NEXT:       Linked: external2
-// CHECK-NEXT:       Search: Library (0x2)
+// CHECK-NEXT:       Search: Alias (0x3)
 // CHECK-NEXT:     }
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {

Modified: llvm/trunk/test/MC/COFF/weak-alias-local.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/weak-alias-local.s?rev=364370&r1=364369&r2=364370&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/weak-alias-local.s (original)
+++ llvm/trunk/test/MC/COFF/weak-alias-local.s Tue Jun 25 18:09:52 2019
@@ -29,7 +29,7 @@ a=b
 // CHECK-NEXT:   AuxSymbolCount: 1
 // CHECK-NEXT:   AuxWeakExternal {
 // CHECK-NEXT:     Linked: .weak.a.default (9)
-// CHECK-NEXT:     Search: Library (0x2)
+// CHECK-NEXT:     Search: Alias (0x3)
 // CHECK-NEXT:   }
 // CHECK-NEXT: }
 // CHECK-NEXT: Symbol {

Modified: llvm/trunk/test/MC/COFF/weak-val.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/weak-val.s?rev=364370&r1=364369&r2=364370&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/weak-val.s (original)
+++ llvm/trunk/test/MC/COFF/weak-val.s Tue Jun 25 18:09:52 2019
@@ -19,7 +19,7 @@ b:
 // CHECK-NEXT:   AuxSymbolCount: 1
 // CHECK-NEXT:   AuxWeakExternal {
 // CHECK-NEXT:     Linked: .weak.b.default (8)
-// CHECK-NEXT:     Search: Library (0x2)
+// CHECK-NEXT:     Search: Alias (0x3)
 // CHECK-NEXT:   }
 // CHECK-NEXT: }
 // CHECK-NEXT: Symbol {

Modified: llvm/trunk/test/MC/COFF/weak.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/weak.s?rev=364370&r1=364369&r2=364370&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/weak.s (original)
+++ llvm/trunk/test/MC/COFF/weak.s Tue Jun 25 18:09:52 2019
@@ -54,7 +54,7 @@ LBB0_2:
 // CHECK-NEXT:   AuxSymbolCount: 1
 // CHECK-NEXT:   AuxWeakExternal {
 // CHECK-NEXT:     Linked: .weak._test_weak.default
-// CHECK-NEXT:      Search: Library
+// CHECK-NEXT:      Search: Alias
 // CHECK-NEXT:   }
 // CHECK-NEXT: }
 
@@ -78,7 +78,7 @@ LBB0_2:
 // CHECK-NEXT:   AuxSymbolCount: 1
 // CHECK-NEXT:   AuxWeakExternal {
 // CHECK-NEXT:     Linked: .weak._test_weak_alias.default
-// CHECK-NEXT:      Search: Library
+// CHECK-NEXT:      Search: Alias
 // CHECK-NEXT:   }
 // CHECK-NEXT: }
 

Modified: llvm/trunk/test/Object/X86/nm-coff.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/nm-coff.s?rev=364370&r1=364369&r2=364370&view=diff
==============================================================================
--- llvm/trunk/test/Object/X86/nm-coff.s (original)
+++ llvm/trunk/test/Object/X86/nm-coff.s Tue Jun 25 18:09:52 2019
@@ -1,9 +1,14 @@
-// RUN: llvm-mc %s -o %t -filetype=obj -triple=x86_64-pc-win32
-// RUN: llvm-nm --undefined-only %t | FileCheck %s
-// CHECK: w foo
+// RUN: llvm-mc -triple x86_64-unknown-windows-msvc -filetype obj -o - %s | llvm-readobj --symbols - | FileCheck %s
 
 g:
 	movl	foo(%rip), %eax
 	retq
 
 	.weak	foo
+
+// CHECK: Symbol {
+// CHECK:   Name: foo
+// CHECK:   Section: IMAGE_SYM_UNDEFINED (0)
+// CHECK:   StorageClass: WeakExternal (0x69)
+// CHECK: }
+




More information about the llvm-commits mailing list