(root)/
glibc-2.38/
elf/
ifuncdep2.c
       1  /* Test 3 STT_GNU_IFUNC symbols.  */
       2  
       3  #include "ifunc-sel.h"
       4  
       5  int global = -1;
       6  /* Can't use __attribute__((visibility("protected"))) until the GCC bug:
       7  
       8     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248
       9  
      10     is fixed.  */
      11  asm (".protected global");
      12  
      13  static int
      14  one (void)
      15  {
      16    return 1;
      17  }
      18  
      19  static int
      20  minus_one (void)
      21  {
      22    return -1;
      23  }
      24  
      25  static int
      26  zero (void)
      27  {
      28    return 0;
      29  }
      30  
      31  void * foo1_ifunc (void) __asm__ ("foo1");
      32  __asm__(".type foo1, %gnu_indirect_function");
      33  
      34  void *
      35  inhibit_stack_protector
      36  foo1_ifunc (void)
      37  {
      38    return ifunc_sel (one, minus_one, zero);
      39  }
      40  
      41  void * foo2_ifunc (void) __asm__ ("foo2");
      42  __asm__(".type foo2, %gnu_indirect_function");
      43  
      44  void *
      45  inhibit_stack_protector
      46  foo2_ifunc (void)
      47  {
      48    return ifunc_sel (minus_one, one, zero);
      49  }
      50  
      51  void * foo3_ifunc (void) __asm__ ("foo3");
      52  __asm__(".type foo3, %gnu_indirect_function");
      53  
      54  void *
      55  inhibit_stack_protector
      56  foo3_ifunc (void)
      57  {
      58    return ifunc_sel (one, zero, minus_one);
      59  }