From dd9e2b9602a99c0d0b3f3b50829ca87905bc9812 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN\"" Date: Sun, 16 Sep 2007 17:59:18 +0000 Subject: ARM EABI is now working for little endian ARM targets. Big endian is still missing, though... diff --git a/samples/arm-unknown-linux-uclibcgnueabi/crosstool.config b/samples/arm-unknown-linux-uclibcgnueabi/crosstool.config new file mode 100644 index 0000000..466e1c1 --- /dev/null +++ b/samples/arm-unknown-linux-uclibcgnueabi/crosstool.config @@ -0,0 +1,252 @@ +# +# Automatically generated make config: don't edit +# crosstool-NG version: 0.3.1+svn +# Sun Sep 16 17:43:02 2007 +# +# CT_FOOBAR is not set + +# +# Paths and misc options +# + +# +# crosstool-NG behavior +# +# CT_OBSOLETE is not set +CT_EXPERIMENTAL=y +# CT_BROKEN is not set +CT_DEBUG_CT=y +# CT_DEBUG_CT_PAUSE_STEPS is not set +CT_DEBUG_CT_SAVE_STEPS=y +CT_DEBUG_CT_SAVE_STEPS_GZIP=y + +# +# Build behavior +# +CT_PARALLEL_JOBS=1 +CT_LOAD=0 +CT_NICE=0 +CT_USE_PIPES=y + +# +# Paths +# +CT_LOCAL_TARBALLS_DIR="${HOME}/dev/src" +CT_SAVE_TARBALLS=y +CT_PREFIX_DIR="/opt/x-tools/${CT_TARGET}" +CT_INSTALL_DIR="${CT_PREFIX_DIR}" +# CT_CUSTOM_PATCH is not set +CT_REMOVE_DOCS=y +# CT_INSTALL_DIR_RO is not set + +# +# Downloading +# +# CT_FORCE_DOWNLOAD is not set +# CT_ONLY_DOWNLOAD is not set + +# +# Extracting +# +# CT_FORCE_EXTRACT is not set +# CT_ONLY_EXTRACT 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 +# + +# +# General target options +# +CT_ARCH="arm" +CT_ARCH_ARM=y +# CT_ARCH_IA64 is not set +# CT_ARCH_MIPS is not set +# CT_ARCH_x86 is not set +# CT_ARCH_x86_64 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 + +# +# ARM specific options +# +CT_ARCH_ARM_EABI=y + +# +# Target optimisations +# +CT_ARCH_ARCH="armv5te" +CT_ARCH_ABI="" +CT_ARCH_CPU="xscale" +CT_ARCH_TUNE="xscale" +CT_ARCH_FPU="" +# CT_ARCH_FLOAT_HW is not set +CT_ARCH_FLOAT_SW=y +CT_TARGET_CFLAGS="" + +# +# Toolchain options +# + +# +# General toolchain options +# +CT_USE_SYSROOT=y +CT_SHARED_LIBS=y +# CT_THREADS_NPTL is not set +CT_THREADS_LINUXTHREADS=y +# CT_THREADS_NONE is not set +CT_THREADS="linuxthreads" +CT_TARGET_VENDOR="unknown" +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" + +# +# Kernel +# +CT_KERNEL_LINUX=y +CT_KERNEL_VERSION="2.6.22.6" +CT_KERNEL_LINUX_HEADERS_INSTALL=y +# CT_KERNEL_LINUX_HEADERS_SANITISED is not set +# CT_KERNEL_LINUX_HEADERS_COPY is not set +# CT_KERNEL_LINUX_HEADERS_USE_CUSTOM_DIR is not set +CT_KERNEL="linux" +CT_KERNEL_VERSION_SEE_EXTRAVERSION=y +# CT_KERNEL_INSTALL_V_2_6_18_8 is not set +# CT_KERNEL_INSTALL_V_2_6_19_7 is not set +# CT_KERNEL_INSTALL_V_2_6_20_15 is not set +# CT_KERNEL_INSTALL_V_2_6_21_7 is not set +# CT_KERNEL_INSTALL_V_2_6_22 is not set +# CT_KERNEL_INSTALL_V_2_6_22_1 is not set +# CT_KERNEL_INSTALL_V_2_6_22_2 is not set +# CT_KERNEL_INSTALL_V_2_6_22_3 is not set +# CT_KERNEL_INSTALL_V_2_6_22_4 is not set +# CT_KERNEL_INSTALL_V_2_6_22_5 is not set +CT_KERNEL_INSTALL_V_2_6_22_6=y +# CT_KERNEL_LINUX_HEADERS_INSTALL_CHECK 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_NEEDS_CONFIG 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_17_50_0_10 is not set +# CT_BINUTILS_V_2_17_50_0_15 is not set +# CT_BINUTILS_V_2_17_50_0_17 is not set +# CT_BINUTILS_V_2_17_50_0_18 is not set +CT_BINUTILS_V_2_18=y +CT_BINUTILS_EXTRA_CONFIG="" + +# +# C compiler +# +CT_CC_GCC=y +CT_CC_VERSION="4.2.1" +CT_CC="gcc" +# 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=y +CT_CC_CXA_ATEXIT=y +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 + +# +# Additionnal supported languages: +# +CT_CC_LANG_CXX=y +# 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="" + +# +# C-library +# +# CT_LIBC_GLIBC is not set +CT_LIBC_UCLIBC=y +CT_LIBC_VERSION="0.9.29" +CT_LIBC="uClibc" +# CT_LIBC_SUPPORT_NPTL is not set +CT_LIBC_SUPPORT_LINUXTHREADS=y +# CT_LIBC_V_snapshot is not set +# CT_LIBC_V_specific_date is not set +# CT_LIBC_V_0_9_28 is not set +# CT_LIBC_V_0_9_28_1 is not set +# CT_LIBC_V_0_9_28_2 is not set +# CT_LIBC_V_0_9_28_3 is not set +CT_LIBC_V_0_9_29=y +CT_LIBC_UCLIBC_DEBUG_LEVEL_0=y +# CT_LIBC_UCLIBC_DEBUG_LEVEL_1 is not set +# CT_LIBC_UCLIBC_DEBUG_LEVEL_2 is not set +CT_LIBC_UCLIBC_DEBUG_LEVEL=0 +CT_LIBC_UCLIBC_CONFIG_FILE="${CT_LIB_DIR}/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config" +# CT_LIBC_UCLIBC_LOCALES is not set + +# +# Tools facilities +# +# CT_SSTRIP is not set + +# +# Debug facilities +# +# CT_DMALLOC is not set +# CT_DUMA is not set +# CT_GDB is not set +# CT_STRACE is not set diff --git a/samples/arm-unknown-linux-uclibcgnueabi/uClibc-0.9.29.config b/samples/arm-unknown-linux-uclibcgnueabi/uClibc-0.9.29.config new file mode 100644 index 0000000..e230165 --- /dev/null +++ b/samples/arm-unknown-linux-uclibcgnueabi/uClibc-0.9.29.config @@ -0,0 +1,214 @@ +# +# Automatically generated make config: don't edit +# Sun Sep 16 10:35:03 2007 +# +# TARGET_alpha is not set +TARGET_arm=y +# TARGET_bfin is not set +# TARGET_cris is not set +# TARGET_e1 is not set +# TARGET_frv is not set +# TARGET_h8300 is not set +# TARGET_hppa is not set +# TARGET_i386 is not set +# TARGET_i960 is not set +# TARGET_ia64 is not set +# TARGET_m68k is not set +# TARGET_microblaze is not set +# TARGET_mips is not set +# TARGET_nios is not set +# TARGET_nios2 is not set +# TARGET_powerpc is not set +# TARGET_sh is not set +# TARGET_sh64 is not set +# TARGET_sparc is not set +# TARGET_v850 is not set +# TARGET_vax is not set +# TARGET_x86_64 is not set + +# +# Target Architecture Features and Options +# +TARGET_ARCH="arm" +FORCE_OPTIONS_FOR_ARCH=y +# CONFIG_ARM_OABI is not set +CONFIG_ARM_EABI=y +USE_BX=y +# CONFIG_GENERIC_ARM is not set +# CONFIG_ARM610 is not set +# CONFIG_ARM710 is not set +# CONFIG_ARM7TDMI is not set +# CONFIG_ARM720T is not set +# CONFIG_ARM920T is not set +# CONFIG_ARM922T is not set +# CONFIG_ARM926T is not set +# CONFIG_ARM10T is not set +# CONFIG_ARM1136JF_S is not set +# CONFIG_ARM1176JZ_S is not set +# CONFIG_ARM1176JZF_S is not set +# CONFIG_ARM_SA110 is not set +# CONFIG_ARM_SA1100 is not set +CONFIG_ARM_XSCALE=y +# CONFIG_ARM_IWMMXT is not set +TARGET_SUBARCH="" + +# +# Using ELF file format +# +ARCH_ANY_ENDIAN=y +ARCH_BIG_ENDIAN=y +ARCH_WANTS_BIG_ENDIAN=y +# ARCH_WANTS_LITTLE_ENDIAN is not set +ARCH_HAS_MMU=y +ARCH_USE_MMU=y +UCLIBC_HAS_FLOATS=y +# UCLIBC_HAS_FPU is not set +UCLIBC_HAS_SOFT_FLOAT=y +DO_C99_MATH=y +KERNEL_HEADERS="/opt/x-tools/armeb-unknown-linux-uclibc/armeb-unknown-linux-uclibc/sys-root/usr/include" +HAVE_DOT_CONFIG=y + +# +# General Library Settings +# +# HAVE_NO_PIC is not set +DOPIC=y +# HAVE_NO_SHARED is not set +# ARCH_HAS_NO_LDSO is not set +HAVE_SHARED=y +FORCE_SHAREABLE_TEXT_SEGMENTS=y +LDSO_LDD_SUPPORT=y +LDSO_CACHE_SUPPORT=y +# LDSO_PRELOAD_FILE_SUPPORT is not set +LDSO_BASE_FILENAME="ld.so" +UCLIBC_STATIC_LDCONFIG=y +# LDSO_RUNPATH is not set +UCLIBC_CTOR_DTOR=y +# HAS_NO_THREADS is not set +UCLIBC_HAS_THREADS=y +# PTHREADS_DEBUG_SUPPORT is not set +LINUXTHREADS_OLD=y +UCLIBC_HAS_LFS=y +# MALLOC is not set +# MALLOC_SIMPLE is not set +MALLOC_STANDARD=y +# MALLOC_GLIBC_COMPAT is not set +UCLIBC_DYNAMIC_ATEXIT=y +# COMPAT_ATEXIT is not set +# UCLIBC_SUSV3_LEGACY is not set +# UCLIBC_SUSV3_LEGACY_MACROS is not set +UCLIBC_HAS_SHADOW=y +# UCLIBC_HAS_PROGRAM_INVOCATION_NAME is not set +# UCLIBC_HAS___PROGNAME is not set +UNIX98PTY_ONLY=y +ASSUME_DEVPTS=y +UCLIBC_HAS_TM_EXTENSIONS=y +# UCLIBC_HAS_TZ_CACHING is not set +UCLIBC_HAS_TZ_FILE=y +# UCLIBC_HAS_TZ_FILE_READ_MANY is not set +UCLIBC_TZ_FILE_PATH="/etc/TZ" + +# +# Advanced Library Settings +# +UCLIBC_PWD_BUFFER_SIZE=256 +UCLIBC_GRP_BUFFER_SIZE=256 + +# +# Networking Support +# +# UCLIBC_HAS_IPV6 is not set +UCLIBC_HAS_RPC=y +UCLIBC_HAS_FULL_RPC=y +UCLIBC_HAS_REENTRANT_RPC=y +UCLIBC_USE_NETLINK=y +# UCLIBC_HAS_BSD_RES_CLOSE is not set + +# +# String and Stdio Support +# +UCLIBC_HAS_STRING_GENERIC_OPT=y +UCLIBC_HAS_STRING_ARCH_OPT=y +UCLIBC_HAS_CTYPE_TABLES=y +UCLIBC_HAS_CTYPE_SIGNED=y +# UCLIBC_HAS_CTYPE_UNSAFE is not set +# UCLIBC_HAS_CTYPE_CHECKED is not set +UCLIBC_HAS_CTYPE_ENFORCED=y +# UCLIBC_HAS_WCHAR is not set +# UCLIBC_HAS_LOCALE is not set +UCLIBC_HAS_HEXADECIMAL_FLOATS=y +# UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set +# USE_OLD_VFPRINTF is not set +UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 +# UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set +# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set +# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set +# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set +UCLIBC_HAS_STDIO_BUFSIZ_4096=y +# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set +UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set +# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set +UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT=y +UCLIBC_HAS_STDIO_GETC_MACRO=y +UCLIBC_HAS_STDIO_PUTC_MACRO=y +UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y +UCLIBC_HAS_FOPEN_LARGEFILE_MODE=y +UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y +UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y +UCLIBC_HAS_PRINTF_M_SPEC=y +UCLIBC_HAS_ERRNO_MESSAGES=y +# UCLIBC_HAS_SYS_ERRLIST is not set +UCLIBC_HAS_SIGNUM_MESSAGES=y +# UCLIBC_HAS_SYS_SIGLIST is not set +UCLIBC_HAS_GNU_GETOPT=y +# UCLIBC_HAS_GNU_GETSUBOPT is not set + +# +# Big and Tall +# +UCLIBC_HAS_REGEX=y +UCLIBC_HAS_REGEX_OLD=y +UCLIBC_HAS_FNMATCH=y +UCLIBC_HAS_FNMATCH_OLD=y +UCLIBC_HAS_WORDEXP=y +UCLIBC_HAS_FTW=y +UCLIBC_HAS_GLOB=y +# UCLIBC_HAS_GNU_GLOB is not set + +# +# Library Installation Options +# +SHARED_LIB_LOADER_PREFIX="/lib/" +RUNTIME_PREFIX="/" +DEVEL_PREFIX="/usr/" + +# +# Security options +# +UCLIBC_BUILD_PIE=y +UCLIBC_HAS_ARC4RANDOM=y +# HAVE_NO_SSP is not set +# UCLIBC_HAS_SSP is not set +# UCLIBC_BUILD_RELRO is not set +# UCLIBC_BUILD_NOW is not set +UCLIBC_BUILD_NOEXECSTACK=y + +# +# uClibc development/debugging options +# +CROSS_COMPILER_PREFIX="" +UCLIBC_EXTRA_CFLAGS="" +# DODEBUG is not set +# DODEBUG_PT is not set +# DOSTRIP is not set +# DOASSERTS is not set +# SUPPORT_LD_DEBUG is not set +# SUPPORT_LD_DEBUG_EARLY is not set +# UCLIBC_MALLOC_DEBUGGING is not set +WARNINGS="-Wall -pipe" +# EXTRA_WARNINGS is not set +# DOMULTI is not set +# UCLIBC_MJN3_ONLY is not set diff --git a/scripts/build/cc_gcc.sh b/scripts/build/cc_gcc.sh index bcdef43..08f320b 100644 --- a/scripts/build/cc_gcc.sh +++ b/scripts/build/cc_gcc.sh @@ -231,7 +231,8 @@ do_cc() { # detection problem only matters for gcc-3.2.x and later, I think. # --disable-nls to work around crash bug on ppc405, but also because # embedded systems don't really need message catalogs... - CFLAGS="${CT_CFLAGS_FOR_HOST}" \ + CFLAGS="${CT_CFLAGS_FOR_HOST}" \ + TARGET_CFLAGS="${CT_TARGET_CFLAGS}" \ "${CT_SRC_DIR}/${CT_CC_FILE}/configure" \ ${CT_CANADIAN_OPT} \ --target=${CT_TARGET} --host=${CT_HOST} \ diff --git a/scripts/build/libc_uClibc.sh b/scripts/build/libc_uClibc.sh index d665a5f..af06e3c 100644 --- a/scripts/build/libc_uClibc.sh +++ b/scripts/build/libc_uClibc.sh @@ -164,6 +164,20 @@ s/^TARGET_ARCH=".*"/TARGET_ARCH="${CT_KERNEL_ARCH}"/ s/.*(DOSTRIP).*/# \\1 is not set/ ENDSED + # Ah. We may one day need architecture-specific handler here... + # Hack the ARM {E,O}ABI into the config file + if [ "${CT_ARCH_ARM_EABI}" = "y" ]; then + cat >>"${munge_file}" <<-ENDSED +s/.*(CONFIG_ARM_OABI).*/# \\1 is not set/ +s/.*(CONFIG_ARM_EABI).*/\\1=y/ +ENDSED + else + cat >>"${munge_file}" <<-ENDSED +s/.*(CONFIG_ARM_OABI).*/\\1=y/ +s/.*(CONFIG_ARM_EABI).*/# \\1 is not set/ +ENDSED + fi + # Accomodate for old and new uClibc versions, where the # way to select between big/little endian has changed case "${CT_ARCH_BE},${CT_ARCH_LE}" in @@ -198,7 +212,7 @@ ENDSED ;; esac - # Change paths to work with crosstool + # Change paths to work with crosstool-NG # From http://www.uclibc.org/cgi-bin/viewcvs.cgi?rev=16846&view=rev # " we just want the kernel headers, not the whole kernel source ... # " so people may need to update their paths slightly diff --git a/scripts/crosstool.sh b/scripts/crosstool.sh index 0a357bc..5a12fd1 100755 --- a/scripts/crosstool.sh +++ b/scripts/crosstool.sh @@ -82,6 +82,10 @@ CT_DoBuildTargetTuple # then rescan the options file now: . "${CT_TOP_DIR}/.config" +# Second kludge: merge user-supplied target CFLAGS with architecture-provided +# target CFLAGS +CT_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_TARGET_CFLAGS}" + # Now, build up the variables from the user-configured options. CT_KERNEL_FILE="${CT_KERNEL}-${CT_KERNEL_VERSION}" CT_BINUTILS_FILE="binutils-${CT_BINUTILS_VERSION}" @@ -212,7 +216,7 @@ case "${CT_LOG_TO_FILE}" in ;; esac -# Setting up the rest of the environment only is not restarting +# Setting up the rest of the environment only if not restarting if [ -z "${CT_RESTART}" ]; then # Determine build system if not set by the user CT_Test "You did not specify the build system. That's OK, I can guess..." -z "${CT_BUILD}" diff --git a/scripts/functions b/scripts/functions index 49a28c0..7c3da99 100644 --- a/scripts/functions +++ b/scripts/functions @@ -529,12 +529,12 @@ CT_DoBuildTargetTuple() { CT_TARGET=`CT_DoConfigSub "${CT_TARGET_ARCH}-${CT_TARGET_VENDOR:-unknown}-${CT_TARGET_KERNEL}-${CT_TARGET_SYS}"` # Prepare the target CFLAGS - CT_TARGET_CFLAGS="${CT_TARGET_CFLAGS} ${CT_ARCH_ARCH_CFLAGS}" - CT_TARGET_CFLAGS="${CT_TARGET_CFLAGS} ${CT_ARCH_ABI_CFLAGS}" - CT_TARGET_CFLAGS="${CT_TARGET_CFLAGS} ${CT_ARCH_CPU_CFLAGS}" - CT_TARGET_CFLAGS="${CT_TARGET_CFLAGS} ${CT_ARCH_TUNE_CFLAGS}" - CT_TARGET_CFLAGS="${CT_TARGET_CFLAGS} ${CT_ARCH_FPU_CFLAGS}" - CT_TARGET_CFLAGS="${CT_TARGET_CFLAGS} ${CT_ARCH_FLOAT_CFLAGS}" + CT_ARCH_TARGET_CFLAGS="${CT_ARCH_ARCH_CFLAG}" + CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ABI_CFLAG}" + CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_CPU_CFLAG}" + CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_TUNE_CFLAG}" + CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_FPU_CFLAG}" + CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_FLOAT_CFLAG}" } # This function does pause the build until the user strikes "Return" -- cgit v0.10.2-6-g49f6