Mercurial > emacs
annotate src/sheap.c @ 97528:184bb2071e3f
mail/: Add new (temporary) libaries for which to test Rmail/mbox such
that Rmail/babyl is not affected. This creates a facility/feature
called "pmail" (analagous to "rmail") that can be used independently
from Rmail for testing purposes. The plan is to replace the "rmail"
files eventually and remove "pmail" entirely at that point. In the
interim, interested developers can use either Rmail or Pmail or both
(which is not recommended for the casual User or the faint of heart).
author | Paul Reilly <pmr@pajato.com> |
---|---|
date | Mon, 18 Aug 2008 04:51:28 +0000 |
parents | 8971ddf55736 |
children | e038c1a8307c |
rev | line source |
---|---|
66663
d74deb025f5a
(STATIC_HEAP_SIZE): Increment both definitions.
Richard M. Stallman <rms@gnu.org>
parents:
64770
diff
changeset
|
1 /* simulate `sbrk' with an array in .bss, for `unexec' support for Cygwin; |
d74deb025f5a
(STATIC_HEAP_SIZE): Increment both definitions.
Richard M. Stallman <rms@gnu.org>
parents:
64770
diff
changeset
|
2 complete rewrite of xemacs Cygwin `unexec' code |
54844 | 3 |
79759 | 4 Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
54844 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
54844 | 9 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
11 (at your option) any later version. |
54844 | 12 |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
54844 | 20 |
21 #include <config.h> | |
22 #include <stdio.h> | |
23 #include "lisp.h" | |
24 | |
25 #include <unistd.h> | |
26 | |
69554
e6104b603d86
(STATIC_HEAP_SIZE): Enlarge STATIC_HEAP_SIZE to 12MB.
Eli Zaretskii <eliz@gnu.org>
parents:
68651
diff
changeset
|
27 #define STATIC_HEAP_SIZE (12 * 1024 * 1024) |
54844 | 28 |
29 int debug_sheap = 0; | |
30 | |
31 #define BLOCKSIZE 4096 | |
32 | |
33 char bss_sbrk_buffer[STATIC_HEAP_SIZE]; | |
34 char *bss_sbrk_ptr; | |
35 int bss_sbrk_did_unexec; | |
36 | |
37 void * | |
38 bss_sbrk (ptrdiff_t request_size) | |
39 { | |
40 if (!bss_sbrk_ptr) | |
41 { | |
42 bss_sbrk_ptr = bss_sbrk_buffer; | |
43 #ifdef CYGWIN | |
44 sbrk (BLOCKSIZE); /* force space for fork to work */ | |
45 #endif | |
46 } | |
47 | |
48 if (!(int) request_size) | |
49 { | |
50 return (bss_sbrk_ptr); | |
51 } | |
52 else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer) | |
53 { | |
54 printf | |
55 ("attempt to free too much: avail %d used %d failed request %d\n", | |
56 STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer, | |
57 (int) request_size); | |
58 exit (-1); | |
59 return 0; | |
60 } | |
61 else if (bss_sbrk_ptr + (int) request_size > | |
62 bss_sbrk_buffer + STATIC_HEAP_SIZE) | |
63 { | |
64 printf ("static heap exhausted: avail %d used %d failed request %d\n", | |
65 STATIC_HEAP_SIZE, | |
66 bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size); | |
67 exit (-1); | |
68 return 0; | |
69 } | |
70 else if ((int) request_size < 0) | |
71 { | |
72 bss_sbrk_ptr += (int) request_size; | |
73 if (debug_sheap) | |
74 printf ("freed size %d\n", request_size); | |
75 return bss_sbrk_ptr; | |
76 } | |
77 else | |
78 { | |
79 char *ret = bss_sbrk_ptr; | |
80 if (debug_sheap) | |
81 printf ("allocated 0x%08x size %d\n", ret, request_size); | |
82 bss_sbrk_ptr += (int) request_size; | |
83 return ret; | |
84 } | |
85 } | |
86 | |
87 void | |
88 report_sheap_usage (int die_if_pure_storage_exceeded) | |
89 { | |
90 char buf[200]; | |
91 sprintf (buf, "Static heap usage: %d of %d bytes", | |
92 bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE); | |
93 message ("%s", buf); | |
94 } | |
54858
44a3fff23885
Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents:
54844
diff
changeset
|
95 |
44a3fff23885
Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents:
54844
diff
changeset
|
96 /* arch-tag: 1bc386e8-71c2-4da4-b8b5-c1674a9cf926 |
44a3fff23885
Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents:
54844
diff
changeset
|
97 (do not change this comment) */ |