فهرست منبع

we need to remove crtbegin.o/crtend.o from gcc specs file. otherwise broken executables (f.e. sash) with a wrong data start are created by elf2flt)

Waldemar Brodkorb 9 سال پیش
والد
کامیت
9d6eef9b39

+ 1 - 1
mk/kernel-vars.mk

@@ -17,4 +17,4 @@ else
 KERNEL_MAKE_OPTS+=	HOSTCFLAGS='${HOST_CFLAGS}'
 endif
 
-KERNEL_MAKE_ENV:=	PATH="${STAGING_HOST_DIR}/usr/bin:$$PATH"
+KERNEL_MAKE_ENV:=	PATH="${TOOLCHAIN_DIR}/usr/bin:${STAGING_HOST_DIR}/usr/bin:$$PATH"

+ 7 - 2
mk/vars.mk

@@ -74,8 +74,13 @@ ifneq ($(strip ${ADK_USE_CCACHE}),)
 TARGET_COMPILER_PREFIX=$(STAGING_HOST_DIR)/usr/bin/ccache ${TARGET_CROSS}
 endif
 
+# use a gcc wrapper for uClinux
+ifeq ($(ADK_TARGET_UCLINUX),y)
+TARGET_CC:=		adk-uclinux-gcc
+else
 # target tools
 TARGET_CC:=		${TARGET_COMPILER_PREFIX}gcc
+endif
 TARGET_CXX:=		${TARGET_COMPILER_PREFIX}g++
 TARGET_LD:=		${TARGET_COMPILER_PREFIX}ld
 TARGET_AR:=		${TARGET_COMPILER_PREFIX}ar
@@ -94,8 +99,8 @@ TARGET_LDFLAGS:=	-L$(STAGING_TARGET_DIR)/lib -L$(STAGING_TARGET_DIR)/usr/lib \
 			-Wl,-rpath-link -Wl,${STAGING_TARGET_DIR}/usr/lib
 
 ifeq ($(ADK_TARGET_BINFMT_FLAT),y)
-TARGET_CFLAGS+=		-Wl,-elf2flt -msep-data
-TARGET_CXXFLAGS+=	-Wl,-elf2flt -msep-data
+TARGET_CFLAGS+=		-msep-data
+TARGET_CXXFLAGS+=	-msep-data
 TARGET_LDFLAGS+=	-elf2flt
 endif
 

+ 4 - 0
package/simpleinit/Makefile

@@ -20,10 +20,14 @@ BUILD_STYLE:=		manual
 INSTALL_STYLE:=		manual
 
 do-build:
+	PATH="${TOOLCHAIN_DIR}/usr/bin:$$PATH" \
 	${TARGET_CC} ${TARGET_CPPFLAGS} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} \
 		-o ${WRKBUILD}/simpleinit ${WRKBUILD}/simpleinit.c
 
 do-install:
+	${INSTALL_DIR} ${IDIR_SIMPLEINIT}/etc
+	${CP} ./files/rc ${IDIR_SIMPLEINIT}/etc
+	${CP} ./files/inittab ${IDIR_SIMPLEINIT}/etc
 	${INSTALL_DIR} ${IDIR_SIMPLEINIT}/sbin
 	${INSTALL_BIN} ${WRKBUILD}/simpleinit ${IDIR_SIMPLEINIT}/sbin/init
 

+ 2 - 0
package/simpleinit/files/inittab

@@ -0,0 +1,2 @@
+# example
+#inet:unknown:/bin/inetd

+ 11 - 43
package/simpleinit/files/rc

@@ -1,47 +1,15 @@
 #!/bin/sh
