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

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



Hi Costin,

just one remark. I was a bit confused reading the commit message, because the ruby interpreter thing came kind of out of the blue. Could you change it to make the description more generic and about what's added?

Also, as an aside, I don't like "missing_functions.c" all that much as a file name. ;-) I prefer names that are at least vaguely descriptive of what's inside (yeah, yeah, "naming things" being one of the most difficult problems in computer science and all). Maybe you have a good idea there?

Cheers,
Florian

On 4/15/19 1:43 PM, Costin Lupu wrote:
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 */


--
Dr. Florian Schmidt
フローリアン・シュミット
Research Scientist,
Systems and Machine Learning Group
NEC Laboratories Europe
Kurfürsten-Anlage 36, D-69115 Heidelberg
Tel.     +49 (0)6221 4342-265
Fax:     +49 (0)6221 4342-155
e-mail:  florian.schmidt@xxxxxxxxx
============================================================
Registered at Amtsgericht Mannheim, Germany, HRB728558

_______________________________________________
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®.