about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/elfs/elfloader.c50
-rwxr-xr-xsrc/library_list.h6
-rw-r--r--src/wrapped/generated/functions_list.txt5
-rw-r--r--src/wrapped/generated/wrappedlibdrmdefs.h8
-rw-r--r--src/wrapped/generated/wrappedlibdrmtypes.h17
-rw-r--r--src/wrapped/generated/wrappedlibdrmundefs.h8
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri2defs.h8
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri2types.h17
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri2undefs.h8
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri3defs.h8
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri3types.h17
-rw-r--r--src/wrapped/generated/wrappedlibxcbdri3undefs.h8
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rwxr-xr-xsrc/wrapped/wrappedlibdrm.c18
-rwxr-xr-xsrc/wrapped/wrappedlibdrm_private.h198
-rwxr-xr-xsrc/wrapped/wrappedlibxcbdri2.c24
-rwxr-xr-xsrc/wrapped/wrappedlibxcbdri2_private.h68
-rwxr-xr-xsrc/wrapped/wrappedlibxcbdri3.c24
-rwxr-xr-xsrc/wrapped/wrappedlibxcbdri3_private.h50
20 files changed, 517 insertions, 28 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 4431c848..d688d0a8 100755
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -134,9 +134,9 @@ int CalcLoadAddr(elfheader_t* head)
                     head->tlssize++;
         }
     }
-    printf_log(LOG_DEBUG, "Elf Addr(v/p)=%p/%p Memsize=0x%lx (align=0x%zx)\n", (void*)head->vaddr, (void*)head->paddr, head->memsz, head->align);
-    printf_log(LOG_DEBUG, "Elf Stack Memsize=%lu (align=%zu)\n", head->stacksz, head->stackalign);
-    printf_log(LOG_DEBUG, "Elf TLS Memsize=%lu (align=%zu)\n", head->tlssize, head->tlsalign);
+    printf_log(LOG_DEBUG, "Elf Addr(v/p)=%p/%p Memsize=0x%zx (align=0x%zx)\n", (void*)head->vaddr, (void*)head->paddr, head->memsz, head->align);
+    printf_log(LOG_DEBUG, "Elf Stack Memsize=%zu (align=%zu)\n", head->stacksz, head->stackalign);
+    printf_log(LOG_DEBUG, "Elf TLS Memsize=%zu (align=%zu)\n", head->tlssize, head->tlsalign);
 
     return 0;
 }
@@ -153,7 +153,7 @@ int AllocElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
     if(mainbin && head->vaddr==0) {
         char* load_addr = getenv("BOX64_LOAD_ADDR");
         if(load_addr)
-            if(sscanf(load_addr, "0x%lx", &offs)!=1)
+            if(sscanf(load_addr, "0x%zx", &offs)!=1)
                 offs = 0;
     }
     if(!offs)
