| From 70c2cb98fb129b4766b5da0f945dc41fd568c77a Mon Sep 17 00:00:00 2001 |
| From: Max Filippov <jcmvbkbc@gmail.com> |
| Date: Sat, 22 Aug 2015 08:44:26 +0300 |
| Subject: [PATCH] xtensa: add uclinux support |
| |
| 2015-10-03 Max Filippov <jcmvbkbc@gmail.com> |
| gcc/ |
| * config.gcc (xtensa*-*-uclinux*): New configuration. |
| * config/xtensa/uclinux.h: New file. |
| * config/xtensa/uclinux.opt: New file. |
| |
| libgcc/ |
| * config.host (xtensa*-*-uclinux*): New configuration. |
| |
| Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> |
| --- |
| Backported from: r228450 |
| |
| gcc/config.gcc | 5 ++++ |
| gcc/config/xtensa/uclinux.h | 69 +++++++++++++++++++++++++++++++++++++++++++ |
| gcc/config/xtensa/uclinux.opt | 32 ++++++++++++++++++++ |
| libgcc/config.host | 5 ++++ |
| 4 files changed, 111 insertions(+) |
| create mode 100644 gcc/config/xtensa/uclinux.h |
| create mode 100644 gcc/config/xtensa/uclinux.opt |
| |
| Index: b/gcc/config.gcc |
| =================================================================== |
| --- a/gcc/config.gcc |
| +++ b/gcc/config.gcc |
| @@ -2871,6 +2871,11 @@ |
| tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h xtensa/linux.h" |
| tmake_file="${tmake_file} xtensa/t-xtensa" |
| ;; |
| +xtensa*-*-uclinux*) |
| + tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h xtensa/uclinux.h" |
| + tmake_file="${tmake_file} xtensa/t-xtensa" |
| + extra_options="${extra_options} xtensa/uclinux.opt" |
| + ;; |
| am33_2.0-*-linux*) |
| tm_file="mn10300/mn10300.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h mn10300/linux.h" |
| gas=yes gnu_ld=yes |
| Index: b/gcc/config/xtensa/uclinux.h |
| =================================================================== |
| --- /dev/null |
| +++ b/gcc/config/xtensa/uclinux.h |
| @@ -0,0 +1,69 @@ |
| +/* Xtensa uClinux configuration. |
| + Derived from the configuration for GCC for Intel i386 running Linux. |
| + Copyright (C) 2001-2015 Free Software Foundation, Inc. |
| + |
| +This file is part of GCC. |
| + |
| +GCC is free software; you can redistribute it and/or modify it under |
| +the terms of the GNU General Public License as published by the Free |
| +Software Foundation; either version 3, or (at your option) any later |
| +version. |
| + |
| +GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
| +WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| +for more details. |
| + |
| +You should have received a copy of the GNU General Public License |
| +along with GCC; see the file COPYING3. If not see |
| +<http://www.gnu.org/licenses/>. */ |
| + |
| +#undef TARGET_OS_CPP_BUILTINS |
| +#define TARGET_OS_CPP_BUILTINS() \ |
| + do \ |
| + { \ |
| + GNU_USER_TARGET_OS_CPP_BUILTINS (); \ |
| + builtin_define ("__uClinux__"); \ |
| + } \ |
| + while (0) |
| + |
| +#undef SUBTARGET_CPP_SPEC |
| +#define SUBTARGET_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}" |
| + |
| +#undef SIZE_TYPE |
| +#define SIZE_TYPE "unsigned int" |
| + |
| +#undef PTRDIFF_TYPE |
| +#define PTRDIFF_TYPE "int" |
| + |
| +#undef WCHAR_TYPE |
| +#define WCHAR_TYPE "long int" |
| + |
| +#undef WCHAR_TYPE_SIZE |
| +#define WCHAR_TYPE_SIZE 32 |
| + |
| +#undef ASM_SPEC |
| +#define ASM_SPEC \ |
| + "%{mtext-section-literals:--text-section-literals} \ |
| + %{mno-text-section-literals:--no-text-section-literals} \ |
| + %{mtarget-align:--target-align} \ |
| + %{mno-target-align:--no-target-align} \ |
| + %{mlongcalls:--longcalls} \ |
| + %{mno-longcalls:--no-longcalls} \ |
| + %{mauto-litpools:--auto-litpools} \ |
| + %{mno-auto-litpools:--no-auto-litpools}" |
| + |
| +#undef LINK_SPEC |
| +#define LINK_SPEC "%{!no-elf2flt:%{!elf2flt*:-elf2flt}}" |
| + |
| +#undef LOCAL_LABEL_PREFIX |
| +#define LOCAL_LABEL_PREFIX "." |
| + |
| +/* Always enable "-fpic" for Xtensa Linux. */ |
| +#define XTENSA_ALWAYS_PIC 1 |
| + |
| +#undef TARGET_LIBC_HAS_FUNCTION |
| +#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function |
| + |
| +#undef DBX_REGISTER_NUMBER |
| + |
| Index: b/gcc/config/xtensa/uclinux.opt |
| =================================================================== |
| --- /dev/null |
| +++ b/gcc/config/xtensa/uclinux.opt |
| @@ -0,0 +1,32 @@ |
| +; Xtensa uClinux options. |
| + |
| +; Copyright (C) 2015 Free Software Foundation, Inc. |
| +; |
| +; This file is part of GCC. |
| +; |
| +; GCC is free software; you can redistribute it and/or modify it under |
| +; the terms of the GNU General Public License as published by the Free |
| +; Software Foundation; either version 3, or (at your option) any later |
| +; version. |
| +; |
| +; GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
| +; WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| +; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| +; for more details. |
| +; |
| +; You should have received a copy of the GNU General Public License |
| +; along with GCC; see the file COPYING3. If not see |
| +; <http://www.gnu.org/licenses/>. |
| + |
| +; See the GCC internals manual (options.texi) for a description of |
| +; this file's format. |
| + |
| +; Please try to keep this file in ASCII collating order. |
| + |
| +elf2flt |
| +Driver |
| + |
| +elf2flt= |
| +Driver JoinedOrMissing |
| + |
| +; This comment is to ensure we retain the blank line above. |
| Index: b/libgcc/config.host |
| =================================================================== |
| --- a/libgcc/config.host |
| +++ b/libgcc/config.host |
| @@ -1213,6 +1213,11 @@ |
| tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc" |
| md_unwind_header=xtensa/linux-unwind.h |
| ;; |
| +xtensa*-*-uclinux*) |
| + tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc" |
| + md_unwind_header=xtensa/linux-unwind.h |
| + extra_parts="$extra_parts crtbeginS.o crtbeginT.o crtendS.o" |
| + ;; |
| am33_2.0-*-linux*) |
| # Don't need crtbeginT.o from *-*-linux* default. |
| extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" |