[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/no-purespace 15e2b14f037 02/41: Unexec removal: Main part
From: |
Stefan Kangas |
Subject: |
scratch/no-purespace 15e2b14f037 02/41: Unexec removal: Main part |
Date: |
Thu, 12 Dec 2024 16:57:28 -0500 (EST) |
branch: scratch/no-purespace
commit 15e2b14f03796467fab8e8086d293a5813afaa5b
Author: Pip Cet <pipcet@protonmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>
Unexec removal: Main part
* configure.ac: Remove unexec-specific parts.
(EMACS_CONFIG_FEATURES): Always report that we do not have the UNEXEC
feature.
(AC_ECHO): No longer display a line about the unexec feature.
* lisp/loadup.el:
* lisp/startup.el: Remove unexec-specific code.
* src/Makefile.in (base_obj): Drop 'UNEXEC_OBJ'.
* src/alloc.c (staticvec): Never initialize this variable.
(BLOCK_ALIGN): Always allow large blocks.
(mmap_lisp_allowed_p): Remove unexec-specific code.
* src/buffer.c (init_buffer):
* src/conf_post.h (ADDRESS_SANITIZER):
* src/emacs.c (load_pdump, main): Remove unexec-specific code.
(Fdump_emacs): Remove function.
(syms_of_emacs): Remove 'Fdump_emacs'.
* src/lastfile.c: Remove unexec-specific code.
* src/lisp.h (gflags): Remove unexec-specific flags.
(will_dump_p, will_bootstrap_p, will_dump_with_unexec_p)
(dumped_with_unexec_p, definitely_will_not_unexec_p): Remove or adjust
predicates.
(SUBR_SECTION_ATTRIBUTE): Remove unexec-specific definition.
* src/pdumper.c (Fdump_emacs_portable): Remove unexec-specific warning.
* src/process.c (init_process_emacs): Remove !unexec condition
* src/sysdep.c (maybe_disable_address_randomization): Adjust comment.
(init_signals):
* src/timefns.c (init_timefns): Remove unexec-specific code.
* src/w32heap.c (report_temacs_memory_usage): Remove function.
* src/w32heap.h: Adjust comment.
* src/w32image.c (globals_of_w32image): Remove unexec-specific code.
---
configure.ac | 246 ++------------------------------------------------------
lisp/loadup.el | 6 +-
lisp/startup.el | 4 +-
src/Makefile.in | 8 +-
src/alloc.c | 22 ++---
src/buffer.c | 41 ----------
src/conf_post.h | 24 ------
src/emacs.c | 169 +-------------------------------------
src/lastfile.c | 11 ---
src/lisp.h | 65 ++-------------
src/pdumper.c | 6 --
src/process.c | 67 +++++++--------
src/sysdep.c | 10 +--
src/timefns.c | 29 -------
src/w32heap.c | 25 ------
src/w32heap.h | 2 +-
src/w32image.c | 2 -
17 files changed, 55 insertions(+), 682 deletions(-)
diff --git a/configure.ac b/configure.ac
index 1c7545ef984..4808c4fa9c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -444,28 +444,13 @@ this option's value should be 'yes' or 'no'.]) ;;
],
[with_pdumper=auto])
-AC_ARG_WITH([unexec],
- AS_HELP_STRING(
- [--with-unexec=VALUE],
- [enable unexec support unconditionally
- ('yes', 'no', or 'auto': default 'auto')]),
- [ case "${withval}" in
- yes|no|auto) val=$withval ;;
- *) AC_MSG_ERROR(
- ['--with-unexec=$withval' is invalid;
-this option's value should be 'yes' or 'no'.]) ;;
- esac
- with_unexec=$val
- ],
- [with_unexec=auto])
-
AC_ARG_WITH([dumping],[AS_HELP_STRING([--with-dumping=VALUE],
[kind of dumping to use for initial Emacs build
-(VALUE one of: pdumper, unexec, none; default pdumper)])],
+(VALUE one of: pdumper, none; default pdumper)])],
[ case "${withval}" in
- pdumper|unexec|none) val=$withval ;;
+ pdumper|none) val=$withval ;;
*) AC_MSG_ERROR(['--with-dumping=$withval is invalid;
-this option's value should be 'pdumper', 'unexec', or 'none'.])
+this option's value should be 'pdumper' or 'none'.])
;;
esac
with_dumping=$val
@@ -480,22 +465,10 @@ if test "$with_pdumper" = "auto"; then
fi
fi
-if test "$with_unexec" = "auto"; then
- if test "$with_dumping" = "unexec"; then
- with_unexec=yes
- else
- with_unexec=no
- fi
-fi
-
if test "$with_dumping" = "pdumper" && test "$with_pdumper" = "no"; then
AC_MSG_ERROR(['--with-dumping=pdumper' requires pdumper support])
fi
-if test "$with_dumping" = "unexec" && test "$with_unexec" = "no"; then
- AC_MSG_ERROR(['--with-dumping=unexec' requires unexec support])
-fi
-
if test "$with_pdumper" = "yes"; then
AC_DEFINE([HAVE_PDUMPER], [1],
[Define to build with portable dumper support])
@@ -2072,10 +2045,6 @@ AC_PATH_PROG([GZIP_PROG], [gzip])
test $with_compress_install != yes && test -n "$GZIP_PROG" && \
GZIP_PROG=" # $GZIP_PROG # (disabled by configure
--without-compress-install)"
-if test "$with_dumping" = "unexec" && test "$opsys" = "nacl"; then
- AC_MSG_ERROR([nacl is not compatible with --with-dumping=unexec])
-fi
-
AC_CACHE_CHECK([for 'find' args to delete a file],
[emacs_cv_find_delete],
[if touch conftest.tmp && find conftest.tmp -delete 2>/dev/null &&
@@ -2088,48 +2057,6 @@ AC_SUBST([FIND_DELETE])
PAXCTL_dumped=
PAXCTL_notdumped=
-if test $with_unexec = yes && test $opsys = gnu-linux; then
- if test "${SETFATTR+set}" != set; then
- AC_CACHE_CHECK([for setfattr],
- [emacs_cv_prog_setfattr],
- [touch conftest.tmp
- if (setfattr -n user.pax.flags conftest.tmp) >/dev/null 2>&1; then
- emacs_cv_prog_setfattr=yes
- else
- emacs_cv_prog_setfattr=no
- fi])
- if test "$emacs_cv_prog_setfattr" = yes; then
- PAXCTL_notdumped='$(SETFATTR) -n user.pax.flags -v er'
- SETFATTR=setfattr
- else
- SETFATTR=
- fi
- fi
- case $opsys,$PAXCTL_notdumped,$emacs_uname_r in
- gnu-linux,,* | netbsd,,[0-7].*)
- AC_PATH_PROG([PAXCTL], [paxctl], [],
- [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin])
- if test -n "$PAXCTL"; then
- if test "$opsys" = netbsd; then
- PAXCTL_dumped='$(PAXCTL) +a'
- PAXCTL_notdumped=$PAXCTL_dumped
- else
- AC_MSG_CHECKING([whether binaries have a PT_PAX_FLAGS header])
- AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
- [if $PAXCTL -v conftest$EXEEXT >/dev/null 2>&1; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- PAXCTL=
- fi])
- if test -n "$PAXCTL"; then
- PAXCTL_dumped='$(PAXCTL) -zex'
- PAXCTL_notdumped='$(PAXCTL) -r'
- fi
- fi
- fi;;
- esac
-fi
AC_SUBST([PAXCTL_dumped])
AC_SUBST([PAXCTL_notdumped])
AC_SUBST([SETFATTR])
@@ -2196,37 +2123,6 @@ else
ac_link="$ac_link $NON_GCC_LINK_TEST_OPTIONS"
fi
-dnl On some platforms using GNU ld, linking temacs needs -znocombreloc.
-dnl Although this has something to do with dumping, the details are unknown.
-dnl If the flag is used but not needed,
-dnl Emacs should still work (albeit a bit more slowly),
-dnl so use the flag everywhere that it is supported.
-dnl When testing whether the flag works, treat GCC specially
-dnl since it just gives a non-fatal 'unrecognized option'
-dnl if not built to support GNU ld.
-if test "$GCC" = yes; then
- LDFLAGS_NOCOMBRELOC="-Wl,-znocombreloc"
-else
- LDFLAGS_NOCOMBRELOC="-znocombreloc"
-fi
-
-AC_CACHE_CHECK([for -znocombreloc], [emacs_cv_znocombreloc],
- [if test $with_unexec = no; then
- emacs_cv_znocombreloc='not needed'
- else
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS $LDFLAGS_NOCOMBRELOC"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
- [emacs_cv_znocombreloc=yes], [emacs_cv_znocombreloc=no])
- LDFLAGS=$save_LDFLAGS
- fi])
-
-case $emacs_cv_znocombreloc in
- no*)
- LDFLAGS_NOCOMBRELOC= ;;
-esac
-
-
AC_CACHE_CHECK([whether addresses are sanitized],
[emacs_cv_sanitize_address],
[AC_COMPILE_IFELSE(
@@ -2242,48 +2138,8 @@ AC_CACHE_CHECK([whether addresses are sanitized],
[emacs_cv_sanitize_address=yes],
[emacs_cv_sanitize_address=no])])
-if test $with_unexec = yes; then
- AC_DEFINE([HAVE_UNEXEC], [1], [Define if Emacs supports unexec.])
- if test "$emacs_cv_sanitize_address" = yes; then
- AC_MSG_WARN([[Addresses are sanitized; suggest --without-unexec]])
- fi
-fi
-
-
-UNEXEC_OBJ=
-test $with_unexec = yes &&
-case "$opsys" in
- # MSDOS uses unexcoff.o
- aix4-2)
- UNEXEC_OBJ=unexaix.o
- ;;
- cygwin)
- UNEXEC_OBJ=unexcw.o
- ;;
- darwin)
- UNEXEC_OBJ=unexmacosx.o
- ;;
- hpux10-20 | hpux11)
- UNEXEC_OBJ=unexhp9k800.o
- ;;
- mingw32)
- UNEXEC_OBJ=unexw32.o
- ;;
- solaris)
- # Use the Solaris dldump() function, called from unexsol.c, to dump
- # emacs, instead of the generic ELF dump code found in unexelf.c.
- # The resulting binary has a complete symbol table, and is better
- # for debugging and other observability tools (debuggers, pstack, etc).
- UNEXEC_OBJ=unexsol.o
- ;;
- *)
- UNEXEC_OBJ=unexelf.o
- ;;
-esac
-AC_SUBST([UNEXEC_OBJ])
-
LD_SWITCH_SYSTEM=
-test "$with_unexec" = no || case "$opsys" in
+case "$opsys" in
freebsd|dragonfly)
## Let 'ld' find image libs and similar things in /usr/local/lib.
## The system compiler, GCC, has apparently been modified to not
@@ -2331,22 +2187,6 @@ esac
C_SWITCH_MACHINE=
-test $with_unexec = yes &&
-case $canonical in
- alpha*)
- ## With ELF, make sure that all common symbols get allocated to in the
- ## data section. Otherwise, the dump of temacs may miss variables in
- ## the shared library that have been initialized. For example, with
- ## GNU libc, __malloc_initialized would normally be resolved to the
- ## shared library's .bss section, which is fatal.
- if test "x$GCC" = "xyes"; then
- C_SWITCH_MACHINE="-fno-common"
- else
- AC_MSG_ERROR([Non-GCC compilers are not supported.])
- fi
- ;;
-esac
-
AC_CACHE_CHECK([for flags to work around GCC bug 58416],
[emacs_cv_gcc_bug_58416_CFLAGS],
[emacs_cv_gcc_bug_58416_CFLAGS='none needed'
@@ -3379,21 +3219,6 @@ system_malloc=yes
dnl This must be before the test of $ac_cv_func_sbrk below.
AC_CHECK_FUNCS_ONCE([sbrk])
-test $with_unexec = yes &&
-case "$opsys" in
- ## darwin ld insists on the use of malloc routines in the System framework.
- darwin | mingw32 | nacl | solaris) ;;
- cygwin | qnxnto | freebsd)
- hybrid_malloc=yes
- system_malloc= ;;
- *) test "$ac_cv_func_sbrk" = yes &&
system_malloc=$emacs_cv_sanitize_address;;
-esac
-
-if test "${system_malloc}" != yes && test "${doug_lea_malloc}" != yes \
- && test "${UNEXEC_OBJ}" = unexelf.o; then
- hybrid_malloc=yes
-fi
-
GMALLOC_OBJ=
HYBRID_MALLOC=
if test "${system_malloc}" = "yes"; then
@@ -5268,15 +5093,9 @@ if test "${with_native_compilation}" = "default"; then
# Check if libgccjit really works.
AC_RUN_IFELSE([libgccjit_smoke_test], [], [libgccjit_broken])
fi
- if test "$with_unexec" = yes; then
- with_native_compilation=no
- fi
fi
if test "${with_native_compilation}" != "no"; then
- if test "$with_unexec" = yes; then
- AC_MSG_ERROR(['--with-native-compilation' is not compatible with
unexec])
- fi
if test "${HAVE_ZLIB}" = no; then
AC_MSG_ERROR(['--with-native-compilation' requires zlib])
fi
@@ -6085,19 +5904,6 @@ dnl No need to check for posix_memalign if aligned_alloc
works.
AC_CHECK_FUNCS([aligned_alloc posix_memalign], [break])
AC_CHECK_DECLS([aligned_alloc], [], [], [[#include <stdlib.h>]])
-case $with_unexec,$canonical in
- yes,alpha*)
- AC_CHECK_DECL([__ELF__], [],
- [AC_MSG_ERROR([Non-ELF systems are not supported on this platform.])]);;
-esac
-
-if test "$with_unexec" = yes && test "$opsys" = "haiku"; then
- dnl A serious attempt was actually made to port unexec to Haiku.
- dnl Something in libstdc++ seems to prevent it from working.
- AC_MSG_ERROR([Haiku is not supported by the legacy unexec dumper.
-Please use the portable dumper instead.])
-fi
-
# Dump loading. Android lacks posix_madvise.
AC_CHECK_FUNCS([posix_madvise madvise])
@@ -7543,9 +7349,6 @@ case "$opsys" in
## about 14 to about 34. Setting it high gets us plenty of slop and
## only costs about 1.5K of wasted binary space.
headerpad_extra=1000
- if test "$with_unexec" = yes; then
- LD_SWITCH_SYSTEM_TEMACS="-fno-pie $LD_SWITCH_SYSTEM_TEMACS -Xlinker
-headerpad -Xlinker $headerpad_extra"
- fi
## This is here because src/Makefile.in did some extra fiddling around
## with LD_SWITCH_SYSTEM. It seems cleaner to put this in
@@ -7571,49 +7374,11 @@ case "$opsys" in
x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000
-Wl,-heap,0x00100000 -Wl,-image-base,0x400000000 -Wl,-entry,__start
-Wl,-Map,./temacs.map" ;;
*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000
-Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
esac
- ## If they want unexec, disable Windows ASLR for the Emacs binary
- if test "$with_dumping" = "unexec"; then
- case "$canonical" in
- x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS
-Wl,-disable-dynamicbase -Wl,-disable-high-entropy-va
-Wl,-default-image-base-low" ;;
- *) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS
-Wl,-disable-dynamicbase" ;;
- esac
- fi
;;
*) LD_SWITCH_SYSTEM_TEMACS= ;;
esac
-# -no-pie or -nopie fixes a temacs segfault on Gentoo, OpenBSD,
-# Ubuntu, and other systems with "hardened" GCC configurations for
-# some reason (Bug#18784). We don't know why this works, but not
-# segfaulting is better than segfaulting. Use ac_c_werror_flag=yes
-# when trying the option, otherwise clang keeps warning that it does
-# not understand it, and pre-4.6 GCC has a similar problem
-# (Bug#20338). Prefer -no-pie to -nopie, as -no-pie is the
-# spelling used by GCC 6.1.0 and later (Bug#24682).
-AC_CACHE_CHECK(
- [for $CC option to disable position independent executables],
- [emacs_cv_prog_cc_no_pie],
- [if test $with_unexec = no; then
- emacs_cv_prog_cc_no_pie='not needed'
- else
- emacs_save_c_werror_flag=$ac_c_werror_flag
- emacs_save_LDFLAGS=$LDFLAGS
- ac_c_werror_flag=yes
- for emacs_cv_prog_cc_no_pie in -no-pie -nopie no; do
- test $emacs_cv_prog_cc_no_pie = no && break
- LDFLAGS="$emacs_save_LDFLAGS $emacs_cv_prog_cc_no_pie"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [break])
- done
- ac_c_werror_flag=$emacs_save_c_werror_flag
- LDFLAGS=$emacs_save_LDFLAGS
- fi])
-case $emacs_cv_prog_cc_no_pie in
- -*)
- LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS $emacs_cv_prog_cc_no_pie"
- ;;
-esac
-
if test x$ac_enable_profiling != x ; then
case $opsys in
*freebsd | gnu-linux) ;;
@@ -7756,7 +7521,7 @@ for opt in ACL BE_APP CAIRO DBUS FREETYPE GCONF GIF GLIB
GMP GNUTLS GPM GSETTING
case $opt in
PDUMPER) val=${with_pdumper} ;;
- UNEXEC) val=${with_unexec} ;;
+ UNEXEC) val=no ;;
GLIB) val=${emacs_cv_links_glib} ;;
NOTIFY|ACL) eval val=\${${opt}_SUMMARY} ;;
TOOLKIT_SCROLL_BARS|X_TOOLKIT) eval val=\${USE_$opt} ;;
@@ -7832,7 +7597,6 @@ AS_ECHO([" Does Emacs use -lXaw3d?
${HAVE_XAW3D
Does Emacs support Xwidgets? ${HAVE_XWIDGETS}
Does Emacs have threading support in lisp? ${threads_enabled}
Does Emacs support the portable dumper? ${with_pdumper}
- Does Emacs support legacy unexec dumping? ${with_unexec}
Which dumping strategy does Emacs use? ${with_dumping}
Does Emacs have native lisp compiler? ${HAVE_NATIVE_COMP}
Does Emacs use version 2 of the X Input Extension? ${HAVE_XINPUT2}
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 613833c4184..8307152a2fa 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -57,7 +57,7 @@
;; Add subdirectories to the load-path for files that might get
;; autoloaded when bootstrapping or running Emacs normally.
;; This is because PATH_DUMPLOADSEARCH is just "../lisp".
-(if (or (member dump-mode '("bootstrap" "pbootstrap"))
+(if (or (member dump-mode '("pbootstrap"))
;; FIXME this is irritatingly fragile.
(and (stringp (nth 4 command-line-args))
(string-match "^unidata-gen\\(\\.elc?\\)?$"
@@ -635,8 +635,6 @@ directory got moved. This is set to be a pair in the form
of:
(error nil))))))
(if dump-mode
(let ((output (cond ((equal dump-mode "pdump") "emacs.pdmp")
- ((equal dump-mode "dump") "emacs")
- ((equal dump-mode "bootstrap") "emacs")
((equal dump-mode "pbootstrap")
"bootstrap-emacs.pdmp")
(t (error "Unrecognized dump mode %s" dump-mode)))))
(when (and (featurep 'native-compile)
@@ -680,7 +678,7 @@ directory got moved. This is set to be a pair in the form
of:
(eq system-type 'android))
;; Don't bother adding another name if we're just
;; building bootstrap-emacs.
- (member dump-mode '("pbootstrap" "bootstrap"))))
+ (member dump-mode '("pbootstrap"))))
(let ((name (format "emacs-%s.%d" emacs-version
emacs-build-number))
(exe (if (eq system-type 'windows-nt) ".exe" "")))
(while (string-match "[^-+_.a-zA-Z0-9]+" name)
diff --git a/lisp/startup.el b/lisp/startup.el
index 3436409a35e..e9618dc9f6a 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1104,7 +1104,7 @@ init-file, or to a default value if loading is not
possible."
;; Else, perhaps the user init file was compiled
(when (and (equal (file-name-extension user-init-file) "eln")
;; The next test is for builds without native
- ;; compilation support or builds with unexec.
+ ;; compilation support.
(boundp 'comp-eln-to-el-h))
(if-let* ((source (gethash (file-name-nondirectory
user-init-file)
@@ -2523,7 +2523,7 @@ A fancy display is used on graphic displays, normal
otherwise."
(defalias 'about-emacs #'display-about-screen)
(defalias 'display-splash-screen #'display-startup-screen)
-;; This avoids byte-compiler warning in the unexec build.
+;; This avoids byte-compiler warning in non-pdumper builds.
(declare-function pdumper-stats "pdumper.c" ())
(defun command-line-1 (args-left)
diff --git a/src/Makefile.in b/src/Makefile.in
index c278924ef94..c35fb3a1bc4 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -386,8 +386,6 @@ RUN_TEMACS = ./temacs
# Whether builds should contain details. '--no-build-details' or empty.
BUILD_DETAILS = @BUILD_DETAILS@
-UNEXEC_OBJ = @UNEXEC_OBJ@
-
HAIKU_OBJ = @HAIKU_OBJ@
HAIKU_CXX_OBJ = @HAIKU_CXX_OBJ@
HAIKU_LIBS = @HAIKU_LIBS@
@@ -471,9 +469,9 @@ base_obj = dispnew.o frame.o scroll.o xdisp.o menu.o
$(XMENU_OBJ) window.o \
cmds.o casetab.o casefiddle.o indent.o search.o regex-emacs.o undo.o \
alloc.o pdumper.o data.o doc.o editfns.o callint.o \
eval.o floatfns.o fns.o sort.o font.o print.o lread.o $(MODULES_OBJ) \
- syntax.o $(UNEXEC_OBJ) bytecode.o comp.o $(DYNLIB_OBJ) \
- process.o gnutls.o callproc.o \
- region-cache.o sound.o timefns.o atimer.o \
+ syntax.o bytecode.o comp.o $(DYNLIB_OBJ) \
+ process.o gnutls.o callproc.o \
+ region-cache.o sound.o timefns.o atimer.o \
doprnt.o intervals.o textprop.o composite.o xml.o lcms.o $(NOTIFY_OBJ) \
$(XWIDGETS_OBJ) \
profiler.o decompress.o \
diff --git a/src/alloc.c b/src/alloc.c
index 4fab0d54248..eb2e9fae783 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -266,7 +266,7 @@ voidfuncptr __MALLOC_HOOK_VOLATILE __malloc_initialize_hook
EXTERNALLY_VISIBLE
#endif
-#if defined DOUG_LEA_MALLOC || defined HAVE_UNEXEC
+#if defined DOUG_LEA_MALLOC
/* Allocator-related actions to do just before and after unexec. */
@@ -570,15 +570,9 @@ static void mem_delete (struct mem_node *);
static void mem_delete_fixup (struct mem_node *);
static struct mem_node *mem_find (void *);
-/* Addresses of staticpro'd variables. Initialize it to a nonzero
- value if we might unexec; otherwise some compilers put it into
- BSS. */
+/* Addresses of staticpro'd variables. */
-Lisp_Object const *staticvec[NSTATICS]
-#ifdef HAVE_UNEXEC
-= {&Vpurify_flag}
-#endif
- ;
+Lisp_Object const *staticvec[NSTATICS];
/* Index of next unused slot in staticvec. */
@@ -631,10 +625,8 @@ mmap_lisp_allowed_p (void)
{
/* If we can't store all memory addresses in our lisp objects, it's
risky to let the heap use mmap and give us addresses from all
- over our address space. We also can't use mmap for lisp objects
- if we might dump: unexec doesn't preserve the contents of mmapped
- regions. */
- return pointers_fit_in_lispobj_p () && !will_dump_with_unexec_p ();
+ over our address space. */
+ return pointers_fit_in_lispobj_p ();
}
#endif
@@ -1071,11 +1063,7 @@ lisp_free (void *block)
BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */
/* Byte alignment of storage blocks. */
-#ifdef HAVE_UNEXEC
-# define BLOCK_ALIGN (1 << 10)
-#else /* !HAVE_UNEXEC */
# define BLOCK_ALIGN (1 << 15)
-#endif
static_assert (POWER_OF_2 (BLOCK_ALIGN));
/* Use aligned_alloc if it or a simple substitute is available.
diff --git a/src/buffer.c b/src/buffer.c
index 2955ee6399b..663a47ec72f 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4892,47 +4892,6 @@ init_buffer (void)
{
Lisp_Object temp;
-#ifdef USE_MMAP_FOR_BUFFERS
- if (dumped_with_unexec_p ())
- {
- Lisp_Object tail, buffer;
-
-#ifndef WINDOWSNT
- /* These must be reset in the dumped Emacs, to avoid stale
- references to mmap'ed memory from before the dump.
-
- WINDOWSNT doesn't need this because it doesn't track mmap'ed
- regions by hand (see w32heap.c, which uses system APIs for
- that purpose), and thus doesn't use mmap_regions. */
- mmap_regions = NULL;
- mmap_fd = -1;
-#endif
-
- /* The dumped buffers reference addresses of buffer text
- recorded by temacs, that cannot be used by the dumped Emacs.
- We map new memory for their text here.
-
- Implementation notes: the buffers we carry from temacs are:
- " prin1", "*scratch*", " *Minibuf-0*", "*Messages*", and
- " *code-conversion-work*". They are created by
- init_buffer_once and init_window_once (which are not called
- in the dumped Emacs), and by the first call to coding.c
- routines. Since FOR_EACH_LIVE_BUFFER only walks the buffers
- in Vbuffer_alist, any buffer we carry from temacs that is
- not in the alist (a.k.a. "magic invisible buffers") should
- be handled here explicitly. */
- FOR_EACH_LIVE_BUFFER (tail, buffer)
- {
- struct buffer *b = XBUFFER (buffer);
- b->text->beg = NULL;
- enlarge_buffer_text (b, 0);
- }
- /* The " prin1" buffer is not in Vbuffer_alist. */
- XBUFFER (Vprin1_to_string_buffer)->text->beg = NULL;
- enlarge_buffer_text (XBUFFER (Vprin1_to_string_buffer), 0);
- }
-#endif /* USE_MMAP_FOR_BUFFERS */
-
AUTO_STRING (scratch, "*scratch*");
Fset_buffer (Fget_buffer_create (scratch, Qnil));
if (NILP (BVAR (&buffer_defaults, enable_multibyte_characters)))
diff --git a/src/conf_post.h b/src/conf_post.h
index f2353803074..8d523c62eee 100644
--- a/src/conf_post.h
+++ b/src/conf_post.h
@@ -93,30 +93,6 @@ typedef bool bool_bf;
# define ADDRESS_SANITIZER false
#endif
-#ifdef emacs
-/* We include stdlib.h here, because Gnulib's stdlib.h might redirect
- 'free' to its replacement, and we want to avoid that in unexec
- builds. Including it here will render its inclusion after config.h
- a no-op. */
-# if (defined DARWIN_OS && defined HAVE_UNEXEC) || defined HYBRID_MALLOC
-# include <stdlib.h>
-# endif
-#endif
-
-#if defined DARWIN_OS && defined emacs && defined HAVE_UNEXEC
-# undef malloc
-# define malloc unexec_malloc
-# undef realloc
-# define realloc unexec_realloc
-# undef free
-# define free unexec_free
-
-extern void *unexec_malloc (size_t);
-extern void *unexec_realloc (void *, size_t);
-extern void unexec_free (void *);
-
-#endif
-
/* If HYBRID_MALLOC is defined (e.g., on Cygwin), emacs will use
gmalloc before dumping and the system malloc after dumping.
hybrid_malloc and friends, defined in gmalloc.c, are wrappers that
diff --git a/src/emacs.c b/src/emacs.c
index bdd9eee10c4..4e6f286d888 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -196,11 +196,6 @@ bool running_asynch_code;
bool display_arg;
#endif
-#if defined GNU_LINUX && defined HAVE_UNEXEC
-/* The gap between BSS end and heap start as far as we can tell. */
-static uintmax_t heap_bss_diff;
-#endif
-
/* To run as a background daemon under Cocoa or Windows,
we must do a fork+exec, not a simple fork.
@@ -912,14 +907,6 @@ load_pdump (int argc, char **argv, char *dump_file)
#endif
;
- /* TODO: maybe more thoroughly scrub process environment in order to
- make this use case (loading a dump file in an unexeced emacs)
- possible? Right now, we assume that things we don't touch are
- zero-initialized, and in an unexeced Emacs, this assumption
- doesn't hold. */
- if (initialized)
- fatal ("cannot load dump file in unexeced Emacs");
-
/* Look for an explicitly-specified dump file. */
const char *path_exec = PATH_EXEC;
dump_file = NULL;
@@ -1318,53 +1305,34 @@ main (int argc, char **argv)
#endif
/* Look for this argument first, before any heap allocation, so we
- can set heap flags properly if we're going to unexec. */
+ can set heap flags properly if we're going to dump. */
if (!initialized && temacs)
{
-#ifdef HAVE_UNEXEC
- if (strcmp (temacs, "dump") == 0 ||
- strcmp (temacs, "bootstrap") == 0)
- gflags.will_dump_with_unexec_ = true;
-#endif
#ifdef HAVE_PDUMPER
if (strcmp (temacs, "pdump") == 0 ||
strcmp (temacs, "pbootstrap") == 0)
gflags.will_dump_with_pdumper_ = true;
-#endif
-#if defined HAVE_PDUMPER || defined HAVE_UNEXEC
if (strcmp (temacs, "bootstrap") == 0 ||
strcmp (temacs, "pbootstrap") == 0)
gflags.will_bootstrap_ = true;
gflags.will_dump_ =
- will_dump_with_pdumper_p () ||
- will_dump_with_unexec_p ();
+ will_dump_with_pdumper_p ();
if (will_dump_p ())
dump_mode = temacs;
#endif
if (!dump_mode)
fatal ("Invalid temacs mode '%s'", temacs);
}
- else if (temacs)
- {
- fatal ("--temacs not supported for unexeced emacs");
- }
else
{
eassert (!temacs);
-#ifndef HAVE_UNEXEC
eassert (!initialized);
-#endif
#ifdef HAVE_PDUMPER
if (!initialized)
attempt_load_pdump = true;
#endif
}
-#ifdef HAVE_UNEXEC
- if (!will_dump_with_unexec_p ())
- gflags.will_not_unexec_ = true;
-#endif
-
#ifdef WINDOWSNT
/* Grab our malloc arena space now, before anything important
happens. This relies on the static heap being needed only in
@@ -1427,25 +1395,12 @@ main (int argc, char **argv)
argc = maybe_disable_address_randomization (argc, argv);
-#if defined GNU_LINUX && defined HAVE_UNEXEC
- if (!initialized)
- {
- char *heap_start = my_heap_start ();
- heap_bss_diff = heap_start - max (my_endbss, my_endbss_static);
- }
-#endif
#ifdef RUN_TIME_REMAP
if (initialized)
run_time_remap (argv[0]);
#endif
-/* If using unexmacosx.c (set by s/darwin.h), we must do this. */
-#if defined DARWIN_OS && defined HAVE_UNEXEC
- if (!initialized)
- unexec_init_emacs_zone ();
-#endif
-
init_standard_fds ();
atexit (close_output_streams);
@@ -1627,10 +1582,7 @@ main (int argc, char **argv)
#endif /* MSDOS */
/* Set locale, so that initial error messages are localized properly.
- However, skip this if LC_ALL is "C", as it's not needed in that case.
- Skipping helps if dumping with unexec, to ensure that the dumped
- Emacs does not have its system locale tables initialized, as that
- might cause screwups when the dumped Emacs starts up. */
+ However, skip this if LC_ALL is "C", as it's not needed in that case. */
char *lc_all = getenv ("LC_ALL");
if (! (lc_all && strcmp (lc_all, "C") == 0))
{
@@ -3155,117 +3107,6 @@ shut_down_emacs (int sig, Lisp_Object stuff)
}
-
-#ifdef HAVE_UNEXEC
-
-#include "unexec.h"
-
-DEFUN ("dump-emacs", Fdump_emacs, Sdump_emacs, 2, 2, 0,
- doc: /* Dump current state of Emacs into executable file FILENAME.
-Take symbols from SYMFILE (presumably the file you executed to run Emacs).
-This is used in the file `loadup.el' when building Emacs.
-
-You must run Emacs in batch mode in order to dump it. */)
- (Lisp_Object filename, Lisp_Object symfile)
-{
- Lisp_Object tem;
- Lisp_Object symbol;
- specpdl_ref count = SPECPDL_INDEX ();
-
- check_pure_size ();
-
- if (! noninteractive)
- error ("Dumping Emacs works only in batch mode");
-
- if (dumped_with_unexec_p ())
- error ("Emacs can be dumped using unexec only once");
-
- if (definitely_will_not_unexec_p ())
- error ("This Emacs instance was not started in temacs mode");
-
-# if defined GNU_LINUX && defined HAVE_UNEXEC
-
- /* Warn if the gap between BSS end and heap start is larger than this. */
-# define MAX_HEAP_BSS_DIFF (1024 * 1024)
-
- if (heap_bss_diff > MAX_HEAP_BSS_DIFF)
- fprintf (stderr,
- ("**************************************************\n"
- "Warning: Your system has a gap between BSS and the\n"
- "heap (%"PRIuMAX" bytes). This usually means that exec-shield\n"
- "or something similar is in effect. The dump may\n"
- "fail because of this. See the section about\n"
- "exec-shield in etc/PROBLEMS for more information.\n"
- "**************************************************\n"),
- heap_bss_diff);
-# endif
-
- /* Bind `command-line-processed' to nil before dumping,
- so that the dumped Emacs will process its command line
- and set up to work with X windows if appropriate. */
- symbol = Qcommand_line_processed;
- specbind (symbol, Qnil);
-
- CHECK_STRING (filename);
- filename = Fexpand_file_name (filename, Qnil);
- filename = ENCODE_FILE (filename);
- if (!NILP (symfile))
- {
- CHECK_STRING (symfile);
- if (SCHARS (symfile))
- {
- symfile = Fexpand_file_name (symfile, Qnil);
- symfile = ENCODE_FILE (symfile);
- }
- }
-
- tem = Vpurify_flag;
- Vpurify_flag = Qnil;
-
-# ifdef HYBRID_MALLOC
- {
- static char const fmt[] = "%d of %d static heap bytes used";
- char buf[sizeof fmt + 2 * (INT_STRLEN_BOUND (int) - 2)];
- int max_usage = max_bss_sbrk_ptr - bss_sbrk_buffer;
- sprintf (buf, fmt, max_usage, STATIC_HEAP_SIZE);
- /* Don't log messages, because at this point buffers cannot be created. */
- message1_nolog (buf);
- }
-# endif
-
- fflush (stdout);
- /* Tell malloc where start of impure now is. */
- /* Also arrange for warnings when nearly out of space. */
-# if !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC && !defined WINDOWSNT
- /* On Windows, this was done before dumping, and that once suffices.
- Meanwhile, my_edata is not valid on Windows. */
- memory_warnings (my_edata, malloc_warning);
-# endif
-
- struct gflags old_gflags = gflags;
- gflags.will_dump_ = false;
- gflags.will_dump_with_unexec_ = false;
- gflags.dumped_with_unexec_ = true;
-
- alloc_unexec_pre ();
-
- unexec (SSDATA (filename), !NILP (symfile) ? SSDATA (symfile) : 0);
-
- alloc_unexec_post ();
-
- gflags = old_gflags;
-
-# ifdef WINDOWSNT
- Vlibrary_cache = Qnil;
-# endif
-
- Vpurify_flag = tem;
-
- return unbind_to (count, Qnil);
-}
-
-#endif
-
/* Recover from setlocale (LC_ALL, ""). */
void
@@ -3565,10 +3406,6 @@ syms_of_emacs (void)
DEFSYM (Qcommand_line_processed, "command-line-processed");
DEFSYM (Qsafe_magic, "safe-magic");
-#ifdef HAVE_UNEXEC
- defsubr (&Sdump_emacs);
-#endif
-
defsubr (&Skill_emacs);
defsubr (&Sinvocation_name);
diff --git a/src/lastfile.c b/src/lastfile.c
index 48d3ac78634..c6baad4ac01 100644
--- a/src/lastfile.c
+++ b/src/lastfile.c
@@ -42,14 +42,3 @@ along with GNU Emacs. If not, see
<https://www.gnu.org/licenses/>. */
|| defined WINDOWSNT || defined CYGWIN || defined DARWIN_OS)
char my_edata[] = "End of Emacs initialized data";
#endif
-
-#ifdef HAVE_UNEXEC
-
-/* Help unexec locate the end of the .bss area used by Emacs (which
- isn't always a separate section in NT executables). */
-char my_endbss[1];
-
-static char _my_endbss[1];
-char * my_endbss_static = _my_endbss;
-
-#endif
diff --git a/src/lisp.h b/src/lisp.h
index 832a1755c04..a7b84b25b81 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -640,20 +640,12 @@ extern struct gflags
dump. */
bool dumped_with_pdumper_ : 1;
#endif
-#ifdef HAVE_UNEXEC
- bool will_dump_with_unexec_ : 1;
- /* Set in an Emacs process that has been restored from an unexec
- dump. */
- bool dumped_with_unexec_ : 1;
- /* We promise not to unexec: useful for hybrid malloc. */
- bool will_not_unexec_ : 1;
-#endif
} gflags;
INLINE bool
will_dump_p (void)
{
-#if HAVE_PDUMPER || defined HAVE_UNEXEC
+#if HAVE_PDUMPER
return gflags.will_dump_;
#else
return false;
@@ -663,7 +655,7 @@ will_dump_p (void)
INLINE bool
will_bootstrap_p (void)
{
-#if HAVE_PDUMPER || defined HAVE_UNEXEC
+#if HAVE_PDUMPER
return gflags.will_bootstrap_;
#else
return false;
@@ -690,39 +682,6 @@ dumped_with_pdumper_p (void)
#endif
}
-INLINE bool
-will_dump_with_unexec_p (void)
-{
-#ifdef HAVE_UNEXEC
- return gflags.will_dump_with_unexec_;
-#else
- return false;
-#endif
-}
-
-INLINE bool
-dumped_with_unexec_p (void)
-{
-#ifdef HAVE_UNEXEC
- return gflags.dumped_with_unexec_;
-#else
- return false;
-#endif
-}
-
-/* This function is the opposite of will_dump_with_unexec_p(), except
- that it returns false before main runs. It's important to use
- gmalloc for any pre-main allocations if we're going to unexec. */
-INLINE bool
-definitely_will_not_unexec_p (void)
-{
-#ifdef HAVE_UNEXEC
- return gflags.will_not_unexec_;
-#else
- return true;
-#endif
-}
-
/* Defined in floatfns.c. */
extern double extract_float (Lisp_Object);
@@ -3443,14 +3402,10 @@ CHECK_SUBR (Lisp_Object x)
/* If we're not dumping using the legacy dumper and we might be using
the portable dumper, try to bunch all the subr structures together
for more efficient dump loading. */
-#ifndef HAVE_UNEXEC
-# ifdef DARWIN_OS
-# define SUBR_SECTION_ATTRIBUTE ATTRIBUTE_SECTION ("__DATA,subrs")
-# else
-# define SUBR_SECTION_ATTRIBUTE ATTRIBUTE_SECTION (".subrs")
-# endif
+#ifdef DARWIN_OS
+# define SUBR_SECTION_ATTRIBUTE ATTRIBUTE_SECTION ("__DATA,subrs")
#else
-# define SUBR_SECTION_ATTRIBUTE
+# define SUBR_SECTION_ATTRIBUTE ATTRIBUTE_SECTION (".subrs")
#endif
/* Define a built-in function for calling from Lisp.
@@ -4492,8 +4447,6 @@ extern void mark_objects (Lisp_Object *, ptrdiff_t);
#if defined REL_ALLOC && !defined SYSTEM_MALLOC && !defined HYBRID_MALLOC
extern void refill_memory_reserve (void);
#endif
-extern void alloc_unexec_pre (void);
-extern void alloc_unexec_post (void);
extern void mark_c_stack (char const *, char const *);
extern void flush_stack_call_func1 (void (*func) (void *arg), void *arg);
extern void mark_memory (void const *start, void const *end);
@@ -4927,14 +4880,6 @@ void do_debug_on_call (Lisp_Object code, specpdl_ref
count);
Lisp_Object funcall_general (Lisp_Object fun,
ptrdiff_t numargs, Lisp_Object *args);
-/* Defined in unexmacosx.c. */
-#if defined DARWIN_OS && defined HAVE_UNEXEC
-extern void unexec_init_emacs_zone (void);
-extern void *unexec_malloc (size_t);
-extern void *unexec_realloc (void *, size_t);
-extern void unexec_free (void *);
-#endif
-
/* The definition of Lisp_Module_Function depends on emacs-module.h,
so we don't define it here. It's defined in emacs-module.c. */
diff --git a/src/pdumper.c b/src/pdumper.c
index c8baa311854..88e8e810adc 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -4143,12 +4143,6 @@ types. */)
"contributing a patch to Emacs.");
#endif
- if (will_dump_with_unexec_p ())
- error ("This Emacs instance was started under the assumption "
- "that it would be dumped with unexec, not the portable "
- "dumper. Dumping with the portable dumper may produce "
- "unexpected results.");
-
if (!main_thread_p (current_thread))
error ("This function can be called only in the main thread");
diff --git a/src/process.c b/src/process.c
index b71ba3daf2d..dcf08fd9b57 100644
--- a/src/process.c
+++ b/src/process.c
@@ -8620,50 +8620,39 @@ init_process_emacs (int sockfd)
inhibit_sentinels = 0;
-#ifdef HAVE_UNEXEC
- /* Clear child_signal_read_fd and child_signal_write_fd after dumping,
- lest wait_reading_process_output should select on nonexistent file
- descriptors which existed in the build process. */
- child_signal_read_fd = -1;
- child_signal_write_fd = -1;
-#endif /* HAVE_UNEXEC */
+#if defined HAVE_GLIB && !defined WINDOWSNT
+ /* Tickle Glib's child-handling code. Ask Glib to install a
+ watch source for Emacs itself which will initialize glib's
+ private SIGCHLD handler, allowing catch_child_signal to copy
+ it into lib_child_handler. This is a hacky workaround to get
+ glib's g_unix_signal_handler into lib_child_handler.
+
+ In Glib 2.37.5 (2013), commit 2e471acf changed Glib to
+ always install a signal handler when g_child_watch_source_new
+ is called and not just the first time it's called, and to
+ reset signal handlers to SIG_DFL when it no longer has a
+ watcher on that signal. Arrange for Emacs's signal handler
+ to be reinstalled even if this happens.
+
+ In Glib 2.73.2 (2022), commit f615eef4 changed Glib again,
+ to not install a signal handler if the system supports
+ pidfd_open and waitid (as in Linux kernel 5.3+). The hacky
+ workaround is not needed in this case. */
+ GSource *source = g_child_watch_source_new (getpid ());
+ catch_child_signal ();
+ g_source_unref (source);
- if (!will_dump_with_unexec_p ())
+ if (lib_child_handler != dummy_handler)
{
-#if defined HAVE_GLIB && !defined WINDOWSNT
- /* Tickle Glib's child-handling code. Ask Glib to install a
- watch source for Emacs itself which will initialize glib's
- private SIGCHLD handler, allowing catch_child_signal to copy
- it into lib_child_handler. This is a hacky workaround to get
- glib's g_unix_signal_handler into lib_child_handler.
-
- In Glib 2.37.5 (2013), commit 2e471acf changed Glib to
- always install a signal handler when g_child_watch_source_new
- is called and not just the first time it's called, and to
- reset signal handlers to SIG_DFL when it no longer has a
- watcher on that signal. Arrange for Emacs's signal handler
- to be reinstalled even if this happens.
-
- In Glib 2.73.2 (2022), commit f615eef4 changed Glib again,
- to not install a signal handler if the system supports
- pidfd_open and waitid (as in Linux kernel 5.3+). The hacky
- workaround is not needed in this case. */
- GSource *source = g_child_watch_source_new (getpid ());
+ /* The hacky workaround is needed on this platform. */
+ signal_handler_t lib_child_handler_glib = lib_child_handler;
catch_child_signal ();
- g_source_unref (source);
-
- if (lib_child_handler != dummy_handler)
- {
- /* The hacky workaround is needed on this platform. */
- signal_handler_t lib_child_handler_glib = lib_child_handler;
- catch_child_signal ();
- eassert (lib_child_handler == dummy_handler);
- lib_child_handler = lib_child_handler_glib;
- }
+ eassert (lib_child_handler == dummy_handler);
+ lib_child_handler = lib_child_handler_glib;
+ }
#else
- catch_child_signal ();
+ catch_child_signal ();
#endif
- }
#ifdef HAVE_SETRLIMIT
/* Don't allocate more than FD_SETSIZE file descriptors for Emacs itself. */
diff --git a/src/sysdep.c b/src/sysdep.c
index bb4892af4af..e0ec74d8364 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -165,9 +165,7 @@ maybe_disable_address_randomization (int argc, char **argv)
if (argc < 2 || strcmp (argv[1], aslr_disabled_option) != 0)
{
- /* If dumping via unexec, ASLR must be disabled, as otherwise
- data may be scattered and undumpable as a simple executable.
- If pdumping, disabling ASLR lessens differences in the .pdmp file. */
+ /* If pdumping, disabling ASLR lessens differences in the .pdmp file. */
bool disable_aslr = will_dump_p ();
# ifdef __PPC64__
disable_aslr = true;
@@ -2036,12 +2034,6 @@ init_signals (void)
main_thread_id = pthread_self ();
#endif
- /* Don't alter signal handlers if dumping with unexec. On some
- machines, changing signal handlers sets static data that would make
- signals fail to work right when the dumped Emacs is run. */
- if (will_dump_with_unexec_p ())
- return;
-
sigfillset (&process_fatal_action.sa_mask);
process_fatal_action.sa_handler = deliver_fatal_signal;
process_fatal_action.sa_flags = emacs_sigaction_flags ();
diff --git a/src/timefns.c b/src/timefns.c
index f16a34d651b..520a48f2b9b 100644
--- a/src/timefns.c
+++ b/src/timefns.c
@@ -318,37 +318,8 @@ tzlookup (Lisp_Object zone, bool settz)
void
init_timefns (void)
{
-#ifdef HAVE_UNEXEC
- /* A valid but unlikely setting for the TZ environment variable.
- It is OK (though a bit slower) if the user chooses this value. */
- static char dump_tz_string[] = "TZ=UtC0";
-
- /* When just dumping out, set the time zone to a known unlikely value
- and skip the rest of this function. */
- if (will_dump_with_unexec_p ())
- {
- xputenv (dump_tz_string);
- tzset ();
- return;
- }
-#endif
-
char *tz = getenv ("TZ");
-#ifdef HAVE_UNEXEC
- /* If the execution TZ happens to be the same as the dump TZ,
- change it to some other value and then change it back,
- to force the underlying implementation to reload the TZ info.
- This is needed on implementations that load TZ info from files,
- since the TZ file contents may differ between dump and execution. */
- if (tz && strcmp (tz, &dump_tz_string[tzeqlen]) == 0)
- {
- ++*tz;
- tzset ();
- --*tz;
- }
-#endif
-
/* Set the time zone rule now, so that the call to putenv is done
before multiple threads are active. */
tzlookup (tz ? build_string (tz) : Qwall, true);
diff --git a/src/w32heap.c b/src/w32heap.c
index 601686f5331..c5777622c56 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -617,31 +617,6 @@ sys_calloc (size_t number, size_t size)
return ptr;
}
-#if defined HAVE_UNEXEC && defined ENABLE_CHECKING
-void
-report_temacs_memory_usage (void)
-{
- DWORD blocks_used = 0;
- size_t large_mem_used = 0;
- int i;
-
- for (i = 0; i < blocks_number; i++)
- if (blocks[i].occupied)
- {
- blocks_used++;
- large_mem_used += blocks[i].size;
- }
-
- /* Emulate 'message', which writes to stderr in non-interactive
- sessions. */
- fprintf (stderr,
- "Dump memory usage: Heap: %" PRIu64 " Large blocks(%lu/%lu): %"
PRIu64 "/%" PRIu64 "\n",
- (unsigned long long)committed, blocks_used, blocks_number,
- (unsigned long long)large_mem_used,
- (unsigned long long)(dumped_data + DUMPED_HEAP_SIZE - bc_limit));
-}
-#endif
-
/* Emulate getpagesize. */
int
getpagesize (void)
diff --git a/src/w32heap.h b/src/w32heap.h
index 24b02fabbfc..901c9b5a41e 100644
--- a/src/w32heap.h
+++ b/src/w32heap.h
@@ -1,4 +1,4 @@
-/* Heap management routines (including unexec) for GNU Emacs on Windows NT.
+/* Heap management routines for GNU Emacs on Windows NT.
Copyright (C) 1994, 2001-2024 Free Software Foundation, Inc.
This file is part of GNU Emacs.
diff --git a/src/w32image.c b/src/w32image.c
index da4d6843ba9..02700338715 100644
--- a/src/w32image.c
+++ b/src/w32image.c
@@ -634,6 +634,4 @@ syms_of_w32image (void)
void
globals_of_w32image (void)
{
- /* This is only needed in an unexec build. */
- memset (&last_encoder, 0, sizeof last_encoder);
}
- branch scratch/no-purespace created (now 28dadb6f10a), Stefan Kangas, 2024/12/12
- scratch/no-purespace b2bc337a5f8 03/41: Unexec removal: Remove HYBRID_MALLOC support, Stefan Kangas, 2024/12/12
- scratch/no-purespace aab5a2fe4c4 04/41: Unexec removal: Adjust and simplify W32-specific code, Stefan Kangas, 2024/12/12
- scratch/no-purespace 15e2b14f037 02/41: Unexec removal: Main part,
Stefan Kangas <=
- scratch/no-purespace d359858b5d0 05/41: Pure storage removal: Delete puresize.h, Stefan Kangas, 2024/12/12
- scratch/no-purespace 7ce34a3bcf5 01/41: Unexec removal: Remove obsolete files, Stefan Kangas, 2024/12/12
- scratch/no-purespace f84ccff5a62 06/41: Pure storage removal: Main part, Stefan Kangas, 2024/12/12
- scratch/no-purespace afd61deaaeb 09/41: Pure storage removal: Remove purecopy hash table flag, Stefan Kangas, 2024/12/12
- scratch/no-purespace 69fea4f29a1 10/41: Pure storage removal: Remove docstring hack, Stefan Kangas, 2024/12/12
- scratch/no-purespace e1e101c6c10 08/41: Pure storage removal: Remove support for pinned objects, Stefan Kangas, 2024/12/12
- scratch/no-purespace 9a0728af9df 15/41: Don't recognize "bootstrap" option for --temacs, Stefan Kangas, 2024/12/12
- scratch/no-purespace 1c495735b4f 14/41: Pure storage removal: Documentation, Stefan Kangas, 2024/12/12
- scratch/no-purespace c9ab3258760 12/41: Pure storage removal: Remove documentation, Stefan Kangas, 2024/12/12
- scratch/no-purespace 5ec86966638 07/41: Pure storage removal: Replace calls to removed functions, Stefan Kangas, 2024/12/12