-set -x
-export PATH=/bin:/sbin:/usr/bin:/usr/sbin
-ln -s /proc/self/fd/2 /dev/stderr
-: ${rcquiet=0}
-if [ $rcquiet -ne 1 ];then
-	echo "System initialization ..."
-fi
-
-# remount /dev with smaller size
-mount -o remount,nosuid,size=128k,mode=0755 -t tmpfs mdev /dev
-
-# start mdev dynamic device node management
-echo >/dev/mdev.seq
-if [ -f /proc/sys/kernel/hotplug ];then
-	echo "/sbin/mdev" >/proc/sys/kernel/hotplug
-fi
-# creates f.e. /dev/root
-mdev -s
-
-# seed some random
-cat /etc/.rnd >/dev/urandom 2>&1
-
-# setup cfgfs
-[ -x /sbin/cfgfs ] && {
-	cfgfs setup
-	mount -o remount,ro /
-}
-
-# remount /tmp with smaller size
-size=$(cat /etc/tmpfs 2>/dev/null)
-[ -z $size ] && size=2048
-mount -o remount,nosuid,nodev,mode=1777,size=${size}k -t tmpfs tmpfs /tmp
-
-# create some useful directories in tmpfs
+echo Starting OpenADK
+hostname openadk
+mount -t proc proc /proc
+mount -t sysfs sys /sys
+mkdir -m 755 /dev/pts
+mount -t devpts devpts /dev/pts
+mount -t tmpfs -o size=8M tmpfs /tmp
+chmod 1777 /tmp
 mkdir -p /var/log
 mkdir -p /var/run
 mkdir -p /var/tmp
-touch /var/log/lastlog
-touch /var/log/wtmp
-
-HOSTNAME=
-[[ -s /etc/hostname ]] && HOSTNAME=$(cat /etc/hostname)
-HOSTNAME=${HOSTNAME%%.*}
-echo ${HOSTNAME:=openadk} >/proc/sys/kernel/hostname
-
-chown 0:0 /tmp; chmod 1777 /tmp
+mdev -s
+mount
+ifconfig lo 127.0.0.1 up

+ 1 - 1
package/uclibc/Makefile

@@ -34,7 +34,7 @@ do-install:
 	test -z $(ADK_RUNTIME_TIMEZONE) || \
 	    grep $(ADK_RUNTIME_TIMEZONE) ./files/tz.lst | \
 	    cut -f 2 > $(IDIR_UCLIBC)/etc/TZ
-ifneq ($(ADK_TARGET_USE_STATIC_LIBS),y)
+ifneq ($(ADK_TARGET_USE_STATIC_LIBS)$(ADK_TARGET_UCLINUX),y)
 	$(CP) $(STAGING_TARGET_DIR)/lib/libc.so.* $(IDIR_UCLIBC)/$(ADK_TARGET_LIBC_PATH)
 	$(CP) $(STAGING_TARGET_DIR)/lib/libuClibc-$(PKG_VERSION).so \
 		$(IDIR_UCLIBC)/$(ADK_TARGET_LIBC_PATH)

+ 0 - 1
target/config/Config.in

@@ -15,7 +15,6 @@ config ADK_TARGET_TOOLCHAIN
 	boolean
 
 config ADK_TARGET_UCLINUX
-	select ADK_TARGET_USE_STATIC_LIBS
 	select ADK_PACKAGE_SASH
 	select ADK_PACKAGE_SIMPLEINIT
 	boolean

+ 1 - 1
target/config/Config.in.target

@@ -3,7 +3,7 @@
 
 config ADK_TARGET_CFLAGS
 	string
-	default "-march=isaaplus -mcpu=5208" if ADK_CPU_CF_5208
+	default "-mcpu=5208" if ADK_CPU_CF_5208
 	default "-mcpu=v7.10.d" if ADK_CPU_MICROBLAZE
 	default "-m4 -ml" if ADK_CPU_SH4 && ADK_little
 	default "-m4 -mb" if ADK_CPU_SH4 && ADK_big

+ 9 - 9
target/m68k/uclibc.config

@@ -53,7 +53,7 @@ UCLIBC_HAS_FLOATS=y
 UCLIBC_HAS_SOFT_FLOAT=y
 DO_C99_MATH=y
 # DO_XSI_MATH is not set
-UCLIBC_HAS_FENV=y
+# UCLIBC_HAS_FENV is not set
 UCLIBC_HAS_LONG_DOUBLE_MATH=y
 KERNEL_HEADERS=""
 UCLIBC_UCLINUX_BROKEN_MUNMAP=y
@@ -62,7 +62,7 @@ HAVE_DOT_CONFIG=y
 #
 # General Library Settings
 #
