Cleanup
[tpg/acess2.git] / Usermode / Libraries / libgcc.so_src / libgcc.c
diff --git a/Usermode/Libraries/libgcc.so_src/libgcc.c b/Usermode/Libraries/libgcc.so_src/libgcc.c
new file mode 100644 (file)
index 0000000..2127b55
--- /dev/null
@@ -0,0 +1,50 @@
+/* Acess GCC Helper Library
+ *
+ */
+#include <sys/sys.h>
+
+typedef unsigned long long int uint64_t;
+
+// === CODE ===
+int SoMain()
+{
+       return 0;
+}
+
+// --- Errors ---
+void __stack_chk_fail()
+{
+       write(1, 32, "FATAL ERROR: Stack Check Failed\n");
+       _exit(-1);
+       for(;;);
+}
+
+// --- 64-Bit Math ---
+/**
+ * \fn uint64_t __udivdi3(uint64_t Num, uint64_t Den)
+ * \brief Divide two 64-bit integers
+ */
+uint64_t __udivdi3(uint64_t Num, uint64_t Den)
+{
+       uint64_t        ret = 0;
+       if(Den == 0)    // Call Div by Zero Error
+               __asm__ __volatile__ ("int $0");
+       while(Num > Den) {
+               ret ++;
+               Num -= Den;
+       }
+       return ret;
+}
+
+/**
+ * \fn uint64_t __umoddi3(uint64_t Num, uint64_t Den)
+ * \brief Get the modulus of two 64-bit integers
+ */
+uint64_t __umoddi3(uint64_t Num, uint64_t Den)
+{
+       if(Den == 0)    // Call Div by Zero Error
+               __asm__ __volatile__ ("int $0");
+       while(Num > Den)
+               Num -= Den;
+       return Num;
+}

UCC git Repository :: git.ucc.asn.au