mapi: Clean up entry_patch_public for x86 tls
authorLepton Wu <lepton@chromium.org>
Sat, 26 Oct 2019 00:27:04 +0000 (17:27 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 30 Oct 2019 00:18:06 +0000 (17:18 -0700)
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 <mattst88@gmail.com>
Signed-off-by: Lepton Wu <lepton@chromium.org>
src/mapi/entry_x86_tls.h

index a4e2a76638219198b397d3721a53556b1513bdbd..b938679979236589128080e849054460c9272173 100644 (file)
@@ -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