about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-09-20 21:51:15 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-09-20 21:51:15 +0200
commit06bbf93bf876c107ff41593a75fe6fa8a6d6a779 (patch)
treeaf97f216e681eb789e838806b00344b5d8c58286 /src
parente08bdd644b30b0b84a005bd4ca81d68855a03764 (diff)
downloadbox64-06bbf93bf876c107ff41593a75fe6fa8a6d6a779.tar.gz
box64-06bbf93bf876c107ff41593a75fe6fa8a6d6a779.zip
More work on gtk wrapping
Diffstat (limited to 'src')
-rwxr-xr-xsrc/include/gtkclass.h8
-rwxr-xr-xsrc/include/myalign.h2
-rwxr-xr-xsrc/libtools/myalign.c7
-rwxr-xr-xsrc/tools/gtkclass.c271
-rw-r--r--src/wrapped/generated/functions_list.txt37
-rw-r--r--src/wrapped/generated/wrappedgio2types.h4
-rw-r--r--src/wrapped/generated/wrappedglib2types.h15
-rw-r--r--src/wrapped/generated/wrappedgtkx112types.h5
-rw-r--r--src/wrapped/generated/wrapper.c26
-rw-r--r--src/wrapped/generated/wrapper.h13
-rwxr-xr-xsrc/wrapped/wrappedgio2.c31
-rwxr-xr-xsrc/wrapped/wrappedgio2_private.h4
-rwxr-xr-xsrc/wrapped/wrappedglib2.c141
-rwxr-xr-xsrc/wrapped/wrappedglib2_private.h30
-rwxr-xr-xsrc/wrapped/wrappedgobject2.c1
-rwxr-xr-xsrc/wrapped/wrappedgtkx112.c65
-rwxr-xr-xsrc/wrapped/wrappedgtkx112_private.h8
17 files changed, 584 insertions, 84 deletions
diff --git a/src/include/gtkclass.h b/src/include/gtkclass.h
index 53921591..9a8a512d 100755
--- a/src/include/gtkclass.h
+++ b/src/include/gtkclass.h
@@ -221,6 +221,11 @@ typedef struct my_GtkTableClass_s
   my_GtkContainerClass_t parent_class;
 } my_GtkTableClass_t;
 
+typedef struct my_GtkFixedClass_s
+{
+  my_GtkContainerClass_t parent_class;
+} my_GtkFixedClass_t;
+
 // GTypeValueTable
 typedef struct my_GTypeValueTable_s {
   void     (*value_init)         (void* value);
@@ -287,6 +292,7 @@ GTKCLASS(GtkTreeView)   \
 GTKCLASS(GtkBin)        \
 GTKCLASS(GtkWindow)     \
 GTKCLASS(GtkTable)      \
+GTKCLASS(GtkFixed)      \
 GTKCLASS(MetaFrames)    \
 
 #define GTKCLASS(A) void Set##A##ID(size_t id);
@@ -313,4 +319,6 @@ void my_signal_delete(my_signal_t* sig);
 int my_signal_is_valid(void* sig);
 int my_signal_cb(void* a, void* b, void* c, void* d);
 
+void my_add_signal_offset(size_t klass, uint32_t offset, int n);
+
 #endif //__GTKCLASS_H__
\ No newline at end of file
diff --git a/src/include/myalign.h b/src/include/myalign.h
index 80cc1449..b711e874 100755
--- a/src/include/myalign.h
+++ b/src/include/myalign.h
@@ -149,3 +149,5 @@ void AlignEpollEvent(void* dest, void* source, int nbr); // x86 -> Arm
 
 void UnalignSemidDs(void *dest, const void* source);
 void AlignSemidDs(void *dest, const void* source);
+
+uintptr_t getVArgs(x64emu_t* emu, int pos, uintptr_t* b, int N);
\ No newline at end of file
diff --git a/src/libtools/myalign.c b/src/libtools/myalign.c
index 181242f3..3c6f6b3f 100755
--- a/src/libtools/myalign.c
+++ b/src/libtools/myalign.c
@@ -801,3 +801,10 @@ void AlignSemidDs(void *dest, const void* source)
     arm_struct->sem_ctime = x64_struct->sem_ctime;
     arm_struct->sem_nsems = x64_struct->sem_nsems;
 }
+
+uintptr_t getVArgs(x64emu_t* emu, int pos, uintptr_t* b, int N)
+{
+    if((pos+N)>6)
+        return b[pos+N-6];
+    return emu->regs[regs_abi[pos+N]].q[0];
+}
\ No newline at end of file
diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c
index 6a664dc1..38896fd5 100755
--- a/src/tools/gtkclass.c
+++ b/src/tools/gtkclass.c
@@ -26,6 +26,19 @@ GTKCLASSES()
 KHASH_SET_INIT_INT(signalmap)
 static kh_signalmap_t *my_signalmap = NULL;
 
+typedef struct sigoffset_s {
+    uint32_t offset;
+    int     n;
+} sigoffset_t;
+typedef struct sigoffset_array_s {
+    sigoffset_t *a;
+    int     cap;
+    int     sz;
+} sigoffset_array_t;
+
+KHASH_MAP_INIT_INT64(sigoffset, sigoffset_array_t)
+static kh_sigoffset_t *my_sigoffset = NULL;
+
 // ---- Defining the multiple functions now -----
 #define SUPER() \
 GO(0)   \
@@ -651,6 +664,24 @@ static void bridgeGtkTableClass(my_GtkTableClass_t* class)
     bridgeGtkContainerClass(&class->parent_class);
 }
 
+// ----- GtkFixedClass ------
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkFixedClass(my_GtkFixedClass_t* class)
+{
+    wrapGtkContainerClass(&class->parent_class);
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkFixedClass(my_GtkFixedClass_t* class)
+{   
+    unwrapGtkContainerClass(&class->parent_class);
+}
+// autobridge
+static void bridgeGtkFixedClass(my_GtkFixedClass_t* class)
+{
+    bridgeGtkContainerClass(&class->parent_class);
+}
+
 // ----- MetaFramesClass ------
 
 // wrap (so bridge all calls, just in case)
@@ -972,8 +1003,196 @@ my_GTypeValueTable_t* findFreeGTypeValueTable(my_GTypeValueTable_t* fcts)
     return NULL;
 }
 
+// signal2 ...
+#define GO(A)   \
+static uintptr_t my_signal2_fct_##A = 0;                                \
+static void* my_signal2_##A(void* a, void* b)                           \
+{                                                                       \
+    return (void*)RunFunction(my_context, my_signal2_fct_##A, 2, a, b); \
+}
+SUPER()
+#undef GO
+static void* find_signal2_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_signal2_fct_##A == (uintptr_t)fct) return my_signal2_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_signal2_fct_##A == 0) {my_signal2_fct_##A = (uintptr_t)fct; return my_signal2_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal2 callback\n");
+    return NULL;
+}
+// signal3 ...
+#define GO(A)   \
+static uintptr_t my_signal3_fct_##A = 0;                                    \
+static void* my_signal3_##A(void* a, void* b, void* c)                      \
+{                                                                           \
+    return (void*)RunFunction(my_context, my_signal3_fct_##A, 3, a, b, c);  \
+}
+SUPER()
+#undef GO
+static void* find_signal3_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_signal3_fct_##A == (uintptr_t)fct) return my_signal3_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_signal3_fct_##A == 0) {my_signal3_fct_##A = (uintptr_t)fct; return my_signal3_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal3 callback\n");
+    return NULL;
+}
+// signal4 ...
+#define GO(A)   \
+static uintptr_t my_signal4_fct_##A = 0;                                        \
+static void* my_signal4_##A(void* a, void* b, void* c, void* d)                 \
+{                                                                               \
+    return (void*)RunFunction(my_context, my_signal4_fct_##A, 4, a, b, c, d);   \
+}
+SUPER()
+#undef GO
+static void* find_signal4_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_signal4_fct_##A == (uintptr_t)fct) return my_signal4_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_signal4_fct_##A == 0) {my_signal4_fct_##A = (uintptr_t)fct; return my_signal4_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal4 callback\n");
+    return NULL;
+}
+// signal5 ...
+#define GO(A)   \
+static uintptr_t my_signal5_fct_##A = 0;                                        \
+static void* my_signal5_##A(void* a, void* b, void* c, void* d, void* e)        \
+{                                                                               \
+    return (void*)RunFunction(my_context, my_signal5_fct_##A, 5, a, b, c, d, e);\
+}
+SUPER()
+#undef GO
+static void* find_signal5_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_signal5_fct_##A == (uintptr_t)fct) return my_signal5_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_signal5_fct_##A == 0) {my_signal5_fct_##A = (uintptr_t)fct; return my_signal5_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal5 callback\n");
+    return NULL;
+}
+// signal6 ...
+#define GO(A)   \
+static uintptr_t my_signal6_fct_##A = 0;                                            \
+static void* my_signal6_##A(void* a, void* b, void* c, void* d, void* e, void* f)   \
+{                                                                                   \
+    return (void*)RunFunction(my_context, my_signal6_fct_##A, 6, a, b, c, d, e, f); \
+}
+SUPER()
+#undef GO
+static void* find_signal6_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_signal6_fct_##A == (uintptr_t)fct) return my_signal6_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_signal6_fct_##A == 0) {my_signal6_fct_##A = (uintptr_t)fct; return my_signal6_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal6 callback\n");
+    return NULL;
+}
+// signal7 ...
+#define GO(A)   \
+static uintptr_t my_signal7_fct_##A = 0;                                            \
+static void* my_signal7_##A(void* a, void* b, void* c, void* d, void* e, void* f, void* g)  \
+{                                                                                           \
+    return (void*)RunFunction(my_context, my_signal7_fct_##A, 7, a, b, c, d, e, f, g);      \
+}
+SUPER()
+#undef GO
+static void* find_signal7_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_signal7_fct_##A == (uintptr_t)fct) return my_signal7_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_signal7_fct_##A == 0) {my_signal7_fct_##A = (uintptr_t)fct; return my_signal7_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo signal7 callback\n");
+    return NULL;
+}
+static const wrapper_t wrappers[] = {pFpp, pFppp, pFpppp, pFpppp, pFppppp, pFpppppp};
+typedef void* (*finder_t)(void*);
+static const finder_t finders[] = {find_signal2_Fct, find_signal3_Fct, find_signal4_Fct, find_signal5_Fct, find_signal6_Fct, find_signal7_Fct};
+#define MAX_SIGNAL_N 7
 
 // ---- GTypeInfo ----
+// let's handle signal with offset, that are used to wrap custom signal function
+void my_unwrap_signal_offset(void* klass);
+void my_add_signal_offset(size_t itype, uint32_t offset, int n)
+{
+    printf_log(LOG_DEBUG, "my_add_signal_offset(0x%zx, %d, %d)\n", itype, offset, n);
+    if(!offset || !itype) // no offset means no overload...
+        return;
+    if(n<0 || n>MAX_SIGNAL_N) {
+        printf_log(LOG_NONE, "Warning, signal with too many args (%d) in my_add_signal_offset\n", n);
+        return;
+    }
+    int ret;
+    khint_t k = kh_put(sigoffset, my_sigoffset, itype, &ret);
+    sigoffset_array_t *p = &kh_value(my_sigoffset, k);
+    if(ret) {
+        p->a = NULL; p->cap = 0; p->sz = 0;
+    }
+    // check if offset already there
+    for(int i=0; i<p->sz; ++i)
+        if(p->a[i].offset == offset) {
+            printf_log(LOG_INFO, "Offset already there... Bye\n");
+            return; // already there, bye
+        }
+    if(p->sz==p->cap) {
+        p->cap+=4;
+        p->a = (sigoffset_t*)realloc(p->a, sizeof(sigoffset_t)*p->cap);
+    }
+    p->a[p->sz].offset = offset;
+    p->a[p->sz++].n = n;
+}
+void my_unwrap_signal_offset(void* klass)
+{
+    if(!klass)
+        return;
+    size_t itype = *(size_t*)klass;
+    khint_t k = kh_get(sigoffset, my_sigoffset, itype);
+    if(k==kh_end(my_sigoffset))
+        return;
+    sigoffset_array_t *p = &kh_value(my_sigoffset, k);
+    printf_log(LOG_DEBUG, "my_unwrap_signal_offset(%p) type=0x%zx with %d signals with offset\n", klass, itype, p->sz);
+    for(int i=0; i<p->sz; ++i) {
+        void** f = (void**)((uintptr_t)klass + p->a[i].offset);
+        if(!GetNativeFnc((uintptr_t)*f)) {
+            // Not a native function: autobridge it
+            void* new_f = finders[p->a[i].n-2](f);
+            printf_log(LOG_DEBUG, "Unwrapping %p -> %p (with alternate)\n", *f, new_f);
+            if(!hasAlternate(new_f))
+                addAlternate(new_f, *f);
+            *f = new_f;
+        }
+    }
+}
 
 // First the structure my_GTypeInfo_t statics, with paired x64 source pointer
 #define GO(A) \
@@ -985,10 +1204,10 @@ SUPER()
 // Then the static functions callback that may be used with the structure
 // base_init ...
 #define GO(A)   \
