This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

PATCH: More ELF weak tests for linker.


Here are more ELF weak tests. I will fix the linker when glibc is
fixed.


H.J.
----
2001-09-10  H.J. Lu  <hjl@gnu.org>

	* ld-elfweak/elfweak.exp (build_lib): Take a list of object
	files.
	(build_exec): Likewise.
	Add more tests and make some xfail.

	* ld-elfweak/dso.dsym: Support symbol versioning.
	* ld-elfweak/dsow.dsym: Likewise.

	* ld-elfweak/main1.c: New.
	* ld-elfweak/bar1a.c: Likewise.
	* ld-elfweak/bar1b.c: Likewise.
	* ld-elfweak/bar1c.c: Likewise.
	* ld-elfweak/foo1a.c: Likewise.
	* ld-elfweak/foo1b.c: Likewise.
	* ld-elfweak/dsodata.dsym: Likewise.
	* ld-elfweak/dsowdata.dsym: Likewise.
	* ld-elfweak/weakdata.dsym: Likewise.
	* ld-elfweak/strongcomm.sym: Likewise.
	* ld-elfweak/strongdata.sym: Likewise.
	* ld-elfweak/weakdata.dat: Likewise.
	* ld-elfweak/strongdata.dat: Likewise.

Index: ld-elfweak/dso.dsym
===================================================================
RCS file: /work/cvs/gnu/binutils/ld/testsuite/ld-elfweak/dso.dsym,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 dso.dsym
--- ld-elfweak/dso.dsym	2001/09/10 17:18:24	1.1.1.1
+++ ld-elfweak/dso.dsym	2001/09/10 22:10:20
@@ -1 +1 @@
-[0-9a-f]*[ 	]+g[ 	]+DF[ 	]+.text[	]+[0-9a-f]*[ 	]+foo
+[0-9a-f]*[ 	]+g[ 	]+DF[ 	]+.text[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)foo
Index: ld-elfweak/dsow.dsym
===================================================================
RCS file: /work/cvs/gnu/binutils/ld/testsuite/ld-elfweak/dsow.dsym,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 dsow.dsym
--- ld-elfweak/dsow.dsym	2001/09/10 17:18:24	1.1.1.1
+++ ld-elfweak/dsow.dsym	2001/09/10 22:10:20
@@ -1 +1 @@
-[0-9a-f]*[ 	]+w[ 	]+DF[ 	]+.text[	]+[0-9a-f]*[ 	]+foo
+[0-9a-f]*[ 	]+w[ 	]+DF[ 	]+.text[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)foo
Index: ld-elfweak/elfweak.exp
===================================================================
RCS file: /work/cvs/gnu/binutils/ld/testsuite/ld-elfweak/elfweak.exp,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 elfweak.exp
--- ld-elfweak/elfweak.exp	2001/09/10 17:18:24	1.1.1.1
+++ ld-elfweak/elfweak.exp	2001/09/10 22:10:20
@@ -266,7 +266,7 @@ proc objdump_dynsymstuff { objdump objec
 
 }
 
