[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: