annotate src/sheap.c @ 61263:56619c3aaf99

(fancy-splash-text): Shorten default text of "Emacs Tutorial" line. Also, if the current language env indicates an available tutorial file other than TUTORIAL, extract its title and append it to the line in parentheses. (fancy-splash-insert): If arg is a thunk, funcall it.
author Thien-Thi Nguyen <ttn@gnuvola.org>
date Mon, 04 Apr 2005 07:41:58 +0000
parents 44a3fff23885
children a8fa7c632ee4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
54844
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 /* simulate sbrk() with an array in .bss, for unexec() support for Cygwin;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2 complete rewrite of xemacs Cygwin unexec() code
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
3
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4 Copyright (C) 2004
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5 Free Software Foundation, Inc.
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7 This file is part of GNU Emacs.
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9 GNU Emacs is free software; you can redistribute it and/or modify
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10 it under the terms of the GNU General Public License as published by
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 the Free Software Foundation; either version 2, or (at your option)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12 any later version.
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14 GNU Emacs is distributed in the hope that it will be useful,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17 GNU General Public License for more details.
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 along with GNU Emacs; see the file COPYING. If not, write to
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 Boston, MA 02111-1307, USA. */
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24 #include <config.h>
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 #include <stdio.h>
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26 #include "lisp.h"
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 #include <unistd.h>
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 #ifdef HAVE_X_WINDOWS
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 #define STATIC_HEAP_SIZE (7 * 1024 * 1024)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32 #else
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 #define STATIC_HEAP_SIZE (7 * 1024 * 1024)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34 #endif
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36 int debug_sheap = 0;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 #define BLOCKSIZE 4096
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 char bss_sbrk_buffer[STATIC_HEAP_SIZE];
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 char *bss_sbrk_ptr;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 int bss_sbrk_did_unexec;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 void *
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 bss_sbrk (ptrdiff_t request_size)
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 if (!bss_sbrk_ptr)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 bss_sbrk_ptr = bss_sbrk_buffer;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 #ifdef CYGWIN
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 sbrk (BLOCKSIZE); /* force space for fork to work */
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52 #endif
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
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 if (!(int) request_size)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 return (bss_sbrk_ptr);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer)
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 printf
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 ("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
63 STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 (int) request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 exit (-1);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 return 0;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 else if (bss_sbrk_ptr + (int) request_size >
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 bss_sbrk_buffer + STATIC_HEAP_SIZE)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 printf ("static heap exhausted: avail %d used %d failed request %d\n",
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 STATIC_HEAP_SIZE,
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 exit (-1);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 return 0;
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 if ((int) request_size < 0)
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 bss_sbrk_ptr += (int) request_size;
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 ("freed size %d\n", request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 return bss_sbrk_ptr;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 else
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 char *ret = bss_sbrk_ptr;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 if (debug_sheap)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 printf ("allocated 0x%08x size %d\n", ret, request_size);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 bss_sbrk_ptr += (int) request_size;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 return ret;
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 }
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94 void
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 report_sheap_usage (int die_if_pure_storage_exceeded)
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 {
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 char buf[200];
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 sprintf (buf, "Static heap usage: %d of %d bytes",
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
100 message ("%s", buf);
36dec396c129 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
101 }
54858
44a3fff23885 Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents: 54844
diff changeset
102
44a3fff23885 Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents: 54844
diff changeset
103 /* arch-tag: 1bc386e8-71c2-4da4-b8b5-c1674a9cf926
44a3fff23885 Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents: 54844
diff changeset
104 (do not change this comment) */