Files
clang-p2996/lld/test/ELF/copy-rel-version.s
Fangrui Song 2389a240d0 [ELF] Fix copy relocation when two symbols share the same Symbol instance.
In glibc libc.so.6, the multiple versions of sys_errlist share the same Symbol instance. When sys_errlist is copy relocated, we would replace SharedSymbol with Defined in the first iteration of the following loop:

  for (SharedSymbol *Sym : getSymbolsAt<ELFT>(SS))

Then in the second iteration, we think the symbol (which has been changed to Defined) is still SharedSymbol and screw up (the address ends up in the `Size` field).

llvm-svn: 334432
2018-06-11 19:42:57 +00:00

16 lines
478 B
ArmAsm

// REQUIRES: x86
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/copy-rel-version.s -o %t1.o
// RUN: echo "v1 {}; v2 {};" > %t.ver
// RUN: ld.lld %t1.o -shared -soname t1.so --version-script=%t.ver -o %t1.so
// RUN: ld.lld %t.o %t1.so -o %t
// RUN: llvm-readobj -t %t | FileCheck %s
.global _start
_start:
leaq foo, %rax
// CHECK: Name: foo (
// CHECK-NEXT: Value:
// CHECK-NEXT: Size: 8