|
|
1.1 ! root 1: /* Operating system specific defines to be used when targeting GCC for ! 2: Windows NT 3.x on an i386. ! 3: Copyright (C) 1994, 1995 Free Software Foundation, Inc. ! 4: Contributed by Douglas B. Rupp ([email protected]). ! 5: ! 6: This file is part of GNU CC. ! 7: ! 8: GNU CC is free software; you can redistribute it and/or modify ! 9: it under the terms of the GNU General Public License as published by ! 10: the Free Software Foundation; either version 2, or (at your option) ! 11: any later version. ! 12: ! 13: GNU CC is distributed in the hope that it will be useful, ! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 16: GNU General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with GNU CC; see the file COPYING. If not, write to ! 20: the Free Software Foundation, 59 Temple Place - Suite 330, ! 21: Boston, MA 02111-1307, USA. */ ! 22: ! 23: #define YES_UNDERSCORES ! 24: ! 25: #include "i386/gas.h" ! 26: ! 27: #ifdef CPP_PREDEFINES ! 28: #undef CPP_PREDEFINES ! 29: #endif ! 30: #define CPP_PREDEFINES "-Dunix -Di386 -DWIN32 -D_WIN32 \ ! 31: -DWINNT -D_M_IX86=300 -D_X86_=1 -D__STDC__=0 -DALMOST_STDC -D_MSC_VER=800 \ ! 32: -D__stdcall=__attribute__((__stdcall__)) \ ! 33: -D__cdecl=__attribute__((__cdecl__)) \ ! 34: -D_cdecl=__attribute__((__cdecl__)) \ ! 35: -Asystem(unix) -Asystem(winnt) -Acpu(i386) -Amachine(i386)" ! 36: ! 37: #define SIZE_TYPE "unsigned int" ! 38: #define PTRDIFF_TYPE "int" ! 39: #define WCHAR_UNSIGNED 1 ! 40: #define WCHAR_TYPE_SIZE 16 ! 41: #define WCHAR_TYPE "short unsigned int" ! 42: #undef LONG_DOUBLE_TYPE_SIZE ! 43: #define LONG_DOUBLE_TYPE_SIZE 64 ! 44: #define HAVE_ATEXIT 1 ! 45: ! 46: #undef EXTRA_SECTIONS ! 47: #define EXTRA_SECTIONS in_ctor, in_dtor ! 48: ! 49: #undef EXTRA_SECTION_FUNCTIONS ! 50: #define EXTRA_SECTION_FUNCTIONS \ ! 51: CTOR_SECTION_FUNCTION \ ! 52: DTOR_SECTION_FUNCTION ! 53: ! 54: #define CTOR_SECTION_FUNCTION \ ! 55: void \ ! 56: ctor_section () \ ! 57: { \ ! 58: if (in_section != in_ctor) \ ! 59: { \ ! 60: fprintf (asm_out_file, "\t.section .ctor\n"); \ ! 61: in_section = in_ctor; \ ! 62: } \ ! 63: } ! 64: ! 65: #define DTOR_SECTION_FUNCTION \ ! 66: void \ ! 67: dtor_section () \ ! 68: { \ ! 69: if (in_section != in_dtor) \ ! 70: { \ ! 71: fprintf (asm_out_file, "\t.section .dtor\n"); \ ! 72: in_section = in_dtor; \ ! 73: } \ ! 74: } ! 75: ! 76: #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! 77: do { \ ! 78: ctor_section (); \ ! 79: fprintf (FILE, "%s\t", ASM_LONG); \ ! 80: assemble_name (FILE, NAME); \ ! 81: fprintf (FILE, "\n"); \ ! 82: } while (0) ! 83: ! 84: #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ ! 85: do { \ ! 86: dtor_section (); \ ! 87: fprintf (FILE, "%s\t", ASM_LONG); \ ! 88: assemble_name (FILE, NAME); \ ! 89: fprintf (FILE, "\n"); \ ! 90: } while (0) ! 91: ! 92: /* Define this macro if references to a symbol must be treated ! 93: differently depending on something about the variable or ! 94: function named by the symbol (such as what section it is in). ! 95: ! 96: On i386, if using PIC, mark a SYMBOL_REF for a non-global symbol ! 97: so that we may access it directly in the GOT. ! 98: ! 99: On i386 running Windows NT, modify the assembler name with a suffix ! 100: consisting of an atsign (@) followed by string of digits that represents ! 101: the number of bytes of arguments passed to the function, if it has the ! 102: attribute STDCALL. */ ! 103: ! 104: #ifdef ENCODE_SECTION_INFO ! 105: #undef ENCODE_SECTION_INFO ! 106: #define ENCODE_SECTION_INFO(DECL) \ ! 107: do \ ! 108: { \ ! 109: if (flag_pic) \ ! 110: { \ ! 111: rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ ! 112: ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \ ! 113: SYMBOL_REF_FLAG (XEXP (rtl, 0)) \ ! 114: = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ ! 115: || ! TREE_PUBLIC (DECL)); \ ! 116: } \ ! 117: if (TREE_CODE (DECL) == FUNCTION_DECL) \ ! 118: if (lookup_attribute ("stdcall", \ ! 119: TYPE_ATTRIBUTES (TREE_TYPE (DECL)))) \ ! 120: XEXP (DECL_RTL (DECL), 0) = \ ! 121: gen_rtx (SYMBOL_REF, Pmode, gen_stdcall_suffix (DECL)); \ ! 122: } \ ! 123: while (0) ! 124: #endif ! 125: ! 126: /* The global __fltused is necessary to cause the printf/scanf routines ! 127: for outputting/inputting floating point numbers to be loaded. Since this ! 128: is kind of hard to detect, we just do it all the time. */ ! 129: ! 130: #ifdef ASM_FILE_START ! 131: #undef ASM_FILE_START ! 132: #endif ! 133: #define ASM_FILE_START(FILE) \ ! 134: do { fprintf (FILE, "\t.file\t"); \ ! 135: output_quoted_string (FILE, dump_base_name); \ ! 136: fprintf (FILE, "\n"); \ ! 137: fprintf (FILE, ".global\t__fltused\n"); \ ! 138: } while (0) ! 139: ! 140: /* if the switch "-mwindows" is passed to ld, then specify to the Microsoft ! 141: linker the proper switches and libraries to build a graphical program */ ! 142: ! 143: #undef LIB_SPEC ! 144: #define LIB_SPEC "%{mwindows:-subsystem windows -e _WinMainCRTStartup \ ! 145: USER32.LIB%s GDI32.LIB%s COMDLG32.LIB%s WINSPOOL.LIB%s} \ ! 146: %{!mwindows:-subsystem console -e _mainCRTStartup} \ ! 147: %{mcrtmt:LIBCMT.LIB%s KERNEL32.LIB%s ADVAPI32.LIB%s} \ ! 148: %{!mcrtmt:LIBC.LIB%s KERNEL32.LIB%s ADVAPI32.LIB%s} \ ! 149: %{v}" ! 150: ! 151: #include "winnt/win-nt.h" ! 152:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.