From 43018db85ca465c526902ca9f5897a345833b7c2 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Wed, 14 Jun 2017 21:23:05 +0100 Subject: [PATCH] level0: Introduce a new level of platform Right now we have level 1 for the basic platforms and level 2 more aimed at 16/32bit machines which adds stuff like job control and select(). Level 0 for the moment is level 1 for a simple memory mapping and no checks on pointers being passed. It may need to drop a few obscure syscalls if they can't nicely be made overlays. --- Kernel/include/kernel.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Kernel/include/kernel.h b/Kernel/include/kernel.h index d967f38f..4ff5ea60 100644 --- a/Kernel/include/kernel.h +++ b/Kernel/include/kernel.h @@ -694,6 +694,18 @@ extern void idump(void); extern bool validdev(uint16_t dev); /* usermem.c */ +#ifdef CONFIG_LEVEL_0 +extern size_t strlcpy(char *, const char *, size_t); +#define valaddr(a,b) (1) +#define uget(a,b,c) (memcpy(b,a,c) && 0) +#define uput(a,b,c) (memcpy(b,a,c) && 0) +#define ugetc(a) (*(uint8_t *)(a)) +#define ugetw(a) (*(uint8_t *)(a)) +#define uputc(v, p) ((*(uint8_t*)(p) = (v)) && 0) +#define uputw(v, p) ((*(uint16_t*)(p) = (v)) && 0) +#define ugets(a,b,c) ((int)(strlcpy(b,a,c) && 0)) +#define uzero(a,b) (memset(a,0,b) && 0) +#else extern usize_t valaddr(const char *base, usize_t size); extern int uget(const void *userspace_source, void *dest, usize_t count); extern int16_t ugetc(const void *userspace_source); @@ -723,6 +735,7 @@ extern uint16_t _ugetw(const uint16_t *user); extern int _uputc(uint16_t value, uint8_t *user); extern int _uputw(uint16_t value, uint16_t *user); #endif +#endif /* platform/tricks.s */ extern void switchout(void); -- 2.34.1