-proc build_lib {test libname obj1 obj2 dynsymexp} {
+proc build_lib {test libname objs dynsymexp} {
     global ld
     global objdump
     global tmpdir
@@ -274,7 +274,12 @@ proc build_lib {test libname obj1 obj2 d
     global srcdir
     global subdir
 
-    if {![ld_simple_link $ld $tmpdir/$libname.so "$shared $tmpdir/$obj1 $tmpdir/$obj2"]} {
+    set files ""
+    foreach obj $objs {
+      set files "$files $tmpdir/$obj"
+    }
+
+    if {![ld_link $ld $tmpdir/$libname.so "$shared $files"]} {
 	fail $test
 	return
     }
@@ -286,7 +291,7 @@ proc build_lib {test libname obj1 obj2 d
     pass $test
 }
 
-proc build_exec { test execname obj1 obj2 flags dat dynsymexp symexp} {
+proc build_exec { test execname objs flags dat dynsymexp symexp} {
     global ld
     global objdump
     global tmpdir
@@ -295,7 +300,12 @@ proc build_exec { test execname obj1 obj
     global subdir
     global exec_output
 
-    if {![ld_link $ld $tmpdir/$execname "$flags $tmpdir/$obj1 $tmpdir/$obj2"]} {
+    set files ""
+    foreach obj $objs {
+      set files "$files $tmpdir/$obj"
+    }
+
+    if {![ld_link $ld $tmpdir/$execname "$flags $files"]} {
 	fail "$test"
 	return
     }
@@ -378,17 +388,84 @@ if ![ld_compile "$CC $CFLAGS" $srcdir/$s
     unresolved "ELF weak"
     return
 }
+
+if {![ld_link $ld $tmpdir/libbar.so "$shared $tmpdir/bar.o"]} {
+    fail "ELF weak"
+    return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/foo1a.c $tmpdir/foo1a.o] {
+    unresolved "ELF weak"
+    return
+}
+
+if ![ld_compile "$CC $CFLAGS $picflag" $srcdir/$subdir/foo1b.c $tmpdir/foo1b.o] {
+    unresolved "ELF weak"
+    return
+}
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/bar1a.c $tmpdir/bar1a.o] {
+    unresolved "ELF weak"
+    return
+}
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/bar1b.c $tmpdir/bar1b.o] {
+    unresolved "ELF weak"
+    return
+}
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/bar1c.c $tmpdir/bar1c.o] {
+    unresolved "ELF weak"
+    return
+}
+
+if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/main1.c $tmpdir/main1.o] {
+    unresolved "ELF weak"
+    return
+}
+
+if {![ld_link $ld $tmpdir/libfoo1a.so "$shared $tmpdir/foo1a.o"]} {
+    fail "ELF weak"
+    return
+}
 
-if {![ld_simple_link $ld $tmpdir/libbar.so "$shared $tmpdir/bar.o"]} {
+if {![ld_link $ld $tmpdir/libfoo1b.so "$shared $tmpdir/foo1b.o"]} {
     fail "ELF weak"
     return
 }
 
-build_lib "ELF DSO weak first" libfoo foo.o bar.o dso.dsym
-build_lib "ELF DSO weak last" libfoo bar.o foo.o dso.dsym
-build_lib "ELF DSO weak first DSO" libfoo foo.o libbar.so dsow.dsym
-build_lib "ELF DSO weak last DSO" libfoo libbar.so foo.o dsow.dsym
-build_exec "ELF weak first" foo main.o bar.o "" strong "" strong.sym
-build_exec "ELF weak last" foo bar.o main.o "" strong "" strong.sym
-build_exec "ELF weak first DSO" foo main.o libbar.so "-rpath ." weak weak.dsym ""
-build_exec "ELF weak last DSO" foo libbar.so main.o "-rpath ." weak weak.dsym ""
+build_lib "ELF DSO weak func first" libfoo "foo.o bar.o" dso.dsym
+build_lib "ELF DSO weak func last" libfoo "bar.o foo.o" dso.dsym
+setup_xfail "*-*-*"
+build_lib "ELF DSO weak func first DSO" libfoo "foo.o libbar.so" dsow.dsym
+setup_xfail "*-*-*"
+build_lib "ELF DSO weak func last DSO" libfoo "libbar.so foo.o" dsow.dsym
+build_exec "ELF weak func first" foo "main.o bar.o" "" strong "" strong.sym
+build_exec "ELF weak func last" foo "bar.o main.o" "" strong "" strong.sym
+setup_xfail "*-*-*"
+build_exec "ELF weak func first DSO" foo "main.o libbar.so" "-rpath ." weak weak.dsym ""
+setup_xfail "*-*-*"
+build_exec "ELF weak func last DSO" foo "libbar.so main.o" "-rpath ." weak weak.dsym ""
+
+build_lib "ELF DSO weak data first" libfoo "bar1a.o foo1a.o" dsodata.dsym
+build_lib "ELF DSO weak data last" libfoo "foo1a.o bar1a.o" dsodata.dsym
+setup_xfail "*-*-*"
+build_lib "ELF DSO weak data first DSO" libfoo "bar1a.o libfoo1a.so" dsowdata.dsym
+setup_xfail "*-*-*"
+build_lib "ELF DSO weak data last DSO" libfoo "libfoo1a.so bar1a.o" dsowdata.dsym
+setup_xfail "*-*-*"
+build_lib "ELF DSO weak data first DSO common" libfoo "bar1a.o libfoo1b.so" dsowdata.dsym
+setup_xfail "*-*-*"
+build_lib "ELF DSO weak data last DSO common" libfoo "libfoo1b.so bar1a.o" dsowdata.dsym
+build_exec "ELF weak data first" foo "main1.o bar1a.o foo1a.o" "" strongdata "" strongdata.sym
+build_exec "ELF weak data last" foo "foo1a.o main1.o bar1a.o" "" strongdata "" strongdata.sym
+build_exec "ELF weak data first common" foo "main1.o bar1a.o foo1b.o" "" strongdata "" strongcomm.sym
+build_exec "ELF weak data last common" foo "foo1b.o main1.o bar1a.o" "" strongdata "" strongcomm.sym
+setup_xfail "*-*-*"
+build_exec "ELF weak data first DSO" foo "main1.o bar1a.o libfoo1a.so" "-rpath ." weakdata weakdata.dsym ""
+setup_xfail "*-*-*"
+build_exec "ELF weak data last DSO" foo "libfoo1a.so main1.o bar1a.o" "-rpath ." weakdata weakdata.dsym ""
+setup_xfail "*-*-*"
+build_exec "ELF weak data first DSO common" foo "main1.o bar1a.o libfoo1b.so" "-rpath ." weakdata weakdata.dsym ""
+setup_xfail "*-*-*"
+build_exec "ELF weak data last DSO common" foo "libfoo1b.so main1.o bar1a.o" "-rpath ." weakdata weakdata.dsym ""
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/main1.c	Mon Sep 10 12:59:18 2001
@@ -0,0 +1,22 @@
+#include <stdio.h>
+
+#pragma weak deallocate_foo
+int deallocate_foo = 1;
+
+extern int * bar ();
+extern int * foo ();
+extern void abort ();
+
+int
+main ()
+{
+  if (&deallocate_foo != bar () || &deallocate_foo != foo ())
+    abort ();
+
+  if (deallocate_foo)
+    printf ("weak deallocate_foo\n");
+  else
+    printf ("strong deallocate_foo\n");
+
+  return 0;
+}
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/foo1b.c	Mon Sep 10 12:18:14 2001
@@ -0,0 +1,7 @@
+int deallocate_foo;
+
+int *
+foo ()
+{
+  return &deallocate_foo;
+}
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/bar1c.c	Mon Sep 10 11:56:15 2001
@@ -0,0 +1,7 @@
+int deallocate_foo;
+
+int *
+bar()
+{
+  return &deallocate_foo;
+}
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/bar1a.c	Mon Sep 10 12:47:20 2001
@@ -0,0 +1,9 @@
+#pragma weak deallocate_foo
+
+int deallocate_foo = 1;
+
+int *
+bar()
+{
+  return &deallocate_foo;
+}
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/bar1b.c	Mon Sep 10 12:57:15 2001
@@ -0,0 +1,7 @@
+int deallocate_foo = 0;
+
+int *
+bar()
+{
+  return &deallocate_foo;
+}
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/strongcomm.sym	Mon Sep 10 13:59:35 2001
@@ -0,0 +1,2 @@
+[0-9a-f]*[ 	]+g[ 	]+O[ 	]+.bss[	]+[0-9a-f]*[ 	]+deallocate_foo
+[0-9a-f]*[ 	]+g[ 	]+F[ 	]+.text[	]+[0-9a-f]*[ 	]+foo
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/foo1a.c	Mon Sep 10 11:54:56 2001
@@ -0,0 +1,7 @@
+int deallocate_foo = 0;
+
+int *
+foo ()
+{
+  return &deallocate_foo;
+}
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/dsodata.dsym	Mon Sep 10 14:25:26 2001
@@ -0,0 +1,2 @@
+[0-9a-f]*[ 	]+g[ 	]+DO[ 	]+.data[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)deallocate_foo
+[0-9a-f]*[ 	]+g[ 	]+DF[ 	]+.text[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)foo
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/dsowdata.dsym	Mon Sep 10 14:27:10 2001
@@ -0,0 +1 @@
+[0-9a-f]*[ 	]+w[ 	]+DO[ 	]+.data[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)deallocate_foo
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/weakdata.dat	Mon Sep 10 12:53:09 2001
@@ -0,0 +1 @@
+weak deallocate_foo
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/strongdata.dat	Mon Sep 10 12:53:30 2001
@@ -0,0 +1 @@
+strong deallocate_foo
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/weakdata.dsym	Mon Sep 10 14:36:28 2001
@@ -0,0 +1,2 @@
+[0-9a-f]*[ 	]+w[ 	]+DO[ 	]+.data[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)deallocate_foo
+[0-9a-f]*[ 	]+DF[ 	]+\*UND\*[	]+[0-9a-f]*[ 	]+(Base[ 	]+|[ 	]*)foo
--- /dev/null	Fri Mar 23 20:37:44 2001
+++ ld-elfweak/strongdata.sym	Mon Sep 10 13:01:28 2001
@@ -0,0 +1,2 @@
+[0-9a-f]*[ 	]+g[ 	]+O[ 	]+.data[	]+[0-9a-f]*[ 	]+deallocate_foo
+[0-9a-f]*[ 	]+g[ 	]+F[ 	]+.text[	]+[0-9a-f]*[ 	]+foo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]