pkgsrc-WIP-changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
frida-libffi: Revert back to 3.0.13
Module Name: pkgsrc-wip
Committed By: Kamil Rytarowski <n54%gmx.com@localhost>
Pushed By: kamil
Date: Mon Mar 12 20:25:03 2018 +0100
Changeset: 5e5f2fc7dea6db2bf32d252ea7dbf7b5c1cbbdaa
Modified Files:
frida-libffi/Makefile
frida-libffi/distinfo
frida-libffi/patches/patch-aa
frida-libffi/patches/patch-ac
frida-libffi/patches/patch-ad
frida-libffi/patches/patch-ae
frida-libffi/patches/patch-af
frida-libffi/patches/patch-ag
frida-libffi/patches/patch-aj
frida-libffi/patches/patch-src_arm_sysv.S
frida-libffi/patches/patch-src_m88k_elfbsd.S
Added Files:
frida-libffi/patches/patch-Makefile.am
frida-libffi/patches/patch-ah
frida-libffi/patches/patch-ai
frida-libffi/patches/patch-configure.ac
frida-libffi/patches/patch-fficonfig.h.in
frida-libffi/patches/patch-src_m88k_ffi.c
frida-libffi/patches/patch-src_m88k_ffitarget.h
frida-libffi/patches/patch-src_vax_elfbsd.S
frida-libffi/patches/patch-src_vax_ffi.c
frida-libffi/patches/patch-src_vax_ffitarget.h
frida-libffi/patches/patch-src_x86_ffi.c
frida-libffi/patches/patch-src_x86_win64.S
Removed Files:
frida-libffi/patches/patch-src_alpha_osf.S
frida-libffi/patches/patch-src_closures.c
frida-libffi/patches/patch-src_x86_win32.S
Log Message:
frida-libffi: Revert back to 3.0.13
Frida uses a fork of 3.0.13.
To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=5e5f2fc7dea6db2bf32d252ea7dbf7b5c1cbbdaa
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
diffstat:
frida-libffi/Makefile | 29 +-
frida-libffi/distinfo | 42 ++-
frida-libffi/patches/patch-Makefile.am | 40 +++
frida-libffi/patches/patch-aa | 95 ++++--
frida-libffi/patches/patch-ac | 8 +-
frida-libffi/patches/patch-ad | 10 +-
frida-libffi/patches/patch-ae | 17 +-
frida-libffi/patches/patch-af | 34 +-
frida-libffi/patches/patch-ag | 6 +-
frida-libffi/patches/patch-ah | 26 ++
frida-libffi/patches/patch-ai | 20 ++
frida-libffi/patches/patch-aj | 8 +-
frida-libffi/patches/patch-configure.ac | 51 +++
frida-libffi/patches/patch-fficonfig.h.in | 14 +
frida-libffi/patches/patch-src_alpha_osf.S | 26 --
frida-libffi/patches/patch-src_arm_sysv.S | 53 ++--
frida-libffi/patches/patch-src_closures.c | 94 ------
frida-libffi/patches/patch-src_m88k_elfbsd.S | 6 +-
frida-libffi/patches/patch-src_m88k_ffi.c | 405 ++++++++++++++++++++++++
frida-libffi/patches/patch-src_m88k_ffitarget.h | 54 ++++
frida-libffi/patches/patch-src_vax_elfbsd.S | 200 ++++++++++++
frida-libffi/patches/patch-src_vax_ffi.c | 281 ++++++++++++++++
frida-libffi/patches/patch-src_vax_ffitarget.h | 54 ++++
frida-libffi/patches/patch-src_x86_ffi.c | 15 +
frida-libffi/patches/patch-src_x86_win32.S | 23 --
frida-libffi/patches/patch-src_x86_win64.S | 15 +
26 files changed, 1370 insertions(+), 256 deletions(-)
diffs:
diff --git a/frida-libffi/Makefile b/frida-libffi/Makefile
index d1e109e97e..787da991bb 100644
--- a/frida-libffi/Makefile
+++ b/frida-libffi/Makefile
@@ -1,7 +1,6 @@
-# $NetBSD: Makefile,v 1.33 2017/09/05 15:08:42 joerg Exp $
+# $NetBSD: Makefile,v 1.23 2014/05/18 15:17:51 wiz Exp $
-DISTNAME= libffi-3.2.1
-PKGREVISION= 4
+DISTNAME= libffi-3.0.13
CATEGORIES= devel
MASTER_SITES= ftp://sourceware.org/pub/libffi/
@@ -10,13 +9,14 @@ HOMEPAGE= https://www.sourceware.org/libffi/
COMMENT= Foreign function interface
LICENSE= mit
-USE_LANGUAGES= c c++
-USE_LIBTOOL= yes
-USE_TOOLS+= pkg-config
-GNU_CONFIGURE= yes
-CONFIGURE_ARGS= --includedir=${PREFIX}/include
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS= --includedir=${PREFIX}/include
+USE_LIBTOOL= yes
+USE_TOOLS+= pkg-config
+USE_LANGUAGES= c c++
+INFO_FILES= yes
+
PKGCONFIG_OVERRIDE+= libffi.pc.in
-INFO_FILES= yes
.include "../../mk/compiler.mk"
# The Compaq C frontend groks .s, but not .S. Assemble osf.S directly w/ as(1).
@@ -30,25 +30,24 @@ pre-build:
.if !empty(PKGSRC_RUN_TEST:M[Yy][Ee][Ss])
TEST_TARGET= check
-TEST_ENV= # empty?
+TEST_ENV=
BUILD_DEPENDS+= dejagnu-[0-9]*:../../devel/dejagnu
.endif
# patch-aj uses m68k_sync_icache(2)
.if !empty(MACHINE_PLATFORM:MNetBSD-*-m68k)
-LIBS+= -lm68k
+LIBS+= -lm68k
.endif
# fix http://gnats.netbsd.org/42865
.if !empty(MACHINE_PLATFORM:MSunOS-*-i386) && !empty(CC_VERSION:Mgcc-[23]*)
-CPPFLAGS+= -D__PIC__
+CPPFLAGS += -D__PIC__
.endif
# irix fixes from PR 48587
.if !empty(OPSYS:MIRIX)
-USE_TOOLS+= bash gmake
-MAKE_FLAGS+= SHELL=${TOOLS_DIR}/bin/bash
+USE_TOOLS+= bash gmake
+MAKE_FLAGS+=SHELL=${TOOLS_DIR}/bin/bash
.endif
-.include "../../mk/pthread.buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/frida-libffi/distinfo b/frida-libffi/distinfo
index c01589c73c..5a66fb3a19 100644
--- a/frida-libffi/distinfo
+++ b/frida-libffi/distinfo
@@ -1,18 +1,26 @@
-$NetBSD: distinfo,v 1.45 2017/09/05 15:08:42 joerg Exp $
+$NetBSD: distinfo,v 1.34 2014/06/11 11:45:04 joerg Exp $
-SHA1 (libffi-3.2.1.tar.gz) = 280c265b789e041c02e5c97815793dfc283fb1e6
-RMD160 (libffi-3.2.1.tar.gz) = 9b546a3d002380bec3f00d86fc47d730abf51dfd
-SHA512 (libffi-3.2.1.tar.gz) = 980ca30a8d76f963fca722432b1fe5af77d7a4e4d2eac5144fbc5374d4c596609a293440573f4294207e1bdd9fda80ad1e1cafb2ffb543df5a275bc3bd546483
-Size (libffi-3.2.1.tar.gz) = 940837 bytes
-SHA1 (patch-aa) = 5218c8d895f97c812b7ca8d07c55b82ebcdc87d4
-SHA1 (patch-ac) = 63fba2e9486b73485a4f633927f5041110c43239
-SHA1 (patch-ad) = db57395ff721d7b56edec8a3a64b4b529258341c
-SHA1 (patch-ae) = fdb84a49c15041826396e4d3a6dda2de719801c0
-SHA1 (patch-af) = bf64b4082f24947cd47aba0758c347e5ddac3d7e
-SHA1 (patch-ag) = ae6a89f6b2be00c52139be6dcd14d0ebfe85d8f7
-SHA1 (patch-aj) = 5179cfd150bc7de15eb1c5ee0a327016c2c32b3e
-SHA1 (patch-src_alpha_osf.S) = 50d564a1d88284f04f6896719fa3613e9b0be70b
-SHA1 (patch-src_arm_sysv.S) = 2c97e0d069a4df2e1f5b6604e54b2d02c92691e2
-SHA1 (patch-src_closures.c) = 72760ccd973c5f9b157f5db8da180861d748beb2
-SHA1 (patch-src_m88k_elfbsd.S) = 6572c7fa39c00096cb4a80bb88993ff1b4aaa8cc
-SHA1 (patch-src_x86_win32.S) = 8a41cbc7237d6a171605a66e91d8d92a57181569
+SHA1 (libffi-3.0.13.tar.gz) = f5230890dc0be42fb5c58fbf793da253155de106
+RMD160 (libffi-3.0.13.tar.gz) = 03f0627c0fcc800d38636258a2fab2d6bb8b6625
+Size (libffi-3.0.13.tar.gz) = 845747 bytes
+SHA1 (patch-Makefile.am) = 01109a0d5708835162a2d007a26decac5bb0bbac
+SHA1 (patch-aa) = 79cc45c6051705bde3f3229aca4e0fa49ff149b9
+SHA1 (patch-ac) = f3c6324f4334d23e684b4eca25173a13be5d37eb
+SHA1 (patch-ad) = 8901a00abe25422e3e35f321a5fb89311185fc0b
+SHA1 (patch-ae) = 3d8cd3bcd834876f6e60ae519dca8c0b0ba0d4d1
+SHA1 (patch-af) = 2c7ca79ef980a2561333bf79a18df1ecb0bbb9f7
+SHA1 (patch-ag) = 6333317170f6e92f89db966315276dcd8e3484f2
+SHA1 (patch-ah) = e9580069ede90cd616da7bc230b28acbf5d204a6
+SHA1 (patch-ai) = f85a6cb64d4a9d7c3e56b47b7092fce10a744b5b
+SHA1 (patch-aj) = d130b2b20b94ca26c70dcc46614e36c6d0ac9153
+SHA1 (patch-configure.ac) = 080d79b5ada93c5073df7dd09c5131fcfe72ce86
+SHA1 (patch-fficonfig.h.in) = fd85fa767bc057c843ff71cc61bedfcff84def43
+SHA1 (patch-src_arm_sysv.S) = c7c8b33bb019c0f41b6866368096a7594314efea
+SHA1 (patch-src_m88k_elfbsd.S) = fae3e425dcff3e924ef195eab165f9bbc6ec4077
+SHA1 (patch-src_m88k_ffi.c) = e4b7382c3d6e253b8c1c6054150c530c21d018de
+SHA1 (patch-src_m88k_ffitarget.h) = e8479bc3aa876f5e6d52a4d578c5da88291c6646
+SHA1 (patch-src_vax_elfbsd.S) = abf284bd1db086a12608b7243344af30e4a314ca
+SHA1 (patch-src_vax_ffi.c) = f47ced03388e9744afa44d6bb5e14d5f4285cfbf
+SHA1 (patch-src_vax_ffitarget.h) = 388f3a58e37dd8af5c194b5be77a6ea6f9beef4b
+SHA1 (patch-src_x86_ffi.c) = b9ac64a53a92de663a339212e22c1286fa41c1d5
+SHA1 (patch-src_x86_win64.S) = 5b6836bae6c73743b925de4d11bc241c783bffd6
diff --git a/frida-libffi/patches/patch-Makefile.am b/frida-libffi/patches/patch-Makefile.am
new file mode 100644
index 0000000000..89521b781f
--- /dev/null
+++ b/frida-libffi/patches/patch-Makefile.am
@@ -0,0 +1,40 @@
+$NetBSD: patch-Makefile.am,v 1.1 2013/11/03 23:51:51 jklos Exp $
+
+--- Makefile.am.orig 2013-03-16 11:52:11.000000000 +0000
++++ Makefile.am
+@@ -19,6 +19,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
+ src/moxie/ffitarget.h src/moxie/eabi.S src/mips/ffitarget.h \
+ src/m32r/ffi.c src/m32r/sysv.S src/m32r/ffitarget.h \
+ src/m68k/ffi.c src/m68k/sysv.S src/m68k/ffitarget.h \
++ src/m88k/ffi.c src/m88k/obsd.S src/m88k/ffitarget.h \
+ src/microblaze/ffi.c src/microblaze/sysv.S \
+ src/microblaze/ffitarget.h src/powerpc/ffi.c \
+ src/powerpc/sysv.S src/powerpc/linux64.S \
+@@ -38,6 +39,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
+ src/bfin/ffitarget.h src/bfin/sysv.S src/frv/eabi.S \
+ src/frv/ffitarget.h src/dlmalloc.c src/tile/ffi.c \
+ src/tile/ffitarget.h src/tile/tile.S libtool-version \
++ src/vax/ffi.c src/vax/ffitarget.h src/vax/elfbsd.S \
+ src/xtensa/ffitarget.h src/xtensa/ffi.c src/xtensa/sysv.S \
+ ChangeLog.libffi m4/libtool.m4 m4/lt~obsolete.m4 \
+ m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \
+@@ -149,6 +151,9 @@ endif
+ if M68K
+ nodist_libffi_la_SOURCES += src/m68k/ffi.c src/m68k/sysv.S
+ endif
++if M88K
++nodist_libffi_la_SOURCES += src/m88k/ffi.c src/m88k/obsd.S
++endif
+ if MOXIE
+ nodist_libffi_la_SOURCES += src/moxie/ffi.c src/moxie/eabi.S
+ endif
+@@ -212,6 +217,9 @@ endif
+ if METAG
+ nodist_libffi_la_SOURCES += src/metag/sysv.S src/metag/ffi.c
+ endif
++if VAX
++nodist_libffi_la_SOURCES += src/vax/elfbsd.S src/vax/ffi.c
++endif
+
+ libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
+ nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)
diff --git a/frida-libffi/patches/patch-aa b/frida-libffi/patches/patch-aa
index cc26834c67..5ea53e4404 100644
--- a/frida-libffi/patches/patch-aa
+++ b/frida-libffi/patches/patch-aa
@@ -1,12 +1,12 @@
-$NetBSD: patch-aa,v 1.24 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-aa,v 1.20 2014/06/01 03:53:03 ryoon Exp $
-Add more platforms to list which don't support writeable and executable heap.
-Other various platform changes.
+* unwind: from https://github.com/atgreen/libffi/commit/76d19d004e36e99d261ee78261e2f52cea5e4ab1#diff-e2d5a00791bce9a01f99bc6fd613a39d
+ Fix build under OpenBSD 5.5
---- configure.orig 2014-11-12 11:59:57.000000000 +0000
+--- configure.orig 2013-03-17 22:36:19.000000000 +0000
+++ configure
-@@ -654,6 +654,8 @@ VAX_FALSE
- VAX_TRUE
+@@ -651,6 +651,8 @@ XTENSA_FALSE
+ XTENSA_TRUE
TILE_FALSE
TILE_TRUE
+VAX_FALSE
@@ -14,7 +14,7 @@ Other various platform changes.
PA64_HPUX_FALSE
PA64_HPUX_TRUE
PA_HPUX_FALSE
-@@ -17120,7 +17122,7 @@ case "$host" in
+@@ -13331,7 +13333,7 @@ case "$host" in
TARGET=FRV; TARGETDIR=frv
;;
@@ -23,7 +23,7 @@ Other various platform changes.
TARGET=PA_LINUX; TARGETDIR=pa
;;
hppa*64-*-hpux*)
-@@ -17218,10 +17220,10 @@ case "$host" in
+@@ -13425,10 +13427,10 @@ case "$host" in
TARGET=METAG; TARGETDIR=metag
;;
@@ -31,21 +31,21 @@ Other various platform changes.
+ mips*-sgi-irix5.* | mips*-sgi-irix6.* | mips*-*-rtems*)
TARGET=MIPS; TARGETDIR=mips
;;
-- mips*-*linux* | mips*-*-openbsd*)
-+ mips*-*linux* | mips*-*-netbsd* | mips*-*-openbsd*)
+- mips*-*-linux* | mips*-*-openbsd*)
++ mips*-*-linux* | mips*-*-netbsd* | mips*-*-openbsd*)
# Support 128-bit long double for NewABI.
HAVE_LONG_DOUBLE='defined(__mips64)'
TARGET=MIPS; TARGETDIR=mips
-@@ -17251,7 +17253,7 @@ case "$host" in
+@@ -13449,7 +13451,7 @@ case "$host" in
powerpc-*-aix* | rs6000-*-aix*)
TARGET=POWERPC_AIX; TARGETDIR=powerpc
;;
- powerpc-*-freebsd* | powerpc-*-openbsd*)
+ powerpc-*-freebsd* | powerpc-*-netbsd* | powerpc-*-openbsd*)
TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
- HAVE_LONG_DOUBLE_VARIANT=1
;;
-@@ -17266,7 +17268,7 @@ case "$host" in
+ powerpc64-*-freebsd*)
+@@ -13463,7 +13465,7 @@ case "$host" in
TARGET=S390; TARGETDIR=s390
;;
@@ -54,9 +54,9 @@ Other various platform changes.
TARGET=SH; TARGETDIR=sh
;;
sh64-*-* | sh5*-*-*)
-@@ -17285,6 +17287,10 @@ case "$host" in
- TARGET=VAX; TARGETDIR=vax
- ;;
+@@ -13478,6 +13480,10 @@ case "$host" in
+ TARGET=TILE; TARGETDIR=tile
+ ;;
+ vax-*-*)
+ TARGET=VAX; TARGETDIR=vax
@@ -65,8 +65,8 @@ Other various platform changes.
xtensa*-*)
TARGET=XTENSA; TARGETDIR=xtensa
;;
-@@ -17610,6 +17616,14 @@ else
- VAX_FALSE=
+@@ -13747,6 +13753,14 @@ else
+ TILE_FALSE=
fi
+ if test x$TARGET = xVAX; then
@@ -80,29 +80,68 @@ Other various platform changes.
if test x$TARGET = xXTENSA; then
XTENSA_TRUE=
XTENSA_FALSE='#'
-@@ -18530,7 +18544,7 @@ case "$target" in
+@@ -14661,7 +14675,7 @@ case "$target" in
$as_echo "#define FFI_EXEC_TRAMPOLINE_TABLE 1" >>confdefs.h
;;
- *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-openbsd* | *-pc-solaris*)
-+ *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-netbsd* | *-*-openbsd* | *-*-solaris*)
++ *-apple-darwin1* | *-*-freebsd* | *-*-kfreebsd* | *-*-netbsd* | *-*-openbsd* | *-pc-solaris*)
$as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h
-@@ -18725,11 +18739,6 @@ if test "x$GCC" = "xyes"; then
- toolexecdir="${libdir}"/gcc-lib/'$(target_alias)'
- toolexeclibdir="${libdir}"
+@@ -14678,16 +14692,32 @@ fi
+
+
+ if test x$TARGET = xX86_64; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports unwind section type" >&5
+-$as_echo_n "checking assembler supports unwind section type... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking toolchain supports unwind section type" >&5
++$as_echo_n "checking toolchain supports unwind section type... " >&6; }
+ if ${libffi_cv_as_x86_64_unwind_section_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+ else
+
+- libffi_cv_as_x86_64_unwind_section_type=yes
+- echo '.section .eh_frame,"a",@unwind' > conftest.s
+- if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then
+- libffi_cv_as_x86_64_unwind_section_type=no
++ cat > conftest1.s << EOF
++.text
++.globl foo
++foo:
++jmp bar
++.section .eh_frame,"a",@unwind
++bar:
++EOF
++
++ cat > conftest2.c << EOF
++extern void foo();
++int main(){foo();}
++EOF
++
++ libffi_cv_as_x86_64_unwind_section_type=no
++ # we ensure that we can compile _and_ link an assembly file containing an @unwind section
++ # since the compiler can support it and not the linker (ie old binutils)
++ if $CC -Wa,--fatal-warnings $CFLAGS -c conftest1.s > /dev/null 2>&1 && \
++ $CC conftest2.c conftest1.o > /dev/null 2>&1 ; then
++ libffi_cv_as_x86_64_unwind_section_type=yes
+ fi
+
+ fi
+@@ -14840,11 +14870,6 @@ if test "x$GCC" = "xyes"; then
+ toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
+ toolexeclibdir='$(libdir)'
fi
-- multi_os_directory=`$CC $CFLAGS -print-multi-os-directory`
+- multi_os_directory=`$CC -print-multi-os-directory`
- case $multi_os_directory in
- .) ;; # Avoid trailing /.
- ../*) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
- esac
else
- toolexeclibdir="${libdir}"
-@@ -19052,6 +19061,10 @@ if test -z "${VAX_TRUE}" && test -z "${V
- as_fn_error $? "conditional \"VAX\" was never defined.
+ toolexeclibdir='$(libdir)'
+@@ -15135,6 +15160,10 @@ if test -z "${TILE_TRUE}" && test -z "${
+ as_fn_error $? "conditional \"TILE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${VAX_TRUE}" && test -z "${VAX_FALSE}"; then
@@ -112,7 +151,7 @@ Other various platform changes.
if test -z "${XTENSA_TRUE}" && test -z "${XTENSA_FALSE}"; then
as_fn_error $? "conditional \"XTENSA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
-@@ -20749,13 +20762,13 @@ s/ [a-zA-Z0-9-]*-all [a-zA-Z0-9-]*-all-a
+@@ -16734,13 +16763,13 @@ s/ [a-zA-Z0-9-]*-all [a-zA-Z0-9-]*-all-a
/-all-all/d
a\\
@ HOST="\$(HOST)\" \\\\\\
diff --git a/frida-libffi/patches/patch-ac b/frida-libffi/patches/patch-ac
index 69ea7b4b6e..5fd6bf8d70 100644
--- a/frida-libffi/patches/patch-ac
+++ b/frida-libffi/patches/patch-ac
@@ -1,10 +1,10 @@
-$NetBSD: patch-ac,v 1.3 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-ac,v 1.2 2010/01/16 16:28:58 asau Exp $
Install header files in backwards compatible way.
---- include/Makefile.in.orig 2014-11-12 11:59:58.000000000 +0000
-+++ include/Makefile.in
-@@ -314,7 +314,7 @@ top_srcdir = @top_srcdir@
+--- include/Makefile.in.orig 2009-12-31 15:41:01.000000000 +0300
++++ include/Makefile.in 2010-01-12 12:43:57.000000000 +0300
+@@ -203,7 +203,7 @@
AUTOMAKE_OPTIONS = foreign
DISTCLEANFILES = ffitarget.h
EXTRA_DIST = ffi.h.in ffi_common.h
diff --git a/frida-libffi/patches/patch-ad b/frida-libffi/patches/patch-ad
index 06a2d0e8cc..514eff5d80 100644
--- a/frida-libffi/patches/patch-ad
+++ b/frida-libffi/patches/patch-ad
@@ -1,13 +1,13 @@
-$NetBSD: patch-ad,v 1.3 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-ad,v 1.1 2008/10/11 22:33:56 dholland Exp $
Install header files in backwards compatible way.
---- libffi.pc.in.orig 2014-11-08 12:47:24.000000000 +0000
-+++ libffi.pc.in
-@@ -2,7 +2,7 @@ prefix=@prefix@
+--- libffi.pc.in.orig 2008-10-09 12:38:02.000000000 +0400
++++ libffi.pc.in 2008-10-09 12:41:54.000000000 +0400
+@@ -1,7 +1,7 @@
+ prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
- toolexeclibdir=@toolexeclibdir@
-includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include
+includedir=@includedir@
diff --git a/frida-libffi/patches/patch-ae b/frida-libffi/patches/patch-ae
index 475fbcda0b..8ca294a9df 100644
--- a/frida-libffi/patches/patch-ae
+++ b/frida-libffi/patches/patch-ae
@@ -1,8 +1,8 @@
-$NetBSD: patch-ae,v 1.8 2016/11/03 11:40:28 maya Exp $
+$NetBSD: patch-ae,v 1.6 2014/02/11 07:21:28 dholland Exp $
Make a minimal adjustment to support the various NetBSD mips ports.
---- src/mips/ffitarget.h.orig 2014-11-08 12:47:24.000000000 +0000
+--- src/mips/ffitarget.h.orig 2012-04-12 02:46:06.000000000 +0000
+++ src/mips/ffitarget.h
@@ -32,7 +32,7 @@
#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead."
@@ -25,3 +25,16 @@ Make a minimal adjustment to support the various NetBSD mips ports.
#endif
# ifndef _ABIN32
+@@ -55,6 +57,12 @@
+ # define _ABIO32 _MIPS_SIM_ABI32
+ # endif
+
++#ifdef __NetBSD__
++/* Let's cheat a bit... */
++# define _ABIO32 1
++# define _MIPS_SIM _ABIO32
++#endif
++
+ #if !defined(_MIPS_SIM)
+ # error -- something is very wrong --
+ #else
diff --git a/frida-libffi/patches/patch-af b/frida-libffi/patches/patch-af
index c9f5dcbfaa..3b6ed649b1 100644
--- a/frida-libffi/patches/patch-af
+++ b/frida-libffi/patches/patch-af
@@ -1,10 +1,30 @@
-$NetBSD: patch-af,v 1.5 2016/11/03 11:40:28 maya Exp $
+$NetBSD: patch-af,v 1.3 2012/09/14 23:45:27 asau Exp $
Fixes to support the various NetBSD mips ports.
---- src/mips/ffi.c.orig 2014-11-08 12:47:24.000000000 +0000
-+++ src/mips/ffi.c
-@@ -472,6 +477,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif
+--- src/mips/ffi.c.orig 2011-08-23 18:28:08.000000000 +0400
++++ src/mips/ffi.c 2012-02-19 20:04:17.000000000 +0400
+@@ -33,12 +33,17 @@
+
+ #ifdef __GNUC__
+ # if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))
+-# define USE__BUILTIN___CLEAR_CACHE 1
++# if !defined(__NetBSD__)
++# define USE__BUILTIN___CLEAR_CACHE 1
++# endif
+ # endif
+ #endif
+
+ #ifndef USE__BUILTIN___CLEAR_CACHE
+-# if defined(__OpenBSD__)
++# if defined(__NetBSD__)
++# include <mips/cachectl.h>
++# define cacheflush _cacheflush
++# elif defined(__OpenBSD__)
+ # include <mips64/sysarch.h>
+ # else
+ # include <sys/cachectl.h>
+@@ -465,6 +470,7 @@
((cif->arg_types)[index]->type << (arg_reg * FFI_FLAG_BITS));
arg_reg++;
break;
@@ -12,7 +32,7 @@ Fixes to support the various NetBSD mips ports.
case FFI_TYPE_LONGDOUBLE:
/* Align it. */
arg_reg = ALIGN(arg_reg, 2);
-@@ -490,7 +496,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif
+@@ -483,7 +489,7 @@
arg_reg++;
}
break;
@@ -21,7 +41,7 @@ Fixes to support the various NetBSD mips ports.
case FFI_TYPE_STRUCT:
loc = arg_reg * FFI_SIZEOF_ARG;
cif->flags += calc_n32_struct_flags(soft_float,
-@@ -552,6 +558,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif
+@@ -545,6 +551,7 @@
cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8);
break;
@@ -29,7 +49,7 @@ Fixes to support the various NetBSD mips ports.
case FFI_TYPE_LONGDOUBLE:
/* Long double is returned as if it were a struct containing
two doubles. */
-@@ -568,6 +575,7 @@ ffi_status ffi_prep_cif_machdep(ffi_cif
+@@ -561,6 +568,7 @@
<< (4 + (FFI_FLAG_BITS * 8));
}
break;
diff --git a/frida-libffi/patches/patch-ag b/frida-libffi/patches/patch-ag
index 84acda3053..6033bfbc3f 100644
--- a/frida-libffi/patches/patch-ag
+++ b/frida-libffi/patches/patch-ag
@@ -1,10 +1,10 @@
-$NetBSD: patch-ag,v 1.2 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-ag,v 1.1 2009/05/26 12:27:12 he Exp $
The %Lf printf format expects "long double", so cast args accordingly.
---- testsuite/libffi.call/float2.c.orig 2014-11-08 12:47:24.000000000 +0000
+--- testsuite/libffi.call/float2.c.orig 2008-01-29 16:15:20.000000000 +0100
+++ testsuite/libffi.call/float2.c
-@@ -45,7 +45,7 @@ int main (void)
+@@ -44,7 +44,7 @@ int main (void)
/* This is ifdef'd out for now. long double support under SunOS/gcc
is pretty much non-existent. You'll get the odd bus error in library
routines like printf(). */
diff --git a/frida-libffi/patches/patch-ah b/frida-libffi/patches/patch-ah
new file mode 100644
index 0000000000..fd636e3ab5
--- /dev/null
+++ b/frida-libffi/patches/patch-ah
@@ -0,0 +1,26 @@
+$NetBSD: patch-ah,v 1.1 2009/09/20 13:10:30 tnn Exp $
+
+--- src/alpha/ffi.c.orig 2008-02-26 18:34:36.000000000 +0100
++++ src/alpha/ffi.c
+@@ -27,6 +27,9 @@
+ #include <ffi.h>
+ #include <ffi_common.h>
+ #include <stdlib.h>
++#ifndef __GNUC__
++#include <c_asm.h>
++#endif
+
+ /* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE;
+ all further uses in this file will refer to the 128-bit type. */
+@@ -195,7 +198,11 @@ ffi_prep_closure_loc (ffi_closure* closu
+ instead, since both Compaq as and gas can handle it.
+
+ 0x86 is PAL_imb in Tru64 UNIX <alpha/pal.h>. */
++#ifdef __GNUC__
+ asm volatile ("call_pal 0x86" : : : "memory");
++#else /* Compaq C compiler */
++ asm ("call_pal 0x86");
++#endif
+
+ return FFI_OK;
+ }
diff --git a/frida-libffi/patches/patch-ai b/frida-libffi/patches/patch-ai
new file mode 100644
index 0000000000..a0ec8299a9
--- /dev/null
+++ b/frida-libffi/patches/patch-ai
@@ -0,0 +1,20 @@
+$NetBSD: patch-ai,v 1.2 2010/01/16 16:28:58 asau Exp $
+
+--- include/ffi_common.h.orig 2009-12-29 18:22:26.000000000 +0300
++++ include/ffi_common.h 2010-01-12 12:47:54.000000000 +0300
+@@ -99,6 +99,15 @@
+ typedef uint64_t UINT64;
+ typedef int64_t SINT64;
+ # endif
++#elif defined(__digital__) && !defined(__GNUC__) /* XXX tnn: check sunpro */
++typedef unsigned int UINT8;
++typedef signed int SINT8;
++typedef unsigned int UINT16;
++typedef signed int SINT16;
++typedef unsigned int UINT32;
++typedef signed int SINT32;
++typedef unsigned int UINT64;
++typedef signed int SINT64;
+ #else
+ typedef unsigned int UINT8 __attribute__((__mode__(__QI__)));
+ typedef signed int SINT8 __attribute__((__mode__(__QI__)));
diff --git a/frida-libffi/patches/patch-aj b/frida-libffi/patches/patch-aj
index 0c4a5899e1..b9a2a25101 100644
--- a/frida-libffi/patches/patch-aj
+++ b/frida-libffi/patches/patch-aj
@@ -1,8 +1,6 @@
-$NetBSD: patch-aj,v 1.5 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-aj,v 1.4 2012/09/14 23:45:27 asau Exp $
-NetBSD/m68k support.
-
---- src/m68k/ffi.c.orig 2014-11-08 12:47:24.000000000 +0000
+--- src/m68k/ffi.c.orig 2012-04-12 02:46:06.000000000 +0000
+++ src/m68k/ffi.c
@@ -9,8 +9,11 @@
@@ -17,7 +15,7 @@ NetBSD/m68k support.
#else
#include <sys/syscall.h>
#ifdef __MINT__
-@@ -345,8 +348,10 @@ ffi_prep_closure_loc (ffi_closure* closu
+@@ -335,8 +338,10 @@ ffi_prep_closure_loc (ffi_closure* closu
else
*(void **)(closure->tramp + 8) = ffi_closure_SYSV;
diff --git a/frida-libffi/patches/patch-configure.ac b/frida-libffi/patches/patch-configure.ac
new file mode 100644
index 0000000000..aa6fe6816d
--- /dev/null
+++ b/frida-libffi/patches/patch-configure.ac
@@ -0,0 +1,51 @@
+$NetBSD: patch-configure.ac,v 1.2 2014/02/11 07:21:28 dholland Exp $
+
+--- configure.ac.orig 2014-02-11 07:13:01.000000000 +0000
++++ configure.ac
+@@ -191,6 +191,10 @@ case "$host" in
+ TARGET=M68K; TARGETDIR=m68k
+ ;;
+
++ m88k-*-*)
++ TARGET=M88K; TARGETDIR=m88k
++ ;;
++
+ microblaze*-*-*)
+ TARGET=MICROBLAZE; TARGETDIR=microblaze
+ ;;
+@@ -203,7 +207,7 @@ case "$host" in
+ TARGET=METAG; TARGETDIR=metag
+ ;;
+
+- mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*)
++ mips*-sgi-irix5.* | mips*-sgi-irix6.* | mips*-*-rtems*)
+ TARGET=MIPS; TARGETDIR=mips
+ ;;
+ mips*-*-linux* | mips*-*-openbsd*)
+@@ -256,6 +260,10 @@ case "$host" in
+ TARGET=TILE; TARGETDIR=tile
+ ;;
+
++ vax-*-*)
++ TARGET=VAX; TARGETDIR=vax
++ ;;
++
+ xtensa*-*)
+ TARGET=XTENSA; TARGETDIR=xtensa
+ ;;
+@@ -281,6 +289,7 @@ AM_CONDITIONAL(ALPHA, test x$TARGET = xA
+ AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
+ AM_CONDITIONAL(M32R, test x$TARGET = xM32R)
+ AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
++AM_CONDITIONAL(M88K, test x$TARGET = xM88K)
+ AM_CONDITIONAL(MICROBLAZE, test x$TARGET = xMICROBLAZE)
+ AM_CONDITIONAL(METAG, test x$TARGET = xMETAG)
+ AM_CONDITIONAL(MOXIE, test x$TARGET = xMOXIE)
+@@ -301,6 +310,7 @@ AM_CONDITIONAL(PA_LINUX, test x$TARGET =
+ AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX)
+ AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX)
+ AM_CONDITIONAL(TILE, test x$TARGET = xTILE)
++AM_CONDITIONAL(VAX, test x$TARGET = xVAX)
+ AM_CONDITIONAL(XTENSA, test x$TARGET = xXTENSA)
+
+ AC_HEADER_STDC
diff --git a/frida-libffi/patches/patch-fficonfig.h.in b/frida-libffi/patches/patch-fficonfig.h.in
new file mode 100644
index 0000000000..2285977d79
--- /dev/null
+++ b/frida-libffi/patches/patch-fficonfig.h.in
@@ -0,0 +1,14 @@
+$NetBSD: patch-fficonfig.h.in,v 1.1 2012/05/30 09:13:16 jperkin Exp $
+
+--- fficonfig.h.in.orig Wed May 30 08:53:33 2012
++++ fficonfig.h.in Wed May 30 08:54:03 2012
+@@ -46,6 +46,9 @@
+ /* Define if your assembler supports PC relative relocs. */
+ #undef HAVE_AS_X86_PCREL
+
++/* Define if your assembler supports unwind section type. */
++#undef HAVE_AS_X86_64_UNWIND_SECTION_TYPE
++
+ /* Define to 1 if you have the <dlfcn.h> header file. */
+ #undef HAVE_DLFCN_H
+
diff --git a/frida-libffi/patches/patch-src_alpha_osf.S b/frida-libffi/patches/patch-src_alpha_osf.S
deleted file mode 100644
index ec3901e3b2..0000000000
--- a/frida-libffi/patches/patch-src_alpha_osf.S
+++ /dev/null
@@ -1,26 +0,0 @@
-$NetBSD: patch-src_alpha_osf.S,v 1.2 2016/01/25 17:56:39 jperkin Exp $
-
-Band-aid update of the alpha asm code to make it compile past the addition
-of type complex. Someone with clue on the alpha ELF ABI should provide
-real support for complex arguments.
-
---- src/alpha/osf.S.orig 2014-11-08 12:47:24.000000000 +0000
-+++ src/alpha/osf.S
-@@ -279,6 +279,7 @@ $load_table:
- .gprel32 $load_64 # FFI_TYPE_SINT64
- .gprel32 $load_none # FFI_TYPE_STRUCT
- .gprel32 $load_64 # FFI_TYPE_POINTER
-+ .gprel32 $load_none # FFI_TYPE_COMPLEX
-
- /* Assert that the table above is in sync with ffi.h. */
-
-@@ -294,7 +295,8 @@ $load_table:
- || FFI_TYPE_SINT64 != 12 \
- || FFI_TYPE_STRUCT != 13 \
- || FFI_TYPE_POINTER != 14 \
-- || FFI_TYPE_LAST != 14
-+ || FFI_TYPE_COMPLEX != 15 \
-+ || FFI_TYPE_LAST != 15
- #error "osf.S out of sync with ffi.h"
- #endif
-
diff --git a/frida-libffi/patches/patch-src_arm_sysv.S b/frida-libffi/patches/patch-src_arm_sysv.S
index ac8afad366..fd116b9807 100644
--- a/frida-libffi/patches/patch-src_arm_sysv.S
+++ b/frida-libffi/patches/patch-src_arm_sysv.S
@@ -1,8 +1,6 @@
-$NetBSD: patch-src_arm_sysv.S,v 1.7 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-src_arm_sysv.S,v 1.4 2014/06/11 11:45:04 joerg Exp $
-ARM fixes.
-
---- src/arm/sysv.S.orig 2014-11-08 12:47:24.000000000 +0000
+--- src/arm/sysv.S.orig 2013-03-16 11:19:39.000000000 +0000
+++ src/arm/sysv.S
@@ -25,6 +25,8 @@
DEALINGS IN THE SOFTWARE.
@@ -22,23 +20,23 @@ ARM fixes.
#define UNWIND
#else
#define UNWIND @
-@@ -121,6 +123,7 @@
- bx pc; \
- nop; \
- .arm; \
-+ .cfi_startproc; \
- UNWIND .fnstart; \
- _L__##name:
- #else
-@@ -129,6 +132,7 @@ _L__##name:
- .align 2; \
- .arm; \
- ENTRY(name); \
-+ .cfi_startproc; \
+@@ -125,6 +127,7 @@
+ nop
+ .arm
+ UNWIND .fnstart
++ .cfi_startproc
+ /* A hook to tell gdb that we've switched to ARM mode. Also used to call
+ directly from other local arm routines. */
+ #ifdef __APPLE__
+@@ -144,6 +147,7 @@ _L__\name:
+ ENTRY(\name)
+ #endif
UNWIND .fnstart
++ .cfi_startproc
+ .endm
#endif
-@@ -160,6 +164,7 @@ ARM_FUNC_START(ffi_call_SYSV)
+@@ -175,6 +179,7 @@ ARM_FUNC_START ffi_call_SYSV
@ Save registers
stmfd sp!, {r0-r3, fp, lr}
UNWIND .save {r0-r3, fp, lr}
@@ -46,7 +44,16 @@ ARM fixes.
mov fp, sp
UNWIND .setfp fp, sp
-@@ -238,6 +243,7 @@ LSYM(Lepilogue):
+@@ -228,7 +233,7 @@ ARM_FUNC_START ffi_call_SYSV
+ #if defined(__SOFTFP__) || defined(__ARM_EABI__)
+ cmpne r3, #FFI_TYPE_DOUBLE
+ #endif
+- stmeqia r2, {r0, r1}
++ stmiaeq r2, {r0, r1}
+
+ #if !defined(__SOFTFP__) && !defined(__ARM_EABI__)
+ beq LSYM(Lepilogue)
+@@ -253,6 +258,7 @@ LSYM(Lepilogue):
.ffi_call_SYSV_end:
UNWIND .fnend
@@ -54,7 +61,7 @@ ARM fixes.
#ifdef __ELF__
.size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV)
#endif
-@@ -313,6 +319,7 @@ ARM_FUNC_START(ffi_closure_SYSV)
+@@ -328,6 +334,7 @@ ARM_FUNC_START ffi_closure_SYSV
.ffi_closure_SYSV_end:
UNWIND .fnend
@@ -62,7 +69,7 @@ ARM fixes.
#ifdef __ELF__
.size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV)
#endif
-@@ -396,7 +403,7 @@ LSYM(Lbase_args):
+@@ -410,7 +417,7 @@ LSYM(Lbase_args):
beq LSYM(Lepilogue_vfp)
cmp r3, #FFI_TYPE_SINT64
@@ -71,7 +78,7 @@ ARM fixes.
beq LSYM(Lepilogue_vfp)
cmp r3, #FFI_TYPE_FLOAT
-@@ -416,6 +423,7 @@ LSYM(Lepilogue_vfp):
+@@ -430,6 +437,7 @@ LSYM(Lepilogue_vfp):
.ffi_call_VFP_end:
UNWIND .fnend
@@ -79,7 +86,7 @@ ARM fixes.
.size CNAME(ffi_call_VFP),.ffi_call_VFP_end-CNAME(ffi_call_VFP)
-@@ -478,6 +486,7 @@ ARM_FUNC_START(ffi_closure_VFP)
+@@ -492,6 +500,7 @@ ARM_FUNC_START ffi_closure_VFP
.ffi_closure_VFP_end:
UNWIND .fnend
diff --git a/frida-libffi/patches/patch-src_closures.c b/frida-libffi/patches/patch-src_closures.c
deleted file mode 100644
index a135fecb8f..0000000000
--- a/frida-libffi/patches/patch-src_closures.c
+++ /dev/null
@@ -1,94 +0,0 @@
-$NetBSD: patch-src_closures.c,v 1.2 2017/09/05 15:08:42 joerg Exp $
-
---- src/closures.c.orig 2017-05-22 23:16:12.516083134 +0000
-+++ src/closures.c
-@@ -33,6 +33,83 @@
- #include <ffi.h>
- #include <ffi_common.h>
-
-+#ifdef __NetBSD__
-+#include <sys/param.h>
-+#endif
-+
-+#if __NetBSD_Version__ - 0 >= 799007200
-+/* NetBSD with PROT_MPROTECT */
-+#include <sys/mman.h>
-+
-+#include <stddef.h>
-+#include <unistd.h>
-+
-+static const size_t overhead =
-+ (sizeof(max_align_t) > sizeof(void *) + sizeof(size_t)) ?
-+ sizeof(max_align_t)
-+ : sizeof(void *) + sizeof(size_t);
-+
-+#define ADD_TO_POINTER(p, d) ((void *)((uintptr_t)(p) + (d)))
-+
-+void *
-+ffi_closure_alloc (size_t size, void **code)
-+{
-+ static size_t page_size;
-+ size_t rounded_size;
-+ void *codeseg, *dataseg;
-+ int prot;
-+
-+
-+ /* Expect that PAX mprotect is active and a separate code mapping is necessary. */
-+ if (!code)
-+ return NULL;
-+
-+ /* Obtain system page size. */
-+ if (!page_size)
-+ page_size = sysconf(_SC_PAGESIZE);
-+
-+ /* Round allocation size up to the next page, keeping in mind the size field and pointer to code map. */
-+ rounded_size = (size + overhead + page_size - 1) & ~(page_size - 1);
-+
-+ /* Primary mapping is RW, but request permission to switch to PROT_EXEC later. */
-+ prot = PROT_READ | PROT_WRITE | PROT_MPROTECT(PROT_EXEC);
-+ dataseg = mmap(NULL, rounded_size, prot, MAP_ANON | MAP_PRIVATE, -1, 0);
-+ if (dataseg == MAP_FAILED)
-+ return NULL;
-+
-+ /* Create secondary mapping and switch it to RX. */
-+ codeseg = mremap(dataseg, rounded_size, NULL, rounded_size, MAP_REMAPDUP);
-+ if (codeseg == MAP_FAILED) {
-+ munmap(dataseg, rounded_size);
-+ return NULL;
-+ }
-+ if (mprotect(codeseg, rounded_size, PROT_READ | PROT_EXEC) == -1) {
-+ munmap(codeseg, rounded_size);
-+ munmap(dataseg, rounded_size);
-+ return NULL;
-+ }
-+
-+ /* Remember allocation size and location of the secondary mapping for ffi_closure_free. */
-+ memcpy(dataseg, &rounded_size, sizeof(rounded_size));
-+ memcpy(ADD_TO_POINTER(dataseg, sizeof(size_t)), &codeseg, sizeof(void *));
-+ *code = ADD_TO_POINTER(codeseg, overhead);
-+ return ADD_TO_POINTER(dataseg, overhead);
-+}
-+
-+void
-+ffi_closure_free (void *ptr)
-+{
-+ void *codeseg, *dataseg;
-+ size_t rounded_size;
-+
-+ dataseg = ADD_TO_POINTER(ptr, -overhead);
-+ memcpy(&rounded_size, dataseg, sizeof(rounded_size));
-+ memcpy(&codeseg, ADD_TO_POINTER(dataseg, sizeof(size_t)), sizeof(void *));
-+ munmap(dataseg, rounded_size);
-+ munmap(codeseg, rounded_size);
-+}
-+#else /* !NetBSD with PROT_MPROTECT */
-+
- #if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE
- # if __gnu_linux__ && !defined(__ANDROID__)
- /* This macro indicates it may be forbidden to map anonymous memory
-@@ -686,3 +763,5 @@ ffi_closure_free (void *ptr)
-
- # endif /* ! FFI_MMAP_EXEC_WRIT */
- #endif /* FFI_CLOSURES */
-+
-+#endif /* NetBSD with PROT_MPROTECT */
diff --git a/frida-libffi/patches/patch-src_m88k_elfbsd.S b/frida-libffi/patches/patch-src_m88k_elfbsd.S
index 943d22a337..644ce2c221 100644
--- a/frida-libffi/patches/patch-src_m88k_elfbsd.S
+++ b/frida-libffi/patches/patch-src_m88k_elfbsd.S
@@ -1,8 +1,6 @@
-$NetBSD: patch-src_m88k_elfbsd.S,v 1.2 2016/01/25 17:56:39 jperkin Exp $
+$NetBSD: patch-src_m88k_elfbsd.S,v 1.1 2013/11/03 23:51:51 jklos Exp $
-m88k support.
-
---- src/m88k/elfbsd.S.orig 2016-01-25 17:24:51.000000000 +0000
+--- src/m88k/elfbsd.S.orig 2013-11-03 22:57:57.000000000 +0000
+++ src/m88k/elfbsd.S
@@ -0,0 +1,195 @@
+/*
diff --git a/frida-libffi/patches/patch-src_m88k_ffi.c b/frida-libffi/patches/patch-src_m88k_ffi.c
new file mode 100644
index 0000000000..3eb5cdce8b
--- /dev/null
+++ b/frida-libffi/patches/patch-src_m88k_ffi.c
@@ -0,0 +1,405 @@
+$NetBSD: patch-src_m88k_ffi.c,v 1.1 2013/11/03 23:51:51 jklos Exp $
+
+--- src/m88k/ffi.c.orig 2013-11-03 22:59:04.000000000 +0000
++++ src/m88k/ffi.c
+@@ -0,0 +1,400 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat. <miod%openbsd.org@localhost>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * m88k Foreign Function Interface
++ *
++ * This file attempts to provide all the FFI entry points which can reliably
++ * be implemented in C.
++ *
++ * Only OpenBSD/m88k is currently supported; other platforms (such as
++ * Motorola's SysV/m88k) could be supported with the following tweaks:
++ *
++ * - non-OpenBSD systems use an `outgoing parameter area' as part of the
++ * 88BCS calling convention, which is not supported under OpenBSD from
++ * release 3.6 onwards. Supporting it should be as easy as taking it
++ * into account when adjusting the stack, in the assembly code.
++ *
++ * - the logic deciding whether a function argument gets passed through
++ * registers, or on the stack, has changed several times in OpenBSD in
++ * edge cases (especially for structs larger than 32 bytes being passed
++ * by value). The code below attemps to match the logic used by the
++ * system compiler of OpenBSD 5.3, i.e. gcc 3.3.6 with many m88k backend
++ * fixes.
++ */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++#include <unistd.h>
++
++void ffi_call_OBSD (unsigned int, extended_cif *, unsigned int, void *,
++ void (*fn) ());
++void *ffi_prep_args (void *, extended_cif *);
++void ffi_closure_OBSD (ffi_closure *);
++void ffi_closure_struct_OBSD (ffi_closure *);
++unsigned int ffi_closure_OBSD_inner (ffi_closure *, void *, unsigned int *,
++ char *);
++void ffi_cacheflush_OBSD (unsigned int, unsigned int);
++
++#define CIF_FLAGS_INT (1 << 0)
++#define CIF_FLAGS_DINT (1 << 1)
++
++/*
++ * Foreign Function Interface API
++ */
++
++/* ffi_prep_args is called by the assembly routine once stack space has
++ been allocated for the function's arguments. */
++
++void *
++ffi_prep_args (void *stack, extended_cif *ecif)
++{
++ unsigned int i;
++ void **p_argv;
++ char *argp, *stackp;
++ unsigned int *regp;
++ unsigned int regused;
++ ffi_type **p_arg;
++ void *struct_value_ptr;
++
++ regp = (unsigned int *)stack;
++ stackp = (char *)(regp + 8);
++ regused = 0;
++
++ if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
++ && !ecif->cif->flags)
++ struct_value_ptr = ecif->rvalue;
++ else
++ struct_value_ptr = NULL;
++
++ p_argv = ecif->avalue;
++
++ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i != 0; i--, p_arg++)
++ {
++ size_t z;
++ unsigned short t, a;
++
++ z = (*p_arg)->size;
++ t = (*p_arg)->type;
++ a = (*p_arg)->alignment;
++
++ /*
++ * Figure out whether the argument can be passed through registers
++ * or on the stack.
++ * The rule is that registers can only receive simple types not larger
++ * than 64 bits, or structs the exact size of a register and aligned to
++ * the size of a register.
++ */
++ if (t == FFI_TYPE_STRUCT)
++ {
++ if (z == sizeof (int) && a == sizeof (int) && regused < 8)
++ argp = (char *)regp;
++ else
++ argp = stackp;
++ }
++ else
++ {
++ if (z > sizeof (int) && regused < 8 - 1)
++ {
++ /* align to an even register pair */
++ if (regused & 1)
++ {
++ regp++;
++ regused++;
++ }
++ }
++ if (regused < 8)
++ argp = (char *)regp;
++ else
++ argp = stackp;
++ }
++
++ /* Enforce proper stack alignment of 64-bit types */
++ if (argp == stackp && a > sizeof (int))
++ {
++ stackp = (char *) ALIGN(stackp, a);
++ argp = stackp;
++ }
++
++ switch (t)
++ {
++ case FFI_TYPE_SINT8:
++ *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
++ break;
++
++ case FFI_TYPE_UINT8:
++ *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv;
++ break;
++
++ case FFI_TYPE_SINT16:
++ *(signed int *) argp = (signed int) *(SINT16 *) *p_argv;
++ break;
++
++ case FFI_TYPE_UINT16:
++ *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv;
++ break;
++
++ case FFI_TYPE_INT:
++ case FFI_TYPE_FLOAT:
++ case FFI_TYPE_UINT32:
++ case FFI_TYPE_SINT32:
++ case FFI_TYPE_POINTER:
++ *(unsigned int *) argp = *(unsigned int *) *p_argv;
++ break;
++
++ case FFI_TYPE_DOUBLE:
++ case FFI_TYPE_UINT64:
++ case FFI_TYPE_SINT64:
++ case FFI_TYPE_STRUCT:
++ memcpy (argp, *p_argv, z);
++ break;
++
++ default:
++ FFI_ASSERT (0);
++ }
++
++ /* Align if necessary. */
++ if ((sizeof (int) - 1) & z)
++ z = ALIGN(z, sizeof (int));
++
++ p_argv++;
++
++ /* Be careful, once all registers are filled, and about to continue
++ on stack, regp == stackp. Therefore the check for regused as well. */
++ if (argp == (char *)regp && regused < 8)
++ {
++ regp += z / sizeof (int);
++ regused += z / sizeof (int);
++ }
++ else
++ stackp += z;
++ }
++
++ return struct_value_ptr;
++}
++
++/* Perform machine dependent cif processing */
++ffi_status
++ffi_prep_cif_machdep (ffi_cif *cif)
++{
++ /* Set the return type flag */
++ switch (cif->rtype->type)
++ {
++ case FFI_TYPE_VOID:
++ cif->flags = 0;
++ break;
++
++ case FFI_TYPE_STRUCT:
++ if (cif->rtype->size == sizeof (int) &&
++ cif->rtype->alignment == sizeof (int))
++ cif->flags = CIF_FLAGS_INT;
++ else
++ cif->flags = 0;
++ break;
++
++ case FFI_TYPE_DOUBLE:
++ case FFI_TYPE_SINT64:
++ case FFI_TYPE_UINT64:
++ cif->flags = CIF_FLAGS_DINT;
++ break;
++
++ default:
++ cif->flags = CIF_FLAGS_INT;
++ break;
++ }
++
++ return FFI_OK;
++}
++
++void
++ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue)
++{
++ extended_cif ecif;
++
++ ecif.cif = cif;
++ ecif.avalue = avalue;
++
++ /* If the return value is a struct and we don't have a return value
++ address then we need to make one. */
++
++ if (rvalue == NULL
++ && cif->rtype->type == FFI_TYPE_STRUCT
++ && (cif->rtype->size != sizeof (int)
++ || cif->rtype->alignment != sizeof (int)))
++ ecif.rvalue = alloca (cif->rtype->size);
++ else
++ ecif.rvalue = rvalue;
++
++ switch (cif->abi)
++ {
++ case FFI_OBSD:
++ ffi_call_OBSD (cif->bytes, &ecif, cif->flags, ecif.rvalue, fn);
++ break;
++
++ default:
++ FFI_ASSERT (0);
++ break;
++ }
++}
++
++/*
++ * Closure API
++ */
++
++static void
++ffi_prep_closure_args_OBSD (ffi_cif *cif, void **avalue, unsigned int *regp,
++ char *stackp)
++{
++ unsigned int i;
++ void **p_argv;
++ char *argp;
++ unsigned int regused;
++ ffi_type **p_arg;
++
++ regused = 0;
++
++ p_argv = avalue;
++
++ for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
++ {
++ size_t z;
++ unsigned short t, a;
++
++ z = (*p_arg)->size;
++ t = (*p_arg)->type;
++ a = (*p_arg)->alignment;
++
++ /*
++ * Figure out whether the argument has been passed through registers
++ * or on the stack.
++ * The rule is that registers can only receive simple types not larger
++ * than 64 bits, or structs the exact size of a register and aligned to
++ * the size of a register.
++ */
++ if (t == FFI_TYPE_STRUCT)
++ {
++ if (z == sizeof (int) && a == sizeof (int) && regused < 8)
++ argp = (char *)regp;
++ else
++ argp = stackp;
++ }
++ else
++ {
++ if (z > sizeof (int) && regused < 8 - 1)
++ {
++ /* align to an even register pair */
++ if (regused & 1)
++ {
++ regp++;
++ regused++;
++ }
++ }
++ if (regused < 8)
++ argp = (char *)regp;
++ else
++ argp = stackp;
++ }
++
++ /* Enforce proper stack alignment of 64-bit types */
++ if (argp == stackp && a > sizeof (int))
++ {
++ stackp = (char *) ALIGN(stackp, a);
++ argp = stackp;
++ }
++
++ if (z < sizeof (int) && t != FFI_TYPE_STRUCT)
++ *p_argv = (void *) (argp + sizeof (int) - z);
++ else
++ *p_argv = (void *) argp;
++
++ /* Align if necessary */
++ if ((sizeof (int) - 1) & z)
++ z = ALIGN(z, sizeof (int));
++
++ p_argv++;
++
++ /* Be careful, once all registers are exhausted, and about to fetch from
++ stack, regp == stackp. Therefore the check for regused as well. */
++ if (argp == (char *)regp && regused < 8)
++ {
++ regp += z / sizeof (int);
++ regused += z / sizeof (int);
++ }
++ else
++ stackp += z;
++ }
++}
++
++unsigned int
++ffi_closure_OBSD_inner (ffi_closure *closure, void *resp, unsigned int *regp,
++ char *stackp)
++{
++ ffi_cif *cif;
++ void **arg_area;
++
++ cif = closure->cif;
++ arg_area = (void**) alloca (cif->nargs * sizeof (void *));
++
++ ffi_prep_closure_args_OBSD(cif, arg_area, regp, stackp);
++
++ (closure->fun) (cif, resp, arg_area, closure->user_data);
++
++ return cif->flags;
++}
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure* closure, ffi_cif* cif,
++ void (*fun)(ffi_cif*,void*,void**,void*),
++ void *user_data, void *codeloc)
++{
++ unsigned int *tramp = (unsigned int *) codeloc;
++ void *fn;
++
++ FFI_ASSERT (cif->abi == FFI_OBSD);
++
++ if (cif->rtype->type == FFI_TYPE_STRUCT && !cif->flags)
++ fn = &ffi_closure_struct_OBSD;
++ else
++ fn = &ffi_closure_OBSD;
++
++ /* or.u %r10, %r0, %hi16(fn) */
++ tramp[0] = 0x5d400000 | (((unsigned int)fn) >> 16);
++ /* or.u %r13, %r0, %hi16(closure) */
++ tramp[1] = 0x5da00000 | ((unsigned int)closure >> 16);
++ /* or %r10, %r10, %lo16(fn) */
++ tramp[2] = 0x594a0000 | (((unsigned int)fn) & 0xffff);
++ /* jmp.n %r10 */
++ tramp[3] = 0xf400c40a;
++ /* or %r13, %r13, %lo16(closure) */
++ tramp[4] = 0x59ad0000 | ((unsigned int)closure & 0xffff);
++
++ ffi_cacheflush_OBSD((unsigned int)codeloc, FFI_TRAMPOLINE_SIZE);
++
++ closure->cif = cif;
++ closure->user_data = user_data;
++ closure->fun = fun;
++
++ return FFI_OK;
++}
diff --git a/frida-libffi/patches/patch-src_m88k_ffitarget.h b/frida-libffi/patches/patch-src_m88k_ffitarget.h
new file mode 100644
index 0000000000..b9e789adb7
--- /dev/null
+++ b/frida-libffi/patches/patch-src_m88k_ffitarget.h
@@ -0,0 +1,54 @@
+$NetBSD: patch-src_m88k_ffitarget.h,v 1.1 2013/11/03 23:51:51 jklos Exp $
+
+--- src/m88k/ffitarget.h.orig 2013-11-03 23:00:28.000000000 +0000
++++ src/m88k/ffitarget.h
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat. <miod%openbsd.org@localhost>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * m88k Foreign Function Interface
++ */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_ASM
++typedef unsigned long ffi_arg;
++typedef signed long ffi_sarg;
++
++typedef enum ffi_abi {
++ FFI_FIRST_ABI = 0,
++ FFI_OBSD,
++ FFI_DEFAULT_ABI = FFI_OBSD,
++ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
++} ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 0x14
++#define FFI_NATIVE_RAW_API 0
++
++#endif
diff --git a/frida-libffi/patches/patch-src_vax_elfbsd.S b/frida-libffi/patches/patch-src_vax_elfbsd.S
new file mode 100644
index 0000000000..de67548ae5
--- /dev/null
+++ b/frida-libffi/patches/patch-src_vax_elfbsd.S
@@ -0,0 +1,200 @@
+$NetBSD: patch-src_vax_elfbsd.S,v 1.1 2013/11/03 23:51:51 jklos Exp $
+
+--- src/vax/elfbsd.S.orig 2013-11-03 23:01:39.000000000 +0000
++++ src/vax/elfbsd.S
+@@ -0,0 +1,195 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat. <miod%openbsd.org@localhost>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * vax Foreign Function Interface
++ */
++
++#define LIBFFI_ASM
++#include <fficonfig.h>
++#include <ffi.h>
++
++ .text
++
++/*
++ * void * %r0
++ * ffi_call_elfbsd(extended_cif *ecif, 4(%ap)
++ * unsigned bytes, 8(%ap)
++ * unsigned flags, 12(%ap)
++ * void *rvalue, 16(%ap)
++ * void (*fn)()); 20(%ap)
++ */
++ .globl ffi_call_elfbsd
++ .type ffi_call_elfbsd,@function
++ .align 2
++ffi_call_elfbsd:
++ .word 0x00c # save R2 and R3
++
++ # Allocate stack space for the args
++ subl2 8(%ap), %sp
++
++ # Call ffi_prep_args
++ pushl %sp
++ pushl 4(%ap)
++ calls $2, ffi_prep_args
++
++ # Get function pointer
++ movl 20(%ap), %r1
++
++ # Build a CALLS frame
++ ashl $-2, 8(%ap), %r0
++ pushl %r0 # argument stack usage
++ movl %sp, %r0 # future %ap
++ # saved registers
++ bbc $11, 0(%r1), 1f
++ pushl %r11
++1: bbc $10, 0(%r1), 1f
++ pushl %r10
++1: bbc $9, 0(%r1), 1f
++ pushl %r9
++1: bbc $8, 0(%r1), 1f
++ pushl %r8
++1: bbc $7, 0(%r1), 1f
++ pushl %r7
++1: bbc $6, 0(%r1), 1f
++ pushl %r6
++1: bbc $5, 0(%r1), 1f
++ pushl %r5
++1: bbc $4, 0(%r1), 1f
++ pushl %r4
++1: bbc $3, 0(%r1), 1f
++ pushl %r3
++1: bbc $2, 0(%r1), 1f
++ pushl %r2
++1:
++ pushal 9f
++ pushl %fp
++ pushl %ap
++ movl 16(%ap), %r3 # struct return address, if needed
++ movl %r0, %ap
++ movzwl 4(%fp), %r0 # previous PSW, without the saved registers mask
++ bisl2 $0x20000000, %r0 # calls frame
++ movzwl 0(%r1), %r2
++ bicw2 $0xf003, %r2 # only keep R11-R2
++ ashl $16, %r2, %r2
++ bisl2 %r2, %r0 # saved register mask of the called function
++ pushl %r0
++ pushl $0
++ movl %sp, %fp
++
++ # Invoke the function
++ pushal 2(%r1) # skip procedure entry mask
++ movl %r3, %r1
++ bicpsw $0x000f
++ rsb
++
++9:
++ # Copy return value if necessary
++ tstl 16(%ap)
++ jeql 9f
++ movl 16(%ap), %r2
++
++ bbc $0, 12(%ap), 1f # CIF_FLAGS_CHAR
++ movb %r0, 0(%r2)
++ brb 9f
++1:
++ bbc $1, 12(%ap), 1f # CIF_FLAGS_SHORT
++ movw %r0, 0(%r2)
++ brb 9f
++1:
++ bbc $2, 12(%ap), 1f # CIF_FLAGS_INT
++ movl %r0, 0(%r2)
++ brb 9f
++1:
++ bbc $3, 12(%ap), 1f # CIF_FLAGS_DINT
++ movq %r0, 0(%r2)
++ brb 9f
++1:
++ movl %r1, %r0 # might have been a struct
++ #brb 9f
++
++9:
++ ret
++
++/*
++ * ffi_closure_elfbsd(void);
++ * invoked with %r0: ffi_closure *closure
++ */
++ .globl ffi_closure_elfbsd
++ .type ffi_closure_elfbsd, @function
++ .align 2
++ffi_closure_elfbsd:
++ .word 0
++
++ # Allocate room on stack for return value
++ subl2 $8, %sp
++
++ # Invoke the closure function
++ pushal 4(%ap) # calling stack
++ pushal 4(%sp) # return value
++ pushl %r0 # closure
++ calls $3, ffi_closure_elfbsd_inner
++
++ # Copy return value if necessary
++ bitb $1, %r0 # CIF_FLAGS_CHAR
++ beql 1f
++ movb 0(%sp), %r0
++ brb 9f
++1:
++ bitb $2, %r0 # CIF_FLAGS_SHORT
++ beql 1f
++ movw 0(%sp), %r0
++ brb 9f
++1:
++ bitb $4, %r0 # CIF_FLAGS_INT
++ beql 1f
++ movl 0(%sp), %r0
++ brb 9f
++1:
++ bitb $8, %r0 # CIF_FLAGS_DINT
++ beql 1f
++ movq 0(%sp), %r0
++ #brb 9f
++1:
++
++9:
++ ret
++
++/*
++ * ffi_closure_struct_elfbsd(void);
++ * invoked with %r0: ffi_closure *closure
++ * %r1: struct return address
++ */
++ .globl ffi_closure_struct_elfbsd
++ .type ffi_closure_struct_elfbsd, @function
++ .align 2
++ffi_closure_struct_elfbsd:
++ .word 0
++
++ # Invoke the closure function
++ pushal 4(%ap) # calling stack
++ pushl %r1 # return value
++ pushl %r0 # closure
++ calls $3, ffi_closure_elfbsd_inner
++
++ ret
diff --git a/frida-libffi/patches/patch-src_vax_ffi.c b/frida-libffi/patches/patch-src_vax_ffi.c
new file mode 100644
index 0000000000..dedcd2bb13
--- /dev/null
+++ b/frida-libffi/patches/patch-src_vax_ffi.c
@@ -0,0 +1,281 @@
+$NetBSD: patch-src_vax_ffi.c,v 1.1 2013/11/03 23:51:51 jklos Exp $
+
+--- src/vax/ffi.c.orig 2013-11-03 23:02:29.000000000 +0000
++++ src/vax/ffi.c
+@@ -0,0 +1,276 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat. <miod%openbsd.org@localhost>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * vax Foreign Function Interface
++ *
++ * This file attempts to provide all the FFI entry points which can reliably
++ * be implemented in C.
++ */
++
++#include <ffi.h>
++#include <ffi_common.h>
++
++#include <stdlib.h>
++#include <unistd.h>
++
++#define CIF_FLAGS_CHAR 1 /* for struct only */
++#define CIF_FLAGS_SHORT 2 /* for struct only */
++#define CIF_FLAGS_INT 4
++#define CIF_FLAGS_DINT 8
++
++/*
++ * Foreign Function Interface API
++ */
++
++void ffi_call_elfbsd (extended_cif *, unsigned, unsigned, void *,
++ void (*) ());
++void *ffi_prep_args (extended_cif *ecif, void *stack);
++
++void *
++ffi_prep_args (extended_cif *ecif, void *stack)
++{
++ unsigned int i;
++ void **p_argv;
++ char *argp;
++ ffi_type **p_arg;
++ void *struct_value_ptr;
++
++ argp = stack;
++
++ if (ecif->cif->rtype->type == FFI_TYPE_STRUCT
++ && !ecif->cif->flags)
++ struct_value_ptr = ecif->rvalue;
++ else
++ struct_value_ptr = NULL;
++
++ p_argv = ecif->avalue;
++
++ for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types;
++ i != 0;
++ i--, p_arg++)
++ {
++ size_t z;
++
++ z = (*p_arg)->size;
++ if (z < sizeof (int))
++ {
++ switch ((*p_arg)->type)
++ {
++ case FFI_TYPE_SINT8:
++ *(signed int *) argp = (signed int) *(SINT8 *) *p_argv;
++ break;
++
++ case FFI_TYPE_UINT8:
++ *(unsigned int *) argp = (unsigned int) *(UINT8 *) *p_argv;
++ break;
++
++ case FFI_TYPE_SINT16:
++ *(signed int *) argp = (signed int) *(SINT16 *) *p_argv;
++ break;
++
++ case FFI_TYPE_UINT16:
++ *(unsigned int *) argp = (unsigned int) *(UINT16 *) *p_argv;
++ break;
++
++ case FFI_TYPE_STRUCT:
++ memcpy (argp, *p_argv, z);
++ break;
++
++ default:
++ FFI_ASSERT (0);
++ }
++ z = sizeof (int);
++ }
++ else
++ {
++ memcpy (argp, *p_argv, z);
++
++ /* Align if necessary. */
++ if ((sizeof(int) - 1) & z)
++ z = ALIGN(z, sizeof(int));
++ }
++
++ p_argv++;
++ argp += z;
++ }
++
++ return struct_value_ptr;
++}
++
++ffi_status
++ffi_prep_cif_machdep (ffi_cif *cif)
++{
++ /* Set the return type flag */
++ switch (cif->rtype->type)
++ {
++ case FFI_TYPE_VOID:
++ cif->flags = 0;
++ break;
++
++ case FFI_TYPE_STRUCT:
++ if (cif->rtype->elements[0]->type == FFI_TYPE_STRUCT &&
++ cif->rtype->elements[1])
++ {
++ cif->flags = 0;
++ break;
++ }
++
++ if (cif->rtype->size == sizeof (char))
++ cif->flags = CIF_FLAGS_CHAR;
++ else if (cif->rtype->size == sizeof (short))
++ cif->flags = CIF_FLAGS_SHORT;
++ else if (cif->rtype->size == sizeof (int))
++ cif->flags = CIF_FLAGS_INT;
++ else if (cif->rtype->size == 2 * sizeof (int))
++ cif->flags = CIF_FLAGS_DINT;
++ else
++ cif->flags = 0;
++ break;
++
++ default:
++ if (cif->rtype->size <= sizeof (int))
++ cif->flags = CIF_FLAGS_INT;
++ else
++ cif->flags = CIF_FLAGS_DINT;
++ break;
++ }
++
++ return FFI_OK;
++}
++
++void
++ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue)
++{
++ extended_cif ecif;
++
++ ecif.cif = cif;
++ ecif.avalue = avalue;
++
++ /* If the return value is a struct and we don't have a return value
++ address then we need to make one. */
++
++ if (rvalue == NULL
++ && cif->rtype->type == FFI_TYPE_STRUCT
++ && cif->flags == 0)
++ ecif.rvalue = alloca (cif->rtype->size);
++ else
++ ecif.rvalue = rvalue;
++
++ switch (cif->abi)
++ {
++ case FFI_ELFBSD:
++ ffi_call_elfbsd (&ecif, cif->bytes, cif->flags, ecif.rvalue, fn);
++ break;
++
++ default:
++ FFI_ASSERT (0);
++ break;
++ }
++}
++
++/*
++ * Closure API
++ */
++
++void ffi_closure_elfbsd (void);
++void ffi_closure_struct_elfbsd (void);
++unsigned int ffi_closure_elfbsd_inner (ffi_closure *, void *, char *);
++
++static void
++ffi_prep_closure_elfbsd (ffi_cif *cif, void **avalue, char *stackp)
++{
++ unsigned int i;
++ void **p_argv;
++ ffi_type **p_arg;
++
++ p_argv = avalue;
++
++ for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
++ {
++ size_t z;
++
++ z = (*p_arg)->size;
++ *p_argv = stackp;
++
++ /* Align if necessary */
++ if ((sizeof (int) - 1) & z)
++ z = ALIGN(z, sizeof (int));
++
++ p_argv++;
++ stackp += z;
++ }
++}
++
++unsigned int
++ffi_closure_elfbsd_inner (ffi_closure *closure, void *resp, char *stack)
++{
++ ffi_cif *cif;
++ void **arg_area;
++
++ cif = closure->cif;
++ arg_area = (void **) alloca (cif->nargs * sizeof (void *));
++
++ ffi_prep_closure_elfbsd (cif, arg_area, stack);
++
++ (closure->fun) (cif, resp, arg_area, closure->user_data);
++
++ return cif->flags;
++}
++
++ffi_status
++ffi_prep_closure_loc (ffi_closure *closure, ffi_cif *cif,
++ void (*fun)(ffi_cif *, void *, void **, void *),
++ void *user_data, void *codeloc)
++{
++ char *tramp = (char *) codeloc;
++ void *fn;
++
++ FFI_ASSERT (cif->abi == FFI_ELFBSD);
++
++ /* entry mask */
++ *(unsigned short *)(tramp + 0) = 0x0000;
++ /* movl #closure, r0 */
++ tramp[2] = 0xd0;
++ tramp[3] = 0x8f;
++ *(unsigned int *)(tramp + 4) = (unsigned int) closure;
++ tramp[8] = 0x50;
++
++ if (cif->rtype->type == FFI_TYPE_STRUCT
++ && !cif->flags)
++ fn = &ffi_closure_struct_elfbsd;
++ else
++ fn = &ffi_closure_elfbsd;
++
++ /* jmpl #fn */
++ tramp[9] = 0x17;
++ tramp[10] = 0xef;
++ *(unsigned int *)(tramp + 11) = (unsigned int)fn + 2 -
++ (unsigned int)tramp - 9 - 6;
++
++ closure->cif = cif;
++ closure->user_data = user_data;
++ closure->fun = fun;
++
++ return FFI_OK;
++}
diff --git a/frida-libffi/patches/patch-src_vax_ffitarget.h b/frida-libffi/patches/patch-src_vax_ffitarget.h
new file mode 100644
index 0000000000..55233d268a
--- /dev/null
+++ b/frida-libffi/patches/patch-src_vax_ffitarget.h
@@ -0,0 +1,54 @@
+$NetBSD: patch-src_vax_ffitarget.h,v 1.1 2013/11/03 23:51:51 jklos Exp $
+
+--- src/vax/ffitarget.h.orig 2013-11-03 23:03:01.000000000 +0000
++++ src/vax/ffitarget.h
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (c) 2013 Miodrag Vallat. <miod%openbsd.org@localhost>
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * ``Software''), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included
++ * in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * vax Foreign Function Interface
++ */
++
++#ifndef LIBFFI_TARGET_H
++#define LIBFFI_TARGET_H
++
++#ifndef LIBFFI_ASM
++typedef unsigned long ffi_arg;
++typedef signed long ffi_sarg;
++
++typedef enum ffi_abi {
++ FFI_FIRST_ABI = 0,
++ FFI_ELFBSD,
++ FFI_DEFAULT_ABI = FFI_ELFBSD,
++ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1
++} ffi_abi;
++#endif
++
++/* ---- Definitions for closures ----------------------------------------- */
++
++#define FFI_CLOSURES 1
++#define FFI_TRAMPOLINE_SIZE 15
++#define FFI_NATIVE_RAW_API 0
++
++#endif
diff --git a/frida-libffi/patches/patch-src_x86_ffi.c b/frida-libffi/patches/patch-src_x86_ffi.c
new file mode 100644
index 0000000000..eee8bedfc5
--- /dev/null
+++ b/frida-libffi/patches/patch-src_x86_ffi.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_x86_ffi.c,v 1.1 2013/07/26 13:12:25 ryoon Exp $
+
+Fix build on Cygwin64. From Cygwin64 1.7.22's 3.0.12-cygwin.patch.
+
+--- src/x86/ffi.c.orig 2013-03-16 11:25:04.000000000 +0000
++++ src/x86/ffi.c
+@@ -28,7 +28,7 @@
+ DEALINGS IN THE SOFTWARE.
+ ----------------------------------------------------------------------- */
+
+-#if !defined(__x86_64__) || defined(_WIN64)
++#if !defined(__x86_64__) || defined(_WIN64) || defined(__CYGWIN__)
+
+ #ifdef _WIN64
+ #include <windows.h>
diff --git a/frida-libffi/patches/patch-src_x86_win32.S b/frida-libffi/patches/patch-src_x86_win32.S
deleted file mode 100644
index eee7b8c06e..0000000000
--- a/frida-libffi/patches/patch-src_x86_win32.S
+++ /dev/null
@@ -1,23 +0,0 @@
-$NetBSD: patch-src_x86_win32.S,v 1.1 2015/03/23 15:34:18 jperkin Exp $
-
-Disable incompatible assembly sections on 32-bit OSX. Based on MacPorts fix
-in http://trac.macports.org/ticket/44170
-
---- src/x86/win32.S.orig 2014-11-11 14:41:37.000000000 +0000
-+++ src/x86/win32.S
-@@ -1182,6 +1182,7 @@ L_ffi_closure_WIN32_inner$stub:
- hlt ; hlt ; hlt ; hlt ; hlt
- #endif
-
-+#if !defined(X86_DARWIN)
- #if defined(X86_WIN32) && !defined(__OS2__)
- .section .eh_frame,"w"
- #endif
-@@ -1343,6 +1344,7 @@ L_ffi_closure_WIN32_inner$stub:
- /* End of DW_CFA_xxx CFI instructions. */
- .align 4
- .LEFDE5:
-+#endif /* X86_DARWIN */
-
- #endif /* !_MSC_VER */
-
diff --git a/frida-libffi/patches/patch-src_x86_win64.S b/frida-libffi/patches/patch-src_x86_win64.S
new file mode 100644
index 0000000000..c37faa9ce3
--- /dev/null
+++ b/frida-libffi/patches/patch-src_x86_win64.S
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_x86_win64.S,v 1.1 2013/07/26 13:12:25 ryoon Exp $
+
+Fix build on Cygwin64. From Cygwin64 1.7.22's 3.0.12-cygwin.patch.
+
+--- src/x86/win64.S.orig 2013-03-16 11:19:39.000000000 +0000
++++ src/x86/win64.S
+@@ -295,7 +295,7 @@ SYMBOL_NAME(ffi_closure_win64):
+ mov %rax, %rcx # context is first parameter
+ mov %rsp, %rdx # stack is second parameter
+ add $48, %rdx # point to start of arguments
+- mov $SYMBOL_NAME(ffi_closure_win64_inner), %rax
++ lea SYMBOL_NAME(ffi_closure_win64_inner)(%rip), %rax
+ callq *%rax # call the real closure function
+ add $40, %rsp
+ movq %rax, %xmm0 # If the closure returned a float,
Home |
Main Index |
Thread Index |
Old Index