diff options
Diffstat (limited to '')
-rw-r--r-- | config/user.ld (renamed from user/user.ld) | 0 | ||||
-rw-r--r-- | user/include/ctype.h (renamed from include/ctype.h) | 0 | ||||
-rw-r--r-- | user/include/elf.h (renamed from include/elf.h) | 0 | ||||
-rw-r--r-- | user/include/error.h (renamed from include/error.h) | 0 | ||||
-rw-r--r-- | user/include/stdio.h (renamed from include/stdio.h) | 16 | ||||
-rw-r--r-- | user/include/stdlib.h (renamed from include/stdlib.h) | 32 | ||||
-rw-r--r-- | user/include/string.h (renamed from include/string.h) | 32 | ||||
-rw-r--r-- | user/include/unistd.h (renamed from include/unistd.h) | 92 | ||||
-rw-r--r-- | user/lib/alloc.c (renamed from lib/alloc.c) | 4 | ||||
-rw-r--r-- | user/lib/atox.c (renamed from lib/atox.c) | 0 | ||||
-rw-r--r-- | user/lib/bound.c (renamed from lib/bound.c) | 0 | ||||
-rw-r--r-- | user/lib/btoa.c (renamed from lib/btoa.c) | 0 | ||||
-rw-r--r-- | user/lib/ctoi.c (renamed from lib/ctoi.c) | 0 | ||||
-rw-r--r-- | user/lib/delay.c (renamed from lib/delay.c) | 0 | ||||
-rw-r--r-- | user/lib/entry.S (renamed from ulib/entry.S) | 0 | ||||
-rw-r--r-- | user/lib/isdigit.c (renamed from lib/isdigit.c) | 0 | ||||
-rw-r--r-- | user/lib/isspace.c (renamed from lib/isspace.c) | 0 | ||||
-rw-r--r-- | user/lib/itoc.c (renamed from lib/itoc.c) | 0 | ||||
-rw-r--r-- | user/lib/memcmp.c (renamed from lib/memcmp.c) | 0 | ||||
-rw-r--r-- | user/lib/memcpy.c (renamed from lib/memcpy.c) | 0 | ||||
-rw-r--r-- | user/lib/memmove.c (renamed from lib/memmove.c) | 0 | ||||
-rw-r--r-- | user/lib/memset.c (renamed from lib/memset.c) | 0 | ||||
-rw-r--r-- | user/lib/printf.c (renamed from lib/printf.c) | 0 | ||||
-rw-r--r-- | user/lib/spawn.c (renamed from ulib/spawn.c) | 0 | ||||
-rw-r--r-- | user/lib/stpcpy.c (renamed from lib/stpcpy.c) | 0 | ||||
-rw-r--r-- | user/lib/stpncpy.c (renamed from lib/stpncpy.c) | 0 | ||||
-rw-r--r-- | user/lib/strcat.c (renamed from lib/strcat.c) | 0 | ||||
-rw-r--r-- | user/lib/strcpy.c (renamed from lib/strcpy.c) | 0 | ||||
-rw-r--r-- | user/lib/strlen.c (renamed from lib/strlen.c) | 0 | ||||
-rw-r--r-- | user/lib/strncmp.c (renamed from lib/strncmp.c) | 0 | ||||
-rw-r--r-- | user/lib/strncpy.c (renamed from lib/strncpy.c) | 0 | ||||
-rw-r--r-- | user/lib/strtoux.c (renamed from lib/strtoux.c) | 0 | ||||
-rw-r--r-- | user/lib/strtox.c (renamed from lib/strtox.c) | 0 | ||||
-rw-r--r-- | user/lib/syscall.S (renamed from ulib/syscall.S) | 0 | ||||
-rw-r--r-- | user/lib/timetostr.c (renamed from lib/timetostr.c) | 0 | ||||
-rw-r--r-- | user/lib/uxtoa.c (renamed from lib/uxtoa.c) | 0 | ||||
-rw-r--r-- | user/lib/xtoa.c (renamed from lib/xtoa.c) | 0 |
37 files changed, 54 insertions, 122 deletions
diff --git a/user/user.ld b/config/user.ld index 9e31dff..9e31dff 100644 --- a/user/user.ld +++ b/config/user.ld diff --git a/include/ctype.h b/user/include/ctype.h index c5f92b4..c5f92b4 100644 --- a/include/ctype.h +++ b/user/include/ctype.h diff --git a/include/elf.h b/user/include/elf.h index b7e6059..b7e6059 100644 --- a/include/elf.h +++ b/user/include/elf.h diff --git a/include/error.h b/user/include/error.h index b9265b4..b9265b4 100644 --- a/include/error.h +++ b/user/include/error.h diff --git a/include/stdio.h b/user/include/stdio.h index d335968..9e60f55 100644 --- a/include/stdio.h +++ b/user/include/stdio.h @@ -12,19 +12,13 @@ #include <stdarg.h> #include <stddef.h> +// TODO: implement typedef void FILE; -/// standard input -#define stdin ((FILE *)1) -/// standard output -#define stdout ((FILE *)2) -/// standard error -#define stderr ((FILE *)3) - -/// console output -#define stdcon ((FILE *)4) -/// serial output -#define stduart ((FILE *)5) +extern FILE *stdin; +extern FILE *stdout; +#define stdin stdin +#define stdout stdout /** * Prints out a char diff --git a/include/stdlib.h b/user/include/stdlib.h index 1455a1f..40bffde 100644 --- a/include/stdlib.h +++ b/user/include/stdlib.h @@ -11,8 +11,6 @@ #include <stddef.h> -#define PAGE_SIZE 4096 - /** * converts single digit int to base 36 * @param i - int @@ -221,34 +219,4 @@ extern void *realloc(void *ptr, size_t size); */ extern void free(void *ptr); -/** - * Allocate a single page of memory - * - * @returns the address allocated or NULL on failure - */ -extern void *alloc_page(void); - -/** - * Allocate size_t amount of contiguous virtual pages - * - * @param count - the number of pages to allocate - * @returns the address allocated or NULL on failure - */ -extern void *alloc_pages(size_t count); - -/** - * Free allocated pages. - * - * @param ptr - the pointer provided by alloc_page or alloc_pages - */ -extern void free_pages(void *ptr); - -/** - * Abort the current process with a given message. - * - * @param format - the format string - * @param ... - variable args for the format - */ -__attribute__((noreturn)) extern void panic(const char *format, ...); - #endif /* stlib.h */ diff --git a/include/string.h b/user/include/string.h index f966981..4d32f57 100644 --- a/include/string.h +++ b/user/include/string.h @@ -52,38 +52,6 @@ extern void *memmove(void *restrict dest, const void *restrict src, size_t n); extern void *memset(void *restrict dest, int c, size_t n); /** - * Copy the first n bytes from memory area src to memory area dest. The memory - * areas must not overlap. - * @param dest - the destination - * @param src - the source - * @param n - the byte count - * @returns a pointer to dest - */ -extern volatile void *memcpyv(volatile void *restrict dest, - const volatile void *restrict src, size_t n); - -/** - * Copy the first n bytes from memory area src to memory area dest. The memory - * areas may overlap; memmove behaves as though the bytes are first copied to a - * temporary array. - * @param dest - the destination - * @param src - the source - * @param n - the byte count - * @returns a pointer to dest - */ -extern volatile void *memmovev(volatile void *restrict dest, - const volatile void *restrict src, size_t n); - -/** - * Fill the first n bytes of the memory region dest with the constant byte c. - * @param dest - the destination - * @param c - the byte to write - * @param n - the byte count - * @returns a pointer to dest - */ -extern volatile void *memsetv(volatile void *restrict dest, int c, size_t n); - -/** * Calculates the length of the string pointed to by str, excluding * the terminating null byte * @param str - the string pointer diff --git a/include/unistd.h b/user/include/unistd.h index f9838f1..1f83abc 100644 --- a/include/unistd.h +++ b/user/include/unistd.h @@ -6,29 +6,29 @@ * Universial system definitions for userspace. */ -#ifndef _UNISTD_H -#define _UNISTD_H +#ifndef UNISTD_H_ +#define UNISTD_H_ #include <stdint.h> #include <stddef.h> /* System Call Definitions */ -typedef uint_t pid_t; +typedef unsigned short pid_t; /** - * Terminates the calling process and does not return. + * terminates the calling process and does not return. + * * @param status - the status code to exit with */ -__attribute__((noreturn)) extern void exit(int32_t status); +__attribute__((noreturn)) extern void exit(int status); /** - * Sleeps current process until a child process terminates + * sleeps current process until a child process terminates * * @param pid - pid of the desired child, or 0 for any child - * @param status - Pointer to int32_t into which the child's status is placed, + * @param status - pointer to int32_t into which the child's status is placed, * or NULL - * * @return The pid of the terminated child, or an error code * * If there are no children in the system, returns an error code (*status @@ -38,18 +38,18 @@ __attribute__((noreturn)) extern void exit(int32_t status); * terminated but hasn't yet been cleaned up, cleans up that process and * returns its information; otherwise, blocks until a child terminates. */ -extern int waitpid(pid_t pid, int32_t *status); +extern int waitpid(pid_t pid, int *status); /** - * Create a duplicate of the calling process + * create a duplicate of the calling process * - * @return parent - the pid of the new child, or an error code - * child - 0 + * @return parent - the pid of the new child, or an error code + * child - 0 */ extern int fork(void); /** - * Replace the memory image of the calling process + * replace the memory image of the calling process * * @param prog - program table index of the program to exec * @param args - the command-line argument vector @@ -57,126 +57,124 @@ extern int fork(void); * Does not return if it succeeds; if it returns, something has * gone wrong. */ -extern void exec(uint_t prog, char **args); +extern void exec(const char *filename, char **args); /** - * Open a stream with a given filename + * open a stream with a given filename * * @param filename - the name of the file to open * @return the file descriptior of the open file or a negative error code. - * TODO: fmurphy implement */ -extern int open(char *filename); +extern int open(const char *filename); /** - * Closes a stream with the given file descriptior + * closes a stream with the given file descriptior + * * @param fd - the file descriptior of the open stream - * TODO: fmurphy implement */ extern void close(int fd); /** - * Read into a buffer from a stream + * read into a buffer from a stream * * @param fd - file stream to read from * @param buf - buffer to read into * @param nbytes - maximum capacity of the buffer - * * @return - The count of bytes transferred, or an error code - * TODO: fmurphy FD */ extern int read(int fd, void *buffer, size_t nbytes); /** - * Write from a buffer to a stream + * write from a buffer to a stream * * @param fd - file stream to write to * @param buf - buffer to write from * @param nbytes - maximum capacity of the buffer - * * @return - The count of bytes transferred, or an error code - * TODO: fmurphy FD */ extern int write(int fd, const void *buffer, size_t nbytes); /** - * Gets the pid of the calling process + * gets the pid of the calling process * * @return the pid of this process */ extern pid_t getpid(void); /** - * Gets the parent pid of the current process + * gets the parent pid of the current process * * @return the parent pid of the current process, or 0 if init */ extern pid_t getppid(void); /** - * Gets the current system time + * gets the current system time * * @return the system time - * TODO: CHANGE TIME TO 64bits!! */ -extern ulong_t gettime(void); +extern unsigned long gettime(void); /** - * Gets the scheduling priority of the calling process + * gets the scheduling priority of the calling process * * @return the process' priority */ -extern uint_t getprio(void); +extern unsigned int getprio(void); /** - * Sets the scheduling priority of the calling process + * sets the scheduling priority of the calling process * * @param new - the desired new priority - * * @return the old priority value */ -extern uint_t setprio(uint_t new); +extern unsigned int setprio(unsigned int new); /** - * Terminates a process + * terminates a process * * @param pid - the pid of the process to kill - * * @return 0 on success, else an error code */ -extern int32_t kill(pid_t pid); +extern int kill(pid_t pid); /** - * Put the current process to sleep for some length of time + * put the current process to sleep for some length of time * * @param ms - desired sleep time (in ms), or 0 to yield the CPU - * * @return the time the process spent sleeping (in ms) */ -extern int sleep(uint32_t ms); +extern int sleep(unsigned long ms); /** * Wait for any child to exit * - * @param status - Pointer to int32_t into which the child's status is placed, + * @param status - pointer to int32_t into which the child's status is placed, * or NULL - * * @return The pid of the terminated child, or an error code * * Analogous to waitpid(0,status) */ -extern int wait(int32_t *status); +extern int wait(int *status); /** * Spawn a new process running a different program * * @param prog - program table index of the program to spawn * @param args - the command-line argument vector for the process - * - * @return The pid of the child, or an error code + * @return the pid of the child, or an error code * * Analogous to calling fork and exec */ -extern int spawn(uint_t prog, char **args); +extern int spawn(pid_t prog, char **args); + +/** + * Increment the program's data space by increment bytes. + * + * @param increment - the amount in bytes to increment the heap + * @return the previos program break on success, or NULL on failure + * + */ +extern void *sbrk(intptr_t increment); #endif /* unistd.h */ diff --git a/lib/alloc.c b/user/lib/alloc.c index dfa2df5..49c762b 100644 --- a/lib/alloc.c +++ b/user/lib/alloc.c @@ -1,8 +1,10 @@ #include <stdint.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> #define MAGIC 0xBEEFCAFE +#define PAGE_SIZE 4096 struct page_header { struct page_header *next; @@ -37,6 +39,7 @@ static void *alloc_new(size_t size) { size_t pages = ((size + header_len) / PAGE_SIZE) + 1; + // FIXME: use brk/sbrk void *addr = alloc_pages(pages); void *mem = (char *)addr + header_len; @@ -206,6 +209,7 @@ void free(void *ptr) header->next->prev = header->prev; if (header->prev) header->prev->next = header->next; + // FIXME: use brk/sbrk free_pages(header); } } diff --git a/lib/atox.c b/user/lib/atox.c index c4bef59..c4bef59 100644 --- a/lib/atox.c +++ b/user/lib/atox.c diff --git a/lib/bound.c b/user/lib/bound.c index 072a41a..072a41a 100644 --- a/lib/bound.c +++ b/user/lib/bound.c diff --git a/lib/btoa.c b/user/lib/btoa.c index fe5e275..fe5e275 100644 --- a/lib/btoa.c +++ b/user/lib/btoa.c diff --git a/lib/ctoi.c b/user/lib/ctoi.c index efe4fec..efe4fec 100644 --- a/lib/ctoi.c +++ b/user/lib/ctoi.c diff --git a/lib/delay.c b/user/lib/delay.c index ff5ccc4..ff5ccc4 100644 --- a/lib/delay.c +++ b/user/lib/delay.c diff --git a/ulib/entry.S b/user/lib/entry.S index 87ad9c7..87ad9c7 100644 --- a/ulib/entry.S +++ b/user/lib/entry.S diff --git a/lib/isdigit.c b/user/lib/isdigit.c index aa93ced..aa93ced 100644 --- a/lib/isdigit.c +++ b/user/lib/isdigit.c diff --git a/lib/isspace.c b/user/lib/isspace.c index 9e89d76..9e89d76 100644 --- a/lib/isspace.c +++ b/user/lib/isspace.c diff --git a/lib/itoc.c b/user/lib/itoc.c index c19d814..c19d814 100644 --- a/lib/itoc.c +++ b/user/lib/itoc.c diff --git a/lib/memcmp.c b/user/lib/memcmp.c index 7f3dc01..7f3dc01 100644 --- a/lib/memcmp.c +++ b/user/lib/memcmp.c diff --git a/lib/memcpy.c b/user/lib/memcpy.c index ec56537..ec56537 100644 --- a/lib/memcpy.c +++ b/user/lib/memcpy.c diff --git a/lib/memmove.c b/user/lib/memmove.c index 81f00fe..81f00fe 100644 --- a/lib/memmove.c +++ b/user/lib/memmove.c diff --git a/lib/memset.c b/user/lib/memset.c index ddf42f8..ddf42f8 100644 --- a/lib/memset.c +++ b/user/lib/memset.c diff --git a/lib/printf.c b/user/lib/printf.c index 4a85956..4a85956 100644 --- a/lib/printf.c +++ b/user/lib/printf.c diff --git a/ulib/spawn.c b/user/lib/spawn.c index 78b1a53..78b1a53 100644 --- a/ulib/spawn.c +++ b/user/lib/spawn.c diff --git a/lib/stpcpy.c b/user/lib/stpcpy.c index 1586a37..1586a37 100644 --- a/lib/stpcpy.c +++ b/user/lib/stpcpy.c diff --git a/lib/stpncpy.c b/user/lib/stpncpy.c index 4e0def6..4e0def6 100644 --- a/lib/stpncpy.c +++ b/user/lib/stpncpy.c diff --git a/lib/strcat.c b/user/lib/strcat.c index 33f749b..33f749b 100644 --- a/lib/strcat.c +++ b/user/lib/strcat.c diff --git a/lib/strcpy.c b/user/lib/strcpy.c index 70cd1ca..70cd1ca 100644 --- a/lib/strcpy.c +++ b/user/lib/strcpy.c diff --git a/lib/strlen.c b/user/lib/strlen.c index 6c4cc86..6c4cc86 100644 --- a/lib/strlen.c +++ b/user/lib/strlen.c diff --git a/lib/strncmp.c b/user/lib/strncmp.c index e890517..e890517 100644 --- a/lib/strncmp.c +++ b/user/lib/strncmp.c diff --git a/lib/strncpy.c b/user/lib/strncpy.c index 264fd9d..264fd9d 100644 --- a/lib/strncpy.c +++ b/user/lib/strncpy.c diff --git a/lib/strtoux.c b/user/lib/strtoux.c index 7c2d7ee..7c2d7ee 100644 --- a/lib/strtoux.c +++ b/user/lib/strtoux.c diff --git a/lib/strtox.c b/user/lib/strtox.c index 5f786f1..5f786f1 100644 --- a/lib/strtox.c +++ b/user/lib/strtox.c diff --git a/ulib/syscall.S b/user/lib/syscall.S index 46fcb89..46fcb89 100644 --- a/ulib/syscall.S +++ b/user/lib/syscall.S diff --git a/lib/timetostr.c b/user/lib/timetostr.c index fa77362..fa77362 100644 --- a/lib/timetostr.c +++ b/user/lib/timetostr.c diff --git a/lib/uxtoa.c b/user/lib/uxtoa.c index 8d4e0e1..8d4e0e1 100644 --- a/lib/uxtoa.c +++ b/user/lib/uxtoa.c diff --git a/lib/xtoa.c b/user/lib/xtoa.c index bf02236..bf02236 100644 --- a/lib/xtoa.c +++ b/user/lib/xtoa.c |