OSDN Git Service

* configure.in: Use xm-netbsd.h as the NetBSD xm file (not xm-siglist).
[pf3gnuchains/gcc-fork.git] / gcc / config / netbsd.h
1 /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD
2    source tree so it can be configured appropriately without using
3    the GNU configure/build mechanism. */
4
5 #ifdef NETBSD_NATIVE
6
7 /* Look for the include files in the system-defined places.  */
8
9 #undef GPLUSPLUS_INCLUDE_DIR
10 #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
11
12 #undef GCC_INCLUDE_DIR
13 #define GCC_INCLUDE_DIR "/usr/include"
14
15 #undef INCLUDE_DEFAULTS
16 #define INCLUDE_DEFAULTS                        \
17   {                                             \
18     { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },     \
19     { GCC_INCLUDE_DIR, "GCC", 0, 0 },           \
20     { 0, 0, 0, 0 }                              \
21   }
22
23 /* Under NetBSD, the normal location of the compiler back ends is the
24    /usr/libexec directory.  */
25
26 #undef STANDARD_EXEC_PREFIX
27 #define STANDARD_EXEC_PREFIX            "/usr/libexec/"
28
29 /* Under NetBSD, the normal location of the various *crt*.o files is the
30    /usr/lib directory.  */
31
32 #undef STANDARD_STARTFILE_PREFIX
33 #define STANDARD_STARTFILE_PREFIX       "/usr/lib/"
34
35 #endif
36
37
38 /* Provide a CPP_SPEC appropriate for NetBSD.  Current we just deal with
39    the GCC option `-posix'.  */
40
41 #undef CPP_SPEC
42 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
43
44 /* Provide an ASM_SPEC appropriate for NetBSD.  Currently we only deal
45    with the options for generating PIC code.  */
46
47 #undef ASM_SPEC
48 #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}"
49
50 /* Provide a LIB_SPEC appropriate for NetBSD.  Just select the appropriate
51    libc, depending on whether we're doing profiling.  */
52
53 #undef LIB_SPEC
54 #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
55
56 /* Provide a LINK_SPEC appropriate for NetBSD.  Here we provide support
57    for the special GCC options -static, -assert, and -nostdlib.  */
58
59 #undef LINK_SPEC
60 #define LINK_SPEC \
61   "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} %{static:-Bstatic} %{assert*}"
62
63 /* This defines which switch letters take arguments. */
64 #undef SWITCH_TAKES_ARG
65 #define SWITCH_TAKES_ARG(CHAR) \
66   (DEFAULT_SWITCH_TAKES_ARG(CHAR) \
67    || (CHAR) == 'R')
68
69 /* We have atexit(3).  */
70
71 #define HAVE_ATEXIT
72
73 /* Implicit library calls should use memcpy, not bcopy, etc.  */
74
75 #define TARGET_MEM_FUNCTIONS
76
77 /* Handle #pragma weak and #pragma pack.  */
78
79 #define HANDLE_SYSV_PRAGMA
80 \f
81 /*
82  * Some imports from svr4.h in support of shared libraries.
83  * Currently, we need the DECLARE_OBJECT_SIZE stuff.
84  */
85
86 /* Define the strings used for the .type, .size, and .set directives.
87    These strings generally do not vary from one system running netbsd
88    to another, but if a given system needs to use different pseudo-op
89    names for these, they may be overridden in the file which includes
90    this one.  */
91
92 #undef TYPE_ASM_OP
93 #undef SIZE_ASM_OP
94 #undef SET_ASM_OP
95 #define TYPE_ASM_OP     ".type"
96 #define SIZE_ASM_OP     ".size"
97 #define SET_ASM_OP      ".set"
98
99 /* This is how we tell the assembler that a symbol is weak.  */
100
101 #undef ASM_WEAKEN_LABEL
102 #define ASM_WEAKEN_LABEL(FILE,NAME) \
103   do { fputs ("\t.globl\t", FILE); assemble_name (FILE, NAME); \
104        fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
105        fputc ('\n', FILE); } while (0)
106
107 /* The following macro defines the format used to output the second
108    operand of the .type assembler directive.  Different svr4 assemblers
109    expect various different forms for this operand.  The one given here
110    is just a default.  You may need to override it in your machine-
111    specific tm.h file (depending upon the particulars of your assembler).  */
112
113 #undef TYPE_OPERAND_FMT
114 #define TYPE_OPERAND_FMT        "@%s"
115
116 /* Write the extra assembler code needed to declare a function's result.
117    Most svr4 assemblers don't require any special declaration of the
118    result value, but there are exceptions.  */
119
120 #ifndef ASM_DECLARE_RESULT
121 #define ASM_DECLARE_RESULT(FILE, RESULT)
122 #endif
123
124 /* These macros generate the special .type and .size directives which
125    are used to set the corresponding fields of the linker symbol table
126    entries in an ELF object file under SVR4.  These macros also output
127    the starting labels for the relevant functions/objects.  */
128
129 /* Write the extra assembler code needed to declare a function properly.
130    Some svr4 assemblers need to also have something extra said about the
131    function's return value.  We allow for that here.  */
132
133 #undef ASM_DECLARE_FUNCTION_NAME
134 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)                     \
135   do {                                                                  \
136     fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);                             \
137     assemble_name (FILE, NAME);                                         \
138     putc (',', FILE);                                                   \
139     fprintf (FILE, TYPE_OPERAND_FMT, "function");                       \
140     putc ('\n', FILE);                                                  \
141     ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));                      \
142     ASM_OUTPUT_LABEL(FILE, NAME);                                       \
143   } while (0)
144
145 /* Write the extra assembler code needed to declare an object properly.  */
146
147 #undef ASM_DECLARE_OBJECT_NAME
148 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)                       \
149   do {                                                                  \
150     fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);                             \
151     assemble_name (FILE, NAME);                                         \
152     putc (',', FILE);                                                   \
153     fprintf (FILE, TYPE_OPERAND_FMT, "object");                         \
154     putc ('\n', FILE);                                                  \
155     size_directive_output = 0;                                          \
156     if (!flag_inhibit_size_directive && DECL_SIZE (DECL))               \
157       {                                                                 \
158         size_directive_output = 1;                                      \
159         fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
160         assemble_name (FILE, NAME);                                     \
161         fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
162       }                                                                 \
163     ASM_OUTPUT_LABEL(FILE, NAME);                                       \
164   } while (0)
165
166 /* Output the size directive for a decl in rest_of_decl_compilation
167    in the case where we did not do so before the initializer.
168    Once we find the error_mark_node, we know that the value of
169    size_directive_output was set
170    by ASM_DECLARE_OBJECT_NAME when it was run for the same decl.  */
171
172 #undef ASM_FINISH_DECLARE_OBJECT
173 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)         \
174 do {                                                                     \
175      char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);                   \
176      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)                \
177          && ! AT_END && TOP_LEVEL                                        \
178          && DECL_INITIAL (DECL) == error_mark_node                       \
179          && !size_directive_output)                                      \
180        {                                                                 \
181          size_directive_output = 1;                                      \
182          fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
183          assemble_name (FILE, name);                                     \
184          fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
185        }                                                                 \
186    } while (0)
187
188 /* This is how to declare the size of a function.  */
189
190 #undef ASM_DECLARE_FUNCTION_SIZE
191 #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)                    \
192   do {                                                                  \
193     if (!flag_inhibit_size_directive)                                   \
194       {                                                                 \
195         char label[256];                                                \
196         static int labelno;                                             \
197         labelno++;                                                      \
198         ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);            \
199         ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);               \
200         fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
201         assemble_name (FILE, (FNAME));                                  \
202         fprintf (FILE, ",");                                            \
203         assemble_name (FILE, label);                                    \
204         fprintf (FILE, "-");                                            \
205         assemble_name (FILE, (FNAME));                                  \
206         putc ('\n', FILE);                                              \
207       }                                                                 \
208   } while (0)