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