Subject: Re: src/gnu/usr.bin/egcs/common
To: Chris G. Demetriou <cgd@netbsd.org>
From: Jason Thorpe <thorpej@nas.nasa.gov>
List: tech-userlevel
Date: 12/22/1999 10:14:32
On 21 Dec 1999 17:35:45 -0800 
 cgd@netbsd.org (Chris G. Demetriou) wrote:

 > If this is true, it's only true because of (dynamic) linker issues.
 > (some would say "bugs.")
 > 
 > if the data definitions of the variables are in the shared library,
 > and nothing uses their fields directly (or their fields can be used
 > in a 'safe' way directly), you should be fine.  Unless there are
 > linker issues that force the size of the data items to be consistent
 > between the program and the shared library.  (i seem to recall that
 > there have been such ... "issues" with the a.out dynamic linker, but,
 > as noted, one might call them bugs.  8-)

I think the issue is e.g. say you have:

	extern struct foo foo_array[5];

...the linker sometimes uses a COPY relocation type, allocating enough
space in the .data section for the object, and copies it there at run-time,
before main() is called.  This is, presumably, because COPY is deemed more
efficient for some objects that are potentially COW.

However, if you have:

	extern struct foo *foo_array;

...then the linker does the "right" thing.

        -- Jason R. Thorpe <thorpej@nas.nasa.gov>