X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/e4f74c7e882531505a0da7c24a19a9a3ade20bda..ff56ba1f4fa5b785ed6d845f89934dde0e036c32:/src/puresize.h diff --git a/src/puresize.h b/src/puresize.h index 388d954ad7..67e758ae79 100644 --- a/src/puresize.h +++ b/src/puresize.h @@ -1,11 +1,12 @@ /* How much read-only Lisp storage a dumped Emacs needs. - Copyright (C) 1993 Free Software Foundation, Inc. + Copyright (C) 1993, 2002, 2003, 2004, 2005, + 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 1, or (at your option) +the Free Software Foundation; either version 2, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, @@ -15,7 +16,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /* Define PURESIZE, the number of bytes of pure Lisp code to leave space for. @@ -29,18 +31,25 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* First define a measure of the amount of data we have. */ -#ifndef BASE_PURESIZE -#ifdef MULTI_FRAME -#define BASE_PURESIZE 255000 -#else -#define BASE_PURESIZE 208000 +/* A system configuration file may set this to request a certain extra + amount of storage. This is a lot more update-robust that defining + BASE_PURESIZE or even PURESIZE directly. */ +#ifndef SYSTEM_PURESIZE_EXTRA +#define SYSTEM_PURESIZE_EXTRA 0 #endif + +#ifndef SITELOAD_PURESIZE_EXTRA +#define SITELOAD_PURESIZE_EXTRA 0 +#endif + +#ifndef BASE_PURESIZE +#define BASE_PURESIZE (1210000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA) #endif /* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */ #ifndef PURESIZE_RATIO -#if VALBITS + GCTYPEBITS + 1 > 32 -#define PURESIZE_RATIO 8/5 /* Don't surround with `()'. */ +#if BITS_PER_EMACS_INT > 32 +#define PURESIZE_RATIO 10/6 /* Don't surround with `()'. */ #else #define PURESIZE_RATIO 1 #endif @@ -51,32 +60,43 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO) #endif -#ifdef VIRT_ADDR_VARIES +/* Signal an error if OBJ is pure. */ +#define CHECK_IMPURE(obj) \ + { if (PURE_P (obj)) \ + pure_write_error (); } +extern void pure_write_error P_ ((void)) NO_RETURN; + +/* Define PURE_P. */ + +#if defined(VIRT_ADDR_VARIES) || defined(CYGWIN) /* For machines like APOLLO where text and data can go anywhere in virtual memory. */ -#define CHECK_IMPURE(obj) \ - { extern EMACS_INT pure[]; \ - if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \ - && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) \ - pure_write_error (); } + +extern EMACS_INT pure[]; + +#define PURE_P(obj) \ + ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) \ + && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) #else /* not VIRT_ADDR_VARIES */ #ifdef PNTR_COMPARISON_TYPE +/* When PNTR_COMPARISON_TYPE is not the default (unsigned int). */ -/* when PNTR_COMPARISON_TYPE is not the default (unsigned int) */ -#define CHECK_IMPURE(obj) \ - { extern EMACS_INT my_edata; \ - if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) &my_edata) \ - pure_write_error (); } +extern char my_edata[]; + +#define PURE_P(obj) \ + ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) my_edata) #else /* not VIRT_ADDRESS_VARIES, not PNTR_COMPARISON_TYPE */ -#define CHECK_IMPURE(obj) \ - { extern EMACS_INT my_edata; \ - if (XPNTR (obj) < (unsigned int) &my_edata) \ - pure_write_error (); } +extern char my_edata[]; + +#define PURE_P(obj) \ + (XPNTR (obj) < (unsigned int) my_edata) #endif /* PNTR_COMPARISON_TYPE */ #endif /* VIRT_ADDRESS_VARIES */ +/* arch-tag: fd9b0a91-a70e-4729-a75a-6bb4ca1ce14f + (do not change this comment) */