[lttng-dev] [PATCH lttng-tools 18/24] Add : Compatibility layer for shm.h

Charles Briere c.briere at samsung.com
Mon Oct 27 16:49:30 EDT 2014


From: Charles Briere <c.briere at samsung.com>

Linking libcutils for Android that uses ashmem

Signed-off-by: Charles Briere <c.briere at samsung.com>
---
 configure.ac                 | 14 ++++++++++++++
 src/bin/lttng-sessiond/shm.c |  5 +++--
 src/common/compat/shm.h      | 37 +++++++++++++++++++++++++++++++++++++
 src/common/defaults.h        |  1 +
 4 files changed, 55 insertions(+), 2 deletions(-)
 create mode 100644 src/common/compat/shm.h

diff --git a/configure.ac b/configure.ac
index e219689..16852b1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -194,6 +194,20 @@ AC_CHECK_LIB([rt], [shm_open],
 AM_CONDITIONAL([LTTNG_BUILD_WITH_LIBUUID], [test "x$have_libuuid" = "xyes"])
 AM_CONDITIONAL([LTTNG_BUILD_WITH_LIBC_UUID], [test "x$have_libc_uuid" = "xyes"])
 
+# Check for libcutils
+AC_CHECK_LIB([cutils], [ashmem_create],
+	     [AC_SUBST(LIBCUTILS_LIBS, '-lcutils')],
+	     [AC_SUBST(LIBCUTILS_LIBS, '')],
+)
+AC_CHECK_HEADERS([cutils/ashmem.h],
+	[AC_CHECK_DECLS([ashmem_create], [], [], [[#include <cutils/ashmem.h>]])],
+)
+
+AS_CASE([$host],[*-*-linux-androideabi],
+	[AM_CONDITIONAL(TARGET_IS_ANDROID, true)],
+	[AM_CONDITIONAL(TARGET_IS_ANDROID, false)]
+)
+
 # URCU library version needed or newer
 liburcu_version=">= 0.8.0"
 
diff --git a/src/bin/lttng-sessiond/shm.c b/src/bin/lttng-sessiond/shm.c
index e9ed714..dba3679 100644
--- a/src/bin/lttng-sessiond/shm.c
+++ b/src/bin/lttng-sessiond/shm.c
@@ -30,7 +30,7 @@
 
 #include <common/error.h>
 
-#include "shm.h"
+#include <common/compat/shm.h>
 
 /*
  * Using fork to set umask in the child process (not multi-thread safe). We
@@ -73,7 +73,8 @@ static int get_wait_shm(char *shm_path, size_t mmap_size, int global)
 	 * Try creating shm (or get rw access). We don't do an exclusive open,
 	 * because we allow other processes to create+ftruncate it concurrently.
 	 */
-	wait_shm_fd = shm_open(shm_path, O_RDWR | O_CREAT, mode);
+	wait_shm_fd = lttng_shm_open(shm_path, O_RDWR | O_CREAT, mode);
+
 	if (wait_shm_fd < 0) {
 		PERROR("shm_open wait shm");
 		goto error;
diff --git a/src/common/compat/shm.h b/src/common/compat/shm.h
new file mode 100644
index 0000000..28e498a
--- /dev/null
+++ b/src/common/compat/shm.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 - Charles Briere <c.briere at samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2 only,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef _COMPAT_SYS_SHM_H
+#define _COMPAT_SYS_SHM_H
+
+# if defined(HAVE_SYS_SHM_H)
+
+#include <sys/shm.h>
+
+#define lttng_shm_open(name, oflag, mode) \
+	shm_open(name, oflag, mode)
+
+# elif defined(HAVE_CUTILS_ASHMEM_H)
+
+#include <cutils/ashmem.h>
+
+#define lttng_shm_open(name, oflag, mode) \
+	open(name, oflag, mode)
+
+# endif /* HAVE_SYS_SHM_H */
+
+#endif  /*_COMPAT_SYS_SHM_H */
diff --git a/src/common/defaults.h b/src/common/defaults.h
index 25d7b32..8951179 100644
--- a/src/common/defaults.h
+++ b/src/common/defaults.h
@@ -143,6 +143,7 @@
 #define DEFAULT_HOME_APPS_UNIX_SOCK \
 	DEFAULT_LTTNG_HOME_RUNDIR "/" LTTNG_UST_SOCK_FILENAME
 #define DEFAULT_GLOBAL_APPS_WAIT_SHM_PATH \
+	DEFAULT_LTTNG_RUNDIR \
 	"/" LTTNG_UST_WAIT_FILENAME
 #define DEFAULT_HOME_APPS_WAIT_SHM_PATH \
 	DEFAULT_GLOBAL_APPS_WAIT_SHM_PATH "-%d"
-- 
2.1.2



More information about the lttng-dev mailing list