diff options
Diffstat (limited to 'binutils-2.21/ld/testsuite/ld-ifunc/lib.c')
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-ifunc/lib.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/binutils-2.21/ld/testsuite/ld-ifunc/lib.c b/binutils-2.21/ld/testsuite/ld-ifunc/lib.c new file mode 100644 index 0000000..393dabf --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-ifunc/lib.c @@ -0,0 +1,39 @@ +int +library_func1 (void) +{ + return 2; +} + +int global = 1; + +#ifdef WITH_IFUNC + +static int minus_one (void) { return -1; } +static int zero (void) { return 0; } + +void * library_func2_ifunc (void) __asm__ ("library_func2"); +void * library_func2_ifunc (void) { return global ? minus_one : zero ; } +__asm__(".type library_func2, %gnu_indirect_function"); + +extern int library_func2 (int); +extern __typeof (library_func2) library_func2 __asm__ ("__GI_library_func2"); + +__asm__(".global __GI_library_func2"); +__asm__(".hidden __GI_library_func2"); +__asm__(".set __GI_library_func2, library_func2"); + +int +library_func (int x) +{ + return library_func2 (x); +} + +#else /* WITHOUT_IFUNC */ + +int +library_func2 (void) +{ + return 3; +} + +#endif |