view src/sheap.c @ 87834:b7acc6fad5a9

(org-export-latex-cleaned-string): Fixed. (org-export-latex-special-chars): Convert "..." in \ldots and skip tables (org-export-latex-fontify-headline): Changed parameter name (org-export-as-latex): Handle export of subtrees (org-export-latex-make-header): New argument TITLE (org-export-latex-content): New argument EXCLUDE-LIST (org-list-parse-list): New name for org-export-latex-parse-list (org-export-latex-make-header): New name for org-export-latex-make-preamble (org-list-to-generic): New name of org-export-list-to-generic (org-list-to-latex): New name of org-export-list-to-latex (org-list-item-begin, org-list-end, org-list-insert-radio-list) (org-list-send-list, org-list-to-texinfo) (org-list-to-html): New functions (org-export-latex-tables-column-borders) (org-export-latex-default-class, org-export-latex-classes) (org-export-latex-classes-sectioning) (org-list-radio-list-templates): New options (org-export-latex-header): New variable (org-latex-entities): New constant (org-export-latex-default-sectioning, org-export-latex-preamble) (org-export-latex-prepare-text-option) (org-export-latex-get-sectioning): Removed
author Carsten Dominik <dominik@science.uva.nl>
date Fri, 18 Jan 2008 15:15:10 +0000
parents fc2bcd2a8aad
children 606f2d163a64 8971ddf55736
line wrap: on
line source

/* simulate `sbrk' with an array in .bss, for `unexec' support for Cygwin;
   complete rewrite of xemacs Cygwin `unexec' code

   Copyright (C) 2004, 2005, 2006, 2007, 2008 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 3, or (at your option)
any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
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, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.  */

#include <config.h>
#include <stdio.h>
#include "lisp.h"

#include <unistd.h>

#define STATIC_HEAP_SIZE	(12 * 1024 * 1024)

int debug_sheap = 0;

#define BLOCKSIZE 4096

char bss_sbrk_buffer[STATIC_HEAP_SIZE];
char *bss_sbrk_ptr;
int bss_sbrk_did_unexec;

void *
bss_sbrk (ptrdiff_t request_size)
{
  if (!bss_sbrk_ptr)
    {
      bss_sbrk_ptr = bss_sbrk_buffer;
#ifdef CYGWIN
      sbrk (BLOCKSIZE);		/* force space for fork to work */
#endif
    }

  if (!(int) request_size)
    {
      return (bss_sbrk_ptr);
    }
  else if (bss_sbrk_ptr + (int) request_size < bss_sbrk_buffer)
    {
      printf
	("attempt to free too much: avail %d used %d failed request %d\n",
	 STATIC_HEAP_SIZE, bss_sbrk_ptr - bss_sbrk_buffer,
	 (int) request_size);
      exit (-1);
      return 0;
    }
  else if (bss_sbrk_ptr + (int) request_size >
	   bss_sbrk_buffer + STATIC_HEAP_SIZE)
    {
      printf ("static heap exhausted: avail %d used %d failed request %d\n",
	      STATIC_HEAP_SIZE,
	      bss_sbrk_ptr - bss_sbrk_buffer, (int) request_size);
      exit (-1);
      return 0;
    }
  else if ((int) request_size < 0)
    {
      bss_sbrk_ptr += (int) request_size;
      if (debug_sheap)
	printf ("freed size %d\n", request_size);
      return bss_sbrk_ptr;
    }
  else
    {
      char *ret = bss_sbrk_ptr;
      if (debug_sheap)
	printf ("allocated 0x%08x size %d\n", ret, request_size);
      bss_sbrk_ptr += (int) request_size;
      return ret;
    }
}

void
report_sheap_usage (int die_if_pure_storage_exceeded)
{
  char buf[200];
  sprintf (buf, "Static heap usage: %d of %d bytes",
	   bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
  message ("%s", buf);
}

/* arch-tag: 1bc386e8-71c2-4da4-b8b5-c1674a9cf926
   (do not change this comment) */