mapi: Adapted libglvnd x86 tsd changes
The x86 assembly language stub in src/mapi/entry_x86_tsd.h does not generate PIC (position-independent code). This causes text relocations which bring troubles on recent versions of FreeBSD, OpenBSD, Android. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108541 Reviewed-by: Matt Turner <mattst88@gmail.com> Signed-off-by: Lepton Wu <lepton@chromium.org>
This commit is contained in:

committed by
Matt Turner

parent
9c3c206e71
commit
45206d7673
@@ -31,7 +31,7 @@
|
||||
#define HIDDEN
|
||||
#endif
|
||||
|
||||
#define X86_ENTRY_SIZE 32
|
||||
#define X86_ENTRY_SIZE 64
|
||||
|
||||
__asm__(".text\n"
|
||||
".balign 32\n"
|
||||
@@ -44,12 +44,18 @@ __asm__(".text\n"
|
||||
func ":"
|
||||
|
||||
#define STUB_ASM_CODE(slot) \
|
||||
"movl " ENTRY_CURRENT_TABLE ", %eax\n\t" \
|
||||
"testl %eax, %eax\n\t" \
|
||||
"je 1f\n\t" \
|
||||
"jmp *(4 * " slot ")(%eax)\n" \
|
||||
"push %ebx\n\t" \
|
||||
"call 1f\n\t" \
|
||||
"1:\n\t" \
|
||||
"call " ENTRY_CURRENT_TABLE_GET "\n\t" \
|
||||
"popl %ebx\n\t" \
|
||||
"addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx\n\t" \
|
||||
"movl " ENTRY_CURRENT_TABLE "@GOT(%ebx), %eax\n\t" \
|
||||
"mov (%eax), %eax\n\t" \
|
||||
"testl %eax, %eax\n\t" \
|
||||
"jne 1f\n\t" \
|
||||
"call " ENTRY_CURRENT_TABLE_GET "@PLT\n\t" \
|
||||
"1:\n\t" \
|
||||
"pop %ebx\n\t" \
|
||||
"jmp *(4 * " slot ")(%eax)"
|
||||
|
||||
#define MAPI_TMP_STUB_ASM_GCC
|
||||
|
Reference in New Issue
Block a user