Ich verstehe nicht genau, was Sie wollen. Jedoch sind die Assembler-Sequenzen (für ARMv6 + und ein fähiger Kern) sind,
mrc p15, 0, rX, c13, c0, 2 @ get the user r/w register
Diese TPIDRURW in einigen ARM-Handbüchern genannt wird. Ihre TLS-Tabellen/-Struktur muss von diesem Wert (wahrscheinlich ein Zeiger) parented sein. Die Verwendung der mcr
ist schneller, aber Sie können auch den Helper aufrufen (siehe unten), wenn Sie HWCAP_TLS
nicht in Ihrem ELF setzen (das auf allen von Linux unterstützten ARM-CPUs verwendet werden kann).
Die Absicht Adresse 0xffff0fe8 scheint zu sein, dass Sie diesen 4-Byte anstelle der Verwendung der oben Assembler direkt mit (rX
== r0
) als vielleicht anders ist irgendwo für einige Maschinen verwenden können.
Sie hängt vom CPU-Typ ab. Es gibt eine helper in the vector page @0xffff0fe0 in entry-armv.S; Es ist in der Prozess/Thread-Struktur, wenn die Hardware es nicht unterstützt. Die Dokumentation ist in kernel_user_helpers.txt
Anwendungsbeispiel:
typedef void * (__kuser_get_tls_t)(void);
#define __kuser_get_tls (*(__kuser_get_tls_t *)0xffff0fe0)
void foo()
{
void *tls = __kuser_get_tls();
printf("TLS = %p\n", tls);
}
Sie haben eine syscall die TLS Sachen zu setzen. clone
ist eine Möglichkeit, einen Threadkontext einzurichten. Die enthält alle Register für einen Thread; es kann einen mm (Speicherverwaltung oder Prozessspeicheransicht) mit anderen teilen task_struct
. Dh die thread_info hat einen tp_value
für jeden erstellten Thread.
Here is a dicussion der ARM-Implementierung. ELF/nptl/glibc und Linux Kernel sind alle beteiligt (und/oder Suchbegriffe, um mehr zu untersuchen). Der Syscall für get_tls()
war wahrscheinlich zu teuer und die aktuelle Hauptleitung hat einen Vektorseitenhelfer (abgebildet von allen Threads/Prozessen).
Einige glibc Quelle, tls-macros.h, tlsdesc.c usw. Die meisten wahrscheinlich eine vollständige/prägnante Antwort auf die Version abhängen,
- Ihre ARM-CPU.
- Ihr Linux-Kernel.
- Ihr glibc.
- Ihr Compiler (und Flags!).
Ich würde einige Disassemblierung (http://goo.gl/TPiQCX) dann verwenden diese zu google. https://gcc.gnu.org/ml/gcc-patches/2005-03/msg02375.html http://sourcery.mentor.com/public/publications/RFC-TLSDESC-ARM.txt http: // lxr. free-electronics.com/source/arch/arm/include/asm/tls.h – auselen
Möglicherweise ein Duplikat von http: // stackoverflow.com/questions/12878698/was-sind-die-real-elf-tls-abi-anforderungen-für-jeden-cpu-arch, aber das hat keine richtige antwort. – unixsmurf
@unixsmurf Ich denke 'R' Antwort auf seine Frage und wie bekomme ich das 'Thread-Register' unter ARM-Linux diese Frage beantworten? –