spacepaste

  1.  
  2. /* Regression test: make sure that there's no conflict between
  3. * the TLS (thread-local storage) slots used via libEGL/bionic
  4. * and the TLS space allocated by the host toolchain. The array
  5. * declared here should remain unchanged regardless of GL activity.
  6. * Since this array is the first __thread storage declared in the main
  7. * program, glibc will allocate it before any others.
  8. */
  9. #define SLOT_FILLER (void *) 0x11122111 /* arbitrary non-zero value */
  10. #define S SLOT_FILLER
  11. __thread void *tls_space[64] = {
  12. S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
  13. S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
  14. S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
  15. S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,
  16. };
  17. #undef S
  18. #include <stdlib.h>
  19. #include <EGL/egl.h>
  20. #include <stdio.h>
  21. int main(int argc, char **argv)
  22. {
  23. int i;
  24. int bad_tls = 0;
  25. EGLDisplay display;
  26. display = eglGetDisplay(NULL);
  27. printf("asd\n");
  28. for (i=0; i<64; ++i) {
  29. if (tls_space[i] != SLOT_FILLER) {
  30. printf("TLS array slot %d polluted: %p\n", i, tls_space[i]);
  31. bad_tls++;
  32. }
  33. }
  34. if (bad_tls)
  35. return 1;
  36. return 0;
  37. }
  38.