diff --git a/repos/dde_rump/include/util/random.h b/repos/dde_rump/include/util/random.h
new file mode 100644
index 0000000000..5e4672ec00
--- /dev/null
+++ b/repos/dde_rump/include/util/random.h
@@ -0,0 +1,21 @@
+/**
+ * \brief Overwritable backend-random methods
+ * \author Sebastian Sumpf
+ * \date 2015-02-13
+ */
+
+/*
+ * Copyright (C) 2015 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _INCLUDE__UTIL__RANDOM_H_
+#define _INCLUDE__UTIL__RANDOM_H_
+
+#include
+
+int rumpuser_getrandom_backend(void *buf, Genode::size_t buflen, int flags, Genode::size_t *retp);
+
+#endif /* _INCLUDE__UTIL__RANDOM_H_ */
diff --git a/repos/dde_rump/lib/mk/rump_base.inc b/repos/dde_rump/lib/mk/rump_base.inc
index b56602d40b..45bd847794 100644
--- a/repos/dde_rump/lib/mk/rump_base.inc
+++ b/repos/dde_rump/lib/mk/rump_base.inc
@@ -12,11 +12,6 @@ RMAKE = $(RUMP_TOOLS)/rumpmake
#
VERBOSE_LEVEL ?= 0
-#
-# Libraries
-#
-LIBS += jitterentropy
-
#
# Sources
#
diff --git a/repos/dde_rump/src/lib/rump/hypercall.cc b/repos/dde_rump/src/lib/rump/hypercall.cc
index ddb2d0c82b..0891ee6f67 100644
--- a/repos/dde_rump/src/lib/rump/hypercall.cc
+++ b/repos/dde_rump/src/lib/rump/hypercall.cc
@@ -19,14 +19,9 @@
#include
#include
#include
+#include
#include
-extern "C" {
- namespace Jitter {
- #include
- }
-}
-
extern "C" void wait_for_continue();
enum { SUPPORTED_RUMP_VERSION = 17 };
@@ -36,38 +31,6 @@ static bool verbose = false;
struct rumpuser_hyperup _rump_upcalls;
-/***********************************
- ** Jitter entropy for randomness **
- ***********************************/
-
-struct Entropy
-{
- struct Jitter::rand_data *ec_stir;
-
- Entropy()
- {
- Jitter::jent_entropy_init();
- ec_stir = Jitter::jent_entropy_collector_alloc(0, 0);
- }
-
- static Entropy *e()
- {
- static Entropy _e;
- return &_e;
- }
-
- size_t read(char *buf, size_t len)
- {
- int err;
- if ((err = Jitter::jent_read_entropy(ec_stir, buf, len) < 0)) {
- PERR("Failed to read entropy: %d", err);
- return 0;
- }
-
- return len;
- }
-};
-
/********************
** Initialization **
********************/
@@ -90,9 +53,6 @@ int rumpuser_init(int version, const struct rumpuser_hyperup *hyp)
*/
Genode::Timeout_thread::alarm_timer();
- /* initialize jitter entropy */
- Entropy::e();
-
return 0;
}
@@ -336,8 +296,7 @@ int rumpuser_clock_sleep(int enum_rumpclock, int64_t sec, long nsec)
int rumpuser_getrandom(void *buf, size_t buflen, int flags, size_t *retp)
{
- *retp = Entropy::e()->read((char *)buf, buflen);
- return 0;
+ return rumpuser_getrandom_backend(buf, buflen, flags, retp);
}
diff --git a/repos/dde_rump/src/lib/rump/misc.cc b/repos/dde_rump/src/lib/rump/misc.cc
index 5a918383ab..ecf6ccade6 100644
--- a/repos/dde_rump/src/lib/rump/misc.cc
+++ b/repos/dde_rump/src/lib/rump/misc.cc
@@ -15,6 +15,15 @@
#include
+/*
+ * On some platforms (namely ARM) we end-up pulling in string.h prototypes
+ */
+extern "C" void *memcpy(void *d, void *s, Genode::size_t n)
+{
+ return Genode::memcpy(d, s, n);
+}
+
+
extern "C" void *memset(void *s, int c, Genode::size_t n)
{
return Genode::memset(s, c, n);
diff --git a/repos/dde_rump/src/server/rump_cgd/random.cc b/repos/dde_rump/src/server/rump_cgd/random.cc
new file mode 100644
index 0000000000..6d0be95a24
--- /dev/null
+++ b/repos/dde_rump/src/server/rump_cgd/random.cc
@@ -0,0 +1,64 @@
+/**
+ * \brief Add random support for CGD
+ * \author Sebastian Sumpf
+ * \date 2015-02-13
+ */
+
+/*
+ * Copyright (C) 2015 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#include
+#include
+
+extern "C" {
+ namespace Jitter {
+ #include
+ }
+}
+
+typedef Genode::size_t size_t;
+
+
+/***********************************
+ ** Jitter entropy for randomness **
+ ***********************************/
+
+struct Entropy
+{
+ struct Jitter::rand_data *ec_stir;
+
+ Entropy()
+ {
+ Jitter::jent_entropy_init();
+ ec_stir = Jitter::jent_entropy_collector_alloc(0, 0);
+ }
+
+ static Entropy *e()
+ {
+ static Entropy _e;
+ return &_e;
+ }
+
+ size_t read(char *buf, size_t len)
+ {
+ int err;
+ if ((err = Jitter::jent_read_entropy(ec_stir, buf, len) < 0)) {
+ PERR("Failed to read entropy: %d", err);
+ return 0;
+ }
+
+ return len;
+ }
+};
+
+
+int rumpuser_getrandom_backend(void *buf, size_t buflen, int flags, size_t *retp)
+{
+ *retp = Entropy::e()->read((char *)buf, buflen);
+ *retp = buflen;
+ return 0;
+}
diff --git a/repos/dde_rump/src/server/rump_cgd/target.mk b/repos/dde_rump/src/server/rump_cgd/target.mk
index 390129156b..86e47bbf43 100644
--- a/repos/dde_rump/src/server/rump_cgd/target.mk
+++ b/repos/dde_rump/src/server/rump_cgd/target.mk
@@ -1,3 +1,4 @@
TARGET = rump_cgd
-SRC_CC = cgd.cc main.cc
-LIBS = rump rump_cgd server startup
+
+SRC_CC = cgd.cc main.cc random.cc
+LIBS = rump rump_cgd server startup jitterentropy
diff --git a/repos/dde_rump/src/server/rump_fs/random.cc b/repos/dde_rump/src/server/rump_fs/random.cc
new file mode 100644
index 0000000000..142de81d2d
--- /dev/null
+++ b/repos/dde_rump/src/server/rump_fs/random.cc
@@ -0,0 +1,21 @@
+/**
+ * \brief Dummy random support
+ * \author Sebastian Sumpf
+ * \date 2015-02-16
+ */
+
+/*
+ * Copyright (C) 2015 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#include
+
+
+int rumpuser_getrandom_backend(void *buf, Genode::size_t buflen, int flags, Genode::size_t *retp)
+{
+ *retp = buflen;
+ return 0;
+}
diff --git a/repos/dde_rump/src/server/rump_fs/target.mk b/repos/dde_rump/src/server/rump_fs/target.mk
index b251639a3f..56fd8f4fda 100644
--- a/repos/dde_rump/src/server/rump_fs/target.mk
+++ b/repos/dde_rump/src/server/rump_fs/target.mk
@@ -1,5 +1,5 @@
TARGET = rump_fs
-SRC_CC = main.cc file_system.cc
+SRC_CC = main.cc file_system.cc random.cc
LIBS = rump rump_fs server startup