1// REQUIRES: x86 2// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o 3// RUN: ld.lld -shared %t.o -o %t.so 4// RUN: llvm-readobj --symbols -r --dyn-syms %t.so | FileCheck %s 5 6// Test that we create R_X86_64_RELATIVE relocations but don't put any 7// symbols in the dynamic symbol table. 8 9// CHECK: Relocations [ 10// CHECK-NEXT: Section ({{.*}}) .rela.dyn { 11// CHECK-NEXT: 0x[[FOO_ADDR:.*]] R_X86_64_RELATIVE - 0x[[FOO_ADDR]] 12// CHECK-NEXT: 0x[[#%X,BAR_ADDR:]] R_X86_64_RELATIVE 13// CHECK-SAME: - 0x[[#BAR_ADDR]] 14// CHECK-NEXT: 0x[[#BAR_ADDR + 8]] R_X86_64_RELATIVE - 0x[[#BAR_ADDR + 1]] 15// CHECK-NEXT: 0x[[#BAR_ADDR + 16]] R_X86_64_RELATIVE - 0x[[ZED_ADDR:.*]] 16// CHECK-NEXT: 0x[[#BAR_ADDR + 24]] R_X86_64_RELATIVE - 0x[[FOO_ADDR]] 17// CHECK-NEXT: 0x[[#BAR_ADDR + 32]] R_X86_64_64 external 0x0 18// CHECK-NEXT: } 19// CHECK-NEXT: ] 20 21// CHECK: Symbols [ 22// CHECK: Name: foo 23// CHECK-NEXT: Value: 0x[[FOO_ADDR]] 24// CHECK: Name: bar 25// CHECK-NEXT: Value: 0x[[#BAR_ADDR]] 26// CHECK: Name: zed 27// CHECK-NEXT: Value: 0x[[ZED_ADDR]] 28// CHECK: ] 29 30// CHECK: DynamicSymbols [ 31// CHECK-NEXT: Symbol { 32// CHECK-NEXT: Name: 33// CHECK-NEXT: Value: 0x0 34// CHECK-NEXT: Size: 0 35// CHECK-NEXT: Binding: Local 36// CHECK-NEXT: Type: None 37// CHECK-NEXT: Other: 0 38// CHECK-NEXT: Section: Undefined 39// CHECK-NEXT: } 40// CHECK-NEXT: Symbol { 41// CHECK-NEXT: Name: external 42// CHECK-NEXT: Value: 0x0 43// CHECK-NEXT: Size: 0 44// CHECK-NEXT: Binding: Global 45// CHECK-NEXT: Type: None 46// CHECK-NEXT: Other: 0 47// CHECK-NEXT: Section: Undefined 48// CHECK-NEXT: } 49// CHECK-NEXT: ] 50 51 .data 52foo: 53 .quad foo 54 55 .hidden bar 56 .global bar 57bar: 58 .quad bar 59 .quad bar + 1 60 61 .hidden zed 62 .comm zed,1 63 .quad zed 64 65 .section abc,"aw" 66 .quad foo 67 68 .quad external 69 70// This doesn't need a relocation. 71 callq localfunc@PLT 72localfunc: 73