summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
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