summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2016-12-21 09:52:28 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2016-12-21 09:57:05 -0800
commitcf6ce9a1fe320ebe5b238af5f7af9416ac954855 (patch)
tree492441277954ab7829df6ce9920986ebb9855f6e
parent8661313efd5fd5b0a27fe82f276a1ff862646424 (diff)
downloademacs-cf6ce9a1fe320ebe5b238af5f7af9416ac954855.tar.gz
Port dumping better to WSL
Problem reported by Angelo Graziosi in: http://lists.gnu.org/archive/html/emacs-devel/2016-12/msg00822.html * src/sysdep.c (disable_address_randomization): Detect buggy platforms where 'personality' always returns 0.
-rw-r--r--src/sysdep.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/sysdep.c b/src/sysdep.c
index 96c9e538409..86d420f66c4 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -144,11 +144,16 @@ static const int baud_convert[] =
bool
disable_address_randomization (void)
{
- bool disabled = false;
int pers = personality (0xffffffff);
- disabled = (! (pers & ADDR_NO_RANDOMIZE)
- && 0 <= personality (pers | ADDR_NO_RANDOMIZE));
- return disabled;
+ if (pers < 0)
+ return false;
+ int desired_pers = pers | ADDR_NO_RANDOMIZE;
+
+ /* Call 'personality' twice, to detect buggy platforms like WSL
+ where 'personality' always returns 0. */
+ return (pers != desired_pers
+ && personality (desired_pers) == pers
+ && personality (0xffffffff) == desired_pers);
}
#endif