summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2019-06-26 01:09:52 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2019-06-26 01:09:52 +0000
commit06036dbc6e91d31946c57cf8a00c67b901fbba91 (patch)
tree74d1fa05afd8aa8bb8d0866e4fe8eb379958579a
parentd38e251bf2f94a49caf739fe6281f34cca4274e9 (diff)
downloadbcm5719-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.cpp2
-rw-r--r--llvm/test/MC/COFF/alias.s2
-rw-r--r--llvm/test/MC/COFF/weak-alias-local.s2
-rw-r--r--llvm/test/MC/COFF/weak-val.s2
-rw-r--r--llvm/test/MC/COFF/weak.s4
-rw-r--r--llvm/test/Object/X86/nm-coff.s11
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: }
+
OpenPOWER on IntegriCloud