From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8165 invoked by alias); 20 Jun 2002 07:05:42 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 8093 invoked from network); 20 Jun 2002 07:05:35 -0000 Received: from unknown (HELO devserv.devel.redhat.com) (66.187.233.200) by sources.redhat.com with SMTP; 20 Jun 2002 07:05:35 -0000 Received: (from jakub@localhost) by devserv.devel.redhat.com (8.11.6/8.11.0) id g5K75QR00797; Thu, 20 Jun 2002 03:05:26 -0400 Date: Thu, 20 Jun 2002 00:05:00 -0000 From: Jakub Jelinek To: "Zagorodnev, Grigory" Cc: "'H . J . Lu'" , "'binutils@sources.redhat.com'" Subject: Re: Shared library question Message-ID: <20020620030526.X13411@devserv.devel.redhat.com> Reply-To: Jakub Jelinek References: <51524B6C689ED4118D4F0090273ACE32928849@odyssey.stl.sarov.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <51524B6C689ED4118D4F0090273ACE32928849@odyssey.stl.sarov.ru>; from Grigory_Zagorodnev@stl.sarov.ru on Thu, Jun 20, 2002 at 08:44:10AM +0400 X-SW-Source: 2002-06/txt/msg00567.txt.bz2 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