diff options
authorThomas Schwinge <>2013-04-07 01:03:54 +0200
committerThomas Schwinge <>2013-04-07 01:03:54 +0200
commite4ca7c575ff06479bb634cf64cd9abe36a25e3e8 (patch)
parentbe05092c3406d72165ceddf16d8221b99608c905 (diff)
open_issues/vdso: New.
6 files changed, 60 insertions, 6 deletions
diff --git a/microkernel/mach/gnumach/interface/device/time.mdwn b/microkernel/mach/gnumach/interface/device/time.mdwn
index d399e8b5..d1e9a488 100644
--- a/microkernel/mach/gnumach/interface/device/time.mdwn
+++ b/microkernel/mach/gnumach/interface/device/time.mdwn
@@ -14,4 +14,5 @@ containing a `struct mapped_time_value`. See the [[reference_manual]].
Typically available as `/dev/time`, [[hurd/translator/storeio]].
Using that, [[hurd/libshouldbeinlibc]]'s `<maptime.h>` provides `maptime_map`
-and `maptime_read`, see the [[hurd/reference_manual]].
+and `maptime_read`, see the [[hurd/reference_manual]]. Candidate for
+replacement with [[open_issues/vDSO]] code?
diff --git a/open_issues/clock_gettime.mdwn b/open_issues/clock_gettime.mdwn
index 3c06c368..3caa6c28 100644
--- a/open_issues/clock_gettime.mdwn
+++ b/open_issues/clock_gettime.mdwn
@@ -186,3 +186,6 @@ In context of [[select]].
<braunr> do you want to make the changes yourself or should i add a new
branch ?
<youpi> and we'll make that a 64bit struct when we have a64bit userland
+# Candidate for [[vDSO]] code?
diff --git a/open_issues/gdb.mdwn b/open_issues/gdb.mdwn
index 4782368a..6b9cd135 100644
--- a/open_issues/gdb.mdwn
+++ b/open_issues/gdb.mdwn
@@ -107,7 +107,7 @@ formats and more emulation vectors.
* Why do we specify `-D_GNU_SOURCE`, and GNU/Linux doesn't?
- * GNU/Linux: `gdb/symfile-mem.c` for vDSO.
+ * GNU/Linux: `gdb/symfile-mem.c` for [[vDSO]].
* GNU/Linux: `gdb/i386-nat.c` for hardware breakpoints, etc. -- we should
probably use that, too. Related to Samuel's Hurd GDB patch?
diff --git a/open_issues/implementing_hurd_on_top_of_another_system.mdwn b/open_issues/implementing_hurd_on_top_of_another_system.mdwn
index 220c69cc..cf3db0ab 100644
--- a/open_issues/implementing_hurd_on_top_of_another_system.mdwn
+++ b/open_issues/implementing_hurd_on_top_of_another_system.mdwn
@@ -1,4 +1,4 @@
-[[!meta copyright="Copyright © 2010, 2011, 2012 Free Software Foundation,
+[[!meta copyright="Copyright © 2010, 2011, 2012, 2013 Free Software Foundation,
[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
@@ -358,8 +358,9 @@ Continue reading about the [[benefits_of_a_native_Hurd_implementation]].
<peo-xaci> what you talked about above "the user space system call code is
loaded as a virtual shared library"
<braunr> let's call it vdso
- <braunr> i have to leave in a few minutes
- <braunr> keep going, i'll read later
<peo-xaci> thanks, I looked it up on Wikipedia and understand immediately
<peo-xaci> so VDSOs are provided by the kernel, not a regular library file,
diff --git a/open_issues/vdso.mdwn b/open_issues/vdso.mdwn
new file mode 100644
index 00000000..2b2d2805
--- /dev/null
+++ b/open_issues/vdso.mdwn
@@ -0,0 +1,48 @@
+[[!meta copyright="Copyright © 2013 Free Software Foundation, Inc."]]
+[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
+id="license" text="Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
+is included in the section entitled [[GNU Free Documentation
+[[!tag open_issue_glibc open_issue_gnumach open_issue_hurd]]
+Evaluate whether or not usage of vDSOs (virtual dynamically linked shared
+objects; [[!wikipedia vDSO]]) can be useful in a GNU Hurd system.
+Explanation and example for the Linux kernel: [Creating a vDSO: the Colonel's
+Matt Davis, 2012-02-06. The *Resources* given are also worth reading.
+Basically, this is useful for exporting data from the kernel (generally, or
+given a process context ([[Unix]]), or task/thread context, and so on).
+On a GNU Hurd system, parts of the data that makes up a process context doesn't
+actually live inside the kernel, but instead is directly held in glibc. For
+example `sysdeps/mach/hurd/getpid.c:__getpid` does a mere `return _hurd_pid`.
+For this reason, vDSOs might not be as useful on GNU Hurd as they are with the
+Linux kernel. Or, put another way, as GNU Hurd system doesn't have many
+[[system_call]]s, also there aren't many that could be replaced.
+Generally only *real* [[system_call]]s should be candidates for implementation
+with vDSO code, because otherwise that'd break the ([[RPC]]) system's inherent
+[[/virtualization]] capabilities.
+Having vDSO code might be useful for:
+ * `mach_*_self`: `mach_host_self`, `mach_task_self`, `mach_thread_self`?
+ * [[mapped-time_interface|master/microkernel/mach/gnumach/interface/device/time]]
+ Every application can then use that via the regular
+ `gettimeofday`/`clock_gettime` and similar calls instead of using the
+ special [[hurd/libshouldbeinlibc]]'s `<maptime.h>` interface.
+ Can implement [[`clock_gettime` stuff|clock_gettime]] more easily that way,
+ for example for nanosecond precision?
+ Now, the [[mapped-time_interface]] is virtualizable -- the question is
+ whether there is a way so that we can make a compromise here?
diff --git a/system_call.mdwn b/system_call.mdwn
index 197889cb..f180a79b 100644
--- a/system_call.mdwn
+++ b/system_call.mdwn
@@ -1,4 +1,4 @@
-[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]]
+[[!meta copyright="Copyright © 2010, 2013 Free Software Foundation, Inc."]]
[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
@@ -14,6 +14,7 @@ kinds of functionality from the operating system kernel.
A [[microkernel]]-based system typically won't offer a lot of system calls --
apart from one central one, and that is *send message* -- but instead [[RPC]]s
will be used instead.
+See [[GNU Mach's system calls|microkernel/mach/gnumach/interface/syscall]].
In the [[GNU Hurd|hurd]], a lot of what is traditionlly considered to be a UNIX
system call is implemented (primarily by means of [[RPC]]) inside [[glibc]].