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:
Jonathan Gray
2019-09-13 10:09:15 -07:00
committed by Matt Turner
parent 9c3c206e71
commit 45206d7673

View File

@@ -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