From c15b9fb7ea698d49665b4a04b18e6f785b895a14 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Wed, 22 Oct 2008 20:50:10 +0000 Subject: Make Super-H finally compile a complete (C-only) toolchain: - new, un-tested patches - an sh4 sample to work on, and to try to reproduce later. /trunk/patches/glibc/2.7/250-sh-chop-linux-version.patch | 49 49 0 0 ++ /trunk/patches/glibc/2.7/240-sh-lowlevellock-asm.patch | 56 56 0 0 +++ /trunk/patches/glibc/2.7/270-sh-fix-procfs.patch | 11 11 0 0 + /trunk/patches/glibc/2.7/280-sh-fix-kernel-heders-location.patch | 23 23 0 0 + /trunk/patches/glibc/2.7/260-sh-syscall-error-path.patch | 26 26 0 0 + /trunk/samples/sh4-unknown-linux-gnu/crosstool.config | 311 311 0 0 ++++++++++++++ /trunk/samples/sh4-unknown-linux-gnu/reported.by | 3 3 0 0 + 7 files changed, 479 insertions(+) diff --git a/patches/glibc/2.7/240-sh-lowlevellock-asm.patch b/patches/glibc/2.7/240-sh-lowlevellock-asm.patch new file mode 100644 index 0000000..dec0390 --- /dev/null +++ b/patches/glibc/2.7/240-sh-lowlevellock-asm.patch @@ -0,0 +1,56 @@ +--- glibc-2.7/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S.orig 2007-08-03 16:44:15.000000000 +0100 ++++ glibc-2.7/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S 2008-08-19 21:08:19.000000000 +0100 +@@ -76,7 +76,7 @@ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ +- mov #FUTEX_PRIVATE_FLAG, tmp ++ mov #FUTEX_PRIVATE_FLAG, tmp ; \ + 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ + 98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ +@@ -88,7 +88,7 @@ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ +- mov #FUTEX_PRIVATE_FLAG, tmp ++ mov #FUTEX_PRIVATE_FLAG, tmp ; \ + 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ + 98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ +@@ -96,13 +96,13 @@ + mov #FUTEX_WAIT, tmp ; \ + or tmp, reg + # endif +-# define LOAD_FUTEX_WAKE(reg,tmp) \ ++# define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, tmp2 ; \ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ +- mov #FUTEX_PRIVATE_FLAG, tmp ++ mov #FUTEX_PRIVATE_FLAG, tmp ; \ + 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ + 98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ +--- glibc-2.7/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S.orig 2007-08-03 16:44:57.000000000 +0100 ++++ glibc-2.7/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S 2008-08-19 21:08:22.000000000 +0100 +@@ -42,7 +42,7 @@ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ +- mov #FUTEX_PRIVATE_FLAG, tmp ++ mov #FUTEX_PRIVATE_FLAG, tmp ; \ + 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ + 98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ +@@ -54,7 +54,7 @@ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ +- mov #FUTEX_PRIVATE_FLAG, tmp ++ mov #FUTEX_PRIVATE_FLAG, tmp ; \ + 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ + 98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ diff --git a/patches/glibc/2.7/250-sh-chop-linux-version.patch b/patches/glibc/2.7/250-sh-chop-linux-version.patch new file mode 100644 index 0000000..7d0062b --- /dev/null +++ b/patches/glibc/2.7/250-sh-chop-linux-version.patch @@ -0,0 +1,49 @@ +--- glibc-2.7/sysdeps/unix/sysv/linux/dl-osinfo.h.orig 2007-09-15 23:54:08.000000000 +0100 ++++ glibc-2.7/sysdeps/unix/sysv/linux/dl-osinfo.h 2008-08-20 09:26:26.000000000 +0100 +@@ -83,6 +83,10 @@ + int parts; + char *cp; + struct utsname uts; ++ int dotsfound = 0; ++ int versionindex = 0; ++ char *choppoint; ++ + + /* Try the uname system call. */ + if (__uname (&uts)) +@@ -102,8 +106,34 @@ + else + buf = uts.release; + ++ /* We are only interested in the first three kernel numbers, so */ ++ /* chop off anything past that: */ ++ ++ choppoint = buf; ++ while (1) ++ { ++ versionindex++; ++ if (versionindex == 63) break; ++ if (*choppoint == '.') dotsfound++; ++ choppoint++; ++ if (dotsfound == 2) ++ { ++ if (*choppoint == '0' || *choppoint == '1' ++ || *choppoint == '2' || *choppoint == '3' ++ || *choppoint == '4' || *choppoint == '5' ++ || *choppoint == '6' || *choppoint == '7' ++ || *choppoint == '8' || *choppoint == '9') ++ continue; ++ else ++ { ++ *choppoint = 0; ++ break; ++ } ++ } ++ } ++ + /* Now convert it into a number. The string consists of at most +- three parts. */ ++ three parts. Now it does, anyway. ;-) */ + version = 0; + parts = 0; + cp = buf; diff --git a/patches/glibc/2.7/260-sh-syscall-error-path.patch b/patches/glibc/2.7/260-sh-syscall-error-path.patch new file mode 100644 index 0000000..e293bbf --- /dev/null +++ b/patches/glibc/2.7/260-sh-syscall-error-path.patch @@ -0,0 +1,26 @@ +--- glibc-2.7/sysdeps/unix/sysv/linux/sh/sysdep.S.orig 2005-12-30 22:16:43.000000000 +0000 ++++ glibc-2.7/sysdeps/unix/sysv/linux/sh/sysdep.S 2008-08-19 22:33:14.000000000 +0100 +@@ -32,3 +32,13 @@ + + #define __syscall_error __syscall_error_1 + #include ++ ++ .data ++ .align 3 ++ .globl ___fpscr_values ++ .type ___fpscr_values, @object ++ .size ___fpscr_values, 8 ++___fpscr_values: ++ .long 0 ++ .long 0x80000 ++weak_alias (___fpscr_values, __fpscr_values) +--- glibc-2.7/sysdeps/unix/sysv/linux/sh/Versions.orig 2003-09-01 05:05:09.000000000 +0100 ++++ glibc-2.7/sysdeps/unix/sysv/linux/sh/Versions 2008-08-19 22:33:14.000000000 +0100 +@@ -2,6 +2,7 @@ + GLIBC_2.2 { + # functions used in other libraries + __xstat64; __fxstat64; __lxstat64; ++ __fpscr_values; + + # a* + alphasort64; diff --git a/patches/glibc/2.7/270-sh-fix-procfs.patch b/patches/glibc/2.7/270-sh-fix-procfs.patch new file mode 100644 index 0000000..f45ab5e --- /dev/null +++ b/patches/glibc/2.7/270-sh-fix-procfs.patch @@ -0,0 +1,11 @@ +--- a/sysdeps/unix/sysv/linux/sh/sys/procfs.h ++++ b/sysdeps/unix/sysv/linux/sh/sys/procfs.h +@@ -29,7 +29,6 @@ + #include + #include + #include +-#include + + __BEGIN_DECLS + + diff --git a/patches/glibc/2.7/280-sh-fix-kernel-heders-location.patch b/patches/glibc/2.7/280-sh-fix-kernel-heders-location.patch new file mode 100644 index 0000000..0c5caa5 --- /dev/null +++ b/patches/glibc/2.7/280-sh-fix-kernel-heders-location.patch @@ -0,0 +1,23 @@ +diff -durN glibc-2.7.orig/sysdeps/unix/sysv/linux/sh/sys/procfs.h glibc-2.7/sysdeps/unix/sysv/linux/sh/sys/procfs.h +--- glibc-2.7.orig/sysdeps/unix/sysv/linux/sh/sys/procfs.h 2008-10-22 21:23:32.000000000 +0200 ++++ glibc-2.7/sysdeps/unix/sysv/linux/sh/sys/procfs.h 2008-10-22 21:41:54.000000000 +0200 +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + __BEGIN_DECLS + +diff -durN glibc-2.7.orig/sysdeps/unix/sysv/linux/sh/sys/user.h glibc-2.7/sysdeps/unix/sysv/linux/sh/sys/user.h +--- glibc-2.7.orig/sysdeps/unix/sysv/linux/sh/sys/user.h 2008-10-22 21:23:32.000000000 +0200 ++++ glibc-2.7/sysdeps/unix/sysv/linux/sh/sys/user.h 2008-10-22 21:33:34.000000000 +0200 +@@ -21,8 +21,6 @@ + + #include + +-#include +- + #undef start_thread + + #endif /* sys/user.h */ diff --git a/samples/sh4-unknown-linux-gnu/crosstool.config b/samples/sh4-unknown-linux-gnu/crosstool.config new file mode 100644 index 0000000..0be3c81 --- /dev/null +++ b/samples/sh4-unknown-linux-gnu/crosstool.config @@ -0,0 +1,311 @@ +# +# Automatically generated make config: don't edit +# crosstool-NG version: 1.2.0+svn_trunk@1115 +# Wed Oct 22 22:21:15 2008 +# + +# +# Paths and misc options +# + +# +# crosstool-NG behavior +# +# CT_OBSOLETE is not set +CT_EXPERIMENTAL=y +CT_DEBUG_CT=y +# CT_DEBUG_PAUSE_STEPS is not set +CT_DEBUG_CT_SAVE_STEPS=y +CT_DEBUG_CT_SAVE_STEPS_GZIP=y + +# +# Paths +# +CT_LOCAL_TARBALLS_DIR="${HOME}/src" +CT_SAVE_TARBALLS=y +CT_WORK_DIR="${CT_TOP_DIR}/targets" +CT_PREFIX_DIR="${HOME}/x-tools/${CT_TARGET}" +CT_INSTALL_DIR="${CT_PREFIX_DIR}" +# CT_CUSTOM_PATCH is not set +CT_REMOVE_DOCS=y +CT_INSTALL_DIR_RO=y + +# +# Downloading +# +# CT_FORCE_DOWNLOAD is not set +# CT_USE_PROXY is not set +CT_PROXY_TYPE="none" +# CT_USE_LAN_MIRROR is not set +CT_CONNECT_TIMEOUT=10 +# CT_ONLY_DOWNLOAD is not set + +# +# Extracting +# +# CT_FORCE_EXTRACT is not set +CT_OVERIDE_CONFIG_GUESS_SUB=y +# CT_ONLY_EXTRACT is not set + +# +# Build behavior +# +CT_PARALLEL_JOBS=1 +CT_LOAD=0 +CT_NICE=0 +CT_USE_PIPES=y +# CT_CONFIG_SHELL_ASH is not set + +# +# Logging +# +# CT_LOG_ERROR is not set +# CT_LOG_WARN is not set +# CT_LOG_INFO is not set +CT_LOG_EXTRA=y +# CT_LOG_DEBUG is not set +# CT_LOG_ALL is not set +CT_LOG_LEVEL_MAX="EXTRA" +# CT_LOG_SEE_TOOLS_WARN is not set +CT_LOG_PROGRESS_BAR=y +CT_LOG_TO_FILE=y +CT_LOG_FILE_COMPRESS=y + +# +# Target options +# +CT_ARCH="sh" +# CT_ARCH_SUPPORT_ARCH is not set +# CT_ARCH_SUPPORT_ABI is not set +# CT_ARCH_SUPPORT_CPU is not set +# CT_ARCH_SUPPORT_TUNE is not set +# CT_ARCH_SUPPORT_FPU is not set +CT_ARCH_SUPPORTS_BOTH_ENDIAN=y +# CT_ARCH_DEFAULT_BE is not set +CT_ARCH_DEFAULT_LE=y +# CT_ARCH_BE is not set +CT_ARCH_LE=y +CT_ARCH_FLOAT_HW=y +# CT_ARCH_FLOAT_SW is not set +CT_TARGET_CFLAGS="" +CT_TARGET_LDFLAGS="" + +# +# General target options +# +# CT_ARCH_alpha is not set +# CT_ARCH_arm is not set +# CT_ARCH_ia64 is not set +# CT_ARCH_mips is not set +# CT_ARCH_powerpc is not set +CT_ARCH_sh=y +# CT_ARCH_x86 is not set +# CT_ARCH_x86_64 is not set +# CT_ARCH_SH_SH3 is not set +CT_ARCH_SH_SH4=y +# CT_ARCH_SH_SH4A is not set +CT_ARCH_SH_VARIANT="sh4" + +# +# Target optimisations +# + +# +# Toolchain options +# + +# +# General toolchain options +# +CT_USE_SYSROOT=y +CT_SHARED_LIBS=y +CT_TARGET_VENDOR="" +CT_TARGET_ALIAS_SED_EXPR="" +CT_TARGET_ALIAS="" + +# +# Toolchain type +# +# CT_NATIVE is not set +CT_CROSS=y +# CT_CROSS_NATIVE is not set +# CT_CANADIAN is not set +CT_TOOLCHAIN_TYPE="cross" +CT_BUILD="" +CT_CC_NATIVE="gcc" + +# +# Operating System +# +# CT_BARE_METAL is not set +CT_KERNEL="linux" +CT_KERNEL_VERSION="2.6.26.6" +# CT_KERNEL_bare_metal is not set +CT_KERNEL_linux=y +CT_KERNEL_LINUX_INSTALL=y +# CT_KERNEL_LINUX_INSTALL_CHECK is not set +# CT_KERNEL_V_2_6_18_8 is not set +# CT_KERNEL_V_2_6_19_7 is not set +# CT_KERNEL_V_2_6_20_21 is not set +# CT_KERNEL_V_2_6_21_7 is not set +# CT_KERNEL_V_2_6_22_19 is not set +# CT_KERNEL_V_2_6_23_17 is not set +# CT_KERNEL_V_2_6_24_7 is not set +# CT_KERNEL_V_2_6_25_18 is not set +# CT_KERNEL_V_2_6_26 is not set +# CT_KERNEL_V_2_6_26_1 is not set +# CT_KERNEL_V_2_6_26_2 is not set +# CT_KERNEL_V_2_6_26_3 is not set +# CT_KERNEL_V_2_6_26_4 is not set +# CT_KERNEL_V_2_6_26_5 is not set +CT_KERNEL_V_2_6_26_6=y +# CT_KERNEL_V_2_6_27 is not set +# CT_KERNEL_V_2_6_27_1 is not set +# CT_KERNEL_V_2_6_27_2 is not set +CT_KERNEL_LINUX_VERBOSITY_0=y +# CT_KERNEL_LINUX_VERBOSITY_1 is not set +# CT_KERNEL_LINUX_VERBOSITY_2 is not set +CT_KERNEL_LINUX_VERBOSE_LEVEL=0 +# CT_KERNEL_LINUX_USE_CUSTOM_DIR is not set + +# +# GMP and MPFR +# +CT_GMP_MPFR=y +# CT_GMP_MPFR_TARGET is not set +# CT_GMP_V_4_2_2 is not set +CT_GMP_V_4_2_4=y +CT_GMP_VERSION="4.2.4" +# CT_GMP_CHECK is not set +# CT_MPFR_V_2_3_1 is not set +CT_MPFR_V_2_3_2=y +CT_MPFR_VERSION="2.3.2" +# CT_MPFR_CHECK is not set + +# +# binutils +# +CT_BINUTILS_VERSION="2.18" +# CT_BINUTILS_V_2_14 is not set +# CT_BINUTILS_V_2_15 is not set +# CT_BINUTILS_V_2_16_1 is not set +# CT_BINUTILS_V_2_17 is not set +CT_BINUTILS_V_2_18=y +# CT_BINUTILS_V_2_18_50_0_4 is not set +# CT_BINUTILS_V_2_18_50_0_6 is not set +# CT_BINUTILS_V_2_18_50_0_7 is not set +# CT_BINUTILS_V_2_18_50_0_8 is not set +# CT_BINUTILS_V_2_18_50_0_9 is not set +# CT_BINUTILS_V_2_18_90 is not set +# CT_BINUTILS_V_2_18_91 is not set +# CT_BINUTILS_V_2_18_92 is not set +# CT_BINUTILS_V_2_18_93 is not set +# CT_BINUTILS_V_2_19_50_0_1 is not set +CT_BINUTILS_EXTRA_CONFIG="" +# CT_BINUTILS_FOR_TARGET is not set + +# +# C compiler +# +CT_CC="gcc" +CT_CC_VERSION="4.2.4" +CT_CC_gcc=y +# CT_CC_V_2_95_3 is not set +# CT_CC_V_3_2_3 is not set +# CT_CC_V_3_3_6 is not set +# CT_CC_V_3_4_6 is not set +# CT_CC_V_4_0_0 is not set +# CT_CC_V_4_0_1 is not set +# CT_CC_V_4_0_2 is not set +# CT_CC_V_4_0_3 is not set +# CT_CC_V_4_0_4 is not set +# CT_CC_V_4_1_0 is not set +# CT_CC_V_4_1_1 is not set +# CT_CC_V_4_1_2 is not set +# CT_CC_V_4_2_0 is not set +# CT_CC_V_4_2_1 is not set +# CT_CC_V_4_2_2 is not set +# CT_CC_V_4_2_3 is not set +CT_CC_V_4_2_4=y +# CT_CC_V_4_3_0 is not set +# CT_CC_V_4_3_1 is not set +# CT_CC_V_4_3_2 is not set +# CT_CC_GCC_4_3_or_later is not set +CT_CC_CXA_ATEXIT=y +CT_CC_SJLJ_EXCEPTIONS_CONFIGURE=y +# CT_CC_SJLJ_EXCEPTIONS_USE is not set +# CT_CC_SJLJ_EXCEPTIONS_DONT_USE is not set +CT_CC_CORE_EXTRA_CONFIG="" +CT_CC_EXTRA_CONFIG="" +CT_CC_SUPPORT_CXX=y +CT_CC_SUPPORT_FORTRAN=y +CT_CC_SUPPORT_JAVA=y +CT_CC_SUPPORT_ADA=y +CT_CC_SUPPORT_OBJC=y +CT_CC_SUPPORT_OBJCXX=y + +# +# Additional supported languages: +# +# CT_CC_LANG_CXX is not set +# CT_CC_LANG_FORTRAN is not set +# CT_CC_LANG_JAVA is not set +# CT_CC_LANG_ADA is not set +# CT_CC_LANG_OBJC is not set +# CT_CC_LANG_OBJCXX is not set +CT_CC_LANG_OTHERS="" +CT_LIBC="glibc" + +# +# C-library +# +CT_LIBC_VERSION="2.7" +# CT_LIBC_eglibc is not set +CT_LIBC_glibc=y +# CT_LIBC_uClibc is not set +# CT_LIBC_V_2_3_6 is not set +# CT_LIBC_V_2_5 is not set +# CT_LIBC_V_2_5_1 is not set +# CT_LIBC_V_2_6 is not set +# CT_LIBC_V_2_6_1 is not set +CT_LIBC_V_2_7=y +# CT_LIBC_V_LATEST is not set +# CT_LIBC_V_date is not set + +# +# Common C library options +# +CT_LIBC_SUPPORT_NPTL=y +CT_LIBC_SUPPORT_LINUXTHREADS=y +CT_THREADS="nptl" +CT_THREADS_NPTL=y +# CT_THREADS_LINUXTHREADS is not set +# CT_THREADS_NONE is not set + +# +# glibc/eglibc common options +# +CT_LIBC_GLIBC_EXTRA_CONFIG="" +CT_LIBC_GLIBC_EXTRA_CFLAGS="" +CT_LIBC_EXTRA_CC_ARGS="" +# CT_LIBC_GLIBC_USE_PORTS is not set +CT_LIBC_ADDONS_LIST="" +# CT_LIBC_GLIBC_KERNEL_VERSION_NONE is not set +CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS=y +# CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN is not set +CT_LIBC_GLIBC_MIN_KERNEL="2.6.26.6" + +# +# Tools facilities +# +# CT_TOOL_libelf is not set +# CT_TOOL_sstrip is not set + +# +# Debug facilities +# +# CT_DEBUG_dmalloc is not set +# CT_DEBUG_duma is not set +# CT_DEBUG_gdb is not set +# CT_DEBUG_ltrace is not set +# CT_DEBUG_strace is not set diff --git a/samples/sh4-unknown-linux-gnu/reported.by b/samples/sh4-unknown-linux-gnu/reported.by new file mode 100644 index 0000000..4e2eae7 --- /dev/null +++ b/samples/sh4-unknown-linux-gnu/reported.by @@ -0,0 +1,3 @@ +reporter_name="YEM" +reporter_url="http://ymorin.is-a-geek.org/" +reporter_comment="EXPERIMENTAL Super-H sh4 sample." -- cgit v0.10.2-6-g49f6