mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-09 23:51:18 +08:00
config.gcc (unsupported): Move obsoleted FPA-based configurations here from ...
* config.gcc (unsupported): Move obsoleted FPA-based configurations here from ... (obsolete): ... here. (arm*-*-freebsd*): Remove. (arm*-*-linux*): Only accept EABI variants. Simplify logic. (arm*-*-uclinux*): Likewise. (arm*-*-ecos-elf): Remove. (arm*-*-rtems*): Remove. (arm*-*-elf): Remove. (arm*-wince-pe*): Remove. (arm, --with-fpu): Remove support for fpa and Maverick variants. * arm/ecos-elf.h: Delete. * arm/t-strongarm-elf: Delete. * arm/rtems-elf.h: Delete. * arm/wince-pe.h: Delete. * arm/pe.c: Delete. * arm/pe.h: Delete. * arm/t-wince-pe: Delete. From-SVN: r188510
This commit is contained in:
parent
7ef58a1a45
commit
c4cc7bc1ce
@ -1,3 +1,24 @@
|
||||
2012-06-13 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* config.gcc (unsupported): Move obsoleted FPA-based configurations
|
||||
here from ...
|
||||
(obsolete): ... here.
|
||||
(arm*-*-freebsd*): Remove.
|
||||
(arm*-*-linux*): Only accept EABI variants. Simplify logic.
|
||||
(arm*-*-uclinux*): Likewise.
|
||||
(arm*-*-ecos-elf): Remove.
|
||||
(arm*-*-rtems*): Remove.
|
||||
(arm*-*-elf): Remove.
|
||||
(arm*-wince-pe*): Remove.
|
||||
(arm, --with-fpu): Remove support for fpa and Maverick variants.
|
||||
* arm/ecos-elf.h: Delete.
|
||||
* arm/t-strongarm-elf: Delete.
|
||||
* arm/rtems-elf.h: Delete.
|
||||
* arm/wince-pe.h: Delete.
|
||||
* arm/pe.c: Delete.
|
||||
* arm/pe.h: Delete.
|
||||
* arm/t-wince-pe: Delete.
|
||||
|
||||
2012-06-13 Bill Schmidt <wschmidt@linux.ibm.com>
|
||||
|
||||
PR tree-optimization/53647
|
||||
|
116
gcc/config.gcc
116
gcc/config.gcc
@ -245,18 +245,7 @@ md_file=
|
||||
|
||||
# Obsolete configurations.
|
||||
case ${target} in
|
||||
# Avoid special cases that are not obsolete
|
||||
arm*-*-*eabi* \
|
||||
)
|
||||
;;
|
||||
arm*-*-ecos-elf \
|
||||
| arm*-*-elf \
|
||||
| arm*-*-freebsd* \
|
||||
| arm*-*-linux* \
|
||||
| arm*-*-rtems* \
|
||||
| arm*-*-uclinux* \
|
||||
| arm*-wince-pe* \
|
||||
| score-* \
|
||||
score-* \
|
||||
)
|
||||
if test "x$enable_obsolete" != xyes; then
|
||||
echo "*** Configuration ${target} is obsolete." >&2
|
||||
@ -271,7 +260,18 @@ esac
|
||||
# it would otherwise be caught by a more permissive pattern. The list
|
||||
# should be in alphabetical order.
|
||||
case ${target} in
|
||||
i[34567]86-go32-* \
|
||||
# Avoid special cases that are not obsolete
|
||||
arm*-*-*eabi* \
|
||||
)
|
||||
;;
|
||||
arm*-wince-pe* \
|
||||
| arm*-*-ecos-elf \
|
||||
| arm*-*-elf \
|
||||
| arm*-*-freebsd* \
|
||||
| arm*-*-linux* \
|
||||
| arm*-*-rtems* \
|
||||
| arm*-*-uclinux* \
|
||||
| i[34567]86-go32-* \
|
||||
| i[34567]86-*-go32* \
|
||||
| m68k-*-uclinuxoldabi* \
|
||||
| mips64orion*-*-rtems* \
|
||||
@ -818,66 +818,44 @@ arm-wrs-vxworks)
|
||||
extra_options="${extra_options} arm/vxworks.opt"
|
||||
tmake_file="${tmake_file} arm/t-arm arm/t-vxworks"
|
||||
;;
|
||||
arm*-*-freebsd*)
|
||||
tm_file="dbxelf.h elfos.h ${fbsd_tm_file} arm/elf.h arm/aout.h arm/freebsd.h arm/arm.h"
|
||||
tmake_file="${tmake_file} arm/t-arm arm/t-strongarm-elf"
|
||||
;;
|
||||
arm*-*-netbsdelf*)
|
||||
tm_file="dbxelf.h elfos.h netbsd.h netbsd-elf.h arm/elf.h arm/aout.h arm/arm.h arm/netbsd-elf.h"
|
||||
extra_options="${extra_options} netbsd.opt netbsd-elf.opt"
|
||||
tmake_file="${tmake_file} arm/t-arm"
|
||||
;;
|
||||
arm*-*-linux*) # ARM GNU/Linux with ELF
|
||||
arm*-*-linux-*eabi*) # ARM GNU/Linux with ELF
|
||||
tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
|
||||
case $target in
|
||||
arm*b-*-linux*)
|
||||
tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
|
||||
;;
|
||||
tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
|
||||
;;
|
||||
esac
|
||||
tmake_file="${tmake_file} arm/t-arm"
|
||||
tmake_file="${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
|
||||
tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h arm/arm.h"
|
||||
# Define multilib configuration for arm-linux-androideabi.
|
||||
case ${target} in
|
||||
arm*-*-linux-*eabi)
|
||||
tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h"
|
||||
tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
|
||||
# Define multilib configuration for arm-linux-androideabi.
|
||||
case ${target} in
|
||||
*-androideabi)
|
||||
tmake_file="$tmake_file arm/t-linux-androideabi"
|
||||
;;
|
||||
esac
|
||||
# The BPABI long long divmod functions return a 128-bit value in
|
||||
# registers r0-r3. Correctly modeling that requires the use of
|
||||
# TImode.
|
||||
need_64bit_hwint=yes
|
||||
# The EABI requires the use of __cxa_atexit.
|
||||
default_use_cxa_atexit=yes
|
||||
;;
|
||||
*)
|
||||
tmake_file="$tmake_file arm/t-linux"
|
||||
*-androideabi)
|
||||
tmake_file="$tmake_file arm/t-linux-androideabi"
|
||||
;;
|
||||
esac
|
||||
# The BPABI long long divmod functions return a 128-bit value in
|
||||
# registers r0-r3. Correctly modeling that requires the use of
|
||||
# TImode.
|
||||
need_64bit_hwint=yes
|
||||
# The EABI requires the use of __cxa_atexit.
|
||||
default_use_cxa_atexit=yes
|
||||
with_tls=${with_tls:-gnu}
|
||||
tm_file="$tm_file arm/aout.h arm/arm.h"
|
||||
;;
|
||||
arm*-*-uclinux*) # ARM ucLinux
|
||||
arm*-*-uclinux*eabi*) # ARM ucLinux
|
||||
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/uclinux-elf.h glibc-stdint.h"
|
||||
tmake_file="arm/t-arm arm/t-arm-elf"
|
||||
case ${target} in
|
||||
arm*-*-uclinux*eabi)
|
||||
tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h"
|
||||
tmake_file="$tmake_file arm/t-bpabi"
|
||||
# The BPABI long long divmod functions return a 128-bit value in
|
||||
# registers r0-r3. Correctly modeling that requires the use of
|
||||
# TImode.
|
||||
need_64bit_hwint=yes
|
||||
# The EABI requires the use of __cxa_atexit.
|
||||
default_use_cxa_atexit=yes
|
||||
esac
|
||||
tm_file="$tm_file arm/aout.h arm/arm.h"
|
||||
;;
|
||||
arm*-*-ecos-elf)
|
||||
tm_file="dbxelf.h elfos.h newlib-stdint.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/ecos-elf.h"
|
||||
tmake_file="arm/t-arm arm/t-arm-elf"
|
||||
tmake_file="arm/t-arm arm/t-arm-elf arm/t-bpabi"
|
||||
tm_file="$tm_file arm/bpabi.h arm/uclinux-eabi.h arm/aout.h arm/arm.h"
|
||||
# The BPABI long long divmod functions return a 128-bit value in
|
||||
# registers r0-r3. Correctly modeling that requires the use of
|
||||
# TImode.
|
||||
need_64bit_hwint=yes
|
||||
# The EABI requires the use of __cxa_atexit.
|
||||
default_use_cxa_atexit=yes
|
||||
;;
|
||||
arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtemseabi*)
|
||||
# The BPABI long long divmod functions return a 128-bit value in
|
||||
@ -906,20 +884,6 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtemseabi*)
|
||||
esac
|
||||
tm_file="${tm_file} arm/aout.h arm/arm.h"
|
||||
;;
|
||||
arm*-*-rtems*)
|
||||
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h newlib-stdint.h"
|
||||
tmake_file="arm/t-arm arm/t-arm-elf t-rtems arm/t-rtems"
|
||||
;;
|
||||
arm*-*-elf)
|
||||
tm_file="dbxelf.h elfos.h newlib-stdint.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h"
|
||||
tmake_file="arm/t-arm arm/t-arm-elf"
|
||||
;;
|
||||
arm*-wince-pe*)
|
||||
tm_file="arm/semi.h arm/aout.h arm/arm.h arm/coff.h dbxcoff.h arm/pe.h arm/wince-pe.h"
|
||||
tmake_file="arm/t-arm arm/t-wince-pe"
|
||||
extra_options="${extra_options} arm/pe.opt"
|
||||
extra_objs="pe.o"
|
||||
;;
|
||||
avr-*-rtems*)
|
||||
tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h"
|
||||
tmake_file="avr/t-avr avr/t-multilib t-rtems avr/t-rtems"
|
||||
@ -3048,14 +3012,6 @@ case "${target}" in
|
||||
| fpv4-sp-d16 | neon-vfpv4)
|
||||
# OK
|
||||
;;
|
||||
fpa | fpe2 | fpe3 | maverick)
|
||||
if test "x$enable_obsolete" != xyes; then
|
||||
echo "*** Configuration option --with-fpu=${with_fpu} is obsolete." >&2
|
||||
echo "*** Specify --enable-obsolete to build it anyway." >&2
|
||||
echo "*** Support will be REMOVED in the next major release of GCC." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unknown fpu used in --with-fpu=$with_fpu" 2>&1
|
||||
exit 1
|
||||
|
@ -1,24 +0,0 @@
|
||||
/* Definitions for ecos based ARM systems using ELF
|
||||
Copyright (C) 1998, 2001, 2007, 2011 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/>. */
|
||||
|
||||
/* Run-time Target Specification. */
|
||||
#define HAS_INIT_SECTION
|
||||
|
||||
#undef INVOKE_main
|
||||
|
@ -1,64 +0,0 @@
|
||||
/* Definitions for StrongARM running FreeBSD using the ELF format
|
||||
Copyright (C) 2001, 2004, 2007, 2010, 2011 Free Software Foundation, Inc.
|
||||
Contributed by David E. O'Brien <obrien@FreeBSD.org> and BSDi.
|
||||
|
||||
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 SUBTARGET_EXTRA_SPECS
|
||||
#define SUBTARGET_EXTRA_SPECS \
|
||||
{ "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }
|
||||
|
||||
#undef SUBTARGET_CPP_SPEC
|
||||
#define SUBTARGET_CPP_SPEC FBSD_CPP_SPEC
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC " \
|
||||
%{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \
|
||||
%{v:-V} \
|
||||
%{assert*} %{R*} %{rpath*} %{defsym*} \
|
||||
%{shared:-Bshareable %{h*} %{soname*}} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker %(fbsd_dynamic_linker) } \
|
||||
%{static:-Bstatic}} \
|
||||
%{symbolic:-Bsymbolic}"
|
||||
|
||||
|
||||
/************************[ Target stuff ]***********************************/
|
||||
|
||||
/* Define the actual types of some ANSI-mandated types.
|
||||
Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c,
|
||||
c-common.c, and config/<arch>/<arch>.h. */
|
||||
|
||||
/* arm.h gets this wrong for FreeBSD. We use the GCC defaults instead. */
|
||||
|
||||
#undef SIZE_TYPE
|
||||
#define SIZE_TYPE "unsigned int"
|
||||
|
||||
#undef PTRDIFF_TYPE
|
||||
#define PTRDIFF_TYPE "int"
|
||||
|
||||
/* We use the GCC defaults here. */
|
||||
#undef WCHAR_TYPE
|
||||
|
||||
#undef WCHAR_TYPE_SIZE
|
||||
#define WCHAR_TYPE_SIZE 32
|
||||
|
||||
#undef SUBTARGET_CPU_DEFAULT
|
||||
#define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm
|
@ -1,257 +0,0 @@
|
||||
/* Routines for GCC for ARM/pe.
|
||||
Copyright (C) 1995, 1996, 2000, 2001, 2002, 2004, 2005, 2007, 2008, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Doug Evans (dje@cygnus.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/>. */
|
||||
|
||||
#include "config.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
#include "tm.h"
|
||||
#include "rtl.h"
|
||||
#include "output.h"
|
||||
#include "flags.h"
|
||||
#include "tree.h"
|
||||
#include "expr.h"
|
||||
#include "diagnostic-core.h"
|
||||
#include "tm_p.h"
|
||||
|
||||
extern int current_function_anonymous_args;
|
||||
|
||||
|
||||
/* Return nonzero if DECL is a dllexport'd object. */
|
||||
|
||||
tree current_class_type; /* FIXME */
|
||||
|
||||
int
|
||||
arm_dllexport_p (tree decl)
|
||||
{
|
||||
tree exp;
|
||||
|
||||
if (TREE_CODE (decl) != VAR_DECL
|
||||
&& TREE_CODE (decl) != FUNCTION_DECL)
|
||||
return 0;
|
||||
exp = lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl));
|
||||
if (exp)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return nonzero if DECL is a dllimport'd object. */
|
||||
|
||||
int
|
||||
arm_dllimport_p (tree decl)
|
||||
{
|
||||
tree imp;
|
||||
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL
|
||||
&& TARGET_NOP_FUN_DLLIMPORT)
|
||||
return 0;
|
||||
|
||||
if (TREE_CODE (decl) != VAR_DECL
|
||||
&& TREE_CODE (decl) != FUNCTION_DECL)
|
||||
return 0;
|
||||
imp = lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl));
|
||||
if (imp)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Return nonzero if SYMBOL is marked as being dllexport'd. */
|
||||
|
||||
int
|
||||
arm_dllexport_name_p (const char *symbol)
|
||||
{
|
||||
return symbol[0] == ARM_PE_FLAG_CHAR && symbol[1] == 'e' && symbol[2] == '.';
|
||||
}
|
||||
|
||||
/* Return nonzero if SYMBOL is marked as being dllimport'd. */
|
||||
|
||||
int
|
||||
arm_dllimport_name_p (const char *symbol)
|
||||
{
|
||||
return symbol[0] == ARM_PE_FLAG_CHAR && symbol[1] == 'i' && symbol[2] == '.';
|
||||
}
|
||||
|
||||
/* Mark a DECL as being dllexport'd.
|
||||
Note that we override the previous setting (e.g.: dllimport). */
|
||||
|
||||
void
|
||||
arm_mark_dllexport (tree decl)
|
||||
{
|
||||
const char * oldname;
|
||||
char * newname;
|
||||
rtx rtlname;
|
||||
tree idp;
|
||||
|
||||
rtlname = XEXP (DECL_RTL (decl), 0);
|
||||
if (GET_CODE (rtlname) == MEM)
|
||||
rtlname = XEXP (rtlname, 0);
|
||||
gcc_assert (GET_CODE (rtlname) == SYMBOL_REF);
|
||||
oldname = XSTR (rtlname, 0);
|
||||
|
||||
if (arm_dllimport_name_p (oldname))
|
||||
oldname += 9;
|
||||
else if (arm_dllexport_name_p (oldname))
|
||||
return; /* already done */
|
||||
|
||||
newname = XALLOCAVEC (char, strlen (oldname) + 4);
|
||||
sprintf (newname, "%ce.%s", ARM_PE_FLAG_CHAR, oldname);
|
||||
|
||||
/* We pass newname through get_identifier to ensure it has a unique
|
||||
address. RTL processing can sometimes peek inside the symbol ref
|
||||
and compare the string's addresses to see if two symbols are
|
||||
identical. */
|
||||
/* ??? At least I think that's why we do this. */
|
||||
idp = get_identifier (newname);
|
||||
|
||||
XEXP (DECL_RTL (decl), 0) =
|
||||
gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
|
||||
}
|
||||
|
||||
/* Mark a DECL as being dllimport'd. */
|
||||
|
||||
void
|
||||
arm_mark_dllimport (tree decl)
|
||||
{
|
||||
const char * oldname;
|
||||
char * newname;
|
||||
tree idp;
|
||||
rtx rtlname, newrtl;
|
||||
|
||||
rtlname = XEXP (DECL_RTL (decl), 0);
|
||||
|
||||
if (GET_CODE (rtlname) == MEM)
|
||||
rtlname = XEXP (rtlname, 0);
|
||||
gcc_assert (GET_CODE (rtlname) == SYMBOL_REF);
|
||||
oldname = XSTR (rtlname, 0);
|
||||
|
||||
gcc_assert (!arm_dllexport_name_p (oldname));
|
||||
if (arm_dllimport_name_p (oldname))
|
||||
return; /* already done */
|
||||
|
||||
/* ??? One can well ask why we're making these checks here,
|
||||
and that would be a good question. */
|
||||
|
||||
/* Imported variables can't be initialized. */
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
&& !DECL_VIRTUAL_P (decl)
|
||||
&& DECL_INITIAL (decl))
|
||||
{
|
||||
error ("initialized variable %q+D is marked dllimport", decl);
|
||||
return;
|
||||
}
|
||||
/* Nor can they be static. */
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
/* ??? Is this test for vtables needed? */
|
||||
&& !DECL_VIRTUAL_P (decl)
|
||||
&& 0 /*???*/)
|
||||
{
|
||||
error ("static variable %q+D is marked dllimport", decl);
|
||||
return;
|
||||
}
|
||||
|
||||
/* `extern' needn't be specified with dllimport.
|
||||
Specify `extern' now and hope for the best. Sigh. */
|
||||
if (TREE_CODE (decl) == VAR_DECL
|
||||
/* ??? Is this test for vtables needed? */
|
||||
&& !DECL_VIRTUAL_P (decl))
|
||||
{
|
||||
DECL_EXTERNAL (decl) = 1;
|
||||
TREE_PUBLIC (decl) = 1;
|
||||
}
|
||||
|
||||
newname = XALLOCAVEC (char, strlen (oldname) + 11);
|
||||
sprintf (newname, "%ci.__imp_%s", ARM_PE_FLAG_CHAR, oldname);
|
||||
|
||||
/* We pass newname through get_identifier to ensure it has a unique
|
||||
address. RTL processing can sometimes peek inside the symbol ref
|
||||
and compare the string's addresses to see if two symbols are
|
||||
identical. */
|
||||
/* ??? At least I think that's why we do this. */
|
||||
idp = get_identifier (newname);
|
||||
|
||||
newrtl = gen_rtx_MEM (Pmode,
|
||||
gen_rtx_SYMBOL_REF (Pmode,
|
||||
IDENTIFIER_POINTER (idp)));
|
||||
XEXP (DECL_RTL (decl), 0) = newrtl;
|
||||
}
|
||||
|
||||
void
|
||||
arm_pe_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* This bit is copied from arm_encode_section_info. */
|
||||
if (optimize > 0 && TREE_CONSTANT (decl))
|
||||
SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;
|
||||
|
||||
/* Mark the decl so we can tell from the rtl whether the object is
|
||||
dllexport'd or dllimport'd. */
|
||||
if (arm_dllexport_p (decl))
|
||||
arm_mark_dllexport (decl);
|
||||
else if (arm_dllimport_p (decl))
|
||||
arm_mark_dllimport (decl);
|
||||
/* It might be that DECL has already been marked as dllimport, but a
|
||||
subsequent definition nullified that. The attribute is gone but
|
||||
DECL_RTL still has @i.__imp_foo. We need to remove that. */
|
||||
else if ((TREE_CODE (decl) == FUNCTION_DECL
|
||||
|| TREE_CODE (decl) == VAR_DECL)
|
||||
&& DECL_RTL (decl) != NULL_RTX
|
||||
&& GET_CODE (DECL_RTL (decl)) == MEM
|
||||
&& GET_CODE (XEXP (DECL_RTL (decl), 0)) == MEM
|
||||
&& GET_CODE (XEXP (XEXP (DECL_RTL (decl), 0), 0)) == SYMBOL_REF
|
||||
&& arm_dllimport_name_p (XSTR (XEXP (XEXP (DECL_RTL (decl), 0), 0), 0)))
|
||||
{
|
||||
const char *oldname = XSTR (XEXP (XEXP (DECL_RTL (decl), 0), 0), 0);
|
||||
tree idp = get_identifier (oldname + 9);
|
||||
rtx newrtl = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
|
||||
|
||||
XEXP (DECL_RTL (decl), 0) = newrtl;
|
||||
|
||||
/* We previously set TREE_PUBLIC and DECL_EXTERNAL.
|
||||
??? We leave these alone for now. */
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
arm_pe_unique_section (tree decl, int reloc)
|
||||
{
|
||||
int len;
|
||||
const char * name;
|
||||
char * string;
|
||||
const char * prefix;
|
||||
|
||||
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
|
||||
name = arm_strip_name_encoding (name);
|
||||
|
||||
/* The object is put in, for example, section .text$foo.
|
||||
The linker will then ultimately place them in .text
|
||||
(everything from the $ on is stripped). */
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
prefix = ".text$";
|
||||
else if (decl_readonly_section (decl, reloc))
|
||||
prefix = ".rdata$";
|
||||
else
|
||||
prefix = ".data$";
|
||||
len = strlen (name) + strlen (prefix);
|
||||
string = XALLOCAVEC (char, len + 1);
|
||||
sprintf (string, "%s%s", prefix, name);
|
||||
|
||||
DECL_SECTION_NAME (decl) = build_string (len, string);
|
||||
}
|
@ -1,146 +0,0 @@
|
||||
/* Definitions of target machine for GNU compiler, for ARM with PE obj format.
|
||||
Copyright (C) 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2005, 2007, 2011
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Doug Evans (dje@cygnus.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/>. */
|
||||
|
||||
/* Enable PE specific code. */
|
||||
#define ARM_PE 1
|
||||
|
||||
#define ARM_PE_FLAG_CHAR '@'
|
||||
|
||||
/* Ensure that @x. will be stripped from the function name. */
|
||||
#undef SUBTARGET_NAME_ENCODING_LENGTHS
|
||||
#define SUBTARGET_NAME_ENCODING_LENGTHS \
|
||||
case ARM_PE_FLAG_CHAR: return 3;
|
||||
|
||||
#undef USER_LABEL_PREFIX
|
||||
#define USER_LABEL_PREFIX "_"
|
||||
|
||||
|
||||
/* Run-time Target Specification. */
|
||||
|
||||
/* Get tree.c to declare a target-specific specialization of
|
||||
merge_decl_attributes. */
|
||||
#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1
|
||||
|
||||
#undef SUBTARGET_CPP_SPEC
|
||||
#define SUBTARGET_CPP_SPEC "-D__pe__"
|
||||
|
||||
#undef TARGET_DEFAULT
|
||||
#define TARGET_DEFAULT (MASK_NOP_FUN_DLLIMPORT)
|
||||
|
||||
#undef MULTILIB_DEFAULTS
|
||||
#define MULTILIB_DEFAULTS \
|
||||
{ "marm", "mlittle-endian", "mfloat-abi=soft", "mno-thumb-interwork" }
|
||||
|
||||
#undef WCHAR_TYPE
|
||||
#define WCHAR_TYPE "short unsigned int"
|
||||
#undef WCHAR_TYPE_SIZE
|
||||
#define WCHAR_TYPE_SIZE 16
|
||||
|
||||
/* r11 is fixed. */
|
||||
#undef SUBTARGET_CONDITIONAL_REGISTER_USAGE
|
||||
#define SUBTARGET_CONDITIONAL_REGISTER_USAGE \
|
||||
fixed_regs [11] = 1; \
|
||||
call_used_regs [11] = 1;
|
||||
|
||||
|
||||
/* PE/COFF uses explicit import from shared libraries. */
|
||||
#define MULTIPLE_SYMBOL_SPACES 1
|
||||
|
||||
#define TARGET_ASM_UNIQUE_SECTION arm_pe_unique_section
|
||||
#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
|
||||
|
||||
#define SUPPORTS_ONE_ONLY 1
|
||||
|
||||
/* Switch into a generic section. */
|
||||
#undef TARGET_ASM_NAMED_SECTION
|
||||
#define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section
|
||||
|
||||
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
|
||||
|
||||
/* Output a reference to a label. */
|
||||
#undef ASM_OUTPUT_LABELREF
|
||||
#define ASM_OUTPUT_LABELREF(STREAM, NAME) \
|
||||
asm_fprintf (STREAM, "%U%s", arm_strip_name_encoding (NAME))
|
||||
|
||||
/* Output a function definition label. */
|
||||
#undef ASM_DECLARE_FUNCTION_NAME
|
||||
#define ASM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \
|
||||
do \
|
||||
{ \
|
||||
if (arm_dllexport_name_p (NAME)) \
|
||||
{ \
|
||||
drectve_section (); \
|
||||
fprintf (STREAM, "\t.ascii \" -export:%s\"\n", \
|
||||
arm_strip_name_encoding (NAME)); \
|
||||
switch_to_section (function_section (DECL)); \
|
||||
} \
|
||||
ARM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL); \
|
||||
if (TARGET_THUMB) \
|
||||
fprintf (STREAM, "\t.code 16\n"); \
|
||||
ASM_OUTPUT_LABEL (STREAM, NAME); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* Output a common block. */
|
||||
#undef ASM_OUTPUT_COMMON
|
||||
#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
|
||||
do \
|
||||
{ \
|
||||
if (arm_dllexport_name_p (NAME)) \
|
||||
{ \
|
||||
drectve_section (); \
|
||||
fprintf ((STREAM), "\t.ascii \" -export:%s\"\n",\
|
||||
arm_strip_name_encoding (NAME)); \
|
||||
} \
|
||||
if (! arm_dllimport_name_p (NAME)) \
|
||||
{ \
|
||||
fprintf ((STREAM), "\t.comm\t"); \
|
||||
assemble_name ((STREAM), (NAME)); \
|
||||
asm_fprintf ((STREAM), ", %d\t%@ %d\n", \
|
||||
(int)(ROUNDED), (int)(SIZE)); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* Output the label for an initialized variable. */
|
||||
#undef ASM_DECLARE_OBJECT_NAME
|
||||
#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \
|
||||
do \
|
||||
{ \
|
||||
if (arm_dllexport_name_p (NAME)) \
|
||||
{ \
|
||||
section *save_section = in_section; \
|
||||
drectve_section (); \
|
||||
fprintf (STREAM, "\t.ascii \" -export:%s\"\n",\
|
||||
arm_strip_name_encoding (NAME)); \
|
||||
switch_to_section (save_section); \
|
||||
} \
|
||||
ASM_OUTPUT_LABEL ((STREAM), (NAME)); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* Support the ctors/dtors and other sections. */
|
||||
|
||||
#define DRECTVE_SECTION_ASM_OP "\t.section .drectve"
|
||||
|
||||
#define drectve_section() \
|
||||
(fprintf (asm_out_file, "%s\n", DRECTVE_SECTION_ASM_OP), \
|
||||
in_section = NULL)
|
@ -1,23 +0,0 @@
|
||||
; PE-specific options for the ARM port
|
||||
|
||||
; Copyright (C) 2005, 2007 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/>.
|
||||
|
||||
mnop-fun-dllimport
|
||||
Target Report Mask(NOP_FUN_DLLIMPORT)
|
||||
Ignore dllimport attribute for functions
|
@ -1,44 +0,0 @@
|
||||
/* Definitions for RTEMS based ARM systems using ELF
|
||||
Copyright (C) 2000, 2002, 2005, 2007, 2008, 2009, 2011
|
||||
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/>. */
|
||||
|
||||
/* Run-time Target Specification. */
|
||||
|
||||
#define HAS_INIT_SECTION
|
||||
|
||||
#define TARGET_OS_CPP_BUILTINS() \
|
||||
do { \
|
||||
builtin_define ("__rtems__"); \
|
||||
builtin_define ("__USE_INIT_FINI__"); \
|
||||
builtin_assert ("system=rtems"); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* The default in gcc now is soft-float, but gcc misses it to
|
||||
* pass it to the assembler.
|
||||
*/
|
||||
#undef SUBTARGET_EXTRA_ASM_SPEC
|
||||
#define SUBTARGET_EXTRA_ASM_SPEC "\
|
||||
%{!mfloat-abi=hard: %{!mfpu=vfp: %{!mfloat-abi=soft:-mfpu=softfpa}}}"
|
||||
|
||||
/*
|
||||
* The default includes --start-group and --end-group which conflicts
|
||||
* with how this used to be defined.
|
||||
*/
|
||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
@ -1,45 +0,0 @@
|
||||
# Custom rtems multilibs
|
||||
|
||||
MULTILIB_OPTIONS = marm/mthumb
|
||||
MULTILIB_DIRNAMES = arm thumb
|
||||
MULTILIB_EXCEPTIONS =
|
||||
MULTILIB_MATCHES = marm=mno-thumb
|
||||
|
||||
MULTILIB_OPTIONS += mfloat-abi=hard/mfloat-abi=softfp
|
||||
MULTILIB_DIRNAMES += fpu softfp
|
||||
MULTILIB_EXCEPTIONS += *mthumb*/*mfloat-abi=hard* *mthumb*/*mfloat-abi=softfp*
|
||||
MULTILIB_MATCHES =
|
||||
|
||||
MULTILIB_OPTIONS += mfpu=vfp
|
||||
MULTILIB_DIRNAMES += vfp
|
||||
MULTILIB_EXCEPTIONS += *mfloat-abi=hard*/*mfpu=vfp* *marm*/*mfloat-abi=softfp*/*mfpu=fpa*
|
||||
MULTILIB_EXCLUSIONS += !mthumb/mfloat-abi=softfp/!mfpu=vfp
|
||||
|
||||
# default float model is fpa, so don't create a explicit copy of it
|
||||
MULTILIB_EXCEPTIONS += *marm*/*mfpa*
|
||||
|
||||
# permutations of the options which are useful (+) or make no sense (-),
|
||||
# defaults are in brackets:
|
||||
# + (arm/soft/fpa)
|
||||
# + (arm/soft)/vfp
|
||||
# - (arm)/softfp(/fpa)
|
||||
# + (arm)/softfp/vfp
|
||||
# + (arm)/float-abi=hard(/fpa)
|
||||
# - (arm)/float-abi=hard/vfp
|
||||
# + thumb/(soft/fpa)
|
||||
# + thumb/(soft/)vfp
|
||||
# - thumb/softfp/fpa
|
||||
# - thumb/softfp/vfp
|
||||
# - thumb/float-abi=hard/fpa
|
||||
# - thumb/float-abi=hard/vfp
|
||||
|
||||
# subdirs to be used for multilibs and their respective options:
|
||||
#/thumb/vfp -> thumb/soft/vfp
|
||||
#/thumb/fpa -> thumb/soft/fpa
|
||||
#/thumb -> thumb/soft/fpa
|
||||
#/vfp -> arm/soft/vfp
|
||||
#/softfp/vfp -> arm/softfp/cfp
|
||||
#/fpu/fpa -> arm/hard/fpa
|
||||
#/fpu -> arm/hard/fpa
|
||||
#/fpa -> arm/soft/fpa
|
||||
#. -> arm/soft/fpa
|
@ -1,23 +0,0 @@
|
||||
# Copyright (C) 2000, 2001, 2006, 2008, 2009, 2011
|
||||
# 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/>.
|
||||
|
||||
MULTILIB_OPTIONS = mlittle-endian/mbig-endian mfloat-abi=hard/mfloat-abi=soft
|
||||
MULTILIB_DIRNAMES = le be fpu soft
|
||||
MULTILIB_EXCEPTIONS =
|
||||
MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle
|
@ -1,31 +0,0 @@
|
||||
# Copyright (C) 2003, 2004, 2006, 2008, 2009, 2010, 2011
|
||||
# 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/>.
|
||||
|
||||
pe.o: $(srcdir)/config/arm/pe.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
||||
$(RTL_H) output.h flags.h $(TREE_H) expr.h $(TM_P_H)
|
||||
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
||||
$(srcdir)/config/arm/pe.c
|
||||
|
||||
MULTILIB_OPTIONS = mfloat-abi=hard
|
||||
MULTILIB_DIRNAMES = fpu
|
||||
# Note - Thumb multilib omitted because Thumb support for
|
||||
# arm-wince-pe target does not appear to be working in binutils
|
||||
# yet...
|
||||
# MULTILIB_OPTIONS += thumb
|
||||
# MULTILIB_DIRNAMES += thumb
|
@ -1,26 +0,0 @@
|
||||
/* Definitions of target machine for GNU compiler, for ARM with WINCE-PE obj format.
|
||||
Copyright (C) 2003, 2004, 2005, 2007, 2011 Free Software Foundation, Inc.
|
||||
Contributed by Nick Clifton <nickc@redhat.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_DEFAULT
|
||||
#define TARGET_DEFAULT (MASK_NOP_FUN_DLLIMPORT)
|
||||
|
||||
#undef MULTILIB_DEFAULTS
|
||||
#define MULTILIB_DEFAULTS \
|
||||
{ "marm", "mlittle-endian", "mfloat-abi=soft", "mno-thumb-interwork" }
|
Loading…
x
Reference in New Issue
Block a user