summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--mk/build.mk36
-rw-r--r--mk/vars.mk11
-rw-r--r--package/MesaLib/Makefile2
-rw-r--r--package/busybox/Makefile16
-rw-r--r--package/cyrus-sasl/Makefile4
-rw-r--r--package/eglibc/Makefile2
-rw-r--r--package/glibc/Makefile2
-rw-r--r--package/libaudiofile/Makefile2
-rw-r--r--package/ncurses/Makefile2
-rw-r--r--package/postgresql/Makefile2
-rw-r--r--package/tcpdump/Makefile2
-rw-r--r--package/uclibc/Makefile2
-rw-r--r--package/x11-headers/Makefile28
-rw-r--r--scripts/scan-tools.sh3
-rw-r--r--target/linux/patches/2.6.36/zboot-brcm-reloc.patch297
16 files changed, 346 insertions, 69 deletions
diff --git a/Makefile b/Makefile
index 7cb1641ea..b143098c4 100644
--- a/Makefile
+++ b/Makefile
@@ -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