| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | /* glibc test for TLS in ld.so.  */#include <stdio.h>#include <tls.h>#ifdef USE_TLS# include "tls-macros.h"/* One define int variable, two externs.  */COMMON_INT_DECL(foo);VAR_INT_DECL(bar);VAR_INT_DEF(baz);#endifextern int in_dso (void);#define TEST_FUNCTION do_test ()static intdo_test (void){#ifdef USE_TLS  int result = 0;  int *ap, *bp, *cp;  /* Set the variable using the local exec model.  */  puts ("set baz to 3 (LE)");  ap = TLS_LE (baz);  *ap = 3;  /* Get variables using initial exec model.  */  puts ("set variables foo and bar (IE)");  ap = TLS_IE (foo);  *ap = 1;  bp = TLS_IE (bar);  *bp = 2;  /* Get variables using local dynamic model.  */  fputs ("get sum of foo, bar (GD) and baz (LD)", stdout);  ap = TLS_GD (foo);  bp = TLS_GD (bar);  cp = TLS_LD (baz);  printf (" = %d\n", *ap + *bp + *cp);  result |= *ap + *bp + *cp != 6;  if (*ap != 1)    {      printf ("foo = %d\n", *ap);      result = 1;    }  if (*bp != 2)    {      printf ("bar = %d\n", *bp);      result = 1;    }  if (*cp != 3)    {      printf ("baz = %d\n", *cp);      result = 1;    }  result |= in_dso ();  return result;#else  return 0;#endif}#include "../test-skeleton.c"
 |