i386-interix.h revision 96263
152284Sobrien/* Target definitions for GNU compiler for Intel 80386 running Interix 290075Sobrien Parts Copyright (C) 1991, 1999, 2000 Free Software Foundation, Inc. 352284Sobrien 452284Sobrien Parts: 552284Sobrien by Douglas B. Rupp (drupp@cs.washington.edu). 652284Sobrien by Ron Guilmette (rfg@netcom.com). 752284Sobrien by Donn Terry (donn@softway.com). 852284Sobrien by Mumit Khan (khan@xraylith.wisc.edu). 952284Sobrien 1052284SobrienThis file is part of GNU CC. 1152284Sobrien 1252284SobrienGNU CC is free software; you can redistribute it and/or modify 1352284Sobrienit under the terms of the GNU General Public License as published by 1452284Sobrienthe Free Software Foundation; either version 2, or (at your option) 1552284Sobrienany later version. 1652284Sobrien 1752284SobrienGNU CC is distributed in the hope that it will be useful, 1852284Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1952284SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2052284SobrienGNU General Public License for more details. 2152284Sobrien 2252284SobrienYou should have received a copy of the GNU General Public License 2352284Sobrienalong with GNU CC; see the file COPYING. If not, write to 2452284Sobrienthe Free Software Foundation, 59 Temple Place - Suite 330, 2552284SobrienBoston, MA 02111-1307, USA. */ 2652284Sobrien 2752284Sobrien#define YES_UNDERSCORES 2852284Sobrien 2990075Sobrien/* YES_UNDERSCORES must precede gas.h */ 3052284Sobrien#include <i386/gas.h> 3190075Sobrien/* The rest must follow. */ 3252284Sobrien 3352284Sobrien#define DBX_DEBUGGING_INFO 3452284Sobrien#define SDB_DEBUGGING_INFO 3552284Sobrien#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG 3652284Sobrien 3752284Sobrien#define HANDLE_SYSV_PRAGMA 3852284Sobrien#undef HANDLE_PRAGMA_WEAK /* until the link format can handle it */ 3952284Sobrien 4052284Sobrien/* By default, target has a 80387, uses IEEE compatible arithmetic, 4152284Sobrien and returns float values in the 387 and needs stack probes 4290075Sobrien We also align doubles to 64-bits for MSVC default compatibility */ 4390075Sobrien#undef TARGET_SUBTARGET_DEFAULT 4490075Sobrien#define TARGET_SUBTARGET_DEFAULT \ 4552284Sobrien (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE | \ 4652284Sobrien MASK_ALIGN_DOUBLE) 4752284Sobrien 4852284Sobrien#undef TARGET_CPU_DEFAULT 4952284Sobrien#define TARGET_CPU_DEFAULT 2 /* 486 */ 5052284Sobrien 5152284Sobrien#define WCHAR_UNSIGNED 1 5252284Sobrien#define WCHAR_TYPE_SIZE 16 5352284Sobrien#define WCHAR_TYPE "short unsigned int" 5452284Sobrien 5552284Sobrien/* WinNT (and thus Interix) use unsigned int */ 5652284Sobrien#define SIZE_TYPE "unsigned int" 5752284Sobrien 5852284Sobrien#define ASM_LOAD_ADDR(loc, reg) " leal " #loc "," #reg "\n" 5952284Sobrien 6052284Sobrien/* cpp handles __STDC__ */ 6152284Sobrien#undef CPP_PREDEFINES 6252284Sobrien#define CPP_PREDEFINES " \ 6352284Sobrien -D__INTERIX \ 6452284Sobrien -D__OPENNT \ 6552284Sobrien -D_M_IX86=300 -D_X86_=1 \ 6652284Sobrien -D__stdcall=__attribute__((__stdcall__)) \ 6752284Sobrien -D__cdecl=__attribute__((__cdecl__)) \ 6896263Sobrien -D__declspec(x)=__attribute__((x)) \ 6990075Sobrien -Asystem=unix -Asystem=interix" 7052284Sobrien 7152284Sobrien#undef CPP_SPEC 7252284Sobrien/* Write out the correct language type definition for the header files. 7352284Sobrien Unless we have assembler language, write out the symbols for C. 7452284Sobrien cpp_cpu is an Intel specific variant. See i386.h 7552284Sobrien mieee is an Alpha specific variant. Cross polination a bad idea. 7652284Sobrien */ 7752284Sobrien#define CPP_SPEC "\ 7852284Sobrien%{!.S: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}} \ 7952284Sobrien%{.S: -D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \ 8052284Sobrien%{.cc: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \ 8152284Sobrien%{.cxx: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \ 8252284Sobrien%{.C: -D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \ 8352284Sobrien%{.m: -D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C} \ 8452284Sobrien-remap \ 8552284Sobrien%(cpp_cpu) \ 8652284Sobrien%{posix:-D_POSIX_SOURCE} \ 8790075Sobrien-isystem %$INTERIX_ROOT/usr/include" 8852284Sobrien 8952284Sobrien#undef TARGET_VERSION 9052284Sobrien#define TARGET_VERSION fprintf (stderr, " (i386 Interix)"); 9152284Sobrien 9252284Sobrien/* The global __fltused is necessary to cause the printf/scanf routines 9352284Sobrien for outputting/inputting floating point numbers to be loaded. Since this 9490075Sobrien is kind of hard to detect, we just do it all the time. */ 9552284Sobrien 9652284Sobrien#ifdef ASM_FILE_START 9752284Sobrien#undef ASM_FILE_START 9852284Sobrien#endif 9952284Sobrien#define ASM_FILE_START(FILE) \ 10052284Sobrien do { fprintf (FILE, "\t.file\t"); \ 10152284Sobrien output_quoted_string (FILE, dump_base_name); \ 10252284Sobrien fprintf (FILE, "\n"); \ 10352284Sobrien fprintf (FILE, ".global\t__fltused\n"); \ 10452284Sobrien } while (0) 10552284Sobrien 10652284Sobrien/* A table of bytes codes used by the ASM_OUTPUT_ASCII and 10752284Sobrien ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table 10852284Sobrien corresponds to a particular byte value [0..255]. For any 10952284Sobrien given byte value, if the value in the corresponding table 11052284Sobrien position is zero, the given character can be output directly. 11152284Sobrien If the table value is 1, the byte must be output as a \ooo 11252284Sobrien octal escape. If the tables value is anything else, then the 11352284Sobrien byte value should be output as a \ followed by the value 11452284Sobrien in the table. Note that we can use standard UN*X escape 11552284Sobrien sequences for many control characters, but we don't use 11652284Sobrien \a to represent BEL because some svr4 assemblers (e.g. on 11752284Sobrien the i386) don't know about that. Also, we don't use \v 11852284Sobrien since some versions of gas, such as 2.2 did not accept it. */ 11952284Sobrien 12052284Sobrien#define ESCAPES \ 12152284Sobrien"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ 12252284Sobrien\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ 12352284Sobrien\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\ 12452284Sobrien\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\ 12552284Sobrien\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ 12652284Sobrien\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ 12752284Sobrien\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ 12852284Sobrien\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" 12952284Sobrien 13052284Sobrien/* Some svr4 assemblers have a limit on the number of characters which 13152284Sobrien can appear in the operand of a .string directive. If your assembler 13252284Sobrien has such a limitation, you should define STRING_LIMIT to reflect that 13352284Sobrien limit. Note that at least some svr4 assemblers have a limit on the 13452284Sobrien actual number of bytes in the double-quoted string, and that they 13552284Sobrien count each character in an escape sequence as one byte. Thus, an 13652284Sobrien escape sequence like \377 would count as four bytes. 13752284Sobrien 13852284Sobrien If your target assembler doesn't support the .string directive, you 13952284Sobrien should define this to zero. 14052284Sobrien*/ 14152284Sobrien 14252284Sobrien#define STRING_LIMIT ((unsigned) 256) 14352284Sobrien 14490075Sobrien#define STRING_ASM_OP "\t.string\t" 14552284Sobrien 14652284Sobrien/* The routine used to output NUL terminated strings. We use a special 14752284Sobrien version of this for most svr4 targets because doing so makes the 14852284Sobrien generated assembly code more compact (and thus faster to assemble) 14952284Sobrien as well as more readable, especially for targets like the i386 15052284Sobrien (where the only alternative is to output character sequences as 15152284Sobrien comma separated lists of numbers). */ 15252284Sobrien 15352284Sobrien#define ASM_OUTPUT_LIMITED_STRING(FILE, STR) \ 15452284Sobrien do \ 15552284Sobrien { \ 15690075Sobrien register const unsigned char *_limited_str = \ 15790075Sobrien (const unsigned char *) (STR); \ 15852284Sobrien register unsigned ch; \ 15990075Sobrien fprintf ((FILE), "%s\"", STRING_ASM_OP); \ 16052284Sobrien for (; (ch = *_limited_str); _limited_str++) \ 16152284Sobrien { \ 16252284Sobrien register int escape = ESCAPES[ch]; \ 16352284Sobrien switch (escape) \ 16452284Sobrien { \ 16552284Sobrien case 0: \ 16652284Sobrien putc (ch, (FILE)); \ 16752284Sobrien break; \ 16852284Sobrien case 1: \ 16952284Sobrien fprintf ((FILE), "\\%03o", ch); \ 17052284Sobrien break; \ 17152284Sobrien default: \ 17252284Sobrien putc ('\\', (FILE)); \ 17352284Sobrien putc (escape, (FILE)); \ 17452284Sobrien break; \ 17552284Sobrien } \ 17652284Sobrien } \ 17752284Sobrien fprintf ((FILE), "\"\n"); \ 17852284Sobrien } \ 17952284Sobrien while (0) 18052284Sobrien 18152284Sobrien/* The routine used to output sequences of byte values. We use a special 18252284Sobrien version of this for most svr4 targets because doing so makes the 18352284Sobrien generated assembly code more compact (and thus faster to assemble) 18452284Sobrien as well as more readable. Note that if we find subparts of the 18552284Sobrien character sequence which end with NUL (and which are shorter than 18652284Sobrien STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING. */ 18752284Sobrien 18852284Sobrien#undef ASM_OUTPUT_ASCII 18952284Sobrien#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ 19052284Sobrien do \ 19152284Sobrien { \ 19290075Sobrien register const unsigned char *_ascii_bytes = \ 19390075Sobrien (const unsigned char *) (STR); \ 19490075Sobrien register const unsigned char *limit = _ascii_bytes + (LENGTH); \ 19552284Sobrien register unsigned bytes_in_chunk = 0; \ 19652284Sobrien for (; _ascii_bytes < limit; _ascii_bytes++) \ 19752284Sobrien { \ 19890075Sobrien register const unsigned char *p; \ 19952284Sobrien if (bytes_in_chunk >= 64) \ 20052284Sobrien { \ 20152284Sobrien fputc ('\n', (FILE)); \ 20252284Sobrien bytes_in_chunk = 0; \ 20352284Sobrien } \ 20452284Sobrien for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ 20552284Sobrien continue; \ 20690075Sobrien if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ 20752284Sobrien { \ 20852284Sobrien if (bytes_in_chunk > 0) \ 20952284Sobrien { \ 21052284Sobrien fputc ('\n', (FILE)); \ 21152284Sobrien bytes_in_chunk = 0; \ 21252284Sobrien } \ 21352284Sobrien ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \ 21452284Sobrien _ascii_bytes = p; \ 21552284Sobrien } \ 21652284Sobrien else \ 21752284Sobrien { \ 21852284Sobrien if (bytes_in_chunk == 0) \ 21952284Sobrien fprintf ((FILE), "\t.byte\t"); \ 22052284Sobrien else \ 22152284Sobrien fputc (',', (FILE)); \ 22252284Sobrien fprintf ((FILE), "0x%02x", *_ascii_bytes); \ 22352284Sobrien bytes_in_chunk += 5; \ 22452284Sobrien } \ 22552284Sobrien } \ 22652284Sobrien if (bytes_in_chunk > 0) \ 22752284Sobrien fprintf ((FILE), "\n"); \ 22852284Sobrien } \ 22952284Sobrien while (0) 23052284Sobrien 23152284Sobrien/* Emit code to check the stack when allocating more that 4000 23290075Sobrien bytes in one go. */ 23352284Sobrien 23452284Sobrien#define CHECK_STACK_LIMIT 0x1000 23552284Sobrien 23652284Sobrien/* the following are OSF linker (not gld) specific... we don't want them */ 23752284Sobrien#undef HAS_INIT_SECTION 23852284Sobrien#undef LD_INIT_SWITCH 23952284Sobrien#undef LD_FINI_SWITCH 24052284Sobrien 24196263Sobrien#define EH_FRAME_IN_DATA_SECTION 24252284Sobrien 24390075Sobrien/* Note that there appears to be two different ways to support const 24452284Sobrien sections at the moment. You can either #define the symbol 24552284Sobrien READONLY_DATA_SECTION (giving it some code which switches to the 24652284Sobrien readonly data section) or else you can #define the symbols 24752284Sobrien EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and 24852284Sobrien SELECT_RTX_SECTION. We do both here just to be on the safe side. */ 24952284Sobrien 25052284Sobrien#define USE_CONST_SECTION 1 25152284Sobrien 25290075Sobrien#define CONST_SECTION_ASM_OP "\t.section\t.rdata,\"r\"" 25352284Sobrien 25452284Sobrien/* A default list of other sections which we might be "in" at any given 25552284Sobrien time. For targets that use additional sections (e.g. .tdesc) you 25652284Sobrien should override this definition in the target-specific file which 25752284Sobrien includes this file. */ 25852284Sobrien 25952284Sobrien#undef EXTRA_SECTIONS 26090075Sobrien#define EXTRA_SECTIONS in_const 26152284Sobrien 26252284Sobrien/* A default list of extra section function definitions. For targets 26352284Sobrien that use additional sections (e.g. .tdesc) you should override this 26452284Sobrien definition in the target-specific file which includes this file. */ 26552284Sobrien 26652284Sobrien#undef EXTRA_SECTION_FUNCTIONS 26752284Sobrien#define EXTRA_SECTION_FUNCTIONS \ 26890075Sobrien CONST_SECTION_FUNCTION 26952284Sobrien 27052284Sobrien#undef READONLY_DATA_SECTION 27152284Sobrien#define READONLY_DATA_SECTION() const_section () 27252284Sobrien 27352284Sobrien#define CONST_SECTION_FUNCTION \ 27452284Sobrienvoid \ 27552284Sobrienconst_section () \ 27652284Sobrien{ \ 27752284Sobrien if (!USE_CONST_SECTION) \ 27852284Sobrien text_section(); \ 27952284Sobrien else if (in_section != in_const) \ 28052284Sobrien { \ 28152284Sobrien fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \ 28252284Sobrien in_section = in_const; \ 28352284Sobrien } \ 28452284Sobrien} 28552284Sobrien 28652284Sobrien/* The MS compilers take alignment as a number of bytes, so we do as well */ 28752284Sobrien#undef ASM_OUTPUT_ALIGN 28852284Sobrien#define ASM_OUTPUT_ALIGN(FILE,LOG) \ 28952284Sobrien if ((LOG)!=0) fprintf ((FILE), "\t.balign %d\n", 1<<(LOG)) 29052284Sobrien 29152284Sobrien/* The linker will take care of this, and having them causes problems with 29290075Sobrien ld -r (specifically -rU). */ 29352284Sobrien#define CTOR_LISTS_DEFINED_EXTERNALLY 1 29452284Sobrien 29590075Sobrien#define SET_ASM_OP "\t.set\t" 29652284Sobrien/* Output a definition (implements alias) */ 29752284Sobrien#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ 29852284Sobriendo \ 29952284Sobrien{ \ 30090075Sobrien fprintf ((FILE), "%s", SET_ASM_OP); \ 30152284Sobrien assemble_name (FILE, LABEL1); \ 30252284Sobrien fprintf (FILE, ","); \ 30352284Sobrien assemble_name (FILE, LABEL2); \ 30452284Sobrien fprintf (FILE, "\n"); \ 30552284Sobrien } \ 30652284Sobrienwhile (0) 30752284Sobrien 30852284Sobrien#define HOST_PTR_PRINTF "%p" 30952284Sobrien#define HOST_PTR_AS_INT unsigned long 31052284Sobrien 31152284Sobrien#define PCC_BITFIELD_TYPE_MATTERS 1 31252284Sobrien#define PCC_BITFIELD_TYPE_TEST TYPE_NATIVE(rec) 31352284Sobrien#define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec) 31452284Sobrien 31552284Sobrien/* The following two flags are usually "off" for i386, because some non-gnu 31652284Sobrien tools (for the i386) don't handle them. However, we don't have that 31790075Sobrien problem, so.... */ 31852284Sobrien 31952284Sobrien/* Forward references to tags are allowed. */ 32052284Sobrien#define SDB_ALLOW_FORWARD_REFERENCES 32152284Sobrien 32252284Sobrien/* Unknown tags are also allowed. */ 32352284Sobrien#define SDB_ALLOW_UNKNOWN_REFERENCES 32452284Sobrien 32552284Sobrien/* The integer half of this list needs to be constant. However, there's 32652284Sobrien a lot of disagreement about what the floating point adjustments should 32752284Sobrien be. We pick one that works with gdb. (The underlying problem is 32852284Sobrien what to do about the segment registers. Since we have access to them 32952284Sobrien from /proc, we'll allow them to be accessed in gdb, even tho the 33052284Sobrien gcc compiler can't generate them. (There's some evidence that 33152284Sobrien MSVC does, but possibly only for certain special "canned" sequences.) */ 33252284Sobrien 33352284Sobrien#undef DBX_REGISTER_NUMBER 33452284Sobrien#define DBX_REGISTER_NUMBER(n) \ 33590075Sobrien(TARGET_64BIT ? dbx64_register_map[n] \ 33690075Sobrien : (n) == 0 ? 0 \ 33752284Sobrien : (n) == 1 ? 2 \ 33852284Sobrien : (n) == 2 ? 1 \ 33952284Sobrien : (n) == 3 ? 3 \ 34052284Sobrien : (n) == 4 ? 6 \ 34152284Sobrien : (n) == 5 ? 7 \ 34252284Sobrien : (n) == 6 ? 5 \ 34352284Sobrien : (n) == 7 ? 4 \ 34452284Sobrien : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+8 \ 34552284Sobrien : (-1)) 34652284Sobrien 34752284Sobrien/* Define this macro if references to a symbol must be treated 34852284Sobrien differently depending on something about the variable or 34952284Sobrien function named by the symbol (such as what section it is in). 35052284Sobrien 35152284Sobrien Apply stddef, handle (as yet unimplemented) pic. 35252284Sobrien 35390075Sobrien stddef renaming does NOT apply to Alpha. */ 35452284Sobrien 35590075Sobrienunion tree_node; 35690075Sobrienconst char *gen_stdcall_suffix PARAMS ((union tree_node *)); 35752284Sobrien 35852284Sobrien#undef ENCODE_SECTION_INFO 35952284Sobrien#define ENCODE_SECTION_INFO(DECL) \ 36052284Sobriendo \ 36152284Sobrien { \ 36252284Sobrien if (flag_pic) \ 36352284Sobrien { \ 36452284Sobrien rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ 36552284Sobrien ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \ 36652284Sobrien SYMBOL_REF_FLAG (XEXP (rtl, 0)) \ 36752284Sobrien = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ 36852284Sobrien || ! TREE_PUBLIC (DECL)); \ 36952284Sobrien } \ 37052284Sobrien if (TREE_CODE (DECL) == FUNCTION_DECL) \ 37152284Sobrien if (lookup_attribute ("stdcall", \ 37252284Sobrien TYPE_ATTRIBUTES (TREE_TYPE (DECL)))) \ 37352284Sobrien XEXP (DECL_RTL (DECL), 0) = \ 37452284Sobrien gen_rtx (SYMBOL_REF, Pmode, gen_stdcall_suffix (DECL)); \ 37552284Sobrien } \ 37652284Sobrienwhile (0) 37752284Sobrien 37852284Sobrien/* This macro gets just the user-specified name 37952284Sobrien out of the string in a SYMBOL_REF. Discard 38052284Sobrien trailing @[NUM] encoded by ENCODE_SECTION_INFO. */ 38152284Sobrien#undef STRIP_NAME_ENCODING 38252284Sobrien#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ 38352284Sobriendo { \ 38490075Sobrien const char *_p; \ 38590075Sobrien const char *_name = SYMBOL_NAME; \ 38652284Sobrien for (_p = _name; *_p && *_p != '@'; ++_p) \ 38752284Sobrien ; \ 38852284Sobrien if (*_p == '@') \ 38952284Sobrien { \ 39052284Sobrien int _len = _p - _name; \ 39190075Sobrien char *_new_name = (char *) alloca (_len + 1); \ 39290075Sobrien strncpy (_new_name, _name, _len); \ 39390075Sobrien _new_name[_len] = '\0'; \ 39490075Sobrien (VAR) = _new_name; \ 39552284Sobrien } \ 39652284Sobrien else \ 39752284Sobrien (VAR) = _name; \ 39852284Sobrien} while (0) 39952284Sobrien 40052284Sobrien#if 0 40152284Sobrien/* Turn this back on when the linker is updated to handle grouped 40252284Sobrien .data$ sections correctly. See corresponding note in i386/interix.c. 40390075Sobrien MK. */ 40452284Sobrien 40552284Sobrien/* Define this macro if in some cases global symbols from one translation 40652284Sobrien unit may not be bound to undefined symbols in another translation unit 40752284Sobrien without user intervention. For instance, under Microsoft Windows 40852284Sobrien symbols must be explicitly imported from shared libraries (DLLs). */ 40952284Sobrien#define MULTIPLE_SYMBOL_SPACES 41052284Sobrien 41152284Sobrienextern void i386_pe_unique_section (); 41252284Sobrien#define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC) 41352284Sobrien 41452284Sobrien#define SUPPORTS_ONE_ONLY 1 41596263Sobrien#endif /* 0 */ 41652284Sobrien 41790075Sobrien/* Switch into a generic section. */ 41890075Sobrien#define TARGET_ASM_NAMED_SECTION default_pe_asm_named_section 41952284Sobrien 42090075Sobrien/* DWARF2 Unwinding doesn't work with exception handling yet. */ 42152284Sobrien#define DWARF2_UNWIND_INFO 0 42252284Sobrien 42390075Sobrien/* Don't assume anything about the header files. */ 42452284Sobrien#define NO_IMPLICIT_EXTERN_C 42552284Sobrien 42696263Sobrien/* MSVC returns structs of up to 8 bytes via registers. */ 42796263Sobrien 42896263Sobrien#define DEFAULT_PCC_STRUCT_RETURN 0 42996263Sobrien 43096263Sobrien#undef RETURN_IN_MEMORY 43196263Sobrien#define RETURN_IN_MEMORY(TYPE) \ 43296263Sobrien (TYPE_MODE (TYPE) == BLKmode || \ 43396263Sobrien (AGGREGATE_TYPE_P (TYPE) && int_size_in_bytes(TYPE) > 8 )) 434