diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-06-26 01:09:52 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2019-06-26 01:09:52 +0000 |
| commit | 06036dbc6e91d31946c57cf8a00c67b901fbba91 (patch) | |
| tree | 74d1fa05afd8aa8bb8d0866e4fe8eb379958579a | |
| parent | d38e251bf2f94a49caf739fe6281f34cca4274e9 (diff) | |
| download | bcm5719-llvm-06036dbc6e91d31946c57cf8a00c67b901fbba91.tar.gz bcm5719-llvm-06036dbc6e91d31946c57cf8a00c67b901fbba91.zip | |
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.
llvm-svn: 364370
| -rw-r--r-- | llvm/lib/MC/WinCOFFObjectWriter.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/MC/COFF/alias.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/COFF/weak-alias-local.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/COFF/weak-val.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/COFF/weak.s | 4 | ||||
| -rw-r--r-- | llvm/test/Object/X86/nm-coff.s | 11 |
6 files changed, 14 insertions, 9 deletions
diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp index 1dfb1cf440f..0e6c05bc726 100644 --- a/llvm/lib/MC/WinCOFFObjectWriter.cpp +++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp @@ -387,7 +387,7 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSym, 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; diff --git a/llvm/test/MC/COFF/alias.s b/llvm/test/MC/COFF/alias.s index bd45e485f49..0c225275f6b 100644 --- a/llvm/test/MC/COFF/alias.s +++ b/llvm/test/MC/COFF/alias.s @@ -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 { diff --git a/llvm/test/MC/COFF/weak-alias-local.s b/llvm/test/MC/COFF/weak-alias-local.s index e14d319d7e3..93a3652428e 100644 --- a/llvm/test/MC/COFF/weak-alias-local.s +++ b/llvm/test/MC/COFF/weak-alias-local.s @@ -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 { diff --git a/llvm/test/MC/COFF/weak-val.s b/llvm/test/MC/COFF/weak-val.s index a5c1d1259fd..cb5872b057e 100644 --- a/llvm/test/MC/COFF/weak-val.s +++ b/llvm/test/MC/COFF/weak-val.s @@ -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 { diff --git a/llvm/test/MC/COFF/weak.s b/llvm/test/MC/COFF/weak.s index 4ba07291083..5e216cef2cb 100644 --- a/llvm/test/MC/COFF/weak.s +++ b/llvm/test/MC/COFF/weak.s @@ -54,7 +54,7 @@ LBB0_2: # %return // 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: # %return // 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: } diff --git a/llvm/test/Object/X86/nm-coff.s b/llvm/test/Object/X86/nm-coff.s index b8f28c7e52a..4fc6d38130d 100644 --- a/llvm/test/Object/X86/nm-coff.s +++ b/llvm/test/Object/X86/nm-coff.s @@ -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: } + |

