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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
3
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
4 Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
54844
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 This file is part of GNU Emacs.
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
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
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
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
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 GNU General Public License for more details.
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
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
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 #include <config.h>
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 #include <stdio.h>
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 #include "lisp.h"
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 #include <unistd.h>
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
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
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 int debug_sheap = 0;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 #define BLOCKSIZE 4096
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 char bss_sbrk_buffer[STATIC_HEAP_SIZE];
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34 char *bss_sbrk_ptr;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 int bss_sbrk_did_unexec;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 void *
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 bss_sbrk (ptrdiff_t request_size)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 if (!bss_sbrk_ptr)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 bss_sbrk_ptr = bss_sbrk_buffer;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43 #ifdef CYGWIN
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 sbrk (BLOCKSIZE); /* force space for fork to work */
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 #endif
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 if (!(int) request_size)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 return (bss_sbrk_ptr);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 printf
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 ("attempt to free too much: avail %d used %d failed request %d\n",
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 (int) request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 exit (-1);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 return 0;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 else if (bss_sbrk_ptr + (int) request_size >
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 bss_sbrk_buffer + STATIC_HEAP_SIZE)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 printf ("static heap exhausted: avail %d used %d failed request %d\n",
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 STATIC_HEAP_SIZE,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 exit (-1);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 return 0;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 else if ((int) request_size < 0)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 bss_sbrk_ptr += (int) request_size;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 if (debug_sheap)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 printf ("freed size %d\n", request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 return bss_sbrk_ptr;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 else
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 char *ret = bss_sbrk_ptr;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 if (debug_sheap)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 printf ("allocated 0x%08x size %d\n", ret, request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 bss_sbrk_ptr += (int) request_size;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 return ret;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
86
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 void
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 report_sheap_usage (int die_if_pure_storage_exceeded)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 char buf[200];
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 sprintf (buf, "Static heap usage: %d of %d bytes",
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 message ("%s", buf);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
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) */