brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.5 KiB · 76a0738 Raw
290 lines · plain
1# REQUIRES: system-linux2# RUN: rm -rf %t && mkdir -p %t3# RUN: llvm-mc --triple=powerpc64le-unknown-linux-gnu --filetype=obj -o \4# RUN:   %t/elf_reloc.o --defsym LE=1 %s5# RUN: llvm-jitlink --noexec \6# RUN:              --abs external_data=0xdeadbeef \7# RUN:              --abs external_func=0xcafef00d \8# RUN:              --abs external_func_notoc=0x88880000 \9# RUN:              --abs external_addr14_func=0x0880 \10# RUN:              --abs external_addr16_data=0x6000 \11# RUN:              --abs external_addr32_data=0x36668840 \12# RUN:              --abs pcrel_external_var=0x36668860 \13# RUN:              --abs pcrel_external_tls=0x36668880 \14# RUN:              --check %s %t/elf_reloc.o15# RUN: llvm-mc --triple=powerpc64-unknown-linux-gnu --filetype=obj -o \16# RUN:   %t/elf_reloc.o %s17# RUN: llvm-jitlink --noexec \18# RUN:              --abs external_data=0xdeadbeef \19# RUN:              --abs external_func=0xcafef00d \20# RUN:              --abs external_func_notoc=0x88880000 \21# RUN:              --abs external_addr14_func=0x0880 \22# RUN:              --abs external_addr16_data=0x6000 \23# RUN:              --abs external_addr32_data=0x36668840 \24# RUN:              --abs pcrel_external_var=0x36668860 \25# RUN:              --abs pcrel_external_tls=0x36668880 \26# RUN:              --check %s %t/elf_reloc.o27 28# There seems to be issue with cross-build using dlsym for *host* symbols.29# Disabling for SystemZ - reloc_tlsgd_pcrel34 fails to resolve __tls_get_addr.30# UNSUPPORTED: target=s390{{.*}}31 32# jitlink-check: section_addr(elf_reloc.o, $__GOT) + 0x8000 = __TOC__33  .text34  .abiversion 235  .global external_addr32_data36  .global external_addr16_data37  .global main38  .p2align 439  .type main,@function40main:41  li 3, 042  blr43  .size main, .-main44 45# Check R_PPC64_REL16_HA and R_PPC64_REL16_LO46# jitlink-check: decode_operand(test_rel16, 2) & 0xffff = \47# jitlink-check:   (((__TOC__ - test_rel16) + 0x8000) >> 16) & 0xffff48# jitlink-check: decode_operand(test_rel16 + 4, 2) & 0xffff = \49# jitlink-check:   (__TOC__ - test_rel16) & 0xffff50  .global test_rel1651  .p2align 452  .type test_re16,@function53test_rel16:54  .Ltest_rel16_begin:55  addis 2, 12, .TOC.-.Ltest_rel16_begin@ha56  addi 2, 2, .TOC.-.Ltest_rel16_begin@l57  li 3, 058  blr59  .size test_rel16, .-test_rel1660 61# Check R_PPC64_ADDR64, R_PPC64_TOC16_HA and R_PPC64_TOC16_LO62# jitlink-check: *{8}(got_addr(elf_reloc.o, external_data)) = external_data63# jitlink-check: decode_operand(test_tocrel16, 2) & 0xffff = \64# jitlink-check:   (((got_addr(elf_reloc.o, external_data) - __TOC__) + 0x8000) >> 16) & 0xffff65# jitlink-check: decode_operand(test_tocrel16 + 4, 1) & 0xffff = \66# jitlink-check:   (got_addr(elf_reloc.o, external_data) - __TOC__) & 0xffff67  .global test_tocrel1668  .p2align 469  .type test_tocrel16,@function70test_tocrel16:71  addis 3, 2, .LC0@toc@ha72  ld 3, .LC0@toc@l(3)73  blr74  .size test_tocrel16, .-test_tocrel1675 76# Check R_PPC64_REL2477# jitlink-check: *{8}(got_addr(elf_reloc.o, external_func)) = external_func78# jitlink-check: decode_operand(test_external_call, 0) = \79# jitlink-check:   (stub_addr(elf_reloc.o, external_func) - test_external_call) >> 280# Check r2 is saved.81# jitlink-check: *{4}(stub_addr(elf_reloc.o, external_func)) = 0xf841001882  .global test_external_call83  .p2align 484  .type test_external_call,@function85test_external_call:86  bl external_func87  nop88  blr89  .size test_external_call, .-test_external_call90 91# FIXME: Current implementation allows only one plt call stub for a target function,92# so we can't re-use `external_func` as target here.93# Check R_PPC64_REL24_NOTOC94# jitlink-check: *{8}(got_addr(elf_reloc.o, external_func_notoc)) = external_func_notoc95# jitlink-check: decode_operand(test_external_call_notoc, 0) = \96# jitlink-check:   (stub_addr(elf_reloc.o, external_func_notoc) - test_external_call_notoc) >> 297# jitlink-check: (*{4}(stub_addr(elf_reloc.o, external_func_notoc) + 16)) & 0xffff = \98# jitlink-check:   ((((got_addr(elf_reloc.o, external_func_notoc) - stub_addr(elf_reloc.o, external_func_notoc)) - 8) + 0x8000) >> 16) & 0xffff99# jitlink-check: (*{4}(stub_addr(elf_reloc.o, external_func_notoc) + 20)) & 0xffff = \100# jitlink-check:   ((got_addr(elf_reloc.o, external_func_notoc) - stub_addr(elf_reloc.o, external_func_notoc)) - 8) & 0xffff101  .global test_external_call_notoc102  .p2align 4103  .type test_external_call_notoc,@function104test_external_call_notoc:105  bl external_func_notoc@notoc106  blr107  .size test_external_call_notoc, .-test_external_call_notoc108 109# Check R_PPC64_PCREL34110# jitlink-check: (section_addr(elf_reloc.o, .rodata.str1.1) - test_pcrel34)[33:0] = \111# jitlink-check:   ((((*{4}(test_pcrel34)) & 0x3ffff) << 16) | ((*{4}(test_pcrel34 + 4)) & 0xffff))[33:0]112  .global test_pcrel34113  .p2align 4114  .type test_pcrel34,@function115test_pcrel34:116  paddi 3, 0, .L.str@PCREL, 1117  blr118  .size test_pcrel34, .-test_pcrel34119 120# Check R_PPC64_ADDR14121# jitlink-check: decode_operand(reloc_addr14, 2) << 2 = external_addr14_func122  .global reloc_addr14123  .p2align 4124  .type reloc_addr14,@function125reloc_addr14:126  bca 21, 30, external_addr14_func127  .size reloc_addr14, .-reloc_addr14128 129# Check R_PPC64_TOC16130# jitlink-check: decode_operand(reloc_toc16, 1) & 0xffff = \131# jitlink-check:   (section_addr(elf_reloc.o, .rodata.str1.1) - __TOC__) & 0xffff132# jitlink-check: decode_operand(reloc_toc16 + 4, 1) & 0xffff = \133# jitlink-check:   ((section_addr(elf_reloc.o, .rodata.str1.1) - __TOC__) >> 16) & 0xffff134# jitlink-check: decode_operand(reloc_toc16 + 8, 1) & 0xffff = \135# jitlink-check:   (((section_addr(elf_reloc.o, .rodata.str1.1) - __TOC__) + 0x8000) >> 16) & 0xffff136# jitlink-check: decode_operand(reloc_toc16 + 12, 1) & 0xffff = \137# jitlink-check:   (section_addr(elf_reloc.o, .rodata.str1.1) - __TOC__) & 0xffff138  .global reloc_toc16139  .p2align 4140  .type reloc_toc16,@function141reloc_toc16:142.ifdef LE143  li 3, 0144  .reloc reloc_toc16, R_PPC64_TOC16, .L.str145  li 3, 0146  .reloc reloc_toc16+4, R_PPC64_TOC16_HI, .L.str147  li 3, 0148  .reloc reloc_toc16+8, R_PPC64_TOC16_HA, .L.str149  li 3, 0150  .reloc reloc_toc16+12, R_PPC64_TOC16_DS, .L.str151.else152  li 3, 0153  .reloc reloc_toc16+2, R_PPC64_TOC16, .L.str154  li 3, 0155  .reloc reloc_toc16+6, R_PPC64_TOC16_HI, .L.str156  li 3, 0157  .reloc reloc_toc16+10, R_PPC64_TOC16_HA, .L.str158  li 3, 0159  .reloc reloc_toc16+14, R_PPC64_TOC16_DS, .L.str160.endif161  blr162  .size reloc_toc16, .-reloc_toc16163 164# Check R_PPC64_ADDR16*165# R_PPC64_ADDR16_DS166# jitlink-check: decode_operand(reloc_addr16, 1) & 0xffff = \167# jitlink-check: external_addr16_data168# R_PPC64_ADDR16_LO169# jitlink-check: decode_operand(reloc_addr16 + 4, 1) & 0xffff = \170# jitlink-check: external_addr32_data & 0xffff171# R_PPC64_ADDR16_LO_DS172# jitlink-check: decode_operand(reloc_addr16 + 8, 1) & 0xffff = \173# jitlink-check: external_addr32_data & 0xffff174# R_PPC64_ADDR16175# jitlink-check: decode_operand(reloc_addr16 + 12, 1) & 0xffff = \176# jitlink-check: external_addr16_data177# R_PPC64_ADDR16_HI178# jitlink-check: decode_operand(reloc_addr16 + 16, 1) & 0xffff = \179# jitlink-check: (external_addr32_data >> 16) & 0xffff180# R_PPC64_ADDR16_HA181# jitlink-check: decode_operand(reloc_addr16 + 20, 1) & 0xffff = \182# jitlink-check: ((external_addr32_data + 0x8000) >> 16) & 0xffff183# R_PPC64_ADDR16_HIGH184# jitlink-check: decode_operand(reloc_addr16 + 24, 1) & 0xffff = \185# jitlink-check: (external_addr32_data >> 16) & 0xffff186# R_PPC64_ADDR16_HIGHA187# jitlink-check: decode_operand(reloc_addr16 + 28, 1) & 0xffff = \188# jitlink-check: ((external_addr32_data + 0x8000) >> 16) & 0xffff189# R_PPC64_ADDR16_HIGHER190# jitlink-check: decode_operand(reloc_addr16 + 32, 1) & 0xffff = \191# jitlink-check: (external_addr32_data >> 32) & 0xffff192# R_PPC64_ADDR16_HIGHERA193# jitlink-check: decode_operand(reloc_addr16 + 36, 1) & 0xffff = \194# jitlink-check: ((external_addr32_data + 0x8000) >> 32) & 0xffff195# R_PPC64_ADDR16_HIGHEST196# jitlink-check: decode_operand(reloc_addr16 + 40, 1) & 0xffff = \197# jitlink-check: (external_addr32_data >> 48) & 0xffff198# R_PPC64_ADDR16_HIGHESTA199# jitlink-check: decode_operand(reloc_addr16 + 44, 1) & 0xffff = \200# jitlink-check: ((external_addr32_data + 0x8000) >> 48) & 0xffff201  .global reloc_addr16202  .p2align 4203  .type reloc_addr16,@function204reloc_addr16:205.ifdef LE206  li 3, 0207  .reloc reloc_addr16, R_PPC64_ADDR16_DS, external_addr16_data208  li 3, 0209  .reloc reloc_addr16+4, R_PPC64_ADDR16_LO, external_addr32_data210  li 3, 0211  .reloc reloc_addr16+8, R_PPC64_ADDR16_LO_DS, external_addr32_data212  li 3, 0213  .reloc reloc_addr16+12, R_PPC64_ADDR16, external_addr16_data214  li 3, 0215  .reloc reloc_addr16+16, R_PPC64_ADDR16_HI, external_addr32_data216.else217  li 3, 0218  .reloc reloc_addr16+2, R_PPC64_ADDR16_DS, external_addr16_data219  li 3, 0220  .reloc reloc_addr16+6, R_PPC64_ADDR16_LO, external_addr32_data221  li 3, 0222  .reloc reloc_addr16+10, R_PPC64_ADDR16_LO_DS, external_addr32_data223  li 3, 0224  .reloc reloc_addr16+14, R_PPC64_ADDR16, external_addr16_data225  li 3, 0226  .reloc reloc_addr16+18, R_PPC64_ADDR16_HI, external_addr32_data227.endif228  li 3, external_addr32_data@ha229  li 3, external_addr32_data@high230  li 3, external_addr32_data@higha231  li 3, external_addr32_data@higher232  li 3, external_addr32_data@highera233  li 3, external_addr32_data@highest234  li 3, external_addr32_data@highesta235  blr236  .size reloc_addr16, .-reloc_addr16237 238# Check R_PPC64_REL16*239# jitlink-check: decode_operand(reloc_rel16, 1) & 0xffff = \240# jitlink-check:   (__TOC__ - reloc_rel16) & 0xffff241# jitlink-check: decode_operand(reloc_rel16 + 4, 1) & 0xffff = \242# jitlink-check:   ((__TOC__ - reloc_rel16) >> 16) & 0xffff243  .global reloc_rel16244  .p2align 4245  .type reloc_rel16,@function246reloc_rel16:247  li 3, .TOC.-reloc_rel16248  li 3, .TOC.-reloc_rel16@h249  blr250  .size reloc_rel16, .-reloc_rel16251 252# Check R_PPC64_GOT_PCREL34253# jitlink-check: (got_addr(elf_reloc.o, pcrel_external_var) - reloc_got_pcrel34)[33:0] = \254# jitlink-check:   ((((*{4}(reloc_got_pcrel34)) & 0x3ffff) << 16) | ((*{4}(reloc_got_pcrel34 + 4)) & 0xffff))[33:0]255  .global reloc_got_pcrel34256  .p2align 4257  .type reloc_got_pcrel34,@function258reloc_got_pcrel34:259  pld 3,pcrel_external_var@got@pcrel(0),1260.Lpcrel0:261  .reloc .Lpcrel0-8,R_PPC64_PCREL_OPT,.-(.Lpcrel0-8)262  blr263  .size reloc_got_pcrel34,.-reloc_got_pcrel34264 265  .global reloc_tlsgd_pcrel34266  .p2align 4267  .type reloc_tlsgd_pcrel34,@function268reloc_tlsgd_pcrel34:269  mflr 0270  std 0, 16(1)271  stdu 1, -32(1)272  paddi 3, 0, pcrel_external_tls@got@tlsgd@pcrel, 1273  bl __tls_get_addr@notoc(a@tlsgd)274  lwa 3, 0(3)275  addi 1, 1, 32276  ld 0, 16(1)277  mtlr 0278  blr279  .size reloc_tlsgd_pcrel34,.-reloc_tlsgd_pcrel34280 281  .type	.L.str,@object282	.section	.rodata.str1.1,"aMS",@progbits,1283.L.str:284	.asciz	"Hey!"285	.size	.L.str, 5286 287 .section .toc,"aw",@progbits288.LC0:289  .tc external_data[TC],external_data290