summaryrefslogtreecommitdiff
path: root/patches/mint
diff options
context:
space:
mode:
Diffstat (limited to 'patches/mint')
-rw-r--r--patches/mint345
1 files changed, 0 insertions, 345 deletions
diff --git a/patches/mint b/patches/mint
deleted file mode 100644
index e732b32..0000000
--- a/patches/mint
+++ /dev/null
@@ -1,345 +0,0 @@
-Index: libffi/ChangeLog
-===================================================================
---- libffi.orig/ChangeLog
-+++ libffi/ChangeLog
-@@ -1,3 +1,8 @@
-+2012-03-19 Alan Hourihane <alanh@fairlite.co.uk>
-+
-+ * src/m68k/ffi.c: Add MINT support.
-+ * src/m68k/sysv.S: Ditto.
-+
- 2012-03-19 chennam <csit@axway.com>
-
- * src/powerpc/ffi_darwin.c (ffi_prep_closure_loc): Fix AIX closure
-Index: libffi/src/m68k/ffi.c
-===================================================================
---- libffi.orig/src/m68k/ffi.c
-+++ libffi/src/m68k/ffi.c
-@@ -1,7 +1,7 @@
- /* -----------------------------------------------------------------------
- ffi.c
--
-- m68k Foreign Function Interface
-+
-+ m68k Foreign Function Interface
- ----------------------------------------------------------------------- */
-
- #include <ffi.h>
-@@ -13,8 +13,13 @@
- void rtems_cache_flush_multiple_data_lines( const void *, size_t );
- #else
- #include <sys/syscall.h>
-+#ifdef __MINT__
-+#include <mint/mintbind.h>
-+#include <mint/ssystem.h>
-+#else
- #include <asm/cachectl.h>
- #endif
-+#endif
-
- void ffi_call_SYSV (extended_cif *,
- unsigned, unsigned,
-@@ -39,8 +44,12 @@ ffi_prep_args (void *stack, extended_cif
-
- argp = stack;
-
-- if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
-- && !ecif->cif->flags)
-+ if (
-+#ifdef __MINT__
-+ (ecif->cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
-+#endif
-+ (((ecif->cif->rtype->type == FFI_TYPE_STRUCT)
-+ && !ecif->cif->flags)))
- struct_value_ptr = ecif->rvalue;
- else
- struct_value_ptr = NULL;
-@@ -51,12 +60,12 @@ ffi_prep_args (void *stack, extended_cif
- i != 0;
- i--, p_arg++)
- {
-- size_t z;
-+ size_t z = (*p_arg)->size;
-+ int type = (*p_arg)->type;
-
-- z = (*p_arg)->size;
- if (z < sizeof (int))
- {
-- switch ((*p_arg)->type)
-+ switch (type)
- {
- case FFI_TYPE_SINT8:
- *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
-@@ -75,7 +84,14 @@ ffi_prep_args (void *stack, extended_cif
- break;
-
- case FFI_TYPE_STRUCT:
-+#ifdef __MINT__
-+ if (z == 1 || z == 2)
-+ memcpy (argp + 2, *p_argv, z);
-+ else
-+ memcpy (argp, *p_argv, z);
-+#else
- memcpy (argp + sizeof (int) - z, *p_argv, z);
-+#endif
- break;
-
- default:
-@@ -120,17 +136,34 @@ ffi_prep_cif_machdep (ffi_cif *cif)
- break;
-
- case FFI_TYPE_STRUCT:
-+ if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT &&
-+ cif->rtype->elements[1])
-+ {
-+ cif->flags = 0;
-+ break;
-+ }
-+
- switch (cif->rtype->size)
- {
- case 1:
-+#ifdef __MINT__
-+ cif->flags = CIF_FLAGS_STRUCT2;
-+#else
- cif->flags = CIF_FLAGS_STRUCT1;
-+#endif
- break;
- case 2:
- cif->flags = CIF_FLAGS_STRUCT2;
- break;
-+#ifdef __MINT__
-+ case 3:
-+#endif
- case 4:
- cif->flags = CIF_FLAGS_INT;
- break;
-+#ifdef __MINT__
-+ case 7:
-+#endif
- case 8:
- cif->flags = CIF_FLAGS_DINT;
- break;
-@@ -150,7 +183,11 @@ ffi_prep_cif_machdep (ffi_cif *cif)
-
- #if (FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE)
- case FFI_TYPE_LONGDOUBLE:
-+#ifdef __MINT__
-+ cif->flags = 0;
-+#else
- cif->flags = CIF_FLAGS_LDOUBLE;
-+#endif
- break;
- #endif
-
-@@ -218,6 +255,26 @@ ffi_prep_incoming_args_SYSV (char *stack
- size_t z;
-
- z = (*p_arg)->size;
-+#ifdef __MINT__
-+ if (cif->flags &&
-+ cif->rtype->type == FFI_TYPE_STRUCT &&
-+ (z == 1 || z == 2))
-+ {
-+ *p_argv = (void *) (argp + 2);
-+
-+ z = 4;
-+ }
-+ else
-+ if (cif->flags &&
-+ cif->rtype->type == FFI_TYPE_STRUCT &&
-+ (z == 3 || z == 4))
-+ {
-+ *p_argv = (void *) (argp);
-+
-+ z = 4;
-+ }
-+ else
-+#endif
- if (z <= 4)
- {
- *p_argv = (void *) (argp + 4 - z);
-@@ -267,14 +324,21 @@ ffi_prep_closure_loc (ffi_closure* closu
- *(unsigned short *)closure->tramp = 0x207c;
- *(void **)(closure->tramp + 2) = codeloc;
- *(unsigned short *)(closure->tramp + 6) = 0x4ef9;
-- if (cif->rtype->type == FFI_TYPE_STRUCT
-- && !cif->flags)
-+
-+ if (
-+#ifdef __MINT__
-+ (cif->rtype->type == FFI_TYPE_LONGDOUBLE) ||
-+#endif
-+ (((cif->rtype->type == FFI_TYPE_STRUCT)
-+ && !cif->flags)))
- *(void **)(closure->tramp + 8) = ffi_closure_struct_SYSV;
- else
- *(void **)(closure->tramp + 8) = ffi_closure_SYSV;
-
- #ifdef __rtems__
- rtems_cache_flush_multiple_data_lines( codeloc, FFI_TRAMPOLINE_SIZE );
-+#elif defined(__MINT__)
-+ Ssystem(S_FLUSHCACHE, codeloc, FFI_TRAMPOLINE_SIZE);
- #else
- syscall(SYS_cacheflush, codeloc, FLUSH_SCOPE_LINE,
- FLUSH_CACHE_BOTH, FFI_TRAMPOLINE_SIZE);
-@@ -286,4 +350,3 @@ ffi_prep_closure_loc (ffi_closure* closu
-
- return FFI_OK;
- }
--
-Index: libffi/src/m68k/sysv.S
-===================================================================
---- libffi.orig/src/m68k/sysv.S
-+++ libffi/src/m68k/sysv.S
-@@ -1,6 +1,7 @@
- /* -----------------------------------------------------------------------
-
-- sysv.S - Copyright (c) 1998, 2012 Andreas Schwab
-+ sysv.S - Copyright (c) 2012 Alan Hourihane
-+ Copyright (c) 1998, 2012 Andreas Schwab
- Copyright (c) 2008 Red Hat, Inc.
-
- m68k Foreign Function Interface
-@@ -42,13 +43,19 @@
- #define CFI_ENDPROC()
- #endif
-
-+#ifdef __MINT__
-+#define CALLFUNC(funcname) _ ## funcname
-+#else
-+#define CALLFUNC(funcname) funcname
-+#endif
-+
- .text
-
-- .globl ffi_call_SYSV
-- .type ffi_call_SYSV,@function
-+ .globl CALLFUNC(ffi_call_SYSV)
-+ .type CALLFUNC(ffi_call_SYSV),@function
- .align 4
-
--ffi_call_SYSV:
-+CALLFUNC(ffi_call_SYSV):
- CFI_STARTPROC()
- link %fp,#0
- CFI_OFFSET(14,-8)
-@@ -63,14 +70,18 @@ ffi_call_SYSV:
- move.l 8(%fp),-(%sp)
- pea 4(%sp)
- #if !defined __PIC__
-- jsr ffi_prep_args
-+ jsr CALLFUNC(ffi_prep_args)
- #else
-- bsr.l ffi_prep_args@PLTPC
-+ bsr.l CALLFUNC(ffi_prep_args@PLTPC)
- #endif
- addq.l #8,%sp
-
- | Pass pointer to struct value, if any
-+#ifdef __MINT__
-+ move.l %d0,%a1
-+#else
- move.l %a0,%a1
-+#endif
-
- | Call the function
- move.l 24(%fp),%a0
-@@ -142,7 +153,11 @@ retlongdouble:
- retpointer:
- btst #5,%d2
- jbeq retstruct1
-+#ifdef __MINT__
-+ move.l %d0,(%a1)
-+#else
- move.l %a0,(%a1)
-+#endif
- jbra epilogue
-
- retstruct1:
-@@ -162,13 +177,13 @@ epilogue:
- unlk %fp
- rts
- CFI_ENDPROC()
-- .size ffi_call_SYSV,.-ffi_call_SYSV
-+ .size CALLFUNC(ffi_call_SYSV),.-CALLFUNC(ffi_call_SYSV)
-
-- .globl ffi_closure_SYSV
-- .type ffi_closure_SYSV, @function
-+ .globl CALLFUNC(ffi_closure_SYSV)
-+ .type CALLFUNC(ffi_closure_SYSV), @function
- .align 4
-
--ffi_closure_SYSV:
-+CALLFUNC(ffi_closure_SYSV):
- CFI_STARTPROC()
- link %fp,#-12
- CFI_OFFSET(14,-8)
-@@ -178,9 +193,9 @@ ffi_closure_SYSV:
- pea -12(%fp)
- move.l %a0,-(%sp)
- #if !defined __PIC__
-- jsr ffi_closure_SYSV_inner
-+ jsr CALLFUNC(ffi_closure_SYSV_inner)
- #else
-- bsr.l ffi_closure_SYSV_inner@PLTPC
-+ bsr.l CALLFUNC(ffi_closure_SYSV_inner@PLTPC)
- #endif
-
- lsr.l #1,%d0
-@@ -240,13 +255,13 @@ ffi_closure_SYSV:
- jra .Lcls_epilogue
- CFI_ENDPROC()
-
-- .size ffi_closure_SYSV,.-ffi_closure_SYSV
-+ .size CALLFUNC(ffi_closure_SYSV),.-CALLFUNC(ffi_closure_SYSV)
-
-- .globl ffi_closure_struct_SYSV
-- .type ffi_closure_struct_SYSV, @function
-+ .globl CALLFUNC(ffi_closure_struct_SYSV)
-+ .type CALLFUNC(ffi_closure_struct_SYSV), @function
- .align 4
-
--ffi_closure_struct_SYSV:
-+CALLFUNC(ffi_closure_struct_SYSV):
- CFI_STARTPROC()
- link %fp,#0
- CFI_OFFSET(14,-8)
-@@ -256,14 +271,14 @@ ffi_closure_struct_SYSV:
- move.l %a1,-(%sp)
- move.l %a0,-(%sp)
- #if !defined __PIC__
-- jsr ffi_closure_SYSV_inner
-+ jsr CALLFUNC(ffi_closure_SYSV_inner)
- #else
-- bsr.l ffi_closure_SYSV_inner@PLTPC
-+ bsr.l CALLFUNC(ffi_closure_SYSV_inner@PLTPC)
- #endif
- unlk %fp
- rts
- CFI_ENDPROC()
-- .size ffi_closure_struct_SYSV,.-ffi_closure_struct_SYSV
-+ .size CALLFUNC(ffi_closure_struct_SYSV),.-CALLFUNC(ffi_closure_struct_SYSV)
-
- #if defined __ELF__ && defined __linux__
- .section .note.GNU-stack,"",@progbits
-Index: libffi/README
-===================================================================
---- libffi.orig/README
-+++ libffi/README
-@@ -58,6 +58,7 @@ tested:
- | AVR32 | Linux |
- | HPPA | HPUX |
- | IA-64 | Linux |
-+| M68K | FreeMiNT |
- | M68K | RTEMS |
- | MIPS | IRIX |
- | MIPS | Linux |
-@@ -150,6 +151,7 @@ See the ChangeLog files for details.
- Lots of build fixes.
- Add Amiga newer MacOS support.
- Add Linux/x32 support.
-+ Add m68k FreeMiNT support.
- Add thiscall and fastcall support on Windows.
- Fix Octeon and MC68881 support.
- Fix code pessimizations.