# REQUIRES: ppc
# RUN: rm -rf %t && split-file %s %t && cd %t
# RUN: llvm-mc -filetype=obj -triple=powerpc -crel a.s -o a.o
# RUN: llvm-mc -filetype=obj -triple=powerpc -crel b.s -o b.o
# RUN: ld.lld -r b.o a.o -o out
# RUN: llvm-readobj -r out | FileCheck %s --check-prefixes=CHECK,CRELFOO
# RUN: llvm-mc -filetype=obj -triple=powerpc a.s -o a1.o
# RUN: ld.lld -r b.o a1.o -o out1
# RUN: llvm-readobj -r out1 | FileCheck %s --check-prefixes=CHECK,RELAFOO
# RUN: ld.lld -r a1.o b.o -o out2
# RUN: llvm-readobj -r out2 | FileCheck %s --check-prefixes=CHECK2
# CHECK: Relocations [
# CHECK-NEXT: Section (2) .crel.text {
# CHECK-NEXT: 0x0 R_PPC_REL24 fb 0x0
# CHECK-NEXT: 0x4 R_PPC_REL24 foo 0x0
# CHECK-NEXT: 0x8 R_PPC_REL24 .text.foo 0x0
# CHECK-NEXT: 0xE R_PPC_ADDR16_HA .rodata.str1.1 0x4
# CHECK-NEXT: 0x12 R_PPC_ADDR16_LO .rodata.str1.1 0x4
# CHECK-NEXT: 0x16 R_PPC_ADDR16_HA .rodata.str1.1 0x0
# CHECK-NEXT: 0x1A R_PPC_ADDR16_LO .rodata.str1.1 0x0
# CHECK-NEXT: }
# CRELFOO-NEXT: Section (4) .crel.text.foo {
# RELAFOO-NEXT: Section (4) .rela.text.foo {
# CHECK-NEXT: 0x0 R_PPC_REL24 g 0x0
# CHECK-NEXT: 0x4 R_PPC_REL24 g 0x0
# CHECK-NEXT: }
# CHECK-NEXT: ]
# CHECK2: Relocations [
# CHECK2-NEXT: Section (2) .crel.text {
# CHECK2-NEXT: 0x0 R_PPC_REL24 foo 0x0
# CHECK2-NEXT: 0x4 R_PPC_REL24 .text.foo 0x0
# CHECK2-NEXT: 0xA R_PPC_ADDR16_HA .rodata.str1.1 0x4
# CHECK2-NEXT: 0xE R_PPC_ADDR16_LO .rodata.str1.1 0x4
# CHECK2-NEXT: 0x12 R_PPC_ADDR16_HA .rodata.str1.1 0x0
# CHECK2-NEXT: 0x16 R_PPC_ADDR16_LO .rodata.str1.1 0x0
# CHECK2-NEXT: 0x18 R_PPC_REL24 fb 0x0
# CHECK2-NEXT: }
# CHECK2-NEXT: Section (4) .rela.text.foo {
# CHECK2-NEXT: 0x0 R_PPC_REL24 g 0x0
# CHECK2-NEXT: 0x4 R_PPC_REL24 g 0x0
# CHECK2-NEXT: }
# CHECK2-NEXT: ]
#--- a.s
.global _start, foo
_start:
bl foo
bl .text.foo
lis 3, .L.str@ha
la 3, .L.str@l(3)
lis 3, .L.str1@ha
la 3, .L.str1@l(3)
.section .text.foo,"ax"
foo:
bl g
bl g
.section .rodata.str1.1,"aMS",@progbits,1
.L.str:
.asciz "abc"
.L.str1:
.asciz "def"
#--- b.s
.globl fb
fb:
bl fb