diff options
author | Kinsey Moore <kinsey.moore@oarcorp.com> | 2023-01-12 15:09:20 -0600 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2023-01-17 09:32:45 -0600 |
commit | 6970c47c70eeb9908c0b4344a53d4f1e6f206408 (patch) | |
tree | 85e4ddfeb80ad7d7aecb52ffbfbad84411a79c98 | |
parent | record: Fix thread name handling (diff) | |
download | rtems-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.cpp | 5 | ||||
-rw-r--r-- | rtemstoolkit/rld-elf.cpp | 1 | ||||
-rw-r--r-- | rtemstoolkit/rld-symbols.cpp | 3 |
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) + ")"; |