diff options
Diffstat (limited to 'gcc-4.9/gcc/config/c6x/uclinux-elf.h')
-rw-r--r-- | gcc-4.9/gcc/config/c6x/uclinux-elf.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/config/c6x/uclinux-elf.h b/gcc-4.9/gcc/config/c6x/uclinux-elf.h new file mode 100644 index 000000000..3f3964ba7 --- /dev/null +++ b/gcc-4.9/gcc/config/c6x/uclinux-elf.h @@ -0,0 +1,63 @@ +/* Definitions for TI C6X running ucLinux using ELF + Copyright (C) 2010-2014 Free Software Foundation, Inc. + Contributed by Andrew Jenner <andrew@codesourcery.com> + Contributed by Bernd Schmidt <bernds@codesourcery.com> + + 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 \ + { \ + builtin_define ("__uClinux__"); \ + builtin_define_std ("linux"); \ + builtin_define_std ("unix"); \ + builtin_assert ("system=linux"); \ + builtin_assert ("system=unix"); \ + builtin_assert ("system=posix"); \ + } \ + while (false) + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC \ + "%{!shared:crt1%O%s} crti%O%s %{shared|pie:crtbeginS.o%s;:crtbegin.o%s}" + +#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" + +#undef LINK_SPEC +#define LINK_SPEC ENDIAN_LINK_SPEC \ + "%{shared} %{fpie|fPIE:-pie} \ + %{!shared: %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker " UCLIBC_DYNAMIC_LINKER "}} \ + %{static}}" + +#undef DRIVER_SELF_SPECS +#define DRIVER_SELF_SPECS "%{!mno-dsbt:-mdsbt}" + +/* Clear the instruction cache from `beg' to `end'. This makes an + inline system call to SYS_cacheflush. */ +#undef CLEAR_INSN_CACHE +#define CLEAR_INSN_CACHE(BEG, END) \ +{ \ + register unsigned long _beg __asm ("A4") = (unsigned long) (BEG); \ + register unsigned long _end __asm ("B4") = (unsigned long) (END); \ + register unsigned long _scno __asm ("B0") = 244; \ + __asm __volatile ("swe ; sys_cache_sync" \ + : "=a" (_beg) \ + : "0" (_beg), "b" (_end), "b" (_scno)); \ +} |