Tôi không hiểu chính xác những gì bạn muốn. Tuy nhiên, trình tự lắp ráp (ví ARMv6 + và một hạt nhân có khả năng) là,
mrc p15, 0, rX, c13, c0, 2 @ get the user r/w register
này được gọi là TPIDRURW trong một số hướng dẫn sử dụng ARM. Các bảng/cấu trúc TLS của bạn phải được phân biệt với giá trị này (có thể là một con trỏ). Sử dụng mcr
là nhanh hơn, nhưng bạn cũng có thể gọi trình trợ giúp (xem bên dưới) nếu bạn không đặt HWCAP_TLS
trong ELF (có thể được sử dụng trên tất cả CPU ARM được Linux hỗ trợ).
Mục đích của địa chỉ 0xffff0fe8 dường như để được rằng bạn có thể sử dụng những 4-byte thay vì sử dụng lắp ráp trên trực tiếp với (rX
== r0
) như thể nó là khác nhau đối với một số máy ở đâu đó.
Tùy thuộc vào loại CPU. Có một số helper in the vector page @0xffff0fe0 in entry-armv.S; nó đang trong quá trình cấu trúc/thread nếu phần cứng không hỗ trợ nó. Tài liệu là trong kernel_user_helpers.txt
dụ Cách sử dụng:
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);
}
Bạn làm một syscall để thiết lập các công cụ TLS. clone
là một cách để thiết lập ngữ cảnh luồng. thread_info giữ tất cả đăng ký cho một chủ đề; nó có thể chia sẻ một mm (chế độ quản lý bộ nhớ hoặc bộ nhớ xử lý) với task_struct
khác. Tức là, thread_info có một tp_value
cho mỗi chuỗi được tạo.
Here is a dicussion việc triển khai ARM. ELF/nptl/glibc và Linux kernel đều tham gia (và/hoặc các thuật ngữ tìm kiếm để điều tra thêm). Các syscall cho get_tls()
có lẽ là quá đắt và đường chính hiện tại có một helper trang vector (ánh xạ bởi tất cả các chủ đề/quy trình).
Một số nguồn glibc, tls-macros.h, tlsdesc.c vv Nhiều khả năng một câu trả lời đầy đủ/ngắn gọn sẽ phụ thuộc vào phiên bản của,
- CPU ARM của bạn.
- Nhân Linux của bạn.
- Glibc của bạn.
- Trình biên dịch của bạn (và cờ!).
Nguồn
2015-04-23 15:14:42
Tôi sẽ thực hiện một số thao tác tháo rời (http://goo.gl/TPiQCX) rồi sử dụng chúng để 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-electrons.com/source/arch/arm/include/asm/tls.h – auselen
Có thể cho rằng một bản sao của lưu lượng truy cập http: // stackoverflow.com/questions/12878698/what-are-the-real-elf-tls-abi-yêu cầu-cho-mỗi-cpu-arch, nhưng mà không có một câu trả lời đúng. – unixsmurf
@unixsmurf Tôi nghĩ câu trả lời của R đối với câu hỏi của anh ấy và làm cách nào để có được 'đăng ký chủ đề' trong ARM-Linux trả lời câu hỏi này? –