1 /*
2 * Basic test of versioning. The idea with this is that we define
3 * a bunch of definitions of the same symbol, and we can theoretically
4 * then link applications against varying sets of these.
5 */
6 #include "vers.h"
7
8 const char * show_bar1 = "asdf";
9 const char * show_bar2 = "asdf";
10
11 extern int new2_foo();
12 extern int bar33();
13
14 int
bar()15 bar()
16 {
17 return 3;
18 }
19
20 /*
21 * The 'hide' prefix is something so that we can automatically search the
22 * symbol table and verify that none of these symbols were actually exported.
23 */
24 int
hide_original_foo()25 hide_original_foo()
26 {
27 return 1+bar();
28
29 }
30
31 int
hide_old_foo()32 hide_old_foo()
33 {
34 return 10+bar();
35
36 }
37
38 int
hide_old_foo1()39 hide_old_foo1()
40 {
41 return 100+bar();
42
43 }
44
45 int
hide_new_foo()46 hide_new_foo()
47 {
48 return 1000+bar();
49
50 }
51
52 SYMVER(hide_original_foo, show_foo@);
53 SYMVER(hide_old_foo, show_foo@VERS_1.1);
54 SYMVER(hide_old_foo1, show_foo@VERS_1.2);
55 SYMVER(hide_new_foo, show_foo@@VERS_2.0);
56
57
58
59 #ifdef DO_TEST10
60 /* In test 10, we try and define a non-existant version node. The linker
61 * should catch this and complain. */
62 int
hide_new_bogus_foo()63 hide_new_bogus_foo()
64 {
65 return 1000+bar();
66
67 }
68 SYMVER(hide_new_bogus_foo, show_foo@VERS_2.2);
69 #endif
70
71
72
73
74 #ifdef DO_TEST11
75 /*
76 * This test is designed to catch a couple of syntactic errors. The assembler
77 * should complain about both of the directives below.
78 */
79 void
xyzzz()80 xyzzz()
81 {
82 new2_foo();
83 bar33();
84 }
85
86 SYMVER(new2_foo, fooVERS_2.0);
87 SYMVER(bar33, bar@@VERS_2.0);
88 #endif
89
90 #ifdef DO_TEST12
91 /*
92 * This test is designed to catch a couple of syntactic errors. The assembler
93 * should complain about both of the directives below.
94 */
95 void
xyzzz()96 xyzzz()
97 {
98 new2_foo();
99 bar33();
100 }
101
102 SYMVER(bar33, bar@@VERS_2.0);
103 #endif
104