@@ -210,12 +210,12 @@ int AllocElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
                 , MAP_PRIVATE | MAP_ANONYMOUS /*| ((wine_preloaded)?MAP_FIXED:0)*/
                 , -1, 0);
             if(p==MAP_FAILED) {
-                printf_log(LOG_NONE, "Cannot create memory map (@%p 0x%lx/0x%zx) for elf \"%s\"\n", (void*)head->multiblock_offs[i], head->multiblock_size[i], head->align, head->name);
+                printf_log(LOG_NONE, "Cannot create memory map (@%p 0x%zx/0x%zx) for elf \"%s\"\n", (void*)head->multiblock_offs[i], head->multiblock_size[i], head->align, head->name);
                 return 1;
             }
             if(head->multiblock_offs[i] &&( p!=(void*)head->multiblock_offs[i])) {
                 if((head->e_type!=ET_DYN)) {
-                    printf_log(LOG_NONE, "Error, memory map (@%p 0x%lx/0x%zx) for elf \"%s\" allocated @%p\n", (void*)head->multiblock_offs[i], head->multiblock_size[i], head->align, head->name, p);
+                    printf_log(LOG_NONE, "Error, memory map (@%p 0x%zx/0x%zx) for elf \"%s\" allocated @%p\n", (void*)head->multiblock_offs[i], head->multiblock_size[i], head->align, head->name, p);
                     return 1;
                 } else {
                     printf_log(LOG_INFO, "Allocated memory is not at hinted %p but %p (size %lx) \"%s\"\n", (void*)head->multiblock_offs[i], p, head->multiblock_size[i], head->name);
@@ -239,17 +239,17 @@ int AllocElfMemory(box64context_t* context, elfheader_t* head, int mainbin)
         // vaddr is 0, load everything has a One block
         if(!offs && box64_wine)
             offs = (uintptr_t)find47bitBlock(head->memsz); // limit to 47bits...
-        printf_log(LOG_DEBUG, "Allocating 0x%lx memory @%p for Elf \"%s\"\n", head->memsz, (void*)offs, head->name);
+        printf_log(LOG_DEBUG, "Allocating 0x%zx memory @%p for Elf \"%s\"\n", head->memsz, (void*)offs, head->name);
         void* p = mmap((void*)offs, head->memsz
             , PROT_READ | PROT_WRITE | PROT_EXEC
             , MAP_PRIVATE | MAP_ANONYMOUS /*| (((offs&&wine_preloaded)?MAP_FIXED:0))*/
             , -1, 0);
         if(p==MAP_FAILED) {
-            printf_log(LOG_NONE, "Cannot create memory map (@%p 0x%lx/0x%zx) for elf \"%s\"\n", (void*)offs, head->memsz, head->align, head->name);
+            printf_log(LOG_NONE, "Cannot create memory map (@%p 0x%zx/0x%zx) for elf \"%s\"\n", (void*)offs, head->memsz, head->align, head->name);
             return 1;
         }
         if(offs && (p!=(void*)offs) && (head->e_type!=ET_DYN)) {
-            printf_log(LOG_NONE, "Error, memory map (@%p 0x%lx/0x%zx) for elf \"%s\" allocated @%p\n", (void*)offs, head->memsz, head->align, head->name, p);
+            printf_log(LOG_NONE, "Error, memory map (@%p 0x%zx/0x%zx) for elf \"%s\" allocated @%p\n", (void*)offs, head->memsz, head->align, head->name, p);
             return 1;
         }
         setProtection((uintptr_t)p, head->memsz, PROT_READ | PROT_WRITE | PROT_EXEC);
@@ -289,7 +289,7 @@ int LoadElfMemory(FILE* f, box64context_t* context, elfheader_t* head)
         if(head->PHEntries[i].p_type == PT_LOAD) {
             Elf64_Phdr * e = &head->PHEntries[i];
             char* dest = (char*)e->p_paddr + head->delta;
-            printf_log(LOG_DEBUG, "MMap block #%zu @%p offset=%p (0x%lx/0x%lx)\n", i, dest, (void*)e->p_offset, e->p_filesz, e->p_memsz);
+            printf_log(LOG_DEBUG, "MMap block #%zu @%p offset=%p (0x%zx/0x%zx)\n", i, dest, (void*)e->p_offset, e->p_filesz, e->p_memsz);
             void* p = (void*)-1;
             if(e->p_memsz==e->p_filesz && !(e->p_align&0xfff)) {
                 printf_log(LOG_DEBUG, "MMap block #%zu @%p offset=%p (0x%zx/0x%zx, flags:0x%x)\n", i, dest, (void*)e->p_offset, e->p_filesz, e->p_memsz, e->p_flags);
@@ -319,11 +319,11 @@ int LoadElfMemory(FILE* f, box64context_t* context, elfheader_t* head)
         if(head->PHEntries[i].p_type == PT_TLS) {
             Elf64_Phdr * e = &head->PHEntries[i];
             char* dest = (char*)(context->tlsdata+context->tlssize+head->tlsbase);
-            printf_log(LOG_DEBUG, "Loading TLS block #%zu @%p (0x%lx/0x%lx)\n", i, dest, e->p_filesz, e->p_memsz);
+            printf_log(LOG_DEBUG, "Loading TLS block #%zu @%p (0x%zx/0x%zx)\n", i, dest, e->p_filesz, e->p_memsz);
             if(e->p_filesz) {
                 fseeko64(f, e->p_offset, SEEK_SET);
                 if(fread(dest, e->p_filesz, 1, f)!=1) {
-                    printf_log(LOG_NONE, "Fail to read PT_TLS part #%zu (size=%ld)\n", i, e->p_filesz);
+                    printf_log(LOG_NONE, "Fail to read PT_TLS part #%zu (size=%zd)\n", i, e->p_filesz);
                     return 1;
                 }
             }
@@ -343,7 +343,7 @@ int ReloadElfMemory(FILE* f, box64context_t* context, elfheader_t* head)
         if(head->PHEntries[i].p_type == PT_LOAD) {
             Elf64_Phdr * e = &head->PHEntries[i];
             char* dest = (char*)e->p_paddr + head->delta;
-            printf_log(LOG_DEBUG, "Re-loading block #%zu @%p (0x%lx/0x%lx)\n", i, dest, e->p_filesz, e->p_memsz);
+            printf_log(LOG_DEBUG, "Re-loading block #%zu @%p (0x%zx/0x%zx)\n", i, dest, e->p_filesz, e->p_memsz);
             int ret = fseeko64(f, e->p_offset, SEEK_SET);
             if(ret==-1) {printf_log(LOG_NONE, "Fail to (re)seek PT_LOAD part #%zu (offset=%ld, errno=%d/%s)\n", i, e->p_offset, errno, strerror(errno)); return 1;}
             #ifdef DYNAREC
@@ -354,7 +354,7 @@ int ReloadElfMemory(FILE* f, box64context_t* context, elfheader_t* head)
             if(e->p_filesz) {
                 ssize_t r = -1;
                 if((r=fread(dest, e->p_filesz, 1, f))!=1) {
-                    printf_log(LOG_NONE, "Fail to (re)read PT_LOAD part #%zu (dest=%p, size=%ld, return=%ld, feof=%d/ferror=%d/%s)\n", i, dest, e->p_filesz, r, feof(f), ferror(f), strerror(ferror(f)));
+                    printf_log(LOG_NONE, "Fail to (re)read PT_LOAD part #%zu (dest=%p, size=%zd, return=%zd, feof=%d/ferror=%d/%s)\n", i, dest, e->p_filesz, r, feof(f), ferror(f), strerror(ferror(f)));
                     return 1;
                 }
             }
@@ -371,22 +371,22 @@ int FindR64COPYRel(elfheader_t* h, const char* name, uintptr_t *offs, uint64_t**
 {
     if(!h)
         return 0;
-    Elf64_Rela * rel = (Elf64_Rela *)(h->rela + h->delta);
+    Elf64_Rela * rela = (Elf64_Rela *)(h->rela + h->delta);
     if(!h->rela)
         return 0;
     int cnt = h->relasz / h->relaent;
     for (int i=0; i<cnt; ++i) {
-        int t = ELF64_R_TYPE(rel[i].r_info);
-        Elf64_Sym *sym = &h->DynSym[ELF64_R_SYM(rel[i].r_info)];
+        int t = ELF64_R_TYPE(rela[i].r_info);
+        Elf64_Sym *sym = &h->DynSym[ELF64_R_SYM(rela[i].r_info)];
         const char* symname = SymName(h, sym);
         if(t==R_X86_64_COPY && symname && !strcmp(symname, name)) {
-            int version2 = h->VerSym?((Elf64_Half*)((uintptr_t)h->VerSym+h->delta))[ELF64_R_SYM(rel[i].r_info)]:-1;
+            int version2 = h->VerSym?((Elf64_Half*)((uintptr_t)h->VerSym+h->delta))[ELF64_R_SYM(rela[i].r_info)]:-1;
             if(version2!=-1) version2 &= 0x7fff;
             if(version && !version2) version2=-1;   // match a versionned symbol against a global "local" symbol
             const char* vername2 = GetSymbolVersion(h, version2);
             if(SameVersionnedSymbol(name, version, vername, symname, version2, vername2)) {
                 *offs = sym->st_value + h->delta;
-                *p = (uint64_t*)(rel[i].r_offset + h->delta + rel[i].r_addend);
+                *p = (uint64_t*)(rela[i].r_offset + h->delta + rela[i].r_addend);
                 return 1;
             }
         }
@@ -604,7 +604,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t
         uint64_t* globp;
         uintptr_t tmp = 0;
         intptr_t delta;
-        switch(ELF64_R_TYPE(rela[i].r_info)) {
+        switch(t) {
             case R_X86_64_NONE:
                 break;
             case R_X86_64_PC32:
@@ -639,8 +639,8 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t
                     // set global offs / size for the symbol
                     offs = sym->st_value + head->delta;
                     end = offs + sym->st_size;
-                    if(sym->st_size) {
-                        printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) size=%ld on sym=%s (ver=%d/%s) \n", 
+                    if(sym->st_size && offs) {
+                        printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) size=%zd on sym=%s (ver=%d/%s) \n", 
                             (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), 
                             (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, sym->st_size, symname, version, vername?vername:"(none)");
                         //memmove((void*)globoffs, (void*)offs, sym->st_size);   // preapply to copy part from lib to main elf
@@ -939,7 +939,7 @@ void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* wea
         int bind = ELF64_ST_BIND(h->SymTab[i].st_info);
         int type = ELF64_ST_TYPE(h->SymTab[i].st_info);
         int vis = h->SymTab[i].st_other&0x3;
-        uint64_t sz = h->SymTab[i].st_size;
+        size_t sz = h->SymTab[i].st_size;
         if((type==STT_OBJECT || type==STT_FUNC || type==STT_COMMON || type==STT_TLS  || type==STT_NOTYPE) 
         && (vis==STV_DEFAULT || vis==STV_PROTECTED) && (h->SymTab[i].st_shndx!=0)) {
             if(sz && strstr(symname, "@@")) {
@@ -997,7 +997,7 @@ void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* wea
         if((type==STT_OBJECT || type==STT_FUNC || type==STT_COMMON || type==STT_TLS  || type==STT_NOTYPE) 
         && (vis==STV_DEFAULT || vis==STV_PROTECTED) && (h->DynSym[i].st_shndx!=0 && h->DynSym[i].st_shndx<=65521)) {
             uintptr_t offs = (type==STT_TLS)?h->DynSym[i].st_value:(h->DynSym[i].st_value + h->delta);
-            uint64_t sz = h->DynSym[i].st_size;
+            size_t sz = h->DynSym[i].st_size;
             int version = h->VerSym?((Elf64_Half*)((uintptr_t)h->VerSym+h->delta))[i]:-1;
             if(version!=-1) version &= 0x7fff;
             const char* vername = GetSymbolVersion(h, version);
@@ -1018,7 +1018,7 @@ void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* wea
                 if(bind==STB_WEAK) {
                     AddSymbol(weaksymbols, symname, offs, sz, version, vername);
                 } else {
-                    AddSymbol(mapsymbols, symname, offs, sz, version, vername);
+                    AddWeakSymbol(mapsymbols, symname, offs, sz, version?version:1, vername);
                 }
         }
     }
diff --git a/src/library_list.h b/src/library_list.h
index 9de0f0ca..e5b6d9c8 100755
--- a/src/library_list.h
+++ b/src/library_list.h
@@ -60,8 +60,8 @@ GO("libxcb-image.so.0", libxcbimage)
 GO("libxcb-keysyms.so.1", libxcbkeysyms)
 GO("libxcb-xtest.so.0", libxcbxtest)
 GO("libxcb-glx.so.0", libxcbglx)
-//GO("libxcb-dri2.so.0", libxcbdri2)
-//GO("libxcb-dri3.so.0", libxcbdri3)
+GO("libxcb-dri2.so.0", libxcbdri2)
+GO("libxcb-dri3.so.0", libxcbdri3)
 //GO("libxcb-present.so.0", libxcbpresent)
 GO("libXtst.so.6", libxtst)
 GO("libXt.so.6", libxt)
@@ -87,7 +87,7 @@ GO("libudev.so.0", udev0)
 GO("libudev.so.1", udev1)
 GO("libdbus-1.so.3", dbus)
 //GO("libiconv.so.2", iconv)
-//GO("libdrm.so.2", libdrm)
+GO("libdrm.so.2", libdrm)
 GO("libexpat.so.1", expat)
 GO("libexpat.so", expat)
 GO("libcrypto.so.1", crypto)
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index ddc42db2..3d66c77c 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -1817,6 +1817,7 @@
 #() pFpCuWCCuuCW
 #() pFpuwwWWuCuu
 #() pFpuuuwwwwWW
+#() pFpuuuWWWCCi
 #() pFplllllllll
 #() pFppuiipuuii
 #() pFpppppppppp
@@ -2680,6 +2681,7 @@ wrappedlibdl:
   - dlmopen
 - pFppp:
   - dlvsym
+wrappedlibdrm:
 wrappedlibform:
 wrappedlibformw:
 wrappedlibfuse:
@@ -2961,6 +2963,9 @@ wrappedlibx11:
 wrappedlibx11xcb:
 wrappedlibxau:
 wrappedlibxcb:
+wrappedlibxcbdri2:
+% x my_xcb_cookie_t u
+wrappedlibxcbdri3:
 wrappedlibxcbglx:
 wrappedlibxcbimage:
 wrappedlibxcbkeysyms:
diff --git a/src/wrapped/generated/wrappedlibdrmdefs.h b/src/wrapped/generated/wrappedlibdrmdefs.h
new file mode 100644
index 00000000..77311b0f
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibdrmdefs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibdrmDEFS_H_
+#define __wrappedlibdrmDEFS_H_
+
+
+#endif // __wrappedlibdrmDEFS_H_
diff --git a/src/wrapped/generated/wrappedlibdrmtypes.h b/src/wrapped/generated/wrappedlibdrmtypes.h
new file mode 100644
index 00000000..1f952f16
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibdrmtypes.h
@@ -0,0 +1,17 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibdrmTYPES_H_
+#define __wrappedlibdrmTYPES_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+
+#define SUPER() ADDED_FUNCTIONS()
+
+#endif // __wrappedlibdrmTYPES_H_
diff --git a/src/wrapped/generated/wrappedlibdrmundefs.h b/src/wrapped/generated/wrappedlibdrmundefs.h
new file mode 100644
index 00000000..8756a8b1
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibdrmundefs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibdrmUNDEFS_H_
+#define __wrappedlibdrmUNDEFS_H_
+
+
+#endif // __wrappedlibdrmUNDEFS_H_
diff --git a/src/wrapped/generated/wrappedlibxcbdri2defs.h b/src/wrapped/generated/wrappedlibxcbdri2defs.h
new file mode 100644
index 00000000..186616f3
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibxcbdri2defs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibxcbdri2DEFS_H_
+#define __wrappedlibxcbdri2DEFS_H_
+
+
+#endif // __wrappedlibxcbdri2DEFS_H_
diff --git a/src/wrapped/generated/wrappedlibxcbdri2types.h b/src/wrapped/generated/wrappedlibxcbdri2types.h
new file mode 100644
index 00000000..9091b9c1
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibxcbdri2types.h
@@ -0,0 +1,17 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibxcbdri2TYPES_H_
+#define __wrappedlibxcbdri2TYPES_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+
+#define SUPER() ADDED_FUNCTIONS()
+
+#endif // __wrappedlibxcbdri2TYPES_H_
diff --git a/src/wrapped/generated/wrappedlibxcbdri2undefs.h b/src/wrapped/generated/wrappedlibxcbdri2undefs.h
new file mode 100644
index 00000000..53416634
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibxcbdri2undefs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibxcbdri2UNDEFS_H_
+#define __wrappedlibxcbdri2UNDEFS_H_
+
+
+#endif // __wrappedlibxcbdri2UNDEFS_H_
diff --git a/src/wrapped/generated/wrappedlibxcbdri3defs.h b/src/wrapped/generated/wrappedlibxcbdri3defs.h
new file mode 100644
index 00000000..d0072aa7
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibxcbdri3defs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibxcbdri3DEFS_H_
+#define __wrappedlibxcbdri3DEFS_H_
+
+
+#endif // __wrappedlibxcbdri3DEFS_H_
diff --git a/src/wrapped/generated/wrappedlibxcbdri3types.h b/src/wrapped/generated/wrappedlibxcbdri3types.h
new file mode 100644
index 00000000..a0780c73
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibxcbdri3types.h
@@ -0,0 +1,17 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibxcbdri3TYPES_H_
+#define __wrappedlibxcbdri3TYPES_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+
+#define SUPER() ADDED_FUNCTIONS()
+
+#endif // __wrappedlibxcbdri3TYPES_H_
diff --git a/src/wrapped/generated/wrappedlibxcbdri3undefs.h b/src/wrapped/generated/wrappedlibxcbdri3undefs.h
new file mode 100644
index 00000000..ec4e6a44
--- /dev/null
+++ b/src/wrapped/generated/wrappedlibxcbdri3undefs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.1.0.16) *
+ *******************************************************************/
+#ifndef __wrappedlibxcbdri3UNDEFS_H_
+#define __wrappedlibxcbdri3UNDEFS_H_
+
+
+#endif // __wrappedlibxcbdri3UNDEFS_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 2f55c2ff..ecf9dbd0 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -1851,6 +1851,7 @@ typedef void* (*pFEpippppppp_t)(x64emu_t*, void*, int64_t, void*, void*, void*,
 typedef void* (*pFpCuWCCuuCW_t)(void*, uint8_t, uint64_t, uint16_t, uint8_t, uint8_t, uint64_t, uint64_t, uint8_t, uint16_t);
 typedef void* (*pFpuwwWWuCuu_t)(void*, uint64_t, int16_t, int16_t, uint16_t, uint16_t, uint64_t, uint8_t, uint64_t, uint64_t);
 typedef void* (*pFpuuuwwwwWW_t)(void*, uint64_t, uint64_t, uint64_t, int16_t, int16_t, int16_t, int16_t, uint16_t, uint16_t);
+typedef void* (*pFpuuuWWWCCi_t)(void*, uint64_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t, int64_t);
 typedef void* (*pFplllllllll_t)(void*, intptr_t, intptr_t, intptr_t, intptr_t, intptr_t, intptr_t, intptr_t, intptr_t, intptr_t);
 typedef void* (*pFppuiipuuii_t)(void*, void*, uint64_t, int64_t, int64_t, void*, uint64_t, uint64_t, int64_t, int64_t);
 typedef void* (*pFpppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*);
@@ -3807,6 +3808,7 @@ void pFEpippppppp(x64emu_t *emu, uintptr_t fcn) { pFEpippppppp_t fn = (pFEpipppp
 void pFpCuWCCuuCW(x64emu_t *emu, uintptr_t fcn) { pFpCuWCCuuCW_t fn = (pFpCuWCCuuCW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint64_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32)); }
 void pFpuwwWWuCuu(x64emu_t *emu, uintptr_t fcn) { pFpuwwWWuCuu_t fn = (pFpuwwWWuCuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX, (uint16_t)R_R8, (uint16_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint64_t*)(R_RSP + 24), *(uint64_t*)(R_RSP + 32)); }
 void pFpuuuwwwwWW(x64emu_t *emu, uintptr_t fcn) { pFpuuuwwwwWW_t fn = (pFpuuuwwwwWW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (int16_t)R_R8, (int16_t)R_R9, *(int16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(uint16_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32)); }
+void pFpuuuWWWCCi(x64emu_t *emu, uintptr_t fcn) { pFpuuuWWWCCi_t fn = (pFpuuuWWWCCi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(int64_t*)(R_RSP + 32)); }
 void pFplllllllll(x64emu_t *emu, uintptr_t fcn) { pFplllllllll_t fn = (pFplllllllll_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9, *(intptr_t*)(R_RSP + 8), *(intptr_t*)(R_RSP + 16), *(intptr_t*)(R_RSP + 24), *(intptr_t*)(R_RSP + 32)); }
 void pFppuiipuuii(x64emu_t *emu, uintptr_t fcn) { pFppuiipuuii_t fn = (pFppuiipuuii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(int64_t*)(R_RSP + 24), *(int64_t*)(R_RSP + 32)); }
 void pFpppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpppppppppp_t fn = (pFpppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 8c49be58..fad1c565 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -1850,6 +1850,7 @@ void pFEpippppppp(x64emu_t *emu, uintptr_t fnc);
 void pFpCuWCCuuCW(x64emu_t *emu, uintptr_t fnc);
 void pFpuwwWWuCuu(x64emu_t *emu, uintptr_t fnc);
 void pFpuuuwwwwWW(x64emu_t *emu, uintptr_t fnc);
+void pFpuuuWWWCCi(x64emu_t *emu, uintptr_t fnc);
 void pFplllllllll(x64emu_t *emu, uintptr_t fnc);
 void pFppuiipuuii(x64emu_t *emu, uintptr_t fnc);
 void pFpppppppppp(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibdrm.c b/src/wrapped/wrappedlibdrm.c
new file mode 100755
index 00000000..01f49676
--- /dev/null
+++ b/src/wrapped/wrappedlibdrm.c
@@ -0,0 +1,18 @@
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "wrapper.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+
+const char* libdrmName = "libdrm.so.2";
+#define LIBNAME libdrm
+
+#include "wrappedlib_init.h"
+
diff --git a/src/wrapped/wrappedlibdrm_private.h b/src/wrapped/wrappedlibdrm_private.h
new file mode 100755
index 00000000..3ded5707
--- /dev/null
+++ b/src/wrapped/wrappedlibdrm_private.h
@@ -0,0 +1,198 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh....
+#endif
+
+//GO(drmAddBufs, 
+//GO(drmAddContextPrivateMapping, 
+//GO(drmAddContextTag, 
+//GO(drmAddMap, 
+//GO(drmAgpAcquire, 
+//GO(drmAgpAlloc, 
+//GO(drmAgpBase, 
+//GO(drmAgpBind, 
+//GO(drmAgpDeviceId, 
+//GO(drmAgpEnable, 
+//GO(drmAgpFree, 
+//GO(drmAgpGetMode, 
+//GO(drmAgpMemoryAvail, 
+//GO(drmAgpMemoryUsed, 
+//GO(drmAgpRelease, 
+//GO(drmAgpSize, 
+//GO(drmAgpUnbind, 
+//GO(drmAgpVendorId, 
+//GO(drmAgpVersionMajor, 
+//GO(drmAgpVersionMinor, 
+GO(drmAuthMagic, iFiu)
+//GO(drmAvailable, 
+//GO(drmCheckModesettingSupported, 
+//GO(drmClose, 
+//GO(drmCloseOnce, 
+//GO(drmCommandNone, 
+//GO(drmCommandRead, 
+//GO(drmCommandWrite, 
+//GO(drmCommandWriteRead, 
+//GO(drmCreateContext, 
+//GO(drmCreateDrawable, 
+//GO(drmCrtcGetSequence, 
+//GO(drmCrtcQueueSequence, 
+//GO(drmCtlInstHandler, 
+//GO(drmCtlUninstHandler, 
+//GO(drmDelContextTag, 
+//GO(drmDestroyContext, 
+//GO(drmDestroyDrawable, 
+//GO(drmDevicesEqual, 
+//GO(drmDMA, 
+//GO(drmDropMaster, 
+//GO(drmError, 
+//GO(drmFinish, 
+//GO(drmFree, 
+//GO(drmFreeBufs, 
+//GO(drmFreeBusid, 
+//GO(drmFreeDevice, 
+//GO(drmFreeDevices, 
+//GO(drmFreeReservedContextList, 
+GO(drmFreeVersion, vFp)
+//GO(drmGetBufInfo, 
+//GO(drmGetBusid, 
+//GO(drmGetCap, 
+//GO(drmGetClient, 
+//GO(drmGetContextFlags, 
+//GO(drmGetContextPrivateMapping, 
+//GO(drmGetContextTag, 
+//GO(drmGetDevice, 
+//GO(drmGetDevice2, 
+GO(drmGetDeviceNameFromFd, pFi)
+//GO(drmGetDeviceNameFromFd2, 
+//GO(drmGetDevices, 
+//GO(drmGetDevices2, 
+//GO(drmGetEntry, 
+//GO(drmGetHashTable, 
+//GO(drmGetInterruptFromBusID, 
+//GO(drmGetLibVersion, 
+//GO(drmGetLock, 
+GO(drmGetMagic, iFip)
+//GO(drmGetMap, 
+//GO(drmGetNodeTypeFromFd, 
+//GO(drmGetPrimaryDeviceNameFromFd, 
+//GO(drmGetRenderDeviceNameFromFd, 
+//GO(drmGetReservedContextList, 
+//GO(drmGetStats, 
+GO(drmGetVersion, pFi)
+//GO(drmHandleEvent, 
+//GO(drmHashCreate, 
+//GO(drmHashDelete, 
+//GO(drmHashDestroy, 
+//GO(drmHashFirst, 
+//GO(drmHashInsert, 
+//GO(drmHashLookup, 
+//GO(drmHashNext, 
+//GO(drmIoctl, 
+//GO(drmIsMaster, 
+//GO(drmMalloc, 
+//GO(drmMap, 
+//GO(drmMapBufs, 
+//GO(drmMarkBufs, 
+//GO(drmModeAddFB, 
+//GO(drmModeAddFB2, 
+//GO(drmModeAddFB2WithModifiers, 
+//GO(drmModeAtomicAddProperty, 
+//GO(drmModeAtomicAlloc, 
+//GO(drmModeAtomicCommit, 
+//GO(drmModeAtomicDuplicate, 
+//GO(drmModeAtomicFree, 
+//GO(drmModeAtomicGetCursor, 
+//GO(drmModeAtomicMerge, 
+//GO(drmModeAtomicSetCursor, 
+//GO(drmModeAttachMode, 
+//GO(drmModeConnectorSetProperty, 
+//GO(drmModeCreateLease, 
+//GO(drmModeCreatePropertyBlob, 
+//GO(drmModeCrtcGetGamma, 
+//GO(drmModeCrtcSetGamma, 
+//GO(drmModeDestroyPropertyBlob, 
+//GO(drmModeDetachMode, 
+//GO(drmModeDirtyFB, 
+//GO(drmModeFreeConnector, 
+//GO(drmModeFreeCrtc, 
+//GO(drmModeFreeEncoder, 
+//GO(drmModeFreeFB, 
+//GO(drmModeFreeModeInfo, 
+//GO(drmModeFreeObjectProperties, 
+//GO(drmModeFreePlane, 
+//GO(drmModeFreePlaneResources, 
+//GO(drmModeFreeProperty, 
+//GO(drmModeFreePropertyBlob, 
+//GO(drmModeFreeResources, 
+//GO(drmModeGetConnector, 
+//GO(drmModeGetConnectorCurrent, 
+//GO(drmModeGetCrtc, 
+//GO(drmModeGetEncoder, 
+//GO(drmModeGetFB, 
+//GO(drmModeGetLease, 
+//GO(drmModeGetPlane, 
+//GO(drmModeGetPlaneResources, 
+//GO(drmModeGetProperty, 
+//GO(drmModeGetPropertyBlob, 
+//GO(drmModeGetResources, 
+//GO(drmModeListLessees, 
+//GO(drmModeMoveCursor, 
+//GO(drmModeObjectGetProperties, 
+//GO(drmModeObjectSetProperty, 
+//GO(drmModePageFlip, 
+//GO(drmModePageFlipTarget, 
+//GO(drmModeRevokeLease, 
+//GO(drmModeRmFB, 
+//GO(drmModeSetCrtc, 
+//GO(drmModeSetCursor, 
+//GO(drmModeSetCursor2, 
+//GO(drmModeSetPlane, 
+//GO(drmMsg, 
+//GO(drmOpen, 
+//GO(drmOpenControl, 
+//GO(drmOpenOnce, 
+//GO(drmOpenOnceWithType, 
+//GO(drmOpenRender, 
+//GO(drmOpenWithType, 
+//GO(drmPrimeFDToHandle, 
+//GO(drmPrimeHandleToFD, 
+//GO(drmRandom, 
+//GO(drmRandomCreate, 
+//GO(drmRandomDestroy, 
+//GO(drmRandomDouble, 
+//GO(drmRmMap, 
+//GO(drmScatterGatherAlloc, 
+//GO(drmScatterGatherFree, 
+//GO(drmSetBusid, 
+//GO(drmSetClientCap, 
+//GO(drmSetContextFlags, 
+//GO(drmSetInterfaceVersion, 
+//GO(drmSetMaster, 
+//GO(drmSetServerInfo, 
+//GO(drmSLCreate, 
+//GO(drmSLDelete, 
+//GO(drmSLDestroy, 
+//GO(drmSLDump, 
+//GO(drmSLFirst, 
+//GO(drmSLInsert, 
+//GO(drmSLLookup, 
+//GO(drmSLLookupNeighbors, 
+//GO(drmSLNext, 
+//GO(drmSwitchToContext, 
+//GO(drmSyncobjCreate, 
+//GO(drmSyncobjDestroy, 
+//GO(drmSyncobjExportSyncFile, 
+//GO(drmSyncobjFDToHandle, 
+//GO(drmSyncobjHandleToFD, 
+//GO(drmSyncobjImportSyncFile, 
+//GO(drmSyncobjQuery, 
+//GO(drmSyncobjReset, 
+//GO(drmSyncobjSignal, 
+//GO(drmSyncobjTimelineSignal, 
+//GO(drmSyncobjTimelineWait, 
+//GO(drmSyncobjTransfer, 
+//GO(drmSyncobjWait, 
+//GO(drmUnlock, 
+//GO(drmUnmap, 
+//GO(drmUnmapBufs, 
+//GO(drmUpdateDrawableInfo, 
+//GO(drmWaitVBlank, 
diff --git a/src/wrapped/wrappedlibxcbdri2.c b/src/wrapped/wrappedlibxcbdri2.c
new file mode 100755
index 00000000..1a474f9d
--- /dev/null
+++ b/src/wrapped/wrappedlibxcbdri2.c
@@ -0,0 +1,24 @@
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#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"
+
+const char* libxcbdri2Name = "libxcb-dri2.so.0";
+#define LIBNAME libxcbdri2
+static library_t *my_lib = NULL;
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibxcbdri2_private.h b/src/wrapped/wrappedlibxcbdri2_private.h
new file mode 100755
index 00000000..d9efcec8
--- /dev/null
+++ b/src/wrapped/wrappedlibxcbdri2_private.h
@@ -0,0 +1,68 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error meh!
+#endif
+
+//%S x my_xcb_cookie_t u
+
+//GO(xcb_dri2_attach_format_end, 
+//GO(xcb_dri2_attach_format_next, 
+GO(xcb_dri2_authenticate, pFpuu)
+GO(xcb_dri2_authenticate_reply, pFpup)
+//GO(xcb_dri2_authenticate_unchecked, 
+GO(xcb_dri2_connect, pFpuu)
+//GO(xcb_dri2_connect_alignment_pad, 
+//GO(xcb_dri2_connect_alignment_pad_end, 
+//GO(xcb_dri2_connect_alignment_pad_length, 
+GO(xcb_dri2_connect_device_name, pFp)
+//GO(xcb_dri2_connect_device_name_end, 
+GO(xcb_dri2_connect_device_name_length, iFp)
+//GO(xcb_dri2_connect_driver_name, 
+//GO(xcb_dri2_connect_driver_name_end, 
+//GO(xcb_dri2_connect_driver_name_length, 
+GO(xcb_dri2_connect_reply, pFpup)
+//GO(xcb_dri2_connect_sizeof, 
+//GO(xcb_dri2_connect_unchecked, 
+//GO(xcb_dri2_copy_region, 
+//GO(xcb_dri2_copy_region_reply, 
+//GO(xcb_dri2_copy_region_unchecked, 
+//GO(xcb_dri2_create_drawable, 
+//GO(xcb_dri2_create_drawable_checked, 
+//GO(xcb_dri2_destroy_drawable, 
+//GO(xcb_dri2_destroy_drawable_checked, 
+//GO(xcb_dri2_dri2_buffer_end, 
+//GO(xcb_dri2_dri2_buffer_next, 
+//GO(xcb_dri2_get_buffers, 
+//GO(xcb_dri2_get_buffers_buffers, 
+//GO(xcb_dri2_get_buffers_buffers_iterator, 
+//GO(xcb_dri2_get_buffers_buffers_length, 
+//GO(xcb_dri2_get_buffers_reply, 
+//GO(xcb_dri2_get_buffers_sizeof, 
+//GO(xcb_dri2_get_buffers_unchecked, 
+//GO(xcb_dri2_get_buffers_with_format, 
+//GO(xcb_dri2_get_buffers_with_format_buffers, 
+//GO(xcb_dri2_get_buffers_with_format_buffers_iterator, 
+//GO(xcb_dri2_get_buffers_with_format_buffers_length, 
+//GO(xcb_dri2_get_buffers_with_format_reply, 
+//GO(xcb_dri2_get_buffers_with_format_sizeof, 
+//GO(xcb_dri2_get_buffers_with_format_unchecked, 
+//GO(xcb_dri2_get_msc, 
+//GO(xcb_dri2_get_msc_reply, 
+//GO(xcb_dri2_get_msc_unchecked, 
+//GO(xcb_dri2_get_param, 
+//GO(xcb_dri2_get_param_reply, 
+//GO(xcb_dri2_get_param_unchecked, 
+DATA(xcb_dri2_id, sizeof(void*)+sizeof(int))
+GO(xcb_dri2_query_version, pFpuu)
+GO(xcb_dri2_query_version_reply, pFpup)
+//GO(xcb_dri2_query_version_unchecked, 
+//GO(xcb_dri2_swap_buffers, 
+//GO(xcb_dri2_swap_buffers_reply, 
+//GO(xcb_dri2_swap_buffers_unchecked, 
+//GO(xcb_dri2_swap_interval, 
+//GO(xcb_dri2_swap_interval_checked, 
+//GO(xcb_dri2_wait_msc, 
+//GO(xcb_dri2_wait_msc_reply, 
+//GO(xcb_dri2_wait_msc_unchecked, 
+//GO(xcb_dri2_wait_sbc, 
+//GO(xcb_dri2_wait_sbc_reply, 
+//GO(xcb_dri2_wait_sbc_unchecked, 
diff --git a/src/wrapped/wrappedlibxcbdri3.c b/src/wrapped/wrappedlibxcbdri3.c
new file mode 100755
index 00000000..494fc462
--- /dev/null
+++ b/src/wrapped/wrappedlibxcbdri3.c
@@ -0,0 +1,24 @@
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#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"
+
+const char* libxcbdri3Name = "libxcb-dri3.so.0";
+#define LIBNAME libxcbdri3
+static library_t *my_lib = NULL;
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedlibxcbdri3_private.h b/src/wrapped/wrappedlibxcbdri3_private.h
new file mode 100755
index 00000000..2490657e
--- /dev/null
+++ b/src/wrapped/wrappedlibxcbdri3_private.h
@@ -0,0 +1,50 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error meh!
+#endif
+
+//GO(xcb_dri3_buffer_from_pixmap, 
+//GO(xcb_dri3_buffer_from_pixmap_reply, 
+//GO(xcb_dri3_buffer_from_pixmap_reply_fds, 
+//GO(xcb_dri3_buffer_from_pixmap_unchecked, 
+//GO(xcb_dri3_buffers_from_pixmap, 
+//GO(xcb_dri3_buffers_from_pixmap_buffers, 
+//GO(xcb_dri3_buffers_from_pixmap_buffers_end, 
+//GO(xcb_dri3_buffers_from_pixmap_buffers_length, 
+//GO(xcb_dri3_buffers_from_pixmap_offsets, 
+//GO(xcb_dri3_buffers_from_pixmap_offsets_end, 
+//GO(xcb_dri3_buffers_from_pixmap_offsets_length, 
+//GO(xcb_dri3_buffers_from_pixmap_reply, 
+//GO(xcb_dri3_buffers_from_pixmap_reply_fds, 
+//GO(xcb_dri3_buffers_from_pixmap_sizeof, 
+//GO(xcb_dri3_buffers_from_pixmap_strides, 
+//GO(xcb_dri3_buffers_from_pixmap_strides_end, 
+//GO(xcb_dri3_buffers_from_pixmap_strides_length, 
+//GO(xcb_dri3_buffers_from_pixmap_unchecked, 
+//GO(xcb_dri3_fd_from_fence, 
+//GO(xcb_dri3_fd_from_fence_reply, 
+//GO(xcb_dri3_fd_from_fence_reply_fds, 
+//GO(xcb_dri3_fd_from_fence_unchecked, 
+//GO(xcb_dri3_fence_from_fd, 
+//GO(xcb_dri3_fence_from_fd_checked, 
+//GO(xcb_dri3_get_supported_modifiers, 
+//GO(xcb_dri3_get_supported_modifiers_reply, 
+//GO(xcb_dri3_get_supported_modifiers_screen_modifiers, 
+//GO(xcb_dri3_get_supported_modifiers_screen_modifiers_end, 
+//GO(xcb_dri3_get_supported_modifiers_screen_modifiers_length, 
+//GO(xcb_dri3_get_supported_modifiers_sizeof, 
+//GO(xcb_dri3_get_supported_modifiers_unchecked, 
+//GO(xcb_dri3_get_supported_modifiers_window_modifiers, 
+//GO(xcb_dri3_get_supported_modifiers_window_modifiers_end, 
+//GO(xcb_dri3_get_supported_modifiers_window_modifiers_length, 
+DATA(xcb_dri3_id, sizeof(void*)+sizeof(int))
+GO(xcb_dri3_open, pFpuu)
+GO(xcb_dri3_open_reply, pFpup)
+GO(xcb_dri3_open_reply_fds, pFpp)
+//GO(xcb_dri3_open_unchecked, 
+//GO(xcb_dri3_pixmap_from_buffer, 
+GO(xcb_dri3_pixmap_from_buffer_checked, pFpuuuWWWCCi)
+//GO(xcb_dri3_pixmap_from_buffers, 
+//GO(xcb_dri3_pixmap_from_buffers_checked, 
+GO(xcb_dri3_query_version, pFpuu)
+GO(xcb_dri3_query_version_reply, pFpup)
+//GO(xcb_dri3_query_version_unchecked,