|
|
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.