diff options
Diffstat (limited to 'gcc/config/rs6000')
-rw-r--r-- | gcc/config/rs6000/beos.h | 124 | ||||
-rw-r--r-- | gcc/config/rs6000/t-beos | 51 | ||||
-rw-r--r-- | gcc/config/rs6000/x-beos | 9 | ||||
-rw-r--r-- | gcc/config/rs6000/xm-beos.h | 89 |
4 files changed, 273 insertions, 0 deletions
diff --git a/gcc/config/rs6000/beos.h b/gcc/config/rs6000/beos.h new file mode 100644 index 00000000000..851601ff2b8 --- /dev/null +++ b/gcc/config/rs6000/beos.h @@ -0,0 +1,124 @@ +/* Definitions of target machine for GNU compiler, for BeOS. + Copyright (C) 1997 Free Software Foundation, Inc. + Contributed by Fred Fish (fnf@cygnus.com), based on aix41.h + from David Edelsohn (edelsohn@npac.syr.edu). + +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. */ + + +/* Enable AIX XL compiler calling convention breakage compatibility. */ +#define MASK_XL_CALL 0x40000000 +#define TARGET_XL_CALL (target_flags & MASK_XL_CALL) +#undef SUBTARGET_SWITCHES +#define SUBTARGET_SWITCHES \ + {"xl-call", MASK_XL_CALL}, \ + {"no-xl-call", - MASK_XL_CALL}, \ + {"threads", 0}, \ + {"pe", 0}, + +#include "rs6000/rs6000.h" + +#undef ASM_SPEC +#define ASM_SPEC "-u %(asm_cpu)" + +#undef CPP_PREDEFINES +/* __POWERPC__ must be defined for some header files */ +#define CPP_PREDEFINES "-D__BEOS__ -D__POWERPC__ -Asystem(beos) -Acpu(powerpc) -Amachine(powerpc)" + +#undef CPP_SPEC +#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_cpu)" + +#undef CPP_DEFAULT_SPEC +#define CPP_DEFAULT_SPEC "-D_ARCH_PPC" + +/* This is the easiest way to disable use of gcc's builtin alloca, + which in the current BeOS release (DR9) is a problem because of the + relatively low default stack size of 256K with no way to expand it. + So anything we compile for the BeOS target should not use the + builtin alloca. This also has the unwanted side effect of + disabling all builtin functions though. */ + +#undef CC1_SPEC +#define CC1_SPEC "%{!fbuiltin: -fno-builtin}" +#undef CC1PLUS_SPEC +#define CC1PLUS_SPEC "%{!fbuiltin: -fno-builtin}" + +#undef ASM_DEFAULT_SPEC +#define ASM_DEFAULT_SPEC "-mppc" + +#undef TARGET_DEFAULT +#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS) + +#undef PROCESSOR_DEFAULT +#define PROCESSOR_DEFAULT PROCESSOR_PPC603 + +/* Define this macro as a C expression for the initializer of an + array of string to tell the driver program which options are + defaults for this target and thus do not need to be handled + specially when using `MULTILIB_OPTIONS'. + + Do not define this macro if `MULTILIB_OPTIONS' is not defined in + the target makefile fragment or if none of the options listed in + `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */ + +#undef MULTILIB_DEFAULTS +#define MULTILIB_DEFAULTS { "mcpu=powerpc" } + +/* These are not necessary when we pass -u to the assembler, and undefining + them saves a great deal of space in object files. */ + +#undef ASM_OUTPUT_EXTERNAL +#undef ASM_OUTPUT_EXTERNAL_LIBCALL +#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ +{ rtx _symref = XEXP (DECL_RTL (DECL), 0); \ + if ((TREE_CODE (DECL) == VAR_DECL \ + || TREE_CODE (DECL) == FUNCTION_DECL) \ + && (NAME)[strlen (NAME) - 1] != ']') \ + { \ + char *_name = (char *) permalloc (strlen (XSTR (_symref, 0)) + 5); \ + strcpy (_name, XSTR (_symref, 0)); \ + strcat (_name, TREE_CODE (DECL) == FUNCTION_DECL ? "[DS]" : "[RW]"); \ + XSTR (_symref, 0) = _name; \ + } \ +} + +/* These empty definitions get rid of the attempt to link in crt0.o + and any libraries like libc.a. + On BeOS the ld executable is actually a linker front end that first runs + the GNU linker with the -r option to generate a relocatable XCOFF output + file, and then runs Metrowork's linker (mwld) to generate a fully linked + executable. */ + +#undef LIB_SPEC +#define LIB_SPEC "" + +#undef LINK_SPEC +#define LINK_SPEC "" + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC "" + +/* Text to write out after a CALL that may be replaced by glue code by + the loader. */ + +#undef RS6000_CALL_GLUE +#define RS6000_CALL_GLUE "cror 15,15,15" + +/* Struct alignments are done on 4 byte boundaries for all types. */ +#undef BIGGEST_FIELD_ALIGNMENT +#define BIGGEST_FIELD_ALIGNMENT 32 diff --git a/gcc/config/rs6000/t-beos b/gcc/config/rs6000/t-beos new file mode 100644 index 00000000000..1436108ab14 --- /dev/null +++ b/gcc/config/rs6000/t-beos @@ -0,0 +1,51 @@ +# Do not build libgcc1. +LIBGCC1 = +CROSS_LIBGCC1 = + +# These are really part of libgcc1, but this will cause them to be +# built correctly, so... [taken from t-sparclite] +LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c + +dp-bit.c: $(srcdir)/config/fp-bit.c + cat $(srcdir)/config/fp-bit.c > dp-bit.c + +fp-bit.c: $(srcdir)/config/fp-bit.c + echo '#define FLOAT' > fp-bit.c + cat $(srcdir)/config/fp-bit.c >> fp-bit.c + +# Build the libraries for both hard and soft floating point + +MULTILIB_OPTIONS = msoft-float mcpu=common +MULTILIB_DIRNAMES = soft-float common + +LIBGCC = stmp-multilib +INSTALL_LIBGCC = install-multilib + +# This is probably the correct define, to override the Makefile +# default, but using it causes more problems than it solves. +# +# Using it will cause fixincludes to try and fix some of the +# mwcc header files, which it seems to do a poor job of. On +# the other hand, not using it will only cause the gcc version +# of limits.h to lack the header and trailer parts that are +# tacked on to it when there is a limits.h in the system header +# dir. +# +# For now it is probably better to change the rule for +# LIMITS_H_TEST to explicitly look for the BeOS limits.h. +# If the gcc limits.h is not set up to #include_next the +# BeOS limits.h, then some things will go undefined, like +# PATH_MAX. + +#SYSTEM_HEADER_DIR=/boot/develop/headers/posix +# Test to see whether <limits.h> exists in the system header files. +LIMITS_H_TEST = [ -f /boot/develop/headers/posix/limits.h ] + +# Aix 3.2.x needs milli.exp for -mcpu=common +EXTRA_PARTS = milli.exp +milli.exp: $(srcdir)/config/rs6000/milli.exp + rm -f milli.exp + cp $(srcdir)/config/rs6000/milli.exp ./milli.exp + +# Don't use collect. +USE_COLLECT2 = diff --git a/gcc/config/rs6000/x-beos b/gcc/config/rs6000/x-beos new file mode 100644 index 00000000000..37b8ccac9cf --- /dev/null +++ b/gcc/config/rs6000/x-beos @@ -0,0 +1,9 @@ +# configuration for BeOS +INSTALL=install -c + +# Show we need to use the C version of ALLOCA +ALLOCA=alloca.o +# Use it regardless of whether we are compiling with gcc or not. +USE_ALLOCA= `echo "${ALLOCA}"` +USE_HOST_ALLOCA= `echo ${HOST_PREFIX}${HOST_ALLOCA}` +SUBDIR_USE_ALLOCA = `if [ x$(ALLOCA) != x ]; then echo ../$(ALLOCA); else true; fi` diff --git a/gcc/config/rs6000/xm-beos.h b/gcc/config/rs6000/xm-beos.h new file mode 100644 index 00000000000..681aa73bcc6 --- /dev/null +++ b/gcc/config/rs6000/xm-beos.h @@ -0,0 +1,89 @@ +/* Configuration for GNU C-compiler for BeOS host. + Copyright (C) 1997 Free Software Foundation, Inc. + Contributed by Fred Fish (fnf@cygnus.com), based on xm-rs6000.h + by Richard Kenner (kenner@vlsi1.ultra.nyu.edu). + + +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. */ + + +/* #defines that need visibility everywhere. */ + +#define FALSE 0 +#define TRUE 1 + +/* This describes the machine the compiler is hosted on. */ + +#define HOST_BITS_PER_CHAR 8 +#define HOST_BITS_PER_SHORT 16 +#define HOST_BITS_PER_INT 32 +#define HOST_BITS_PER_LONG 32 +#define HOST_BITS_PER_LONGLONG 64 + +#define HOST_WORDS_BIG_ENDIAN + +/* target machine dependencies. + tm.h is a symbolic link to the actual target specific file. */ + +#include "tm.h" + +/* Arguments to use with `exit'. */ + +#define SUCCESS_EXIT_CODE 0 +#define FATAL_EXIT_CODE 33 + +/* Use the C alloca and use only int bitfields. */ + +#define USE_C_ALLOCA +extern void *alloca (); +#define ONLY_INT_FIELDS + +/* use ANSI/SYSV style byte manipulation routines instead of BSD ones */ + +#undef bcopy +#define bcopy(s,d,n) memmove((d),(s),(n)) +#undef bzero +#define bzero(d,n) memset((d),0,(n)) +#undef bcmp +#define bcmp(l,r,n) memcmp((l),(r),(n)) +#undef index +#define index strchr +#undef rindex +#define rindex strrchr + +/* BeOS is closer to USG than BSD */ + +#define USG + +/* Define various things that the BeOS host has. */ + +#define HAVE_VPRINTF +#define HAVE_PUTENV +#define HAVE_ATEXIT +#define HAVE_RENAME + +#define STDC_HEADERS 1 + +/* STANDARD_INCLUDE_DIR is the equivalent of "/usr/include" on UNIX. */ + +#define STANDARD_INCLUDE_DIR "/boot/develop/headers/posix" + +/* SYSTEM_INCLUDE_DIR is the location for system specific, non-POSIX headers. */ + +#define SYSTEM_INCLUDE_DIR "/boot/develop/headers/be" + |