From: Rich Felker <dalias@aerifal.cx>
To: musl@lists.openwall.com
Subject: Re: How to build libc.a with -fPIC for all archive members?
Date: Mon, 10 Feb 2014 14:43:34 -0500 [thread overview]
Message-ID: <20140210194334.GU15627@brightrain.aerifal.cx> (raw)
In-Reply-To: <52F8C782.4060308@f-prot.com>
On Mon, Feb 10, 2014 at 12:35:14PM +0000, Oliver Schneider wrote:
> Hi,
>
> how can I build the static library from the musl source, but compiling
> with -fPIC?
>
> I tried the obvious:
>
> CFLAGS=-fPIC ./configure --enable-gcc-wrapper --disable-shared
>
> and then built. But I am getting the following linker error still
> (albeit for a different member function and object file than before):
>
> /usr/local/musl/lib/libc.a(memmove.o): relocation R_X86_64_PC32 against
> symbol `memcpy' can not be used when making a shared object; recompile
> with -fPIC
> final link failed: Bad value
>
> The reason I want to do this, is to have a statically linked .so. I.e.
> an .so that has no external dependency other than the system calls. Or
> is this known to conflict with the ever-present glibc in some way?
This is not intended to be possible, and there are many things that
would break. Among them:
- __libc_start_main would never have been called so some necessary
initialization might not have taken place. At present that's minimal
and the goal is to keep it minimal so this might have no practical
consequence, but it's still something that can't be officially
supported without locking in aspects of the implementation.
- malloc does not support sharing the brk with anything else, in
particular, whatever malloc implementation is using it in the rest
of the program outside your DSO. It really _can't_ because there's
no way it could synchronize use of the brk (since it wouldn't be
sharing locks with the outside program.
- Anything that touches threads will either expect the thread pointer
to be setup to point to musl's thread structure, or will attempt to
set it up. This will conflict with whatever thread structure the
outside program/glibc/different-version-of-musl is using.
In general, it's only safe to have a single version/copy of any given
library linked into a program. There are some exceptions like libgcc
that use hidden visibility to make it work, but they're the exception,
not the norm. This issue is not unique to libc, but libc probably has
the most ways it's affected.
With that said, building libc.a as PIC _is_ intended to be supported,
not for what you're doing, but for the sake of making static-linked
PIE executables. This is not doable with the official gcc toolchain
but I have a system to make it work without invasive changes, so I
would like to find and fix whatever issue is PIC-incompatible...
Rich
prev parent reply other threads:[~2014-02-10 19:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-10 12:35 Oliver Schneider
2014-02-10 13:27 ` Oliver Schneider
2014-02-10 14:04 ` Oliver Schneider
2014-02-10 14:07 ` Szabolcs Nagy
2014-02-10 19:43 ` Rich Felker [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140210194334.GU15627@brightrain.aerifal.cx \
--to=dalias@aerifal.cx \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).