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-readobj --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: Symbols [ 12// CHECK-NEXT: Symbol { 13// CHECK-NEXT: Name: (0) 14// CHECK-NEXT: Value: 0x0 15// CHECK-NEXT: Size: 0 16// CHECK-NEXT: Binding: Local (0x0) 17// CHECK-NEXT: Type: None (0x0) 18// CHECK-NEXT: Other: 0 19// CHECK-NEXT: Section: Undefined (0x0) 20// CHECK-NEXT: } 21// CHECK-NEXT: Symbol { 22// CHECK-NEXT: Name: CommonStrong_with_CommonStrong 23// CHECK-NEXT: Value: 24// CHECK-NEXT: Size: 63 25// CHECK-NEXT: Binding: Global 26// CHECK-NEXT: Type: Object 27// CHECK-NEXT: Other: 0 28// CHECK-NEXT: Section: 29// CHECK-NEXT: } 30// CHECK-NEXT: Symbol { 31// CHECK-NEXT: Name: CommonStrong_with_CommonWeak 32// CHECK-NEXT: Value: 33// CHECK-NEXT: Size: 30 34// CHECK-NEXT: Binding: Global 35// CHECK-NEXT: Type: Object 36// CHECK-NEXT: Other: 0 37// CHECK-NEXT: Section: 38// CHECK-NEXT: } 39// CHECK-NEXT: Symbol { 40// CHECK-NEXT: Name: CommonStrong_with_RegularStrong 41// CHECK-NEXT: Value: 42// CHECK-NEXT: Size: 55 43// CHECK-NEXT: Binding: Global 44// CHECK-NEXT: Type: None 45// CHECK-NEXT: Other: 0 46// CHECK-NEXT: Section: .text 47// CHECK-NEXT: } 48// CHECK-NEXT: Symbol { 49// CHECK-NEXT: Name: CommonStrong_with_RegularWeak 50// CHECK-NEXT: Value: 51// CHECK-NEXT: Size: 22 52// CHECK-NEXT: Binding: Global 53// CHECK-NEXT: Type: Object 54// CHECK-NEXT: Other: 0 55// CHECK-NEXT: Section: 56// CHECK-NEXT: } 57// CHECK-NEXT: Symbol { 58// CHECK-NEXT: Name: CommonStrong_with_UndefStrong 59// CHECK-NEXT: Value: 60// CHECK-NEXT: Size: 27 61// CHECK-NEXT: Binding: Global 62// CHECK-NEXT: Type: Object 63// CHECK-NEXT: Other: 0 64// CHECK-NEXT: Section: 65// CHECK-NEXT: } 66// CHECK-NEXT: Symbol { 67// CHECK-NEXT: Name: CommonStrong_with_UndefWeak 68// CHECK-NEXT: Value: 69// CHECK-NEXT: Size: 26 70// CHECK-NEXT: Binding: Global 71// CHECK-NEXT: Type: Object 72// CHECK-NEXT: Other: 0 73// CHECK-NEXT: Section: 74// CHECK-NEXT: } 75// CHECK-NEXT: Symbol { 76// CHECK-NEXT: Name: CommonWeak_with_CommonStrong 77// CHECK-NEXT: Value: 78// CHECK-NEXT: Size: 61 79// CHECK-NEXT: Binding: Global 80// CHECK-NEXT: Type: Object 81// CHECK-NEXT: Other: 0 82// CHECK-NEXT: Section: 83// CHECK-NEXT: } 84// CHECK-NEXT: Symbol { 85// CHECK-NEXT: Name: CommonWeak_with_CommonWeak 86// CHECK-NEXT: Value: 87// CHECK-NEXT: Size: 28 88// CHECK-NEXT: Binding: Weak 89// CHECK-NEXT: Type: Object 90// CHECK-NEXT: Other: 0 91// CHECK-NEXT: Section: 92// CHECK-NEXT: } 93// CHECK-NEXT: Symbol { 94// CHECK-NEXT: Name: CommonWeak_with_RegularStrong 95// CHECK-NEXT: Value: 96// CHECK-NEXT: Size: 53 97// CHECK-NEXT: Binding: Global 98// CHECK-NEXT: Type: None 99// CHECK-NEXT: Other: 0 100// CHECK-NEXT: Section: .text 101// CHECK-NEXT: } 102// CHECK-NEXT: Symbol { 103// CHECK-NEXT: Name: CommonWeak_with_RegularWeak 104// CHECK-NEXT: Value: 105// CHECK-NEXT: Size: 20 106// CHECK-NEXT: Binding: Weak 107// CHECK-NEXT: Type: Object 108// CHECK-NEXT: Other: 0 109// CHECK-NEXT: Section: 110// CHECK-NEXT: } 111// CHECK-NEXT: Symbol { 112// CHECK-NEXT: Name: CommonWeak_with_UndefStrong 113// CHECK-NEXT: Value: 114// CHECK-NEXT: Size: 25 115// CHECK-NEXT: Binding: Weak 116// CHECK-NEXT: Type: Object 117// CHECK-NEXT: Other: 0 118// CHECK-NEXT: Section: 119// CHECK-NEXT: } 120// CHECK-NEXT: Symbol { 121// CHECK-NEXT: Name: CommonWeak_with_UndefWeak 122// CHECK-NEXT: Value: 123// CHECK-NEXT: Size: 24 124// CHECK-NEXT: Binding: Weak 125// CHECK-NEXT: Type: Object 126// CHECK-NEXT: Other: 0 127// CHECK-NEXT: Section: 128// CHECK-NEXT: } 129// CHECK-NEXT: Symbol { 130// CHECK-NEXT: Name: RegularStrong_with_CommonStrong 131// CHECK-NEXT: Value: 132// CHECK-NEXT: Size: 10 133// CHECK-NEXT: Binding: Global 134// CHECK-NEXT: Type: None 135// CHECK-NEXT: Other: 0 136// CHECK-NEXT: Section: .text 137// CHECK-NEXT: } 138// CHECK-NEXT: Symbol { 139// CHECK-NEXT: Name: RegularStrong_with_CommonWeak 140// CHECK-NEXT: Value: 141// CHECK-NEXT: Size: 9 142// CHECK-NEXT: Binding: Global 143// CHECK-NEXT: Type: None 144// CHECK-NEXT: Other: 0 145// CHECK-NEXT: Section: .text 146// CHECK-NEXT: } 147// CHECK-NEXT: Symbol { 148// CHECK-NEXT: Name: RegularStrong_with_RegularWeak 149// CHECK-NEXT: Value: 150// CHECK-NEXT: Size: 2 151// CHECK-NEXT: Binding: Global 152// CHECK-NEXT: Type: None 153// CHECK-NEXT: Other: 0 154// CHECK-NEXT: Section: .text 155// CHECK-NEXT: } 156// CHECK-NEXT: Symbol { 157// CHECK-NEXT: Name: RegularStrong_with_UndefStrong 158// CHECK-NEXT: Value: 159// CHECK-NEXT: Size: 6 160// CHECK-NEXT: Binding: Global 161// CHECK-NEXT: Type: None 162// CHECK-NEXT: Other: 0 163// CHECK-NEXT: Section: .text 164// CHECK-NEXT: } 165// CHECK-NEXT: Symbol { 166// CHECK-NEXT: Name: RegularStrong_with_UndefWeak 167// CHECK-NEXT: Value: 168// CHECK-NEXT: Size: 5 169// CHECK-NEXT: Binding: Global 170// CHECK-NEXT: Type: None 171// CHECK-NEXT: Other: 0 172// CHECK-NEXT: Section: .text 173// CHECK-NEXT: } 174// CHECK-NEXT: Symbol { 175// CHECK-NEXT: Name: RegularWeak_with_CommonStrong 176// CHECK-NEXT: Value: 177// CHECK-NEXT: Size: 40 178// CHECK-NEXT: Binding: Global 179// CHECK-NEXT: Type: Object 180// CHECK-NEXT: Other: 0 181// CHECK-NEXT: Section: 182// CHECK-NEXT: } 183// CHECK-NEXT: Symbol { 184// CHECK-NEXT: Name: RegularWeak_with_CommonWeak 185// CHECK-NEXT: Value: 186// CHECK-NEXT: Size: 7 187// CHECK-NEXT: Binding: Weak 188// CHECK-NEXT: Type: None 189// CHECK-NEXT: Other: 0 190// CHECK-NEXT: Section: .text 191// CHECK-NEXT: } 192// CHECK-NEXT: Symbol { 193// CHECK-NEXT: Name: RegularWeak_with_RegularStrong 194// CHECK-NEXT: Value: 195// CHECK-NEXT: Size: 33 196// CHECK-NEXT: Binding: Global 197// CHECK-NEXT: Type: None 198// CHECK-NEXT: Other: 0 199// CHECK-NEXT: Section: .text 200// CHECK-NEXT: } 201// CHECK-NEXT: Symbol { 202// CHECK-NEXT: Name: RegularWeak_with_RegularWeak 203// CHECK-NEXT: Value: 204// CHECK-NEXT: Size: 0 205// CHECK-NEXT: Binding: Weak 206// CHECK-NEXT: Type: None 207// CHECK-NEXT: Other: 0 208// CHECK-NEXT: Section: .text 209// CHECK-NEXT: } 210// CHECK-NEXT: Symbol { 211// CHECK-NEXT: Name: RegularWeak_with_UndefStrong 212// CHECK-NEXT: Value: 213// CHECK-NEXT: Size: 4 214// CHECK-NEXT: Binding: Weak 215// CHECK-NEXT: Type: None 216// CHECK-NEXT: Other: 0 217// CHECK-NEXT: Section: .text 218// CHECK-NEXT: } 219// CHECK-NEXT: Symbol { 220// CHECK-NEXT: Name: RegularWeak_with_UndefWeak 221// CHECK-NEXT: Value: 222// CHECK-NEXT: Size: 3 223// CHECK-NEXT: Binding: Weak 224// CHECK-NEXT: Type: None 225// CHECK-NEXT: Other: 0 226// CHECK-NEXT: Section: .text 227// CHECK-NEXT: } 228// CHECK-NEXT: Symbol { 229// CHECK-NEXT: Name: UndefStrong_with_CommonStrong 230// CHECK-NEXT: Value: 231// CHECK-NEXT: Size: 51 232// CHECK-NEXT: Binding: Global 233// CHECK-NEXT: Type: Object 234// CHECK-NEXT: Other: 0 235// CHECK-NEXT: Section: 236// CHECK-NEXT: } 237// CHECK-NEXT: Symbol { 238// CHECK-NEXT: Name: UndefStrong_with_CommonWeak 239// CHECK-NEXT: Value: 240// CHECK-NEXT: Size: 50 241// CHECK-NEXT: Binding: Weak 242// CHECK-NEXT: Type: Object 243// CHECK-NEXT: Other: 0 244// CHECK-NEXT: Section: 245// CHECK-NEXT: } 246// CHECK-NEXT: Symbol { 247// CHECK-NEXT: Name: UndefStrong_with_RegularStrong 248// CHECK-NEXT: Value: 249// CHECK-NEXT: Size: 46 250// CHECK-NEXT: Binding: Global 251// CHECK-NEXT: Type: None 252// CHECK-NEXT: Other: 0 253// CHECK-NEXT: Section: .text 254// CHECK-NEXT: } 255// CHECK-NEXT: Symbol { 256// CHECK-NEXT: Name: UndefStrong_with_RegularWeak 257// CHECK-NEXT: Value: 258// CHECK-NEXT: Size: 45 259// CHECK-NEXT: Binding: Weak 260// CHECK-NEXT: Type: None 261// CHECK-NEXT: Other: 0 262// CHECK-NEXT: Section: .text 263// CHECK-NEXT: } 264// CHECK-NEXT: Symbol { 265// CHECK-NEXT: Name: UndefWeak_with_CommonStrong 266// CHECK-NEXT: Value: 267// CHECK-NEXT: Size: 49 268// CHECK-NEXT: Binding: Global 269// CHECK-NEXT: Type: Object 270// CHECK-NEXT: Other: 0 271// CHECK-NEXT: Section: 272// CHECK-NEXT: } 273// CHECK-NEXT: Symbol { 274// CHECK-NEXT: Name: UndefWeak_with_CommonWeak 275// CHECK-NEXT: Value: 276// CHECK-NEXT: Size: 48 277// CHECK-NEXT: Binding: Weak 278// CHECK-NEXT: Type: Object 279// CHECK-NEXT: Other: 0 280// CHECK-NEXT: Section: 281// CHECK-NEXT: } 282// CHECK-NEXT: Symbol { 283// CHECK-NEXT: Name: UndefWeak_with_RegularStrong 284// CHECK-NEXT: Value: 285// CHECK-NEXT: Size: 44 286// CHECK-NEXT: Binding: Global 287// CHECK-NEXT: Type: None 288// CHECK-NEXT: Other: 0 289// CHECK-NEXT: Section: .text 290// CHECK-NEXT: } 291// CHECK-NEXT: Symbol { 292// CHECK-NEXT: Name: UndefWeak_with_RegularWeak 293// CHECK-NEXT: Value: 294// CHECK-NEXT: Size: 43 295// CHECK-NEXT: Binding: Weak 296// CHECK-NEXT: Type: None 297// CHECK-NEXT: Other: 0 298// CHECK-NEXT: Section: .text 299// CHECK-NEXT: } 300// CHECK-NEXT: Symbol { 301// CHECK-NEXT: Name: UndefWeak_with_UndefWeak 302// CHECK-NEXT: Value: 0x0 303// CHECK-NEXT: Size: 0 304// CHECK-NEXT: Binding: Weak 305// CHECK-NEXT: Type: None 306// CHECK-NEXT: Other: 0 307// CHECK-NEXT: Section: Undefined 308// CHECK-NEXT: } 309// CHECK-NEXT: Symbol { 310// CHECK-NEXT: Name: _start 311// CHECK-NEXT: Value: 312// CHECK-NEXT: Size: 0 313// CHECK-NEXT: Binding: Global (0x1) 314// CHECK-NEXT: Type: None (0x0) 315// CHECK-NEXT: Other: 0 316// CHECK-NEXT: Section: .text (0x1) 317// CHECK-NEXT: } 318// CHECK-NEXT: ] 319 320.globl _start 321_start: 322 nop 323 324local: 325 326.weak RegularWeak_with_RegularWeak 327.size RegularWeak_with_RegularWeak, 0 328RegularWeak_with_RegularWeak: 329 330.weak RegularWeak_with_RegularStrong 331.size RegularWeak_with_RegularStrong, 1 332RegularWeak_with_RegularStrong: 333 334.global RegularStrong_with_RegularWeak 335.size RegularStrong_with_RegularWeak, 2 336RegularStrong_with_RegularWeak: 337 338.weak RegularWeak_with_UndefWeak 339.size RegularWeak_with_UndefWeak, 3 340RegularWeak_with_UndefWeak: 341 342.weak RegularWeak_with_UndefStrong 343.size RegularWeak_with_UndefStrong, 4 344RegularWeak_with_UndefStrong: 345 346.global RegularStrong_with_UndefWeak 347.size RegularStrong_with_UndefWeak, 5 348RegularStrong_with_UndefWeak: 349 350.global RegularStrong_with_UndefStrong 351.size RegularStrong_with_UndefStrong, 6 352RegularStrong_with_UndefStrong: 353 354.weak RegularWeak_with_CommonWeak 355.size RegularWeak_with_CommonWeak, 7 356RegularWeak_with_CommonWeak: 357 358.weak RegularWeak_with_CommonStrong 359.size RegularWeak_with_CommonStrong, 8 360RegularWeak_with_CommonStrong: 361 362.global RegularStrong_with_CommonWeak 363.size RegularStrong_with_CommonWeak, 9 364RegularStrong_with_CommonWeak: 365 366.global RegularStrong_with_CommonStrong 367.size RegularStrong_with_CommonStrong, 10 368RegularStrong_with_CommonStrong: 369 370.weak UndefWeak_with_RegularWeak 371.size UndefWeak_with_RegularWeak, 11 372.quad UndefWeak_with_RegularWeak 373 374.weak UndefWeak_with_RegularStrong 375.size UndefWeak_with_RegularStrong, 12 376.quad UndefWeak_with_RegularStrong 377 378.size UndefStrong_with_RegularWeak, 13 379.quad UndefStrong_with_RegularWeak 380 381.size UndefStrong_with_RegularStrong, 14 382.quad UndefStrong_with_RegularStrong 383 384.weak UndefWeak_with_UndefWeak 385.size UndefWeak_with_UndefWeak, 15 386.quad UndefWeak_with_UndefWeak 387 388.weak UndefWeak_with_CommonWeak 389.size UndefWeak_with_CommonWeak, 16 390.quad UndefWeak_with_CommonWeak 391 392.weak UndefWeak_with_CommonStrong 393.size UndefWeak_with_CommonStrong, 17 394.quad UndefWeak_with_CommonStrong 395 396.size UndefStrong_with_CommonWeak, 18 397.quad UndefStrong_with_CommonWeak 398 399.size UndefStrong_with_CommonStrong, 19 400.quad UndefStrong_with_CommonStrong 401 402.weak CommonWeak_with_RegularWeak 403.comm CommonWeak_with_RegularWeak,20,4 404 405.weak CommonWeak_with_RegularStrong 406.comm CommonWeak_with_RegularStrong,21,4 407 408.comm CommonStrong_with_RegularWeak,22,4 409 410.comm CommonStrong_with_RegularStrong,23,4 411 412.weak CommonWeak_with_UndefWeak 413.comm CommonWeak_with_UndefWeak,24,4 414 415.weak CommonWeak_with_UndefStrong 416.comm CommonWeak_with_UndefStrong,25,4 417 418.comm CommonStrong_with_UndefWeak,26,4 419 420.comm CommonStrong_with_UndefStrong,27,4 421 422.weak CommonWeak_with_CommonWeak 423.comm CommonWeak_with_CommonWeak,28,4 424 425.weak CommonWeak_with_CommonStrong 426.comm CommonWeak_with_CommonStrong,29,4 427 428.comm CommonStrong_with_CommonWeak,30,4 429 430.comm CommonStrong_with_CommonStrong,31,4 431