70 lines · plain
1; RUN: llc -mtriple=arm64-unknown-linux-gnu %s -o - | FileCheck %s --check-prefixes=ELF2; RUN: llc -mtriple=arm64-apple-darwin %s -o - | FileCheck %s --check-prefix=MACHO3; RUN: llc -mtriple=arm64-apple-darwin %s -global-isel -o - | FileCheck %s --check-prefix=MACHO4 5define internal ptr @the_resolver() {6entry:7 ret ptr null8}9; ELF: .type the_resolver,@function10; ELF-NEXT: the_resolver:11 12; MACHO: .p2align 213; MACHO-NEXT: _the_resolver:14 15 16@global_ifunc = ifunc i32 (i32), ptr @the_resolver17; ELF: .globl global_ifunc18; ELF-NEXT: .type global_ifunc,@gnu_indirect_function19; ELF-NEXT: global_ifunc = the_resolver20 21; MACHO: .section __DATA,__data22; MACHO-NEXT: .p2align 3, 0x023; MACHO-NEXT: _global_ifunc.lazy_pointer:24; MACHO-NEXT: .quad _global_ifunc.stub_helper25 26; MACHO: .section __TEXT,__text,regular,pure_instructions27; MACHO-NEXT: .globl _global_ifunc28; MACHO-NEXT: .p2align 229; MACHO-NEXT: _global_ifunc:30; MACHO-NEXT: adrp x16, _global_ifunc.lazy_pointer@GOTPAGE31; MACHO-NEXT: ldr x16, [x16, _global_ifunc.lazy_pointer@GOTPAGEOFF]32; MACHO-NEXT: ldr x16, [x16]33; MACHO-NEXT: br x1634; MACHO-NEXT: .p2align 235; MACHO-NEXT: _global_ifunc.stub_helper:36; MACHO-NEXT: stp x29, x30, [sp, #-16]!37; MACHO-NEXT: mov x29, sp38; MACHO-NEXT: stp x1, x0, [sp, #-16]!39; MACHO-NEXT: stp x3, x2, [sp, #-16]!40; MACHO-NEXT: stp x5, x4, [sp, #-16]!41; MACHO-NEXT: stp x7, x6, [sp, #-16]!42; MACHO-NEXT: stp d1, d0, [sp, #-16]!43; MACHO-NEXT: stp d3, d2, [sp, #-16]!44; MACHO-NEXT: stp d5, d4, [sp, #-16]!45; MACHO-NEXT: stp d7, d6, [sp, #-16]!46; MACHO-NEXT: bl _the_resolver47; MACHO-NEXT: adrp x16, _global_ifunc.lazy_pointer@GOTPAGE48; MACHO-NEXT: ldr x16, [x16, _global_ifunc.lazy_pointer@GOTPAGEOFF]49; MACHO-NEXT: str x0, [x16]50; MACHO-NEXT: add x16, x0, #051; MACHO-NEXT: ldp d7, d6, [sp], #1652; MACHO-NEXT: ldp d5, d4, [sp], #1653; MACHO-NEXT: ldp d3, d2, [sp], #1654; MACHO-NEXT: ldp d1, d0, [sp], #1655; MACHO-NEXT: ldp x7, x6, [sp], #1656; MACHO-NEXT: ldp x5, x4, [sp], #1657; MACHO-NEXT: ldp x3, x2, [sp], #1658; MACHO-NEXT: ldp x1, x0, [sp], #1659; MACHO-NEXT: ldp x29, x30, [sp], #1660; MACHO-NEXT: br x1661 62 63@weak_ifunc = weak ifunc i32 (i32), ptr @the_resolver64; ELF: .type weak_ifunc,@gnu_indirect_function65; MACHO-NOT: .weak_reference _weak_ifunc.lazy_pointer66; MACHO: _weak_ifunc.lazy_pointer:67; MACHO: .weak_reference _weak_ifunc68; MACHO: _weak_ifunc:69; MACHO-NOT: .weak_reference _weak_ifunc.stub_helper70; MACHO: _weak_ifunc.stub_helper: