Mesa (master): mapi: Clean up entry_patch_public for x86 tls
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Oct 30 00:19:42 UTC 2019
Module: Mesa
Branch: master
Commit: b2b8639d8e901008b4501e35957d27da170de042
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b2b8639d8e901008b4501e35957d27da170de042
Author: Lepton Wu <lepton at chromium.org>
Date: Fri Oct 25 17:27:04 2019 -0700
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 <mattst88 at gmail.com>
Signed-off-by: Lepton Wu <lepton at chromium.org>
---
src/mapi/entry_x86_tls.h | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
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
More information about the mesa-commit
mailing list