about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-26 14:42:50 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-26 14:42:50 +0100
commit9f01b2ec0d43ea0547f5ae81b76a84bf16f5583a (patch)
tree9b6b2488a8f18d7885b84233f87f3efd88f889f7 /src
parent86c5dfd664ad6f53c03b60b71d76886701b54f9c (diff)
downloadbox64-9f01b2ec0d43ea0547f5ae81b76a84bf16f5583a.tar.gz
box64-9f01b2ec0d43ea0547f5ae81b76a84bf16f5583a.zip
Added wrapped libcups, plus some changes in wrapped libSDL2 and pthread
Diffstat (limited to 'src')
-rwxr-xr-xsrc/library_list.h2
-rwxr-xr-xsrc/libtools/threads.c15
-rw-r--r--src/wrapped/generated/functions_list.txt5
-rw-r--r--src/wrapped/generated/wrapper.c10
-rw-r--r--src/wrapped/generated/wrapper.h5
-rwxr-xr-xsrc/wrapped/wrappedlibcups.c59
-rwxr-xr-xsrc/wrapped/wrappedlibcups_private.h568
-rwxr-xr-xsrc/wrapped/wrappedlibpthread_private.h15
-rwxr-xr-xsrc/wrapped/wrappedsdl2_private.h7
9 files changed, 679 insertions, 7 deletions
diff --git a/src/library_list.h b/src/library_list.h
index 0f74ea86..23257e82 100755
--- a/src/library_list.h
+++ b/src/library_list.h
@@ -126,7 +126,7 @@ GO("libICE.so.6", libice)
 //GO("libtcmalloc_minimal.so.4", tcmallocminimal)
 //GO("libmpg123.so.0", mpg123)
 GO("libgnutls.so.30", gnutls)
-//GO("libcups.so.2", libcups)
+GO("libcups.so.2", libcups)
 //GO("d3dadapter9.so.1", d3dadapter9)
 //GO("libvulkan.so.1", vulkan)
 //GO("libvulkan.so", vulkan)
diff --git a/src/libtools/threads.c b/src/libtools/threads.c
index 2a69a278..aab69c76 100755
--- a/src/libtools/threads.c
+++ b/src/libtools/threads.c
@@ -26,6 +26,7 @@
 #ifdef DYNAREC
 #include "dynablock.h"
 #endif
+//#define ALIGN_COND
 
 void _pthread_cleanup_push_defer(void* buffer, void* routine, void* arg);	// declare hidden functions
 void _pthread_cleanup_pop_restore(void* buffer, int exec);
@@ -494,6 +495,9 @@ EXPORT int my_pthread_key_create(x64emu_t* emu, void* key, void* dtor)
 }
 EXPORT int my___pthread_key_create(x64emu_t* emu, void* key, void* dtor) __attribute__((alias("my_pthread_key_create")));
 
+pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m);
+
+#ifdef ALIGN_COND
 // phtread_cond_init with null attr seems to only write 1 (NULL) dword on x86, while it's 48 bytes on ARM. 
 // Not sure why as sizeof(pthread_cond_init) is 48 on both platform... But Neverwinter Night init seems to rely on that
 // What about cond that are statically initialized? 
@@ -553,7 +557,6 @@ static void del_cond(void* cond)
 	}
 	pthread_mutex_unlock(&my_context->mutex_thread);
 }
-pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m);
 
 EXPORT int my_pthread_cond_broadcast(x64emu_t* emu, void* cond)
 {
@@ -587,6 +590,12 @@ EXPORT int my_pthread_cond_wait(x64emu_t* emu, void* cond, void* mutex)
 	pthread_cond_t * c = get_cond(cond);
 	return pthread_cond_wait(c, getAlignedMutex((pthread_mutex_t*)mutex));
 }
+#else
+EXPORT int my_pthread_cond_wait(x64emu_t* emu, pthread_cond_t* cond, void* mutex)
+{
+	return pthread_cond_wait(cond, getAlignedMutex((pthread_mutex_t*)mutex));
+}
+#endif
 
 //EXPORT int my_pthread_attr_setscope(x64emu_t* emu, void* attr, int scope)
 //{
