.\" -*- coding: UTF-8 -*- .\" Copyright 2003, Free Software Foundation, Inc. .\" Copyright 2015, Andrew Lutomirski .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH set_thread_area 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم get_thread_area, set_thread_area \- معالجة معلومات التخزين المحلي للخيط .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP /* تعريف ثوابت \fBSYS_*\fP */ \fB#include \fP .P \fB#if defined __i386__ || defined __x86_64__\fP \fB# include \fP /* تعريف \fBstruct user_desc\fP */ .P \fBint syscall(SYS_get_thread_area, struct user_desc *\fP\fIu_info\fP\fB);\fP \fBint syscall(SYS_set_thread_area, struct user_desc *\fP\fIu_info\fP\fB);\fP .P \fB#elif defined __m68k__\fP .P \fBint syscall(SYS_get_thread_area);\fP \fBint syscall(SYS_set_thread_area, unsigned long \fP\fItp\fP\fB);\fP .P \fB#elif defined __mips__ || defined __csky__\fP .P \fBint syscall(SYS_set_thread_area, unsigned long \fP\fIaddr\fP\fB);\fP .P \fB#endif\fP .fi .P \fIملاحظة\fP: لا توفر glibc أغلفة لنداءات النظام هذه، مما يستلزم استخدام \fBsyscall\fP(2). .SH الوصف توفر هذه الاستدعاءات دعماً خاصاً بالمعمارية لتنفيذ تخزين محلي للخيط. حالياً، يتوفر \fBset_thread_area\fP() على m68k وMIPS وC\-SKY وx86 (كلا النوعين 32\-bit و64\-bit)؛ ويتوفر \fBget_thread_area\fP() على m68k وx86. .P على m68k وMIPS وC\-SKY، يسمح \fBset_thread_area\fP() بتخزين مؤشر عشوائي (مقدم في وسيط \fBtp\fP على m68k وفي وسيط \fBaddr\fP على MIPS وC\-SKY) في بنية بيانات النواة المرتبطة بالخيط المستدعي؛ يمكن لاحقًا استرداد هذا المؤشر باستخدام \fBget_thread_area\fP() (انظر أيضًا NOTES لمعلومات حول الحصول على مؤشر الخيط على MIPS). .P على x86، يخصص Linux ثلاثة مداخل لجدول الواصف العام (GDT) للتخزين المحلي للخيط. لمزيد من المعلومات حول GDT، انظر دليل مطور برامج Intel أو دليل برمجة معمارية AMD. .P يأخذ كلا استدعائي النظام وسيطاً هو مؤشر لبنية من النوع التالي: .P .in +4n .EX struct user_desc { unsigned int entry_number; unsigned int base_addr; unsigned int limit; unsigned int seg_32bit:1; unsigned int contents:2; unsigned int read_exec_only:1; unsigned int limit_in_pages:1; unsigned int seg_not_present:1; unsigned int useable:1; #ifdef __x86_64__ unsigned int lm:1; #endif }; .EE .in .P يقرأ \fBget_thread_area\fP() مدخل GDT المشار إليه بواسطة \fIu_info\->entry_number\fP ويملأ باقي الحقول في \fIu_info\fP. .P يضبط \fBset_thread_area\fP() مدخل TLS في GDT. .P يتوافق مدخل مصفوفة TLS المضبوط بواسطة \fBset_thread_area\fP() مع قيمة \fIu_info\->entry_number\fP التي مررها المستخدم. إذا كانت هذه القيمة ضمن الحدود، يكتب \fBset_thread_area\fP() واصف TLS المشار إليه بواسطة \fIu_info\fP في مصفوفة TLS للخيط. .P عند تمرير \fIentry_number\fP بقيمة \-1 إلى \fBset_thread_area\fP()، يبحث عن مدخل TLS حر. إذا وجد \fBset_thread_area\fP() مدخل TLS حر، تضبط قيمة \fIu_info\->entry_number\fP عند العودة لإظهار أي مدخل تم تغييره. .P يعتبر \fIuser_desc\fP "فارغاً" إذا ضبط \fIread_exec_only\fP و\fIseg_not_present\fP إلى 1 وكانت جميع الحقول الأخرى 0. إذا مرر واصف "فارغ" إلى \fBset_thread_area\fP()، سيمسح مدخل TLS المقابل. انظر BUGS للتفاصيل الإضافية. .P منذ Linux 3.19، لا يمكن استخدام \fBset_thread_area\fP() لكتابة مقاطع غير موجودة أو مقاطع 16\-bit أو مقاطع تعليمات برمجية، على الرغم من أن مسح مقطع لا يزال مقبولاً. .SH "قيمة الإرجاع" على x86، يعيد استدعاءا النظام هذان 0 عند النجاح، و\-1 عند الفشل، مع ضبط \fIerrno\fP للإشارة إلى الخطأ. .P على C\-SKY وMIPS وm68k، يعيد \fBset_thread_area\fP() دائماً 0. على m68k، يعيد \fBget_thread_area\fP() قيمة مؤشر منطقة الخيط (المضبوطة سابقاً عبر \fBset_thread_area\fP()). .SH الأخطاء .TP \fBEFAULT\fP \fIu_info\fP هو مؤشر غير صالح. .TP \fBEINVAL\fP \fIu_info\->entry_number\fP خارج الحدود. .TP \fBENOSYS\fP تم استدعاء \fBget_thread_area\fP() أو \fBset_thread_area\fP() كاستدعاء نظام 64\-bit. .TP \fBESRCH\fP (\fBset_thread_area\fP()) تعذر تحديد موقع مدخل TLS حر. .SH المعايير لينكس. .SH التاريخ .TP \fBset_thread_area\fP() Linux 2.5.29. .TP \fBget_thread_area\fP() Linux 2.5.32. .SH ملاحظات نداءات النظام هذه مخصصة بشكل عام للاستخدام فقط بواسطة مكتبات الخيوط. .P يمكن لـ \fBarch_prctl\fP(2) أن يتداخل مع \fBset_thread_area\fP() على x86. راجع \fBarch_prctl\fP(2) لمزيد من التفاصيل. هذه ليست مشكلة عادة، حيث أن \fBarch_prctl\fP(2) يُستخدم عادة فقط بواسطة برامج 64 بت. .P على MIPS، يمكن الحصول على القيمة الحالية لمؤشر منطقة الخيط باستخدام التعليمات: .P .in +4n .EX rdhwr dest, $29 .EE .in .P هذه التعليمات تسبب فخًا ويتم معالجتها بواسطة النواة. .SH العلل .\" commit e30ab185c490e9a9381385529e0fd32f0a399495 على نوى 64 بت قبل Linux 3.19، إذا تم تعيين أحد بتات الحشو في \fIuser_desc\fP، فإنه يمنع اعتبار الواصف فارغًا (انظر \fBmodify_ldt\fP(2)). نتيجة لذلك، الطريقة الوحيدة الموثوقة لمسح إدخال TLS هي استخدام \fBmemset\fP(3) لتحديد بنية \fIuser_desc\fP بأكملها بالأصفار، بما في ذلك بتات الحشو، ثم تعيين بتات \fIread_exec_only\fP و \fIseg_not_present\fP. على Linux 3.19، سيتم أيضًا تفسير \fIuser_desc\fP المكون بالكامل من الأصفار باستثناء \fIentry_number\fP كطلب لمسح إدخال TLS، لكن هذا تصرف بشكل مختلف على النوى الأقدم. .P قبل Linux 3.19، يجب ألا تشير سجلات المقطع DS و ES إلى إدخالات TLS. .SH "انظر أيضًا" \fBarch_prctl\fP(2)، \fBmodify_ldt\fP(2)، \fBptrace\fP(2) (\fBPTRACE_GET_THREAD_AREA\fP و \fBPTRACE_SET_THREAD_AREA\fP) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .