home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 7
/
FreshFishVol7.bin
/
bbs
/
gnu
/
gcc-2.3.3-src.lha
/
GNU
/
src
/
amiga
/
gcc-2.3.3
/
config
/
next.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-02-06
|
15KB
|
460 lines
/* next.h: definitions for NeXT.
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, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "m68k.h"
/* Use new NeXT include file search path. */
#ifndef CROSS_COMPILE /* In a cross compiler with NeXT as target, don't expect
the host to use Next's directory scheme. */
#define INCLUDE_DEFAULTS \
{ \
{ GPLUSPLUS_INCLUDE_DIR, 1}, \
{ GCC_INCLUDE_DIR, 0}, \
{ LOCAL_INCLUDE_DIR, 0}, \
{ "/NextDeveloper/Headers", 0}, \
{ "/NextDeveloper/Headers/ansi", 0}, \
{ "/NextDeveloper/Headers/bsd", 0}, \
{ "/LocalDeveloper/Headers", 0}, \
{ "/LocalDeveloper/Headers/ansi", 0}, \
{ "/LocalDeveloper/Headers/bsd", 0}, \
{ "/NextDeveloper/2.0CompatibleHeaders", 0}, \
{ STANDARD_INCLUDE_DIR, 0}, \
{ 0, 0} \
}
#endif /* CROSS_COMPILE */
#define EXTRA_FORMAT_FUNCTIONS \
"NXPrintf", FALSE, 2, FALSE, \
"NXScanf", TRUE, 2, FALSE, \
"NXVPrintf", FALSE, 2, TRUE, \
"NXVScanf", TRUE, 2, TRUE, \
"DPSPrintf", FALSE, 2, FALSE, \
"bsd_sprintf", FALSE, 2, FALSE, \
"bsd_vsprintf", FALSE, 2, TRUE,
/* Use NeXT's special calling convention for sending an Objc message. */
#define NEXT_OBJC_RUNTIME
/* We have atexit. */
#define HAVE_ATEXIT
/* Enable recent gcc to compile under the old gcc in Next release 1.0. */
#define __inline inline
/* See m68k.h. 0407 means 68040 (or 68030 or 68020, with 68881/2). */
#define TARGET_DEFAULT 0407
/* wchar_t is unsigned short */
#undef WCHAR_TYPE
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE "short unsigned int"
#define WCHAR_TYPE_SIZE (BITS_PER_WORD / 2)
/* Give methods pretty symbol names on NeXT. */
#define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME) \
do { if (CAT_NAME) \
sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \
(CLASS_NAME), (CAT_NAME), (SEL_NAME)); \
else \
sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \
(CLASS_NAME), (SEL_NAME)); \
} while (0)
/* Wrap new method names in quotes so the assembler doesn't gag.
Make Objective-C internal symbols local. */
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE,NAME) \
do { if (NAME[0] == '+' || NAME[0] == '-') fprintf (FILE, "\"%s\"", NAME); \
else if (!strncmp (NAME, "_OBJC_", 6)) fprintf (FILE, "L%s", NAME); \
else if (!strncmp (NAME, ".objc_class_name_", 17)) \
fprintf (FILE, "%s", NAME); \
else fprintf (FILE, "_%s", NAME); } while (0)
#undef STACK_BOUNDARY
/* Boundary (in *bits*) on which stack pointer should be aligned. */
#define STACK_BOUNDARY 32
/* These compiler options take n arguments. */
#define WORD_SWITCH_TAKES_ARG(STR) \
(!strcmp (STR, "Ttext") ? 1 : \
!strcmp (STR, "Tdata") ? 1 : \
!strcmp (STR, "Tbss") ? 1 : \
!strcmp (STR, "include") ? 1 : \
!strcmp (STR, "imacros") ? 1 : \
!strcmp (STR, "segalign") ? 1 : \
!strcmp (STR, "seg1addr") ? 1 : \
!strcmp (STR, "segaddr") ? 2 : \
!strcmp (STR, "sectobjectsymbols") ? 2 : \
!strcmp (STR, "segprot") ? 3 : \
!strcmp (STR, "sectcreate") ? 3 : \
!strcmp (STR, "sectalign") ? 3 : \
!strcmp (STR, "segcreate") ? 3 : \
!strcmp (STR, "sectorder") ? 3 : \
!strcmp (STR, "aux-info") ? 1 : \
0)
/* Names to predefine in the preprocessor for this target machine. */
#define CPP_PREDEFINES "-Dmc68000 -Dm68k -DNeXT -Dunix -D__MACH__ -D__ARCHITECTURE__=\"m68k\""
/* Machine dependent ccp options. */
/* This option used to be called -bsd, but that conflicts with the
general -b option. */
#define CPP_SPEC "%{strict-bsd:-D__STRICT_BSD__}"
/* Machine dependent ld options. */
#define LINK_SPEC "%{Z} %{M} \
%{execute*} %{object*} %{preload*} %{fvmlib*} \
%{segalign*} %{seg1addr*} %{segaddr*} %{segprot*} \
%{seglinkedit*} %{noseglinkedit*} \
%{sectcreate*} %{sectalign*} %{sectobjectsymbols}\
%{segcreate*} %{Mach*} %{whyload} %{w} \
%{sectorder*} %{whatsloaded}"
/* Machine dependent libraries. */
#define LIB_SPEC "%{!p:%{!pg:-lsys_s}} %{pg:-lsys_p}"
/* We specify crt0.o as -lcrt0.o so that ld will search the library path. */
#define STARTFILE_SPEC \
"%{pg:-lgcrt0.o}%{!pg: \
%{p:%e-p profiling is no longer supported. Use -pg instead.} \
%{!p:-lcrt0.o}}"
/* Every structure or union's size must be a multiple of 2 bytes.
(Why isn't this in m68k.h?) */
#define STRUCTURE_SIZE_BOUNDARY 16
/* Why not? */
#define DOLLARS_IN_IDENTIFIERS 2
/* Allow #sscs (but don't do anything). */
#define SCCS_DIRECTIVE
/* We use Dbx symbol format. */
#define DBX_DEBUGGING_INFO
/* This saves a fair amount of space. */
#define DBX_CONTIN_LENGTH 0
/* These screw up NeXT's gdb at the moment, so don't use them. */
#define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(FILE, FILENAME)
/* gdb needs a null N_SO at the end of each file for scattered loading. */
#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
fprintf (FILE, \
"\t.text\n\t.stabs \"%s\",%d,0,0,Letext\nLetext:\n", \
"" , N_SO)
/* Don't use .gcc_compiled symbols to communicate with GDB;
They interfere with numerically sorted symbol lists. */
#define ASM_IDENTIFY_GCC(asm_out_file)
/* This is how to output an assembler line defining a `double' constant. */
#undef ASM_OUTPUT_DOUBLE
#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
(REAL_VALUE_ISINF ((VALUE)) \
? fprintf (FILE, "\t.double 0r%s99e999\n", ((VALUE) > 0 ? "" : "-")) \
: fprintf (FILE, "\t.double 0r%.20e\n", (VALUE)))
/* This is how to output an assembler line defining a `float' constant. */
#undef ASM_OUTPUT_FLOAT
#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
(REAL_VALUE_ISINF ((VALUE)) \
? fprintf (FILE, "\t.single 0r%s99e999\n", ((VALUE) > 0 ? "" : "-")) \
: fprintf (FILE, "\t.single 0r%.20e\n", (VALUE)))
#undef ASM_OUTPUT_FLOAT_OPERAND
#define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE) \
(REAL_VALUE_ISINF ((VALUE)) \
? fprintf (FILE, "#0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
: fprintf (FILE, "#0r%.9g", (VALUE)))
#undef ASM_OUTPUT_DOUBLE_OPERAND
#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
(REAL_VALUE_ISINF ((VALUE)) \
? fprintf (FILE, "#0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
: fprintf (FILE, "#0r%.20g", (VALUE)))
#if 0 /* This is for system verson 3.0, which isn't out yet. */
#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
do { constructor_section (); \
ASM_OUTPUT_ALIGN (FILE, 1); \
fprintf (FILE, "\t.long "); \
assemble_name (FILE, NAME); \
fprintf (FILE, "\n"); } while (0)
#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
do { destructor_section (); \
ASM_OUTPUT_ALIGN (FILE, 1); \
fprintf (FILE, "\t.long "); \
assemble_name (FILE, NAME); \
fprintf (FILE, "\n"); } while (0)
#endif
/* How to parse #pragma's */
#define HANDLE_PRAGMA(finput) handle_pragma (finput)
/* Create new Mach-O sections. */
#define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, WAS_TEXT) \
void \
FUNCTION () \
{ \
extern void text_section (); \
extern int flag_no_mach_text_sections; \
\
if (WAS_TEXT && flag_no_mach_text_sections) \
text_section (); \
else if (in_section != SECTION) \
{ \
fprintf (asm_out_file, "%s\n", DIRECTIVE); \
in_section = SECTION; \
} \
} \
#define EXTRA_SECTIONS \
in_const, in_cstring, in_literal4, in_literal8, \
in_constructor, in_destructor, \
in_objc_class, in_objc_meta_class, in_objc_