8836
|
1 /* machine description file For the alpha chip.
|
|
2 Copyright (C) 1994 Free Software Foundation, Inc.
|
|
3
|
|
4 This file is part of GNU Emacs.
|
|
5
|
|
6 GNU Emacs is free software; you can redistribute it and/or modify
|
|
7 it under the terms of the GNU General Public License as published by
|
|
8 the Free Software Foundation; either version 1, or (at your option)
|
|
9 any later version.
|
|
10
|
|
11 GNU Emacs is distributed in the hope that it will be useful,
|
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14 GNU General Public License for more details.
|
|
15
|
|
16 You should have received a copy of the GNU General Public License
|
|
17 along with GNU Emacs; see the file COPYING. If not, write to
|
14186
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
19 Boston, MA 02111-1307, USA. */
|
8836
|
20
|
|
21
|
|
22 /* The following line tells the configuration script what sort of
|
|
23 operating system this machine is likely to run.
|
|
24 USUAL-OPSYS="note"
|
|
25
|
|
26 NOTE-START
|
|
27 Use -opsystem=osf1
|
|
28 NOTE-END
|
|
29
|
|
30 */
|
|
31
|
13365
|
32 #define BITS_PER_LONG 64
|
16132
|
33 #define BITS_PER_EMACS_INT 64
|
8836
|
34
|
9095
23f72b18b420
(WORDS_BIG_ENDIAN): define or undef appropriately, superseding BIG_ENDIAN.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
35 /* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word
|
23f72b18b420
(WORDS_BIG_ENDIAN): define or undef appropriately, superseding BIG_ENDIAN.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
36 is the most significant byte. */
|
23f72b18b420
(WORDS_BIG_ENDIAN): define or undef appropriately, superseding BIG_ENDIAN.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
37
|
23f72b18b420
(WORDS_BIG_ENDIAN): define or undef appropriately, superseding BIG_ENDIAN.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
38 #undef WORDS_BIG_ENDIAN
|
23f72b18b420
(WORDS_BIG_ENDIAN): define or undef appropriately, superseding BIG_ENDIAN.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
39
|
8836
|
40 /* Define NO_ARG_ARRAY if you cannot take the address of the first of a
|
|
41 * group of arguments and treat it as an array of the arguments. */
|
|
42
|
|
43 #define NO_ARG_ARRAY
|
|
44
|
|
45 /* Define WORD_MACHINE if addresses and such have
|
|
46 * to be corrected before they can be used as byte counts. */
|
|
47
|
|
48 /* #define WORD_MACHINE */
|
|
49
|
|
50 /* Now define a symbol for the cpu type, if your compiler
|
|
51 does not define it automatically:
|
|
52 Ones defined so far include vax, m68000, ns16000, pyramid,
|
|
53 orion, tahoe, APOLLO and many others */
|
|
54
|
|
55 /* __alpha defined automatically */
|
|
56
|
|
57
|
|
58 /* Use type EMACS_INT rather than a union, to represent Lisp_Object */
|
|
59 /* This is desirable for most machines. */
|
|
60
|
|
61 #define NO_UNION_TYPE
|
|
62
|
|
63 /* Define the type to use. */
|
|
64 #define EMACS_INT long
|
|
65 #define EMACS_UINT unsigned long
|
11361
|
66 #define SPECIAL_EMACS_INT
|
8836
|
67
|
|
68 /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
|
|
69 the 24-bit bit field into an int. In other words, if bit fields
|
|
70 are always unsigned.
|
|
71
|
|
72 If you use NO_UNION_TYPE, this flag does not matter. */
|
|
73
|
|
74 #define EXPLICIT_SIGN_EXTEND
|
|
75
|
|
76 /* Data type of load average, as read out of kmem. */
|
|
77
|
|
78 #define LOAD_AVE_TYPE long
|
|
79
|
|
80 /* Convert that into an integer that is 100 for a load average of 1.0 */
|
|
81
|
|
82 #define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE)
|
|
83
|
|
84 /* Define CANNOT_DUMP on machines where unexec does not work.
|
|
85 Then the function dump-emacs will not be defined
|
|
86 and temacs will do (load "loadup") automatically unless told otherwise. */
|
|
87
|
|
88 /* #define CANNOT_DUMP */
|
|
89
|
|
90 /* Define VIRT_ADDR_VARIES if the virtual addresses of
|
|
91 pure and impure space as loaded can vary, and even their
|
|
92 relative order cannot be relied on.
|
|
93
|
|
94 Otherwise Emacs assumes that text space precedes data space,
|
|
95 numerically. */
|
|
96
|
|
97 /* #define VIRT_ADDR_VARIES */
|
|
98
|
|
99 /* Define C_ALLOCA if this machine does not support a true alloca
|
|
100 and the one written in C should be used instead.
|
|
101 Define HAVE_ALLOCA to say that the system provides a properly
|
|
102 working alloca function and it should be used.
|
|
103 Define neither one if an assembler-language alloca
|
|
104 in the file alloca.s should be used. */
|
|
105
|
|
106 #define HAVE_ALLOCA
|
|
107
|
|
108 /* GNU malloc and the relocating allocator do not work together
|
11979
|
109 with X. [Who wrote that?] */
|
|
110
|
|
111 /* May 1995: reportedly [Rainer Schoepf <schoepf@uni-mainz.de>] both the
|
|
112 system and the gnu malloc system work with "alpha-dec-osf3.0" and
|
|
113 "alpha-dec-osf3.2". */
|
|
114
|
|
115 /* May 1995: it seems to me [Morten Welinder <terra@diku.dk>] that both
|
|
116 mallocs work with "alpha-dec-osf2.0", but I daren't break anything
|
|
117 right now. Feel free to play if you want. */
|
8836
|
118
|
12301
|
119 /* #define SYSTEM_MALLOC */
|
8836
|
120
|
|
121 /* Define NO_REMAP if memory segmentation makes it not work well
|
|
122 to change the boundary between the text section and data section
|
|
123 when Emacs is dumped. If you define this, the preloaded Lisp
|
|
124 code will not be sharable; but that's better than failing completely. */
|
|
125
|
|
126 #define NO_REMAP
|
|
127
|
|
128 /* Some really obscure 4.2-based systems (like Sequent DYNIX)
|
|
129 * do not support asynchronous I/O (using SIGIO) on sockets,
|
|
130 * even though it works fine on tty's. If you have one of
|
|
131 * these systems, define the following, and then use it in
|
|
132 * config.h (or elsewhere) to decide when (not) to use SIGIO.
|
|
133 *
|
|
134 * You'd think this would go in an operating-system description file,
|
|
135 * but since it only occurs on some, but not all, BSD systems, the
|
|
136 * reasonable place to select for it is in the machine description
|
|
137 * file.
|
|
138 */
|
|
139
|
|
140 /* #define NO_SOCK_SIGIO */
|
|
141
|
|
142
|
15850
|
143 #ifdef __ELF__
|
|
144 /* With ELF, make sure that all common symbols get allocated to in the
|
|
145 data section. Otherwise, the dump of temacs may miss variables in
|
|
146 the shared library that have been initialized. For example, with
|
|
147 GNU libc, __malloc_initialized would normally be resolved to the
|
|
148 shared library's .bss section, which is fatal. */
|
|
149 # ifdef __GNUC__
|
|
150 # define C_SWITCH_MACHINE -fno-common
|
|
151 # else
|
|
152 # error What gives? Fix me if DEC Unix supports ELF now.
|
|
153 # endif
|
|
154 #endif
|
|
155
|
15851
|
156 #ifdef __ELF__
|
|
157 #undef UNEXEC
|
16119
|
158 #define UNEXEC unexelf.o
|
15851
|
159 #endif
|
|
160
|
15850
|
161 #ifndef __ELF__
|
|
162
|
8836
|
163 /* Describe layout of the address space in an executing process. */
|
|
164
|
|
165 #define TEXT_START 0x120000000
|
|
166 #define DATA_START 0x140000000
|
|
167
|
|
168 /* This is necessary for mem-limits.h, so that start_of_data gives
|
|
169 the correct value */
|
|
170
|
|
171 #define DATA_SEG_BITS 0x140000000
|
|
172
|
15850
|
173 /* The program to be used for unexec. */
|
|
174
|
|
175 #define UNEXEC unexalpha.o
|
|
176
|
|
177 #endif /* notdef __ELF__ */
|
|
178
|
12836
|
179 #ifdef OSF1
|
8836
|
180 #define ORDINARY_LINK
|
|
181
|
12146
|
182 /* Some systems seem to have this, others don't. */
|
|
183 #ifdef HAVE_LIBDNET
|
|
184 #define LIBS_MACHINE -ldnet
|
|
185 #else
|
|
186 #define LIBS_MACHINE -ldnet_stub
|
|
187 #endif
|
12836
|
188 #endif /* OSF1 */
|
12146
|
189
|
12235
|
190 #if 0 /* Rainer Schoepf <schoepf@uni-mainz.de> says this loses with X11R6
|
|
191 since it has only shared libraries. */
|
11979
|
192 #ifndef __GNUC__
|
|
193 /* This apparently is for the system ld as opposed to Gnu ld. */
|
9738
|
194 #ifdef OSF1
|
|
195 #define LD_SWITCH_MACHINE -non_shared
|
|
196 #endif
|
11979
|
197 #endif
|
12235
|
198 #endif /* 0 */
|
9738
|
199
|
12836
|
200 #ifdef OSF1
|
8836
|
201 #define LIBS_DEBUG
|
|
202 #define START_FILES pre-crt0.o
|
12825
cbc13edaa77d
(LIBS_DEBUG, START_FILES, LIBS_MACHINE): Define only if __osf1__.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
203 #endif
|
8836
|
204
|
15850
|
205 #if defined (LINUX) && __GNU_LIBRARY__ - 0 < 6
|
13616
|
206 /* This controls a conditional in main. */
|
|
207 #define LINUX_SBRK_BUG
|
|
208 #endif
|
8836
|
209
|
|
210
|
|
211 #define PNTR_COMPARISON_TYPE unsigned long
|
|
212
|
10361
|
213 /* On the 64 bit architecture, we can use 60 bits for addresses */
|
8836
|
214
|
10361
|
215 #define VALBITS 60
|
8836
|
216
|
|
217
|
|
218 /* This definition of MARKBIT is necessary because of the comparison of
|
|
219 ARRAY_MARK_FLAG and MARKBIT in an #if in lisp.h, which cpp doesn't like. */
|
|
220
|
|
221 #define MARKBIT 0x8000000000000000L
|
|
222
|
|
223
|
|
224 /* Define XINT and XUINT so that they can take arguments of type int */
|
|
225
|
13365
|
226 #define XINT(a) (((long) (a) << (BITS_PER_LONG - VALBITS)) >> (BITS_PER_LONG - VALBITS))
|
12146
|
227 #define XUINT(a) ((long) (a) & VALMASK)
|
8836
|
228
|
|
229 /* Define XPNTR to avoid or'ing with DATA_SEG_BITS */
|
|
230
|
|
231 #define XPNTR(a) XUINT (a)
|
11361
|
232
|
|
233 /* Declare malloc and realloc in a way that is clean.
|
|
234 But not in makefiles! */
|
|
235
|
|
236 #ifndef NOT_C_CODE
|
|
237 /* We need these because pointers are larger than the default ints. */
|
|
238 #include <alloca.h>
|
11696
|
239
|
|
240 /* Hack alert! For reasons unknown to mankind the string.h file insists
|
|
241 on defining bcopy etc. as taking char pointers as arguments. With
|
|
242 Emacs this produces an endless amount of warning which are harmless,
|
|
243 but tends to flood the real errors. This hack works around this problem
|
|
244 by not prototyping. */
|
|
245 #define bcopy string_h_bcopy
|
|
246 #define bzero string_h_bzero
|
|
247 #define bcmp string_h_bcmp
|
11361
|
248 #include <string.h>
|
11696
|
249 #undef bcopy
|
|
250 #undef bzero
|
|
251 #undef bcmp
|
|
252
|
11979
|
253 /* We need to prototype these for the lib-src programs even if we don't
|
|
254 use the system malloc for the Emacs proper. */
|
12301
|
255 #ifdef _MALLOC_INTERNAL
|
12235
|
256 /* These declarations are designed to match the ones in gmalloc.c. */
|
|
257 #if defined (__STDC__) && __STDC__
|
13534
|
258 extern void *malloc (), *realloc (), *calloc ();
|
12235
|
259 #else
|
13534
|
260 extern char *malloc (), *realloc (), *calloc ();
|
12235
|
261 #endif
|
12301
|
262 #else /* not _MALLOC_INTERNAL */
|
13534
|
263 extern void *malloc (), *realloc (), *calloc ();
|
12301
|
264 #endif /* not _MALLOC_INTERNAL */
|
|
265
|
11979
|
266
|
11361
|
267 extern long *xmalloc (), *xrealloc ();
|
11979
|
268
|
|
269 #ifdef REL_ALLOC
|
|
270 #ifndef _MALLOC_INTERNAL
|
|
271 /* "char *" because ralloc.c defines it that way. gmalloc.c thinks it
|
|
272 is allowed to prototype these as "void *" so we don't prototype in
|
|
273 that case. You're right: it stinks! */
|
|
274 extern char *r_alloc (), *r_re_alloc ();
|
|
275 extern void r_alloc_free ();
|
|
276 #endif /* not _MALLOC_INTERNAL */
|
|
277 #endif /* REL_ALLOC */
|
|
278
|
|
279 #endif /* not NOT_C_CODE */
|
12450
|
280
|
12836
|
281 #ifdef OSF1
|
12450
|
282 #define PTY_ITERATION for (i = 0; i < 1; i++) /* ick */
|
|
283 #define PTY_NAME_SPRINTF /* none */
|
|
284 #define PTY_TTY_NAME_SPRINTF /* none */
|
|
285 #define PTY_OPEN \
|
|
286 do \
|
|
287 { \
|
|
288 int dummy; \
|
13712
|
289 SIGMASKTYPE mask; \
|
|
290 mask = sigblockx (SIGCHLD); \
|
12450
|
291 if (-1 == openpty (&fd, &dummy, pty_name, 0, 0)) \
|
|
292 fd = -1; \
|
13712
|
293 sigsetmask (mask); \
|
12450
|
294 close (dummy); \
|
|
295 } \
|
|
296 while (0)
|
12836
|
297 #endif
|
12827
|
298
|
15850
|
299 /* On the Alpha it's best to avoid including TERMIO since struct
|
|
300 termio and struct termios are mutually incompatible. */
|
12827
|
301 #define NO_TERMIO
|
|
302
|
15850
|
303 #ifdef LINUX
|
|
304 # define TEXT_END ({ extern int _etext; &_etext; })
|
|
305 # ifndef __ELF__
|
|
306 # define COFF
|
|
307 # define DATA_END ({ extern int _EDATA; &_EDATA; })
|
|
308 # endif /* notdef __ELF__ */
|
12827
|
309 #endif
|