This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Shared library question


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]