Check address of versined symbol
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Jul 2015 17:04:31 +0000 (10:04 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 27 Jul 2015 17:11:33 +0000 (10:11 -0700)
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.

ld/testsuite/ld-elf/check-ptr-eq.c [new file with mode: 0644]
ld/testsuite/ld-elf/pr18718.c
ld/testsuite/ld-elf/shared.exp

diff --git a/ld/testsuite/ld-elf/check-ptr-eq.c b/ld/testsuite/ld-elf/check-ptr-eq.c
new file mode 100644 (file)
index 0000000..874431f
--- /dev/null
@@ -0,0 +1,12 @@
+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 ();
+}
index de628ef24af098257445ea58c23c8cc258a2dd24..2f4c2a3de2dab3381ffa1a3eae9a175778c0ef07 100644 (file)
@@ -2,6 +2,7 @@
 #include <bfd_stdint.h>
 
 extern void foo (void);
+extern void check_ptr_eq (void *, void *);
 
 void
 new_foo (void)
@@ -21,6 +22,7 @@ int
 main(void)
 {
   bar ();
+  check_ptr_eq (&foo, &new_foo);
   printf("PASS\n");
   return 0;
 }
index 1b6e02f2032d25ce84f120c1d2a651ab558db884..007674043ed918e4180982ee042c9c6f153a3276 100644 (file)
@@ -533,7 +533,7 @@ if { [istarget *-*-linux*]
            "Run pr18718" \
            "" \
            "" \
-           { pr18718.c } \
+           { pr18718.c check-ptr-eq.c } \
            "pr18718" \
            "pass.out" \
            "-O2 -I../bfd" \
@@ -542,7 +542,7 @@ if { [istarget *-*-linux*]
            "Run pr18718 with PIE (1)" \
            "-pie" \
            "" \
-           { pr18718.c } \
+           { pr18718.c check-ptr-eq.c } \
            "pr18718pie1" \
            "pass.out" \
            "-O2 -fPIE -I../bfd" \
@@ -551,7 +551,7 @@ if { [istarget *-*-linux*]
            "Run pr18718 with PIE (2)" \
            "" \
            "" \
-           { pr18718.c } \
+           { pr18718.c check-ptr-eq.c } \
            "pr18718pie2" \
            "pass.out" \
            "-O2 -fPIE -I../bfd" \
@@ -560,7 +560,7 @@ if { [istarget *-*-linux*]
            "Run pr18718 with PIC (1)" \
            "" \
            "" \
-           { pr18718.c } \
+           { pr18718.c check-ptr-eq.c } \
            "pr18718pic1" \
            "pass.out" \
            "-O2 -fPIC -I../bfd" \
@@ -569,7 +569,7 @@ if { [istarget *-*-linux*]
            "Run pr18718 with PIC (2)" \
            "-pie" \
            "" \
-           { pr18718.c } \
+           { pr18718.c check-ptr-eq.c } \
            "pr18718pic2" \
            "pass.out" \
            "-O2 -fPIC -I../bfd" \