diff --git a/Usermode/Applications/CLIShell_src/header.h b/Usermode/Applications/CLIShell_src/header.h index f90e65181cc8393ab1ad87d193a068590d80ca0b..2733d8418ddf394e030b6a2a986e47edf319642a 100644 --- a/Usermode/Applications/CLIShell_src/header.h +++ b/Usermode/Applications/CLIShell_src/header.h @@ -5,8 +5,6 @@ #ifndef _HEADER_H #define _HEADER_H -#define NULL ((void*)0) - #define Print(str) do{char*s=(str);write(_stdout,strlen(s)+1,s);}while(0) extern int _stdout; diff --git a/Usermode/Applications/CLIShell_src/lib.c b/Usermode/Applications/CLIShell_src/lib.c index b807dd6e3b8beaddd501c38ec5cfd52c50db9740..cfd52e5bb345ffdd45ad6b63c5ba9c7faee2c44b 100644 --- a/Usermode/Applications/CLIShell_src/lib.c +++ b/Usermode/Applications/CLIShell_src/lib.c @@ -4,6 +4,7 @@ * See file COPYING for */ #include "header.h" +#include <stddef.h> // === CODE === /** diff --git a/Usermode/Applications/Makefile.cfg b/Usermode/Applications/Makefile.cfg index b67e8bd2a6d8fac18acf0114226273bc09579f40..b2f36e41b5333907200a5e5d04cfcbd31c6fccc3 100644 --- a/Usermode/Applications/Makefile.cfg +++ b/Usermode/Applications/Makefile.cfg @@ -5,7 +5,7 @@ include $(dir $(lastword $(MAKEFILE_LIST)))../Makefile.cfg ASFLAGS = -felf -CPPFLAGS = -I$(ACESSUSERDIR)/include/ +CPPFLAGS = -I$(ACESSUSERDIR)/include/ -DARCHDIR_is_$(ARCHDIR) CFLAGS = -fno-stack-protector $(CPPFLAGS) LDFLAGS = -T $(OUTPUTDIR)Libs/acess.ld -rpath-link $(OUTPUTDIR)Libs -L $(OUTPUTDIR)Libs -I /Acess/Libs/ld-acess.so -lld-acess -lc diff --git a/Usermode/Applications/init_src/main.c b/Usermode/Applications/init_src/main.c index a88af9f99ea949ff98725ea0afb68f95b96d0aef..4d66654c4923354cc1b0787b287f0b8ced33fbbb 100644 --- a/Usermode/Applications/init_src/main.c +++ b/Usermode/Applications/init_src/main.c @@ -8,7 +8,6 @@ //#include "common.h" // === CONSTANTS === -#define NULL ((void*)0) #define NUM_TERMS 4 #define DEFAULT_TERMINAL "/Devices/VTerm/0" #define DEFAULT_SHELL "/Acess/SBin/login" diff --git a/Usermode/Libraries/Makefile.cfg b/Usermode/Libraries/Makefile.cfg index 9192194c14619aee4c09ff9264c6ae3eb6dc56f8..f9e3d672c49f718ac7f35cab7eeead961bff1557 100644 --- a/Usermode/Libraries/Makefile.cfg +++ b/Usermode/Libraries/Makefile.cfg @@ -6,6 +6,6 @@ MAKEDEP = $(CC) -M ASFLAGS += -D ARCHDIR=$(ARCHDIR) -CPPFLAGS := -I$(ACESSDIR)/Usermode/include/ -D ARCHDIR=$(ARCHDIR) -D ARCHDIR_IS_$(ARCHDIR)=1 +CPPFLAGS := -I$(ACESSDIR)/Usermode/include/ -DARCHDIR=$(ARCHDIR) -DARCHDIR_is_$(ARCHDIR)=1 CFLAGS := -g -Wall -fPIC -fno-builtin -fno-stack-protector $(CPPFLAGS) LDFLAGS := -g -nostdlib -shared -I/Acess/Libs/ld-acess.so -e SoMain -x -L$(OUTPUTDIR)Libs/ diff --git a/Usermode/Libraries/ld-acess.so_src/common.h b/Usermode/Libraries/ld-acess.so_src/common.h index 941baf37f42be1e92a91a9fb8ca54d4c78627c49..8fa626a7c6c15b959e48fcca7551f801730c4725 100644 --- a/Usermode/Libraries/ld-acess.so_src/common.h +++ b/Usermode/Libraries/ld-acess.so_src/common.h @@ -7,8 +7,7 @@ #ifndef _COMMON_H #define _COMMON_H -#define NULL ((void*)0) - +#include <stddef.h> #include <stdarg.h> // HACK: Replace with underscored diff --git a/Usermode/Libraries/ld-acess.so_src/elf.c b/Usermode/Libraries/ld-acess.so_src/elf.c index 75791d6e0d7761daf1e41f060dad029379a23753..00f2431d27a5098d6a5814a9d2510fbdcd69863c 100644 --- a/Usermode/Libraries/ld-acess.so_src/elf.c +++ b/Usermode/Libraries/ld-acess.so_src/elf.c @@ -83,7 +83,7 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename) for( i = 0; i < hdr->e_phnum; i ++ ) { if(phtab[i].p_type == PT_DYNAMIC) - dyntab = (void *)phtab[i].p_vaddr; + dyntab = (void *)(intptr_t)phtab[i].p_vaddr; if(phtab[i].p_type == PT_LOAD && compiledBase > phtab[i].p_vaddr) compiledBase = phtab[i].p_vaddr; } diff --git a/Usermode/Libraries/ld-acess.so_src/lib.c b/Usermode/Libraries/ld-acess.so_src/lib.c index 27d6ff29d18261ca943ef3d68c2325f2fcafd553..150ae77cff61812d0748f77f5d38ae393ac9c308 100644 --- a/Usermode/Libraries/ld-acess.so_src/lib.c +++ b/Usermode/Libraries/ld-acess.so_src/lib.c @@ -4,6 +4,7 @@ By thePowersGang */ #include "common.h" +#include <stdint.h> // === CODE === char *strcpy(char *dest, const char *src) @@ -70,3 +71,31 @@ int file_exists(const char *filename) close(fd); return 1; } + +uint64_t __udivdi3(uint64_t Num, uint64_t Den) +{ + uint64_t ret = 0, add = 1; + + // Find what power of two times Den is > Num + while( Num >= Den ) + { + Den <<= 1; + add <<= 1; + } + + // Search backwards + while( add > 1 ) + { + add >>= 1; + Den >>= 1; + // If the numerator is > Den, subtract and add to return value + if( Num > Den ) + { + ret += add; + Num -= Den; + } + } +// if(Rem) *Rem = Num; + return ret; +} + diff --git a/Usermode/Libraries/ld-acess.so_src/main.c b/Usermode/Libraries/ld-acess.so_src/main.c index ccdf6b428dd079169a6922e732f73e56f2a3b7f7..0eb28d14ddf5a1cc8fdbf9d5f0d7609a6b7a395a 100644 --- a/Usermode/Libraries/ld-acess.so_src/main.c +++ b/Usermode/Libraries/ld-acess.so_src/main.c @@ -3,6 +3,7 @@ By thePowersGang */ #include <stdint.h> +#include <stddef.h> #include "common.h" // === PROTOTYPES === diff --git a/Usermode/Libraries/libc.so_src/Makefile b/Usermode/Libraries/libc.so_src/Makefile index 2d6801d6ad5e743e4723255f1766964460a267cf..29863015e7ba10aa31fd53b685a422567840653c 100644 --- a/Usermode/Libraries/libc.so_src/Makefile +++ b/Usermode/Libraries/libc.so_src/Makefile @@ -8,7 +8,7 @@ CFLAGS += ASFLAGS += LDFLAGS += -soname libc.so -Map map.txt -lgcc -OBJ = stub.o heap.o stdlib.o env.o fileIO.o string.o +OBJ = stub.o heap.o stdlib.o env.o fileIO.o string.o select.o DEPFILES := $(OBJ:%.o=%.d) # signals.o BIN = libc.so diff --git a/Usermode/Libraries/libc.so_src/fileIO.c b/Usermode/Libraries/libc.so_src/fileIO.c index 60def892b014a96b4df19a396826ae086765de12..5b479aaa092d52cdfc8abed034126fbf7361069f 100644 --- a/Usermode/Libraries/libc.so_src/fileIO.c +++ b/Usermode/Libraries/libc.so_src/fileIO.c @@ -19,7 +19,7 @@ #define _stdout 1 // === PROTOTYPES === -EXPORT void itoa(char *buf, uint64_t num, uint base, int minLength, char pad, int bSigned); +EXPORT void itoa(char *buf, uint64_t num, size_t base, int minLength, char pad, int bSigned); struct sFILE *get_file_struct(); // === GLOBALS === @@ -131,7 +131,7 @@ EXPORT void fflush(FILE *fp) ///\todo Implement } -EXPORT long int ftell(FILE *fp) +EXPORT off_t ftell(FILE *fp) { if(!fp || !fp->FD) return -1; diff --git a/Usermode/include/stddef.h b/Usermode/include/stddef.h deleted file mode 100644 index 01636359d018c8a15053b3380405718f5045823e..0000000000000000000000000000000000000000 --- a/Usermode/include/stddef.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * AcessOS LibC - * stddef.h - */ -#ifndef _STDDEF_H -#define _STDDEF_H - -// === CONSTANTS === -#ifndef NULL -# define NULL ((void*)0) -#endif - -// === TYPES === -#ifndef size_t -typedef unsigned int size_t; -#endif - -// === MACROS === -#define offsetof(st, m) ((size_t)((uintptr_t)((char *)&((st *)(0))->m - (char *)0 ))) - -#endif diff --git a/Usermode/include/stdint.h b/Usermode/include/stdint.h index 6238a63abb0bd0ffaa660e9e27d9201c44a46a0a..f2707aa49e0150786654c8537e3b1c41f1cf6c06 100644 --- a/Usermode/include/stdint.h +++ b/Usermode/include/stdint.h @@ -1,9 +1,8 @@ /* */ -#ifndef _STDTYPES_H_ -#define _STDTYPES_H_ +#ifndef _STDINT_H_ +#define _STDINT_H_ -//typedef unsigned int uint; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; @@ -14,16 +13,13 @@ typedef signed short int16_t; typedef signed int int32_t; typedef signed long long int64_t; -#ifdef __LP64__ +#if ARCHDIR_is_x86 +typedef uint32_t intptr_t; +typedef uint32_t uintptr_t; +#elif ARCHDIR_is_x86_64 typedef uint64_t intptr_t; typedef uint64_t uintptr_t; -typedef int64_t ptrdiff_t; #else -typedef uint32_t intptr_t; -typedef uint32_t uintptr_t; -typedef int32_t ptrdiff_t; -#endif -#if 0 # error "Unknown pointer size" #endif diff --git a/Usermode/include/stdio.h b/Usermode/include/stdio.h index 552cd4f999d6432590f43767e430bb65985bb66e..8d950656c3ce40bec2d491fb8ac8e6ef4d771ac0 100644 --- a/Usermode/include/stdio.h +++ b/Usermode/include/stdio.h @@ -8,13 +8,13 @@ #include <stdlib.h> #include <stdarg.h> -// === Types === +/* === Types === */ typedef struct sFILE FILE; -// === CONSTANTS === +/* === CONSTANTS === */ #define EOF (-1) -// --- Standard IO --- +/* --- Standard IO --- */ extern int printf(const char *format, ...); extern int vsnprintf(char *buf, size_t __maxlen, const char *format, va_list args); extern int vsprintf(char *buf, const char *format, va_list args); @@ -26,7 +26,7 @@ extern FILE *freopen(const char *file, const char *mode, FILE *fp); extern FILE *fdopen(int fd, const char *modes); extern int fclose(FILE *fp); extern void fflush(FILE *fp); -extern long int ftell(FILE *fp); +extern off_t ftell(FILE *fp); extern int fseek(FILE *fp, long int amt, int whence); extern size_t fread(void *buf, size_t size, size_t n, FILE *fp); diff --git a/Usermode/include/stdlib.h b/Usermode/include/stdlib.h index 6ea8db505578f669c6ae2b07b9dac0c5adfcd6f0..160993d1470c074ad668ab163875c2061ed20756 100644 --- a/Usermode/include/stdlib.h +++ b/Usermode/include/stdlib.h @@ -12,27 +12,27 @@ #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 -// --- Spinlock Macros --- +/* --- Spinlock Macros --- */ +/* TODO: Support non-x86 architectures */ #define DEFLOCK(_name) static int _spinlock_##_name=0; -//#define LOCK(_name) __asm__ __volatile__("jmp ._tst;\n\t._lp:call yield;\n\t._tst:lock btsl $1,(%0);\n\tjc ._lp"::"D"(&_spinlock_##_name)) -#define LOCK(_name) do{int v=1;while(v){__asm__ __volatile__("lock cmpxchgl %%eax, (%1)":"=a"(v):"D"((&_spinlock_##_name)),"a"(1));yield();}}while(0) +#define LOCK(_name) do{int v=1;while(v){__asm__ __volatile__("lock cmpxchgl %0, (%1)":"=a"(v):"D"((&_spinlock_##_name)),"a"(1));yield();}}while(0) #define UNLOCK(_name) __asm__ __volatile__("lock andl $0, (%0)"::"D"(&_spinlock_##_name)) -// --- StdLib --- -extern void _exit(int code) __attribute__((noreturn)); //NOTE: Also defined in acess/sys.h +/* --- StdLib --- */ +extern void _exit(int code) __attribute__((noreturn)); /* NOTE: Also defined in acess/sys.h */ extern int atoi(const char *ptr); extern void exit(int status) __attribute__((noreturn)); extern void atexit(void (*__func)(void)); -extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); +extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *)); -// --- Environment --- +/* --- Environment --- */ extern char *getenv(const char *name); -// --- Heap --- -extern void free(void *mem); -extern void *malloc(size_t bytes); -extern void *calloc(size_t __nmemb, size_t __size); -extern void *realloc(void *__ptr, size_t __size); +/* --- Heap --- */ +extern void free(void *mem); +extern void *malloc(size_t bytes); +extern void *calloc(size_t __nmemb, size_t __size); +extern void *realloc(void *__ptr, size_t __size); extern int IsHeap(void *ptr); #ifndef SEEK_CUR diff --git a/Usermode/include/string.h b/Usermode/include/string.h index 6c5a2c6c57483f44c0dc8d939f03c71bcc63de68..b77d8074828e3847b4717531de8d36ad69125512 100644 --- a/Usermode/include/string.h +++ b/Usermode/include/string.h @@ -7,7 +7,7 @@ #include <stddef.h> -// Strings +/* Strings */ extern size_t strlen(const char *string); extern size_t strnlen(const char *string, size_t maxlen); extern int strcmp(const char *str1, const char *str2); @@ -25,7 +25,7 @@ extern char *strstr(const char *str1, const char *str2); extern size_t strcspn(const char *haystack, const char *reject); extern size_t strspn(const char *haystack, const char *accept); -// Memory +/* Memory */ extern void *memset(void *dest, int val, size_t count); extern void *memcpy(void *dest, const void *src, size_t count); extern void *memmove(void *dest, const void *src, size_t count); diff --git a/Usermode/include/sys/stat.h b/Usermode/include/sys/stat.h index e9b9a8fa7a9239e3cd7658becec7ba6ce84d605b..10384baee86afee6f781a622232c2fbbc197c0af 100644 --- a/Usermode/include/sys/stat.h +++ b/Usermode/include/sys/stat.h @@ -5,9 +5,10 @@ #ifndef _SYS_STAT_H_ #define _SYS_STAT_H_ -#include <stdint.h> //EVIL! +#include <stdint.h> /* Evil */ +#include <stddef.h> -typedef uintptr_t dev_t; // TODO: How to identify a device with Acess +typedef void *dev_t; /* TODO: How to identify a device with Acess */ typedef uint64_t ino_t; typedef unsigned int blksize_t; typedef uint64_t blkcnt_t; diff --git a/Usermode/include/sys/types.h b/Usermode/include/sys/types.h index acf6b7e5f0cbda2a414167a9eb23484f33aea93d..edcaa2243e8729ad527777518425394fb37b0d5b 100644 --- a/Usermode/include/sys/types.h +++ b/Usermode/include/sys/types.h @@ -2,7 +2,6 @@ */ #ifndef _SYS_TYPES_H #define _SYS_TYPES_H -//#include <stdint.h> typedef struct stat t_fstat; @@ -28,8 +27,8 @@ typedef struct } fd_set; struct s_sysACL { - unsigned long object; //!< Group or user (bit 31 determines) - unsigned long perms; //!< Inverted by bit 31 + unsigned long object; /*!< Group or user (bit 31 determines) */ + unsigned long perms; /*!< Inverted by bit 31 */ }; struct s_sysFInfo { unsigned int mount; @@ -47,19 +46,10 @@ struct s_sysFInfo { typedef struct s_sysFInfo t_sysFInfo; typedef struct s_sysACL t_sysACL; -static inline void FD_ZERO(fd_set *fdsetp) {int i=FD_SETSIZE/16;while(i--)fdsetp->flags[i]=0; } -static inline void FD_CLR(int fd, fd_set *fdsetp) { - if(fd < 0 || fd > FD_SETSIZE) return; - fdsetp->flags[fd/16] &= (fd_set_ent_t) ((~1 << (fd%16))) & 0xFFFF; -} -static inline void FD_SET(int fd, fd_set *fdsetp) { - if(fd < 0 || fd > FD_SETSIZE) return; - fdsetp->flags[fd/16] |= (fd_set_ent_t) (1 << (fd%16)); -} -static inline int FD_ISSET(int fd, fd_set *fdsetp) { - if(fd < 0 || fd > FD_SETSIZE) return 0; - return !!( fdsetp->flags[fd/16] & (1<<(fd%16)) ); -} +extern void FD_ZERO(fd_set *fdsetp); +extern void FD_CLR(int fd, fd_set *fdsetp); +extern void FD_SET(int fd, fd_set *fdsetp); +extern int FD_ISSET(int fd, fd_set *fdsetp); #include <sys/stat.h>