Fix bug #9221 with memory leak in bidi display.
[bpt/emacs.git] / src / puresize.h
CommitLineData
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
4This file is part of GNU Emacs.
5
b9b1cc14 6GNU Emacs is free software: you can redistribute it and/or modify
e772f7cd 7it under the terms of the GNU General Public License as published by
b9b1cc14
GM
8the Free Software Foundation, either version 3 of the License, or
9(at your option) any later version.
e772f7cd
JB
10
11GNU Emacs is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
b9b1cc14 17along 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 74extern 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
82extern 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
90extern 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 */