Since GCC 5 folds symbol address comparison, assuming each symbol has a
different address, &foo == &bar is always false for GCC 5. This patch
adds check_ptr_eq if 2 addresses are the same and uses it to check the
address of versined symbol.
PR ld/18718
* ld-elf/check-ptr-eq.c: New file.
* ld-elf/pr18718.c (main): Call check_ptr_eq.
* ld-elf/shared.exp: Add check-ptr-eq.c to PR ld/18718 tests.
--- /dev/null
+extern void abort (void);
+
+/* Since GCC 5 folds symbol address comparison, assuming each symbol has
+ different address, &foo == &bar is always false for GCC 5. Use
+ check_ptr_eq to check if 2 addresses are the same. */
+
+void
+check_ptr_eq (void *p1, void *p2)
+{
+ if (p1 != p2)
+ abort ();
+}
#include <bfd_stdint.h>
extern void foo (void);
+extern void check_ptr_eq (void *, void *);
void
new_foo (void)
main(void)
{
bar ();
+ check_ptr_eq (&foo, &new_foo);
printf("PASS\n");
return 0;
}
"Run pr18718" \
"" \
"" \
- { pr18718.c } \
+ { pr18718.c check-ptr-eq.c } \
"pr18718" \
"pass.out" \
"-O2 -I../bfd" \
"Run pr18718 with PIE (1)" \
"-pie" \
"" \
- { pr18718.c } \
+ { pr18718.c check-ptr-eq.c } \
"pr18718pie1" \
"pass.out" \
"-O2 -fPIE -I../bfd" \
"Run pr18718 with PIE (2)" \
"" \
"" \
- { pr18718.c } \
+ { pr18718.c check-ptr-eq.c } \
"pr18718pie2" \
"pass.out" \
"-O2 -fPIE -I../bfd" \
"Run pr18718 with PIC (1)" \
"" \
"" \
- { pr18718.c } \
+ { pr18718.c check-ptr-eq.c } \
"pr18718pic1" \
"pass.out" \
"-O2 -fPIC -I../bfd" \
"Run pr18718 with PIC (2)" \
"-pie" \
"" \
- { pr18718.c } \
+ { pr18718.c check-ptr-eq.c } \
"pr18718pic2" \
"pass.out" \
"-O2 -fPIC -I../bfd" \