Module Name: src
Committed By: justin
Date: Wed Apr 2 17:09:23 UTC 2014
Modified Files:
src/lib/librumpclient: rumpclient.c
src/lib/librumphijack: hijack.c
src/lib/librumpuser: rumpuser_dl.c rumpuser_port.h rumpuser_pth.c
src/sys/rump/include/rump: rump.h
Log Message:
Add Android support for rump kernel.
Reviewed by pooka@
To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/lib/librumpclient/rumpclient.c
cvs rdiff -u -r1.106 -r1.107 src/lib/librumphijack/hijack.c
cvs rdiff -u -r1.27 -r1.28 src/lib/librumpuser/rumpuser_dl.c
cvs rdiff -u -r1.31 -r1.32 src/lib/librumpuser/rumpuser_port.h
cvs rdiff -u -r1.39 -r1.40 src/lib/librumpuser/rumpuser_pth.c
cvs rdiff -u -r1.61 -r1.62 src/sys/rump/include/rump/rump.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/librumpclient/rumpclient.c
diff -u src/lib/librumpclient/rumpclient.c:1.59 src/lib/librumpclient/rumpclient.c:1.60
--- src/lib/librumpclient/rumpclient.c:1.59 Wed Apr 2 15:04:19 2014
+++ src/lib/librumpclient/rumpclient.c Wed Apr 2 17:09:23 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpclient.c,v 1.59 2014/04/02 15:04:19 pooka Exp $ */
+/* $NetBSD: rumpclient.c,v 1.60 2014/04/02 17:09:23 justin Exp $ */
/*
* Copyright (c) 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -46,11 +46,11 @@
#ifdef __NetBSD__
#define USE_KQUEUE
#endif
-#ifdef __linux__
+#if defined(__linux__) && !defined(__ANDROID__)
#define USE_SIGNALFD
#endif
-__RCSID("$NetBSD: rumpclient.c,v 1.59 2014/04/02 15:04:19 pooka Exp $");
+__RCSID("$NetBSD: rumpclient.c,v 1.60 2014/04/02 17:09:23 justin Exp $");
#include <sys/param.h>
#include <sys/mman.h>
@@ -86,9 +86,17 @@ int (*host_socket)(int, int, int);
int (*host_close)(int);
int (*host_connect)(int, const struct sockaddr *, socklen_t);
int (*host_fcntl)(int, int, ...);
+#ifdef __ANDROID__
+int (*host_poll)(struct pollfd *, nfds_t, long);
+#else
int (*host_poll)(struct pollfd *, nfds_t, int);
+#endif
ssize_t (*host_read)(int, void *, size_t);
+#ifdef __ANDROID__
+int (*host_sendmsg)(int, const struct msghdr *, unsigned int);
+#else
ssize_t (*host_sendmsg)(int, const struct msghdr *, int);
+#endif
int (*host_setsockopt)(int, int, int, const void *, socklen_t);
int (*host_dup)(int);
Index: src/lib/librumphijack/hijack.c
diff -u src/lib/librumphijack/hijack.c:1.106 src/lib/librumphijack/hijack.c:1.107
--- src/lib/librumphijack/hijack.c:1.106 Tue Sep 10 16:53:06 2013
+++ src/lib/librumphijack/hijack.c Wed Apr 2 17:09:23 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: hijack.c,v 1.106 2013/09/10 16:53:06 pooka Exp $ */
+/* $NetBSD: hijack.c,v 1.107 2014/04/02 17:09:23 justin Exp $ */
/*-
* Copyright (c) 2011 Antti Kantee. All Rights Reserved.
@@ -28,7 +28,7 @@
#include <rump/rumpuser_port.h>
#if !defined(lint)
-__RCSID("$NetBSD: hijack.c,v 1.106 2013/09/10 16:53:06 pooka Exp $");
+__RCSID("$NetBSD: hijack.c,v 1.107 2014/04/02 17:09:23 justin Exp $");
#endif
#include <sys/param.h>
@@ -38,10 +38,13 @@ __RCSID("$NetBSD: hijack.c,v 1.106 2013/
#include <sys/mount.h>
#include <sys/socket.h>
#include <sys/stat.h>
-#include <sys/statvfs.h>
#include <sys/time.h>
#include <sys/uio.h>
+#ifdef PLATFORM_HAS_NBVFSSTAT
+#include <sys/statvfs.h>
+#endif
+
#ifdef PLATFORM_HAS_KQUEUE
#include <sys/event.h>
#endif
Index: src/lib/librumpuser/rumpuser_dl.c
diff -u src/lib/librumpuser/rumpuser_dl.c:1.27 src/lib/librumpuser/rumpuser_dl.c:1.28
--- src/lib/librumpuser/rumpuser_dl.c:1.27 Fri Mar 14 01:18:39 2014
+++ src/lib/librumpuser/rumpuser_dl.c Wed Apr 2 17:09:23 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_dl.c,v 1.27 2014/03/14 01:18:39 justin Exp $ */
+/* $NetBSD: rumpuser_dl.c,v 1.28 2014/04/02 17:09:23 justin Exp $ */
/*
* Copyright (c) 2009 Antti Kantee. All Rights Reserved.
@@ -40,7 +40,7 @@
#include "rumpuser_port.h"
#if !defined(lint)
-__RCSID("$NetBSD: rumpuser_dl.c,v 1.27 2014/03/14 01:18:39 justin Exp $");
+__RCSID("$NetBSD: rumpuser_dl.c,v 1.28 2014/04/02 17:09:23 justin Exp $");
#endif /* !lint */
#include <sys/types.h>
@@ -59,8 +59,8 @@ __RCSID("$NetBSD: rumpuser_dl.c,v 1.27 2
#include <rump/rumpuser.h>
#if defined(__ELF__) && (defined(__NetBSD__) || defined(__FreeBSD__) \
- || (defined(__sun__) && defined(__svr4__))) || defined(__linux__) \
- || defined(__DragonFly__)
+ || (defined(__sun__) && defined(__svr4__))) || defined(__DragonFly__) \
+ || (defined(__linux__) && !defined(__ANDROID__))
#include <elf.h>
#include <link.h>
Index: src/lib/librumpuser/rumpuser_port.h
diff -u src/lib/librumpuser/rumpuser_port.h:1.31 src/lib/librumpuser/rumpuser_port.h:1.32
--- src/lib/librumpuser/rumpuser_port.h:1.31 Fri Mar 21 16:03:35 2014
+++ src/lib/librumpuser/rumpuser_port.h Wed Apr 2 17:09:23 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_port.h,v 1.31 2014/03/21 16:03:35 pooka Exp $ */
+/* $NetBSD: rumpuser_port.h,v 1.32 2014/04/02 17:09:23 justin Exp $ */
/*
* Portability header for non-NetBSD platforms.
@@ -42,8 +42,15 @@
#define PLATFORM_HAS_NBVFSSTAT
#endif /* __NetBSD__ */
+#ifndef MIN
+#define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b))
+#endif
+#ifndef MAX
+#define MAX(a,b) ((/*CONSTCOND*/(a)>(b))?(a):(b))
+#endif
+
/* might not be 100% accurate, maybe need to revisit later */
-#if defined(__linux__) || defined(__sun__)
+#if (defined(__linux__) && !defined(__ANDROID__)) || defined(__sun__)
#define HAVE_CLOCK_NANOSLEEP
#endif
@@ -54,6 +61,22 @@
#include <features.h>
#endif
+#ifdef __ANDROID__
+#include <stdint.h>
+typedef uint16_t in_port_t;
+#include <sys/select.h>
+#define atomic_inc_uint(x) __sync_fetch_and_add(x, 1)
+#define atomic_dec_uint(x) __sync_fetch_and_sub(x, 1)
+static inline int getsubopt(char **optionp, char * const *tokens, char **valuep);
+static inline int
+getsubopt(char **optionp, char * const *tokens, char **valuep)
+{
+
+ /* TODO make a definition */
+ return -1;
+}
+#endif
+
#if defined(__sun__)
# if defined(RUMPUSER_NO_FILE_OFFSET_BITS)
# undef _FILE_OFFSET_BITS
@@ -226,7 +249,7 @@ posix_memalign(void **ptr, size_t align,
#define MSG_NOSIGNAL 0
#endif
-#if defined(__sun__) && !defined(RUMP_REGISTER_T)
+#if (defined(__sun__) || defined(__ANDROID__)) && !defined(RUMP_REGISTER_T)
#define RUMP_REGISTER_T long
typedef RUMP_REGISTER_T register_t;
#endif
Index: src/lib/librumpuser/rumpuser_pth.c
diff -u src/lib/librumpuser/rumpuser_pth.c:1.39 src/lib/librumpuser/rumpuser_pth.c:1.40
--- src/lib/librumpuser/rumpuser_pth.c:1.39 Fri Mar 21 16:03:07 2014
+++ src/lib/librumpuser/rumpuser_pth.c Wed Apr 2 17:09:23 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_pth.c,v 1.39 2014/03/21 16:03:07 pooka Exp $ */
+/* $NetBSD: rumpuser_pth.c,v 1.40 2014/04/02 17:09:23 justin Exp $ */
/*
* Copyright (c) 2007-2010 Antti Kantee. All Rights Reserved.
@@ -28,7 +28,7 @@
#include "rumpuser_port.h"
#if !defined(lint)
-__RCSID("$NetBSD: rumpuser_pth.c,v 1.39 2014/03/21 16:03:07 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth.c,v 1.40 2014/04/02 17:09:23 justin Exp $");
#endif /* !lint */
#include <sys/queue.h>
@@ -254,7 +254,7 @@ rumpuser_mutex_owner(struct rumpuser_mtx
struct rumpuser_rw {
pthread_rwlock_t pthrw;
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__ANDROID__)
char pad[64 - sizeof(pthread_rwlock_t)];
pthread_spinlock_t spin;
#endif
@@ -317,7 +317,7 @@ static inline void
rw_readup(struct rumpuser_rw *rw)
{
-#if defined(__NetBSD__) || defined(__APPLE__)
+#if defined(__NetBSD__) || defined(__APPLE__) || defined(__ANDROID__)
atomic_inc_uint(&rw->readers);
#else
pthread_spin_lock(&rw->spin);
@@ -330,7 +330,7 @@ static inline void
rw_readdown(struct rumpuser_rw *rw)
{
-#if defined(__NetBSD__) || defined(__APPLE__)
+#if defined(__NetBSD__) || defined(__APPLE__) || defined(__ANDROID__)
atomic_dec_uint(&rw->readers);
#else
pthread_spin_lock(&rw->spin);
@@ -346,7 +346,7 @@ rumpuser_rw_init(struct rumpuser_rw **rw
NOFAIL(*rw = aligned_alloc(sizeof(struct rumpuser_rw)));
NOFAIL_ERRNO(pthread_rwlock_init(&((*rw)->pthrw), NULL));
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && !defined(__ANDROID__)
NOFAIL_ERRNO(pthread_spin_init(&((*rw)->spin),PTHREAD_PROCESS_PRIVATE));
#endif
(*rw)->readers = 0;
@@ -452,7 +452,7 @@ rumpuser_rw_destroy(struct rumpuser_rw *
{
NOFAIL_ERRNO(pthread_rwlock_destroy(&rw->pthrw));
-#if !defined(__APPLE__)
+#if !defined(__APPLE__) && ! defined(__ANDROID__)
NOFAIL_ERRNO(pthread_spin_destroy(&rw->spin));
#endif
free(rw);
Index: src/sys/rump/include/rump/rump.h
diff -u src/sys/rump/include/rump/rump.h:1.61 src/sys/rump/include/rump/rump.h:1.62
--- src/sys/rump/include/rump/rump.h:1.61 Mon Mar 10 22:48:29 2014
+++ src/sys/rump/include/rump/rump.h Wed Apr 2 17:09:23 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: rump.h,v 1.61 2014/03/10 22:48:29 pooka Exp $ */
+/* $NetBSD: rump.h,v 1.62 2014/04/02 17:09:23 justin Exp $ */
/*
* Copyright (c) 2007-2011 Antti Kantee. All Rights Reserved.
@@ -57,7 +57,7 @@ typedef struct prop_dictionary *prop_dic
#endif
#endif /* __NetBSD__ */
-#if defined(__sun__) && !defined(RUMP_REGISTER_T)
+#if (!defined(_KERNEL)) && (defined(__sun__) || defined(__ANDROID__)) && !defined(RUMP_REGISTER_T)
#define RUMP_REGISTER_T long
typedef RUMP_REGISTER_T register_t;
#endif