summaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-elf/pr18718.c
blob: bbf8e037c132ab0b02af7f4d1ba62e4785772e1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdint.h>

extern void foo (void);
extern void check_ptr_eq (void (*) (void), void (*) (void));

void
new_foo (void)
{
}

__asm__(".symver new_foo, foo@@VERS_2.0");
#if defined __powerpc64__ && defined _CALL_AIXDESC && !defined _CALL_LINUX
__asm__(".symver .new_foo, .foo@@VERS_2.0");
#endif

#if defined(__GNUC__) && (__GNUC__ * 1000 + __GNUC_MINOR__) >= 4005
__attribute__ ((noinline, noclone))
#else
__attribute__ ((noinline))
#endif
int
bar (void)
{
  return (intptr_t) &foo == 0x12345678 ? 1 : 0;
}

int
main(void)
{
  bar ();
  check_ptr_eq (&foo, &new_foo);
  printf("PASS\n");
  return 0;
}