1// REQUIRES: x86 2// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t 3// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/resolution.s -o %t2 4// RUN: ld.lld -discard-all %t %t2 -o %t3 5// RUN: llvm-readelf --symbols %t3 | FileCheck %s 6 7// This is an exhaustive test for checking which symbol is kept when two 8// have the same name. Each symbol has a different size which is used 9// to see which one was chosen. 10 11// CHECK: Symbol table '.symtab' contains 23 entries: 12// CHECK-NEXT: Size Type Bind Vis Ndx Name 13// CHECK-NEXT: 0 NOTYPE LOCAL DEFAULT UND 14// CHECK-NEXT: 0 NOTYPE GLOBAL DEFAULT 1 _start 15// CHECK-NEXT: 0 NOTYPE WEAK DEFAULT 1 RegularWeak_with_RegularWeak 16// CHECK-NEXT: 33 NOTYPE GLOBAL DEFAULT 1 RegularWeak_with_RegularStrong 17// CHECK-NEXT: 2 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_RegularWeak 18// CHECK-NEXT: 3 NOTYPE WEAK DEFAULT 1 RegularWeak_with_UndefWeak 19// CHECK-NEXT: 4 NOTYPE WEAK DEFAULT 1 RegularWeak_with_UndefStrong 20// CHECK-NEXT: 5 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_UndefWeak 21// CHECK-NEXT: 6 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_UndefStrong 22// CHECK-NEXT: 40 OBJECT GLOBAL DEFAULT 2 RegularWeak_with_CommonStrong 23// CHECK-NEXT: 10 NOTYPE GLOBAL DEFAULT 1 RegularStrong_with_CommonStrong 24// CHECK-NEXT: 43 NOTYPE WEAK DEFAULT 1 UndefWeak_with_RegularWeak 25// CHECK-NEXT: 44 NOTYPE GLOBAL DEFAULT 1 UndefWeak_with_RegularStrong 26// CHECK-NEXT: 45 NOTYPE WEAK DEFAULT 1 UndefStrong_with_RegularWeak 27// CHECK-NEXT: 46 NOTYPE GLOBAL DEFAULT 1 UndefStrong_with_RegularStrong 28// CHECK-NEXT: 0 NOTYPE WEAK DEFAULT UND UndefWeak_with_UndefWeak 29// CHECK-NEXT: 49 OBJECT GLOBAL DEFAULT 2 UndefWeak_with_CommonStrong 30// CHECK-NEXT: 51 OBJECT GLOBAL DEFAULT 2 UndefStrong_with_CommonStrong 31// CHECK-NEXT: 22 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_RegularWeak 32// CHECK-NEXT: 55 NOTYPE GLOBAL DEFAULT 1 CommonStrong_with_RegularStrong 33// CHECK-NEXT: 26 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_UndefWeak 34// CHECK-NEXT: 27 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_UndefStrong 35// CHECK-NEXT: 63 OBJECT GLOBAL DEFAULT 2 CommonStrong_with_CommonStrong 36 37.globl _start 38_start: 39 nop 40 41local: 42 43.weak RegularWeak_with_RegularWeak 44.size RegularWeak_with_RegularWeak, 0 45RegularWeak_with_RegularWeak: 46 47.weak RegularWeak_with_RegularStrong 48.size RegularWeak_with_RegularStrong, 1 49RegularWeak_with_RegularStrong: 50 51.global RegularStrong_with_RegularWeak 52.size RegularStrong_with_RegularWeak, 2 53RegularStrong_with_RegularWeak: 54 55.weak RegularWeak_with_UndefWeak 56.size RegularWeak_with_UndefWeak, 3 57RegularWeak_with_UndefWeak: 58 59.weak RegularWeak_with_UndefStrong 60.size RegularWeak_with_UndefStrong, 4 61RegularWeak_with_UndefStrong: 62 63.global RegularStrong_with_UndefWeak 64.size RegularStrong_with_UndefWeak, 5 65RegularStrong_with_UndefWeak: 66 67.global RegularStrong_with_UndefStrong 68.size RegularStrong_with_UndefStrong, 6 69RegularStrong_with_UndefStrong: 70 71.weak RegularWeak_with_CommonStrong 72.size RegularWeak_with_CommonStrong, 8 73RegularWeak_with_CommonStrong: 74 75.global RegularStrong_with_CommonStrong 76.size RegularStrong_with_CommonStrong, 10 77RegularStrong_with_CommonStrong: 78 79.weak UndefWeak_with_RegularWeak 80.size UndefWeak_with_RegularWeak, 11 81.quad UndefWeak_with_RegularWeak 82 83.weak UndefWeak_with_RegularStrong 84.size UndefWeak_with_RegularStrong, 12 85.quad UndefWeak_with_RegularStrong 86 87.size UndefStrong_with_RegularWeak, 13 88.quad UndefStrong_with_RegularWeak 89 90.size UndefStrong_with_RegularStrong, 14 91.quad UndefStrong_with_RegularStrong 92 93.weak UndefWeak_with_UndefWeak 94.size UndefWeak_with_UndefWeak, 15 95.quad UndefWeak_with_UndefWeak 96 97.weak UndefWeak_with_CommonStrong 98.size UndefWeak_with_CommonStrong, 17 99.quad UndefWeak_with_CommonStrong 100 101.size UndefStrong_with_CommonStrong, 19 102.quad UndefStrong_with_CommonStrong 103 104.comm CommonStrong_with_RegularWeak,22,4 105 106.comm CommonStrong_with_RegularStrong,23,4 107 108.comm CommonStrong_with_UndefWeak,26,4 109 110.comm CommonStrong_with_UndefStrong,27,4 111 112.comm CommonStrong_with_CommonStrong,31,4 113