// REQUIRES: x86 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/resolution.s -o %t2 // RUN: ld.lld -discard-all %t %t2 -o %t3 // RUN: llvm-readobj -t %t3 | FileCheck %s // This is an exhaustive test for checking which symbol is kept when two // have the same name. Each symbol has a different size which is used // to see which one was chosen. // CHECK: Symbols [ // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: (0) // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Local (0x0) // CHECK-NEXT: Type: None (0x0) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: Undefined (0x0) // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonStrong_with_CommonStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 63 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonStrong_with_CommonWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 30 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonStrong_with_RegularStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 55 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonStrong_with_RegularWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 22 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonStrong_with_UndefStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 27 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonStrong_with_UndefWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 26 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonWeak_with_CommonStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 61 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonWeak_with_CommonWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 28 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonWeak_with_RegularStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 53 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonWeak_with_RegularWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 20 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonWeak_with_UndefStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 25 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: CommonWeak_with_UndefWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 24 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularStrong_with_CommonStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 10 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularStrong_with_CommonWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 9 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularStrong_with_RegularWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 2 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularStrong_with_UndefStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 6 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularStrong_with_UndefWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 5 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularWeak_with_CommonStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 40 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularWeak_with_CommonWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 7 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularWeak_with_RegularStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 33 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularWeak_with_RegularWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularWeak_with_UndefStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 4 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: RegularWeak_with_UndefWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 3 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefStrong_with_CommonStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 51 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefStrong_with_CommonWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 50 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefStrong_with_RegularStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 46 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefStrong_with_RegularWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 45 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefWeak_with_CommonStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 49 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefWeak_with_CommonWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 48 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: Object // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefWeak_with_RegularStrong // CHECK-NEXT: Value: // CHECK-NEXT: Size: 44 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefWeak_with_RegularWeak // CHECK-NEXT: Value: // CHECK-NEXT: Size: 43 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: UndefWeak_with_UndefWeak // CHECK-NEXT: Value: 0x0 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Weak // CHECK-NEXT: Type: None // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: Undefined // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: _start // CHECK-NEXT: Value: 0x201000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global (0x1) // CHECK-NEXT: Type: None (0x0) // CHECK-NEXT: Other: 0 // CHECK-NEXT: Section: .text (0x1) // CHECK-NEXT: } // CHECK-NEXT: ] .globl _start _start: nop local: .weak RegularWeak_with_RegularWeak .size RegularWeak_with_RegularWeak, 0 RegularWeak_with_RegularWeak: .weak RegularWeak_with_RegularStrong .size RegularWeak_with_RegularStrong, 1 RegularWeak_with_RegularStrong: .global RegularStrong_with_RegularWeak .size RegularStrong_with_RegularWeak, 2 RegularStrong_with_RegularWeak: .weak RegularWeak_with_UndefWeak .size RegularWeak_with_UndefWeak, 3 RegularWeak_with_UndefWeak: .weak RegularWeak_with_UndefStrong .size RegularWeak_with_UndefStrong, 4 RegularWeak_with_UndefStrong: .global RegularStrong_with_UndefWeak .size RegularStrong_with_UndefWeak, 5 RegularStrong_with_UndefWeak: .global RegularStrong_with_UndefStrong .size RegularStrong_with_UndefStrong, 6 RegularStrong_with_UndefStrong: .weak RegularWeak_with_CommonWeak .size RegularWeak_with_CommonWeak, 7 RegularWeak_with_CommonWeak: .weak RegularWeak_with_CommonStrong .size RegularWeak_with_CommonStrong, 8 RegularWeak_with_CommonStrong: .global RegularStrong_with_CommonWeak .size RegularStrong_with_CommonWeak, 9 RegularStrong_with_CommonWeak: .global RegularStrong_with_CommonStrong .size RegularStrong_with_CommonStrong, 10 RegularStrong_with_CommonStrong: .weak UndefWeak_with_RegularWeak .size UndefWeak_with_RegularWeak, 11 .quad UndefWeak_with_RegularWeak .weak UndefWeak_with_RegularStrong .size UndefWeak_with_RegularStrong, 12 .quad UndefWeak_with_RegularStrong .size UndefStrong_with_RegularWeak, 13 .quad UndefStrong_with_RegularWeak .size UndefStrong_with_RegularStrong, 14 .quad UndefStrong_with_RegularStrong .weak UndefWeak_with_UndefWeak .size UndefWeak_with_UndefWeak, 15 .quad UndefWeak_with_UndefWeak .weak UndefWeak_with_CommonWeak .size UndefWeak_with_CommonWeak, 16 .quad UndefWeak_with_CommonWeak .weak UndefWeak_with_CommonStrong .size UndefWeak_with_CommonStrong, 17 .quad UndefWeak_with_CommonStrong .size UndefStrong_with_CommonWeak, 18 .quad UndefStrong_with_CommonWeak .size UndefStrong_with_CommonStrong, 19 .quad UndefStrong_with_CommonStrong .weak CommonWeak_with_RegularWeak .comm CommonWeak_with_RegularWeak,20,4 .weak CommonWeak_with_RegularStrong .comm CommonWeak_with_RegularStrong,21,4 .comm CommonStrong_with_RegularWeak,22,4 .comm CommonStrong_with_RegularStrong,23,4 .weak CommonWeak_with_UndefWeak .comm CommonWeak_with_UndefWeak,24,4 .weak CommonWeak_with_UndefStrong .comm CommonWeak_with_UndefStrong,25,4 .comm CommonStrong_with_UndefWeak,26,4 .comm CommonStrong_with_UndefStrong,27,4 .weak CommonWeak_with_CommonWeak .comm CommonWeak_with_CommonWeak,28,4 .weak CommonWeak_with_CommonStrong .comm CommonWeak_with_CommonStrong,29,4 .comm CommonStrong_with_CommonWeak,30,4 .comm CommonStrong_with_CommonStrong,31,4