forked from OSchip/llvm-project
[ELF] Improve test for copy relocations on aliases
This commit is contained in:
parent
062d9b7d43
commit
d1014d9e6d
|
@ -1,11 +0,0 @@
|
||||||
.globl foo
|
|
||||||
.type foo, @object
|
|
||||||
.size foo, 4
|
|
||||||
foo:
|
|
||||||
.long 1
|
|
||||||
|
|
||||||
.weak bar
|
|
||||||
.type bar, @object
|
|
||||||
.size bar, 4
|
|
||||||
bar:
|
|
||||||
.long 2
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
# REQUIRES: x86
|
||||||
|
# RUN: rm -rf %t && split-file %s %t
|
||||||
|
# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/1.s -o %t/1.o
|
||||||
|
# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/2.s -o %t/2.o
|
||||||
|
# RUN: ld.lld -shared -soname=t2 %t/2.o -o %t/2.so
|
||||||
|
# RUN: ld.lld %t/1.o %t/2.so -o %t/1
|
||||||
|
# RUN: llvm-readelf -S -r --dyn-syms %t/1 | FileCheck %s
|
||||||
|
# RUN: ld.lld --gc-sections -pie %t/1.o %t/2.so -o %t/1
|
||||||
|
# RUN: llvm-readelf -S -r --dyn-syms %t/1 | FileCheck %s
|
||||||
|
|
||||||
|
# CHECK: [[#BSS:]]] .bss
|
||||||
|
|
||||||
|
# CHECK: R_X86_64_COPY [[#%x,]] a1 + 0
|
||||||
|
# CHECK-NEXT: R_X86_64_GLOB_DAT [[#%x,]] b1 + 0
|
||||||
|
# CHECK-NEXT: R_X86_64_COPY [[#%x,]] b1 + 0
|
||||||
|
# CHECK-NEXT: R_X86_64_GLOB_DAT [[#%x,]] a2 + 0
|
||||||
|
|
||||||
|
# CHECK: Value Size Type Bind Vis Ndx Name
|
||||||
|
# CHECK: [[#%x,ADDR:]] 1 OBJECT GLOBAL DEFAULT [[#BSS]] a1
|
||||||
|
# CHECK-NEXT: {{0*}}[[#ADDR+1]] 1 OBJECT WEAK DEFAULT [[#BSS]] b1
|
||||||
|
# CHECK-NEXT: {{0*}}[[#ADDR+1]] 1 OBJECT GLOBAL DEFAULT [[#BSS]] b2
|
||||||
|
# CHECK-NEXT: {{0*}}[[#ADDR]] 1 OBJECT WEAK DEFAULT [[#BSS]] a2
|
||||||
|
# CHECK-NEXT: {{0*}}[[#ADDR+1]] 1 OBJECT GLOBAL DEFAULT [[#BSS]] b3
|
||||||
|
|
||||||
|
#--- 1.s
|
||||||
|
.global _start
|
||||||
|
_start:
|
||||||
|
movl $5, a1
|
||||||
|
mov $b1 - ., %eax
|
||||||
|
mov $b2 - ., %eax
|
||||||
|
|
||||||
|
## Test that a copy relocated alias may have GOT entry.
|
||||||
|
.weak a2, b1
|
||||||
|
movq a2@gotpcrel(%rip), %rax
|
||||||
|
movq b1@gotpcrel(%rip), %rcx
|
||||||
|
|
||||||
|
#--- 2.s
|
||||||
|
.data
|
||||||
|
|
||||||
|
.globl a1, b3
|
||||||
|
.weak a2, b1, b2
|
||||||
|
|
||||||
|
.type a1, @object
|
||||||
|
.type a2, @object
|
||||||
|
a1:
|
||||||
|
a2:
|
||||||
|
.byte 1
|
||||||
|
.size a1, 1
|
||||||
|
.size a2, 1
|
||||||
|
|
||||||
|
.type b1, @object
|
||||||
|
.type b2, @object
|
||||||
|
.type b3, @object
|
||||||
|
b1:
|
||||||
|
b2:
|
||||||
|
b3:
|
||||||
|
.byte 2
|
||||||
|
.size b1, 1
|
||||||
|
.size b2, 1
|
||||||
|
.size b3, 1
|
|
@ -1,25 +0,0 @@
|
||||||
# REQUIRES: x86
|
|
||||||
|
|
||||||
## Test copy relocations can be created for -no-pie and -pie.
|
|
||||||
|
|
||||||
# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
|
|
||||||
# RUN: llvm-mc -filetype=obj -triple=x86_64 %p/Inputs/copy-rel.s -o %t1.o
|
|
||||||
# RUN: ld.lld %t1.o -o %t1.so -shared -soname=so
|
|
||||||
|
|
||||||
# RUN: ld.lld %t.o %t1.so -o %t
|
|
||||||
# RUN: llvm-readobj -r %t | FileCheck %s
|
|
||||||
|
|
||||||
# RUN: ld.lld %t.o %t1.so -o %t -pie
|
|
||||||
# RUN: llvm-readobj -r %t | FileCheck %s
|
|
||||||
|
|
||||||
# CHECK: Relocations [
|
|
||||||
# CHECK-NEXT: .rela.dyn {
|
|
||||||
# CHECK-NEXT: R_X86_64_COPY foo 0x0
|
|
||||||
# CHECK-NEXT: R_X86_64_COPY bar 0x0
|
|
||||||
# CHECK-NEXT: }
|
|
||||||
# CHECK-NEXT: ]
|
|
||||||
|
|
||||||
.global _start
|
|
||||||
_start:
|
|
||||||
mov $foo - ., %eax
|
|
||||||
movabs $bar, %rax
|
|
|
@ -1,69 +0,0 @@
|
||||||
// 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/relocation-copy-alias.s -o %t2.o
|
|
||||||
// RUN: ld.lld --hash-style=sysv -shared %t2.o -o %t.so
|
|
||||||
// RUN: ld.lld --hash-style=sysv %t.o %t.so -o %t3
|
|
||||||
// RUN: llvm-readobj --dyn-symbols -r --expand-relocs %t3 | FileCheck %s
|
|
||||||
// RUN: ld.lld --hash-style=sysv --gc-sections %t.o %t.so -o %t3
|
|
||||||
// RUN: llvm-readobj --dyn-symbols -r --expand-relocs %t3 | FileCheck %s
|
|
||||||
|
|
||||||
.global _start
|
|
||||||
_start:
|
|
||||||
movl $5, a1
|
|
||||||
movl $5, b1
|
|
||||||
movl $5, b2
|
|
||||||
|
|
||||||
// CHECK: .rela.dyn {
|
|
||||||
// CHECK-NEXT: Relocation {
|
|
||||||
// CHECK-NEXT: Offset:
|
|
||||||
// CHECK-NEXT: Type: R_X86_64_COPY
|
|
||||||
// CHECK-NEXT: Symbol: a1
|
|
||||||
// CHECK-NEXT: Addend: 0x0
|
|
||||||
// CHECK-NEXT: }
|
|
||||||
// CHECK-NEXT: Relocation {
|
|
||||||
// CHECK-NEXT: Offset:
|
|
||||||
// CHECK-NEXT: Type: R_X86_64_COPY
|
|
||||||
// CHECK-NEXT: Symbol: b1
|
|
||||||
// CHECK-NEXT: Addend: 0x0
|
|
||||||
// CHECK-NEXT: }
|
|
||||||
// CHECK-NEXT: }
|
|
||||||
|
|
||||||
// CHECK: Name: a1
|
|
||||||
// CHECK-NEXT: Value: [[A:.*]]
|
|
||||||
// CHECK-NEXT: Size: 1
|
|
||||||
// CHECK-NEXT: Binding: Global (0x1)
|
|
||||||
// CHECK-NEXT: Type: Object (0x1)
|
|
||||||
// CHECK-NEXT: Other: 0
|
|
||||||
// CHECK-NEXT: Section: .bss (0x7)
|
|
||||||
|
|
||||||
// CHECK: Name: b1
|
|
||||||
// CHECK-NEXT: Value: [[B:.*]]
|
|
||||||
// CHECK-NEXT: Size: 1
|
|
||||||
// CHECK-NEXT: Binding: Global
|
|
||||||
// CHECK-NEXT: Type: Object (0x1)
|
|
||||||
// CHECK-NEXT: Other: 0
|
|
||||||
// CHECK-NEXT: Section: .bss
|
|
||||||
|
|
||||||
// CHECK: Name: b2
|
|
||||||
// CHECK-NEXT: Value: [[B]]
|
|
||||||
// CHECK-NEXT: Size: 1
|
|
||||||
// CHECK-NEXT: Binding: Global
|
|
||||||
// CHECK-NEXT: Type: Object (0x1)
|
|
||||||
// CHECK-NEXT: Other: 0
|
|
||||||
// CHECK-NEXT: Section: .bss
|
|
||||||
|
|
||||||
// CHECK: Name: a2
|
|
||||||
// CHECK-NEXT: Value: [[A]]
|
|
||||||
// CHECK-NEXT: Size: 1
|
|
||||||
// CHECK-NEXT: Binding: Weak
|
|
||||||
// CHECK-NEXT: Type: Object (0x1)
|
|
||||||
// CHECK-NEXT: Other: 0
|
|
||||||
// CHECK-NEXT: Section: .bss
|
|
||||||
|
|
||||||
// CHECK: Name: b3
|
|
||||||
// CHECK-NEXT: Value: [[B]]
|
|
||||||
// CHECK-NEXT: Size: 1
|
|
||||||
// CHECK-NEXT: Binding: Global
|
|
||||||
// CHECK-NEXT: Type: Object (0x1)
|
|
||||||
// CHECK-NEXT: Other: 0
|
|
||||||
// CHECK-NEXT: Section: .bss
|
|
Loading…
Reference in New Issue