mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
b9e33f301e
The symbol versioning tests mix C-visible symbols and linker-visible symbols in order to verify .symver behavior. This works for most people, but fail for targets that have a symbol prefix. So add a helper file with macros that expand gcc's __USER_LABEL_PREFIX__ as necessary and convert all .symver users over to it. Now that the tests are usable on prefixed targets, update the tests to take into account an optional leading underscore. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
104 lines
1.6 KiB
C
104 lines
1.6 KiB
C
/*
|
|
* Basic test of versioning. The idea with this is that we define
|
|
* a bunch of definitions of the same symbol, and we can theoretically
|
|
* then link applications against varying sets of these.
|
|
*/
|
|
#include "vers.h"
|
|
|
|
const char * show_bar1 = "asdf";
|
|
const char * show_bar2 = "asdf";
|
|
|
|
extern int new2_foo();
|
|
extern int bar33();
|
|
|
|
int
|
|
bar()
|
|
{
|
|
return 3;
|
|
}
|
|
|
|
/*
|
|
* The 'hide' prefix is something so that we can automatically search the
|
|
* symbol table and verify that none of these symbols were actually exported.
|
|
*/
|
|
int
|
|
hide_original_foo()
|
|
{
|
|
return 1+bar();
|
|
|
|
}
|
|
|
|
int
|
|
hide_old_foo()
|
|
{
|
|
return 10+bar();
|
|
|
|
}
|
|
|
|
int
|
|
hide_old_foo1()
|
|
{
|
|
return 100+bar();
|
|
|
|
}
|
|
|
|
int
|
|
hide_new_foo()
|
|
{
|
|
return 1000+bar();
|
|
|
|
}
|
|
|
|
SYMVER(hide_original_foo, show_foo@);
|
|
SYMVER(hide_old_foo, show_foo@VERS_1.1);
|
|
SYMVER(hide_old_foo1, show_foo@VERS_1.2);
|
|
SYMVER(hide_new_foo, show_foo@@VERS_2.0);
|
|
|
|
|
|
|
|
#ifdef DO_TEST10
|
|
/* In test 10, we try and define a non-existant version node. The linker
|
|
* should catch this and complain. */
|
|
int
|
|
hide_new_bogus_foo()
|
|
{
|
|
return 1000+bar();
|
|
|
|
}
|
|
SYMVER(hide_new_bogus_foo, show_foo@VERS_2.2);
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifdef DO_TEST11
|
|
/*
|
|
* This test is designed to catch a couple of syntactic errors. The assembler
|
|
* should complain about both of the directives below.
|
|
*/
|
|
void
|
|
xyzzz()
|
|
{
|
|
new2_foo();
|
|
bar33();
|
|
}
|
|
|
|
SYMVER(new2_foo, fooVERS_2.0);
|
|
SYMVER(bar33, bar@@VERS_2.0);
|
|
#endif
|
|
|
|
#ifdef DO_TEST12
|
|
/*
|
|
* This test is designed to catch a couple of syntactic errors. The assembler
|
|
* should complain about both of the directives below.
|
|
*/
|
|
void
|
|
xyzzz()
|
|
{
|
|
new2_foo();
|
|
bar33();
|
|
}
|
|
|
|
SYMVER(bar33, bar@@VERS_2.0);
|
|
#endif
|