diff options
author | Chia-I Wu <olv@lunarg.com> | 2010-12-17 00:24:27 +0800 |
---|---|---|
committer | Chia-I Wu <olv@lunarg.com> | 2011-01-20 17:15:50 +0800 |
commit | 97185bf2654f7e72d8bfcc216f905492655d4c77 (patch) | |
tree | 92a3f7e0ef7faa683270dd91df34390c0cc0b838 /src/mapi/mapi/entry_x86-64_tls.h | |
parent | 96c52d16c1716b8974b5421342f53f36cb80c10f (diff) |
mapi: Add support for bridge mode.
In bridge mode, mapi no longer implements glapi.h. It becomes a user of
glapi.h. Imagine an app that uses both libGL.so and libGLESv2.so.
There will be two copies of glapi in the app's memory. It is possible
that _glapi_get_dispatch does not return what _glapi_set_dispatch set,
if they access different copies of the global variables. The solution
to this situation to build either one of the libraries as a bridge to
the other. Or build both libraries as bridges to another shared
glapi library.
Diffstat (limited to 'src/mapi/mapi/entry_x86-64_tls.h')
-rw-r--r-- | src/mapi/mapi/entry_x86-64_tls.h | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/mapi/mapi/entry_x86-64_tls.h b/src/mapi/mapi/entry_x86-64_tls.h index 21ba434ae8..d3b606c8ac 100644 --- a/src/mapi/mapi/entry_x86-64_tls.h +++ b/src/mapi/mapi/entry_x86-64_tls.h @@ -26,8 +26,6 @@ * Chia-I Wu <olv@lunarg.com> */ -#include <string.h> -#include "u_execmem.h" #include "u_macros.h" #ifdef __linux__ @@ -43,13 +41,8 @@ __asm__(".section .note.ABI-tag, \"a\"\n\t" "3: .p2align 2\n\t"); /* pad out section */ #endif /* __linux__ */ -__asm__(".text"); - -__asm__("x86_64_current_tls:\n\t" - "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" - "ret"); - -__asm__(".balign 32\n" +__asm__(".text\n" + ".balign 32\n" "x86_64_entry_start:"); #define STUB_ASM_ENTRY(func) \ @@ -66,9 +59,18 @@ __asm__(".balign 32\n" #define MAPI_TMP_STUB_ASM_GCC #include "mapi_tmp.h" +#ifndef MAPI_MODE_BRIDGE + +__asm__("x86_64_current_tls:\n\t" + "movq " ENTRY_CURRENT_TABLE "@GOTTPOFF(%rip), %rax\n\t" + "ret"); + extern unsigned long x86_64_current_tls(); +#include <string.h> +#include "u_execmem.h" + void entry_patch_public(void) { @@ -118,3 +120,5 @@ entry_generate(int slot) return entry; } + +#endif /* MAPI_MODE_BRIDGE */ |