Commit | Line | Data |
---|---|---|
e772f7cd | 1 | /* How much read-only Lisp storage a dumped Emacs needs. |
73b0cd50 | 2 | Copyright (C) 1993, 2001-2011 Free Software Foundation, Inc. |
e772f7cd JB |
3 | |
4 | This file is part of GNU Emacs. | |
5 | ||
b9b1cc14 | 6 | GNU Emacs is free software: you can redistribute it and/or modify |
e772f7cd | 7 | it under the terms of the GNU General Public License as published by |
b9b1cc14 GM |
8 | the Free Software Foundation, either version 3 of the License, or |
9 | (at your option) any later version. | |
e772f7cd JB |
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 | |
b9b1cc14 | 17 | along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
e772f7cd | 18 | |
e4f74c7e | 19 | /* Define PURESIZE, the number of bytes of pure Lisp code to leave space for. |
e772f7cd JB |
20 | |
21 | At one point, this was defined in config.h, meaning that changing | |
22 | PURESIZE would make Make recompile all of Emacs. But only a few | |
d427b66a | 23 | files actually use PURESIZE, so we split it out to its own .h file. |
e772f7cd | 24 | |
d427b66a JB |
25 | Make sure to include this file after config.h, since that tells us |
26 | whether we are running X windows, which tells us how much pure | |
27 | storage to allocate. */ | |
28 | ||
e4f74c7e RS |
29 | /* First define a measure of the amount of data we have. */ |
30 | ||
87485d6f MW |
31 | /* A system configuration file may set this to request a certain extra |
32 | amount of storage. This is a lot more update-robust that defining | |
33 | BASE_PURESIZE or even PURESIZE directly. */ | |
34 | #ifndef SYSTEM_PURESIZE_EXTRA | |
35 | #define SYSTEM_PURESIZE_EXTRA 0 | |
36 | #endif | |
37 | ||
64aba29c RS |
38 | #ifndef SITELOAD_PURESIZE_EXTRA |
39 | #define SITELOAD_PURESIZE_EXTRA 0 | |
40 | #endif | |
41 | ||
e4f74c7e | 42 | #ifndef BASE_PURESIZE |
5d28d4b1 | 43 | #define BASE_PURESIZE (1620000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA) |
d427b66a | 44 | #endif |
e4f74c7e RS |
45 | |
46 | /* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */ | |
47 | #ifndef PURESIZE_RATIO | |
1b0338f7 | 48 | #if BITS_PER_EMACS_INT > 32 |
242bc74c | 49 | #define PURESIZE_RATIO 10/6 /* Don't surround with `()'. */ |
e4f74c7e RS |
50 | #else |
51 | #define PURESIZE_RATIO 1 | |
52 | #endif | |
53 | #endif | |
54 | ||
dbc812e0 SM |
55 | #ifdef ENABLE_CHECKING |
56 | /* ENABLE_CHECKING somehow increases the purespace used, probably because | |
57 | it tends to cause some macro arguments to be evaluated twice. This is | |
58 | a bug, but it's difficult to track it down. */ | |
59 | #define PURESIZE_CHECKING_RATIO 12/10 /* Don't surround with `()'. */ | |
60 | #else | |
61 | #define PURESIZE_CHECKING_RATIO 1 | |
62 | #endif | |
63 | ||
e4f74c7e RS |
64 | /* This is the actual size in bytes to allocate. */ |
65 | #ifndef PURESIZE | |
dbc812e0 | 66 | #define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO * PURESIZE_CHECKING_RATIO) |
d427b66a | 67 | #endif |
e772f7cd | 68 | |
f75e1ee5 KH |
69 | /* Signal an error if OBJ is pure. */ |
70 | #define CHECK_IMPURE(obj) \ | |
71 | { if (PURE_P (obj)) \ | |
72 | pure_write_error (); } | |
ec5d8db7 | 73 | |
383e0970 | 74 | extern void pure_write_error (void) NO_RETURN; |
f75e1ee5 KH |
75 | \f |
76 | /* Define PURE_P. */ | |
e772f7cd | 77 | |
fec76d43 | 78 | #ifdef VIRT_ADDR_VARIES |
e39a993c | 79 | /* For machines where text and data can go anywhere |
e772f7cd | 80 | in virtual memory. */ |
f75e1ee5 KH |
81 | |
82 | extern EMACS_INT pure[]; | |
83 | ||
84 | #define PURE_P(obj) \ | |
85 | ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \ | |
86 | && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) | |
e772f7cd JB |
87 | |
88 | #else /* not VIRT_ADDR_VARIES */ | |
e772f7cd | 89 | |
f75e1ee5 KH |
90 | extern char my_edata[]; |
91 | ||
92 | #define PURE_P(obj) \ | |
93 | ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) my_edata) | |
e772f7cd | 94 | |
e772f7cd | 95 | #endif /* VIRT_ADDRESS_VARIES */ |