-DOPIC=y
+# DOPIC is not set
 ARCH_HAS_NO_SHARED=y
 ARCH_HAS_NO_LDSO=y
 UCLIBC_CTOR_DTOR=y
@@ -72,12 +72,12 @@ HAS_NO_THREADS=y
 # UCLIBC_HAS_THREADS_NATIVE is not set
 UCLIBC_HAS_SYSLOG=y
 UCLIBC_HAS_LFS=y
-MALLOC=y
-# MALLOC_SIMPLE is not set
+# MALLOC is not set
+MALLOC_SIMPLE=y
 # MALLOC_STANDARD is not set
-MALLOC_GLIBC_COMPAT=y
+# MALLOC_GLIBC_COMPAT is not set
 UCLIBC_DYNAMIC_ATEXIT=y
-# COMPAT_ATEXIT is not set
+COMPAT_ATEXIT=y
 UCLIBC_SUSV3_LEGACY=y
 # UCLIBC_SUSV3_LEGACY_MACROS is not set
 UCLIBC_SUSV4_LEGACY=y
@@ -194,8 +194,8 @@ UCLIBC_HAS_NFTW=y
 UCLIBC_HAS_FTW=y
 UCLIBC_HAS_FTS=y
 UCLIBC_HAS_GLOB=y
-UCLIBC_HAS_GNU_GLOB=y
-UCLIBC_HAS_UTMPX=y
+# UCLIBC_HAS_GNU_GLOB is not set
+# UCLIBC_HAS_UTMPX is not set
 
 #
 # Library Installation Options
@@ -208,7 +208,7 @@ HARDWIRED_ABSPATH=y
 #
 # Security options
 #
-UCLIBC_HAS_ARC4RANDOM=y
+# UCLIBC_HAS_ARC4RANDOM is not set
 # UCLIBC_HAS_SSP is not set
 UCLIBC_BUILD_NOEXECSTACK=y
 

+ 1 - 1
toolchain/elf2flt/Makefile

