static linking for pthreads in nptl branch?
Carmelo AMOROSO
carmelo.amoroso at st.com
Mon Sep 1 06:51:01 UTC 2008
Chris Metcalf wrote:
> I seem to recall seeing some comment somewhere that static linking
> didn't work with pthread programs in the NPTL branch.
No, there were bugs in the past but all fixed. We use nptl branch for
sh4 statically linked too... unless I did not push back these fix to the
SVN nptl branch, it sould work fine as well.
Let me find where/when I fixed this for sh.
Cheers,
Carmelo
Of course, I had
> to go and debug a crash bug for a few hours first before I actually
> remembered. :-)
>
> The problem I ended up looking at was that
> __pthread_initialize_minimal() is called from __uClibc_init(), but since
> the caller is being linked from libc.a after libpthread.a has been fully
> processed, the function chosen is the one in libc.a, rather than the one
> in libpthread, even though that one is listed earlier on the command
> line. Is this the bug? Is there more to it?
>
> I'm going to make the (hacky?) change to have libpthread.a (static only)
> include a copy of libc/misc/internals/__uClibc_main.o, which should mean
> that when you link statically with -lpthread -lc, you'll get the pthread
> __uClibc_main(), and therefore the pthread
> __pthread_initialize_minimal(). But I suspect there may be more than
> that that is broken. And clearly this doesn't help the case of losers
> who do "-lc -lpthread", which is not that uncommon.
>
> ==== //tilera/main/tools/uclibc/libpthread/nptl/Makefile.in#1 -
> /u/cmetcalf/p4/m3/tools/uclibc/libpthread/nptl/Makefile.in ====
> @@ -247,7 +247,7 @@
> libc-cancellation.c)
> libpthread-nonshared-y += $(patsubst
> %,$(PTHREAD_OUT)/%.oS,$(libpthread_static_SRC))
>
> -libpthread-a-y := $(patsubst
> $(PTHREAD_DIR)/%.c,$(PTHREAD_OUT)/%.o,$(libpthread_a_SRC))
> +libpthread-a-y := $(patsubst
> $(PTHREAD_DIR)/%.c,$(PTHREAD_OUT)/%.o,$(libpthread_a_SRC))
> libc/misc/internals/__uClibc_main.o
> libpthread-so-y := $(patsubst
> $(PTHREAD_DIR)/%.c,$(PTHREAD_OUT)/%.oS,$(libpthread_so_SRC))
> libpthread-static-y += $(patsubst
> $(PTHREAD_DIR)/%.c,$(PTHREAD_OUT)/%.o,$(libpthread_a_SRC)
> $(libpthread_static_SRC))
>
More information about the uClibc
mailing list