diff options
Diffstat (limited to 'elf/ifuncmain6pie.c')
-rw-r--r-- | elf/ifuncmain6pie.c | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/elf/ifuncmain6pie.c b/elf/ifuncmain6pie.c deleted file mode 100644 index 04faeb86ef..0000000000 --- a/elf/ifuncmain6pie.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Test STT_GNU_IFUNC symbols in PIE: - - 1. Direct function call. - 2. Function pointer. - 3. Reference from a shared library. - */ - -#include <stdlib.h> -#include "ifunc-sel.h" - -typedef int (*foo_p) (void); -extern foo_p foo_ptr; - -static int -one (void) -{ - return -30; -} - -void * foo_ifunc (void) __asm__ ("foo"); -__asm__(".type foo, %gnu_indirect_function"); - -void * -inhibit_stack_protector -foo_ifunc (void) -{ - return ifunc_one (one); -} - -extern int foo (void); -extern foo_p get_foo (void); -extern foo_p get_foo_p (void); - -foo_p my_foo_ptr = foo; - -int -main (void) -{ - foo_p p; - - p = get_foo (); - if (p != foo) - abort (); - if ((*p) () != -30) - abort (); - - p = get_foo_p (); - if (p != foo) - abort (); - if ((*p) () != -30) - abort (); - - if (foo_ptr != foo) - abort (); - if (my_foo_ptr != foo) - abort (); - if ((*foo_ptr) () != -30) - abort (); - if ((*my_foo_ptr) () != -30) - abort (); - if (foo () != -30) - abort (); - - return 0; -} |