RFC: DOPIC etc
Peter S. Mazinger
ps.m at gmx.net
Thu Oct 13 17:40:43 UTC 2005
On Thu, 13 Oct 2005, Erik Andersen wrote:
> On Thu Oct 13, 2005 at 04:21:15PM +0200, Peter S. Mazinger wrote:
> > Hello!
> >
> > Currently we have DOPIC/HAVE_NO_PIC/HAVE_SHARED/HAVE_NO_SHARED options
> > that are somewhat overlapping. What do we need of these?
>
> The HAVE_NO* options are there because of limitations of the
> config system. Ideally we would be consistant though -- we
> currently have an evolutionaly mix of HAVE_NO*, HAS_NO*, and
> a few others just to mix things up...
>
> > Cases:
> > 1. archs that do not have shared lib support and/or shared lib loader (the
> > latter is overlapping w/ another option BUILD_UCLIBC_LDSO/ARCH_HAS_NO_LDSO)
> > 2. user does not want shared libs
> > 3. user wants overall PIC code also in lib*.a (shared libs should be PIC,
> > unselectable)
> > What else has to be covered ?
> >
> > nios* and v850 have HAVE_NO_PIC/HAVE_NO_SHARED/ARCH_HAS_NO_LDSO set
> > sh2a is somewhat different, but results in the same
> > sh2 has only ARCH_HAS_NO_LDSO defined, results in !BUILD_UCLIBC_LDSO
> >
> > What are the real cases?
>
>
> BUILD_UCLIBC_LDSO dates back to a time when uClibc only had
> (mostly broken) shared library support for i386 and nothing else.
> I added that option to allow uClibc to be built using the glibc
> shared library loader. uClibc has since matured so we can
> probably lose this option.
>
> HAVE_NO_SHARED was used to address case #2, where the user does
> not wish to build shared libraries.
>
> Both nios* and v850 and sh2 all result in the same thing:
>
> 1.a arch does not have a native uClibc ldso since nobody has
> written a working one yet.
>
> And of course support for loadiing and handling shared libraries
> on mmu-less processors has been done by a few companies, but has
> never been added to uClibc. So for the time being
>
> 1.b ARCH_HAS_NO_MMU implies ARCH_HAS_NO_LDSO.
>
> As I recall, I added PIC/HAVE_NO_PIC as an easy way to decide
> whether or not code should be pic. So while this is clearly
> ought to be set when building shared libraries, there are cases,
> such as with uClinux, where folks need to build static libraries
> that are pic. glibc does something interesting here, in that it
> compiles every file twice, once non-pic (foo.o) and once as pic
> (foo.os) and then uses the pic code for shared libs and such, and
> the non-pic code for static libs. That would allow us to make
> our static libs smaller. Then we would construct our shared libs
> from libuClibc_pic.a and such. I've been thinking about doing
> such a thing for a while, but never gotten round to it.
>
> > libdl.a is not built if we do not have BUILD_UCLIBC_LDSO enabled. Is this
> > correct, or there are cases where w/o shared lib support and/or
> > UCLIBC_LDSO libdl.a may be used?
>
> There seems to be little point in trying to load shared libraries
> when a shared library loader is not present...
>
> -Erik
Would then following be ok:
ARCH_HAS_NO_MMU sets ARCH_HAS_NO_LDSO
ARCH_HAS_NO_LDSO is set for archs not having support done (are these not
having a ldso/ldso/TARGET_ARCH dir ?)
HAVE_SHARED depends on !ARCH_HAS_NO_LDSO
HAVE_SHARED enables ldso/libdl and all lib*.so and is optional (what
should happen w/ ldso and libdl if HAVE_SHARED is disabled ?)
DO_PIC enables building everything as PIC, if not set only shared libs are
built with PIC
Peter
--
Peter S. Mazinger <ps dot m at gmx dot net> ID: 0xA5F059F2
Key fingerprint = 92A4 31E1 56BC 3D5A 2D08 BB6E C389 975E A5F0 59F2
More information about the uClibc
mailing list