Hi,

After compiling uclibc with gcc-3.4.6 (current hardened compiler) any
program linked with -lpthread just segfaulted.

shows up that gcc first omits the framepointer then tries to access it.
To work around it, gcc-3.4.6 need to add -fno-omit-framepointer to
libpthreads.old/*

attatched patch will help you to build a working hardened uclibc-0.9.30.

-nc
--- uClibc-0.9.30.orig/libpthread/linuxthreads.old/Makefile.in	Thu Nov 13 09:53:27 2008
+++ uClibc-0.9.30/libpthread/linuxthreads.old/Makefile.in	Thu Nov 13 10:01:35 2008
@@ -59,6 +59,13 @@
 libc-static-y += $(libpthread_OUT)/libc_pthread_init.o
 libc-shared-y += $(libpthread_libc_OBJ:.o=.oS)
 
+ifeq ($(TARGET_ARCH),i386)
+# Most files must not be compiled without frame pointer since we need
+# the frame base address which is stored in %ebp unless the frame pointer
+# is optimized out.
+CFLAGS += -fno-omit-frame-pointer -mpreferred-stack-boundary=4
+endif
+
 libpthread-static-y += $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.o,$(libpthread_SPEC_SRC))
 libpthread-shared-y += $(patsubst $(libpthread_DIR)/%.c,$(libpthread_OUT)/%.oS,$(libpthread_SPEC_SRC))
 

Reply via email to