logo

live-bootstrap

Mirror of <https://github.com/fosslinux/live-bootstrap>

avoid_set_thread_area.patch (1338B)


  1. # SPDX-FileCopyrightText: 2023 Richard Masters <grick23@gmail.com>
  2. # SPDX-License-Identifier: MIT
  3. diff -r -u musl-1.1.24.orig/arch/i386/pthread_arch.h musl-1.1.24/arch/i386/pthread_arch.h
  4. --- musl-1.1.24/arch/i386/pthread_arch.h 2019-10-13 21:58:27.000000000 +0000
  5. +++ musl-1.1.24/arch/i386/pthread_arch.h 2023-04-07 11:56:04.649119523 +0000
  6. @@ -1,8 +1,8 @@
  7. +extern pthread_t g_pthread;
  8. +
  9. static inline struct pthread *__pthread_self()
  10. {
  11. - struct pthread *self;
  12. - __asm__ ("movl %%gs:0,%0" : "=r" (self) );
  13. - return self;
  14. + return g_pthread;
  15. }
  16. #define TP_ADJ(p) (p)
  17. diff -r -u musl-1.1.24.orig/src/env/__init_tls.c musl-1.1.24/src/env/__init_tls.c
  18. --- musl-1.1.24/src/env/__init_tls.c 2019-10-13 21:58:27.000000000 +0000
  19. +++ musl-1.1.24/src/env/__init_tls.c 2023-04-07 11:56:43.565120289 +0000
  20. @@ -10,20 +10,19 @@
  21. #include "syscall.h"
  22. volatile int __thread_list_lock;
  23. +pthread_t g_pthread;
  24. int __init_tp(void *p)
  25. {
  26. pthread_t td = p;
  27. td->self = td;
  28. - int r = __set_thread_area(TP_ADJ(p));
  29. - if (r < 0) return -1;
  30. - if (!r) libc.can_do_threads = 1;
  31. td->detach_state = DT_JOINABLE;
  32. td->tid = __syscall(SYS_set_tid_address, &__thread_list_lock);
  33. td->locale = &libc.global_locale;
  34. td->robust_list.head = &td->robust_list.head;
  35. td->sysinfo = __sysinfo;
  36. td->next = td->prev = td;
  37. + g_pthread = td;
  38. return 0;
  39. }