1326938Sdim/* Configuration for an i386 running MS-DOS with DJGPP.
2326938Sdim   Copyright (C) 1997-2015 Free Software Foundation, Inc.
3353358Sdim
4353358SdimThis file is part of GCC.
5353358Sdim
6326938SdimGCC is free software; you can redistribute it and/or modify
7326938Sdimit under the terms of the GNU General Public License as published by
8326938Sdimthe Free Software Foundation; either version 3, or (at your option)
9326938Sdimany later version.
10326938Sdim
11326938SdimGCC is distributed in the hope that it will be useful,
12326938Sdimbut WITHOUT ANY WARRANTY; without even the implied warranty of
13326938SdimMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14326938SdimGNU General Public License for more details.
15326938Sdim
16326938SdimYou should have received a copy of the GNU General Public License
17326938Sdimalong with GCC; see the file COPYING3.  If not see
18326938Sdim<http://www.gnu.org/licenses/>.  */
19326938Sdim
20326938Sdim/* Support generation of DWARF2 debugging info.  */
21326938Sdim#define DWARF2_DEBUGGING_INFO 1
22326938Sdim
23326938Sdim/* Don't assume anything about the header files.  */
24326938Sdim#define NO_IMPLICIT_EXTERN_C
25326938Sdim
26326938Sdim#undef BSS_SECTION_ASM_OP
27326938Sdim#define BSS_SECTION_ASM_OP "\t.section\t.bss"
28326938Sdim
29326938Sdim/* Define the name of the .data section.  */
30326938Sdim#undef DATA_SECTION_ASM_OP
31326938Sdim#define DATA_SECTION_ASM_OP "\t.section .data"
32326938Sdim
33326938Sdim/* Enable alias attribute support.  */
34326938Sdim#ifndef SET_ASM_OP
35326938Sdim#define SET_ASM_OP "\t.set\t"
36326938Sdim#endif
37326938Sdim
38326938Sdim/* Define the name of the .text section.  */
39326938Sdim#undef TEXT_SECTION_ASM_OP
40326938Sdim#define TEXT_SECTION_ASM_OP "\t.section .text"
41326938Sdim
42326938Sdim/* Define standard DJGPP installation paths.  */
43326938Sdim/* We override default /usr or /usr/local part with /dev/env/DJDIR which */
44326938Sdim/* points to actual DJGPP installation directory.  */
45326938Sdim
46326938Sdim/* Search for as.exe and ld.exe in DJGPP's binary directory.  */
47326938Sdim#undef MD_EXEC_PREFIX
48326938Sdim#define MD_EXEC_PREFIX "/dev/env/DJDIR/bin/"
49326938Sdim
50326938Sdim/* Standard DJGPP library and startup files */
51326938Sdim#undef MD_STARTFILE_PREFIX
52326938Sdim#define MD_STARTFILE_PREFIX "/dev/env/DJDIR/lib/"
53326938Sdim
54326938Sdim/* Correctly handle absolute filename detection in cp/xref.c */
55326938Sdim#define FILE_NAME_ABSOLUTE_P(NAME) \
56326938Sdim        (((NAME)[0] == '/') || ((NAME)[0] == '\\') || \
57326938Sdim        (((NAME)[0] >= 'A') && ((NAME)[0] <= 'z') && ((NAME)[1] == ':')))
58326938Sdim
59326938Sdim#define TARGET_OS_CPP_BUILTINS()		\
60326938Sdim  do						\
61326938Sdim    {						\
62326938Sdim	builtin_define_std ("MSDOS");		\
63326938Sdim	builtin_define_std ("GO32");		\
64	builtin_assert ("system=msdos");	\
65    }						\
66  while (0)
67
68/* Include <sys/version.h> so __DJGPP__ and __DJGPP_MINOR__ are defined.  */
69#undef CPP_SPEC
70#define CPP_SPEC "-remap %{posix:-D_POSIX_SOURCE} \
71  -imacros %s../include/sys/version.h"
72
73/* We need to override link_command_spec in gcc.c so support -Tdjgpp.djl.
74   This cannot be done in LINK_SPECS as that LINK_SPECS is processed
75   before library search directories are known by the linker.
76   This avoids problems when specs file is not available. An alternate way,
77   suggested by Robert Hoehne, is to use SUBTARGET_EXTRA_SPECS instead.
78*/
79
80#undef LINK_COMMAND_SPEC
81#define LINK_COMMAND_SPEC \
82"%{!fsyntax-only: \
83%{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l " LINK_COMPRESS_DEBUG_SPEC \
84"%X %{o*} %{e*} %{N} %{n} \
85\t%{r} %{s} %{t} %{u*} %{z} %{Z}\
86\t%{!nostdlib:%{!nostartfiles:%S}}\
87\t%{static:} %{L*} %D %o\
88\t%{!nostdlib:%{!nodefaultlibs:%G %L %G}}\
89\t%{!nostdlib:%{!nostartfiles:%E}}\
90\t-Tdjgpp.djl %{T*}}}}}}}\n\
91%{!c:%{!M:%{!MM:%{!E:%{!S:stubify %{v} %{o*:%*} %{!o*:a.out} }}}}}"
92
93/* Always just link in 'libc.a'.  */
94#undef LIB_SPEC
95#define LIB_SPEC "-lc"
96
97/* Pick the right startup code depending on the -pg flag.  */
98#undef STARTFILE_SPEC
99#define STARTFILE_SPEC "%{pg:gcrt0.o%s}%{!pg:crt0.o%s}"
100
101/* Make sure that gcc will not look for .h files in /usr/local/include
102   unless user explicitly requests it.  */
103#undef LOCAL_INCLUDE_DIR
104
105/* Switch into a generic section.  */
106#define TARGET_ASM_NAMED_SECTION  default_coff_asm_named_section
107
108/* This is how to output an assembler line
109   that says to advance the location counter
110   to a multiple of 2**LOG bytes.  */
111
112#undef ASM_OUTPUT_ALIGN
113#define ASM_OUTPUT_ALIGN(FILE,LOG) \
114  if ((LOG) != 0) fprintf ((FILE), "\t.p2align %d\n", LOG)
115
116/* This is how to output a global symbol in the BSS section.  */
117#undef ASM_OUTPUT_ALIGNED_BSS
118#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
119  asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
120
121/* Write the extra assembler code needed to declare a function properly.  */
122
123#ifndef ASM_DECLARE_FUNCTION_NAME
124#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)		\
125  do								\
126    {								\
127      ASM_OUTPUT_FUNCTION_LABEL (FILE, NAME, DECL);		\
128    }								\
129  while (0)
130#endif
131
132/* This is how to tell assembler that a symbol is weak  */
133#undef ASM_WEAKEN_LABEL
134#define ASM_WEAKEN_LABEL(FILE,NAME) \
135  do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
136       fputc ('\n', FILE); } while (0)
137
138/* djgpp automatically calls its own version of __main, so don't define one
139   in libgcc, nor call one in main().  */
140#define HAS_INIT_SECTION
141
142#undef TARGET_LIBC_HAS_FUNCTION
143#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function
144
145/* Definitions for types and sizes. Wide characters are 16-bits long so
146   Win32 compiler add-ons will be wide character compatible.  */
147#undef WCHAR_TYPE_SIZE
148#define WCHAR_TYPE_SIZE 16
149
150#undef WCHAR_TYPE
151#define WCHAR_TYPE "short unsigned int"
152
153#undef WINT_TYPE
154#define WINT_TYPE "int"
155
156#undef SIZE_TYPE
157#define SIZE_TYPE "long unsigned int"
158
159#undef PTRDIFF_TYPE
160#define PTRDIFF_TYPE "int"
161
162/* Used to be defined in xm-djgpp.h, but moved here for cross-compilers.  */
163#define LIBSTDCXX "stdcxx"
164
165/* Warn that -mbnu210 is now obsolete.  */
166#undef  SUBTARGET_OVERRIDE_OPTIONS
167#define SUBTARGET_OVERRIDE_OPTIONS \
168do \
169  { \
170    if (TARGET_BNU210) \
171      {	\
172        warning (0, "-mbnu210 is ignored (option is obsolete)"); \
173      }	\
174  } \
175while (0)
176
177/* Support for C++ templates.  */
178#undef MAKE_DECL_ONE_ONLY
179#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
180
181#define IX86_MAYBE_NO_LIBGCC_TFMODE
182