FW: Flat shared libs, C++, pthreads
Robin Getz
rgetz at blackfin.uclinux.org
Mon Nov 14 22:02:45 UTC 2005
> > Patch is at:
> > http://mailman.uclinux.org/pipermail/uclinux-dev/2005-November/035386.html
>
>the attachment link is badly malformed
The patch is attached - sorry about that - I will let the uclinux-dev folks
know.
-robin
-------------- next part --------------
Index: Makefile
===================================================================
RCS file: /cvsroot/uclinux533/uClinux-dist/uClibc/Makefile,v
retrieving revision 1.6
diff -d -u -r1.6 Makefile
--- Makefile 10 Nov 2005 12:47:21 -0000 1.6
+++ Makefile 11 Nov 2005 11:26:42 -0000
@@ -386,6 +386,25 @@
-L _current_shared_library_p5_offset_ \
$(SHARED_TARGET).gdb
$(LN) -sf $(SHARED_TARGET).gdb .
+ $(CC) -nostartfiles -o $(SHARED_THREADED_TARGET) $(ARCH_CFLAGS) \
+ -mid-shared-library -mshared-library-id=0 \
+ -Wl,-elf2flt -nostdlib -Wl,-shared-lib-id,${THREADED_LIBID} \
+ lib/main.o \
+ -Wl,--whole-archive,lib/libc.a,-lgcc,lib/libpthread.a,--no-whole-archive
+ $(OBJCOPY) -L _GLOBAL_OFFSET_TABLE_ -L main -L __main -L _start \
+ -L _main -L ___main -L __start \
+ -L __uClibc_main -L __uClibc_start_main -L lib_main \
+ -L ___uClibc_main -L ___uClibc_start_main -L _lib_main \
+ -L _exit_dummy_ref \
+ -L __do_global_dtors -L __do_global_ctors \
+ -L __CTOR_LIST__ -L __DTOR_LIST__ \
+ -L __exit_dummy_ref \
+ -L ___do_global_dtors -L ___do_global_ctors \
+ -L ___CTOR_LIST__ -L ___DTOR_LIST__ \
+ -L _current_shared_library_a5_offset_ \
+ -L _current_shared_library_p5_offset_ \
+ $(SHARED_THREADED_TARGET).gdb
+ $(LN) -sf $(SHARED_THREADED_TARGET).gdb .
endif
#
@@ -396,6 +415,7 @@
[ -e $(ROMFSDIR)/lib ] || mkdir $(ROMFSDIR)/lib
@if [ "$(SHARED_TARGET)" ]; then \
$(ROMFSINST) $(SHARED_TARGET) /lib/lib$(LIBID).so; \
+ $(ROMFSINST) $(SHARED_THREADED_TARGET) /lib/lib$(LIBID)_threaded.so; \
fi
ifeq ($(strip $(HAVE_SHARED)),y)
@set -e; for i in lib/lib*-$(UCLIBC_VERSION).so lib/*.so.*; do \
Index: Rules.mak
===================================================================
RCS file: /cvsroot/uclinux533/uClinux-dist/uClibc/Rules.mak,v
retrieving revision 1.8
diff -d -u -r1.8 Rules.mak
--- Rules.mak 19 Sep 2005 09:46:04 -0000 1.8
+++ Rules.mak 11 Nov 2005 11:26:42 -0000
@@ -308,8 +308,10 @@
# For the shared version of this, we specify no stack and its library ID
FLTFLAGS += -s 0
LIBID=1
- export LIBID FLTFLAGS
+ THREADED_LIBID=2
+ export LIBID THREADED_LIBID FLTFLAGS
SHARED_TARGET = lib/libc
+ SHARED_THREADED_TARGET = lib/libc_threaded
endif
endif
Index: libc/signal/raise.c
===================================================================
RCS file: /cvsroot/uclinux533/uClinux-dist/uClibc/libc/signal/raise.c,v
retrieving revision 1.1.1.1
diff -d -u -r1.1.1.1 raise.c
--- libc/signal/raise.c 19 Jul 2004 12:53:02 -0000 1.1.1.1
+++ libc/signal/raise.c 11 Nov 2005 11:26:42 -0000
@@ -7,8 +7,9 @@
#include <signal.h>
#include <sys/types.h>
-int raise(int signo)
+int __raise(int signo)
{
return kill(getpid(), signo);
}
+weak_alias(__raise,raise)
Index: libc/signal/sigwait.c
===================================================================
RCS file: /cvsroot/uclinux533/uClinux-dist/uClibc/libc/signal/sigwait.c,v
retrieving revision 1.1.1.1
diff -d -u -r1.1.1.1 sigwait.c
--- libc/signal/sigwait.c 19 Jul 2004 12:53:03 -0000 1.1.1.1
+++ libc/signal/sigwait.c 11 Nov 2005 11:26:42 -0000
@@ -22,7 +22,7 @@
#include <signal.h>
#include <string.h>
-int sigwait (const sigset_t *set, int *sig)
+int __sigwait (const sigset_t *set, int *sig)
{
int ret = 1;
if ((ret = sigwaitinfo(set, NULL)) != -1) {
@@ -31,3 +31,4 @@
}
return 1;
}
+weak_alias(__sigwait,sigwait)
Index: libpthread/linuxthreads/pthread.c
===================================================================
RCS file: /cvsroot/uclinux533/uClinux-dist/uClibc/libpthread/linuxthreads/pthread.c,v
retrieving revision 1.3
diff -d -u -r1.3 pthread.c
--- libpthread/linuxthreads/pthread.c 18 Jul 2005 08:06:16 -0000 1.3
+++ libpthread/linuxthreads/pthread.c 11 Nov 2005 11:26:44 -0000
@@ -225,8 +225,8 @@
the functions below. */
#if defined(__NR_rt_sigaction) && __SIGRTMAX - __SIGRTMIN >= 3
-static int current_rtmin = __SIGRTMIN + 3;
-static int current_rtmax = __SIGRTMAX;
+//static int current_rtmin = __SIGRTMIN + 3;
+//static int current_rtmax = __SIGRTMAX;
int __pthread_sig_restart = __SIGRTMIN;
int __pthread_sig_cancel = __SIGRTMIN + 1;
int __pthread_sig_debug = __SIGRTMIN + 2;
@@ -244,6 +244,7 @@
int (*__pthread_timedsuspend)(pthread_descr, const struct timespec *) = __pthread_timedsuspend_old;
#endif
+#if 0
/* Return number of available real-time signal with highest priority. */
int __libc_current_sigrtmin (void)
{
@@ -266,6 +267,7 @@
return -1;
return high ? current_rtmin++ : current_rtmax--;
}
+#endif
/* Initialize the pthread library.
Initialization is split in two functions:
More information about the uClibc
mailing list