From owner-freebsd-hackers@FreeBSD.ORG Mon Apr 21 07:00:54 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B0DEC1065670 for ; Mon, 21 Apr 2008 07:00:54 +0000 (UTC) (envelope-from erikt@midgard.homeip.net) Received: from ch-smtp02.sth.basefarm.net (ch-smtp02.sth.basefarm.net [80.76.149.213]) by mx1.freebsd.org (Postfix) with ESMTP id 12B3E8FC13 for ; Mon, 21 Apr 2008 07:00:53 +0000 (UTC) (envelope-from erikt@midgard.homeip.net) Received: from c83-253-25-183.bredband.comhem.se ([83.253.25.183]:60981 helo=falcon.midgard.homeip.net) by ch-smtp02.sth.basefarm.net with esmtp (Exim 4.68) (envelope-from ) id 1Jnq1D-0007rN-7Y for freebsd-hackers@freebsd.org; Mon, 21 Apr 2008 09:00:52 +0200 Received: (qmail 18560 invoked from network); 21 Apr 2008 09:00:50 +0200 Received: from owl.midgard.homeip.net (10.1.5.7) by falcon.midgard.homeip.net with ESMTP; 21 Apr 2008 09:00:50 +0200 Received: (qmail 13768 invoked by uid 1001); 21 Apr 2008 09:00:50 +0200 Date: Mon, 21 Apr 2008 09:00:50 +0200 From: Erik Trulsson To: "M. Warner Losh" Message-ID: <20080421070050.GA13685@owl.midgard.homeip.net> Mail-Followup-To: "M. Warner Losh" , emily.bckr@gmail.com, freebsd-hackers@freebsd.org References: <5124a9390804200202h535112dcx4005e9df6e5e0f5e@mail.gmail.com> <20080420103910.GA92852@owl.midgard.homeip.net> <20080420.232432.-1175574853.imp@bsdimp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080420.232432.-1175574853.imp@bsdimp.com> User-Agent: Mutt/1.5.17 (2007-11-01) X-Originating-IP: 83.253.25.183 X-Scan-Result: No virus found in message 1Jnq1D-0007rN-7Y. X-Scan-Signature: ch-smtp02.sth.basefarm.net 1Jnq1D-0007rN-7Y 41ef3a82285c1bba06bf4e636eb7ab8c Cc: emily.bckr@gmail.com, freebsd-hackers@freebsd.org Subject: Re: symbol table X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Apr 2008 07:00:54 -0000 On Sun, Apr 20, 2008 at 11:24:32PM -0600, M. Warner Losh wrote: > In message: <20080420103910.GA92852@owl.midgard.homeip.net> > Erik Trulsson writes: > : On Sun, Apr 20, 2008 at 12:02:09PM +0300, emily becker wrote: > : > Hi, > : > > : > I have a question about symbol table. > : > One of the section In symbol table is memory adress which symbol is located. > : > I wonder if this memory adress is bound at run-time or compile-time? > : > : It depends. Symbols referring to objects in a dynamically loaded library > : will be bound at run-time, the rest should be bound at compile-time. > > They are bound at link-time, not compile-time. This is splitting a > fine hair, but compile-time is when a .o or .so is created, while link > time combines .o-like things together into a bigger thing. Well, I consider linking to be part of the compilation process so for me link-time is a subset of compile-time. You are however completely correct that it is at link-time that the binding happens (for those symbols that can be resolved at link-time anyway.) > When that > bigger thing is a final link, the addresses for the static portions of > the binary are set. When the final thing is a dynamic library, the > addresses float (since all the code is PIC anyway, they don't really > matter). Dynamic parts of executables are bound at run-time. > > : > if it is compile-time, I don't understand how do we know whether the symbol > : > is located this adress. > : > Maybe this adress is already bound by other process or like this. > : > : Each process runs in its own address space, and therefore the compiler > : (actually: the linker) can know exactly where in this address space things > : will end up. > > The run-time linker (ld.so) is the one that knows where things wind up > in a given process... libc.so and other shared libraries can and do > link at different addresses for different processes. My comment referred to those symbols that are bound at compile^W link-time. For those the linker does know what addresses they refer to. For dynamically loaded libraries it is indeed the runtime loader that knows where in the address space they will end up. -- Erik Trulsson ertr1013@student.uu.se