From f1ee3de3a4c24157c9927cb3706f4e902ae88710 Mon Sep 17 00:00:00 2001
From: Chris Marshall
Date: Fri, 20 May 2016 08:02:03 -0400
Subject: [PATCH] Basic port to cygwin of mob tcc
The remaining issues appear to be ones relating to include file
problems. Specifically, the local include/stddef.h and others
seem to be inconsistent with those from the native gcc (as in
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include/stddef.h or others.
---
conftest.c | 2 ++
lib/libtcc1.c | 5 +++++
libtcc.c | 3 +++
tccrun.c | 8 ++++++++
4 files changed, 18 insertions(+)
diff --git a/conftest.c b/conftest.c
index fa07a1b..8fe2e01 100644
--- a/conftest.c
+++ b/conftest.c
@@ -18,6 +18,8 @@
# define TRIPLET_OS "linux"
#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__)
# define TRIPLET_OS "kfreebsd"
+#elif defined (__CYGWIN__)
+# define TRIPLET_OS "cygwin"
#elif !defined (__GNU__)
# define TRIPLET_OS "unknown"
#endif
diff --git a/lib/libtcc1.c b/lib/libtcc1.c
index a5fee7b..05ec15b 100644
--- a/lib/libtcc1.c
+++ b/lib/libtcc1.c
@@ -28,6 +28,11 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
+#define __INTPTR_TYPE__ long int
+#define __INTPTR_MAX__ 9223372036854775807L
+#define __INT32_TYPE__ int
+#define __INT32_MAX__ 2147483647
+
#include
#define W_TYPE_SIZE 32
diff --git a/libtcc.c b/libtcc.c
index b0fcdf9..44caf21 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -1131,6 +1131,9 @@ LIBTCCAPI TCCState *tcc_new(void)
tcc_define_symbol(s, "__linux__", NULL);
tcc_define_symbol(s, "__linux", NULL);
# endif
+# if defined(__CYGWIN__)
+ tcc_define_symbol(s, "__CYGWIN__", NULL);
+# endif
# if defined(__FreeBSD__)
tcc_define_symbol(s, "__FreeBSD__", "__FreeBSD__");
# endif
diff --git a/tccrun.c b/tccrun.c
index 9ee70e4..af539e3 100644
--- a/tccrun.c
+++ b/tccrun.c
@@ -496,6 +496,8 @@ static int rt_get_caller_pc(addr_t *paddr, ucontext_t *uc, int level)
*paddr = uc->uc_mcontext->__ss.__eip;
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
*paddr = uc->uc_mcontext.mc_eip;
+#elif defined(__CYGWIN__)
+ *paddr = uc->uc_mcontext.eip;
#elif defined(__dietlibc__)
*paddr = uc->uc_mcontext.eip;
#elif defined(__NetBSD__)
@@ -509,6 +511,8 @@ static int rt_get_caller_pc(addr_t *paddr, ucontext_t *uc, int level)
fp = uc->uc_mcontext->__ss.__ebp;
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
fp = uc->uc_mcontext.mc_ebp;
+#elif defined(__CYGWIN__)
+ fp = uc->uc_mcontext.ebp;
#elif defined(__dietlibc__)
fp = uc->uc_mcontext.ebp;
#elif defined(__NetBSD__)
@@ -544,6 +548,8 @@ static int rt_get_caller_pc(addr_t *paddr, ucontext_t *uc, int level)
*paddr = uc->uc_mcontext.mc_rip;
#elif defined(__NetBSD__)
*paddr = uc->uc_mcontext.__gregs[_REG_RIP];
+#elif defined(__CYGWIN__)
+ *paddr = uc->uc_mcontext.rip;
#else
*paddr = uc->uc_mcontext.gregs[REG_RIP];
#endif
@@ -555,6 +561,8 @@ static int rt_get_caller_pc(addr_t *paddr, ucontext_t *uc, int level)
fp = uc->uc_mcontext.mc_rbp;
#elif defined(__NetBSD__)
fp = uc->uc_mcontext.__gregs[_REG_RBP];
+#elif defined(__CYGWIN__)
+ fp = uc->uc_mcontext.rbp;
#else
fp = uc->uc_mcontext.gregs[REG_RBP];
#endif
--
2.5.3