summaryrefslogtreecommitdiff
path: root/src/Makefile.in
diff options
context:
space:
mode:
authorUlrich Müller <ulm@gentoo.org>2012-06-03 16:14:22 -0700
committerGlenn Morris <rgm@gnu.org>2012-06-03 16:14:22 -0700
commitc71232db6e7a2dbd0cb0830829dcce8285ffa138 (patch)
tree8f08f7d51cd276908dee9838df21e70937d1af8e /src/Makefile.in
parent7afbaca445e5d49ece642f5b809ff0cdcbd69356 (diff)
downloademacs-c71232db6e7a2dbd0cb0830829dcce8285ffa138.tar.gz
Workaround dumping problem on PaX-enabled Linux kernels
* configure.in (PAXCTL): Check for paxctl. * src/Makefile.in (PAXCTL): Define. (temacs$(EXEEXT)): Disable memory randomization for the temacs binary via PaX flags if the paxctl utility is available. (emacs$(EXEEXT), bootstrap-emacs$(EXEEXT)): Restore PaX flags to their default. Fixes: debbugs:11398
Diffstat (limited to 'src/Makefile.in')
-rw-r--r--src/Makefile.in10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index 27199578fc0..47c7d5cfbc2 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -113,6 +113,12 @@ TEMACS_LDFLAGS = $(LD_SWITCH_SYSTEM) $(LD_SWITCH_SYSTEM_TEMACS)
## $LDFLAGS or empty if NS_IMPL_GNUSTEP (for some reason).
TEMACS_LDFLAGS2 = @TEMACS_LDFLAGS2@
+## If available, the full path to the paxctl program.
+## On grsecurity/PaX systems, unexec will fail due to a gap between
+## the bss section and the heap. This can be prevented by disabling
+## memory randomization in temacs with "paxctl -r". See bug#11398.
+PAXCTL = @PAXCTL@
+
## Some systems define this to request special libraries.
LIBS_SYSTEM=@LIBS_SYSTEM@
@@ -403,6 +409,7 @@ emacs$(EXEEXT): temacs$(EXEEXT) $(etc)/DOC $(lisp) $(leimdir)/leim-list.el
-f list-load-path-shadows || true; \
else \
LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump || exit 1; \
+ test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT); \
ln -f emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
./emacs -batch -f list-load-path-shadows || true; \
fi
@@ -450,6 +457,8 @@ $(lib)/libgnu.a: $(config_h)
temacs$(EXEEXT): $(START_FILES) stamp-oldxmenu $(obj) $(otherobj) $(lib)/libgnu.a
$(CC) $(LD_FIRSTFLAG) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(TEMACS_LDFLAGS2) \
-o temacs $(START_FILES) $(obj) $(otherobj) $(lib)/libgnu.a $(LIBES)
+ test "$(CANNOT_DUMP)" = "yes" || \
+ test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)
## The following oldxmenu-related rules are only (possibly) used if
## HAVE_X11 && !USE_GTK, but there is no harm in always defining them
@@ -597,6 +606,7 @@ bootstrap-emacs$(EXEEXT): temacs$(EXEEXT)
ln -f temacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
else \
$(RUN_TEMACS) --batch --load loadup bootstrap || exit 1; \
+ test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT); \
mv -f emacs$(EXEEXT) bootstrap-emacs$(EXEEXT); \
fi
@: Compile some files earlier to speed up further compilation.