使用 riscv64 的线程本地存储

问题描述

我正在尝试使用线程本地存储,了解 riscv 上的用法

下面是我在做什么:

参考以下文档中的 TLS 部分 https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md

  1. 我有 TLS 变量的适当属性
__thread int TLS_var1 __attribute__((tls_model("local-exec")));
__thread int TLS_var2 __attribute__((tls_model("local-exec")))
posix_thread1(){
TLS_var1++;
..
}
posix_thread1(){
TLS_var2++;
..
}
  1. 链接器脚本包含以下部分
  .tdata      :
   {
     PROVIDE_HIDDEN (__tdata_start = .);
     *(.tdata .tdata.* .gnu.linkonce.td.*)
   }

  .tbss       : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
  1. 我正在使用编译器选项构建代码
-mcmodel=medany -static -march=rv64imac -mabi=lp64 -ggdb -Og -ftls-model=local-exec

问题: 我不确定应该将 $tp(线程指针)分配给什么? 如何找出线程控制块区域的开始?

请让我知道,我缺少使用 TLS 工作的基本程序。 谢谢, 安妮

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)