@@ -11,7 +11,7 @@ BINUTILS_VERSION:=	2.24
 $(WRKBUILD)/.headers:
 $(WRKBUILD)/.configured:
 	(cd $(WRKBUILD); ./configure --prefix=$(STAGING_HOST_DIR)/usr \
-			--target=$(ADK_TARGET_ARCH) \
+			--target=$(GNU_TARGET_NAME) \
 			--with-bfd-include-dir=$(TOOLCHAIN_BUILD_DIR)/w-binutils-${BINUTILS_VERSION}-1/binutils-${BINUTILS_VERSION}/bfd \
 			--with-binutils-include-dir=$(TOOLCHAIN_BUILD_DIR)/w-binutils-${BINUTILS_VERSION}-1/binutils-${BINUTILS_VERSION}/include \
 			--with-libbfd=$(TOOLCHAIN_BUILD_DIR)/w-binutils-${BINUTILS_VERSION}-1/binutils-${BINUTILS_VERSION}/bfd/libbfd.a \

+ 8 - 0
toolchain/gcc/Makefile

@@ -48,12 +48,16 @@ ifneq ($(ADK_LINUX_AARCH64)$(ADK_LINUX_ALPHA)$(ADK_LINUX_XTENSA)$(ADK_LINUX_M68K
 GCC_FINAL_CONFOPTS+=	--enable-cxx-flags='$(TARGET_CXXFLAGS)'
 endif
 
+ifeq ($(ADK_TARGET_UCLINUX),y)
+GCC_FINAL_CONFOPTS+=	--disable-shared
+else
 # uClibc/glibc uses libgcc_s.so.1 for pthread_cancel with dlopen
 ifeq (ADK_TARGET_LIB_MUSL),y)
 GCC_FINAL_CONFOPTS+=	--enable-shared='libstdc++'
 else
 GCC_FINAL_CONFOPTS+=	--enable-shared='libstdc++,libgcc'
 endif
+endif
 
 ifeq ($(ADK_LINUX_M68K)$(ADK_LINUX_SH)$(ADK_LINUX_X86_64)$(ADK_LINUX_X86),)
 GCC_FINAL_CONFOPTS+=	--disable-biarch --disable-multilib
@@ -267,6 +271,10 @@ endif
 		ln -sf libstdc++.so.6.0.19 libstdc++.so.6
 	# cleanup unneeded docs
 	rm -rf $(TOOLCHAIN_DIR)/usr/share
+	# create gcc wrapper for uClinux/m68k
+	echo "#!/bin/sh" > $(TOOLCHAIN_DIR)/usr/bin/adk-uclinux-gcc
+	echo "exec ${GNU_TARGET_NAME}-gcc \"$$@\" -specs $(ADK_TOPDIR)/toolchain/gcc/m68k-uclinux-gcc.specs" >> $(TOOLCHAIN_DIR)/usr/bin/adk-uclinux-gcc
+	chmod a+x $(TOOLCHAIN_DIR)/usr/bin/adk-uclinux-gcc
 	touch $@
 
 include ${ADK_TOPDIR}/mk/toolchain.mk

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 79 - 0
toolchain/gcc/m68k-uclinux-gcc.specs


+ 14 - 0
toolchain/gcc/patches/4.8.3/disable-tm.m68k

@@ -0,0 +1,14 @@
+diff -Nur gcc-4.8.3.orig/gcc/config/m68k/uclinux.h gcc-4.8.3/gcc/config/m68k/uclinux.h
+--- gcc-4.8.3.orig/gcc/config/m68k/uclinux.h	2013-01-10 21:38:27.000000000 +0100
++++ gcc-4.8.3/gcc/config/m68k/uclinux.h	2014-08-25 17:03:59.543127685 +0200
+@@ -20,6 +20,10 @@
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
++/* Do not use TM clone registry.  It breaks -msep-data (-fPIC) code. */
++/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54584 */
++#define USE_TM_CLONE_REGISTRY 0
++
+ #undef STARTFILE_SPEC
+ #define STARTFILE_SPEC \
+ "%{mshared-library-id=0|!mshared-library-id=*: crt1.o%s ;: Scrt1.o%s} \

+ 30 - 0
toolchain/uclibc/patches/0.9.33.2/0007-disable-test-for-non-MMU-systems.patch

@@ -0,0 +1,30 @@
+From 325f778f3bbb1b13c436e7754dd22097d31c04d2 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@uclibc-ng.org>
+Date: Thu, 21 Aug 2014 22:02:26 +0200
+Subject: [PATCH 7/9] disable test for non-MMU systems
+
+This test fails for non-MMU systems, because it uses fork()
+
+Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
+---
+ test/Makefile | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/test/Makefile b/test/Makefile
+index 787c530..d51bb62 100644
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -42,6 +42,10 @@ endif
+ ifeq ($(HAS_NO_THREADS),y)
+ 	DIRS := $(filter-out pthread,$(DIRS))
+ endif
++# librt test needs fork()
++ifneq ($(ARCH_USE_MMU),y)
++	DIRS := $(filter-out librt,$(DIRS))
++endif
+ 
+ test check all: run
+ 
+-- 
+1.8.5.2 (Apple Git-48)
+

+ 30 - 0
toolchain/uclibc/patches/0.9.33.2/0008-disable-test-for-systems-without-FPU.patch

@@ -0,0 +1,30 @@
+From 012dfda4b27ad92edb6a9ea14e5ce4c5567d1c91 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@uclibc-ng.org>
+Date: Thu, 21 Aug 2014 22:04:59 +0200
+Subject: [PATCH 8/9] disable test for systems without FPU
+
+This test fails for systems without fpu.
+For example m68k build for non-mmu/non-fpu systems fail.
+
+Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
+---
+ test/math/Makefile.in | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/test/math/Makefile.in b/test/math/Makefile.in
+index d241baa..147d579 100644
+--- a/test/math/Makefile.in
++++ b/test/math/Makefile.in
+@@ -13,6 +13,9 @@ endif
+ ifeq ($(DO_C99_MATH),)
+ TESTS_DISABLED += test-float test-ifloat test-double test-idouble rint signgam ilogb
+ endif
++ifeq ($(UCLIBC_HAS_FPU),)
++TESTS_DISABLED += test-fpucw
++endif
+ 
+ DODIFF_rint     := 1
+ DODIFF_signgam  := 1
+-- 
+1.8.5.2 (Apple Git-48)
+

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است