TLS变量的4种访问模型
ELF中对TLS(Thread Local Storage)变量的4种访问模型,参见:tls.pdf
gcc中使用的TLS变量访问模型
gcc中关于TLS变量访问模型的控制,可以通过-ftls-model=model [global-dynamic / local-dynamic / initial-exec / local-exec]来指定。当使用-fPIC编译时,默认是使用了"global-dynamic"模型,而当不使用-fPIC编译时,默认是使用了"initial-exec"模型,参见:gcc.pdf
我们将通过如下的例子展示gcc中的TLS变量访问模型。
对于如下test_tls.c文件:
#include <errno.h>
#include <stdio.h>
int print_date();
__thread int myno = -1;
int print_date()
{
int y = 2021;
int m = 12;
int d = 15;
int ret = printf("today is %04d-%02d-%02d !\n", y, m, d);
if(ret > 0)
myno = ret;
return 0;
}
当我们使用如下编译命