[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT/PTHREAD-EMBEDDED PATCH 7/8] Add missing functions for Ruby interpreter


  • To: minios-devel@xxxxxxxxxxxxx
  • From: Costin Lupu <costin.lupu@xxxxxxxxx>
  • Date: Mon, 15 Apr 2019 15:43:19 +0300
  • Cc: felipe.huici@xxxxxxxxx, Florian.Schmidt@xxxxxxxxx, simon.kuenzer@xxxxxxxxx, yuri.volchkov@xxxxxxxxx, sharan.santhanam@xxxxxxxxx
  • Delivery-date: Mon, 15 Apr 2019 12:44:41 +0000
  • Ironport-phdr: 9a23:5UJYmxHsHbUMfhFI5soVRZ1GYnF86YWxBRYc798ds5kLTJ76psy9bnLW6fgltlLVR4KTs6sC17OP9fqxEjFaqdbZ6TZeKcQKD0dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBwmtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZ/Jqor1BfEpnREduRIyWh1IV6fgwvw6t2/8ZJ+7yhcoe4t+9JFXa7nY6k2ULtUASg8PWso/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWGxMVdtTWSNcGIOxd4sBAfQcM+hWrIfzoFkBrRWlCAWwGO/i0CNEi2Xq0aEm1ekqDAHI3BYnH9ILqHnZstL1NLwOUeC0yqnD0DPNb+5O2Tfg9YPFdQwuofaXXbJscMrRz1MjFwfYjlWItIzoJC+a1v8Xv2iD8upvTviji3QgqwxopDWk28QiipHRi44IxV3I6D91zYU1KNGiVkJ3f9ypHIFeui2CKod7Td4uT3trtSs60LEKp5C2cSYQxJg6yBPTdfqKeJWS7B35TuaeOzJ4iWpgeLK4mhm971Ctyvb5VsmoyFZKqTdFksXUunANyRPT7s+HR+Nj/kekwzmP1gTT5vtYLkAvj6bbM4MhzaUqmpoJtkTPBi72mEPog6+Kbkgo5+el5/n9brjlppKQLZF4hh/8P6g0lMGzGeE4PRIPX2if9+S8zrrj/UjhTbpWif02ibXZsJHcJcgBoq65HhdV0ps45hmjFDeqyswYnWQcI15fYhKHiJDlO0vSL/DgEfe/n1OsnS9ux/DHOL3hA5LNLmPanLj8Y7l99VBTyA4owNBb5pJUEa0BIOnpVk7+qtPYCAU1Mwuuw+boEN99zJ8RWXqTAq+FN6PfqV+G5uYoI+mWZY8aojD9J+I46fHyjX85nF4dcrS13ZYMbnC3AOhpI0GDbnX3mNsOD3oKtBIkTOP2kF2CTSJTZ3GqUqIy+D47DIOmDZ/dSYy3gLyBwSa7EYFXZm1dDFCDD2vnd4GeVPgXci6dPNJhmCQeVbe9U48hyQ2utAjixrp8Lurb4DcYuojl1NRv/O3cjxcy9SB0D8uH1WGCVWR0k3gORzAowK9/pVZyxUyZ3admnvxSDcZT6O9RUgcmKZ7cyPR3C8vzWgLEedeJTkyqQta7AT4vSNIwwsEBY1xmFtWkkB/Mwy6qDKUOmLCRGpM077rW32LtKMZl13bGyK4hgkEmQ8tSL22mh7Rz9xbUB47Nj0qZl6WqdaMC3CPW8meM03aBvEVCXwFrS6nKQ20fNQPqqoH850XDSKTrBbk5Pw9pzc+ZNrAMetDvy1JcS6TNItPbNkm2gHuxA16s26uRJN7hfH4B3SObDFUcjigY5jCeKAJ4HCD38DGWNyBnCV+6OxCkyuJ5sn7uFkI=
  • Ironport-sdr: bcnP9akjoTuKvsLrNVscIUVnkBojBA0E73w/GfmmDl1xHxKNkAPXSKxePBJSU1B4PKxWH9rCJL DUfcJUO3rktw==
  • List-id: Mini-os development list <minios-devel.lists.xenproject.org>

Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
 Makefile.uk         |   1 +
 include/pthread.h   |  50 +++++++++++++++++
 missing_functions.c | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 204 insertions(+)
 create mode 100644 include/pthread.h
 create mode 100644 missing_functions.c

diff --git a/Makefile.uk b/Makefile.uk
index 1076a7f..6057f81 100644
--- a/Makefile.uk
+++ b/Makefile.uk
@@ -63,6 +63,7 @@ LIBPTHREAD-EMBEDDED_EXPORTS = 
$(LIBPTHREAD-EMBEDDED_BASE)/exportsyms.uk
 # OS dependencies code - Glue between Unikraft and pthread-embedded
 
################################################################################
 LIBPTHREAD-EMBEDDED_SRCS-y += $(LIBPTHREAD-EMBEDDED_BASE)/pte_osal.c|glue
+LIBPTHREAD-EMBEDDED_SRCS-y += 
$(LIBPTHREAD-EMBEDDED_BASE)/missing_functions.c|glue
 
 
################################################################################
 # pthread-embedded code
