From: Lepton Wu Date: Sat, 26 Oct 2019 00:27:04 +0000 (-0700) Subject: mapi: Clean up entry_patch_public for x86 tls X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b2b8639d8e901008b4501e35957d27da170de042;p=mesa.git mapi: Clean up entry_patch_public for x86 tls Remove hard coded 16 and use entry_generate_or_patch to patch public stubs. The generated code actually is sightly tighter than before since the "nop" instructions before the final "jmp" get removed. Reviewed-by: Matt Turner Signed-off-by: Lepton Wu --- diff --git a/src/mapi/entry_x86_tls.h b/src/mapi/entry_x86_tls.h index a4e2a766382..b9386799792 100644 --- a/src/mapi/entry_x86_tls.h +++ b/src/mapi/entry_x86_tls.h @@ -33,6 +33,8 @@ #define HIDDEN #endif +#define X86_ENTRY_SIZE 16 + __asm__(".text"); __asm__("x86_current_tls:\n\t" @@ -87,23 +89,18 @@ void entry_patch_public(void) { #ifndef GLX_X86_READONLY_TEXT - char patch[8] = { - 0x65, 0xa1, 0x00, 0x00, 0x00, 0x00, /* movl %gs:0x0, %eax */ - 0x90, 0x90 /* nop's */ - }; char *entry; - - *((unsigned long *) (patch + 2)) = x86_current_tls(); - - for (entry = x86_entry_start; entry < x86_entry_end; entry += 16) - memcpy(entry, patch, sizeof(patch)); + int slot = 0; + for (entry = x86_entry_start; entry < x86_entry_end; + entry += X86_ENTRY_SIZE, ++slot) + entry_generate_or_patch(slot, entry, X86_ENTRY_SIZE); #endif } mapi_func entry_get_public(int slot) { - return (mapi_func) (x86_entry_start + slot * 16); + return (mapi_func) (x86_entry_start + slot * X86_ENTRY_SIZE); } void