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