Add basic support for the Blackfin architecture

For uClibc, the name of the Blackfin architecture is 'bfin'. Actually,
the naming of the architecture is quite messy: for toolchain tuples
and uClibc, it's bfin, but for the kernel, it's blackfin. We've
arbitraly choosen to name it "blackfin" in Crosstool-NG.

Add Blackfin-related uClibc patch to fix a build failure related to
fork() being used in unistd/daemon.c.

Yann E. MORIN:
Apply the patch to the kernel/linux build script to use 'linux'
in the noMMU tuples. See:
  http://sourceware.org/ml/crossgcc/2010-04/msg00010.html
This commit is contained in:
Thomas Petazzoni 2010-04-07 09:18:20 +02:00
parent 55ba3f6378
commit 24e4d092a5
5 changed files with 70 additions and 6 deletions

12
config/arch/blackfin.in Normal file
View File

@ -0,0 +1,12 @@
# Blackfin specific configuration file
config ARCH_blackfin
select ARCH_SUPPORTS_32
select ARCH_DEFAULT_32
select ARCH_DEFAULT_LE
select ARCH_SUPPORT_ARCH
select ARCH_SUPPORT_CPU
select ARCH_SUPPORT_TUNE
select ARCH_SUPPORT_FPU
help
The Blackfin architecture

View File

@ -0,0 +1,32 @@
From: Jie Zhang <jie.zhang@analog.com>
Date: Mon, 1 Jun 2009 07:25:42 +0000 (+0000)
Subject: Backport UCLIBC_HAS_STUBS config option from the upstream. This option makes uClibc...
X-Git-Url: http://blackfin.uclinux.org/git/?p=readonly-mirrors%2Ftoolchain.git;a=commitdiff_plain;h=cacea6b12bae6f6cfd08e2bbec536e9b23b342f5
Backport UCLIBC_HAS_STUBS config option from the upstream. This option makes uClibc provide fork() stub on NOMMU targets. It's default off.
git-svn-id: svn://localhost/svn/toolchain/trunk@3417 2adf4935-75e9-4407-93b2-34b21a1880a4
---
Index: uClibc-0.9.30.2/libc/unistd/daemon.c
===================================================================
--- uClibc-0.9.30.2.orig/libc/unistd/daemon.c 2010-01-13 22:22:31.000000000 +0100
+++ uClibc-0.9.30.2/libc/unistd/daemon.c 2010-04-06 22:04:11.000000000 +0200
@@ -55,7 +55,6 @@
libc_hidden_proto(dup2)
libc_hidden_proto(setsid)
libc_hidden_proto(chdir)
-libc_hidden_proto(fork)
#ifndef __ARCH_USE_MMU__
#include <sys/syscall.h>
@@ -85,6 +84,8 @@
return ret;
}
#else
+libc_hidden_proto(fork)
+
static inline pid_t fork_parent(void)
{
switch (fork()) {

View File

@ -0,0 +1,14 @@
# Compute Blackfin-specific values
CT_DoArchTupleValues() {
# The architecture part of the tuple:
CT_TARGET_ARCH="bfin"
# gcc ./configure flags
CT_ARCH_WITH_ARCH=
CT_ARCH_WITH_ABI=
CT_ARCH_WITH_CPU=
CT_ARCH_WITH_TUNE=
CT_ARCH_WITH_FPU=
CT_ARCH_WITH_FLOAT=
}

View File

@ -6,7 +6,12 @@ CT_DoKernelTupleValues() {
if [ "${CT_ARCH_USE_MMU}" = "y" ]; then
CT_TARGET_KERNEL="linux"
else
CT_TARGET_KERNEL="uclinux"
# Sometime, noMMU linux targets have a -uclinux tuple, while
# sometime it's -linux. We currently have only one noMMU linux
# target, and it uses -linux, so let's just use that. Time
# to fix that later...
# CT_TARGET_KERNEL="uclinux"
CT_TARGET_KERNEL="linux"
fi
}

View File

@ -190,11 +190,12 @@ mungeuClibcConfig() {
# Hack our target in the config file.
case "${CT_ARCH}:${CT_ARCH_BITNESS}" in
x86:32) arch=i386;;
x86:64) arch=x86_64;;
sh:32) arch="sh";;
sh:64) arch="sh64";;
*) arch="${CT_ARCH}";;
x86:32) arch=i386;;
x86:64) arch=x86_64;;
sh:32) arch="sh";;
sh:64) arch="sh64";;
blackfin:32) arch="bfin";;
*) arch="${CT_ARCH}";;
esac
# Also remove stripping: its the responsibility of the
# firmware builder to strip or not.