* ld/elfvers/{vers17.*, vers18.*, vers19.*}: New files.
+1999-07-07 Ian Lance Taylor <ian@zembu.com>
+
+ * ld-elfvers/vers.exp: Add new tests vers17 to vers19.
+ * ld/elfvers/{vers17.*, vers18.*, vers19.*}: New files.
+
1999-06-13 Ian Lance Taylor <ian@zembu.com>
* ld-checks/asm.s: Use a symbol name for .lcomm.
#
build_vers_lib "vers16a" vers16a.c vers16a "" vers16.map vers16a.ver vers16a.dsym ""
build_exec "vers16" vers16.c vers16 "" vers16a.so "" vers16.dsym ""
+
+# Test a weak versioned symbol.
+build_vers_lib "vers17" vers17.c vers17 "" vers17.map vers17.ver vers17.dsym ""
+build_vers_lib "vers18" vers18.c vers18 vers17.so vers18.map vers18.ver vers18.dsym vers18.sym
+build_exec "vers19" vers19.c vers19 "" vers18.so vers19.ver vers19.dsym ""
--- /dev/null
+int
+show_foo ()
+{
+ return 99;
+}
--- /dev/null
+[0]* g DO \*ABS\* [0]* VERS_2.0 VERS_2.0
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
--- /dev/null
+VERS_2.0 {
+ global:
+ show_foo;
+};
--- /dev/null
+Version definitions:
+1 0x01 0x02605d3f tmpdir/vers17.so
+2 0x00 0x0a7922b0 VERS_2.0
--- /dev/null
+int
+bar ()
+{
+ return 3;
+}
+
+#pragma weak hide_original_foo
+
+int
+hide_original_foo ()
+{
+ return 1 + bar ();
+}
+
+#pragma weak hide_old_foo
+
+int
+hide_old_foo ()
+{
+ return 10 + bar();
+}
+
+#pragma weak hide_old_foo1
+
+int
+hide_old_foo1 ()
+{
+ return 100 + bar ();
+}
+
+#pragma weak hide_new_foo
+
+int
+hide_new_foo ()
+{
+ return 1000 + bar ();
+}
+
+__asm__(".symver hide_original_foo,show_foo@");
+__asm__(".symver hide_old_foo,show_foo@VERS_1.1");
+__asm__(".symver hide_old_foo1,show_foo@VERS_1.2");
+__asm__(".symver hide_new_foo,show_foo@@VERS_2.0");
--- /dev/null
+[0-9a-f]* w DF (\*UND\*) [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
+[0]* g DO \*ABS\* [0]* VERS_1.1 VERS_1.1
+[0]* g DO \*ABS\* [0]* VERS_1.2 VERS_1.2
+[0]* g DO \*ABS\* [0]* VERS_2.0 VERS_2.0
+[0-9a-f]* w DF (.text|\*ABS\*) [0-9a-f]* \(Base\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* w DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.1\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* w DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.2\) (0x[0-9a-f][0-9a-f] )?show_foo
--- /dev/null
+VERS_1.1 {
+ global:
+ foo1;
+ local:
+ hide_old*;
+ hide_original*;
+ hide_new*;
+};
+
+VERS_1.2 {
+ foo2;
+} VERS_1.1;
+
+VERS_2.0 {
+} VERS_1.2;
--- /dev/null
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.1
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.2
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@@VERS_2.0
--- /dev/null
+Version definitions:
+1 0x01 0x02608d3f tmpdir/vers18.so
+2 0x00 0x0a7927b1 VERS_1.1
+3 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+4 0x02 0x0a7922b0 VERS_2.0
+ VERS_1.2
+
+Version References:
+ required from tmpdir/vers17.so:
+ 0x0a7922b0 0x00 05 VERS_2.0
+
--- /dev/null
+int
+main ()
+{
+ printf ("%d\n", show_foo ());
+ return 0;
+}
--- /dev/null
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
--- /dev/null
+Version References:
+ required from *tmpdir/vers17.so:
+ 0x0a7922b0 0x00 02 VERS_2.0