Added a 'sched_getcpu()' routine that returns the
current pcore ID, as an analog to the routine of
the same name in Linux. Rebuild your toolchain.

Signed-off-by: Dan Cross <[email protected]>
---
 .../glibc-2.19-akaros/sysdeps/akaros/Makefile      |  5 ++++
 .../glibc-2.19-akaros/sysdeps/akaros/Versions      |  3 +++
 .../sysdeps/akaros/parlib-compat.c                 |  3 +++
 .../sysdeps/akaros/sched_getcpu.c                  | 31 ++++++++++++++++++++++
 4 files changed, 42 insertions(+)
 create mode 100644 
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sched_getcpu.c

diff --git 
a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Makefile 
b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Makefile
index fa44dc5..8dd52b0 100644
--- a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Makefile
+++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Makefile
@@ -42,6 +42,11 @@ sysdep_routines += convS2M
 endif
 sysdep_headers += fcall.h
 
+# Scheduling related routines.
+ifeq ($(subdir),stdlib)
+sysdep_routines += sched_getcpu
+endif
+
 # Syscall pack arg routines
 ifeq ($(subdir),stdlib)
 sysdep_routines += serialize
diff --git 
a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions 
b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions
index 899cfe8..42e7686 100644
--- a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions
+++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions
@@ -35,6 +35,8 @@ libc {
     convD2M;
     sizeD2M;
 
+    sched_getcpu;
+
     serialize_argv_envp;
     free_serialized_data;
 
@@ -57,6 +59,7 @@ libc {
     eventfd_write;
 
     # Weak symbols in parlib-compat.c
+    __vcoreid;
     __vcore_context;
     akaros_printf;
     akaros_vprintf;
diff --git 
a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/parlib-compat.c 
b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/parlib-compat.c
index cda7c50..24dd3f2 100644
--- a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/parlib-compat.c
+++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/parlib-compat.c
@@ -18,6 +18,9 @@
  * library. If we ever decide to make parlib a .so, then we will have to 
revisit
  * this and use function pointers at runtime or something similar. */
 
+__thread int __weak_vcoreid = 0;
+weak_alias(__weak_vcoreid, __vcoreid);
+
 __thread bool __weak_vcore_context = FALSE;
 weak_alias(__weak_vcore_context, __vcore_context);
 
diff --git 
a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sched_getcpu.c 
b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sched_getcpu.c
new file mode 100644
index 0000000..dbd27ff
--- /dev/null
+++ b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sched_getcpu.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2016 Google Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <parlib/vcore.h>
+#include <ros/procinfo.h>
+
+int sched_getcpu(void)
+{
+       int vcid;
+
+       vcid = vcore_id();
+       if (vcid == -1)
+               return -1;
+
+       return __procinfo.vcoremap[vcid].pcoreid;
+}
-- 
2.8.0.rc3.226.g39d4020

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to