libc-tls.c 927 B

123456789101112131415161718192021222324252627282930313233
  1. /*
  2. * Thread-local storage handling in statically linked binaries. Meta version.
  3. * Copyright (C) 2009 Free Software Foundation, Inc.
  4. *
  5. * Based on GNU C Library (file: libc/sysdeps/sh/libc-tls.c)
  6. *
  7. * Copyright (C) 2010 STMicroelectronics Ltd.
  8. * Copyright (C) 2013 Imagination Technologies Ltd.
  9. *
  10. * Author: Filippo Arcidiacono <filippo.arcidiacono@st.com>
  11. *
  12. * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
  13. *
  14. */
  15. #include <sysdeps/generic/libc-tls.c>
  16. #include <dl-tls.h>
  17. #if defined (USE_TLS) && (USE_TLS)
  18. /* On Meta, linker optimizations are not required, so __tls_get_addr
  19. can be called even in statically linked binaries. In this case module
  20. must be always 1 and PT_TLS segment exist in the binary, otherwise it
  21. would not link. */
  22. void *
  23. __tls_get_addr (tls_index *ti)
  24. {
  25. dtv_t *dtv = THREAD_DTV ();
  26. return (char *) dtv[1].pointer.val + ti->ti_offset;
  27. }
  28. #endif