summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL5
-rw-r--r--configure.ac31
-rw-r--r--include/jemalloc/internal/jemalloc_internal_defs.h.in4
-rw-r--r--src/pages.c6
-rw-r--r--src/util.c2
5 files changed, 33 insertions, 15 deletions
diff --git a/INSTALL b/INSTALL
index 48025e8..4cad3ee 100644
--- a/INSTALL
+++ b/INSTALL
@@ -203,6 +203,11 @@ any of the following arguments (not a definitive list) to 'configure':
most extreme case increases physical memory usage for the 16 KiB size class
to 20 KiB.
+--disable-syscall
+ Disable use of syscall(2) rather than {open,read,write,close}(2). This is
+ intended as a workaround for systems that place security limitations on
+ syscall(2).
+
--with-xslroot=<path>
Specify where to find DocBook XSL stylesheets when building the
documentation.
diff --git a/configure.ac b/configure.ac
index 2e3ef36..ab2c0be 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1366,20 +1366,33 @@ if test "x${je_cv_mach_absolute_time}" = "xyes" ; then
AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME])
fi
-dnl Check if syscall(2) is usable. Treat warnings as errors, so that e.g. OS X
-dnl 10.12's deprecation warning prevents use.
-SAVED_CFLAGS="${CFLAGS}"
-JE_CFLAGS_APPEND([-Werror])
-JE_COMPILABLE([syscall(2)], [
+dnl Use syscall(2) (if available) by default.
+AC_ARG_ENABLE([syscall],
+ [AS_HELP_STRING([--disable-syscall], [Disable use of syscall(2)])],
+[if test "x$enable_syscall" = "xno" ; then
+ enable_syscall="0"
+else
+ enable_syscall="1"
+fi
+],
+[enable_syscall="1"]
+)
+if test "x$enable_syscall" = "x1" ; then
+ dnl Check if syscall(2) is usable. Treat warnings as errors, so that e.g. OS
+ dnl X 10.12's deprecation warning prevents use.
+ SAVED_CFLAGS="${CFLAGS}"
+ JE_CFLAGS_APPEND([-Werror])
+ JE_COMPILABLE([syscall(2)], [
#include <sys/syscall.h>
#include <unistd.h>
], [
syscall(SYS_write, 2, "hello", 5);
],
- [je_cv_syscall])
-CFLAGS="${SAVED_CFLAGS}"
-if test "x$je_cv_syscall" = "xyes" ; then
- AC_DEFINE([JEMALLOC_HAVE_SYSCALL], [ ])
+ [je_cv_syscall])
+ CFLAGS="${SAVED_CFLAGS}"
+ if test "x$je_cv_syscall" = "xyes" ; then
+ AC_DEFINE([JEMALLOC_USE_SYSCALL], [ ])
+ fi
fi
dnl Check if the GNU-specific secure_getenv function exists.
diff --git a/include/jemalloc/internal/jemalloc_internal_defs.h.in b/include/jemalloc/internal/jemalloc_internal_defs.h.in
index c345214..aa0c047 100644
--- a/include/jemalloc/internal/jemalloc_internal_defs.h.in
+++ b/include/jemalloc/internal/jemalloc_internal_defs.h.in
@@ -66,8 +66,8 @@
*/
#undef JEMALLOC_OSSPIN
-/* Defined if syscall(2) is available. */
-#undef JEMALLOC_HAVE_SYSCALL
+/* Defined if syscall(2) is usable. */
+#undef JEMALLOC_USE_SYSCALL
/*
* Defined if secure_getenv(3) is available.
diff --git a/src/pages.c b/src/pages.c
index 395ace9..6af228a 100644
--- a/src/pages.c
+++ b/src/pages.c
@@ -219,7 +219,7 @@ os_overcommits_proc(void)
char buf[1];
ssize_t nread;
-#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_open)
+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_open)
fd = (int)syscall(SYS_open, "/proc/sys/vm/overcommit_memory", O_RDONLY);
#else
fd = open("/proc/sys/vm/overcommit_memory", O_RDONLY);
@@ -227,13 +227,13 @@ os_overcommits_proc(void)
if (fd == -1)
return (false); /* Error. */
-#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_read)
+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_read)
nread = (ssize_t)syscall(SYS_read, fd, &buf, sizeof(buf));
#else
nread = read(fd, &buf, sizeof(buf));
#endif
-#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_close)
+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_close)
syscall(SYS_close, fd);
#else
close(fd);
diff --git a/src/util.c b/src/util.c
index 5b8175b..dd8c236 100644
--- a/src/util.c
+++ b/src/util.c
@@ -49,7 +49,7 @@ static void
wrtmessage(void *cbopaque, const char *s)
{
-#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_write)
+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_write)
/*
* Use syscall(2) rather than write(2) when possible in order to avoid
* the possibility of memory allocation within libc. This is necessary