Commit | Line | Data |
---|---|---|
b061d5f1 RS |
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 | |
3b7ad313 EN |
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
19 | Boston, MA 02111-1307, USA. */ | |
b061d5f1 RS |
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 | ||
5964b664 | 32 | #define BITS_PER_LONG 64 |
b061d5f1 | 33 | |
74d3f806 KH |
34 | /* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word |
35 | is the most significant byte. */ | |
36 | ||
37 | #undef WORDS_BIG_ENDIAN | |
38 | ||
b061d5f1 RS |
39 | /* Define NO_ARG_ARRAY if you cannot take the address of the first of a |
40 | * group of arguments and treat it as an array of the arguments. */ | |
41 | ||
42 | #define NO_ARG_ARRAY | |
43 | ||
44 | /* Define WORD_MACHINE if addresses and such have | |
45 | * to be corrected before they can be used as byte counts. */ | |
46 | ||
47 | /* #define WORD_MACHINE */ | |
48 | ||
49 | /* Now define a symbol for the cpu type, if your compiler | |
50 | does not define it automatically: | |
51 | Ones defined so far include vax, m68000, ns16000, pyramid, | |
52 | orion, tahoe, APOLLO and many others */ | |
53 | ||
54 | /* __alpha defined automatically */ | |
55 | ||
56 | ||
57 | /* Use type EMACS_INT rather than a union, to represent Lisp_Object */ | |
58 | /* This is desirable for most machines. */ | |
59 | ||
60 | #define NO_UNION_TYPE | |
61 | ||
62 | /* Define the type to use. */ | |
63 | #define EMACS_INT long | |
64 | #define EMACS_UINT unsigned long | |
fbe0154a | 65 | #define SPECIAL_EMACS_INT |
b061d5f1 RS |
66 | |
67 | /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend | |
68 | the 24-bit bit field into an int. In other words, if bit fields | |
69 | are always unsigned. | |
70 | ||
71 | If you use NO_UNION_TYPE, this flag does not matter. */ | |
72 | ||
73 | #define EXPLICIT_SIGN_EXTEND | |
74 | ||
75 | /* Data type of load average, as read out of kmem. */ | |
76 | ||
77 | #define LOAD_AVE_TYPE long | |
78 | ||
79 | /* Convert that into an integer that is 100 for a load average of 1.0 */ | |
80 | ||
81 | #define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE) | |
82 | ||
83 | /* Define CANNOT_DUMP on machines where unexec does not work. | |
84 | Then the function dump-emacs will not be defined | |
85 | and temacs will do (load "loadup") automatically unless told otherwise. */ | |
86 | ||
87 | /* #define CANNOT_DUMP */ | |
88 | ||
89 | /* Define VIRT_ADDR_VARIES if the virtual addresses of | |
90 | pure and impure space as loaded can vary, and even their | |
91 | relative order cannot be relied on. | |
92 | ||
93 | Otherwise Emacs assumes that text space precedes data space, | |
94 | numerically. */ | |
95 | ||
96 | /* #define VIRT_ADDR_VARIES */ | |
97 | ||
98 | /* Define C_ALLOCA if this machine does not support a true alloca | |
99 | and the one written in C should be used instead. | |
100 | Define HAVE_ALLOCA to say that the system provides a properly | |
101 | working alloca function and it should be used. | |
102 | Define neither one if an assembler-language alloca | |
103 | in the file alloca.s should be used. */ | |
104 | ||
105 | #define HAVE_ALLOCA | |
106 | ||
107 | /* GNU malloc and the relocating allocator do not work together | |
352c01a5 KH |
108 | with X. [Who wrote that?] */ |
109 | ||
110 | /* May 1995: reportedly [Rainer Schoepf <schoepf@uni-mainz.de>] both the | |
111 | system and the gnu malloc system work with "alpha-dec-osf3.0" and | |
112 | "alpha-dec-osf3.2". */ | |
113 | ||
114 | /* May 1995: it seems to me [Morten Welinder <terra@diku.dk>] that both | |
115 | mallocs work with "alpha-dec-osf2.0", but I daren't break anything | |
116 | right now. Feel free to play if you want. */ | |
b061d5f1 | 117 | |
76869384 | 118 | /* #define SYSTEM_MALLOC */ |
b061d5f1 RS |
119 | |
120 | /* Define NO_REMAP if memory segmentation makes it not work well | |
121 | to change the boundary between the text section and data section | |
122 | when Emacs is dumped. If you define this, the preloaded Lisp | |
123 | code will not be sharable; but that's better than failing completely. */ | |
124 | ||
125 | #define NO_REMAP | |
126 | ||
127 | /* Some really obscure 4.2-based systems (like Sequent DYNIX) | |
128 | * do not support asynchronous I/O (using SIGIO) on sockets, | |
129 | * even though it works fine on tty's. If you have one of | |
130 | * these systems, define the following, and then use it in | |
131 | * config.h (or elsewhere) to decide when (not) to use SIGIO. | |
132 | * | |
133 | * You'd think this would go in an operating-system description file, | |
134 | * but since it only occurs on some, but not all, BSD systems, the | |
135 | * reasonable place to select for it is in the machine description | |
136 | * file. | |
137 | */ | |
138 | ||
139 | /* #define NO_SOCK_SIGIO */ | |
140 | ||
141 | ||
142 | #define HAVE_X11R4 | |
143 | #define HAVE_X11R5 | |
144 | ||
145 | ||
146 | /* Describe layout of the address space in an executing process. */ | |
147 | ||
148 | #define TEXT_START 0x120000000 | |
149 | #define DATA_START 0x140000000 | |
150 | ||
151 | /* This is necessary for mem-limits.h, so that start_of_data gives | |
152 | the correct value */ | |
153 | ||
154 | #define DATA_SEG_BITS 0x140000000 | |
155 | ||
1596f1c9 | 156 | #ifdef OSF1 |
b061d5f1 RS |
157 | #define ORDINARY_LINK |
158 | ||
a1e7cebf KH |
159 | /* Some systems seem to have this, others don't. */ |
160 | #ifdef HAVE_LIBDNET | |
161 | #define LIBS_MACHINE -ldnet | |
162 | #else | |
163 | #define LIBS_MACHINE -ldnet_stub | |
164 | #endif | |
1596f1c9 | 165 | #endif /* OSF1 */ |
a1e7cebf | 166 | |
1ba29850 RS |
167 | #if 0 /* Rainer Schoepf <schoepf@uni-mainz.de> says this loses with X11R6 |
168 | since it has only shared libraries. */ | |
352c01a5 KH |
169 | #ifndef __GNUC__ |
170 | /* This apparently is for the system ld as opposed to Gnu ld. */ | |
5f8e11f9 RS |
171 | #ifdef OSF1 |
172 | #define LD_SWITCH_MACHINE -non_shared | |
173 | #endif | |
352c01a5 | 174 | #endif |
1ba29850 | 175 | #endif /* 0 */ |
5f8e11f9 | 176 | |
1596f1c9 | 177 | #ifdef OSF1 |
b061d5f1 RS |
178 | #define LIBS_DEBUG |
179 | #define START_FILES pre-crt0.o | |
045f778e | 180 | #endif |
b061d5f1 | 181 | |
629aa3cb RS |
182 | #ifdef LINUX |
183 | /* This controls a conditional in main. */ | |
184 | #define LINUX_SBRK_BUG | |
185 | #endif | |
b061d5f1 RS |
186 | |
187 | /* The program to be used for unexec. */ | |
188 | ||
189 | #define UNEXEC unexalpha.o | |
190 | ||
191 | ||
192 | #define PNTR_COMPARISON_TYPE unsigned long | |
193 | ||
308c7a07 | 194 | /* On the 64 bit architecture, we can use 60 bits for addresses */ |
b061d5f1 | 195 | |
308c7a07 | 196 | #define VALBITS 60 |
b061d5f1 RS |
197 | |
198 | ||
199 | /* This definition of MARKBIT is necessary because of the comparison of | |
200 | ARRAY_MARK_FLAG and MARKBIT in an #if in lisp.h, which cpp doesn't like. */ | |
201 | ||
202 | #define MARKBIT 0x8000000000000000L | |
203 | ||
204 | ||
205 | /* Define XINT and XUINT so that they can take arguments of type int */ | |
206 | ||
5964b664 | 207 | #define XINT(a) (((long) (a) << (BITS_PER_LONG - VALBITS)) >> (BITS_PER_LONG - VALBITS)) |
a1e7cebf | 208 | #define XUINT(a) ((long) (a) & VALMASK) |
b061d5f1 RS |
209 | |
210 | /* Define XPNTR to avoid or'ing with DATA_SEG_BITS */ | |
211 | ||
212 | #define XPNTR(a) XUINT (a) | |
fbe0154a RS |
213 | |
214 | /* Declare malloc and realloc in a way that is clean. | |
215 | But not in makefiles! */ | |
216 | ||
217 | #ifndef NOT_C_CODE | |
fbe0154a RS |
218 | /* We need these because pointers are larger than the default ints. */ |
219 | #include <alloca.h> | |
d9780682 RS |
220 | |
221 | /* Hack alert! For reasons unknown to mankind the string.h file insists | |
222 | on defining bcopy etc. as taking char pointers as arguments. With | |
223 | Emacs this produces an endless amount of warning which are harmless, | |
224 | but tends to flood the real errors. This hack works around this problem | |
225 | by not prototyping. */ | |
226 | #define bcopy string_h_bcopy | |
227 | #define bzero string_h_bzero | |
228 | #define bcmp string_h_bcmp | |
fbe0154a | 229 | #include <string.h> |
d9780682 RS |
230 | #undef bcopy |
231 | #undef bzero | |
232 | #undef bcmp | |
233 | ||
352c01a5 KH |
234 | /* We need to prototype these for the lib-src programs even if we don't |
235 | use the system malloc for the Emacs proper. */ | |
76869384 | 236 | #ifdef _MALLOC_INTERNAL |
1ba29850 RS |
237 | /* These declarations are designed to match the ones in gmalloc.c. */ |
238 | #if defined (__STDC__) && __STDC__ | |
6441db6b | 239 | extern void *malloc (), *realloc (), *calloc (); |
1ba29850 | 240 | #else |
6441db6b | 241 | extern char *malloc (), *realloc (), *calloc (); |
1ba29850 | 242 | #endif |
76869384 | 243 | #else /* not _MALLOC_INTERNAL */ |
6441db6b | 244 | extern void *malloc (), *realloc (), *calloc (); |
76869384 RS |
245 | #endif /* not _MALLOC_INTERNAL */ |
246 | ||
352c01a5 | 247 | |
fbe0154a | 248 | extern long *xmalloc (), *xrealloc (); |
352c01a5 KH |
249 | |
250 | #ifdef REL_ALLOC | |
251 | #ifndef _MALLOC_INTERNAL | |
252 | /* "char *" because ralloc.c defines it that way. gmalloc.c thinks it | |
253 | is allowed to prototype these as "void *" so we don't prototype in | |
254 | that case. You're right: it stinks! */ | |
255 | extern char *r_alloc (), *r_re_alloc (); | |
256 | extern void r_alloc_free (); | |
257 | #endif /* not _MALLOC_INTERNAL */ | |
258 | #endif /* REL_ALLOC */ | |
259 | ||
352c01a5 | 260 | #endif /* not NOT_C_CODE */ |
7a8b824c | 261 | |
1596f1c9 | 262 | #ifdef OSF1 |
7a8b824c RS |
263 | #define PTY_ITERATION for (i = 0; i < 1; i++) /* ick */ |
264 | #define PTY_NAME_SPRINTF /* none */ | |
265 | #define PTY_TTY_NAME_SPRINTF /* none */ | |
266 | #define PTY_OPEN \ | |
267 | do \ | |
268 | { \ | |
269 | int dummy; \ | |
cfbeebb0 KH |
270 | SIGMASKTYPE mask; \ |
271 | mask = sigblockx (SIGCHLD); \ | |
7a8b824c RS |
272 | if (-1 == openpty (&fd, &dummy, pty_name, 0, 0)) \ |
273 | fd = -1; \ | |
cfbeebb0 | 274 | sigsetmask (mask); \ |
7a8b824c RS |
275 | close (dummy); \ |
276 | } \ | |
277 | while (0) | |
1596f1c9 | 278 | #endif |
ee803128 RS |
279 | |
280 | #ifdef linux | |
281 | #define COFF | |
282 | /* Linux/Alpha doesn't like it if termio.h and termios.h get included | |
283 | simultaneously. */ | |
284 | #define NO_TERMIO | |
285 | ||
3a0b4260 RS |
286 | #define TEXT_END ({ extern int _etext; &_etext; }) |
287 | #define DATA_END ({ extern int _EDATA; &_EDATA; }) | |
ee803128 | 288 | #endif |