annotate src/w32heap.c @ 47576:b31c8ab7336a

Sync with version 2.0.20. Lengthy ChangeLog follows: 2002-09-22 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> Version 2.0.20 released. 2002-09-20 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> * net/tramp.el (tramp-completion-function-alist): Escape open paren in docstring. (tramp-user-regexp, tramp-host-regexp): Allow empty strings. (tramp-handle-insert-file-contents): Call tramp-message-for-buffer instead of tramp-message. (tramp-open-connection-rsh): Handle empty string as user name. (tramp-open-connection-su): Handle empty string as host name. Handle nil user name. (tramp-handle-file-local-copy, tramp-handle-write-region) (tramp-completion-handle-file-name-all-completions) (tramp-open-connection-telnet, tramp-open-connection-rsh) (tramp-open-connection-su, tramp-post-connection) (tramp-maybe-open-connection, tramp-method-out-of-band-p) (tramp-get-connection-function, tramp-get-remote-sh) (tramp-get-rsh-program, tramp-get-rsh-args) (tramp-get-rcp-program, tramp-get-rcp-args) (tramp-get-rcp-keep-date-arg, tramp-get-su-program) (tramp-get-su-args, tramp-get-telnet-program) (tramp-get-telnet-args): Use `tramp-find-method', perhaps require additional args USER, HOST. (tramp-action-password, tramp-open-connection-telnet) (tramp-open-connection-su, tramp-open-connection-multi) (tramp-method-out-of-band-p): `tramp-method-out-of-band-p' now takes USER and HOST arguments, to be able to use `tramp-find-method'. Update callers. (tramp-find-method): New function. 2002-09-20 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-insert-directory): Handle "--dired" in SWITCHES (by removing it). 2002-09-18 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-file-name-handler): Add `file-remote-p' property. 2002-09-17 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (top-level): Maybe autoload uudecode-decode-region. 2002-09-16 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-bug): Add tramp-methods. 2002-09-16 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-methods): Update docstring: tramp-encoding-command, tramp-decoding-command, tramp-encoding-function and tramp-decoding-function are not parameters anymore. (tramp-uuencode-region): Autoload it. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> Version 2.0.19 released. * net/tramp-uu.el: New file, implements uuencode in Lisp. * net/tramp.el (tramp-coding-commands): Use `tramp-uuencode-region' as local encoder for the uuencode based entries. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-write-region): Wrong parens. 2002-09-13 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> Version 2.0.18 released. * net/tramp.el (tramp-perl-decode): Perl changes to accomodate older versions of Perl. Now tested with 5.004. Suggestion from Michael Albinus. 2002-09-12 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-find-inline-encoding): Call tramp-call-local-coding-command with nil for INPUT and OUTPUT. (tramp-call-local-coding-command): OUTPUT equals nil means to discard the output. INPUT equals nil means /dev/null. 2002-09-12 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-encoding-shell): Default to environment variable COMSPEC on Windows. (tramp-handle-write-region): More debugging output. (tramp-find-inline-encoding): Ditto. 2002-09-11 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-handle-file-name-all-completions): Define `result1'. (tramp-parse-hosts-group): Discard IPv6 entries. 2002-09-11 Kai Gro?ohann <grossjoh@ls6.informatik.uni-dortmund.de> * net/tramp.el (tramp-post-connection): Only send Perl mime-encode/decode implementations when using inline method. (tramp-handle-file-local-copy) (tramp-handle-write-region, tramp-post-connection) (tramp-coding-commands, tramp-find-inline-encoding): For the inline encodings, distinguish between local and remote commands, instead of between commands and functions. (The local commands can be functions, too.) If the local host is a Windows machine, we can't expect the same commands to work there as on the remote host. (tramp-call-local-coding-command): New function for calling local encoding and decoding commands. (tramp-set-remote-encoding, tramp-get-remote-encoding) (tramp-set-remote-decoding, tramp-get-remote-decoding) (tramp-set-local-encoding, tramp-get-local-encoding) (tramp-set-local-decoding, tramp-get-local-decoding): New functions. (tramp-get-encoding-command, tramp-set-encoding-command) (tramp-get-decoding-command, tramp-set-decoding-command) (tramp-get-encoding-function, tramp-set-encoding-function) (tramp-get-decoding-function, tramp-set-decoding-function): Old functions, removed. 2002-09-10 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-open-connection-setup-interactive-shell): Change command to invoke /bin/sh slightly to make it compatible with the `rc' shell. Suggested by Daniel Pittman. 2002-09-10 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-handle-write-region): Added missing `)'. Hope it's the right place. 2002-09-09 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-open-connection-setup-interactive-shell): Do "exec env PS1='$ ' /bin/sh" instead of just "exec /bin/sh" in order to get a sane shell prompt. If people have ${CWD}, say, in their shell prompt, then the default login shell might display something harmless, but the /bin/sh will display a dollar sign which confused the subsequent prompt recognition. (tramp-multi-action-password): More debugging output. (tramp-encoding-shell): Renamed from tramp-sh-program. More documentation. Default to cmd.exe on Windows NT. (tramp-encoding-command-switch): New variable. Use instead of hard-wired "-c" which is only good for /bin/sh. (tramp-encoding-reads-stdin): New variable. If t, commands are called like "/bin/sh -c COMMAND <INPUT", if nil, they are called like "/bin/sh -c COMMAND INPUT", ie the input file is the last argument. (tramp-multi-sh-program): Always default to tramp-encoding-shell. (tramp-handle-file-local-copy, tramp-handle-write-region): Respect tramp-encoding-shell and friends. (tramp-find-inline-encoding): Use new-style calls for checking if the local commands work. 2002-09-07 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-methods): Remove `tramp-completion-function' entries. They are handled now by `tramp-completion-function-alist'. (tramp-completion-function): Defvar removed. I've never used it. Hmm. (tramp-get-completion-function) (tramp-get-completion-rsh, tramp-get-completion-ssh) (tramp-get-completion-telnet, tramp-get-completion-su): Functions removed as well. Not necessary any longer due to extended customization means. (tramp-completion-function-alist): New defcustom. Holds all FUNCTION FILE pairs used for user and host name completion relevant for METHOD. (tramp-completion-function-alist-rsh) (tramp-completion-function-alist-ssh) (tramp-completion-function-alist-telnet) (tramp-completion-function-alist-su): Defconst for initializing `tramp-completion-function-alist'. Unfortunately, mainly UNIX-like values are known for me until now. Needs to be completed for at least VMS++ like operating systems. (tramp-set-completion-function) (tramp-get-completion-function): New functions for configuration of `tramp-completion-function-alist'. The old definition of `tramp-get-completion-function' has been discarded. (tramp-completion-handle-file-name-all-completions): Change function call for user/host completion according to definition in `tramp-completion-function-alist'. (tramp-parse-passwd): Added exception handling for "root", because `tramp-get-completion-su' (the previous place for this stuff) doesn't exist any longer. 2002-09-07 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-enter-password): Use `tramp-password-end-of-line' to terminate the line. (tramp-bug): Include new variable `tramp-password-end-of-line'. (tramp-password-end-of-line): New variable. People who use plink under Windows might have to issue "\r\n" after the password, but they need to send just "\n" after the other commands. So this variable was introduced to complement `tramp-rsh-end-of-line'. (tramp-wait-for-output, tramp-post-connection): Allow "\r" at end of line of the output delimiter. 2002-09-06 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-file-local-copy, tramp-find-shell) (tramp-open-connection-setup-interactive-shell): Add some comments about Douglas Grey Stephen's suggestions to make Tramp work better with plink under Windows. I'm not sure what to think of them, but now I have a guinea pig to try it out on. Said guinea pig is having other problems, though... Also remove some commented-out code. 2002-09-06 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods): Algorithm slightly tuned. (tramp-get-completion-user-host): Accept user names as they are if typed until "@". (tramp-completion-mode): Replace `last-input-char' by modern `last-input-event'. Check for `event-modifiers'. 2002-09-06 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (file-expand-wildcards): Corrected check to see if advising is necessary. 2002-09-05 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-postfix-single-method-format) (tramp-postfix-multi-method-format) (tramp-postfix-multi-hop-format) (tramp-postfix-user-format): New format strings. (tramp-postfix-single-method-regexp) (tramp-postfix-multi-method-regexp) (tramp-postfix-multi-hop-regexp) (tramp-postfix-user-regexp) (tramp-make-multi-tramp-file-format) (tramp-make-tramp-file-name): Apply them. (tramp-completion-handle-file-name-all-completions): Fix for invoking ange-ftp in case of "/ftp:xxx" file names. 2002-09-04 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-prefix-format) (tramp-postfix-host-format): New format strings. (tramp-prefix-regexp, tramp-method-regexp) (tramp-postfix-single-method-regexp) (tramp-postfix-multi-method-regexp) (tramp-postfix-multi-hop-regexp) (tramp-user-regexp, tramp-postfix-user-regexp) (tramp-host-regexp, tramp-postfix-host-regexp) (tramp-path-regexp): New atomar regular expressions. If corresponding format strings exist, derived from them. (tramp-file-name-structure) (tramp-multi-file-name-structure) (tramp-multi-file-name-hop-structure) (tramp-make-multi-tramp-file-format) (tramp-completion-mode) (tramp-completion-dissect-file-name) (tramp-parse-rhosts-group) (tramp-parse-shosts-group) (tramp-parse-hosts-group) (tramp-parse-passwd-group): Apply these expressions. (tramp-file-name-structure-unified) (tramp-file-name-structure-separate) (tramp-make-tramp-file-format-unified) (tramp-make-tramp-file-format-separate) (tramp-make-tramp-file-format) (tramp-make-tramp-file-user-nil-format-unified) (tramp-make-tramp-file-user-nil-format-separate) (tramp-make-tramp-file-user-nil-format) (tramp-multi-file-name-structure-unified) (tramp-multi-file-name-structure-separate) (tramp-multi-file-name-hop-structure-unified) (tramp-multi-file-name-hop-structure-separate) (tramp-make-multi-tramp-file-format-unified) (tramp-make-multi-tramp-file-format-separate): Removed. (tramp-make-tramp-file-name): Allow partial tramp file names. Generate tramp file format on-the-fly depending on parameters. Apply atomar format strings resp expressions. (tramp-get-completion-methods) (tramp-get-completion-user-host): Apply `tramp-make-tramp-file-name'. (tramp-parse-hosts-group): Take all host names and IP addresses into account. (tramp-bug): Remove `tramp-make-tramp-file-format'. 2002-09-01 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-methods): Add `tramp-completion-function' for "su" and "sudo". (tramp-get-completion-telnet): Implement it. (tramp-parse-hosts) (tramp-parse-hosts-group) (tramp-get-completion-su) (tramp-parse-passwd) (tramp-parse-passwd-group): New functions. 2002-08-31 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): Check for `last-input-char'. (tramp-completion-file-name-handler-alist): Add handler for `file-exists-p. (tramp-completion-handle-file-exists-p): New function. (tramp-completion-handle-file-name-completion): Simplified. (tramp-completion-dissect-file-name): Regexp's reorganised. (tramp-completion-handle-file-name-all-completions): Call completion-function only if `user' or `host' is given. (tramp-get-completion-user-host): New function. (tramp-get-completion-rsh) (tramp-get-completion-ssh): Apply it. 2002-08-29 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-handler-alist): Add handler for `expand-file-name'. (tramp-completion-handle-expand-file-name): New function. 2002-08-26 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-mode): New function. (tramp-completion-handle-file-name-directory) (tramp-completion-handle-file-name-all-completions): Apply it. (tramp-methods): Remove double definition of `ssh1-old' and `ssh2-old'. (tramp-point-at-eol): New defalias. (tramp-parse-rhosts-group) (tramp-parse-shosts-group):: Apply it. 2002-08-25 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods) (tramp-get-completion-rsh) (tramp-get-completion-ssh): Add "[" for Xemacs. (tramp-completion-file-name-regexp-separate): Expression adapted. (tramp-completion-file-name-handler-alist): Add handler for `file-name-directory' and `file-name-nondirectory'. (tramp-completion-handle-file-name-directory) (tramp-completion-handle-file-name-nondirectory) (tramp-completion-run-real-handler): New functions. (tramp-completion-file-name-handler) (tramp-completion-handle-file-name-all-completions): Apply `tramp-completion-run-real-handler'. (tramp-parse-rhosts) (tramp-parse-shosts): Use `with-temp-buffer'. `result? renamed to `res' (otherwise side effects in XEmacs). 2002-08-24 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-regexp) (tramp-completion-file-name-handler-alist) (tramp-flatten-list) (tramp-completion-dissect-file-name) (tramp-get-completion-rsh) (tramp-parse-rhosts) (tramp-parse-rhosts-group) (tramp-get-completion-ssh): Doc string tuned. (tramp-methods): Doc string and custom type extended for `tramp-completion-function'. (tramp-completion-function): Variable added. Is it really used? Other variables like `tramp-completion-function' aren't used. (tramp-completion-file-name-handler-alist): Add handler for `file-name-completion'. (tramp-completion-handle-file-name-completion): New function. 2002-08-18 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-parse-rhosts) (tramp-parse-rhosts-group) (tramp-parse-shosts) (tramp-parse-shosts-group): New functions. 2002-08-17 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-dissect-file-name) (tramp-completion-dissect-file-name1): New functions. 2002-08-16 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-function) (tramp-get-completion-rsh) (tramp-get-completion-ssh) (tramp-get-completion-telnet): New functions. (tramp-methods): Add `tramp-completion-function' for all methods. 2002-08-15 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-get-completion-methods): New function. (tramp-find-default-method): Allow host to be nil (like user). 2002-08-14 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-completion-file-name-regexp-unified) (tramp-completion-file-name-regexp-separate) (tramp-completion-file-name-regexp) (tramp-completion-file-name-handler-alist): New defcustoms. (tramp-completion-file-name-handler): New function. Add `tramp-completion-file-name-handler' to `file-name-handler-alist'. (tramp-run-real-handler): Add `tramp-completion-file-name-handler' to `inhibit-file-name-handlers'. (tramp-completion-handle-file-name-all-completions) (tramp-completion-handle-file-name-completion): New functions. 2002-08-12 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-invoke-ange-ftp): `tramp-disable-ange-ftp' must be called again after activating `ange-ftp'. (tramp-ange-ftp-file-name-p): Check for Xemacs. 2002-08-08 Michael Albinus <Michael.Albinus@alcatel.de> * net/tramp.el (tramp-do-copy-or-rename-file): Don't pass KEEP-DATE to tramp-invoke-ange-ftp 'rename. (tramp-handle-write-region): Don't pass LOCKNAME and CONFIRM to tramp-invoke-ange-ftp 'write-region. (tramp-handle-set-file-modes): Change order of FILENAME and MODE passing to tramp-invoke-ange-ftp 'set-file-modes. (tramp-flatten-list): New function. Maybe this functionality does exist already elsewhere in the libraries. (tramp-invoke-ange-ftp): Apply `tramp-flatten-list' to parameter list in order to avoid nested lists, f.e. when invoked from `tramp-handle-dired-call-process'. 2002-09-05 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-chunksize): New kluge variable. (tramp-send-region): If tramp-chunksize is non-nil, send region in parts and sleep 0.1 seconds between chunks. 2002-09-03 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-handle-insert-directory): Use `insert-buffer-substring' instead of `insert-buffer', which is not supposed to be used from Lisp. Remember old point in a variable instead of using `mark'. Suggestion from Stefan Monnier. (tramp-unified-filenames): New variable. Use it in default value of other filename variables. (file-expand-wildcards): Don't advise unless "[" and "]" are used in the filename format. 2002-09-01 Kai Gro?ohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> * net/tramp.el (tramp-methods): Remove duplicate definition of ssh1-old and ssh2-old.
author Kai Großjohann <kgrossjo@eu.uu.net>
date Sun, 22 Sep 2002 13:23:36 +0000
parents 64341c22fb4c
children e81472bb5044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16884
36babc489b0c Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents: 16593
diff changeset
1 /* Heap management routines for GNU Emacs on the Microsoft W32 API.
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 Copyright (C) 1994 Free Software Foundation, Inc.
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
4 This file is part of GNU Emacs.
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
7 it under the terms of the GNU General Public License as published by
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
9 any later version.
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
14 GNU General Public License for more details.
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
16 You should have received a copy of the GNU General Public License
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12452
diff changeset
19 Boston, MA 02111-1307, USA.
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 Geoff Voelker (voelker@cs.washington.edu) 7-29-94
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
42469
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 33215
diff changeset
24 #ifdef HAVE_CONFIG_H
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 33215
diff changeset
25 #include <config.h>
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 33215
diff changeset
26 #endif
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
27
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 #include <stdlib.h>
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 #include <stdio.h>
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
16593
4ed80eda6fac Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents: 16588
diff changeset
31 #include "w32heap.h"
15143
d7d0413e95e2 Include lisp.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
32 #include "lisp.h" /* for VALMASK */
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
34 #undef RVA_TO_PTR
31111
14beb147ec06 [!USE_CRT_DLL]: Don't define _heap_init and _heap_term
Andrew Innes <andrewi@gnu.org>
parents: 24886
diff changeset
35 #define RVA_TO_PTR(rva) ((unsigned char *)((DWORD)(rva) + (DWORD)GetModuleHandle (NULL)))
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
36
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 /* This gives us the page size and the size of the allocation unit on NT. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 SYSTEM_INFO sysinfo_cache;
24886
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
39
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
40 /* This gives us version, build, and platform identification. */
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
41 OSVERSIONINFO osinfo_cache;
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
42
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
43 unsigned long syspage_mask = 0;
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 /* These are defined to get Emacs to compile, but are not used. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 int edata;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 int etext;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 /* The major and minor versions of NT. */
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15228
diff changeset
50 int w32_major_version;
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15228
diff changeset
51 int w32_minor_version;
33215
38e1998861ff (w32_build_number): New variable.
Andrew Innes <andrewi@gnu.org>
parents: 31111
diff changeset
52 int w32_build_number;
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
19708
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
54 /* Distinguish between Windows NT and Windows 95. */
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
55 int os_subtype;
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
56
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 /* Cache information describing the NT system for later use. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 void
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 cache_system_info (void)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 union
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 struct info
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 char major;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 char minor;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 short platform;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 } info;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 DWORD data;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 } version;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 /* Cache the version of the operating system. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 version.data = GetVersion ();
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15228
diff changeset
74 w32_major_version = version.info.major;
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15228
diff changeset
75 w32_minor_version = version.info.minor;
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76
19708
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
77 if (version.info.platform & 0x8000)
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
78 os_subtype = OS_WIN95;
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
79 else
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
80 os_subtype = OS_NT;
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
81
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 /* Cache page size, allocation unit, processor type, etc. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 GetSystemInfo (&sysinfo_cache);
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
84 syspage_mask = sysinfo_cache.dwPageSize - 1;
24886
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
85
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
86 /* Cache os info. */
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
87 osinfo_cache.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
fb9574318fa0 w32heap.c (osinfo_cache): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 24103
diff changeset
88 GetVersionEx (&osinfo_cache);
33215
38e1998861ff (w32_build_number): New variable.
Andrew Innes <andrewi@gnu.org>
parents: 31111
diff changeset
89
38e1998861ff (w32_build_number): New variable.
Andrew Innes <andrewi@gnu.org>
parents: 31111
diff changeset
90 w32_build_number = osinfo_cache.dwBuildNumber;
38e1998861ff (w32_build_number): New variable.
Andrew Innes <andrewi@gnu.org>
parents: 31111
diff changeset
91 if (os_subtype == OS_WIN95)
38e1998861ff (w32_build_number): New variable.
Andrew Innes <andrewi@gnu.org>
parents: 31111
diff changeset
92 w32_build_number &= 0xffff;
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94
18506
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
95 /* Emulate getpagesize. */
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
96 int
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
97 getpagesize (void)
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
98 {
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
99 return sysinfo_cache.dwPageSize;
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
100 }
bcc706aedcea Add pragma to force zero initialized
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
101
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
102 /* Info for managing our preload heap, which is essentially a fixed size
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
103 data area in the executable. */
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
104 PIMAGE_SECTION_HEADER preload_heap_section;
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 /* Info for keeping track of our heap. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 unsigned char *data_region_base = NULL;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 unsigned char *data_region_end = NULL;
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
109 unsigned char *real_data_region_end = NULL;
11943
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
110 unsigned long reserved_heap_size = 0;
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 /* The start of the data segment. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 unsigned char *
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 get_data_start (void)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 return data_region_base;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 /* The end of the data segment. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 unsigned char *
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 get_data_end (void)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 return data_region_end;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
11943
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
126 static char *
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
127 allocate_heap (void)
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
128 {
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
129 /* Try to get as much as possible of the address range from the end of
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
130 the preload heap section up to the usable address limit. Since GNU
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
131 malloc can handle gaps in the memory it gets from sbrk, we can
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
132 simply set the sbrk pointer to the base of the new heap region. */
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
133 unsigned long base =
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
134 ROUND_UP ((RVA_TO_PTR (preload_heap_section->VirtualAddress)
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
135 + preload_heap_section->Misc.VirtualSize),
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
136 get_allocation_unit ());
15143
d7d0413e95e2 Include lisp.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
137 unsigned long end = 1 << VALBITS; /* 256MB */
15208
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
138 void *ptr = NULL;
11943
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
139
15208
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
140 while (!ptr && (base < end))
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
141 {
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
142 reserved_heap_size = end - base;
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
143 ptr = VirtualAlloc ((void *) base,
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
144 get_reserved_heap_size (),
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
145 MEM_RESERVE,
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
146 PAGE_NOACCESS);
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
147 base += 0x00100000; /* 1MB increment */
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
148 }
15228
ae9888a75348 (allocate_heap): Clean up conditional.
Richard M. Stallman <rms@gnu.org>
parents: 15208
diff changeset
149
15208
01588278fceb (allocate_heap): Bump heap base up to 27MB to
Geoff Voelker <voelker@cs.washington.edu>
parents: 15143
diff changeset
150 return ptr;
11943
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
151 }
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
152
ea533622fb8b (reserved_heap_size,allocate_heap): Defined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11385
diff changeset
153
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 /* Emulate Unix sbrk. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 void *
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 sbrk (unsigned long increment)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 void *result;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 long size = (long) increment;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 result = data_region_end;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 /* If size is negative, shrink the heap by decommitting pages. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 if (size < 0)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 {
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
166 int new_size;
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
167 unsigned char *new_data_region_end;
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
168
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 size = -size;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 /* Sanity checks. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 if ((data_region_end - size) < data_region_base)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 return NULL;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
175 /* We can only decommit full pages, so allow for
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
176 partial deallocation [cga]. */
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
177 new_data_region_end = (data_region_end - size);
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
178 new_data_region_end = (unsigned char *)
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
179 ((long) (new_data_region_end + syspage_mask) & ~syspage_mask);
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
180 new_size = real_data_region_end - new_data_region_end;
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
181 real_data_region_end = new_data_region_end;
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
182 if (new_size > 0)
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
183 {
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
184 /* Decommit size bytes from the end of the heap. */
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
185 if (using_dynamic_heap
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
186 && !VirtualFree (real_data_region_end, new_size, MEM_DECOMMIT))
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
187 return NULL;
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
188 }
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 data_region_end -= size;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 /* If size is positive, grow the heap by committing reserved pages. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 else if (size > 0)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 /* Sanity checks. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 if ((data_region_end + size) >
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (data_region_base + get_reserved_heap_size ()))
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 return NULL;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 /* Commit more of our heap. */
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
201 if (using_dynamic_heap
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
202 && VirtualAlloc (data_region_end, size, MEM_COMMIT,
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
203 PAGE_READWRITE) == NULL)
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 return NULL;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 data_region_end += size;
12452
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
206
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
207 /* We really only commit full pages, so record where
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
208 the real end of committed memory is [cga]. */
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
209 real_data_region_end = (unsigned char *)
bd304be0b491 Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11943
diff changeset
210 ((long) (data_region_end + syspage_mask) & ~syspage_mask);
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 return result;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
216 /* Initialize the internal heap variables used by sbrk. When running in
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
217 preload phase (ie. in the undumped executable), we rely entirely on a
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
218 fixed size heap section included in the .exe itself; this is
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
219 preserved during dumping, and truncated to the size actually used.
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
220
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
221 When running in the dumped executable, we reserve as much as possible
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
222 of the address range that is addressable by Lisp object pointers, to
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
223 supplement what is left of the preload heap. Although we cannot rely
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
224 on the dynamically allocated arena being contiguous with the static
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
225 heap area, it is not a problem because sbrk can pretend that the gap
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
226 was allocated by something else; GNU malloc detects when there is a
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
227 jump in the sbrk values, and starts a new heap block. */
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 void
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
229 init_heap ()
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 {
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
231 PIMAGE_DOS_HEADER dos_header;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
232 PIMAGE_NT_HEADERS nt_header;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
233
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
234 dos_header = (PIMAGE_DOS_HEADER) RVA_TO_PTR (0);
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
235 nt_header = (PIMAGE_NT_HEADERS) (((unsigned long) dos_header) +
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
236 dos_header->e_lfanew);
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
237 preload_heap_section = find_section ("EMHEAP", nt_header);
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
239 if (using_dynamic_heap)
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
240 {
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
241 data_region_base = allocate_heap ();
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
242 if (!data_region_base)
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
243 {
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
244 printf ("Error: Could not reserve dynamic heap area.\n");
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
245 exit (1);
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
246 }
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
248 /* Ensure that the addresses don't use the upper tag bits since
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
249 the Lisp type goes there. */
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
250 if (((unsigned long) data_region_base & ~VALMASK) != 0)
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
251 {
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
252 printf ("Error: The heap was allocated in upper memory.\n");
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
253 exit (1);
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
254 }
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
255
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
256 data_region_end = data_region_base;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
257 real_data_region_end = data_region_end;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
258 }
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
259 else
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
260 {
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
261 data_region_base = RVA_TO_PTR (preload_heap_section->VirtualAddress);
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
262 data_region_end = data_region_base;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
263 real_data_region_end = data_region_end;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
264 reserved_heap_size = preload_heap_section->Misc.VirtualSize;
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
265 }
19708
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
266
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
267 /* Update system version information to match current system. */
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
268 cache_system_info ();
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 }
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 /* Round the heap up to the given alignment. */
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 void
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 round_heap (unsigned long align)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 {
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 unsigned long needs_to_be;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 unsigned long need_to_alloc;
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
24103
4adfa5300fd8 (RVA_TO_PTR): Redefine to convert RVA to address in
Andrew Innes <andrewi@gnu.org>
parents: 23171
diff changeset
278 needs_to_be = (unsigned long) ROUND_UP (get_heap_end (), align);
9803
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 need_to_alloc = needs_to_be - (unsigned long) get_heap_end ();
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 if (need_to_alloc)
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 sbrk (need_to_alloc);
fa698fd10c05 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 }
19708
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
284
31111
14beb147ec06 [!USE_CRT_DLL]: Don't define _heap_init and _heap_term
Andrew Innes <andrewi@gnu.org>
parents: 24886
diff changeset
285 #if (_MSC_VER >= 1000 && !defined(USE_CRT_DLL))
19708
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
286
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
287 /* MSVC 4.2 invokes these functions from mainCRTStartup to initialize
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
288 a heap via HeapCreate. They are normally defined by the runtime,
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
289 but we override them here so that the unnecessary HeapCreate call
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
290 is not performed. */
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
291
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
292 int __cdecl
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
293 _heap_init (void)
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
294 {
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
295 /* Stepping through the assembly indicates that mainCRTStartup is
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
296 expecting a nonzero success return value. */
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
297 return 1;
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
298 }
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
299
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
300 void __cdecl
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
301 _heap_term (void)
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
302 {
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
303 return;
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
304 }
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
305
16e69fbdbf0f (os_subtype): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 18506
diff changeset
306 #endif