@@ -754,7 +763,9 @@ emu_jmpbuf_t* GetJmpBuf()
 void init_pthread_helper()
 {
 	InitCancelThread();
+#ifdef ALIGN_COND
 	mapcond = kh_init(mapcond);
+#endif
 	pthread_key_create(&jmpbuf_key, emujmpbuf_destroy);
 #ifndef NOALIGN
 	unaligned_mutex = kh_init(mutex);
@@ -765,6 +776,7 @@ void fini_pthread_helper(box64context_t* context)
 {
 	FreeCancelThread(context);
 	CleanStackSize(context);
+#ifdef ALIGN_COND
 	pthread_cond_t *cond;
 	kh_foreach_value(mapcond, cond, 
 		pthread_cond_destroy(cond);
@@ -772,6 +784,7 @@ void fini_pthread_helper(box64context_t* context)
 	);
 	kh_destroy(mapcond, mapcond);
 	mapcond = NULL;
+#endif
 #ifndef NOALIGN
 	pthread_mutex_t *m;
 	kh_foreach_value(unaligned_mutex, m, 
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index e5357834..4f7a1a53 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -765,6 +765,7 @@
 #() iFpiiiii
 #() iFpiiipp
 #() iFpiippp
+#() iFpippip
 #() iFpipppp
 #() iFpupuui
 #() iFppiiuu
@@ -781,6 +782,8 @@
 #() iFpppipi
 #() iFpppipp
 #() iFppppii
+#() iFppppip
+#() iFppppup
 #() iFpppppi
 #() iFpppppL
 #() iFpppppp
@@ -868,10 +871,12 @@
 #() iFppiipii
 #() iFppiipiL
 #() iFppipipi
+#() iFppippip
 #() iFppipppp
 #() iFppuipiL
 #() iFpppiiii
 #() iFpppiiuu
+#() iFpppiiup
 #() iFpppiipi
 #() iFpppiuwu
 #() iFppppiii
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 36a3f751..1041424c 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -798,6 +798,7 @@ typedef int32_t (*iFuppppp_t)(uint32_t, void*, void*, void*, void*, void*);
 typedef int32_t (*iFpiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t);
 typedef int32_t (*iFpiiipp_t)(void*, int32_t, int32_t, int32_t, void*, void*);
 typedef int32_t (*iFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*);
+typedef int32_t (*iFpippip_t)(void*, int32_t, void*, void*, int32_t, void*);
 typedef int32_t (*iFpipppp_t)(void*, int32_t, void*, void*, void*, void*);
 typedef int32_t (*iFpupuui_t)(void*, uint32_t, void*, uint32_t, uint32_t, int32_t);
 typedef int32_t (*iFppiiuu_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t);
@@ -814,6 +815,8 @@ typedef int32_t (*iFpppiuu_t)(void*, void*, void*, int32_t, uint32_t, uint32_t);
 typedef int32_t (*iFpppipi_t)(void*, void*, void*, int32_t, void*, int32_t);
 typedef int32_t (*iFpppipp_t)(void*, void*, void*, int32_t, void*, void*);
 typedef int32_t (*iFppppii_t)(void*, void*, void*, void*, int32_t, int32_t);
+typedef int32_t (*iFppppip_t)(void*, void*, void*, void*, int32_t, void*);
+typedef int32_t (*iFppppup_t)(void*, void*, void*, void*, uint32_t, void*);
 typedef int32_t (*iFpppppi_t)(void*, void*, void*, void*, void*, int32_t);
 typedef int32_t (*iFpppppL_t)(void*, void*, void*, void*, void*, uintptr_t);
 typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*);
@@ -901,10 +904,12 @@ typedef int32_t (*iFppiiuui_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_
 typedef int32_t (*iFppiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, int32_t);
 typedef int32_t (*iFppiipiL_t)(void*, void*, int32_t, int32_t, void*, int32_t, uintptr_t);
 typedef int32_t (*iFppipipi_t)(void*, void*, int32_t, void*, int32_t, void*, int32_t);
+typedef int32_t (*iFppippip_t)(void*, void*, int32_t, void*, void*, int32_t, void*);
 typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*);
 typedef int32_t (*iFppuipiL_t)(void*, void*, uint32_t, int32_t, void*, int32_t, uintptr_t);
 typedef int32_t (*iFpppiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t);
 typedef int32_t (*iFpppiiuu_t)(void*, void*, void*, int32_t, int32_t, uint32_t, uint32_t);
+typedef int32_t (*iFpppiiup_t)(void*, void*, void*, int32_t, int32_t, uint32_t, void*);
 typedef int32_t (*iFpppiipi_t)(void*, void*, void*, int32_t, int32_t, void*, int32_t);
 typedef int32_t (*iFpppiuwu_t)(void*, void*, void*, int32_t, uint32_t, int16_t, uint32_t);
 typedef int32_t (*iFppppiii_t)(void*, void*, void*, void*, int32_t, int32_t, int32_t);
@@ -1861,6 +1866,7 @@ void iFuppppp(x64emu_t *emu, uintptr_t fcn) { iFuppppp_t fn = (iFuppppp_t)fcn; R
 void iFpiiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiiii_t fn = (iFpiiiii_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); }
 void iFpiiipp(x64emu_t *emu, uintptr_t fcn) { iFpiiipp_t fn = (iFpiiipp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); }
 void iFpiippp(x64emu_t *emu, uintptr_t fcn) { iFpiippp_t fn = (iFpiippp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
+void iFpippip(x64emu_t *emu, uintptr_t fcn) { iFpippip_t fn = (iFpippip_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); }
 void iFpipppp(x64emu_t *emu, uintptr_t fcn) { iFpipppp_t fn = (iFpipppp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
 void iFpupuui(x64emu_t *emu, uintptr_t fcn) { iFpupuui_t fn = (iFpupuui_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); }
 void iFppiiuu(x64emu_t *emu, uintptr_t fcn) { iFppiiuu_t fn = (iFppiiuu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); }
@@ -1877,6 +1883,8 @@ void iFpppiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiuu_t fn = (iFpppiuu_t)fcn; R
 void iFpppipi(x64emu_t *emu, uintptr_t fcn) { iFpppipi_t fn = (iFpppipi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); }
 void iFpppipp(x64emu_t *emu, uintptr_t fcn) { iFpppipp_t fn = (iFpppipp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); }
 void iFppppii(x64emu_t *emu, uintptr_t fcn) { iFppppii_t fn = (iFppppii_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); }
+void iFppppip(x64emu_t *emu, uintptr_t fcn) { iFppppip_t fn = (iFppppip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); }
+void iFppppup(x64emu_t *emu, uintptr_t fcn) { iFppppup_t fn = (iFppppup_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); }
 void iFpppppi(x64emu_t *emu, uintptr_t fcn) { iFpppppi_t fn = (iFpppppi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); }
 void iFpppppL(x64emu_t *emu, uintptr_t fcn) { iFpppppL_t fn = (iFpppppL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); }
 void iFpppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppp_t fn = (iFpppppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); }
@@ -1964,10 +1972,12 @@ void iFppiiuui(x64emu_t *emu, uintptr_t fcn) { iFppiiuui_t fn = (iFppiiuui_t)fcn
 void iFppiipii(x64emu_t *emu, uintptr_t fcn) { iFppiipii_t fn = (iFppiipii_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); }
 void iFppiipiL(x64emu_t *emu, uintptr_t fcn) { iFppiipiL_t fn = (iFppiipiL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); }
 void iFppipipi(x64emu_t *emu, uintptr_t fcn) { iFppipipi_t fn = (iFppipipi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); }
+void iFppippip(x64emu_t *emu, uintptr_t fcn) { iFppippip_t fn = (iFppippip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); }
 void iFppipppp(x64emu_t *emu, uintptr_t fcn) { iFppipppp_t fn = (iFppipppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); }
 void iFppuipiL(x64emu_t *emu, uintptr_t fcn) { iFppuipiL_t fn = (iFppuipiL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); }
 void iFpppiiii(x64emu_t *emu, uintptr_t fcn) { iFpppiiii_t fn = (iFpppiiii_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); }
 void iFpppiiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiiuu_t fn = (iFpppiiuu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); }
+void iFpppiiup(x64emu_t *emu, uintptr_t fcn) { iFpppiiup_t fn = (iFpppiiup_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); }
 void iFpppiipi(x64emu_t *emu, uintptr_t fcn) { iFpppiipi_t fn = (iFpppiipi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); }
 void iFpppiuwu(x64emu_t *emu, uintptr_t fcn) { iFpppiuwu_t fn = (iFpppiuwu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int16_t)R_R9, *(uint32_t*)(R_RSP + 8)); }
 void iFppppiii(x64emu_t *emu, uintptr_t fcn) { iFppppiii_t fn = (iFppppiii_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index df2baba7..58feb27a 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -795,6 +795,7 @@ void iFuppppp(x64emu_t *emu, uintptr_t fnc);
 void iFpiiiii(x64emu_t *emu, uintptr_t fnc);
 void iFpiiipp(x64emu_t *emu, uintptr_t fnc);
 void iFpiippp(x64emu_t *emu, uintptr_t fnc);
+void iFpippip(x64emu_t *emu, uintptr_t fnc);
 void iFpipppp(x64emu_t *emu, uintptr_t fnc);
 void iFpupuui(x64emu_t *emu, uintptr_t fnc);
 void iFppiiuu(x64emu_t *emu, uintptr_t fnc);
@@ -811,6 +812,8 @@ void iFpppiuu(x64emu_t *emu, uintptr_t fnc);
 void iFpppipi(x64emu_t *emu, uintptr_t fnc);
 void iFpppipp(x64emu_t *emu, uintptr_t fnc);
 void iFppppii(x64emu_t *emu, uintptr_t fnc);
+void iFppppip(x64emu_t *emu, uintptr_t fnc);
+void iFppppup(x64emu_t *emu, uintptr_t fnc);
 void iFpppppi(x64emu_t *emu, uintptr_t fnc);
 void iFpppppL(x64emu_t *emu, uintptr_t fnc);
 void iFpppppp(x64emu_t *emu, uintptr_t fnc);
@@ -898,10 +901,12 @@ void iFppiiuui(x64emu_t *emu, uintptr_t fnc);
 void iFppiipii(x64emu_t *emu, uintptr_t fnc);
 void iFppiipiL(x64emu_t *emu, uintptr_t fnc);
 void iFppipipi(x64emu_t *emu, uintptr_t fnc);
+void iFppippip(x64emu_t *emu, uintptr_t fnc);
 void iFppipppp(x64emu_t *emu, uintptr_t fnc);
 void iFppuipiL(x64emu_t *emu, uintptr_t fnc);
 void iFpppiiii(x64emu_t *emu, uintptr_t fnc);
 void iFpppiiuu(x64emu_t *emu, uintptr_t fnc);
+void iFpppiiup(x64emu_t *emu, uintptr_t fnc);
 void iFpppiipi(x64emu_t *emu, uintptr_t fnc);
 void iFpppiuwu(x64emu_t *emu, uintptr_t fnc);
 void iFppppiii(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibcups.c b/src/wrapped/wrappedlibcups.c
new file mode 100755
index 00000000..be7ed99c
--- /dev/null
+++ b/src/wrapped/wrappedlibcups.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "debug.h"
+#include "wrapper.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "librarian.h"
+#include "box64context.h"
+#include "emu/x64emu_private.h"
+#include "myalign.h"
+
+const char* libcupsName = "libcups.so.2";
+#define LIBNAME libcups
+
+#if 0
+#define SUPER()
+    GO(BZ2_bzCompressInit, iFpiii_t)
+
+typedef struct libcups_my_s {
+    // functions
+    #define GO(A, B)    B   A;
+    SUPER()
+    #undef GO
+} libcups_my_t;
+
+void* getCupsMy(library_t* lib)
+{
+    libcups_my_t* my = (libcups_my_t*)calloc(1, sizeof(libcups_my_t));
+    #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A);
+    SUPER()
+    #undef GO
+    return my;
+}
+#undef SUPER
+
+void freeCupsMy(void* lib)
+{
+    libcups_my_t *my = (libcups_my_t *)lib;
+}
+
+#define CUSTOM_INIT \
+    lib->priv.w.p2 = getCupsMy(lib);
+
+#define CUSTOM_FINI \
+    freeCupsMy(lib->priv.w.p2); \
+    free(lib->priv.w.p2);
+#endif
+
+#include "wrappedlib_init.h"
+
diff --git a/src/wrapped/wrappedlibcups_private.h b/src/wrapped/wrappedlibcups_private.h
new file mode 100755
index 00000000..8df3056c
--- /dev/null
+++ b/src/wrapped/wrappedlibcups_private.h
@@ -0,0 +1,568 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error meh!
+#endif
+
+//GO(cupsAddDest, 
+//GO(cupsAddIntegerOption, 
+GO(cupsAddOption, iFppip)
+//GO(cupsAdminCreateWindowsPPD, 
+//GO(cupsAdminExportSamba, 
+//GO(cupsAdminGetServerSettings, 
+//GO(cupsAdminSetServerSettings, 
+//GO(cupsArrayAdd, 
+//GO(_cupsArrayAddStrings, 
+//GO(cupsArrayClear, 
+//GO(cupsArrayCount, 
+//GO(cupsArrayCurrent, 
+//GO(cupsArrayDelete, 
+//GO(cupsArrayDup, 
+//GO(cupsArrayFind, 
+//GO(cupsArrayFirst, 
+//GO(cupsArrayGetIndex, 
+//GO(cupsArrayGetInsert, 
+//GO(cupsArrayIndex, 
+//GO(cupsArrayInsert, 
+//GO(cupsArrayLast, 
+//GO(cupsArrayNew, 
+//GO(cupsArrayNew2, 
+//GO(cupsArrayNew3, 
+//GO(_cupsArrayNewStrings, 
+//GO(cupsArrayNext, 
+//GO(cupsArrayPrev, 
+//GO(cupsArrayRemove, 
+//GO(cupsArrayRestore, 
+//GO(cupsArraySave, 
+//GO(cupsArrayUserData, 
+//GO(cupsBackChannelRead, 
+//GO(cupsBackChannelWrite, 
+//GO(cupsBackendDeviceURI, 
+//GO(cupsBackendReport, 
+//GO(_cupsBufferGet, 
+//GO(_cupsBufferRelease, 
+//GO(cupsCancelDestJob, 
+//GO(cupsCancelJob, 
+//GO(cupsCancelJob2, 
+//GO(_cupsCharmapFlush, 
+//GO(cupsCharsetToUTF8, 
+//GO(cupsCheckDestSupported, 
+//GO(cupsCloseDestJob, 
+//GO(_cupsCondBroadcast, 
+//GO(_cupsCondInit, 
+//GO(_cupsCondWait, 
+//GO(_cupsConnect, 
+//GO(cupsConnectDest, 
+//GO(_cupsConvertOptions, 
+//GO(cupsCopyDest, 
+//GO(cupsCopyDestConflicts, 
+//GO(cupsCopyDestInfo, 
+//GO(_cupsCreateDest, 
+//GO(cupsCreateDestJob, 
+//GO(cupsCreateJob, 
+//DATA(_cups_debug_fd, 
+//DATA(_cups_debug_level, 
+//GO(cupsDirClose, 
+//GO(cupsDirOpen, 
+//GO(cupsDirRead, 
+//GO(cupsDirRewind, 
+//GO(cupsDoAuthentication, 
+//GO(cupsDoFileRequest, 
+//GO(cupsDoIORequest, 
+//GO(cupsDoRequest, 
+//GO(cupsEncodeOptions, 
+//GO(cupsEncodeOptions2, 
+//GO(_cupsEncodingName, 
+//GO(cupsEncryption, 
+//GO(cupsEnumDests, 
+//GO(_cupsFileCheck, 
+//GO(_cupsFileCheckFilter, 
+//GO(cupsFileClose, 
+//GO(cupsFileCompression, 
+//GO(cupsFileEOF, 
+//GO(cupsFileFind, 
+//GO(cupsFileFlush, 
+//GO(cupsFileGetChar, 
+//GO(cupsFileGetConf, 
+//GO(cupsFileGetLine, 
+//GO(cupsFileGets, 
+//GO(cupsFileLock, 
+//GO(cupsFileNumber, 
+//GO(cupsFileOpen, 
+//GO(cupsFileOpenFd, 
+//GO(_cupsFilePeekAhead, 
+//GO(cupsFilePeekChar, 
+//GO(cupsFilePrintf, 
+//GO(cupsFilePutChar, 
+//GO(cupsFilePutConf, 
+//GO(cupsFilePuts, 
+//GO(cupsFileRead, 
+//GO(cupsFileRewind, 
+//GO(cupsFileSeek, 
+//GO(cupsFileStderr, 
+//GO(cupsFileStdin, 
+//GO(cupsFileStdout, 
+//GO(cupsFileTell, 
+//GO(cupsFileUnlock, 
+//GO(cupsFileWrite, 
+//GO(cupsFindDestDefault, 
+//GO(cupsFindDestReady, 
+//GO(cupsFindDestSupported, 
+//GO(cupsFinishDestDocument, 
+//GO(cupsFinishDocument, 
+GO(cupsFreeDestInfo, vFp)
+GO(cupsFreeDests, vFip)
+GO(cupsFreeJobs, vFip)
+GO(cupsFreeOptions, vFip)
+//GO(_cupsGet1284Values, 
+GO(cupsGetClasses, iFp)
+//GO(cupsGetConflicts, 
+GO(cupsGetDefault, pFv)
+GO(cupsGetDefault2, pFp)
+GO(cupsGetDest, pFppip)
+//GO(cupsGetDestMediaByIndex, 
+GO(cupsGetDestMediaByName, iFppppup)
+GO(cupsGetDestMediaBySize, iFpppiiup)
+//GO(cupsGetDestMediaCount, 
+//GO(cupsGetDestMediaDefault, 
+//GO(_cupsGetDestResource, 
+//GO(_cupsGetDests, 
+GO(cupsGetDests, iFp)
+GO(cupsGetDests2, iFpp)
+//GO(cupsGetDestWithURI, 
+//GO(cupsGetDevices, 
+//GO(cupsGetFd, 
+//GO(cupsGetFile, 
+//GO(cupsGetIntegerOption, 
+GO(cupsGetJobs, iFppii)
+GO(cupsGetJobs2, iFpppii)
+GO(cupsGetNamedDest, pFppp)
+GO(cupsGetOption, pFpip)
+//GO(_cupsGetPassword, 
+GO(cupsGetPassword, pFp)
+GO(cupsGetPassword2, pFpppp)
+GO(cupsGetPPD, pFp)
+GO(cupsGetPPD2, pFpp)
+GO(cupsGetPPD3, iFppppL)
+GO(cupsGetPrinters, iFp)
+//GO(cupsGetResponse, 
+GO(cupsGetServerPPD, pFpp)
+//GO(_cupsGlobalLock, 
+//GO(_cupsGlobals, 
+//GO(_cupsGlobalUnlock, 
+//GO(_cupsGSSServiceName, 
+//GO(cupsHashData, 
+//GO(cupsHashString, 
+GO(cupsLangDefault, pFv)
+GO(cupsLangEncoding, pFp)
+GO(cupsLangFlush, vFv)
+GO(cupsLangFree, vFp)
+GO(cupsLangGet, pFp)
+//GO(_cupsLangPrintError, 
+//GO(_cupsLangPrintf, 
+//GO(_cupsLangPrintFilter, 
+//GO(_cupsLangPuts, 
+//GO(_cupsLangString, 
+GO(cupsLastError, iFv)
+GO(cupsLastErrorString, pFv)
+//GO(cupsLocalizeDestMedia, 
+GO(cupsLocalizeDestOption, pFpppp)
+GO(cupsLocalizeDestValue, pFppppp)
+//GO(cupsMakeServerCredentials, 
+//GO(cupsMarkOptions, 
+//GO(_cupsMessageFree, 
+//GO(_cupsMessageLoad, 
+//GO(_cupsMessageLookup, 
+//GO(_cupsMessageNew, 
+//GO(_cupsMutexInit, 
+//GO(_cupsMutexLock, 
+//GO(_cupsMutexUnlock, 
+//GO(_cupsNextDelay, 
+//GO(cupsNotifySubject, 
+GO(cupsNotifyText, pFpp)
+GO(cupsParseOptions, iFpip)
+GO(cupsPrintFile, iFpppip)
+GO(cupsPrintFile2, iFppppip)
+GO(cupsPrintFiles, iFpippip)
+GO(cupsPrintFiles2, iFppippip)
+//GO(cupsPutFd, 
+//GO(cupsPutFile, 
+//GO(cupsReadResponseData, 
+GO(cupsRemoveDest, iFppip)
+GO(cupsRemoveOption, iFpip)
+//GO(cupsResolveConflicts, 
+//GO(_cupsRWInit, 
+//GO(_cupsRWLockRead, 
+//GO(_cupsRWLockWrite, 
+//GO(_cupsRWUnlock, 
+//GO(_cups_safe_vsnprintf, 
+//GO(cupsSendRequest, 
+GO(cupsServer, pFv)
+//GO(cupsSetClientCertCB, 
+//GO(cupsSetCredentials, 
+GO(cupsSetDefaultDest, vFppip)
+//GO(_cupsSetDefaults, 
+//GO(cupsSetDests, 
+//GO(cupsSetDests2, 
+//GO(cupsSetEncryption, 
+//GO(_cupsSetError, 
+//GO(_cupsSetHTTPError, 
+//GO(_cupsSetLocale, 
+//GO(_cupsSetNegotiateAuthString, 
+//GO(cupsSetPasswordCB, 
+//GO(cupsSetPasswordCB2, 
+//GO(cupsSetServer, 
+//GO(cupsSetServerCertCB, 
+//GO(cupsSetServerCredentials, 
+//GO(cupsSetUser, 
+//GO(cupsSetUserAgent, 
+//GO(cupsSideChannelDoRequest, 
+//GO(cupsSideChannelRead, 
+//GO(cupsSideChannelSNMPGet, 
+//GO(cupsSideChannelSNMPWalk, 
+//GO(cupsSideChannelWrite, 
+//GO(_cupsSNMPClose, 
+//GO(_cupsSNMPCopyOID, 
+//GO(_cupsSNMPDefaultCommunity, 
+//GO(_cupsSNMPIsOID, 
+//GO(_cupsSNMPIsOIDPrefixed, 
+//GO(_cupsSNMPOIDToString, 
+//GO(_cupsSNMPOpen, 
+//GO(_cupsSNMPRead, 
+//GO(_cupsSNMPSetDebug, 
+//GO(_cupsSNMPStringToOID, 
+//GO(_cupsSNMPWalk, 
+//GO(_cupsSNMPWrite, 
+//GO(cupsStartDestDocument, 
+//GO(cupsStartDocument, 
+//GO(_cupsStrAlloc, 
+//GO(_cups_strcasecmp, 
+//GO(_cups_strcpy, 
+//GO(_cupsStrDate, 
+//GO(_cupsStrFlush, 
+//GO(_cupsStrFormatd, 
+//GO(_cupsStrFree, 
+//GO(_cups_strlcat, 
+//GO(_cups_strlcpy, 
+//GO(_cups_strncasecmp, 
+//GO(_cupsStrRetain, 
+//GO(_cupsStrScand, 
+//GO(_cupsStrStatistics, 
+//GO(cupsTempFd, 
+//GO(cupsTempFile, 
+//GO(cupsTempFile2, 
+//GO(_cupsThreadCancel, 
+//GO(_cupsThreadCreate, 
+//GO(_cupsThreadDetach, 
+//GO(_cupsThreadWait, 
+//GO(cupsUser, 
+//GO(cupsUserAgent, 
+//GO(_cupsUserDefault, 
+//GO(cupsUTF32ToUTF8, 
+//GO(cupsUTF8ToCharset, 
+//GO(cupsUTF8ToUTF32, 
+//GO(cupsWriteRequestData, 
+
+//GO(httpAcceptConnection, 
+//GO(httpAddCredential, 
+//GO(httpAddrAny, 
+//GO(httpAddrClose, 
+//GO(httpAddrConnect, 
+//GO(httpAddrConnect2, 
+//GO(httpAddrCopyList, 
+//GO(httpAddrEqual, 
+//GO(httpAddrFamily, 
+//GO(httpAddrFreeList, 
+//GO(httpAddrGetList, 
+//GO(httpAddrLength, 
+//GO(httpAddrListen, 
+//GO(httpAddrLocalhost, 
+//GO(httpAddrLookup, 
+//GO(httpAddrPort, 
+//GO(_httpAddrSetPort, 
+//GO(httpAddrString, 
+//GO(httpAssembleURI, 
+//GO(httpAssembleURIf, 
+//GO(httpAssembleUUID, 
+//GO(httpBlocking, 
+//GO(httpCheck, 
+//GO(httpClearCookie, 
+//GO(httpClearFields, 
+//GO(httpClose, 
+//GO(httpCompareCredentials, 
+//GO(httpConnect, 
+//GO(httpConnect2, 
+//GO(httpConnectEncrypt, 
+//GO(httpCopyCredentials, 
+//GO(_httpCreateCredentials, 
+//GO(httpCredentialsAreValidForName, 
+//GO(httpCredentialsGetExpiration, 
+//GO(httpCredentialsGetTrust, 
+//GO(httpCredentialsString, 
+//GO(httpDecode64, 
+//GO(httpDecode64_2, 
+//GO(_httpDecodeURI, 
+//GO(httpDelete, 
+//GO(_httpDisconnect, 
+//GO(httpEncode64, 
+//GO(httpEncode64_2, 
+//GO(_httpEncodeURI, 
+//GO(httpEncryption, 
+//GO(httpError, 
+//GO(httpFieldValue, 
+//GO(httpFlush, 
+//GO(httpFlushWrite, 
+//GO(_httpFreeCredentials, 
+//GO(httpFreeCredentials, 
+//GO(httpGet, 
+//GO(httpGetActivity, 
+//GO(httpGetAddress, 
+//GO(httpGetAuthString, 
+//GO(httpGetBlocking, 
+//GO(httpGetContentEncoding, 
+//GO(httpGetCookie, 
+//GO(httpGetDateString, 
+//GO(httpGetDateString2, 
+//GO(httpGetDateTime, 
+//GO(httpGetEncryption, 
+//GO(httpGetExpect, 
+//GO(httpGetFd, 
+//GO(httpGetField, 
+//GO(httpGetHostByName, 
+//GO(httpGetHostname, 
+//GO(httpGetKeepAlive, 
+//GO(httpGetLength, 
+//GO(httpGetLength2, 
+//GO(httpGetPending, 
+//GO(httpGetReady, 
+//GO(httpGetRemaining, 
+//GO(httpGets, 
+//GO(httpGetState, 
+//GO(httpGetStatus, 
+//GO(httpGetSubField, 
+//GO(httpGetSubField2, 
+//GO(httpGetVersion, 
+//GO(httpHead, 
+//GO(httpInitialize, 
+//GO(httpIsChunked, 
+//GO(httpIsEncrypted, 
+//GO(httpLoadCredentials, 
+//GO(httpMD5, 
+//GO(httpMD5Final, 
+//GO(httpMD5String, 
+//GO(httpOptions, 
+//GO(httpPeek, 
+//GO(httpPost, 
+//GO(httpPrintf, 
+//GO(httpPut, 
+//GO(httpRead, 
+//GO(httpRead2, 
+//GO(httpReadRequest, 
+//GO(httpReconnect, 
+//GO(httpReconnect2, 
+//GO(httpResolveHostname, 
+//GO(_httpResolveURI, 
+//GO(httpSaveCredentials, 
+//GO(httpSeparate, 
+//GO(httpSeparate2, 
+//GO(httpSeparateURI, 
+//GO(httpSetAuthString, 
+//GO(httpSetCookie, 
+//GO(httpSetCredentials, 
+//GO(httpSetDefaultField, 
+//GO(_httpSetDigestAuthString, 
+//GO(httpSetExpect, 
+//GO(httpSetField, 
+//GO(httpSetKeepAlive, 
+//GO(httpSetLength, 
+//GO(httpSetTimeout, 
+//GO(httpShutdown, 
+//GO(httpStateString, 
+//GO(_httpStatus, 
+//GO(httpStatus, 
+//GO(_httpTLSInitialize, 
+//GO(_httpTLSPending, 
+//GO(_httpTLSRead, 
+//GO(_httpTLSSetCredentials, 
+//GO(_httpTLSSetOptions, 
+//GO(_httpTLSStart, 
+//GO(_httpTLSStop, 
+//GO(_httpTLSWrite, 
+//GO(httpTrace, 
+//GO(_httpUpdate, 
+//GO(httpUpdate, 
+//GO(httpURIStatusString, 
+//GO(_httpWait, 
+//GO(httpWait, 
+//GO(httpWrite, 
+//GO(httpWrite2, 
+//GO(httpWriteResponse, 
+
+//GO(ippAddBoolean, 
+//GO(ippAddBooleans, 
+//GO(ippAddCollection, 
+//GO(ippAddCollections, 
+//GO(ippAddDate, 
+//GO(ippAddInteger, 
+//GO(ippAddIntegers, 
+//GO(ippAddOctetString, 
+//GO(ippAddOutOfBand, 
+//GO(ippAddRange, 
+//GO(ippAddRanges, 
+//GO(ippAddResolution, 
+//GO(ippAddResolutions, 
+//GO(ippAddSeparator, 
+//GO(ippAddString, 
+//GO(ippAddStringf, 
+//GO(ippAddStringfv, 
+//GO(ippAddStrings, 
+//GO(ippAttributeString, 
+//GO(ippContainsInteger, 
+//GO(ippContainsString, 
+//GO(ippCopyAttribute, 
+//GO(ippCopyAttributes, 
+//GO(ippCreateRequestedArray, 
+//GO(ippDateToTime, 
+//GO(ippDelete, 
+//GO(ippDeleteAttribute, 
+//GO(ippDeleteValues, 
+//GO(ippEnumString, 
+//GO(ippEnumValue, 
+//GO(ippErrorString, 
+//GO(ippErrorValue, 
+//GO(ippFindAttribute, 
+//GO(ippFindNextAttribute, 
+//GO(_ippFindOption, 
+//GO(ippFirstAttribute, 
+//GO(ippGetBoolean, 
+//GO(ippGetCollection, 
+//GO(ippGetCount, 
+//GO(ippGetDate, 
+//GO(ippGetGroupTag, 
+//GO(ippGetInteger, 
+//GO(ippGetName, 
+//GO(ippGetOctetString, 
+//GO(ippGetOperation, 
+//GO(ippGetRange, 
+//GO(ippGetRequestId, 
+//GO(ippGetResolution, 
+//GO(ippGetState, 
+//GO(ippGetStatusCode, 
+//GO(ippGetString, 
+//GO(ippGetValueTag, 
+//GO(ippGetVersion, 
+//GO(ippLength, 
+//GO(ippNew, 
+//GO(ippNewRequest, 
+//GO(ippNewResponse, 
+//GO(ippNextAttribute, 
+//GO(ippOpString, 
+//GO(ippOpValue, 
+//GO(ippPort, 
+//GO(ippRead, 
+//GO(ippReadFile, 
+//GO(ippReadIO, 
+//GO(ippSetBoolean, 
+//GO(ippSetCollection, 
+//GO(ippSetDate, 
+//GO(ippSetGroupTag, 
+//GO(ippSetInteger, 
+//GO(ippSetName, 
+//GO(ippSetOctetString, 
+//GO(ippSetOperation, 
+//GO(ippSetPort, 
+//GO(ippSetRange, 
+//GO(ippSetRequestId, 
+//GO(ippSetResolution, 
+//GO(ippSetState, 
+//GO(ippSetStatusCode, 
+//GO(ippSetString, 
+//GO(ippSetStringf, 
+//GO(ippSetStringfv, 
+//GO(ippSetValueTag, 
+//GO(ippSetVersion, 
+//GO(ippStateString, 
+//GO(ippTagString, 
+//GO(ippTagValue, 
+//GO(ippTimeToDate, 
+//GO(ippValidateAttribute, 
+//GO(ippValidateAttributes, 
+//GO(ippWrite, 
+//GO(ippWriteFile, 
+//GO(ippWriteIO, 
+
+//GO(_ppdCacheCreateWithFile, 
+//GO(_ppdCacheCreateWithPPD, 
+//GO(_ppdCacheDestroy, 
+//GO(_ppdCacheGetBin, 
+//GO(_ppdCacheGetFinishingOptions, 
+//GO(_ppdCacheGetFinishingValues, 
+//GO(_ppdCacheGetInputSlot, 
+//GO(_ppdCacheGetMediaType, 
+//GO(_ppdCacheGetOutputBin, 
+//GO(_ppdCacheGetPageSize, 
+//GO(_ppdCacheGetSize, 
+//GO(_ppdCacheGetSource, 
+//GO(_ppdCacheGetType, 
+//GO(_ppdCacheWriteFile, 
+//GO(ppdClose, 
+//GO(ppdCollect, 
+//GO(ppdCollect2, 
+//GO(ppdConflicts, 
+//GO(_ppdCreateFromIPP, 
+//GO(ppdEmit, 
+//GO(ppdEmitAfterOrder, 
+//GO(ppdEmitFd, 
+//GO(ppdEmitJCL, 
+//GO(ppdEmitJCLEnd, 
+//GO(ppdEmitString, 
+//GO(ppdErrorString, 
+//GO(ppdFindAttr, 
+//GO(ppdFindChoice, 
+//GO(ppdFindCustomOption, 
+//GO(ppdFindCustomParam, 
+//GO(ppdFindMarkedChoice, 
+//GO(ppdFindNextAttr, 
+//GO(ppdFindOption, 
+//GO(ppdFirstCustomParam, 
+//GO(ppdFirstOption, 
+//GO(_ppdFreeLanguages, 
+//GO(_ppdGetEncoding, 
+//GO(_ppdGetLanguages, 
+//GO(_ppdGlobals, 
+//GO(_ppdHashName, 
+//GO(ppdInstallableConflict, 
+//GO(ppdIsMarked, 
+//GO(ppdLastError, 
+//GO(ppdLocalize, 
+//GO(ppdLocalizeAttr, 
+//GO(_ppdLocalizedAttr, 
+//GO(ppdLocalizeIPPReason, 
+//GO(ppdLocalizeMarkerName, 
+//GO(ppdMarkDefaults, 
+//GO(ppdMarkOption, 
+//GO(ppdNextCustomParam, 
+//GO(ppdNextOption, 
+//GO(_ppdNormalizeMakeAndModel, 
+//GO(_ppdOpen, 
+//GO(ppdOpen, 
+//GO(ppdOpen2, 
+//GO(ppdOpenFd, 
+//GO(_ppdOpenFile, 
+//GO(ppdOpenFile, 
+//GO(ppdPageLength, 
+//GO(ppdPageSize, 
+//GO(ppdPageSizeLimits, 
+//GO(ppdPageWidth, 
+//GO(_ppdParseOptions, 
+//GO(ppdSetConformance, 
+
+//GO(pwgFormatSizeName, 
+//GO(pwgInitSize, 
+//GO(_pwgInputSlotForSource, 
+//GO(pwgMediaForLegacy, 
+//GO(pwgMediaForPPD, 
+//GO(pwgMediaForPWG, 
+//GO(pwgMediaForSize, 
+//GO(_pwgMediaNearSize, 
+//GO(_pwgMediaTable, 
+//GO(_pwgMediaTypeForType, 
+//GO(_pwgPageSizeForMedia, 
diff --git a/src/wrapped/wrappedlibpthread_private.h b/src/wrapped/wrappedlibpthread_private.h
index 3c3f9ed2..56e341b1 100755
--- a/src/wrapped/wrappedlibpthread_private.h
+++ b/src/wrapped/wrappedlibpthread_private.h
@@ -58,11 +58,16 @@ GO(pthread_condattr_getpshared, iFpp)
 GO(pthread_condattr_init, iFp)
 GO(pthread_condattr_setclock, iFpp)
 GO(pthread_condattr_setpshared, iFpi)
-GOM(pthread_cond_broadcast, iFEp)
-GOM(pthread_cond_destroy, iFEp)
-GOM(pthread_cond_init, iFEpp)
-GOM(pthread_cond_signal, iFEp)
-GOM(pthread_cond_timedwait, iFEppp)
+//GOM(pthread_cond_broadcast, iFEp)
+//GOM(pthread_cond_destroy, iFEp)
+//GOM(pthread_cond_init, iFEpp)
+//GOM(pthread_cond_signal, iFEp)
+//GOM(pthread_cond_timedwait, iFEppp)
+GO(pthread_cond_broadcast, iFp)
+GO(pthread_cond_destroy, iFp)
+GO(pthread_cond_init, iFpp)
+GO(pthread_cond_signal, iFp)
+GO(pthread_cond_timedwait, iFppp)
 GOM(pthread_cond_wait, iFEpp)
 GOM(pthread_create, iFEpppp)
 GO(pthread_detach, iFL)
diff --git a/src/wrapped/wrappedsdl2_private.h b/src/wrapped/wrappedsdl2_private.h
index a2cfbdb4..e34c2f49 100755
--- a/src/wrapped/wrappedsdl2_private.h
+++ b/src/wrapped/wrappedsdl2_private.h
@@ -137,8 +137,10 @@ GO(SDL_GameControllerGetJoystick, pFp)
 GO(SDL_GameControllerGetPlayerIndex, iFp)
 GO(SDL_GameControllerGetProduct, WFp)
 GO(SDL_GameControllerGetProductVersion, WFp)
+GO(SDL_GameControllerGetSerial, pFp)
 GO(SDL_GameControllerGetStringForAxis, pFp)
 GO(SDL_GameControllerGetStringForButton, pFu)
+GO(SDL_GameControllerGetType, iFp)
 GO(SDL_GameControllerGetVendor, WFp)
 GO(SDL_GameControllerMapping, pFp)
 GO(SDL_GameControllerMappingForDeviceIndex, pFi)
@@ -149,6 +151,11 @@ GO(SDL_GameControllerNameForIndex, pFi)
 GO(SDL_GameControllerNumMappings, iFv)
 GO(SDL_GameControllerOpen, pFi)
 GO(SDL_GameControllerRumble, iFpWWu)
+GO(SDL_GameControllerRumbleTriggers, iFpWWu)
+GO(SDL_GameControllerSetLED, iFpCCC)
+GO(SDL_GameControllerSetPlayerIndex, vFpi)
+GO(SDL_GameControllerSetSensorEnabled, iFpii)
+GO(SDL_GameControllerTypeForIndex, iFi)
 GO(SDL_GameControllerUpdate, vFv)
 // SDL_GetAssertionHandler
 GO(SDL_GetAssertionReport, pFv)