-static uintptr_t my_base_init_fct_##A = 0;                      \
-static int my_base_init_##A(void* a)                            \
-{                                                               \
-    return RunFunction(my_context, my_base_init_fct_##A, 1, a); \
+static uintptr_t my_base_init_fct_##A = 0;                          \
+static int my_base_init_##A(void* a)                                \
+{                                                                   \
+    return RunFunction(my_context, my_base_init_fct_##A, 1, a);     \
 }
 SUPER()
 #undef GO
@@ -1029,21 +1248,27 @@ static void* find_base_finalize_Fct(void* fct)
 }
 // class_init ...
 #define GO(A)   \
-static uintptr_t my_class_init_fct_##A = 0;                         \
-static int my_class_init_##A(void* a, void* b)                      \
-{                                                                   \
-    return RunFunction(my_context, my_class_init_fct_##A, 2, a, b); \
+static uintptr_t my_class_init_fct_##A = 0;                             \
+static size_t parent_class_init_##A = 0;                                \
+static int my_class_init_##A(void* a, void* b)                          \
+{                                                                       \
+    printf_log(LOG_DEBUG, "Custom Class init %d for class %p (parent=%p)\n", A, a, (void*)parent_class_init_##A);\
+    int ret = RunFunction(my_context, my_class_init_fct_##A, 2, a, b);  \
+    unwrapGTKClass(a, parent_class_init_##A);                           \
+    bridgeGTKClass(a, parent_class_init_##A);                           \
+    my_unwrap_signal_offset(a);                                         \
+    return ret;                                                         \
 }
 SUPER()
 #undef GO
-static void* find_class_init_Fct(void* fct)
+static void* find_class_init_Fct(void* fct, size_t parent)
 {
     if(!fct) return fct;
     if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
-    #define GO(A) if(my_class_init_fct_##A == (uintptr_t)fct) return my_class_init_##A;
+    #define GO(A) if(my_class_init_fct_##A == (uintptr_t)fct && parent_class_init_##A==parent) return my_class_init_##A;
     SUPER()
     #undef GO
-    #define GO(A) if(my_class_init_fct_##A == 0) {my_class_init_fct_##A = (uintptr_t)fct; return my_class_init_##A; }
+    #define GO(A) if(my_class_init_fct_##A == 0) {my_class_init_fct_##A = (uintptr_t)fct; parent_class_init_##A=parent; return my_class_init_##A; }
     SUPER()
     #undef GO
     printf_log(LOG_NONE, "Warning, no more slot for GTypeInfo class_init callback\n");
@@ -1106,7 +1331,7 @@ my_GTypeInfo_t* findFreeGTypeInfo(my_GTypeInfo_t* fcts, size_t parent)
         my_gtypeinfo_##A.class_size = fcts->class_size;                                 \
         my_gtypeinfo_##A.base_init = find_base_init_Fct(fcts->base_init);               \
         my_gtypeinfo_##A.base_finalize = find_base_finalize_Fct(fcts->base_finalize);   \
-        my_gtypeinfo_##A.class_init = find_class_init_Fct(fcts->class_init);            \
+        my_gtypeinfo_##A.class_init = find_class_init_Fct(fcts->class_init, parent);    \
         my_gtypeinfo_##A.class_finalize = find_class_finalize_Fct(fcts->class_finalize);\
         my_gtypeinfo_##A.class_data = fcts->class_data;                                 \
         my_gtypeinfo_##A.instance_size = fcts->instance_size;                           \
@@ -1132,11 +1357,14 @@ SUPER()
 #undef GO
 // Then the static functions callback that may be used with the structure
 #define GO(A)   \
-static int fct_gtk_parent_##A = 0 ;                     \
-static uintptr_t fct_gtk_class_init_##A = 0;       \
-static int my_gtk_class_init_##A(void* g_class) {  \
-    printf_log(LOG_DEBUG, "Calling fct_gtk_class_init_" #A " wrapper\n");             \
-    return (int)RunFunction(my_context, fct_gtk_class_init_##A, 1, g_class);    \
+static int fct_gtk_parent_##A = 0 ;                 \
+static uintptr_t fct_gtk_class_init_##A = 0;        \
+static int my_gtk_class_init_##A(void* g_class) {   \
+    printf_log(LOG_DEBUG, "Calling fct_gtk_class_init_" #A " wrapper\n");           \
+    int ret = (int)RunFunction(my_context, fct_gtk_class_init_##A, 1, g_class);     \
+    unwrapGTKClass(g_class, fct_gtk_parent_##A);                                    \
+    bridgeGTKClass(g_class, fct_gtk_parent_##A);                                    \
+    return ret;                                                                     \
 }   \
 static uintptr_t fct_gtk_object_init_##A = 0;  \
 static int my_gtk_object_init_##A(void* object, void* data) {   \
@@ -1186,6 +1414,7 @@ void InitGTKClass(bridge_t *bridge)
 {
     my_bridge  = bridge;
     my_signalmap = kh_init(signalmap);
+    my_sigoffset = kh_init(sigoffset);
 }
 
 void FiniGTKClass()
@@ -1199,6 +1428,14 @@ void FiniGTKClass()
         kh_destroy(signalmap, my_signalmap);
         my_signalmap = NULL;
     }
+    if(my_sigoffset) {
+        sigoffset_array_t* p;
+        kh_foreach_value_ref(my_sigoffset, p,
+            free(p->a);
+        );
+        kh_destroy(sigoffset, my_sigoffset);
+        my_sigoffset = NULL;
+    }
 }
 
 #define GTKCLASS(A)             \
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 4634385a..ad5d80ae 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -223,12 +223,10 @@
 #() pFii
 #() pFiu
 #() pFip
-#() pFiV
 #() pFui
 #() pFuC
 #() pFuu
 #() pFup
-#() pFuV
 #() pFUi
 #() pFdd
 #() pFlp
@@ -313,7 +311,6 @@
 #() vFppl
 #() vFppL
 #() vFppp
-#() vFppV
 #() iFEiw
 #() iFEip
 #() iFEWW
@@ -455,6 +452,7 @@
 #() LFppL
 #() LFSpL
 #() pFEip
+#() pFEiV
 #() pFEup
 #() pFEpi
 #() pFEpu
@@ -621,7 +619,6 @@
 #() vFpppd
 #() vFpppL
 #() vFpppp
-#() vFpppV
 #() cFpiii
 #() iFEiip
 #() iFEiiN
@@ -821,7 +818,6 @@
 #() pFpipi
 #() pFpipd
 #() pFpipp
-#() pFpipV
 #() pFpCWp
 #() pFpCuW
 #() pFpCuu
@@ -855,12 +851,15 @@
 #() pFSppi
 #() vFEiipV
 #() vFEippp
+#() vFEpipV
+#() vFEpipA
 #() vFEpuup
 #() vFEpuuV
 #() vFEpupp
 #() vFEpupA
 #() vFEpLLp
 #() vFEppip
+#() vFEppiV
 #() vFEppup
 #() vFEpppp
 #() vFiiiii
@@ -938,7 +937,6 @@
 #() vFpipiu
 #() vFpuiip
 #() vFpuipp
-#() vFpuipV
 #() vFpuuuu
 #() vFpuddd
 #() vFpffff
@@ -1083,6 +1081,8 @@
 #() pFEpiii
 #() pFEpipL
 #() pFEpipp
+#() pFEpipV
+#() pFEpipA
 #() pFEpupp
 #() pFEppii
 #() pFEppip
@@ -1137,6 +1137,7 @@
 #() vFEpuipp
 #() vFEpLLpp
 #() vFEppipV
+#() vFEppipA
 #() vFEppupp
 #() vFEppppp
 #() vFiiiiii
@@ -2015,6 +2016,10 @@ wrappedgio2:
   - g_simple_async_result_new_take_error
 - vFpippp:
   - g_async_initable_init_async
+- vFppipV:
+  - g_simple_async_result_set_error
+- vFppipA:
+  - g_simple_async_result_set_error_va
 - vFpipppp:
   - g_dbus_connection_new_for_address
 - vFiippppV:
@@ -2099,9 +2104,11 @@ wrappedglib2:
   - g_build_filename
   - g_markup_printf_escaped
   - g_strdup_printf
+  - g_strjoin
   - g_variant_new
 - pFpA:
   - g_markup_vprintf_escaped
+  - g_strjoinv
   - g_variant_new_parsed_va
 - vFppp:
   - g_array_sort_with_data
@@ -2110,7 +2117,12 @@ wrappedglib2:
   - g_ptr_array_sort_with_data
   - g_static_private_set
 - vFppV:
+  - g_string_append_printf
+  - g_string_printf
   - g_variant_get
+- vFppA:
+  - g_string_append_vprintf
+  - g_string_vprintf
 - iFppp:
   - g_vasprintf
   - g_vfprintf
@@ -2138,6 +2150,10 @@ wrappedglib2:
   - g_variant_new_va
 - pFppV:
   - g_build_path
+- vFpipV:
+  - g_log
+- vFpipA:
+  - g_logv
 - vFpupp:
   - g_datalist_id_set_data_full
 - vFpppp:
@@ -2151,6 +2167,10 @@ wrappedglib2:
 - uFpipp:
   - g_io_add_watch
   - g_log_set_handler
+- pFpipV:
+  - g_error_new
+- pFpipA:
+  - g_error_new_valist
 - pFpupp:
   - g_datalist_id_dup_data
 - pFppip:
@@ -2264,6 +2284,9 @@ wrappedgtkx112:
 - iFpp:
   - gtk_init_check
   - gtk_type_unique
+- pFiV:
+  - gtk_list_store_new
+  - gtk_tree_store_new
 - pFpi:
   - gtk_type_check_object_cast
 - vFppp:
@@ -2284,6 +2307,8 @@ wrappedgtkx112:
   - gtk_widget_style_get_valist
 - uFupp:
   - gtk_timeout_add
+- vFppiV:
+  - gtk_list_store_insert_with_values
 - vFppup:
   - gtk_action_group_add_actions
 - vFpppp:
diff --git a/src/wrapped/generated/wrappedgio2types.h b/src/wrapped/generated/wrappedgio2types.h
index ae5562f6..54be1037 100644
--- a/src/wrapped/generated/wrappedgio2types.h
+++ b/src/wrapped/generated/wrappedgio2types.h
@@ -19,6 +19,8 @@ typedef uint64_t (*uFpppp_t)(void*, void*, void*, void*);
 typedef uintptr_t (*LFpppp_t)(void*, void*, void*, void*);
 typedef void* (*pFpppp_t)(void*, void*, void*, void*);
 typedef void (*vFpippp_t)(void*, int64_t, void*, void*, void*);
+typedef void (*vFppipV_t)(void*, void*, int64_t, void*, ...);
+typedef void (*vFppipA_t)(void*, void*, int64_t, void*, va_list);
 typedef void (*vFpipppp_t)(void*, int64_t, void*, void*, void*, void*);
 typedef void (*vFiippppV_t)(int64_t, int64_t, void*, void*, void*, void*, ...);
 typedef void (*vFiupippp_t)(int64_t, uint64_t, void*, int64_t, void*, void*, void*);
@@ -53,6 +55,8 @@ typedef void (*vFpppppppiippp_t)(void*, void*, void*, void*, void*, void*, void*
 	GO(g_simple_async_result_new_from_error, pFpppp_t) \
 	GO(g_simple_async_result_new_take_error, pFpppp_t) \
 	GO(g_async_initable_init_async, vFpippp_t) \
+	GO(g_simple_async_result_set_error, vFppipV_t) \
+	GO(g_simple_async_result_set_error_va, vFppipA_t) \
 	GO(g_dbus_connection_new_for_address, vFpipppp_t) \
 	GO(g_async_initable_new_async, vFiippppV_t) \
 	GO(g_async_initable_newv_async, vFiupippp_t) \
diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h
index 8ed095bc..ba82b40d 100644
--- a/src/wrapped/generated/wrappedglib2types.h
+++ b/src/wrapped/generated/wrappedglib2types.h
@@ -25,6 +25,7 @@ typedef void* (*pFpV_t)(void*, ...);
 typedef void* (*pFpA_t)(void*, va_list);
 typedef void (*vFppp_t)(void*, void*, void*);
 typedef void (*vFppV_t)(void*, void*, ...);
+typedef void (*vFppA_t)(void*, void*, va_list);
 typedef int64_t (*iFppp_t)(void*, void*, void*);
 typedef int64_t (*iFppV_t)(void*, void*, ...);
 typedef uint64_t (*uFipp_t)(int64_t, void*, void*);
@@ -32,12 +33,16 @@ typedef uint64_t (*uFupp_t)(uint64_t, void*, void*);
 typedef uint64_t (*uFppp_t)(void*, void*, void*);
 typedef void* (*pFppp_t)(void*, void*, void*);
 typedef void* (*pFppV_t)(void*, void*, ...);
+typedef void (*vFpipV_t)(void*, int64_t, void*, ...);
+typedef void (*vFpipA_t)(void*, int64_t, void*, va_list);
 typedef void (*vFpupp_t)(void*, uint64_t, void*, void*);
 typedef void (*vFpppp_t)(void*, void*, void*, void*);
 typedef int64_t (*iFpLpp_t)(void*, uintptr_t, void*, void*);
 typedef int64_t (*iFpLpV_t)(void*, uintptr_t, void*, ...);
 typedef uint64_t (*uFippp_t)(int64_t, void*, void*, void*);
 typedef uint64_t (*uFpipp_t)(void*, int64_t, void*, void*);
+typedef void* (*pFpipV_t)(void*, int64_t, void*, ...);
+typedef void* (*pFpipA_t)(void*, int64_t, void*, va_list);
 typedef void* (*pFpupp_t)(void*, uint64_t, void*, void*);
 typedef void* (*pFppip_t)(void*, void*, int64_t, void*);
 typedef void* (*pFpppp_t)(void*, void*, void*, void*);
@@ -87,15 +92,21 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v
 	GO(g_build_filename, pFpV_t) \
 	GO(g_markup_printf_escaped, pFpV_t) \
 	GO(g_strdup_printf, pFpV_t) \
+	GO(g_strjoin, pFpV_t) \
 	GO(g_variant_new, pFpV_t) \
 	GO(g_markup_vprintf_escaped, pFpA_t) \
+	GO(g_strjoinv, pFpA_t) \
 	GO(g_variant_new_parsed_va, pFpA_t) \
 	GO(g_array_sort_with_data, vFppp_t) \
 	GO(g_hash_table_foreach, vFppp_t) \
 	GO(g_ptr_array_foreach, vFppp_t) \
 	GO(g_ptr_array_sort_with_data, vFppp_t) \
 	GO(g_static_private_set, vFppp_t) \
+	GO(g_string_append_printf, vFppV_t) \
+	GO(g_string_printf, vFppV_t) \
 	GO(g_variant_get, vFppV_t) \
+	GO(g_string_append_vprintf, vFppA_t) \
+	GO(g_string_vprintf, vFppA_t) \
 	GO(g_vasprintf, iFppp_t) \
 	GO(g_vfprintf, iFppp_t) \
 	GO(g_vsprintf, iFppp_t) \
@@ -116,6 +127,8 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v
 	GO(g_slist_sort_with_data, pFppp_t) \
 	GO(g_variant_new_va, pFppp_t) \
 	GO(g_build_path, pFppV_t) \
+	GO(g_log, vFpipV_t) \
+	GO(g_logv, vFpipA_t) \
 	GO(g_datalist_id_set_data_full, vFpupp_t) \
 	GO(g_source_set_callback, vFpppp_t) \
 	GO(g_vsnprintf, iFpLpp_t) \
@@ -123,6 +136,8 @@ typedef int64_t (*iFpppippppppp_t)(void*, void*, void*, int64_t, void*, void*, v
 	GO(g_idle_add_full, uFippp_t) \
 	GO(g_io_add_watch, uFpipp_t) \
 	GO(g_log_set_handler, uFpipp_t) \
+	GO(g_error_new, pFpipV_t) \
+	GO(g_error_new_valist, pFpipA_t) \
 	GO(g_datalist_id_dup_data, pFpupp_t) \
 	GO(g_thread_create, pFppip_t) \
 	GO(g_hash_table_new_full, pFpppp_t) \
diff --git a/src/wrapped/generated/wrappedgtkx112types.h b/src/wrapped/generated/wrappedgtkx112types.h
index 03911427..eca206ce 100644
--- a/src/wrapped/generated/wrappedgtkx112types.h
+++ b/src/wrapped/generated/wrappedgtkx112types.h
@@ -15,11 +15,13 @@ typedef float (*fFp_t)(void*);
 typedef void* (*pFi_t)(int64_t);
 typedef void (*vFpp_t)(void*, void*);
 typedef int64_t (*iFpp_t)(void*, void*);
+typedef void* (*pFiV_t)(int64_t, ...);
 typedef void* (*pFpi_t)(void*, int64_t);
 typedef void (*vFppp_t)(void*, void*, void*);
 typedef void (*vFppV_t)(void*, void*, ...);
 typedef void (*vFppA_t)(void*, void*, va_list);
 typedef uint64_t (*uFupp_t)(uint64_t, void*, void*);
+typedef void (*vFppiV_t)(void*, void*, int64_t, ...);
 typedef void (*vFppup_t)(void*, void*, uint64_t, void*);
 typedef void (*vFpppp_t)(void*, void*, void*, void*);
 typedef int64_t (*iFpppp_t)(void*, void*, void*, void*);
@@ -46,6 +48,8 @@ typedef void* (*pFpipppppppi_t)(void*, int64_t, void*, void*, void*, void*, void
 	GO(gtk_init, vFpp_t) \
 	GO(gtk_init_check, iFpp_t) \
 	GO(gtk_type_unique, iFpp_t) \
+	GO(gtk_list_store_new, pFiV_t) \
+	GO(gtk_tree_store_new, pFiV_t) \
 	GO(gtk_type_check_object_cast, pFpi_t) \
 	GO(gtk_builder_connect_signals_full, vFppp_t) \
 	GO(gtk_clipboard_request_text, vFppp_t) \
@@ -61,6 +65,7 @@ typedef void* (*pFpipppppppi_t)(void*, int64_t, void*, void*, void*, void*, void
 	GO(gtk_list_store_set_valist, vFppA_t) \
 	GO(gtk_widget_style_get_valist, vFppA_t) \
 	GO(gtk_timeout_add, uFupp_t) \
+	GO(gtk_list_store_insert_with_values, vFppiV_t) \
 	GO(gtk_action_group_add_actions, vFppup_t) \
 	GO(gtk_clipboard_request_contents, vFpppp_t) \
 	GO(gtk_object_set_data_full, vFpppp_t) \
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 9ef6a2b4..1886745a 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -257,12 +257,10 @@ typedef void* (*pFEp_t)(x64emu_t*, void*);
 typedef void* (*pFii_t)(int64_t, int64_t);
 typedef void* (*pFiu_t)(int64_t, uint64_t);
 typedef void* (*pFip_t)(int64_t, void*);
-typedef void* (*pFiV_t)(int64_t, void*);
 typedef void* (*pFui_t)(uint64_t, int64_t);
 typedef void* (*pFuC_t)(uint64_t, uint8_t);
 typedef void* (*pFuu_t)(uint64_t, uint64_t);
 typedef void* (*pFup_t)(uint64_t, void*);
-typedef void* (*pFuV_t)(uint64_t, void*);
 typedef void* (*pFUi_t)(uint64_t, int64_t);
 typedef void* (*pFdd_t)(double, double);
 typedef void* (*pFlp_t)(intptr_t, void*);
@@ -347,7 +345,6 @@ typedef void (*vFppd_t)(void*, void*, double);
 typedef void (*vFppl_t)(void*, void*, intptr_t);
 typedef void (*vFppL_t)(void*, void*, uintptr_t);
 typedef void (*vFppp_t)(void*, void*, void*);
-typedef void (*vFppV_t)(void*, void*, void*);
 typedef int64_t (*iFEiw_t)(x64emu_t*, int64_t, int16_t);
 typedef int64_t (*iFEip_t)(x64emu_t*, int64_t, void*);
 typedef int64_t (*iFEWW_t)(x64emu_t*, uint16_t, uint16_t);
@@ -489,6 +486,7 @@ typedef uintptr_t (*LFppi_t)(void*, void*, int64_t);
 typedef uintptr_t (*LFppL_t)(void*, void*, uintptr_t);
 typedef uintptr_t (*LFSpL_t)(void*, void*, uintptr_t);
 typedef void* (*pFEip_t)(x64emu_t*, int64_t, void*);
+typedef void* (*pFEiV_t)(x64emu_t*, int64_t, void*);
 typedef void* (*pFEup_t)(x64emu_t*, uint64_t, void*);
 typedef void* (*pFEpi_t)(x64emu_t*, void*, int64_t);
 typedef void* (*pFEpu_t)(x64emu_t*, void*, uint64_t);
@@ -655,7 +653,6 @@ typedef void (*vFpppU_t)(void*, void*, void*, uint64_t);
 typedef void (*vFpppd_t)(void*, void*, void*, double);
 typedef void (*vFpppL_t)(void*, void*, void*, uintptr_t);
 typedef void (*vFpppp_t)(void*, void*, void*, void*);
-typedef void (*vFpppV_t)(void*, void*, void*, void*);
 typedef int8_t (*cFpiii_t)(void*, int64_t, int64_t, int64_t);
 typedef int64_t (*iFEiip_t)(x64emu_t*, int64_t, int64_t, void*);
 typedef int64_t (*iFEiiN_t)(x64emu_t*, int64_t, int64_t, ...);
@@ -855,7 +852,6 @@ typedef void* (*pFpiLL_t)(void*, int64_t, uintptr_t, uintptr_t);
 typedef void* (*pFpipi_t)(void*, int64_t, void*, int64_t);
 typedef void* (*pFpipd_t)(void*, int64_t, void*, double);
 typedef void* (*pFpipp_t)(void*, int64_t, void*, void*);
-typedef void* (*pFpipV_t)(void*, int64_t, void*, void*);
 typedef void* (*pFpCWp_t)(void*, uint8_t, uint16_t, void*);
 typedef void* (*pFpCuW_t)(void*, uint8_t, uint64_t, uint16_t);
 typedef void* (*pFpCuu_t)(void*, uint8_t, uint64_t, uint64_t);
@@ -889,12 +885,15 @@ typedef void* (*pFpppp_t)(void*, void*, void*, void*);
 typedef void* (*pFSppi_t)(void*, void*, void*, int64_t);
 typedef void (*vFEiipV_t)(x64emu_t*, int64_t, int64_t, void*, void*);
 typedef void (*vFEippp_t)(x64emu_t*, int64_t, void*, void*, void*);
+typedef void (*vFEpipV_t)(x64emu_t*, void*, int64_t, void*, void*);
+typedef void (*vFEpipA_t)(x64emu_t*, void*, int64_t, void*, void*);
 typedef void (*vFEpuup_t)(x64emu_t*, void*, uint64_t, uint64_t, void*);
 typedef void (*vFEpuuV_t)(x64emu_t*, void*, uint64_t, uint64_t, void*);
 typedef void (*vFEpupp_t)(x64emu_t*, void*, uint64_t, void*, void*);
 typedef void (*vFEpupA_t)(x64emu_t*, void*, uint64_t, void*, void*);
 typedef void (*vFEpLLp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*);
 typedef void (*vFEppip_t)(x64emu_t*, void*, void*, int64_t, void*);
+typedef void (*vFEppiV_t)(x64emu_t*, void*, void*, int64_t, void*);
 typedef void (*vFEppup_t)(x64emu_t*, void*, void*, uint64_t, void*);
 typedef void (*vFEpppp_t)(x64emu_t*, void*, void*, void*, void*);
 typedef void (*vFiiiii_t)(int64_t, int64_t, int64_t, int64_t, int64_t);
@@ -972,7 +971,6 @@ typedef void (*vFpipii_t)(void*, int64_t, void*, int64_t, int64_t);
 typedef void (*vFpipiu_t)(void*, int64_t, void*, int64_t, uint64_t);
 typedef void (*vFpuiip_t)(void*, uint64_t, int64_t, int64_t, void*);
 typedef void (*vFpuipp_t)(void*, uint64_t, int64_t, void*, void*);
-typedef void (*vFpuipV_t)(void*, uint64_t, int64_t, void*, void*);
 typedef void (*vFpuuuu_t)(void*, uint64_t, uint64_t, uint64_t, uint64_t);
 typedef void (*vFpuddd_t)(void*, uint64_t, double, double, double);
 typedef void (*vFpffff_t)(void*, float, float, float, float);
@@ -1117,6 +1115,8 @@ typedef uintptr_t (*LFppppp_t)(void*, void*, void*, void*, void*);
 typedef void* (*pFEpiii_t)(x64emu_t*, void*, int64_t, int64_t, int64_t);
 typedef void* (*pFEpipL_t)(x64emu_t*, void*, int64_t, void*, uintptr_t);
 typedef void* (*pFEpipp_t)(x64emu_t*, void*, int64_t, void*, void*);
+typedef void* (*pFEpipV_t)(x64emu_t*, void*, int64_t, void*, void*);
+typedef void* (*pFEpipA_t)(x64emu_t*, void*, int64_t, void*, void*);
 typedef void* (*pFEpupp_t)(x64emu_t*, void*, uint64_t, void*, void*);
 typedef void* (*pFEppii_t)(x64emu_t*, void*, void*, int64_t, int64_t);
 typedef void* (*pFEppip_t)(x64emu_t*, void*, void*, int64_t, void*);
@@ -1171,6 +1171,7 @@ typedef void (*vFEpippp_t)(x64emu_t*, void*, int64_t, void*, void*, void*);
 typedef void (*vFEpuipp_t)(x64emu_t*, void*, uint64_t, int64_t, void*, void*);
 typedef void (*vFEpLLpp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*, void*);
 typedef void (*vFEppipV_t)(x64emu_t*, void*, void*, int64_t, void*, void*);
+typedef void (*vFEppipA_t)(x64emu_t*, void*, void*, int64_t, void*, void*);
 typedef void (*vFEppupp_t)(x64emu_t*, void*, void*, uint64_t, void*, void*);
 typedef void (*vFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*);
 typedef void (*vFiiiiii_t)(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t);
@@ -2135,12 +2136,10 @@ void pFEp(x64emu_t *emu, uintptr_t fcn) { pFEp_t fn = (pFEp_t)fcn; R_RAX=(uintpt
 void pFii(x64emu_t *emu, uintptr_t fcn) { pFii_t fn = (pFii_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (int64_t)R_RSI); }
 void pFiu(x64emu_t *emu, uintptr_t fcn) { pFiu_t fn = (pFiu_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (uint64_t)R_RSI); }
 void pFip(x64emu_t *emu, uintptr_t fcn) { pFip_t fn = (pFip_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (void*)R_RSI); }
-void pFiV(x64emu_t *emu, uintptr_t fcn) { pFiV_t fn = (pFiV_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (void*)(R_RSP + 8)); }
 void pFui(x64emu_t *emu, uintptr_t fcn) { pFui_t fn = (pFui_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (int64_t)R_RSI); }
 void pFuC(x64emu_t *emu, uintptr_t fcn) { pFuC_t fn = (pFuC_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (uint8_t)R_RSI); }
 void pFuu(x64emu_t *emu, uintptr_t fcn) { pFuu_t fn = (pFuu_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (uint64_t)R_RSI); }
 void pFup(x64emu_t *emu, uintptr_t fcn) { pFup_t fn = (pFup_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (void*)R_RSI); }
-void pFuV(x64emu_t *emu, uintptr_t fcn) { pFuV_t fn = (pFuV_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (void*)(R_RSP + 8)); }
 void pFUi(x64emu_t *emu, uintptr_t fcn) { pFUi_t fn = (pFUi_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (int64_t)R_RSI); }
 void pFdd(x64emu_t *emu, uintptr_t fcn) { pFdd_t fn = (pFdd_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0]); }
 void pFlp(x64emu_t *emu, uintptr_t fcn) { pFlp_t fn = (pFlp_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, (void*)R_RSI); }
@@ -2225,7 +2224,6 @@ void vFppd(x64emu_t *emu, uintptr_t fcn) { vFppd_t fn = (vFppd_t)fcn; fn((void*)
 void vFppl(x64emu_t *emu, uintptr_t fcn) { vFppl_t fn = (vFppl_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX); }
 void vFppL(x64emu_t *emu, uintptr_t fcn) { vFppL_t fn = (vFppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); }
 void vFppp(x64emu_t *emu, uintptr_t fcn) { vFppp_t fn = (vFppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); }
-void vFppV(x64emu_t *emu, uintptr_t fcn) { vFppV_t fn = (vFppV_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); }
 void iFEiw(x64emu_t *emu, uintptr_t fcn) { iFEiw_t fn = (iFEiw_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int16_t)R_RSI); }
 void iFEip(x64emu_t *emu, uintptr_t fcn) { iFEip_t fn = (iFEip_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI); }
 void iFEWW(x64emu_t *emu, uintptr_t fcn) { iFEWW_t fn = (iFEWW_t)fcn; R_RAX=(int64_t)fn(emu, (uint16_t)R_RDI, (uint16_t)R_RSI); }
@@ -2367,6 +2365,7 @@ void LFppi(x64emu_t *emu, uintptr_t fcn) { LFppi_t fn = (LFppi_t)fcn; R_RAX=(uin
 void LFppL(x64emu_t *emu, uintptr_t fcn) { LFppL_t fn = (LFppL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); }
 void LFSpL(x64emu_t *emu, uintptr_t fcn) { LFSpL_t fn = (LFSpL_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX); }
 void pFEip(x64emu_t *emu, uintptr_t fcn) { pFEip_t fn = (pFEip_t)fcn; R_RAX=(uintptr_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI); }
+void pFEiV(x64emu_t *emu, uintptr_t fcn) { pFEiV_t fn = (pFEiV_t)fcn; R_RAX=(uintptr_t)fn(emu, (int64_t)R_RDI, (void*)(R_RSP + 8)); }
 void pFEup(x64emu_t *emu, uintptr_t fcn) { pFEup_t fn = (pFEup_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint64_t)R_RDI, (void*)R_RSI); }
 void pFEpi(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI); }
 void pFEpu(x64emu_t *emu, uintptr_t fcn) { pFEpu_t fn = (pFEpu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI); }
@@ -2533,7 +2532,6 @@ void vFpppU(x64emu_t *emu, uintptr_t fcn) { vFpppU_t fn = (vFpppU_t)fcn; fn((voi
 void vFpppd(x64emu_t *emu, uintptr_t fcn) { vFpppd_t fn = (vFpppd_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); }
 void vFpppL(x64emu_t *emu, uintptr_t fcn) { vFpppL_t fn = (vFpppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); }
 void vFpppp(x64emu_t *emu, uintptr_t fcn) { vFpppp_t fn = (vFpppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
-void vFpppV(x64emu_t *emu, uintptr_t fcn) { vFpppV_t fn = (vFpppV_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
 void cFpiii(x64emu_t *emu, uintptr_t fcn) { cFpiii_t fn = (cFpiii_t)fcn; R_RAX=fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); }
 void iFEiip(x64emu_t *emu, uintptr_t fcn) { iFEiip_t fn = (iFEiip_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX); }
 void iFEiiN(x64emu_t *emu, uintptr_t fcn) { iFEiiN_t fn = (iFEiiN_t)fcn; R_RAX=(int64_t)fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX); }
@@ -2733,7 +2731,6 @@ void pFpiLL(x64emu_t *emu, uintptr_t fcn) { pFpiLL_t fn = (pFpiLL_t)fcn; R_RAX=(
 void pFpipi(x64emu_t *emu, uintptr_t fcn) { pFpipi_t fn = (pFpipi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX); }
 void pFpipd(x64emu_t *emu, uintptr_t fcn) { pFpipd_t fn = (pFpipd_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); }
 void pFpipp(x64emu_t *emu, uintptr_t fcn) { pFpipp_t fn = (pFpipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
-void pFpipV(x64emu_t *emu, uintptr_t fcn) { pFpipV_t fn = (pFpipV_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
 void pFpCWp(x64emu_t *emu, uintptr_t fcn) { pFpCWp_t fn = (pFpCWp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); }
 void pFpCuW(x64emu_t *emu, uintptr_t fcn) { pFpCuW_t fn = (pFpCuW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (uint16_t)R_RCX); }
 void pFpCuu(x64emu_t *emu, uintptr_t fcn) { pFpCuu_t fn = (pFpCuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); }
@@ -2767,12 +2764,15 @@ void pFpppp(x64emu_t *emu, uintptr_t fcn) { pFpppp_t fn = (pFpppp_t)fcn; R_RAX=(
 void pFSppi(x64emu_t *emu, uintptr_t fcn) { pFSppi_t fn = (pFSppi_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX); }
 void vFEiipV(x64emu_t *emu, uintptr_t fcn) { vFEiipV_t fn = (vFEiipV_t)fcn; fn(emu, (int64_t)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
 void vFEippp(x64emu_t *emu, uintptr_t fcn) { vFEippp_t fn = (vFEippp_t)fcn; fn(emu, (int64_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
+void vFEpipV(x64emu_t *emu, uintptr_t fcn) { vFEpipV_t fn = (vFEpipV_t)fcn; fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
+void vFEpipA(x64emu_t *emu, uintptr_t fcn) { vFEpipA_t fn = (vFEpipA_t)fcn; fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void vFEpuup(x64emu_t *emu, uintptr_t fcn) { vFEpuup_t fn = (vFEpuup_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); }
 void vFEpuuV(x64emu_t *emu, uintptr_t fcn) { vFEpuuV_t fn = (vFEpuuV_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (void*)(R_RSP + 8)); }
 void vFEpupp(x64emu_t *emu, uintptr_t fcn) { vFEpupp_t fn = (vFEpupp_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void vFEpupA(x64emu_t *emu, uintptr_t fcn) { vFEpupA_t fn = (vFEpupA_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void vFEpLLp(x64emu_t *emu, uintptr_t fcn) { vFEpLLp_t fn = (vFEpLLp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); }
 void vFEppip(x64emu_t *emu, uintptr_t fcn) { vFEppip_t fn = (vFEppip_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); }
+void vFEppiV(x64emu_t *emu, uintptr_t fcn) { vFEppiV_t fn = (vFEppiV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)(R_RSP + 8)); }
 void vFEppup(x64emu_t *emu, uintptr_t fcn) { vFEppup_t fn = (vFEppup_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); }
 void vFEpppp(x64emu_t *emu, uintptr_t fcn) { vFEpppp_t fn = (vFEpppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void vFiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiii_t fn = (vFiiiii_t)fcn; fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); }
@@ -2850,7 +2850,6 @@ void vFpipii(x64emu_t *emu, uintptr_t fcn) { vFpipii_t fn = (vFpipii_t)fcn; fn((
 void vFpipiu(x64emu_t *emu, uintptr_t fcn) { vFpipiu_t fn = (vFpipiu_t)fcn; fn((void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (uint64_t)R_R8); }
 void vFpuiip(x64emu_t *emu, uintptr_t fcn) { vFpuiip_t fn = (vFpuiip_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (void*)R_R8); }
 void vFpuipp(x64emu_t *emu, uintptr_t fcn) { vFpuipp_t fn = (vFpuipp_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
-void vFpuipV(x64emu_t *emu, uintptr_t fcn) { vFpuipV_t fn = (vFpuipV_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); }
 void vFpuuuu(x64emu_t *emu, uintptr_t fcn) { vFpuuuu_t fn = (vFpuuuu_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); }
 void vFpuddd(x64emu_t *emu, uintptr_t fcn) { vFpuddd_t fn = (vFpuddd_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); }
 void vFpffff(x64emu_t *emu, uintptr_t fcn) { vFpffff_t fn = (vFpffff_t)fcn; fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); }
@@ -2995,6 +2994,8 @@ void LFppppp(x64emu_t *emu, uintptr_t fcn) { LFppppp_t fn = (LFppppp_t)fcn; R_RA
 void pFEpiii(x64emu_t *emu, uintptr_t fcn) { pFEpiii_t fn = (pFEpiii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); }
 void pFEpipL(x64emu_t *emu, uintptr_t fcn) { pFEpipL_t fn = (pFEpipL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); }
 void pFEpipp(x64emu_t *emu, uintptr_t fcn) { pFEpipp_t fn = (pFEpipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
+void pFEpipV(x64emu_t *emu, uintptr_t fcn) { pFEpipV_t fn = (pFEpipV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
+void pFEpipA(x64emu_t *emu, uintptr_t fcn) { pFEpipA_t fn = (pFEpipA_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void pFEpupp(x64emu_t *emu, uintptr_t fcn) { pFEpupp_t fn = (pFEpupp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void pFEppii(x64emu_t *emu, uintptr_t fcn) { pFEppii_t fn = (pFEppii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); }
 void pFEppip(x64emu_t *emu, uintptr_t fcn) { pFEppip_t fn = (pFEppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); }
@@ -3049,6 +3050,7 @@ void vFEpippp(x64emu_t *emu, uintptr_t fcn) { vFEpippp_t fn = (vFEpippp_t)fcn; f
 void vFEpuipp(x64emu_t *emu, uintptr_t fcn) { vFEpuipp_t fn = (vFEpuipp_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFEpLLpp(x64emu_t *emu, uintptr_t fcn) { vFEpLLpp_t fn = (vFEpLLpp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFEppipV(x64emu_t *emu, uintptr_t fcn) { vFEppipV_t fn = (vFEppipV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); }
+void vFEppipA(x64emu_t *emu, uintptr_t fcn) { vFEppipA_t fn = (vFEppipA_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFEppupp(x64emu_t *emu, uintptr_t fcn) { vFEppupp_t fn = (vFEppupp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFEppppp(x64emu_t *emu, uintptr_t fcn) { vFEppppp_t fn = (vFEppppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void vFiiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiiii_t fn = (vFiiiiii_t)fcn; fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 5bcb3ed9..64df1c33 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -256,12 +256,10 @@ void pFEp(x64emu_t *emu, uintptr_t fnc);
 void pFii(x64emu_t *emu, uintptr_t fnc);
 void pFiu(x64emu_t *emu, uintptr_t fnc);
 void pFip(x64emu_t *emu, uintptr_t fnc);
-void pFiV(x64emu_t *emu, uintptr_t fnc);
 void pFui(x64emu_t *emu, uintptr_t fnc);
 void pFuC(x64emu_t *emu, uintptr_t fnc);
 void pFuu(x64emu_t *emu, uintptr_t fnc);
 void pFup(x64emu_t *emu, uintptr_t fnc);
-void pFuV(x64emu_t *emu, uintptr_t fnc);
 void pFUi(x64emu_t *emu, uintptr_t fnc);
 void pFdd(x64emu_t *emu, uintptr_t fnc);
 void pFlp(x64emu_t *emu, uintptr_t fnc);
@@ -346,7 +344,6 @@ void vFppd(x64emu_t *emu, uintptr_t fnc);
 void vFppl(x64emu_t *emu, uintptr_t fnc);
 void vFppL(x64emu_t *emu, uintptr_t fnc);
 void vFppp(x64emu_t *emu, uintptr_t fnc);
-void vFppV(x64emu_t *emu, uintptr_t fnc);
 void iFEiw(x64emu_t *emu, uintptr_t fnc);
 void iFEip(x64emu_t *emu, uintptr_t fnc);
 void iFEWW(x64emu_t *emu, uintptr_t fnc);
@@ -488,6 +485,7 @@ void LFppi(x64emu_t *emu, uintptr_t fnc);
 void LFppL(x64emu_t *emu, uintptr_t fnc);
 void LFSpL(x64emu_t *emu, uintptr_t fnc);
 void pFEip(x64emu_t *emu, uintptr_t fnc);
+void pFEiV(x64emu_t *emu, uintptr_t fnc);
 void pFEup(x64emu_t *emu, uintptr_t fnc);
 void pFEpi(x64emu_t *emu, uintptr_t fnc);
 void pFEpu(x64emu_t *emu, uintptr_t fnc);
@@ -654,7 +652,6 @@ void vFpppU(x64emu_t *emu, uintptr_t fnc);
 void vFpppd(x64emu_t *emu, uintptr_t fnc);
 void vFpppL(x64emu_t *emu, uintptr_t fnc);
 void vFpppp(x64emu_t *emu, uintptr_t fnc);
-void vFpppV(x64emu_t *emu, uintptr_t fnc);
 void cFpiii(x64emu_t *emu, uintptr_t fnc);
 void iFEiip(x64emu_t *emu, uintptr_t fnc);
 void iFEiiN(x64emu_t *emu, uintptr_t fnc);
@@ -854,7 +851,6 @@ void pFpiLL(x64emu_t *emu, uintptr_t fnc);
 void pFpipi(x64emu_t *emu, uintptr_t fnc);
 void pFpipd(x64emu_t *emu, uintptr_t fnc);
 void pFpipp(x64emu_t *emu, uintptr_t fnc);
-void pFpipV(x64emu_t *emu, uintptr_t fnc);
 void pFpCWp(x64emu_t *emu, uintptr_t fnc);
 void pFpCuW(x64emu_t *emu, uintptr_t fnc);
 void pFpCuu(x64emu_t *emu, uintptr_t fnc);
@@ -888,12 +884,15 @@ void pFpppp(x64emu_t *emu, uintptr_t fnc);
 void pFSppi(x64emu_t *emu, uintptr_t fnc);
 void vFEiipV(x64emu_t *emu, uintptr_t fnc);
 void vFEippp(x64emu_t *emu, uintptr_t fnc);
+void vFEpipV(x64emu_t *emu, uintptr_t fnc);
+void vFEpipA(x64emu_t *emu, uintptr_t fnc);
 void vFEpuup(x64emu_t *emu, uintptr_t fnc);
 void vFEpuuV(x64emu_t *emu, uintptr_t fnc);
 void vFEpupp(x64emu_t *emu, uintptr_t fnc);
 void vFEpupA(x64emu_t *emu, uintptr_t fnc);
 void vFEpLLp(x64emu_t *emu, uintptr_t fnc);
 void vFEppip(x64emu_t *emu, uintptr_t fnc);
+void vFEppiV(x64emu_t *emu, uintptr_t fnc);
 void vFEppup(x64emu_t *emu, uintptr_t fnc);
 void vFEpppp(x64emu_t *emu, uintptr_t fnc);
 void vFiiiii(x64emu_t *emu, uintptr_t fnc);
@@ -971,7 +970,6 @@ void vFpipii(x64emu_t *emu, uintptr_t fnc);
 void vFpipiu(x64emu_t *emu, uintptr_t fnc);
 void vFpuiip(x64emu_t *emu, uintptr_t fnc);
 void vFpuipp(x64emu_t *emu, uintptr_t fnc);
-void vFpuipV(x64emu_t *emu, uintptr_t fnc);
 void vFpuuuu(x64emu_t *emu, uintptr_t fnc);
 void vFpuddd(x64emu_t *emu, uintptr_t fnc);
 void vFpffff(x64emu_t *emu, uintptr_t fnc);
@@ -1116,6 +1114,8 @@ void LFppppp(x64emu_t *emu, uintptr_t fnc);
 void pFEpiii(x64emu_t *emu, uintptr_t fnc);
 void pFEpipL(x64emu_t *emu, uintptr_t fnc);
 void pFEpipp(x64emu_t *emu, uintptr_t fnc);
+void pFEpipV(x64emu_t *emu, uintptr_t fnc);
+void pFEpipA(x64emu_t *emu, uintptr_t fnc);
 void pFEpupp(x64emu_t *emu, uintptr_t fnc);
 void pFEppii(x64emu_t *emu, uintptr_t fnc);
 void pFEppip(x64emu_t *emu, uintptr_t fnc);
@@ -1170,6 +1170,7 @@ void vFEpippp(x64emu_t *emu, uintptr_t fnc);
 void vFEpuipp(x64emu_t *emu, uintptr_t fnc);
 void vFEpLLpp(x64emu_t *emu, uintptr_t fnc);
 void vFEppipV(x64emu_t *emu, uintptr_t fnc);
+void vFEppipA(x64emu_t *emu, uintptr_t fnc);
 void vFEppupp(x64emu_t *emu, uintptr_t fnc);
 void vFEppppp(x64emu_t *emu, uintptr_t fnc);
 void vFiiiiii(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedgio2.c b/src/wrapped/wrappedgio2.c
index 08d7ce27..47571c0c 100755
--- a/src/wrapped/wrappedgio2.c
+++ b/src/wrapped/wrappedgio2.c
@@ -51,6 +51,7 @@ typedef void    (*vFpippppppp_t)    (void*, int, void*, void*, void*, void*, voi
 typedef void*   (*pFLippppppp_t)    (size_t, int, void*, void*, void*, void*, void*, void*, void*);
 typedef uint32_t(*uFppppppippp_t)   (void*, void*, void*, void*, void*, void*, int, void*, void*, void*);
 typedef void    (*vFpppppppiippp_t) (void*, void*, void*, void*, void*, void*, void*, int, int, void*, void*, void*);
+typedef void    (*vFppipA_t)        (void*, void*, int, void*, va_list);
 
 #define SUPER() \
     GO(g_dbus_proxy_new, vFpippppppp_t)             \
@@ -84,7 +85,8 @@ typedef void    (*vFpppppppiippp_t) (void*, void*, void*, void*, void*, void*, v
     GO(g_bus_watch_name, uFipipppp_t)               \
     GO(g_bus_watch_name_on_connection, uFppipppp_t) \
     GO(g_bus_own_name, uFLpippppp_t)                \
-    GO(g_bus_own_name_on_connection, uFppipppp_t)
+    GO(g_bus_own_name_on_connection, uFppipppp_t)   \
+    GO(g_simple_async_result_set_error_va, vFppipA_t)                   \
 
 
 typedef struct gio2_my_s {
@@ -693,7 +695,7 @@ EXPORT uint32_t my_g_bus_watch_name(x64emu_t* emu, size_t type, void* name, int
 {
     library_t * lib = GetLibInternal(libname);
     gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2;
-    // note that a mecanism with a new callback, cleaned with notify, is also possible here
+
     return my->g_bus_watch_name(type, name, flags, findGBusNameAppearedCallbackFct(appeared), findGBusNameVanishedCallbackFct(vanished), data, findGDestroyNotifyFct(notify));
 }
 
@@ -701,7 +703,7 @@ EXPORT uint32_t my_g_bus_watch_name_on_connection(x64emu_t* emu, void* connectio
 {
     library_t * lib = GetLibInternal(libname);
     gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2;
-    // note that a mecanism with a new callback, cleaned with notify, is also possible here
+
     return my->g_bus_watch_name_on_connection(connection, name, flags, findGBusNameAppearedCallbackFct(appeared), findGBusNameVanishedCallbackFct(vanished), data, findGDestroyNotifyFct(notify));
 }
 
@@ -709,7 +711,7 @@ EXPORT uint32_t my_g_bus_own_name(x64emu_t* emu, size_t type, void* name, int fl
 {
     library_t * lib = GetLibInternal(libname);
     gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2;
-    // note that a mecanism with a new callback, cleaned with notify, is also possible here
+
     return my->g_bus_own_name(type, name, flags, findGBusAcquiredCallbackFct(bus_acquired), findGBusNameAcquiredCallbackFct(name_acquired), findGBusNameLostCallbackFct(name_lost), data, findGDestroyNotifyFct(notify));
 }
 
@@ -717,10 +719,29 @@ EXPORT uint32_t my_g_bus_own_name_on_connection(x64emu_t* emu, void* connection,
 {
     library_t * lib = GetLibInternal(libname);
     gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2;
-    // note that a mecanism with a new callback, cleaned with notify, is also possible here
+
     return my->g_bus_own_name_on_connection(connection, name, flags, findGBusNameAcquiredCallbackFct(name_acquired), findGBusNameLostCallbackFct(name_lost), data, findGDestroyNotifyFct(notify));
 }
 
+EXPORT void my_g_simple_async_result_set_error_va(x64emu_t* emu, void* simple, void* domain, int code, void* fmt, x64_va_list_t V)
+{
+    library_t * lib = GetLibInternal(libname);
+    gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2;
+
+    CONVERT_VALIST(V);
+    my->g_simple_async_result_set_error_va(simple, domain, code, fmt, VARARGS);
+}
+
+EXPORT void my_g_simple_async_result_set_error(x64emu_t* emu, void* simple, void* domain, int code, void* fmt, uintptr_t* b)
+{
+    library_t * lib = GetLibInternal(libname);
+    gio2_my_t *my = (gio2_my_t*)lib->priv.w.p2;
+
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 4);
+    PREPARE_VALIST;
+    my->g_simple_async_result_set_error_va(simple, domain, code, fmt, VARARGS);
+}
+
 #define PRE_INIT    \
     if(box64_nogtk) \
         return -1;
diff --git a/src/wrapped/wrappedgio2_private.h b/src/wrapped/wrappedgio2_private.h
index 8f510825..ef5bff3e 100755
--- a/src/wrapped/wrappedgio2_private.h
+++ b/src/wrapped/wrappedgio2_private.h
@@ -1399,8 +1399,8 @@ GOM(g_simple_async_result_new_take_error, pFEpppp)
 GO(g_simple_async_result_propagate_error, iFpp)
 GOM(g_simple_async_result_run_in_thread, vFEppip)
 GO(g_simple_async_result_set_check_cancellable, vFpp)
-GO2(g_simple_async_result_set_error, vFpuipV, g_simple_async_result_set_error_va)   // should align?
-GO(g_simple_async_result_set_error_va, vFpuipp)
+GOM(g_simple_async_result_set_error, vFEppipV)
+GOM(g_simple_async_result_set_error_va, vFEppipA)
 GO(g_simple_async_result_set_from_error, vFpp)
 GO(g_simple_async_result_set_handle_cancellation, vFpi)
 GO(g_simple_async_result_set_op_res_gboolean, vFpi)
diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c
index e288c8f7..42b038da 100755
--- a/src/wrapped/wrappedglib2.c
+++ b/src/wrapped/wrappedglib2.c
@@ -65,12 +65,15 @@ typedef void* (*pFppLiiip_t)(void*, void*, unsigned long, int, int, int, void*);
 typedef int (*iFpppipppp_t)(void*, void*, void*, int, void*, void*, void*, void*);
 typedef int (*iFpppipppppp_t)(void*, void*, void*, int, void*, void*, void*, void*, void*, void*);
 typedef int (*iFpppippppppp_t)(void*, void*, void*, int, void*, void*, void*, void*, void*, void*, void*);
+typedef void* (*pFpipA_t)(void*, int, void*, va_list);
+typedef void (*vFpipA_t)(void*, int, void*, va_list);
+typedef void (*vFppA_t)(void*, void*, va_list);
 
 #define SUPER() \
     GO(g_list_free_full, vFpp_t)                \
     GO(g_markup_vprintf_escaped, pFpA_t)        \
     GO(g_build_filenamev, pFp_t)                \
-    GO(g_timeout_add_full, uFiuppp_t)            \
+    GO(g_timeout_add_full, uFiuppp_t)           \
     GO(g_datalist_id_set_data_full, vFpupp_t)   \
     GO(g_datalist_id_dup_data, pFpupp_t)        \
     GO(g_datalist_id_replace_data, iFpupppp_t)  \
@@ -143,6 +146,11 @@ typedef int (*iFpppippppppp_t)(void*, void*, void*, int, void*, void*, void*, vo
     GO(g_timeout_add_seconds_full, uFiuppp_t)   \
     GO(g_log_set_handler, uFpipp_t)             \
     GO(g_set_error_literal, vFppip_t)           \
+    GO(g_error_new_valist, pFpipA_t)            \
+    GO(g_logv, vFpipA_t)                        \
+    GO(g_string_append_vprintf, vFppA_t)        \
+    GO(g_string_vprintf, vFppA_t)               \
+    GO(g_strjoinv, pFpA_t)                      \
 
 
 typedef struct glib2_my_s {
@@ -175,14 +183,15 @@ EXPORT void* my_g_markup_vprintf_escaped(x64emu_t *emu, void* fmt, void* b) {
     return my->g_markup_vprintf_escaped(fmt, VARARGS);
 }
 
-EXPORT void* my_g_build_filename(x64emu_t* emu, void* first, void** b)
+EXPORT void* my_g_build_filename(x64emu_t* emu, void* first, uintptr_t* b)
 {
     glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
-    int i = 0;
-    while (b[i++]);
-    void* array[i+1];   // +1 for 1st (NULL terminal already included)
+    int n = 0;
+    while (getVArgs(emu, 1, b, n++));
+    void* array[n+1];   // +1 for 1st (NULL terminal already included)
     array[0] = first;
-    memcpy(array+1, b, sizeof(void*)*i);
+    for(int i=0; i<n; ++i)
+        array[i+1] = (void*)getVArgs(emu, 1, b, i);
     void* ret = my->g_build_filenamev(array);
     return ret;
 }
@@ -1263,20 +1272,20 @@ EXPORT void* my_g_slist_sort_with_data(x64emu_t *emu, void* list, void* f, void*
     return my->g_slist_sort_with_data(list, findGCompareDataFuncFct(f), data);
 }
 
-EXPORT void* my_g_build_path(x64emu_t *emu, void* sep, void* first, void** data)
+EXPORT void* my_g_build_path(x64emu_t *emu, void* sep, void* first, uintptr_t* data)
 {
     glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
 
     int n = (first)?1:0;
-    void* p = n?data[0]:NULL;
+    void* p = n?((void*)getVArgs(emu, 2, data, 0)):NULL;
     while(p) {
-        p = data[n++];
+        p = (void*)getVArgs(emu, 2, data, n++);
     }
     ++n;    // final NULL
     void** args = (void**)malloc(n *sizeof(void*));
     args[0] = first;
     for(int i=1; i<n; ++i)
-        args[i] = data[i-1];
+        args[i] = (void*)getVArgs(emu, 2, data, i-1);
     p = my->g_build_pathv(sep, args);
     free(args);
     return p;
@@ -1348,6 +1357,118 @@ EXPORT void my_g_set_error(x64emu_t *emu, void* err, void* domain, int code, voi
     my->g_set_error_literal(err, domain, code, buf);
 }
 
+EXPORT void* my_g_error_new(x64emu_t* emu, void* domain, int code, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3);
+    PREPARE_VALIST;
+    return my->g_error_new_valist(domain, code, fmt, VARARGS);
+}
+EXPORT void* my_g_error_new_valist(x64emu_t* emu, void* domain, int code, void* fmt, x64_va_list_t V)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    CONVERT_VALIST(V);
+    return my->g_error_new_valist(domain, code, fmt, VARARGS);
+}
+
+EXPORT int my_g_fprintf(x64emu_t* emu, void* f, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3);
+    PREPARE_VALIST;
+    return my->g_vfprintf(f, fmt, VARARGS);
+}
+
+EXPORT void my_g_logv(x64emu_t* emu, void* domain, int level, void* fmt, x64_va_list_t V)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    CONVERT_VALIST(V);
+    my->g_logv(domain, level, fmt, VARARGS);
+}
+EXPORT void my_g_log(x64emu_t* emu, void* domain, int level, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3);
+    PREPARE_VALIST;
+    my->g_logv(domain, level, fmt, VARARGS);
+}
+
+EXPORT int my_g_printf(x64emu_t* emu, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 1);
+    PREPARE_VALIST;
+    return my->g_vprintf(fmt, VARARGS);
+}
+
+EXPORT int my_g_snprintf(x64emu_t* emu, void* buf, size_t l, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3);
+    PREPARE_VALIST;
+    return my->g_vsnprintf(buf, l, fmt, VARARGS);
+}
+
+EXPORT int my_g_sprintf(x64emu_t* emu, void* buf, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 2);
+    PREPARE_VALIST;
+    my->g_vsprintf(buf, fmt, VARARGS);
+}
+
+EXPORT void* my_g_strdup_printf(x64emu_t* emu, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 1);
+    PREPARE_VALIST;
+    return my->g_strdup_vprintf(fmt, VARARGS);
+}
+
+EXPORT void my_g_string_append_printf(x64emu_t* emu, void* string, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 2);
+    PREPARE_VALIST;
+    return my->g_string_append_vprintf(string, fmt, VARARGS);
+}
+
+EXPORT void my_g_string_append_vprintf(x64emu_t* emu, void* string, void* fmt, x64_va_list_t V)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    CONVERT_VALIST(V);
+    return my->g_string_append_vprintf(string, fmt, VARARGS);
+}
+
+EXPORT void my_g_string_printf(x64emu_t* emu, void* string, void* fmt, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 2);
+    PREPARE_VALIST;
+    return my->g_string_vprintf(string, fmt, VARARGS);
+}
+
+EXPORT void my_g_string_vprintf(x64emu_t* emu, void* string, void* fmt, x64_va_list_t V)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    CONVERT_VALIST(V);
+    return my->g_string_vprintf(string, fmt, VARARGS);
+}
+
+EXPORT void* my_g_strjoin(x64emu_t* emu, void* a, uintptr_t* b)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    CREATE_VALIST_FROM_VAARG(b, emu->scratch, 1);
+    return my->g_strjoinv(a, VARARGS);
+}
+
+EXPORT void* my_g_strjoinv(x64emu_t* emu, void* a, x64_va_list_t V)
+{
+    glib2_my_t *my = (glib2_my_t*)my_lib->priv.w.p2;
+    CONVERT_VALIST(V);
+    return my->g_strjoinv(a, VARARGS);
+}
+
 
 #define PRE_INIT    \
     if(box64_nogtk) \
diff --git a/src/wrapped/wrappedglib2_private.h b/src/wrapped/wrappedglib2_private.h
index f2ddf805..eddacf55 100755
--- a/src/wrapped/wrappedglib2_private.h
+++ b/src/wrapped/wrappedglib2_private.h
@@ -357,9 +357,9 @@ GO(g_environ_unsetenv, pFpp)
 GO(g_error_copy, pFp)
 GO(g_error_free, vFp)
 GO(g_error_matches, iFppi)
-GO2(g_error_new, pFpipV, g_error_new_valist)
+GOM(g_error_new, pFEpipV)
 GO(g_error_new_literal, pFpip)
-GO(g_error_new_valist, pFpipp)
+GOM(g_error_new_valist, pFEpipA)
 GO(g_file_error_from_errno, iFi)
 GO(g_file_error_quark, pFv)
 GO(g_file_get_contents, iFpppp)
@@ -378,7 +378,7 @@ GO(g_fopen, pFpp)
 GO(g_format_size, pFU)
 GO(g_format_size_for_display, pFI)
 GO(g_format_size_full, pFUi)
-GO2(g_fprintf, iFEppV, my_g_vfprintf)
+GOM(g_fprintf, iFEppV)
 GO(g_free, vFp)
 GO(g_freopen, pFppp)
 GO(g_get_application_name, pFv)
@@ -610,14 +610,14 @@ GOM(g_list_sort, pFEpp)
 GOM(g_list_sort_with_data, pFEppp)
 GO(g_locale_from_utf8, pFplppp)
 GO(g_locale_to_utf8, pFplppp)
-GO2(g_log, vFpppV, g_logv)
+GOM(g_log, vFEpipV)
 GO(g_log_default_handler, vFpipp)
 GO(g_log_remove_handler, vFpu)
 GO(g_log_set_always_fatal, iFi)
 GOM(g_log_set_default_handler, pFEpp)
 GO(g_log_set_fatal_mask, iFpi)
 GOM(g_log_set_handler, uFEpipp)
-GO(g_logv, vFpppp)      // need align?
+GOM(g_logv, vFEpipA)
 GO(g_lstat, iFpp)
 GO(g_main_context_acquire, iFp)
 GO(g_main_context_add_poll, vFppi)
@@ -811,7 +811,7 @@ GO(g_poll, iFpui)
 //GO(g_prefix_error, vFpppppppppp)    //vaarg, should align?
 GOM(g_print, vFEpV)
 GOM(g_printerr, vFEpV)
-GO2(g_printf, iFEpV, my_g_vprintf)
+GOM(g_printf, iFEpV)
 GOM(g_printf_string_upper_bound, uFEpp)
 GO(g_private_get, pFp)
 GOM(g_private_new, pFEp)
@@ -1065,7 +1065,7 @@ GO(g_slist_remove_link, pFpp)
 GO(g_slist_reverse, pFp)
 GOM(g_slist_sort, pFEpp)
 GOM(g_slist_sort_with_data, pFEppp)
-GO2(g_snprintf, iFEpLpV, my_g_vsnprintf)
+GOM(g_snprintf, iFEpLpV)
 GO(g_source_add_child_source, vFpp)
 GO(g_source_add_poll, vFpp)
 GO(g_source_add_unix_fd, pFpii)
@@ -1109,7 +1109,7 @@ GO(g_spawn_command_line_sync, iFppppp)
 GO(g_spawn_error_quark, pFv)
 GO(g_spawn_exit_error_quark, pFv)
 GOM(g_spawn_sync, iFEpppipppppp)
-GO2(g_sprintf, iFEppV, my_g_vsprintf)
+GOM(g_sprintf, iFEppV)
 GO(g_stat, iFpp)
 GO(g_static_mutex_free, vFp)
 GO(g_static_mutex_get_mutex_impl, pFp)
@@ -1144,7 +1144,7 @@ GO(g_strcompress, pFp)
 GO(g_strdelimit, pFppC)
 GO(g_strdown, pFp)
 GO(g_strdup, pFp)
-GO2(g_strdup_printf, pFEpV, my_g_strdup_vprintf)
+GOM(g_strdup_printf, pFEpV)
 GO(g_strdupv, pFp)
 GOM(g_strdup_vprintf, pFEpp)
 GO(g_str_equal, iFpp)
@@ -1157,10 +1157,10 @@ GO(g_str_has_suffix, iFpp)
 GO(g_string_append, pFpp)
 GO(g_string_append_c, pFpC)
 GO(g_string_append_len, pFppl)
-GO2(g_string_append_printf, vFppV, g_string_append_vprintf) // need align?
+GOM(g_string_append_printf, vFEppV)
 GO(g_string_append_unichar, pFpu)
 GO(g_string_append_uri_escaped, pFpppi)
-GO(g_string_append_vprintf, vFppp)
+GOM(g_string_append_vprintf, vFEppA)
 GO(g_string_ascii_down, pFp)
 GO(g_string_ascii_up, pFp)
 GO(g_string_assign, pFpp)
@@ -1188,16 +1188,16 @@ GO(g_string_prepend, pFpp)
 GO(g_string_prepend_c, pFpC)
 GO(g_string_prepend_len, pFppl)
 GO(g_string_prepend_unichar, pFpu)
-GO2(g_string_printf, vFppV, g_string_vprintf)   // need align?
+GOM(g_string_printf, vFEppV)
 GO(g_string_set_size, pFpL)
 GO(g_string_sized_new, pFL)
 GO(g_string_truncate, pFpL)
 GO(g_string_up, pFp)
-GO(g_string_vprintf, vFppp)
+GOM(g_string_vprintf, vFEppA)
 GO(g_strip_context, pFpp)
 GO(g_str_is_ascii, iFp)
-GO2(g_strjoin, pFpV, g_strjoinv)
-GO(g_strjoinv, pFpp)    // no need to align, ony string pointers here
+GOM(g_strjoin, pFEpV)
+GOM(g_strjoinv, pFEpA)
 GO(g_strlcat, uFppu)
 GO(g_strlcpy, uFppu)
 GO(g_str_match_string, iFppi)
diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c
index 5b8653fc..fb43f836 100755
--- a/src/wrapped/wrappedgobject2.c
+++ b/src/wrapped/wrappedgobject2.c
@@ -561,6 +561,7 @@ EXPORT uint32_t my_g_signal_new(x64emu_t* emu, void* name, size_t itype, int fla
     
     void* cb_acc = findAccumulatorFct(acc);
     void* cb_marsh = findMarshalFct(marsh);
+    my_add_signal_offset(itype, offset, n); // register the signal for later use
     switch(n) {
         case 0: return my->g_signal_new(name, itype, flags, offset, cb_acc, accu_data, cb_marsh, rtype, n);
         case 1: return my->g_signal_new(name, itype, flags, offset, cb_acc, accu_data, cb_marsh, rtype, n, b[0]);
diff --git a/src/wrapped/wrappedgtkx112.c b/src/wrapped/wrappedgtkx112.c
index 5bcba415..06db13c1 100755
--- a/src/wrapped/wrappedgtkx112.c
+++ b/src/wrapped/wrappedgtkx112.c
@@ -31,6 +31,7 @@ typedef void*         (*pFp_t)(void*);
 typedef double        (*dFp_t)(void*);
 typedef void*         (*pFL_t)(size_t);
 typedef int           (*iFip_t)(int, void*);
+typedef void*         (*pFip_t)(int, void*);
 typedef int           (*iFpp_t)(void*, void*);
 typedef size_t        (*LFLp_t)(size_t, void*);
 typedef void*         (*pFpp_t)(void*, void*);
@@ -52,6 +53,7 @@ typedef void          (*vFppppp_t)(void*, void*, void*, void*, void*);
 typedef void          (*vFpuipp_t)(void*, uint32_t, int, void*, void*);
 typedef void          (*vFppupp_t)(void*, void*, uint32_t, void*, void*);
 typedef uint32_t      (*uFiipppp_t)(int, int, void*, void*, void*, void*);
+typedef void          (*vFppippi_t)(void*, void*, int, void*, void*, int);
 typedef unsigned long (*LFpppppi_t)(void*, void*, void*, void*, void*, int);
 typedef int           (*iFpppppp_t)(void*, void*, void*, void*, void*, void*);
 typedef void          (*vFpuipuV_t)(void*, uint32_t, int, void*, uint32_t, ...);
@@ -77,6 +79,7 @@ typedef void*         (*pFpipppppppi_t)(void*, int, void*, void*, void*, void*,
     GO(gtk_tree_view_get_type, LFv_t)           \
     GO(gtk_window_get_type, LFv_t)              \
     GO(gtk_table_get_type, LFv_t)               \
+    GO(gtk_fixed_get_type, LFv_t)               \
     GO(gtk_type_class, pFL_t)                   \
     GO(gtk_button_get_label, pFp_t)             \
     GO(gtk_signal_connect_full, LFppppppii_t)   \
@@ -130,6 +133,9 @@ typedef void*         (*pFpipppppppi_t)(void*, int, void*, void*, void*, void*,
     GO(gtk_input_add_full, uFiipppp_t)          \
     GO(gtk_list_store_set_valist, vFppA_t)      \
     GO(gtk_widget_style_get_valist, vFppA_t)    \
+    GO(gtk_list_store_insert_with_valuesv, vFppippi_t)  \
+    GO(gtk_list_store_newv, pFip_t)             \
+    GO(gtk_tree_store_newv, pFip_t)             \
 
 
 
@@ -639,10 +645,11 @@ EXPORT void my_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first,
     gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
 
     void* btn = first;
+    int n = 0;
     while(btn) {
-        uintptr_t id = *(b++);
+        uintptr_t id = getVArgs(emu, 2, b, n++);
         my->gtk_dialog_add_button(dialog, btn, id);
-        btn = (void*)*(b++);
+        btn = (void*)getVArgs(emu, 2, b, n++);
     }
 }
 
@@ -990,9 +997,7 @@ typedef struct my_GSList_s {
   struct my_GSList_s *next;
 } my_GSList_t;
 
-static int regs_abi[] = {_DI, _SI, _DX, _CX, _R8, _R9};
-#define NEXT5(A, N) (N+5<6)?((void*)emu->regs[regs_abi[5+N]].q[0]):A[5+N-6]
-EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32_t keyval, int mod, void* name, uint32_t n, void** st)
+EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32_t keyval, int mod, void* name, uint32_t n, uintptr_t* b)
 {
     library_t * lib = GetLibInternal(libname);
     gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
@@ -1003,7 +1008,7 @@ EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32
     // build the list
     my_GSList_t *list = calloc(n, sizeof(my_GSList_t));
     for(uint32_t i=0; i<n; ++i) {
-        list[i].data = NEXT5(st, i);
+        list[i].data = (void*)getVArgs(emu, 5, b, i);
         list[i].next = (i==(n-1))?NULL:&list[i+1];
     }
 
@@ -1158,6 +1163,51 @@ EXPORT uint32_t my_gtk_input_add_full(x64emu_t* emu, int source, int condition,
     return my->gtk_input_add_full(source, condition, findGdkInputFunctionFct(func), findGtkCallbackMarshalFct(marshal), data, findGDestroyNotifyFct(destroy));
 }
 
+EXPORT void my_gtk_list_store_insert_with_values(x64emu_t* emu, void* store, void* iter, int pos, uintptr_t* b)
+{
+    library_t * lib = GetLibInternal(libname);
+    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+
+    int n = 0;
+    // find the number of args
+    while((int)getVArgs(emu, 3, b, n*2)!=-1)
+        ++n;
+    int* columns = (int*)malloc(sizeof(int)*(n+1));
+    void** values = (void**)malloc(sizeof(void*)*(n+1));
+    for (int i=0; i<n; ++i) {
+        columns[i] = *(int*)getVArgs(emu, 3, b, i*2-2);
+        values[i] = (void*)getVArgs(emu, 3, b, i*2-2+1);
+    }
+    columns[n] = -1;
+    values[n] = NULL;
+
+    my->gtk_list_store_insert_with_valuesv(store, iter, pos, columns, values, n);
+    free(columns);
+    free(values);
+}
+
+EXPORT void* my_gtk_list_store_new(x64emu_t* emu, int n, uintptr_t* b)
+{
+    library_t * lib = GetLibInternal(libname);
+    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+
+    uintptr_t a[n];
+    for(int i=0; i<n; ++i)
+        a[i] = getVArgs(emu, 1, b, i);
+    return my->gtk_list_store_newv(n, a);
+}
+
+EXPORT void* my_gtk_tree_store_new(x64emu_t* emu, int n, uintptr_t* b)
+{
+    library_t * lib = GetLibInternal(libname);
+    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+
+    uintptr_t a[n];
+    for(int i=0; i<n; ++i)
+        a[i] = getVArgs(emu, 1, b, i);
+    return my->gtk_tree_store_newv(n, a);
+}
+
 #define PRE_INIT    \
     if(box64_nogtk) \
         return -1;
@@ -1174,7 +1224,8 @@ EXPORT uint32_t my_gtk_input_add_full(x64emu_t* emu, int source, int condition,
     SetGtkTreeViewID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_tree_view_get_type());\
     SetGtkBinID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_bin_get_type());           \
     SetGtkWindowID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_window_get_type());     \
-    SetGtkTableID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_table_get_type());     \
+    SetGtkTableID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_table_get_type());       \
+    SetGtkFixedID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_fixed_get_type());       \
     lib->priv.w.needed = 2;                                                     \
     lib->priv.w.neededlibs = (char**)calloc(lib->priv.w.needed, sizeof(char*)); \
     lib->priv.w.neededlibs[0] = strdup("libgdk-x11-2.0.so.0");                  \
diff --git a/src/wrapped/wrappedgtkx112_private.h b/src/wrapped/wrappedgtkx112_private.h
index 707f335e..571866b3 100755
--- a/src/wrapped/wrappedgtkx112_private.h
+++ b/src/wrapped/wrappedgtkx112_private.h
@@ -1566,12 +1566,12 @@ GO(gtk_list_store_get_type, LFv)
 GO(gtk_list_store_insert, vFppi)
 GO(gtk_list_store_insert_after, vFppp)
 GO(gtk_list_store_insert_before, vFppp)
-//GOM(gtk_list_store_insert_with_values, vFppiV)    // wrap with gtk_list_store_insert_with_valuesv
+GOM(gtk_list_store_insert_with_values, vFEppiV)
 GO(gtk_list_store_insert_with_valuesv, vFppippi)    //TODO: check if GValues need alignement
 GO(gtk_list_store_iter_is_valid, iFpp)
 GO(gtk_list_store_move_after, vFppp)
 GO(gtk_list_store_move_before, vFppp)
-GO2(gtk_list_store_new, pFiV, gtk_list_store_newv)
+GOM(gtk_list_store_new, pFEiV)
 GO(gtk_list_store_newv, pFip)
 GO(gtk_list_store_prepend, vFpp)
 GO(gtk_list_store_remove, iFpp)
@@ -3402,8 +3402,8 @@ GO(gtk_tree_store_iter_depth, iFpp)
 GO(gtk_tree_store_iter_is_valid, iFpp)
 GO(gtk_tree_store_move_after, vFppp)
 GO(gtk_tree_store_move_before, vFppp)
-GO2(gtk_tree_store_new, pFuV, gtk_tree_store_newv)
-GO(gtk_tree_store_newv, pFup)
+GOM(gtk_tree_store_new, pFEiV)
+GO(gtk_tree_store_newv, pFip)
 GO(gtk_tree_store_prepend, vFppp)
 GO(gtk_tree_store_remove, iFpp)
 GO(gtk_tree_store_reorder, vFppp)