Home | History | Annotate | Download | only in ld-elfvers
      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
     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
     25 hide_original_foo()
     26 {
     27 	return 1+bar();
     28 
     29 }
     30 
     31 int
     32 hide_old_foo()
     33 {
     34 	return 10+bar();
     35 
     36 }
     37 
     38 int
     39 hide_old_foo1()
     40 {
     41 	return 100+bar();
     42 
     43 }
     44 
     45 int
     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
     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
     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
     96 xyzzz()
     97 {
     98   new2_foo();
     99   bar33();
    100 }
    101 
    102 SYMVER(bar33, bar@@VERS_2.0);
    103 #endif
    104