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