#define EXIT_FAILURE 1\r
#define EXIT_SUCCESS 0\r
\r
-// --- Spinlock Macros ---\r
+/* --- Spinlock Macros --- */\r
+/* TODO: Support non-x86 architectures */\r
#define DEFLOCK(_name) static int _spinlock_##_name=0;\r
-//#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))\r
-#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)\r
+#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)\r
#define UNLOCK(_name) __asm__ __volatile__("lock andl $0, (%0)"::"D"(&_spinlock_##_name))\r
\r
-// --- StdLib ---\r
-extern void _exit(int code) __attribute__((noreturn)); //NOTE: Also defined in acess/sys.h\r
+/* --- StdLib --- */\r
+extern void _exit(int code) __attribute__((noreturn)); /* NOTE: Also defined in acess/sys.h */\r
extern int atoi(const char *ptr);\r
extern void exit(int status) __attribute__((noreturn));\r
-extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));\r
+extern void atexit(void (*__func)(void));\r
+extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));\r
\r
-// --- Environment ---\r
+/* --- Environment --- */\r
extern char *getenv(const char *name);\r
\r
-// --- Heap ---\r
-extern void free(void *mem);\r
-extern void *malloc(size_t bytes);\r
-extern void *calloc(size_t __nmemb, size_t __size);\r
-extern void *realloc(void *__ptr, size_t __size);\r
+/* --- Heap --- */\r
+extern void free(void *mem);\r
+extern void *malloc(size_t bytes);\r
+extern void *calloc(size_t __nmemb, size_t __size);\r
+extern void *realloc(void *__ptr, size_t __size);\r
extern int IsHeap(void *ptr);\r
\r
#ifndef SEEK_CUR\r