djgpp.h revision 117395
1/* Configuration for an i386 running MS-DOS with DJGPP. 2 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 3 Free Software Foundation, Inc. 4 5This file is part of GNU CC. 6 7GNU CC is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 2, or (at your option) 10any later version. 11 12GNU CC is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with GNU CC; see the file COPYING. If not, write to 19the Free Software Foundation, 59 Temple Place - Suite 330, 20Boston, MA 02111-1307, USA. */ 21 22/* Support generation of DWARF2 debugging info. */ 23#define DWARF2_DEBUGGING_INFO 1 24 25/* Don't assume anything about the header files. */ 26#define NO_IMPLICIT_EXTERN_C 27 28#define HANDLE_SYSV_PRAGMA 1 29 30/* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop). */ 31#define HANDLE_PRAGMA_PACK_PUSH_POP 1 32 33#include "i386/unix.h" 34#include "i386/bsd.h" 35#include "i386/gas.h" 36 37/* If defined, a C expression whose value is a string containing the 38 assembler operation to identify the following data as 39 uninitialized global data. If not defined, and neither 40 `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, 41 uninitialized global data will be output in the data section if 42 `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be 43 used. */ 44#undef BSS_SECTION_ASM_OP 45#define BSS_SECTION_ASM_OP "\t.section\t.bss" 46 47/* Define the name of the .data section. */ 48#undef DATA_SECTION_ASM_OP 49#define DATA_SECTION_ASM_OP "\t.section .data" 50 51/* Define the name of the .ident op. */ 52#undef IDENT_ASM_OP 53#define IDENT_ASM_OP "\t.ident\t" 54 55/* Enable alias attribute support. */ 56#ifndef SET_ASM_OP 57#define SET_ASM_OP "\t.set\t" 58#endif 59 60/* Define the name of the .text section. */ 61#undef TEXT_SECTION_ASM_OP 62#define TEXT_SECTION_ASM_OP "\t.section .text" 63 64/* Define standard DJGPP installation paths. */ 65/* We override default /usr or /usr/local part with /dev/env/DJDIR which */ 66/* points to actual DJGPP instalation directory. */ 67 68/* Standard include directory */ 69#undef STANDARD_INCLUDE_DIR 70#define STANDARD_INCLUDE_DIR "/dev/env/DJDIR/include/" 71 72/* Search for as.exe and ld.exe in DJGPP's binary directory. */ 73#undef MD_EXEC_PREFIX 74#define MD_EXEC_PREFIX "/dev/env/DJDIR/bin/" 75 76/* Standard DJGPP library and startup files */ 77#undef MD_STARTFILE_PREFIX 78#define MD_STARTFILE_PREFIX "/dev/env/DJDIR/lib/" 79 80/* Correctly handle absolute filename detection in cp/xref.c */ 81#define FILE_NAME_ABSOLUTE_P(NAME) \ 82 (((NAME)[0] == '/') || ((NAME)[0] == '\\') || \ 83 (((NAME)[0] >= 'A') && ((NAME)[0] <= 'z') && ((NAME)[1] == ':'))) 84 85#define TARGET_OS_CPP_BUILTINS() \ 86 do \ 87 { \ 88 builtin_define_std ("MSDOS"); \ 89 builtin_define_std ("GO32"); \ 90 builtin_assert ("system=msdos"); \ 91 } \ 92 while (0) 93 94/* Include <sys/version.h> so __DJGPP__ and __DJGPP_MINOR__ are defined. */ 95#undef CPP_SPEC 96#define CPP_SPEC "-remap %{posix:-D_POSIX_SOURCE} \ 97 -imacros %s../include/sys/version.h" 98 99/* We need to override link_command_spec in gcc.c so support -Tdjgpp.djl. 100 This cannot be done in LINK_SPECS as that LINK_SPECS is processed 101 before library search directories are known by the linker. 102 This avoids problems when specs file is not available. An alternate way, 103 suggested by Robert Hoehne, is to use SUBTARGET_EXTRA_SPECS instead. 104*/ 105 106#undef LINK_COMMAND_SPEC 107#define LINK_COMMAND_SPEC \ 108"%{!fsyntax-only: \ 109%{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ 110\t%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ 111\t%{!A:%{!nostdlib:%{!nostartfiles:%S}}}\ 112\t%{static:} %{L*} %D %o\ 113\t%{!nostdlib:%{!nodefaultlibs:%G %L %G}}\ 114\t%{!A:%{!nostdlib:%{!nostartfiles:%E}}}\ 115\t-Tdjgpp.djl %{T*}}}}}}}\n\ 116%{!c:%{!M:%{!MM:%{!E:%{!S:stubify %{v} %{o*:%*} %{!o*:a.out} }}}}}" 117 118/* Always just link in 'libc.a'. */ 119#undef LIB_SPEC 120#define LIB_SPEC "-lc" 121 122/* Pick the right startup code depending on the -pg flag. */ 123#undef STARTFILE_SPEC 124#define STARTFILE_SPEC "%{pg:gcrt0.o%s}%{!pg:crt0.o%s}" 125 126/* Make sure that gcc will not look for .h files in /usr/local/include 127 unless user explicitly requests it. */ 128#undef LOCAL_INCLUDE_DIR 129 130/* Switch into a generic section. */ 131#define TARGET_ASM_NAMED_SECTION default_coff_asm_named_section 132 133/* Output at beginning of assembler file. */ 134/* The .file command should always begin the output. */ 135 136#undef ASM_FILE_START 137#define ASM_FILE_START(FILE) \ 138 do { \ 139 if (ix86_asm_dialect == ASM_INTEL) \ 140 fputs ("\t.intel_syntax\n", FILE); \ 141 output_file_directive (FILE, main_input_filename); \ 142 } while (0) 143 144/* This is how to output an assembler line 145 that says to advance the location counter 146 to a multiple of 2**LOG bytes. */ 147 148#undef ASM_OUTPUT_ALIGN 149#define ASM_OUTPUT_ALIGN(FILE,LOG) \ 150 if ((LOG) != 0) fprintf ((FILE), "\t.p2align %d\n", LOG) 151 152/* This is how to output a global symbol in the BSS section. */ 153#undef ASM_OUTPUT_ALIGNED_BSS 154#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ 155 asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN)) 156 157/* This is how to tell assembler that a symbol is weak */ 158#undef ASM_WEAKEN_LABEL 159#define ASM_WEAKEN_LABEL(FILE,NAME) \ 160 do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ 161 fputc ('\n', FILE); } while (0) 162 163/* djgpp automatically calls its own version of __main, so don't define one 164 in libgcc, nor call one in main(). */ 165#define HAS_INIT_SECTION 166 167/* Definitions for types and sizes. Wide characters are 16-bits long so 168 Win32 compiler add-ons will be wide character compatible. */ 169#undef WCHAR_TYPE_SIZE 170#define WCHAR_TYPE_SIZE 16 171 172#undef WCHAR_TYPE 173#define WCHAR_TYPE "short unsigned int" 174 175#undef WINT_TYPE 176#define WINT_TYPE "int" 177 178#undef SIZE_TYPE 179#define SIZE_TYPE "long unsigned int" 180 181#undef PTRDIFF_TYPE 182#define PTRDIFF_TYPE "int" 183 184/* Used to be defined in xm-djgpp.h, but moved here for cross-compilers. */ 185#define LIBSTDCXX "-lstdcxx" 186 187/* -mbnu210 is now ignored and obsolete. It was used to enable support for 188 weak symbols, and .gnu.linkonce support. */ 189#undef MASK_BNU210 190#define MASK_BNU210 (0x40000000) 191 192#define TARGET_VERSION fprintf (stderr, " (80386, MS-DOS DJGPP)"); 193 194#undef SUBTARGET_SWITCHES 195#define SUBTARGET_SWITCHES \ 196 { "no-bnu210", -MASK_BNU210, "Ignored (obsolete)" }, \ 197 { "bnu210", MASK_BNU210, "Ignored (obsolete)" }, 198 199/* Warn that -mbnu210 is now obsolete. */ 200#undef SUBTARGET_OVERRIDE_OPTIONS 201#define SUBTARGET_OVERRIDE_OPTIONS \ 202do \ 203 { \ 204 if (target_flags & MASK_BNU210) \ 205 { \ 206 warning ("-mbnu210 is ignored (option is obsolete)"); \ 207 } \ 208 } \ 209while (0) 210 211/* Support for C++ templates. */ 212#undef MAKE_DECL_ONE_ONLY 213#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) 214