Shared library question
Jakub Jelinek
jakub@redhat.com
Thu Jun 20 00:05:00 GMT 2002
On Thu, Jun 20, 2002 at 08:44:10AM +0400, Zagorodnev, Grigory wrote:
> >If you'll do:
> >VER_1.0 { global: foo; bar; baz; local: *; };
> >VER_1.1 { } VER_1.0;
> >and .symver __real_foo, foo@VER_1.0
>
> Thanks a lot!
> I finally understood what is going on here. This approach does work fine.
> The only one question remains:
> Is there C-language extension to define symbol version like above?
Of course there is, GCC inline assembly:
# define symbol_version(real, name, version) \
_symbol_version(real, name, version)
# define default_symbol_version(real, name, version) \
_default_symbol_version(real, name, version)
# ifdef __ASSEMBLER__
# define _symbol_version(real, name, version) \
.symver real, name##@##version
# define _default_symbol_version(real, name, version) \
.symver real, name##@##@##version
# else
# define _symbol_version(real, name, version) \
__asm__ (".symver " #real "," #name "@" #version)
# define _default_symbol_version(real, name, version) \
__asm__ (".symver " #real "," #name "@@" #version)
#endif
Then:
void __real_foo (void)
{
do something;
}
symbol_version (__real_foo, foo, VER_1.0);
Jakub
More information about the Binutils
mailing list