diff --git a/include/pthread.h b/include/pthread.h
new file mode 100644
index 0000000..2f4f7ed
--- /dev/null
+++ b/include/pthread.h
@@ -0,0 +1,50 @@
+/*
+ *      Unikraft port of POSIX Threads Library for embedded systems
+ *      Copyright(C) 2019, University Politehnica of Bucharest
+ *
+ *      This 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 of the License, or (at your option) any later version.
+ *
+ *      This 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 this library in the file COPYING.LIB;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifndef __GLUE_PTHREAD_H__
+#define __GLUE_PTHREAD_H__
+
+#include_next <pthread.h>
+
+/* C functions not implemented in pthread-embedded */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
+int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize);
+
+int pthread_attr_setstack(pthread_attr_t *attr,
+               void *stackaddr, size_t stacksize);
+int pthread_attr_getstack(const pthread_attr_t *attr,
+               void **stackaddr, size_t *stacksize);
+
+#ifdef _GNU_SOURCE
+int pthread_getattr_np(pthread_t thread, pthread_attr_t *attr);
+
+int pthread_setname_np(pthread_t thread, const char *name);
+int pthread_getname_np(pthread_t thread, char *name, size_t len);
+#endif /* _GNU_SOURCE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GLUE_PTHREAD_H__ */
diff --git a/missing_functions.c b/missing_functions.c
new file mode 100644
index 0000000..0d1e199
--- /dev/null
+++ b/missing_functions.c
@@ -0,0 +1,153 @@
+/*
+ *      Unikraft port of POSIX Threads Library for embedded systems
+ *      Copyright(C) 2019 Costin Lupu, University Politehnica of Bucharest
+ *
+ *      This 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 of the License, or (at your option) any later version.
+ *
+ *      This 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 this library in the file COPYING.LIB;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#ifdef _GNU_SOURCE
+#include <uk/arch/limits.h>
+#endif
+#include <pthread.h>
+#include <implement.h>
+
+
+/* TODO We currently do not support guards */
+int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize)
+{
+       if (guardsize != 0)
+               return EINVAL;
+
+       return 0;
+}
+
+int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize)
+{
+       if (!guardsize)
+               return EINVAL;
+
+       *guardsize = 0;
+
+       return 0;
+}
+
+int pthread_attr_setstack(pthread_attr_t *attr,
+               void *stackaddr, size_t stacksize)
+{
+       int rc;
+
+       rc = pthread_attr_setstacksize(attr, stacksize);
+       if (rc)
+               goto out;
+
+       rc = pthread_attr_setstackaddr(attr, stackaddr);
+
+out:
+       return rc;
+}
+
+int pthread_attr_getstack(const pthread_attr_t *attr,
+               void **stackaddr, size_t *stacksize)
+{
+       int rc;
+
+       rc = pthread_attr_getstacksize(attr, stacksize);
+       if (rc)
+               goto out;
+
+       rc = pthread_attr_getstackaddr(attr, stackaddr);
+
+out:
+       return rc;
+}
+
+#ifdef _GNU_SOURCE
+int pthread_getattr_np(pthread_t thread, pthread_attr_t *attr)
+{
+       pte_thread_t *tp = (pte_thread_t *) thread.p;
+       struct uk_thread *_uk_thread;
+       pthread_attr_t _attr;
+       prio_t prio;
+       int rc;
+
+       if (tp == NULL || tp->threadId == NULL)
+               return ENOENT;
+
+       if (attr == NULL || *attr == NULL)
+               return EINVAL;
+
+       _uk_thread = tp->threadId;
+       _attr = *attr;
+       _attr->stackaddr = _uk_thread->stack;
+       _attr->stacksize = __STACK_SIZE;
+
+       _attr->detachstate = (_uk_thread->detached
+               ? PTHREAD_CREATE_DETACHED : PTHREAD_CREATE_JOINABLE);
+
+       rc = uk_thread_get_prio(_uk_thread, &prio);
+       if (rc == 0)
+               _attr->param.sched_priority = prio;
+
+       /* TODO inheritsched and contentionscope */
+
+       return 0;
+}
+
+int pthread_setname_np(pthread_t thread, const char *name)
+{
+       pte_thread_t *tp = (pte_thread_t *) thread.p;
+       struct uk_thread *_uk_thread;
+       size_t len;
+
+       if (tp == NULL || tp->threadId == NULL)
+               return ENOENT;
+
+       _uk_thread = tp->threadId;
+
+       len = strnlen(name, 16);
+       if (len > 15)
+               return ERANGE;
+
+       _uk_thread->name = name;
+
+       return 0;
+}
+
+int pthread_getname_np(pthread_t thread, char *name, size_t len)
+{
+       pte_thread_t *tp = (pte_thread_t *) thread.p;
+       struct uk_thread *_uk_thread;
+       size_t _len;
+
+       if (tp == NULL || tp->threadId == NULL)
+               return ENOENT;
+
+       _uk_thread = tp->threadId;
+
+       _len = strlen(_uk_thread->name);
+       if (len < _len + 1)
+               return ERANGE;
+
+       sprintf(name, _uk_thread->name);
+
+       return 0;
+}
+
+#endif /* _GNU_SOURCE */
-- 
2.11.0


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.