Mercurial > emacs
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 |
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 | 2 Copyright (C) 1994 Free Software Foundation, Inc. |
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 | 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 | 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 | 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 | 20 |
21 Geoff Voelker (voelker@cs.washington.edu) 7-29-94 | |
22 */ | |
23 | |
42469 | 24 #ifdef HAVE_CONFIG_H |
25 #include <config.h> | |
26 #endif | |
12452
bd304be0b491
Include config.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
11943
diff
changeset
|
27 |
9803 | 28 #include <stdlib.h> |
29 #include <stdio.h> | |
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 | 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 | 37 /* This gives us the page size and the size of the allocation unit on NT. */ |
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 | 44 |
45 /* These are defined to get Emacs to compile, but are not used. */ | |
46 int edata; | |
47 int etext; | |
48 | |
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 | 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 | 57 /* Cache information describing the NT system for later use. */ |
58 void | |
59 cache_system_info (void) | |
60 { | |
61 union | |
62 { | |
63 struct info | |
64 { | |
65 char major; | |
66 char minor; | |
67 short platform; | |
68 } info; | |
69 DWORD data; | |
70 } version; | |
71 | |
72 /* Cache the version of the operating system. */ | |
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 | 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 | 82 /* Cache page size, allocation unit, processor type, etc. */ |
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 | 93 } |
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 | 105 |
106 /* Info for keeping track of our heap. */ | |
107 unsigned char *data_region_base = NULL; | |
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 | 111 |
112 /* The start of the data segment. */ | |
113 unsigned char * | |
114 get_data_start (void) | |
115 { | |
116 return data_region_base; | |
117 } | |
118 | |
119 /* The end of the data segment. */ | |
120 unsigned char * | |
121 get_data_end (void) | |
122 { | |
123 return data_region_end; | |
124 } | |
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 | 154 /* Emulate Unix sbrk. */ |
155 void * | |
156 sbrk (unsigned long increment) | |
157 { | |
158 void *result; | |
159 long size = (long) increment; | |
160 | |
161 result = data_region_end; | |
162 | |
163 /* If size is negative, shrink the heap by decommitting pages. */ | |
164 if (size < 0) | |
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 | 169 size = -size; |
170 | |
171 /* Sanity checks. */ | |
172 if ((data_region_end - size) < data_region_base) | |
173 return NULL; | |
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 | 189 |
190 data_region_end -= size; | |
191 } | |
192 /* If size is positive, grow the heap by committing reserved pages. */ | |
193 else if (size > 0) | |
194 { | |
195 /* Sanity checks. */ | |
196 if ((data_region_end + size) > | |
197 (data_region_base + get_reserved_heap_size ())) | |
198 return NULL; | |
199 | |
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 | 204 return NULL; |
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 | 211 } |
212 | |
213 return result; | |
214 } | |
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 | 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 | 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 | 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 | 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 | 269 } |
270 | |
271 /* Round the heap up to the given alignment. */ | |
272 void | |
273 round_heap (unsigned long align) | |
274 { | |
275 unsigned long needs_to_be; | |
276 unsigned long need_to_alloc; | |
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 | 279 need_to_alloc = needs_to_be - (unsigned long) get_heap_end (); |
280 | |
281 if (need_to_alloc) | |
282 sbrk (need_to_alloc); | |
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 |