Bug#330730: gcc-4.0: Please add big-endian arm (armeb) support
Package: gcc-4.0
Version: 4.0.1-8
Severity: wishlist
Tags: patch
Attached is a patch that teaches the gcc-4.0 package build scripts
about the armeb architecture, and a patch for gcc to default to
big-endian in case of an arm*b-*-* target triple. This allows a fully
native gcc-4.0 package build on a big-endian ARM platform.
-- System Information:
Debian Release: 3.1
Architecture: armeb (armv5teb)
Kernel: Linux 2.6.13
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
--- gcc-4.0-4.0.1/debian/rules2.orig 2005-09-25 00:30:44.000000000 +0000
+++ gcc-4.0-4.0.1/debian/rules2 2005-09-25 00:30:50.000000000 +0000
@@ -246,7 +246,7 @@
bootstrap_target = bootstrap
# Increase the timeout for one testrun on slow architectures
-ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),arm hppa m68k))
+ifeq ($(DEB_TARGET_GNU_CPU), $(findstring $(DEB_TARGET_GNU_CPU),arm armeb hppa m68k))
DEJAGNU_TIMEOUT=600
else
DEJAGNU_TIMEOUT=450
@@ -676,7 +676,7 @@
done
# start the script only on architectures known to have slow autobilders ...
-logwatch_archs := arm m68k mips mipsel sparc
+logwatch_archs := arm armeb m68k mips mipsel sparc
ifeq ($(DEB_HOST_GNU_CPU), $(findstring $(DEB_HOST_GNU_CPU),$(logwatch_archs)))
start_logwatch = yes
endif
--- gcc-4.0-4.0.1/debian/control.orig 2005-09-25 00:30:44.000000000 +0000
+++ gcc-4.0-4.0.1/debian/control 2005-09-25 00:30:50.000000000 +0000
@@ -4,7 +4,7 @@
Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Uploaders: Matthias Klose <doko@debian.org>
Standards-Version: 3.6.2
-Build-Depends: dpkg-dev (>= 1.13.9), libc6.1-dev (>= 2.3.2.ds1-16) [alpha ia64] | libc0.3-dev (>= 2.3.2.ds1-16) | libc0.1-dev (>= 2.3.2.ds1-16) | libc12-dev (>= 2.3.2.ds1-16) | libc6-dev (>= 2.3.2.ds1-16), libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64] | ia32-libs-dev [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], lib32gcc1 [amd64 ppc64], lib64gcc1 [i386 powerpc sparc s390], libc6-dev-amd64 [i386] | amd64-libs-dev (>= 1.2) [i386], libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf, automake1.9, libtool, autogen, gawk, dejagnu (>= 1.4.3) [!hurd-any !hurd-i386], expect-tcl8.3 [hppa] | expect [hppa], expect (>= 5.38.0) [!hppa !hurd-any !hurd-i386], bzip2, binutils (>= 2.16.1) | binutils-multiarch (>= 2.16.1), binutils-hppa64 (>= 2.16.1) [hppa], debhelper (>= 4.1), gperf (>= 3.0.1), bison (>= 1:1.875a-1), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libgc-dev [!avr !alpha !amd64 !arm !hppa !i386 !ia64 !m68k !mips !mipsel !powerpc !s390 !sparc !knetbsd-any !knetbsd-i386], gnat-4.0 [!alpha !arm !m68k !sh3 !sh3eb !sh4 !sh4eb !kfreebsd-any !knetbsd-any !netbsd-any !kfreebsd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !hurd-i386] | gnat-3.4 [!alpha !arm !m68k !sh3 !sh3eb !sh4 !sh4eb !kfreebsd-any !knetbsd-any !netbsd-any !kfreebsd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !hurd-i386] | gnat-3.3 [!alpha !arm !m68k !sh3 !sh3eb !sh4 !sh4eb !kfreebsd-any !knetbsd-any !netbsd-any !kfreebsd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !hurd-i386], libmpfr-dev [!m68k !avr], locales [!hurd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !knetbsd-any !netbsd-any], procps [!hurd-any !hurd-i386], sharutils, xlibs-dev [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], libgtk2.0-dev (>= 2.4.4-2) [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], libart-2.0-dev [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], libcairo2-dev [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], realpath (>= 1.9.12), chrpath, lsb-release, dash [hppa]
+Build-Depends: dpkg-dev (>= 1.13.9), libc6.1-dev (>= 2.3.2.ds1-16) [alpha ia64] | libc0.3-dev (>= 2.3.2.ds1-16) | libc0.1-dev (>= 2.3.2.ds1-16) | libc12-dev (>= 2.3.2.ds1-16) | libc6-dev (>= 2.3.2.ds1-16), libc6-dev-sparc64 [sparc], libc6-dev-s390x [s390], libc6-dev-i386 [amd64] | ia32-libs-dev [amd64], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], lib32gcc1 [amd64 ppc64], lib64gcc1 [i386 powerpc sparc s390], libc6-dev-amd64 [i386] | amd64-libs-dev (>= 1.2) [i386], libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], m4, autoconf, automake1.9, libtool, autogen, gawk, dejagnu (>= 1.4.3) [!hurd-any !hurd-i386], expect-tcl8.3 [hppa] | expect [hppa], expect (>= 5.38.0) [!hppa !hurd-any !hurd-i386], bzip2, binutils (>= 2.16.1) | binutils-multiarch (>= 2.16.1), binutils-hppa64 (>= 2.16.1) [hppa], debhelper (>= 4.1), gperf (>= 3.0.1), bison (>= 1:1.875a-1), flex, gettext, texinfo (>= 4.3), zlib1g-dev, libgc-dev [!avr !alpha !amd64 !arm !armeb !hppa !i386 !ia64 !m68k !mips !mipsel !powerpc !s390 !sparc !knetbsd-any !knetbsd-i386], gnat-4.0 [!alpha !arm !armeb !m68k !sh3 !sh3eb !sh4 !sh4eb !kfreebsd-any !knetbsd-any !netbsd-any !kfreebsd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !hurd-i386] | gnat-3.4 [!alpha !arm !armeb !m68k !sh3 !sh3eb !sh4 !sh4eb !kfreebsd-any !knetbsd-any !netbsd-any !kfreebsd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !hurd-i386] | gnat-3.3 [!alpha !arm !armeb !m68k !sh3 !sh3eb !sh4 !sh4eb !kfreebsd-any !knetbsd-any !netbsd-any !kfreebsd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !hurd-i386], libmpfr-dev [!m68k !avr], locales [!hurd-i386 !knetbsd-i386 !netbsd-i386 !hurd-any !knetbsd-any !netbsd-any], procps [!hurd-any !hurd-i386], sharutils, xlibs-dev [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], libgtk2.0-dev (>= 2.4.4-2) [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], libart-2.0-dev [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], libcairo2-dev [!mips !mipsel !knetbsd-any !netbsd-any !knetbsd-i386 !netbsd-i386], realpath (>= 1.9.12), chrpath, lsb-release, dash [hppa]
Build-Depends-Indep: doxygen (>= 1.4.2), graphviz (>= 2.2), gsfonts-x11
Package: gcc-4.0-base
@@ -644,7 +644,7 @@
interest in it.
Package: gcc-4.0-soft-float
-Architecture: arm
+Architecture: arm armeb
Priority: optional
Depends: gcc-4.0-base (= ${gcc:Version}), gcc-4.0 (= ${gcc:Version}), ${shlibs:Depends}
Replaces: gcc-soft-float-ss
--- gcc-4.0-4.0.1/debian/rules.defs.orig 2005-09-25 00:30:44.000000000 +0000
+++ gcc-4.0-4.0.1/debian/rules.defs 2005-09-25 00:30:50.000000000 +0000
@@ -423,7 +423,7 @@
with_objc_gc := yes
# disable ObjC garbage collection library (needs libgc)
-libgc_no_cpus := avr alpha amd64 arm hppa i386 ia64 m68k mips mipsel powerpc s390 sparc
+libgc_no_cpus := avr alpha amd64 arm armeb hppa i386 ia64 m68k mips mipsel powerpc s390 sparc
libgc_no_systems := knetbsd-gnu
ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(libgc_no_cpus)))
with_objc_gc := disabled for architecture $(DEB_TARGET_ARCH_CPU)
@@ -478,7 +478,7 @@
endif
with_libgnat := yes
-ada_no_cpus := alpha arm m68k sh3 sh3eb sh4 sh4eb
+ada_no_cpus := alpha arm armeb m68k sh3 sh3eb sh4 sh4eb
ada_no_systems := hurd-i386 kfreebsd-gnu knetbsd-gnu netbsdelf-gnu
ifneq (, $(filter $(DEB_TARGET_ARCH_CPU),$(ada_no_cpus)))
with_ada := disabled for architecure $(DEB_TARGET_ARCH_CPU)
--- gcc-4.0-4.0.1/debian/rules.patch.orig 2005-09-25 00:31:33.000000000 +0000
+++ gcc-4.0-4.0.1/debian/rules.patch 2005-09-25 00:31:14.000000000 +0000
@@ -34,6 +34,7 @@
libjava-awt-peer-gtk \
libjava-dlsearch-path \
libjava-echo-fix \
+ arm-bigendian \
# cvs-updates \
# pr23891 \
--- gcc-4.0-4.0.1/debian/patches/arm-bigendian.dpatch.orig 2005-09-25 00:31:37.000000000 +0000
+++ gcc-4.0-4.0.1/debian/patches/arm-bigendian.dpatch 2005-09-25 00:29:41.000000000 +0000
@@ -0,0 +1,85 @@
+#! /bin/sh -e
+
+src=gcc
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+ pdir="-d $3"
+ src=$3/gcc
+elif [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch)
+ patch $pdir -f --no-backup-if-mismatch -p0 --fuzz 10 < $0
+ ;;
+ -unpatch)
+ patch $pdir -f --no-backup-if-mismatch -R -p0 --fuzz 10 < $0
+ ;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+--- gcc/config/arm/linux-elf.h.orig 2005-03-09 01:06:55.000000000 +0100
++++ gcc/config/arm/linux-elf.h 2005-04-10 17:01:09.000000000 +0200
+@@ -31,19 +31,33 @@
+ /* Do not assume anything about header files. */
+ #define NO_IMPLICIT_EXTERN_C
+
++/*
++ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
++ * (big endian) configurations.
++ */
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
++#define TARGET_ENDIAN_OPTION "mbig-endian"
++#define TARGET_LINKER_EMULATION "armelfb_linux"
++#else
++#define TARGET_ENDIAN_DEFAULT 0
++#define TARGET_ENDIAN_OPTION "mlittle-endian"
++#define TARGET_LINKER_EMULATION "armelf_linux"
++#endif
++
+ #undef TARGET_DEFAULT_FLOAT_ABI
+ #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
+
+ #undef TARGET_DEFAULT
+-#define TARGET_DEFAULT (0)
++#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
+
+ #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
+
+-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
++#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
+
+ #undef MULTILIB_DEFAULTS
+ #define MULTILIB_DEFAULTS \
+- { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
++ { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
+
+ /* The GNU C++ standard library requires that these macros be defined. */
+ #undef CPLUSPLUS_CPP_SPEC
+@@ -90,7 +104,7 @@
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ -X \
+- %{mbig-endian:-EB}" \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
+ SUBTARGET_EXTRA_LINK_SPEC
+
+ #define TARGET_OS_CPP_BUILTINS() \
+--- gcc/config.gcc.orig 2005-04-10 16:58:06.000000000 +0200
++++ gcc/config.gcc 2005-04-10 17:01:09.000000000 +0200
+@@ -660,6 +660,11 @@
+ ;;
+ arm*-*-linux*) # ARM GNU/Linux with ELF
+ tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
++ case $target in
++ arm*b-*)
++ tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
++ ;;
++ esac
+ tmake_file="${tmake_file} arm/t-arm arm/t-linux"
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
+ gnu_ld=yes
--- gcc-4.0-4.0.1/debian/control.m4.orig 2005-09-25 00:30:44.000000000 +0000
+++ gcc-4.0-4.0.1/debian/control.m4 2005-09-25 00:30:50.000000000 +0000
@@ -849,7 +849,7 @@
ifdef(`TARGET',`',`dnl
ifenabled(`libs',`
Package: gcc`'PV-soft-float
-Architecture: arm
+Architecture: arm armeb
Priority: PRI(optional)
Depends: gcc`'PV-base (= ${gcc:Version}), ifenabled(`cdev',`gcc`'PV (= ${gcc:Version}),') ${shlibs:Depends}
Replaces: gcc-soft-float-ss
Reply to: