diff options
author | J"orn Rennecke <joern.rennecke@superh.com> | 2002-05-28 22:26:43 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2002-05-28 23:26:43 +0100 |
commit | f1a58d928b14e74fa54f8be9c12dcc9dd871b073 (patch) | |
tree | 95441ed67a475ab09040e20e78a2917ba238f8fa /gcc | |
parent | 33a3dfc4f0102fecfc42ef983d3fb3a61f05ec07 (diff) | |
download | gcc-f1a58d928b14e74fa54f8be9c12dcc9dd871b073.zip gcc-f1a58d928b14e74fa54f8be9c12dcc9dd871b073.tar.gz gcc-f1a58d928b14e74fa54f8be9c12dcc9dd871b073.tar.bz2 |
config/sh reorganization to factor out endianness and coff:
* config/sh/little.h: New file.
* config/sh/sh.h (TARGET_ENDIAN_DEFAULT): If not already
defined, define to 0 to select big-endian.
(SUBTARGET_ASM_ENDIAN_SPEC): Define according to TARGET_ENDIAN_DEFAULT.
(TARGET_DEFAULT): Include TARGET_ENDIAN_DEFAULT.
* config/sh/sh64.h (TARGET_DEFAULT): Include TARGET_ENDIAN_DEFAULT.
* config/sh/t-be: New file.
* config/sh/t-le: New file.
* sh.h (SDB_DEBUGGING_INFO, #include "dbxcoff.h"): Moved to sh/coff.h.
(SDB_DELIM, MAX_OFILE_ALIGNMENT, IDENT_ASM_OP): Likewise.
(TARGET_ASM_NAMED_SECTION, ASM_OUTPUT_SKIP): Likewise.
(USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX): Likewise.
(ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL): Likewise.
(ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.
(ASM_FILE_END, ASM_DECLARE_FUNCTION_NAME): Deleted.
(CPP_SPEC, SUBTARGET_CPP_ENDIAN_SPEC): Likewise.
(SUBTARGET_CPP_SPEC, CPP_DEFAULT_CPU_SPEC, CPP_PREDEFINES): Likewise.
(EXTRA_SPECS): Remove SUBTARGET_CPP_ENDIAN_SPEC and
CPP_DEFAULT_CPU_SPEC. Add LINK_EMUL_PREFIX, LINK_DEFAULT_CPU_EMUL,
SUBTARGET_LINK_EMUL_SUFFIX and SUBTARGET_LINK_SPEC.
(LINK_SPEC): Define to SH_LINK_SPEC.
(TARGET_CPU_CPP_BUILTINS, SH_LINK_SPEC): Define.
(LINK_EMUL_PREFIX, LINK_DEFAULT_CPU_EMUL): Likewise.
(SUBTARGET_LINK_EMUL_SUFFIX, SUBTARGET_LINK_SPEC): Likewise.
(CPP_SPEC): Reduce to %(subtarget_cpp_spec).
(TARGET_ENDIAN_DEFAULT): Define if not already defined.
* config/sh/coff.h: New file.
(TARGET_ASM_NAMED_SECTION): Now default_coff_asm_named_section
(TARGET_OBJFMT_CPP_BUILTINS): Define.
* config/sh/elf.h (IDENT_ASM_OP): No need to #undef at the start.
(ASM_FILE_END, ASM_OUTPUT_SOURCE_LINE): Likewise.
(DBX_OUTPUT_MAIN_SOURCE_FILE_END, TARGET_ASM_NAMED_SECTION): Likewise.
(ASM_DECLARE_FUNCTION_NAME, MAX_OFILE_ALIGNMENT, SIZE_TYPE): Likewise.
(PTRDIFF_TYPE): Likewise.
("dbxelf.h", "elfos.h", "svr4.h"): Don't #include.
(CPP_PREDEFINES): Don't define.
(TARGET_OBJFMT_CPP_BUILTINS): Define.
(LINK_SPEC): Define to SH_LINK_SPEC.
(LINK_EMUL_PREFIX): Redefine.
* config/sh/linux.h: (SUBTARGET_CPP_SPEC): Remove -fpic / -fPIC cases.
(SUBTARGET_CPP_ENDIAN_SPEC, CPP_DEFAULT_CPU_SPEC): Remove redefinition.
(CPP_PREDEFINES, SUBTARGET_ASM_ENDIAN_SPEC): Likewise.
(CC1_SPEC, CC1PLUS_SPEC, LINK_SPEC): Likewise.
(TARGET_OS_CPP_BUILTINS): Define.
(TARGET_DEFAULT): Redefine.
(SUBTARGET_LINK_EMUL_SUFFIX, SUBTARGET_LINK_SPEC): Likewise.
* config/sh/sh64.h (CPP_DEFAULT_CPU_SPEC): Remove.
(LINK_SPEC): Don't redefine.
(LINK_DEFAULT_CPU_EMUL): Redefine.
(TARGET_DEFAULT): Include TARGET_ENDIAN_DEFAULT.
* sh.c (sh_asm_named_section): Don't declare / define.
* t-linux (MULTILIB_OPTIONS): Rely on pre-set endianness option.
* config.gcc (sh-*-elf* tm_file): Add dbxelf.h elfos.h svr4.h.
(sh64-*-elf* tm_file): Likewise.
(sh-*-rtemself* tm_file): Likewise.
(sh-*-linux* tm_file): Likewise. Add sh/little.h.
(sh-*-linux* tmake_file): Add sh/t-le.
(sh-*-rtems* tm_file): Add sh/coff.h
(sh-*-* tm_file): Likewise.
* sh.h (LEGITIMATE_PIC_OPERAND_P): Check for SYMBOL_REF before using
CONSTANT_POOL_ADDRESS_P.
* coff.h (HAS_INIT_SECTION, INVOKE__MAIN): Define.
Co-Authored-By: Jason R. Thorpe <thorpej@wasabisystems.com>
From-SVN: r53974
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 73 | ||||
-rw-r--r-- | gcc/config.gcc | 13 | ||||
-rw-r--r-- | gcc/config/sh/coff.h | 88 | ||||
-rw-r--r-- | gcc/config/sh/elf.h | 38 | ||||
-rw-r--r-- | gcc/config/sh/linux.h | 46 | ||||
-rw-r--r-- | gcc/config/sh/little.h | 22 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 14 | ||||
-rw-r--r-- | gcc/config/sh/sh.h | 217 | ||||
-rw-r--r-- | gcc/config/sh/sh64.h | 17 | ||||
-rw-r--r-- | gcc/config/sh/t-be | 1 | ||||
-rw-r--r-- | gcc/config/sh/t-le | 1 | ||||
-rw-r--r-- | gcc/config/sh/t-linux | 2 |
12 files changed, 321 insertions, 211 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5197780..601fef8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,76 @@ +Tue May 28 21:16:18 2002 J"orn Rennecke <joern.rennecke@superh.com> + Jason R. Thorpe <thorpej@wasabisystems.com> + + config/sh reorganization to factor out endianness and coff: + + * config/sh/little.h: New file. + * config/sh/sh.h (TARGET_ENDIAN_DEFAULT): If not already + defined, define to 0 to select big-endian. + (SUBTARGET_ASM_ENDIAN_SPEC): Define according to TARGET_ENDIAN_DEFAULT. + (TARGET_DEFAULT): Include TARGET_ENDIAN_DEFAULT. + * config/sh/sh64.h (TARGET_DEFAULT): Include TARGET_ENDIAN_DEFAULT. + * config/sh/t-be: New file. + * config/sh/t-le: New file. + + * sh.h (SDB_DEBUGGING_INFO, #include "dbxcoff.h"): Moved to sh/coff.h. + (SDB_DELIM, MAX_OFILE_ALIGNMENT, IDENT_ASM_OP): Likewise. + (TARGET_ASM_NAMED_SECTION, ASM_OUTPUT_SKIP): Likewise. + (USER_LABEL_PREFIX, LOCAL_LABEL_PREFIX): Likewise. + (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL): Likewise. + (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise. + (ASM_FILE_END, ASM_DECLARE_FUNCTION_NAME): Deleted. + (CPP_SPEC, SUBTARGET_CPP_ENDIAN_SPEC): Likewise. + (SUBTARGET_CPP_SPEC, CPP_DEFAULT_CPU_SPEC, CPP_PREDEFINES): Likewise. + (EXTRA_SPECS): Remove SUBTARGET_CPP_ENDIAN_SPEC and + CPP_DEFAULT_CPU_SPEC. Add LINK_EMUL_PREFIX, LINK_DEFAULT_CPU_EMUL, + SUBTARGET_LINK_EMUL_SUFFIX and SUBTARGET_LINK_SPEC. + (LINK_SPEC): Define to SH_LINK_SPEC. + (TARGET_CPU_CPP_BUILTINS, SH_LINK_SPEC): Define. + (LINK_EMUL_PREFIX, LINK_DEFAULT_CPU_EMUL): Likewise. + (SUBTARGET_LINK_EMUL_SUFFIX, SUBTARGET_LINK_SPEC): Likewise. + (CPP_SPEC): Reduce to %(subtarget_cpp_spec). + (TARGET_ENDIAN_DEFAULT): Define if not already defined. + * config/sh/coff.h: New file. + (TARGET_ASM_NAMED_SECTION): Now default_coff_asm_named_section + (TARGET_OBJFMT_CPP_BUILTINS): Define. + * config/sh/elf.h (IDENT_ASM_OP): No need to #undef at the start. + (ASM_FILE_END, ASM_OUTPUT_SOURCE_LINE): Likewise. + (DBX_OUTPUT_MAIN_SOURCE_FILE_END, TARGET_ASM_NAMED_SECTION): Likewise. + (ASM_DECLARE_FUNCTION_NAME, MAX_OFILE_ALIGNMENT, SIZE_TYPE): Likewise. + (PTRDIFF_TYPE): Likewise. + ("dbxelf.h", "elfos.h", "svr4.h"): Don't #include. + (CPP_PREDEFINES): Don't define. + (TARGET_OBJFMT_CPP_BUILTINS): Define. + (LINK_SPEC): Define to SH_LINK_SPEC. + (LINK_EMUL_PREFIX): Redefine. + * config/sh/linux.h: (SUBTARGET_CPP_SPEC): Remove -fpic / -fPIC cases. + (SUBTARGET_CPP_ENDIAN_SPEC, CPP_DEFAULT_CPU_SPEC): Remove redefinition. + (CPP_PREDEFINES, SUBTARGET_ASM_ENDIAN_SPEC): Likewise. + (CC1_SPEC, CC1PLUS_SPEC, LINK_SPEC): Likewise. + (TARGET_OS_CPP_BUILTINS): Define. + (TARGET_DEFAULT): Redefine. + (SUBTARGET_LINK_EMUL_SUFFIX, SUBTARGET_LINK_SPEC): Likewise. + * config/sh/sh64.h (CPP_DEFAULT_CPU_SPEC): Remove. + (LINK_SPEC): Don't redefine. + (LINK_DEFAULT_CPU_EMUL): Redefine. + (TARGET_DEFAULT): Include TARGET_ENDIAN_DEFAULT. + * sh.c (sh_asm_named_section): Don't declare / define. + * t-linux (MULTILIB_OPTIONS): Rely on pre-set endianness option. + * config.gcc (sh-*-elf* tm_file): Add dbxelf.h elfos.h svr4.h. + (sh64-*-elf* tm_file): Likewise. + (sh-*-rtemself* tm_file): Likewise. + (sh-*-linux* tm_file): Likewise. Add sh/little.h. + (sh-*-linux* tmake_file): Add sh/t-le. + (sh-*-rtems* tm_file): Add sh/coff.h + (sh-*-* tm_file): Likewise. + +Tue May 28 21:16:18 2002 J"orn Rennecke <joern.rennecke@superh.com> + + * sh.h (LEGITIMATE_PIC_OPERAND_P): Check for SYMBOL_REF before using + CONSTANT_POOL_ADDRESS_P. + + * coff.h (HAS_INIT_SECTION, INVOKE__MAIN): Define. + 2002-05-22 David Edelsohn <edelsohn@gnu.org> Jeff Law <law@redhat.com> diff --git a/gcc/config.gcc b/gcc/config.gcc index de376c7..6ba0de6 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -2207,12 +2207,12 @@ s390x-*-linux*) ;; sh-*-elf*) tmake_file="sh/t-sh sh/t-elf" - tm_file="${tm_file} sh/embed-elf.h" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/embed-elf.h" float_format=sh ;; sh64-*-elf*) tmake_file="sh/t-sh sh/t-elf sh/t-sh64" - tm_file="${tm_file} sh/sh.h sh/embed-elf.h sh/sh64.h" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/embed-elf.h sh/sh64.h" float_format=sh extra_headers="shmedia.h ushmedia.h sshmedia.h" # Not strictly necessary to check this, but a good idea anyway. @@ -2223,7 +2223,7 @@ sh64-*-elf*) sh-*-rtemself*) xm_defines=POSIX tmake_file="sh/t-sh sh/t-elf t-rtems" - tm_file="${tm_file} sh/embed-elf.h sh/rtemself.h rtems.h" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/embed-elf.h sh/rtemself.h rtems.h" float_format=sh if test x$enable_threads = xyes; then thread_file='rtems' @@ -2232,15 +2232,15 @@ sh-*-rtemself*) sh-*-rtems*) xm_defines=POSIX tmake_file="sh/t-sh t-rtems" - tm_file="${tm_file} sh/rtems.h rtems.h" + tm_file="${tm_file} sh/coff.h sh/rtems.h rtems.h" float_format=sh if test x$enable_threads = xyes; then thread_file='rtems' fi ;; sh-*-linux*) - tm_file="${tm_file} sh/elf.h sh/linux.h" - tmake_file="sh/t-sh sh/t-elf sh/t-linux" + tm_file="sh/little.h ${tm_file} dbxelf.h elfos.h svr4.h sh/elf.h sh/linux.h" + tmake_file="sh/t-sh sh/t-elf sh/t-le sh/t-linux" gas=yes gnu_ld=yes if test x$enable_threads = xyes; then thread_file='posix' @@ -2248,6 +2248,7 @@ sh-*-linux*) float_format=sh ;; sh-*-*) + tm_file="${tm_file} sh/coff.h" float_format=sh ;; sparc-tti-*) diff --git a/gcc/config/sh/coff.h b/gcc/config/sh/coff.h new file mode 100644 index 0000000..67826b1 --- /dev/null +++ b/gcc/config/sh/coff.h @@ -0,0 +1,88 @@ +/* Definitions of target machine for gcc for Hitachi / SuperH SH using ELF. + Copyright (C) 1997, 1998, 2001, 2002 Free Software Foundation, Inc. + Contributed by Jörn Rennecke <joern.rennecke@superh.com>. + +This file is part of GNU CC. + +GNU CC 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 2, or (at your option) +any later version. + +GNU CC 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 GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Generate SDB debugging information. */ + +#define SDB_DEBUGGING_INFO + +/* Output DBX (stabs) debugging information if doing -gstabs. */ + +#include "dbxcoff.h" + +#define SDB_DELIM ";" + +#ifndef MAX_OFILE_ALIGNMENT +#define MAX_OFILE_ALIGNMENT 128 +#endif + +#define IDENT_ASM_OP "\t.ident\t" + +/* Switch into a generic section. */ +#define TARGET_ASM_NAMED_SECTION default_coff_asm_named_section + +/* The prefix to add to user-visible assembler symbols. */ + +#define USER_LABEL_PREFIX "_" + +/* The prefix to add to an internally generated label. */ + +#define LOCAL_LABEL_PREFIX "" + +/* Make an internal label into a string. */ +#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \ + sprintf ((STRING), "*%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUM)) + +/* Output an internal label definition. */ +#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ + asm_fprintf ((FILE), "%L%s%d:\n", (PREFIX), (NUM)) + +/* This is how to output an assembler line + that says to advance the location counter by SIZE bytes. */ + +#define ASM_OUTPUT_SKIP(FILE,SIZE) \ + fprintf ((FILE), "\t.space %d\n", (SIZE)) + +/* This says how to output an assembler line + to define a global common symbol. */ + +#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ +( fputs ("\t.comm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%d\n", (SIZE))) + +/* This says how to output an assembler line + to define a local common symbol. */ + +#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ +( fputs ("\t.lcomm ", (FILE)), \ + assemble_name ((FILE), (NAME)), \ + fprintf ((FILE), ",%d\n", (SIZE))) + +#define TARGET_OBJFMT_CPP_BUILTINS() + +/* ??? The so-called ASM_OUTPUT_SECTION_NAME cleanup from August 3rd 2001 + broke sh-coff, and was still neither reversed not fixed eight month after + this has been pointed out. */ +/* Tell the braindead logic in defaults.h / libgcc2.c not to + refer to __EH_FRAME_BEGIN__, since we don't use crtstuff.c */ +#define HAS_INIT_SECTION +/* And tell function.c that we don't actually have an init section. */ +#define INVOKE__MAIN diff --git a/gcc/config/sh/elf.h b/gcc/config/sh/elf.h index 716f494..0f735f5 100644 --- a/gcc/config/sh/elf.h +++ b/gcc/config/sh/elf.h @@ -19,26 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* Undefine some macros defined in both sh.h and svr4.h. */ -#undef IDENT_ASM_OP -#undef ASM_FILE_END -#undef ASM_OUTPUT_SOURCE_LINE -#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END -#undef TARGET_ASM_NAMED_SECTION -#undef ASM_DECLARE_FUNCTION_NAME -#undef MAX_OFILE_ALIGNMENT -#undef SIZE_TYPE -#undef PTRDIFF_TYPE - -/* Be ELF-like. */ -/* TODO: convert includes to ${tm_file} list in config.gcc. */ -#include "dbxelf.h" -#include "elfos.h" -#include "svr4.h" - -/* No SDB debugging info. */ -#undef SDB_DEBUGGING_INFO - /* Generate DWARF2 debugging information and make it the default */ #undef DWARF2_DEBUGGING_INFO #define DWARF2_DEBUGGING_INFO 1 @@ -82,7 +62,7 @@ Boston, MA 02111-1307, USA. */ /* Let code know that this is ELF. */ -#define CPP_PREDEFINES "-D__sh__ -D__ELF__ -Acpu=sh -Amachine=sh" +#define TARGET_OBJFMT_CPP_BUILTINS() builtin_define ("__ELF__") #undef SIZE_TYPE #define SIZE_TYPE (TARGET_SH5 ? "long unsigned int" : "unsigned int") @@ -97,15 +77,13 @@ Boston, MA 02111-1307, USA. */ %{m5-64media:--isa=SHmedia --abi=64} %{m5-64media-nofpu:--isa=SHmedia --abi=64}" #undef LINK_SPEC -#define LINK_SPEC " \ -%{m5-compact:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-compact-nofpu:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-32media:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-32media-nofpu:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-64media:%{!ml:-m shelf64} %{ml:-m shlelf64}} \ -%{m5-64media-nofpu:%{!ml:-m shelf64} %{ml:-m shlelf64}} \ -%{!m5-64media:%{!m5-64media-nofpu:%{!m5-32media:%{!m5-32media-nofpu:%{!m5-compact:%{!m5-compact-nofpu:%{ml:-m shlelf}}}}}}} \ -%{mrelax:-relax}" +#define LINK_SPEC SH_LINK_SPEC +#undef LINK_EMUL_PREFIX +#if TARGET_ENDIAN_DEFAULT == LITTLE_ENDIAN_BIT +#define LINK_EMUL_PREFIX "sh%{!mb:l}elf" +#else +#define LINK_EMUL_PREFIX "sh%{ml:l}elf" +#endif /* svr4.h undefined DBX_REGISTER_NUMBER, so we need to define it again. */ diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h index 999c684..8a3cbaf 100644 --- a/gcc/config/sh/linux.h +++ b/gcc/config/sh/linux.h @@ -25,39 +25,27 @@ Boston, MA 02111-1307, USA. */ #undef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "\ - %{fPIC:-D__PIC__ -D__pic__} \ - %{fpic:-D__PIC__ -D__pic__} \ %{posix:-D_POSIX_SOURCE} \ %{pthread:-D_REENTRANT -D_PTHREADS} \ " -#undef SUBTARGET_CPP_ENDIAN_SPEC -#define SUBTARGET_CPP_ENDIAN_SPEC \ - "%{mb:-D__BIG_ENDIAN__} \ - %{!mb:-D__LITTLE_ENDIAN__}" - -#undef CPP_DEFAULT_CPU_SPEC -#define CPP_DEFAULT_CPU_SPEC "-D__SH3__ -D__sh3__" - - -#undef CPP_PREDEFINES -#define CPP_PREDEFINES "-D__ELF__ -Dunix -D__sh__ -D__gnu_linux__ -Dlinux -Asystem=posix" - -#undef SUBTARGET_ASM_ENDIAN_SPEC -#define SUBTARGET_ASM_ENDIAN_SPEC "%{!mb:-little}" - -#undef CC1_SPEC -#define CC1_SPEC \ - "-musermode %{!mb:-ml} %{!m3e:%{!m4*:%{!m5*:-m3}}}" - -#undef CC1PLUS_SPEC -#define CC1PLUS_SPEC \ - "-musermode %{!mb:-ml} %{!m3e:%{!m4:-m3}}" - -#undef LINK_SPEC -#define LINK_SPEC \ - "%{!mb:-m shlelf_linux} %{mrelax:-relax} \ - %{shared:-shared} \ +#define TARGET_OS_CPP_BUILTINS() \ +do { \ + builtin_define_std ("unix"); \ + builtin_define ("__gnu_linux__"); \ + builtin_define_std ("linux"); \ + builtin_assert ("system=posix"); \ +} while (0) + +#undef TARGET_DEFAULT +#define TARGET_DEFAULT \ + (SH3_BIT|SH2_BIT|SH1_BIT | USERMODE_BIT | TARGET_ENDIAN_DEFAULT) + +#undef SUBTARGET_LINK_EMUL_SUFFIX +#define SUBTARGET_LINK_EMUL_SUFFIX "_linux" +#undef SUBTARGET_LINK_SPEC +#define SUBTARGET_LINK_SPEC \ + "%{shared:-shared} \ %{!static: \ %{rdynamic:-export-dynamic} \ %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \ diff --git a/gcc/config/sh/little.h b/gcc/config/sh/little.h new file mode 100644 index 0000000..ca85f8c --- /dev/null +++ b/gcc/config/sh/little.h @@ -0,0 +1,22 @@ +/* Definition of little endian SH machine for GNU compiler. + + Copyright (C) 2002 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC 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 2, or (at your option) +any later version. + +GNU CC 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 GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#define TARGET_ENDIAN_DEFAULT LITTLE_ENDIAN_BIT diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index b83fd61..e7d8268 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -193,9 +193,6 @@ static tree sh_handle_sp_switch_attribute PARAMS ((tree *, tree, tree, int, bool static tree sh_handle_trap_exit_attribute PARAMS ((tree *, tree, tree, int, bool *)); static void sh_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT)); static void sh_insert_attributes PARAMS ((tree, tree *)); -#ifndef OBJECT_FORMAT_ELF -static void sh_asm_named_section PARAMS ((const char *, unsigned int)); -#endif static int sh_adjust_cost PARAMS ((rtx, rtx, rtx, int)); static int sh_use_dfa_interface PARAMS ((void)); static int sh_issue_rate PARAMS ((void)); @@ -6678,17 +6675,6 @@ sh_can_redirect_branch (branch1, branch2) return 0; } -#ifndef OBJECT_FORMAT_ELF -static void -sh_asm_named_section (name, flags) - const char *name; - unsigned int flags ATTRIBUTE_UNUSED; -{ - /* ??? Perhaps we should be using default_coff_asm_named_section. */ - fprintf (asm_out_file, "\t.section %s\n", name); -} -#endif /* ! OBJECT_FORMAT_ELF */ - /* A C statement (sans semicolon) to update the integer variable COST based on the relationship between INSN that is dependent on DEP_INSN through the dependence LINK. The default is to make no diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index c8e0c08..5995e37 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -32,63 +32,55 @@ Boston, MA 02111-1307, USA. */ /* ??? No longer true. */ extern int code_for_indirect_jump_scratch; -/* Generate SDB debugging information. */ - -#define SDB_DEBUGGING_INFO - -/* Output DBX (stabs) debugging information if doing -gstabs. */ - -#include "dbxcoff.h" - -#define SDB_DELIM ";" - -#define CPP_SPEC " \ -%{m5-64media|m5-64media-nofpu|m5-32media|m5-32media-nofpu:-D__SHMEDIA__=1} \ -%{m5-compact|m5-compact-nofpu:-D__SHMEDIA__=0} \ -%{m5-64media|m5-64media-nofpu:-D__SH5__=64 -D__LONG_MAX__=9223372036854775807L} \ -%{m5-32media|m5-32media-nofpu|m5-compact|m5-compact-nofpu:-D__SH5__=32} \ -%{m5-64media-nofpu|m5-32media-nofpu|m5-compact-nofpu:-D__SH4_NOFPU__} \ -%{m1:-D__sh1__} \ -%{m2:-D__sh2__} \ -%{m3:-D__sh3__} \ -%{m3e:-D__SH3E__} \ -%{m4-single-only:-D__SH4_SINGLE_ONLY__} \ -%{m4-single:-D__SH4_SINGLE__} \ -%{m4-nofpu:-D__sh3__ -D__SH4_NOFPU__} \ -%{m4:-D__SH4__} \ -%{!m1:%{!m2:%{!m3*:%{!m4*:%{!m5*:%(cpp_default_cpu_spec)}}}}} \ -%{mhitachi:-D__HITACHI__} \ -%(subtarget_cpp_spec) \ -%(subtarget_cpp_endian_spec) " - -#ifndef SUBTARGET_CPP_ENDIAN_SPEC -#define SUBTARGET_CPP_ENDIAN_SPEC "%{ml:-D__LITTLE_ENDIAN__}" -#endif - -#ifndef SUBTARGET_CPP_SPEC -#define SUBTARGET_CPP_SPEC "" -#endif - -#ifndef CPP_DEFAULT_CPU_SPEC -#define CPP_DEFAULT_CPU_SPEC "-D__sh1__" -#endif - - -#define EXTRA_SPECS \ - { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \ - { "subtarget_cpp_endian_spec", SUBTARGET_CPP_ENDIAN_SPEC }, \ - { "cpp_default_cpu_spec", CPP_DEFAULT_CPU_SPEC }, \ - { "subtarget_asm_endian_spec", SUBTARGET_ASM_ENDIAN_SPEC }, - -#define CPP_PREDEFINES "-D__sh__ -Acpu=sh -Amachine=sh" - -#define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax}" - -#ifndef SUBTARGET_ASM_ENDIAN_SPEC -#define SUBTARGET_ASM_ENDIAN_SPEC "%{ml:-little}" -#endif - -#define LINK_SPEC "%{ml:-m shl} %{mrelax:-relax}" +#define TARGET_CPU_CPP_BUILTINS() \ +do { \ + builtin_define ("__sh__"); \ + builtin_assert ("cpu=sh"); \ + builtin_assert ("machine=sh"); \ + switch ((int) sh_cpu) \ + { \ + case PROCESSOR_SH1: \ + builtin_define ("__sh1__"); \ + break; \ + case PROCESSOR_SH2: \ + builtin_define ("__sh2__"); \ + break; \ + case PROCESSOR_SH3: \ + builtin_define ("__sh3__"); \ + builtin_define ("__SH3__"); \ + if (TARGET_HARD_SH4) \ + builtin_define ("__SH4_NOFPU__"); \ + break; \ + case PROCESSOR_SH3E: \ + builtin_define (TARGET_HARD_SH4 ? "__SH4_SINGLE_ONLY__" : "__SH3E__"); \ + break; \ + case PROCESSOR_SH4: \ + builtin_define (TARGET_FPU_SINGLE ? "__SH4_SINGLE__" : "__SH4__"); \ + break; \ + case PROCESSOR_SH5: \ + { \ + builtin_define_with_value ("__SH5__", \ + TARGET_SHMEDIA64 ? "64" : "32", 0); \ + builtin_define_with_value ("__SHMEDIA__", \ + TARGET_SHMEDIA ? "1" : "0", 0); \ + if (! TARGET_FPU_DOUBLE) \ + builtin_define ("__SH4_NOFPU__"); \ + if (TARGET_SHMEDIA64) \ + builtin_define_with_value ("__LONG_MAX__", \ + "9223372036854775807L", 0); \ + } \ + } \ + if (TARGET_HITACHI) \ + builtin_define ("__HITACHI__"); \ + builtin_define (TARGET_LITTLE_ENDIAN \ + ? "__LITTLE_ENDIAN__" : "__BIG_ENDIAN__"); \ + if (flag_pic) \ + { \ + builtin_define ("__pic__"); \ + builtin_define ("__PIC__"); \ + } \ + TARGET_OBJFMT_CPP_BUILTINS (); \ +} while (0) /* We can not debug without a frame pointer. */ /* #define CAN_DEBUG_WITHOUT_FP */ @@ -315,7 +307,53 @@ extern int target_flags; /* This are meant to be redefined in the host dependent files */ #define SUBTARGET_SWITCHES -#define TARGET_DEFAULT (SH1_BIT) +/* This defaults us to big-endian. */ +#ifndef TARGET_ENDIAN_DEFAULT +#define TARGET_ENDIAN_DEFAULT 0 +#endif + +#define TARGET_DEFAULT (SH1_BIT|TARGET_ENDIAN_DEFAULT) + +#define CPP_SPEC " %(subtarget_cpp_spec) " + +#ifndef SUBTARGET_CPP_SPEC +#define SUBTARGET_CPP_SPEC "" +#endif + +#define EXTRA_SPECS \ + { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \ + { "link_emul_prefix", LINK_EMUL_PREFIX }, \ + { "link_default_cpu_emul", LINK_DEFAULT_CPU_EMUL }, \ + { "subtarget_link_emul_suffix", SUBTARGET_LINK_EMUL_SUFFIX }, \ + { "subtarget_link_spec", SUBTARGET_LINK_SPEC }, \ + { "subtarget_asm_endian_spec", SUBTARGET_ASM_ENDIAN_SPEC }, + +#define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax}" + +#ifndef SUBTARGET_ASM_ENDIAN_SPEC +#if TARGET_ENDIAN_DEFAULT == LITTLE_ENDIAN_BIT +#define SUBTARGET_ASM_ENDIAN_SPEC "%{mb:-big} %{!mb:-little}" +#else +#define SUBTARGET_ASM_ENDIAN_SPEC "%{ml:-little} %{!ml:-big}" +#endif +#endif + +#define LINK_EMUL_PREFIX "sh%{ml:l}" +#define LINK_DEFAULT_CPU_EMUL "" +#define SUBTARGET_LINK_EMUL_SUFFIX "" +#define SUBTARGET_LINK_SPEC "" + +/* svr4.h redefines LINK_SPEC inappropriately, so go via SH_LINK_SPEC, + so that we can undo the damage without code replication. */ +#define LINK_SPEC SH_LINK_SPEC + +#define SH_LINK_SPEC "\ +-m %(link_emul_prefix)\ +%{m5-compact*|m5-32media*:32}\ +%{m5-64media*:64}\ +%{!m1:%{!m2:%{!m3*:%{!m4*:%{!m5*:%(link_default_cpu_emul)}}}}}\ +%(subtarget_link_emul_suffix) \ +%{mrelax:-relax} %(subtarget_link_spec)" #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) \ do { \ @@ -486,10 +524,6 @@ do { \ && (ALIGN) < FASTEST_ALIGNMENT) \ ? FASTEST_ALIGNMENT : (ALIGN)) -#ifndef MAX_OFILE_ALIGNMENT -#define MAX_OFILE_ALIGNMENT 128 -#endif - /* Make arrays of chars word-aligned for the same reasons. */ #define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ @@ -2686,7 +2720,8 @@ while (0) nor can we indirect via the constant pool. */ #define LEGITIMATE_PIC_OPERAND_P(X) \ (! nonpic_symbol_mentioned_p (X) \ - && (! CONSTANT_POOL_ADDRESS_P (X) \ + && (GET_CODE (X) != SYMBOL_REF \ + || ! CONSTANT_POOL_ADDRESS_P (X) \ || ! nonpic_symbol_mentioned_p (get_pool_constant (X)))) #define SYMBOLIC_CONST_P(X) \ @@ -2758,12 +2793,9 @@ while (0) #define ASM_FILE_START(STREAM) \ output_file_start (STREAM) -#define ASM_FILE_END(STREAM) - #define ASM_APP_ON "" #define ASM_APP_OFF "" #define FILE_ASM_OP "\t.file\n" -#define IDENT_ASM_OP "\t.ident\t" #define SET_ASM_OP "\t.set\t" /* How to change between sections. */ @@ -2810,9 +2842,6 @@ while (0) which could be text or it could be a user defined section. */ #define JUMP_TABLES_IN_TEXT_SECTION 1 -/* Switch into a generic section. */ -#define TARGET_ASM_NAMED_SECTION sh_asm_named_section - #undef DO_GLOBAL_CTORS_BODY #define DO_GLOBAL_CTORS_BODY \ { \ @@ -2915,32 +2944,12 @@ while (0) if ((LOG) != 0) \ fprintf ((FILE), "\t.align %d\n", (LOG)) -/* Output a function label definition. */ -#define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL) \ - ASM_OUTPUT_LABEL((STREAM), (NAME)) - /* Output a globalising directive for a label. */ #define ASM_GLOBALIZE_LABEL(STREAM,NAME) \ (fprintf ((STREAM), "\t.global\t"), \ assemble_name ((STREAM), (NAME)), \ fputc ('\n', (STREAM))) -/* The prefix to add to user-visible assembler symbols. */ - -#define USER_LABEL_PREFIX "_" - -/* The prefix to add to an internally generated label. */ - -#define LOCAL_LABEL_PREFIX "" - -/* Make an internal label into a string. */ -#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \ - sprintf ((STRING), "*%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUM)) - -/* Output an internal label definition. */ -#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ - asm_fprintf ((FILE), "%L%s%d:\n", (PREFIX), (NUM)) - /* #define ASM_OUTPUT_CASE_END(STREAM,NUM,TABLE) */ /* Construct a private name. */ @@ -2988,36 +2997,10 @@ while (0) #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM,VALUE) \ if (TARGET_BIGTABLE) \ - asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); \ + asm_fprintf ((STREAM), "\t.long\t%LL%d\n", (VALUE)); \ else \ - asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); \ - -/* Output various types of constants. */ - -/* Loop alignment is now done in machine_dependent_reorg, so that - branch shortening can know about it. */ - -/* This is how to output an assembler line - that says to advance the location counter by SIZE bytes. */ - -#define ASM_OUTPUT_SKIP(FILE,SIZE) \ - fprintf ((FILE), "\t.space %d\n", (SIZE)) - -/* This says how to output an assembler line - to define a global common symbol. */ - -#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ -( fputs ("\t.comm ", (FILE)), \ - assemble_name ((FILE), (NAME)), \ - fprintf ((FILE), ",%d\n", (SIZE))) - -/* This says how to output an assembler line - to define a local common symbol. */ + asm_fprintf ((STREAM), "\t.word\t%LL%d\n", (VALUE)); -#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ -( fputs ("\t.lcomm ", (FILE)), \ - assemble_name ((FILE), (NAME)), \ - fprintf ((FILE), ",%d\n", (SIZE))) /* A C statement to be executed just prior to the output of assembler code for INSN, to modify the extracted operands so diff --git a/gcc/config/sh/sh64.h b/gcc/config/sh/sh64.h index 1797cd7..0c76218 100644 --- a/gcc/config/sh/sh64.h +++ b/gcc/config/sh/sh64.h @@ -23,9 +23,6 @@ Boston, MA 02111-1307, USA. */ #define TARGET_VERSION \ fputs (" (SuperH SH)", stderr); -#undef CPP_DEFAULT_CPU_SPEC -#define CPP_DEFAULT_CPU_SPEC "-D__SH5__=32 -D__SHMEDIA__" - #undef ASM_SPEC #define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax} \ %{m5-compact*:--isa=SHcompact} \ @@ -34,19 +31,11 @@ Boston, MA 02111-1307, USA. */ %{!m1:%{!m2:%{!m3*:%{!m4*:%{!m5*:--isa=SHmedia --abi=32}}}}} \ " -#undef LINK_SPEC -#define LINK_SPEC " \ -%{m5-compact:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-compact-nofpu:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-32media:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-32media-nofpu:%{!ml:-m shelf32} %{ml:-m shlelf32}} \ -%{m5-64media:%{!ml:-m shelf64} %{ml:-m shlelf64}} \ -%{m5-64media-nofpu:%{!ml:-m shelf64} %{ml:-m shlelf64}} \ -%{!m1:%{!m2:%{!m3:%{!m3e:%{!m4:%{!m4-single:%{!m4-single-only:%{!m4-nofpu:%{!m5-64media:%{!m5-64media-nofpu:%{!m5-32media:%{!m5-32media-nofpu:%{!m5-compact:%{!m5-compact-nofpu:%{!ml:-m shelf32} %{ml:-m shlelf32}}}}}}}}}}}}}}} \ -%{mrelax:-relax}" +#undef LINK_DEFAULT_CPU_EMUL +#define LINK_DEFAULT_CPU_EMUL "32" #undef TARGET_DEFAULT -#define TARGET_DEFAULT (SH5_BIT|SH4_BIT|SH3E_BIT) +#define TARGET_DEFAULT (SH5_BIT|SH4_BIT|SH3E_BIT|TARGET_ENDIAN_DEFAULT) #undef SH_ELF_WCHAR_TYPE #define SH_ELF_WCHAR_TYPE "int" diff --git a/gcc/config/sh/t-be b/gcc/config/sh/t-be new file mode 100644 index 0000000..849d585 --- /dev/null +++ b/gcc/config/sh/t-be @@ -0,0 +1 @@ +MULTILIB_OPTIONS= ml diff --git a/gcc/config/sh/t-le b/gcc/config/sh/t-le new file mode 100644 index 0000000..b4b0dfa --- /dev/null +++ b/gcc/config/sh/t-le @@ -0,0 +1 @@ +MULTILIB_OPTIONS= mb diff --git a/gcc/config/sh/t-linux b/gcc/config/sh/t-linux index a0343b4..74c52cf 100644 --- a/gcc/config/sh/t-linux +++ b/gcc/config/sh/t-linux @@ -3,7 +3,7 @@ LIB1ASMFUNCS_CACHE = _ic_invalidate LIB2FUNCS_EXTRA= -MULTILIB_OPTIONS= mb m3e/m4 +MULTILIB_OPTIONS += m3e/m4 MULTILIB_DIRNAMES= MULTILIB_MATCHES = |