|  | /* | 
|  | need gcc-4.3.4 (gcc-4_3-branch r149015) | 
|  | or gcc-4.4.1 (gcc-4_4-branch r149016) | 
|  | or gcc-4.5.x (trunk r149593) or newer | 
|  | which have a properly fixed gcc/emutls.c, | 
|  | along with mingw-w64-headers r960 and | 
|  | mingw-w64-crt r973. | 
|  | */ | 
|  |  | 
|  | #include <sys/types.h> | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <windows.h> | 
|  |  | 
|  | #if defined(_MSC_VER) /* MS Visual Studio */ | 
|  | #define __threadlocal__ __declspec(thread) | 
|  | #elif defined(__GNUC__) && ((__GNUC__ > 4) \ | 
|  | || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) | 
|  | /* gcc >= 4.3, also needs binutils >= 2.19 */ | 
|  | #define __threadlocal__ __thread | 
|  | #else | 
|  | #error No keyword for TLS vars is defined. | 
|  | #endif | 
|  |  | 
|  | __threadlocal__ int tvar = 0; | 
|  |  | 
|  | int main (int argc, char **argv) | 
|  | { | 
|  | (void)argv; | 
|  | if (argc != 1) | 
|  | { | 
|  | printf("not referencing tvar\n"); | 
|  | } | 
|  | else | 
|  | { | 
|  | printf("incrementing tvar..\n"); | 
|  | ++tvar; | 
|  | printf("   .. done (%i)\n", tvar); | 
|  | } | 
|  | printf("exiting....\n"); | 
|  | exit (0); | 
|  | } | 
|  |  |