Я не совсем понимаю, что вы хотите. Однако последовательности ассемблера (для ARMv6+ и поддерживающего ядра) таковы:
mrc p15, 0, rX, c13, c0, 2 @ get the user r/w register
В некоторых руководствах по ARM это называется TPIDRURW. Ваши таблицы/структура TLS должны быть порождены этим значением (возможно, указателем). Использование mcr
быстрее, но вы также можете вызвать помощника (см. ниже), если вы не установили HWCAP_TLS
в своем ELF (который можно использовать на всех процессорах ARM, поддерживаемых Linux).
Цель адреса 0xffff0fe8 похоже заключается в том, что вы можете использовать эти 4 байта вместо использования вышеупомянутого ассемблера напрямую с (rX
== r0
), поскольку, возможно, где-то на какой-то машине он отличается.
Это зависит от типа процессора. Существует помощник в векторной странице @0xffff0fe0 в entry-armv.S; он находится в структуре процесса/потока, если аппаратное обеспечение не поддерживает его. Документация находится в kernel_user_helpers.txt
Пример использования:
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);
}
Вы делаете системный вызов, чтобы установить материал TLS. clone
— это способ настроить контекст потока. thread_info содержит все регистры для потока; он может совместно использовать mm (управление памятью или представление памяти процесса) с другими task_struct
. Т.е. thread_info имеет tp_value
для каждого созданного потока.
Вот обсуждение реализации ARM. Задействованы ELF/nptl/glibc и ядро Linux (и/или поисковые запросы для более подробного изучения). Системный вызов для get_tls()
, вероятно, был слишком дорогим, а в текущей основной ветке есть помощник векторной страницы (отображенный всеми потоками/процессами).
Некоторый источник glibc, tls-macros.h, tlsdesc.c и т. д. Скорее всего, полный/краткий ответ будет зависеть от версии,
- Ваш процессор ARM.
- Ваше ядро Linux.
- Ваш glibc.
- Ваш компилятор (и флаги!).
person
artless noise
schedule
23.04.2015
R_ARM_TLS_
(но они не являются кодом согласно ОП). Загрузчик должен организовать карту памяти в соответствии с PDF. Вы укореняете это в реестре TLS. Джаз на батуте, если вы хотите это лениво или нет, зависит от набора инструментов. - person artless noise   schedule 23.04.2015