--- gcc/config/i386sco.h 2018/04/24 17:51:38 1.1 +++ gcc/config/i386sco.h 2018/04/24 18:06:12 1.1.1.4 @@ -5,12 +5,24 @@ #include "i386v.h" +/* By default, target has a 80387, uses IEEE compatible arithmetic, + and returns float values in the 387, ie, + (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387) + + SCO's software emulation of a 387 fails to handle the `fucomp' + opcode. fucomp is only used when generating IEEE compliant code. + So don't make TARGET_IEEE_FP default for SCO. */ + +#undef TARGET_DEFAULT +#define TARGET_DEFAULT 0201 + /* Use crt1.o as a startup file and crtn.o as a closing file. */ #undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}" +#define STARTFILE_SPEC \ + "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}} crtbegin.o%s" -#define ENDFILE_SPEC "crtn.o%s" +#define ENDFILE_SPEC "crtend.o%s crtn.o%s" /* Library spec, including SCO international language support. */ @@ -23,8 +35,27 @@ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dunix -Di386 -DM_UNIX -DM_I386 -DM_COFF -DM_WORDSWAP" +#undef CPP_SPEC #define CPP_SPEC "%{scointl:-DM_INTERNAT}" +/* This spec is used for telling cpp whether char is signed or not. */ + +#undef SIGNED_CHAR_SPEC +#if DEFAULT_SIGNED_CHAR +#define SIGNED_CHAR_SPEC \ + "%{funsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" +#else +#define SIGNED_CHAR_SPEC \ + "%{!fsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" +#endif + +/* Use atexit for static destructors, instead of defining + our own exit function. */ +#define HAVE_ATEXIT + +/* Specify the size_t type. */ +#define SIZE_TYPE "unsigned int" + #if 0 /* Not yet certain whether this is needed. */ /* If no 387, use the general regs to return floating values, since this system does not emulate the 80387. */ @@ -42,3 +73,17 @@ && GET_MODE_UNIT_SIZE (MODE) <= 8) \ : (MODE) != QImode) #endif + +/* caller has to pop the extra argument passed to functions that return + structures. */ + +#undef RETURN_POPS_ARGS +#define RETURN_POPS_ARGS(FUNTYPE,SIZE) \ + (TREE_CODE (FUNTYPE) == IDENTIFIER_NODE ? 0 \ + : (TARGET_RTD \ + && (TYPE_ARG_TYPES (FUNTYPE) == 0 \ + || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \ + == void_type_node))) ? (SIZE) \ + : 0) +/* On other 386 systems, the last line looks like this: + : (aggregate_value_p (FUNTYPE)) ? GET_MODE_SIZE (Pmode) : 0) */