| # 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 |