summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2023-01-12 15:09:20 -0600
committerJoel Sherrill <joel@rtems.org>2023-01-17 09:32:45 -0600
commit6970c47c70eeb9908c0b4344a53d4f1e6f206408 (patch)
tree85e4ddfeb80ad7d7aecb52ffbfbad84411a79c98
parentrecord: Fix thread name handling (diff)
downloadrtems-tools-6970c47c70eeb9908c0b4344a53d4f1e6f206408.tar.bz2
linkers/rtems-syms: Generate TLS symbols
When generating the symbol table for loadable modules, include TLS symbols so that the modules can reference them.
-rw-r--r--linkers/rtems-syms.cpp5
-rw-r--r--rtemstoolkit/rld-elf.cpp1
-rw-r--r--rtemstoolkit/rld-symbols.cpp3
3 files changed, 9 insertions, 0 deletions
diff --git a/linkers/rtems-syms.cpp b/linkers/rtems-syms.cpp
index 5aa4d27..e5170e1 100644
--- a/linkers/rtems-syms.cpp
+++ b/linkers/rtems-syms.cpp
@@ -242,6 +242,11 @@ output_sym::operator ()(const rld::symbols::symtab::value_type& value)
c.write_line ("asm(\" .asciz \\\"" + sym.name () + "\\\"\");");
+ if (sym.type() == STT_TLS)
+ {
+ c.write_line ("asm(\" .type \\\"" + sym.name () + "\\\", %tls_object\");");
+ }
+
if (embed)
{
c.write_line ("#if __SIZEOF_POINTER__ == 8");
diff --git a/rtemstoolkit/rld-elf.cpp b/rtemstoolkit/rld-elf.cpp
index ffa3376..68efdbe 100644
--- a/rtemstoolkit/rld-elf.cpp
+++ b/rtemstoolkit/rld-elf.cpp
@@ -891,6 +891,7 @@ namespace rld
{
if (((stype == STT_NOTYPE) ||
(stype == STT_OBJECT) ||
+ (stype == STT_TLS) ||
(stype == STT_FUNC)) &&
((weak && (sbind == STB_WEAK)) ||
(!unresolved && ((local && (sbind == STB_LOCAL)) ||
diff --git a/rtemstoolkit/rld-symbols.cpp b/rtemstoolkit/rld-symbols.cpp
index 661b598..01291c0 100644
--- a/rtemstoolkit/rld-symbols.cpp
+++ b/rtemstoolkit/rld-symbols.cpp
@@ -277,6 +277,9 @@ namespace rld
case STT_FILE:
type = "STT_FILE ";
break;
+ case STT_TLS:
+ type = "STT_TLS ";
+ break;
default:
if ((type_val >= STT_LOPROC) && (type_val <= STT_HIPROC))
type = "STT_LOPROC(" + rld::to_string (type_val) + ")";