[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2 1/3] lib/posix-process: Introduce library
Hi Costin, this patch looks ok, thanks. Reviewed-by: Gaulthier Gain <gaulthier.gain@xxxxxxxxx> ----- Mail original ----- De: "Costin Lupu" <costin.lupu@xxxxxxxxx> À: minios-devel@xxxxxxxxxxxxx Cc: "felipe huici" <felipe.huici@xxxxxxxxx>, "simon kuenzer" <simon.kuenzer@xxxxxxxxx>, "gaulthier gain" <gaulthier.gain@xxxxxxxxx>, "cyril soldani" <cyril.soldani@xxxxxxxxx> Envoyé: Jeudi 17 Octobre 2019 15:17:10 Objet: [UNIKRAFT PATCH v2 1/3] lib/posix-process: Introduce library posix-process internal library provide POSIX compatibility for process-related functionality. For now, we just take the stubs from newlib since they will be used by other libc implementations as well (e.g. musl). Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx> --- lib/Makefile.uk | 1 + lib/posix-process/Config.uk | 4 + lib/posix-process/Makefile.uk | 9 + lib/posix-process/include/uk/process.h | 43 +++++ lib/posix-process/process.c | 230 +++++++++++++++++++++++++ 5 files changed, 287 insertions(+) create mode 100644 lib/posix-process/Config.uk create mode 100644 lib/posix-process/Makefile.uk create mode 100644 lib/posix-process/include/uk/process.h create mode 100644 lib/posix-process/process.c diff --git a/lib/Makefile.uk b/lib/Makefile.uk index 3c1f5d9e..31248a1e 100644 --- a/lib/Makefile.uk +++ b/lib/Makefile.uk @@ -33,3 +33,4 @@ $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/uklibparam)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/uktime)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/ukmmap)) $(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/ukblkdev)) +$(eval $(call _import_lib,$(CONFIG_UK_BASE)/lib/posix-process)) diff --git a/lib/posix-process/Config.uk b/lib/posix-process/Config.uk new file mode 100644 index 00000000..5831a6c6 --- /dev/null +++ b/lib/posix-process/Config.uk @@ -0,0 +1,4 @@ +config LIBPOSIX_PROCESS + bool "POSIX process-related functions" + default n + select LIBNOLIBC if !HAVE_LIBC diff --git a/lib/posix-process/Makefile.uk b/lib/posix-process/Makefile.uk new file mode 100644 index 00000000..f45dddc4 --- /dev/null +++ b/lib/posix-process/Makefile.uk @@ -0,0 +1,9 @@ +$(eval $(call addlib_s,libposix_process,$(CONFIG_LIBPOSIX_PROCESS))) + +CINCLUDES-$(CONFIG_LIBPOSIX_PROCESS) += -I$(LIBPOSIX_PROCESS_BASE)/include +CXXINCLUDES-$(CONFIG_LIBPOSIX_PROCESS) += -I$(LIBPOSIX_PROCESS_BASE)/include + +LIBPOSIX_PROCESS_SUPPRESS_FLAGS-y += -Wno-unused-parameter +LIBPOSIX_PROCESS_CFLAGS-y += $(LIBPOSIX_PROCESS_SUPPRESS_FLAGS-y) + +LIBPOSIX_PROCESS_SRCS-y += $(LIBPOSIX_PROCESS_BASE)/process.c diff --git a/lib/posix-process/include/uk/process.h b/lib/posix-process/include/uk/process.h new file mode 100644 index 00000000..67208e3d --- /dev/null +++ b/lib/posix-process/include/uk/process.h @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/* + * Authors: Costin Lupu <costin.lupu@xxxxxxxxx> + * + * Copyright (c) 2019, University Politehnica of Bucharest. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY. + */ + +#ifndef __UK_PROCESS_H__ +#define __UK_PROCESS_H__ + +#define UNIKRAFT_PID 1 +#define UNIKRAFT_PPID 0 +#define UNIKRAFT_SID 0 +#define UNIKRAFT_PGID 0 + +#endif /* __UK_PROCESS_H__ */ diff --git a/lib/posix-process/process.c b/lib/posix-process/process.c new file mode 100644 index 00000000..e2668177 --- /dev/null +++ b/lib/posix-process/process.c @@ -0,0 +1,230 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/* + * Authors: Felipe Huici <felipe.huici@xxxxxxxxx> + * Costin Lupu <costin.lupu@xxxxxxxxx> + * + * Copyright (c) 2017, NEC Europe Ltd., NEC Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY. + */ + +#include "../posix-process/include/uk/process.h" + +#include <errno.h> +#include <stdlib.h> +#include <stdio.h> +#include <sys/resource.h> +#include <uk/print.h> + + +int fork(void) +{ + /* fork() is not supported on this platform */ + errno = ENOSYS; + return -1; +} + +static +void exec_warn(const char *func, + const char *path, char *const argv[], char *const envp[]) +{ + int i; + + uk_pr_warn("%s(): path=%s", func, path); + + /* print arguments */ + i = 0; + uk_pr_warn(" argv=["); + while (argv[i]) { + uk_pr_warn("%s%s", (i > 0 ? ", " : ""), argv[i]); + i++; + } + uk_pr_warn("]"); + + /* print environment variables */ + if (envp) { + i = 0; + uk_pr_warn(" envp=["); + while (envp[i]) { + uk_pr_warn("%s%s", (i > 0 ? ", " : ""), envp[i]); + i++; + } + uk_pr_warn("]"); + } + + uk_pr_warn("\n"); +} + +int execve(const char *path, char *const argv[], char *const envp[]) +{ + exec_warn(__func__, path, argv, envp); + errno = ENOSYS; + return -1; +} + +int execv(const char *path, char *const argv[]) +{ + exec_warn(__func__, path, argv, NULL); + errno = ENOSYS; + return -1; +} + +int system(const char *command) +{ + uk_pr_warn("%s: %s\n", __func__, command); + errno = ENOSYS; + return -1; +} + +FILE *popen(const char *command, const char *type __unused) +{ + uk_pr_warn("%s: %s\n", __func__, command); + errno = ENOSYS; + return NULL; +} + +int pclose(FILE *stream __unused) +{ + errno = EINVAL; + return -1; +} + +int wait(int *status __unused) +{ + /* No children */ + errno = ECHILD; + return -1; +} + +pid_t waitpid(pid_t pid __unused, int *wstatus __unused, int options __unused) +{ + /* No children */ + errno = ECHILD; + return -1; +} + +pid_t wait3(int *wstatus __unused, int options __unused, + struct rusage *rusage __unused) +{ + /* No children */ + errno = ECHILD; + return -1; +} + +pid_t wait4(pid_t pid __unused, int *wstatus __unused, int options __unused, + struct rusage *rusage __unused) +{ + /* No children */ + errno = ECHILD; + return -1; +} + +int getpid(void) +{ + return UNIKRAFT_PID; +} + +pid_t getppid(void) +{ + return UNIKRAFT_PPID; +} + +pid_t setsid(void) +{ + /* We have a single "session" with a single "process" */ + errno = EPERM; + return (pid_t) -1; +} + +pid_t getsid(pid_t pid) +{ + if (pid != 0) { + /* We support only calls for the only calling "process" */ + errno = ESRCH; + return (pid_t) -1; + } + return UNIKRAFT_SID; +} + +int setpgid(pid_t pid, pid_t pgid) +{ + if (pid != 0) { + /* We support only calls for the only calling "process" */ + errno = ESRCH; + return (pid_t) -1; + } + if (pgid != 0) { + /* We have a single "group" with a single "process" */ + errno = EPERM; + return (pid_t) -1; + } + return 0; +} + +pid_t getpgid(pid_t pid) +{ + if (pid != 0) { + /* We support only calls for the only calling "process" */ + errno = ESRCH; + return (pid_t) -1; + } + return UNIKRAFT_PGID; +} + +pid_t getpgrp(void) +{ + return UNIKRAFT_PGID; +} + +int setpgrp(void) +{ + return setpgid(0, 0); +} + +int tcsetpgrp(int fd __unused, pid_t pgrp) +{ + /* TODO check if fd is BADF */ + if (pgrp != UNIKRAFT_PGID) { + errno = EINVAL; + return -1; + } + return 0; +} + +pid_t tcgetpgrp(int fd) +{ + /* We have a single "process group" */ + return UNIKRAFT_PGID; +} + +int nice(int inc __unused) +{ + /* We don't support priority updates for unikernels */ + errno = EPERM; + return -1; +} -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |