diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | mk/build.mk | 36 | ||||
-rw-r--r-- | mk/vars.mk | 11 | ||||
-rw-r--r-- | package/MesaLib/Makefile | 2 | ||||
-rw-r--r-- | package/busybox/Makefile | 16 | ||||
-rw-r--r-- | package/cyrus-sasl/Makefile | 4 | ||||
-rw-r--r-- | package/eglibc/Makefile | 2 | ||||
-rw-r--r-- | package/glibc/Makefile | 2 | ||||
-rw-r--r-- | package/libaudiofile/Makefile | 2 | ||||
-rw-r--r-- | package/ncurses/Makefile | 2 | ||||
-rw-r--r-- | package/postgresql/Makefile | 2 | ||||
-rw-r--r-- | package/tcpdump/Makefile | 2 | ||||
-rw-r--r-- | package/uclibc/Makefile | 2 | ||||
-rw-r--r-- | package/x11-headers/Makefile | 28 | ||||
-rw-r--r-- | scripts/scan-tools.sh | 3 | ||||
-rw-r--r-- | target/linux/patches/2.6.36/zboot-brcm-reloc.patch | 297 |
16 files changed, 346 insertions, 69 deletions
@@ -191,7 +191,7 @@ NO_ERROR=0 echo "GMAKE:=$$(which gmake)" >>prereq.mk ;\ fi @echo "GNU_HOST_NAME:=$$(${CC} -dumpmachine)" >>prereq.mk - @echo "HOSTARCH:=$$(${CC} -dumpmachine | sed -e s'/-.*//' \ + @echo "ARCH_FOR_BUILD:=$$(${CC} -dumpmachine | sed -e s'/-.*//' \ -e 's/sparc.*/sparc/' \ -e 's/armeb.*/armeb/g' \ -e 's/arm.*/arm/g' \ @@ -205,8 +205,6 @@ NO_ERROR=0 )" >>prereq.mk @echo 'CC_FOR_BUILD:=${CC}' >>prereq.mk @echo 'CXX_FOR_BUILD:=${CXX}' >>prereq.mk - @echo 'HOSTCC:=${CC}' >>prereq.mk - @echo 'HOSTCXX:=${CXX}' >>prereq.mk @echo 'LANGUAGE:=C' >>prereq.mk @echo 'LC_ALL:=C' >>prereq.mk @echo 'MAKE:=$${GMAKE}' >>prereq.mk diff --git a/mk/build.mk b/mk/build.mk index f25508a15..3e1b6cd69 100644 --- a/mk/build.mk +++ b/mk/build.mk @@ -302,21 +302,21 @@ endif ifeq ($(ADKtype),ibm-x40) @echo ADK_LINUX_NATIVE=y >> $(TOPDIR)/.defconfig @echo ADK_TARGET_SYSTEM_IBM_X40=y >> $(TOPDIR)/.defconfig - @sed -e "s#config ADK_TARGET#config ADK_NATIVE#" target/$(HOSTARCH)/sys-available/$(ADKtype) > \ - target/$(HOSTARCH)/sys-enabled/.$(ADKtype) + @sed -e "s#config ADK_TARGET#config ADK_NATIVE#" target/$(ARCH_FOR_BUILD)/sys-available/$(ADKtype) > \ + target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype) @echo "choice" > $(TOPDIR)/target/config/Config.in.native @echo "prompt \"Target system (autodetected)\"" >> $(TOPDIR)/target/config/Config.in.native - @echo "source \"target/$(HOSTARCH)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native + @echo "source \"target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native @echo "endchoice" >> $(TOPDIR)/target/config/Config.in.native endif ifeq ($(ADKtype),lemote-yeelong) @echo ADK_LINUX_NATIVE=y >> $(TOPDIR)/.defconfig @echo ADK_TARGET_SYSTEM_LEMOTE_YEELONG=y >> $(TOPDIR)/.defconfig - @sed -e "s#config ADK_TARGET#config ADK_NATIVE#" target/$(HOSTARCH)/sys-available/$(ADKtype) > \ - target/$(HOSTARCH)/sys-enabled/.$(ADKtype) + @sed -e "s#config ADK_TARGET#config ADK_NATIVE#" target/$(ARCH_FOR_BUILD)/sys-available/$(ADKtype) > \ + target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype) @echo "choice" > $(TOPDIR)/target/config/Config.in.native @echo "prompt \"Target system (autodetected)\"" >> $(TOPDIR)/target/config/Config.in.native - @echo "source \"target/$(HOSTARCH)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native + @echo "source \"target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native @echo "endchoice" >> $(TOPDIR)/target/config/Config.in.native endif @echo 'source "target/config/Config.in.arch.default"' > target/config/Config.in.arch @@ -385,20 +385,20 @@ ifneq (,$(filter CYGWIN%,${OStype})) endif ifeq ($(ADKtype),ibmx-40) @echo ADK_TARGET_SYSTEM_IBM_X40=y >> $(TOPDIR)/all.config - @sed -e "s#TARGET#NATIVE#" target/$(HOSTARCH)/sys-available/$(ADKtype) > \ - target/$(HOSTARCH)/sys-enabled/.$(ADKtype) + @sed -e "s#TARGET#NATIVE#" target/$(ARCH_FOR_BUILD)/sys-available/$(ADKtype) > \ + target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype) @echo "choice" > $(TOPDIR)/target/config/Config.in.native @echo "prompt \"Target system (autodetected)\"" >> $(TOPDIR)/target/config/Config.in.native - @echo "source \"target/$(HOSTARCH)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native + @echo "source \"target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native @echo "endchoice" >> $(TOPDIR)/target/config/Config.in.native endif ifeq ($(ADKtype),lemote-yeelong) @echo ADK_TARGET_SYSTEM_LEMOTE_YEELONG=y >> $(TOPDIR)/all.config - @sed -e "s#TARGET#NATIVE#" target/$(HOSTARCH)/sys-available/$(ADKtype) > \ - target/$(HOSTARCH)/sys-enabled/.$(ADKtype) + @sed -e "s#TARGET#NATIVE#" target/$(ARCH_FOR_BUILD)/sys-available/$(ADKtype) > \ + target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype) @echo "choice" > $(TOPDIR)/target/config/Config.in.native @echo "prompt \"Target system (autodetected)\"" >> $(TOPDIR)/target/config/Config.in.native - @echo "source \"target/$(HOSTARCH)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native + @echo "source \"target/$(ARCH_FOR_BUILD)/sys-enabled/.$(ADKtype)\"" >> $(TOPDIR)/target/config/Config.in.native @echo "endchoice" >> $(TOPDIR)/target/config/Config.in.native endif @echo 'source "target/config/Config.in.arch.default"' > target/config/Config.in.arch @@ -551,20 +551,20 @@ bulkallmod: done <${TOPDIR}/target/arch.lst ;\ done -${TOPDIR}/bin/tools/pkgmaker: tools/adk/pkgmaker.c tools/adk/sortfile.c tools/adk/strmap.c +${TOPDIR}/bin/tools/pkgmaker: $(TOPDIR)/tools/adk/pkgmaker.c $(TOPDIR)/tools/adk/sortfile.c $(TOPDIR)/tools/adk/strmap.c @mkdir -p $(TOPDIR)/bin/tools - @$(HOSTCC) -Wall -g -o $@ tools/adk/pkgmaker.c tools/adk/sortfile.c tools/adk/strmap.c + @$(CC_FOR_BUILD) -Wall -g -o $@ tools/adk/pkgmaker.c tools/adk/sortfile.c tools/adk/strmap.c -${TOPDIR}/bin/tools/pkgrebuild: - @$(HOSTCC) -Wall -g -o $@ tools/adk/pkgrebuild.c tools/adk/strmap.c +${TOPDIR}/bin/tools/pkgrebuild: $(TOPDIR)/tools/adk/pkgrebuild.c $(TOPDIR)/tools/adk/strmap.c + @$(CC_FOR_BUILD) -Wall -g -o $@ tools/adk/pkgrebuild.c tools/adk/strmap.c package/Config.in.auto menu .menu: $(wildcard ${TOPDIR}/package/*/Makefile) ${TOPDIR}/bin/tools/pkgmaker ${TOPDIR}/bin/tools/pkgrebuild @echo "Generating menu structure ..." @$(TOPDIR)/bin/tools/pkgmaker @:>.menu -${TOPDIR}/bin/tools/depmaker: - $(HOSTCC) -g -o $(TOPDIR)/bin/tools/depmaker $(TOPDIR)/tools/adk/depmaker.c +${TOPDIR}/bin/tools/depmaker: $(TOPDIR)/tools/adk/depmaker.c + $(CC_FOR_BUILD) -g -o $(TOPDIR)/bin/tools/depmaker $(TOPDIR)/tools/adk/depmaker.c dep: $(TOPDIR)/bin/tools/depmaker @echo "Generating dependencies ..." diff --git a/mk/vars.mk b/mk/vars.mk index b55b92276..b7ec813b4 100644 --- a/mk/vars.mk +++ b/mk/vars.mk @@ -87,12 +87,19 @@ TARGET_CFLAGS:= $(TARGET_OPTIMIZATION) $(TARGET_CFLAGS_ARCH) -fwrapv -fno-ident TARGET_LDFLAGS:= endif +# A nifty macro to make testing gcc features easier (from uClibc project) +check_gcc=$(shell \ + if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \ + then echo "$(1)"; else echo "$(2)"; fi) + +CF_FOR_BUILD=$(call check_gcc,-fhonour-copts,) + # host compiler flags CPPFLAGS_FOR_BUILD?= -CFLAGS_FOR_BUILD?= -O2 -Wall +CFLAGS_FOR_BUILD= -O2 -Wall $(CF_FOR_BUILD) CXXFLAGS_FOR_BUILD?= -O2 -Wall LDFLAGS_FOR_BUILD?= -FLAGS_FOR_BUILD:= ${CPPFLAGS_FOR_BUILD} ${CFLAGS_FOR_BUILD} ${LDFLAGS_FOR_BUILD} +FLAGS_FOR_BUILD= ${CPPFLAGS_FOR_BUILD} ${CFLAGS_FOR_BUILD} ${LDFLAGS_FOR_BUILD} PATCH= ${BASH} $(SCRIPT_DIR)/patch.sh SED:= sed -i -e diff --git a/package/MesaLib/Makefile b/package/MesaLib/Makefile index 6e752a8da..74b9cb474 100644 --- a/package/MesaLib/Makefile +++ b/package/MesaLib/Makefile @@ -42,7 +42,7 @@ CONFIGURE_ARGS+= --disable-static \ --with-dri-drivers=${DRI_DRIVERS},swrast \ --with-demos=xdemos -XAKE_FLAGS+= HOST_CC=${HOSTCC} GLSL_CL=${STAGING_HOST_DIR}/bin/glslcompile +XAKE_FLAGS+= HOST_CC=${CC_FOR_BUILD} GLSL_CL=${STAGING_HOST_DIR}/bin/glslcompile post-extract: (cd ${WRKBUILD}; rm -rf config.{cache,status}; \ diff --git a/package/busybox/Makefile b/package/busybox/Makefile index bcd582179..93098145a 100644 --- a/package/busybox/Makefile +++ b/package/busybox/Makefile @@ -35,30 +35,34 @@ ifeq ($(ADK_NATIVE),y) yes '' | \ $(MAKE) V=1 \ IPKG_ARCH="$(CPU_ARCH)" \ - ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) oldconfig $(MAKE_TRACE) + ARCH="$(ARCH)" HOSTCC="$(CC_FOR_BUILD)" HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" -C $(WRKBUILD) oldconfig $(MAKE_TRACE) else yes '' | \ $(MAKE) V=1 CROSS_COMPILE="$(TARGET_CROSS)" \ EXTRA_CFLAGS="$(TARGET_CFLAGS)" IPKG_ARCH="$(CPU_ARCH)" \ - ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) oldconfig $(MAKE_TRACE) + ARCH="$(ARCH)" HOSTCC="$(CC_FOR_BUILD)" HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" -C $(WRKBUILD) oldconfig $(MAKE_TRACE) endif do-build: ifeq ($(ADK_NATIVE),y) $(MAKE) V=1 \ - IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) busybox + IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(CC_FOR_BUILD)" HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" \ + -C $(WRKBUILD) busybox else $(MAKE) V=1 CROSS_COMPILE="$(TARGET_CROSS)" \ - IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) busybox + IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(CC_FOR_BUILD)" HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" \ + -C $(WRKBUILD) busybox endif do-install: ifeq ($(ADK_NATIVE),y) $(MAKE) V=1 \ - IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) install $(MAKE_TRACE) + IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(CC_FOR_BUILD)" HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" \ + -C $(WRKBUILD) install $(MAKE_TRACE) else $(MAKE) V=1 CROSS_COMPILE="$(TARGET_CROSS)" \ - IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(HOSTCC)" -C $(WRKBUILD) install $(MAKE_TRACE) + IPKG_ARCH="$(CPU_ARCH)" ARCH="$(ARCH)" HOSTCC="$(CC_FOR_BUILD)" HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" \ + -C $(WRKBUILD) install $(MAKE_TRACE) endif $(CP) $(WRKINST)/* $(IDIR_BUSYBOX)/ ifeq ($(ADK_DEBUG),y) diff --git a/package/cyrus-sasl/Makefile b/package/cyrus-sasl/Makefile index a7ce3a9c8..291186507 100644 --- a/package/cyrus-sasl/Makefile +++ b/package/cyrus-sasl/Makefile @@ -61,8 +61,8 @@ CONFIGURE_ARGS+= --disable-sample \ pre-build: ${MAKE} -C ${WRKBUILD}/include \ - CC="${HOSTCC}" \ - LINK="${HOSTCC} -o makemd5 -lc" \ + CC="${CC_FOR_BUILD}" \ + LINK="${CC_FOR_BUILD} -o makemd5 -lc" \ LIBS="" \ CFLAGS="" \ LDFLAGS="" \ diff --git a/package/eglibc/Makefile b/package/eglibc/Makefile index 60d35f1ee..4f72f2400 100644 --- a/package/eglibc/Makefile +++ b/package/eglibc/Makefile @@ -91,7 +91,7 @@ eglibc-dev-install: cd $(IDIR_EGLIBC_DEV)/lib && ln -sf libdl.so.2 libdl.so # header package $(MAKE) -C $(TOOLCHAIN_BUILD_DIR)/w-linux-$(KERNEL_VERSION)-$(KERNEL_RELEASE)/linux-$(KERNEL_VERSION) \ - HOSTCC=$(HOSTCC) ARCH=$(ARCH) V=1 \ + HOSTCC=$(CC_FOR_BUILD) ARCH=$(ARCH) V=1 \ INSTALL_HDR_PATH=$(IDIR_EGLIBC_DEV)/usr \ headers_install (cd $(WRKBUILD); \ diff --git a/package/glibc/Makefile b/package/glibc/Makefile index 7733cf7ca..43321ad22 100644 --- a/package/glibc/Makefile +++ b/package/glibc/Makefile @@ -62,7 +62,7 @@ glibc-dev-install: done # header package $(MAKE) -C $(TOOLCHAIN_BUILD_DIR)/w-linux-$(KERNEL_VERSION)-$(KERNEL_RELEASE)/linux-$(KERNEL_VERSION) \ - HOSTCC=$(HOSTCC) ARCH=$(ARCH) V=1 \ + HOSTCC=$(CC_FOR_BUILD) ARCH=$(ARCH) V=1 \ INSTALL_HDR_PATH=$(IDIR_GLIBC_DEV)/usr \ headers_install (cd $(WRKBUILD); \ diff --git a/package/libaudiofile/Makefile b/package/libaudiofile/Makefile index be4e93c61..e681dbee8 100644 --- a/package/libaudiofile/Makefile +++ b/package/libaudiofile/Makefile @@ -17,7 +17,7 @@ include ${TOPDIR}/mk/package.mk $(eval $(call PKG_template,LIBAUDIOFILE,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) CONFIGURE_ENV+= ac_cv_linux_vers=2 -CONFIGURE_ARGS+= --with-build-cc=${HOSTCC} +CONFIGURE_ARGS+= --with-build-cc=${CC_FOR_BUILD} post-install: ${INSTALL_DIR} ${IDIR_LIBAUDIOFILE}/usr/lib diff --git a/package/ncurses/Makefile b/package/ncurses/Makefile index 12259ddba..20f37ecac 100644 --- a/package/ncurses/Makefile +++ b/package/ncurses/Makefile @@ -27,7 +27,7 @@ $(eval $(call PKG_template,LIBNCURSES_DEV,libncurses-dev,${PKG_VERSION}-${PKG_RE CONFIGURE_ENV+= ac_cv_linux_vers=2 CONFIGURE_ARGS+= --without-cxx \ --without-cxx-binding \ - --with-build-cc=${HOSTCC} \ + --with-build-cc=${CC_FOR_BUILD} \ --without-progs \ --with-fallbacks \ --disable-termcap \ diff --git a/package/postgresql/Makefile b/package/postgresql/Makefile index f467cbaf0..4f6f1c671 100644 --- a/package/postgresql/Makefile +++ b/package/postgresql/Makefile @@ -41,7 +41,7 @@ pre-configure: ${PKG_CONFIGURE_ARGS} \ ); ${MAKE} -C "${WRKBUILD}/src/bin/pg_config" \ - CC="${HOSTCC}" \ + CC="${CC_FOR_BUILD}" \ DESTDIR="${WRKINST}" \ all install diff --git a/package/tcpdump/Makefile b/package/tcpdump/Makefile index 6eb5d62d3..652dc1b6b 100644 --- a/package/tcpdump/Makefile +++ b/package/tcpdump/Makefile @@ -22,7 +22,7 @@ include ${TOPDIR}/mk/package.mk $(eval $(call PKG_template,TCPDUMP,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) -CONFIGURE_ENV+= BUILD_CC="${TARGET_CC}" HOSTCC=${HOSTCC} \ +CONFIGURE_ENV+= BUILD_CC="${TARGET_CC}" HOSTCC=${CC_FOR_BUILD} \ ac_cv_linux_vers=2 \ td_cv_buggygetaddrinfo="no" CONFIGURE_ARGS+= --without-crypto diff --git a/package/uclibc/Makefile b/package/uclibc/Makefile index 90b9f49f9..5bb092294 100644 --- a/package/uclibc/Makefile +++ b/package/uclibc/Makefile @@ -55,7 +55,7 @@ uclibc-dev-install: PREFIX=$(IDIR_UCLIBC_DEV)/ \ DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=$(IDIR_UCLIBC_DEV)/ \ - HOSTCC="$(HOSTCC)" \ + HOSTCC="$(CC_FOR_BUILD)" \ CPU_CFLAGS="$(TARGET_CFLAGS)" \ install_headers @find $(IDIR_UCLIBC_DEV) -name .install -exec rm {} \; diff --git a/package/x11-headers/Makefile b/package/x11-headers/Makefile deleted file mode 100644 index afba71098..000000000 --- a/package/x11-headers/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# This file is part of the OpenADK project. OpenADK is copyrighted -# material, please see the LICENCE file in the top-level directory. - -include $(TOPDIR)/rules.mk - -PKG_NAME:= x11-headers -PKG_VERSION:= 1.0 -PKG_RELEASE:= 1 -PKG_DESCR:= X11 header files -PKG_BUILDDEP:= xproto xtrans xextproto -PKG_BUILDDEP+= xcmiscproto bigreqsproto kbproto inputproto -PKG_SECTION:= devel - -NO_DISTFILES:= 1 - -include $(TOPDIR)/mk/package.mk - -$(eval $(call PKG_template,X11_HEADERS,x11-headers,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) - -CONFIG_STYLE:= manual -BUILD_STYLE:= manual -INSTALL_STYLE:= manual - -do-install: - ${INSTALL_DIR} ${IDIR_X11_HEADERS}/usr/include - ${CP} ${STAGING_TARGET_DIR}/usr/include/X11 ${IDIR_X11_HEADERS}/usr/include - -include ${TOPDIR}/mk/pkg-bottom.mk diff --git a/scripts/scan-tools.sh b/scripts/scan-tools.sh index 2ad569de0..7d6d73e53 100644 --- a/scripts/scan-tools.sh +++ b/scripts/scan-tools.sh @@ -72,11 +72,10 @@ set +e cat >Makefile <<'EOF' include ${TOPDIR}/prereq.mk -HOSTCFLAGS+= -O2 all: run-test test: test.c - ${HOSTCC} ${HOSTCFLAGS} -o $@ $^ ${LDADD} + ${CC_FOR_BUILD} ${CFLAGS_FOR_BUILD} -o $@ $^ ${LDADD} run-test: test ./test diff --git a/target/linux/patches/2.6.36/zboot-brcm-reloc.patch b/target/linux/patches/2.6.36/zboot-brcm-reloc.patch new file mode 100644 index 000000000..2ff2cce15 --- /dev/null +++ b/target/linux/patches/2.6.36/zboot-brcm-reloc.patch @@ -0,0 +1,297 @@ +--- /dev/null Thu Jan 6 02:10:11 2011 ++++ linux-2.6.36/arch/mips/boot/compressed/invcache.S Thu Jan 6 01:32:57 2011 +@@ -0,0 +1,132 @@ ++/*- ++ * written 2011 by Thorsten Glaser <tg@mirbsd.org> based on ++ * code from LZMA-Loader with the following copyright note: ++ * Copyright 2005 Oleg I. Vdovikin <oleg@cs.msu.su> ++ * cache manipulation adapted from Broadcom code ++ * idea taken from original bunzip2 decompressor code ++ * Copyright 2004 Manuel Novoa III <mjn3@codepoet.org> ++ */ ++ ++/* ++ * This file is supposed to be #include’d where it’s ++ * needed; we will not trash s0, s1, s2, s3. ++ */ ++ ++#define KSEG0 0x80000000 ++ ++#define C0_CONFIG $16 ++#define C0_TAGLO $28 ++#define C0_TAGHI $29 ++ ++#define CONF1_DA_SHIFT 7 /* D$ associativity */ ++#define CONF1_DA_MASK 0x00000380 ++#define CONF1_DA_BASE 1 ++#define CONF1_DL_SHIFT 10 /* D$ line size */ ++#define CONF1_DL_MASK 0x00001c00 ++#define CONF1_DL_BASE 2 ++#define CONF1_DS_SHIFT 13 /* D$ sets/way */ ++#define CONF1_DS_MASK 0x0000e000 ++#define CONF1_DS_BASE 64 ++#define CONF1_IA_SHIFT 16 /* I$ associativity */ ++#define CONF1_IA_MASK 0x00070000 ++#define CONF1_IA_BASE 1 ++#define CONF1_IL_SHIFT 19 /* I$ line size */ ++#define CONF1_IL_MASK 0x00380000 ++#define CONF1_IL_BASE 2 ++#define CONF1_IS_SHIFT 22 /* Instruction cache sets/way */ ++#define CONF1_IS_MASK 0x01c00000 ++#define CONF1_IS_BASE 64 ++ ++#define Index_Invalidate_I 0x00 ++#define Index_Writeback_Inv_D 0x01 ++ ++ /* Get cache sizes */ ++ .set mips32 ++ mfc0 s4,C0_CONFIG,1 ++ .set mips0 ++ ++ li s5,CONF1_DL_MASK ++ and s5,s4 ++ beq s5,zero,2f ++ nop ++ ++ srl s5,CONF1_DL_SHIFT ++ li t0,CONF1_DL_BASE ++ sll s5,t0,s5 /* s5 has D$ cache line size */ ++ ++ li s6,CONF1_DA_MASK ++ and s6,s4 ++ srl s6,CONF1_DA_SHIFT ++ addiu s6,CONF1_DA_BASE /* s6 now has D$ associativity */ ++ ++ li t0,CONF1_DS_MASK ++ and t0,s4 ++ srl t0,CONF1_DS_SHIFT ++ li s7,CONF1_DS_BASE ++ sll s7,s7,t0 /* s7 has D$ sets per way */ ++ ++ multu s6,s7 /* sets/way * associativity */ ++ mflo t0 /* total cache lines */ ++ ++ multu s5,t0 /* D$ linesize * lines */ ++ mflo s6 /* s6 is now D$ size in bytes */ ++ ++ /* Initilize the D$: */ ++ mtc0 zero,C0_TAGLO ++ mtc0 zero,C0_TAGHI ++ ++ li t0,KSEG0 /* Just an address for the first $ line */ ++ addu t1,t0,s6 /* + size of cache == end */ ++ ++ .set mips3 ++1: cache Index_Writeback_Inv_D,0(t0) ++ .set mips0 ++ bne t0,t1,1b ++ addu t0,s5 ++ ++2: ++ /* Now we get to do it all again for the I$ */ ++ ++ move s7,zero /* just in case there is no icache */ ++ move t8,zero ++ ++ li t0,CONF1_IL_MASK ++ and t0,s4 ++ beq t0,zero,3f ++ nop ++ ++ srl t0,CONF1_IL_SHIFT ++ li s7,CONF1_IL_BASE ++ sll s7,t0 /* s7 has I$ cache line size */ ++ ++ li t0,CONF1_IA_MASK ++ and t0,s4 ++ srl t0,CONF1_IA_SHIFT ++ addiu t8,t0,CONF1_IA_BASE /* t8 now has I$ associativity */ ++ ++ li t0,CONF1_IS_MASK ++ and t0,s4 ++ srl t0,CONF1_IS_SHIFT ++ li t9,CONF1_IS_BASE ++ sll t9,t0 /* t9 has I$ sets per way */ ++ ++ multu t8,t9 /* sets/way * associativity */ ++ mflo t0 /* t8 is now total cache lines */ ++ ++ multu s7,t0 /* I$ linesize * lines */ ++ mflo t8 /* t8 is cache size in bytes */ ++ ++ /* Initilize the I$: */ ++ mtc0 zero,C0_TAGLO ++ mtc0 zero,C0_TAGHI ++ ++ li t0,KSEG0 /* Just an address for the first $ line */ ++ addu t1,t0,t8 /* + size of cache == end */ ++ ++ .set mips3 ++1: cache Index_Invalidate_I,0(t0) ++ .set mips0 ++ bne t0,t1,1b ++ addu t0,s7 ++ ++3: +--- /dev/null Thu Jan 6 00:14:18 2011 ++++ linux-2.6.36/arch/mips/boot/compressed/selfreloc.lds.S Wed Jan 5 23:52:43 2011 +@@ -0,0 +1,39 @@ ++/*- ++ * written 2010 by Thorsten Glaser <tg@debian.org> based on ++ * arch/mips/kernel/vmlinux.lds and arch/mips/boot/compressed/ld.script ++ */ ++ ++#include <asm/asm-offsets.h> ++#include <asm/page.h> ++#include <asm-generic/vmlinux.lds.h> ++ ++#undef mips ++#define mips mips ++OUTPUT_ARCH(mips) ++ENTRY(selfreloc_start) ++PHDRS { ++ text PT_LOAD FLAGS(7); /* RWX */ ++} ++SECTIONS ++{ ++ . = VMLINUX_LOAD_ADDRESS; ++ .text : { ++ *(.text) ++ *(.text.*) ++ *(.rodata) ++ *(.rodata.*) ++ *(.data) ++ *(.data.*) ++ *(.bss) ++ *(.bss.*) ++ } :text ++ /DISCARD/ : { ++ *(.MIPS.options) ++ *(.options) ++ *(.pdr) ++ *(.reginfo) ++ *(.comment) ++ *(.note) ++ *(.gnu.attributes) ++ } ++} +--- /dev/null Thu Jan 6 02:10:14 2011 ++++ linux-2.6.36/arch/mips/boot/compressed/selfreloc.S Thu Jan 6 01:21:44 2011 +@@ -0,0 +1,60 @@ ++/*- ++ * written 2011 by Thorsten Glaser <tg@freewrt.org> based on ++ * arch/mips/boot/compressed/head.S and code from LZMA-Loader ++ */ ++ ++#include <asm/asm.h> ++#include <asm/regdef.h> ++ ++ .set noreorder ++ .cprestore ++ ++ .text ++ LEAF(selfreloc_start) ++selfreloc_start: ++ /* Save boot rom start args */ ++ move s0, a0 ++ move s1, a1 ++ move s2, a2 ++ move s3, a3 ++ ++ /* Copy code to the correct place */ ++ PTR_LI a0, VMLINUZ_LOAD_ADDRESS ++ PTR_LA a1, imgbeg ++ PTR_LA a2, imgend ++1: lw t0, 0(a1) ++ sw t0, 0(a0) ++ add a1, 4 ++ add a0, 4 ++ blt a1, a2, 1b ++ nop ++ ++ /* ++ * At this point we need to invalidate dcache and ++ * icache before jumping to the new code ++ */ ++/* #include "invcache.S" // since this may work only on brcm? */ ++ ++ /* Restore boot rom start args */ ++ move a0, s0 ++ move a1, s1 ++ move a2, s2 ++ move a3, s3 ++ ++ /* Jump to the code at its new location */ ++ PTR_LI k0, VMLINUZ_LOAD_ADDRESS ++ jr k0 ++ nop ++ ++ /* Just in case we come back… */ ++3: ++ b 3b ++ nop ++ END(selfreloc_start) ++ ++ .globl imgbeg ++ .p2align 2 ++imgbeg: .incbin "vmlinuz.bin" ++ .globl imgend ++ .p2align 2 ++imgend: +--- linux-2.6.36/arch/mips/boot/compressed/Makefile~ Wed Jan 5 21:26:40 2011 ++++ linux-2.6.36/arch/mips/boot/compressed/Makefile Wed Jan 5 23:35:58 2011 +@@ -62,8 +62,13 @@ $(obj)/piggy.o: $(obj)/dummy.o $(obj)/vm + # Calculate the load address of the compressed kernel image + hostprogs-y := calc_vmlinuz_load_addr + ++ifdef CONFIG_BCM47XX ++# XXX just after CFE, just pray the address is static ++VMLINUZ_LOAD_ADDRESS = 0xffffffff80480000 ++else + VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ + $(obj)/vmlinux.bin $(VMLINUX_LOAD_ADDRESS)) ++endif + + vmlinuzobjs-y += $(obj)/piggy.o + +@@ -106,4 +107,12 @@ OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFL + vmlinuz.srec: vmlinuz + $(call cmd,objcopy) + +-clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} ++AFLAGS_selfreloc.o := -DVMLINUZ_LOAD_ADDRESS=$(VMLINUZ_LOAD_ADDRESS) ++arch/mips/boot/compressed/selfreloc.o: arch/mips/boot/compressed/selfreloc.S vmlinuz.bin arch/mips/boot/compressed/invcache.S ++ ++CPPFLAGS_selfreloc.lds := $(KBUILD_CFLAGS) ++ ++vmlinub.elf: arch/mips/boot/compressed/selfreloc.o arch/mips/boot/compressed/selfreloc.lds ++ $(LD) $(LDFLAGS) -T arch/mips/boot/compressed/selfreloc.lds arch/mips/boot/compressed/selfreloc.o -o $@ ++ ++clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec} $(objtree)/vmlinub.elf $(objtree)/arch/mips/boot/compressed/selfreloc.{o,lds} +--- linux-2.6.36/arch/mips/Makefile~ Wed Jan 5 20:26:12 2011 ++++ linux-2.6.36/arch/mips/Makefile Wed Jan 5 22:41:38 2011 +@@ -79,6 +79,7 @@ endif + all-$(CONFIG_BOOT_ELF32) := $(vmlinux-32) + all-$(CONFIG_BOOT_ELF64) := $(vmlinux-64) + all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlinuz ++all-$(CONFIG_BCM47XX) += vmlinub.elf + + # + # GCC uses -G 0 -mabicalls -fpic as default. We don't want PIC in the kernel +@@ -285,7 +286,7 @@ vmlinux.bin vmlinux.ecoff vmlinux.srec: + $(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) arch/mips/boot/$@ + + # boot/compressed +-vmlinuz vmlinuz.bin vmlinuz.ecoff vmlinuz.srec: $(vmlinux-32) FORCE ++vmlinuz vmlinuz.bin vmlinuz.ecoff vmlinuz.srec vmlinub.elf: $(vmlinux-32) FORCE + $(Q)$(MAKE) $(build)=arch/mips/boot/compressed \ + VMLINUX_LOAD_ADDRESS=$(load-y) 32bit-bfd=$(32bit-bfd) $@ + +@@ -322,6 +323,7 @@ define archhelp + echo ' vmlinuz.ecoff - ECOFF zboot image' + echo ' vmlinuz.bin - Raw binary zboot image' + echo ' vmlinuz.srec - SREC zboot image' ++ echo ' vmlinub.elf - ELF self-relocating zboot image' + echo + echo ' These will be default as apropriate for a configured platform.' + endef |