mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
87135ac747
These symbols need to be external (MSVC tools error out if a weak external points at a symbol that isn't external; this was tried before but had to be reverted in bc5b7217dceecd3eec69593026a9e38dfbfd6908, and this was originally explicitly fixed in 732eeaf2a930ad2755cb4eb5d99a3deae0de4a72). If multiple object files have weak symbols with defaults, their defaults could cause linker errors due to duplicate definitions, unless the names of the defaults are unique. GNU binutils handles this by appending the name of another symbol from the same object file to the name of the default symbol. Try to implement something similar; before writing the object file, locate a symbol that should have a unique name and use the name of that one for making the weak defaults unique. Differential Revision: https://reviews.llvm.org/D75989
44 lines
1.3 KiB
ArmAsm
44 lines
1.3 KiB
ArmAsm
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-win32 %s -o %t.o
|
|
// RUN: llvm-readobj --symbols %t.o | FileCheck %s
|
|
|
|
// test that we create an external symbol for a to point to.
|
|
|
|
.data
|
|
.long 123
|
|
b:
|
|
.long 42
|
|
.weak a
|
|
a=b
|
|
|
|
// CHECK: Symbol {
|
|
// CHECK: Name: b
|
|
// CHECK-NEXT: Value: 4
|
|
// CHECK-NEXT: Section: .data (2)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: Static (0x3)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: a
|
|
// CHECK-NEXT: Value: 0
|
|
// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: WeakExternal (0x69)
|
|
// CHECK-NEXT: AuxSymbolCount: 1
|
|
// CHECK-NEXT: AuxWeakExternal {
|
|
// CHECK-NEXT: Linked: .weak.a.default (9)
|
|
// CHECK-NEXT: Search: Alias (0x3)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: Symbol {
|
|
// CHECK-NEXT: Name: .weak.a.default{{$}}
|
|
// CHECK-NEXT: Value: 4
|
|
// CHECK-NEXT: Section: .data (2)
|
|
// CHECK-NEXT: BaseType: Null (0x0)
|
|
// CHECK-NEXT: ComplexType: Null (0x0)
|
|
// CHECK-NEXT: StorageClass: External (0x2)
|
|
// CHECK-NEXT: AuxSymbolCount: 0
|
|
// CHECK-NEXT: }
|