mirror of git://sourceware.org/git/glibc.git
				
				
				
			
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
/* 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);
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
extern int in_dso (void);
 | 
						|
 | 
						|
 | 
						|
#define TEST_FUNCTION do_test ()
 | 
						|
static int
 | 
						|
do_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"
 |