This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: Shared library question
- From: Jakub Jelinek <jakub at redhat dot com>
- To: "Zagorodnev, Grigory" <Grigory_Zagorodnev at stl dot sarov dot ru>
- Cc: "'H . J . Lu'" <hjl at lucon dot org>, "'binutils at sources dot redhat dot com'" <binutils at sources dot redhat dot com>
- Date: Thu, 20 Jun 2002 03:05:26 -0400
- Subject: Re: Shared library question
- References: <51524B6C689ED4118D4F0090273ACE32928849@odyssey.stl.sarov.ru>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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