This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / ld / testsuite / ld-elfvers / vers1.c
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 const char * show_bar1 = "asdf";
7 const char * show_bar2 = "asdf";
8
9 int
10 bar()
11 {
12         return 3;
13 }
14
15 /*
16  * The 'hide' prefix is something so that we can automatically search the
17  * symbol table and verify that none of these symbols were actually exported.
18  */
19 int
20 hide_original_foo()
21 {
22         return 1+bar();
23
24 }
25
26 int
27 hide_old_foo()
28 {
29         return 10+bar();
30
31 }
32
33 int
34 hide_old_foo1()
35 {
36         return 100+bar();
37
38 }
39
40 int
41 hide_new_foo()
42 {
43         return 1000+bar();
44
45 }
46
47 __asm__(".symver hide_original_foo,show_foo@");
48 __asm__(".symver hide_old_foo,show_foo@VERS_1.1");
49 __asm__(".symver hide_old_foo1,show_foo@VERS_1.2");
50 __asm__(".symver hide_new_foo,show_foo@@VERS_2.0");
51
52
53
54 #ifdef DO_TEST10
55 /* In test 10, we try and define a non-existant version node.  The linker
56  * should catch this and complain. */
57 int
58 hide_new_bogus_foo()
59 {
60         return 1000+bar();
61
62 }
63 __asm__(".symver hide_new_bogus_foo,show_foo@VERS_2.2");
64 #endif
65
66
67
68
69 #ifdef DO_TEST11
70 /*
71  * This test is designed to catch a couple of syntactic errors.  The assembler
72  * should complain about both of the directives below.
73  */
74 int
75 xyzzz()
76 {
77   new2_foo();
78   bar33();
79 }
80
81 __asm__(".symver new2_foo,fooVERS_2.0");
82 __asm__(".symver bar33,bar@@VERS_2.0");
83 #endif
84
85 #ifdef DO_TEST12
86 /*
87  * This test is designed to catch a couple of syntactic errors.  The assembler
88  * should complain about both of the directives below.
89  */
90 int
91 xyzzz()
92 {
93   new2_foo();
94   bar33();
95 }
96
97 __asm__(".symver bar33,bar@@VERS_2.0");
98 #endif