.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2003 Free Software Foundation, Inc. .\" Copyright (C) 2015 Andrew Lutomirski .\" Author: Kent Yoder .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH set_thread_area 2 "2 mai 2024" "Pagini de manual de Linux 6.9.1" .SH NUME get_thread_area, set_thread_area \- manipulează informațiile de stocare locală a firelor de execuție .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH SINOPSIS .nf \fB#include \fP /* Definirea constantelor \fBSYS_*\fP */ \fB#include \fP .P \fB#if defined __i386__ || defined __x86_64__\fP \fB# include \fP /* Definirea structurii \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 \fINotă\fP: Nu există nicio funcție învăluitoare (wrapper) glibc pentru aceste apeluri de sistem astfel că este necesară utilizarea a \fBsyscall\fP(2). .SH DESCRIERE Aceste apeluri oferă suport specific arhitecturii pentru o implementare a memoriei locale a firelor de execuție. În prezent, \fBset_thread_area\fP() este disponibil pe m68k, MIPS, C\-SKY și x86 (ambele variante pe 32 și 64 de biți); \fBget_thread_area\fP() este disponibil pe m68k și x86. .P Pe m68k, MIPS și C\-SKY, \fBset_thread_area\fP() permite stocarea unui indicator arbitrar (furnizat în argumentul \fBtp\fP pe m68k și în argumentul \fBaddr\fP pe MIPS și C\-SKY) în structura de date a nucleului asociată cu firul de execuție apelant; acest indicator poate fi recuperat ulterior folosind \fBget_thread_area\fP() (a se vedea, de asemenea, secțiunea NOTE pentru informații privind obținerea indicatorului de fir de execuție pe MIPS). .P Pe x86, Linux dedică trei intrări în GDT („Global Descriptor Table”, Tabelul de descriptori globali) pentru stocarea locală a firelor de execuție. Pentru mai multe informații despre GDT, consultați „Intel Software Developer's Manual” sau „AMD Architecture Programming Manual”. .P Ambele apeluri de sistem primesc un argument care este un indicator la o structură de tipul următor: .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() citește intrarea GDT indicată de \fIu_info\->entry_number\fP și completează restul câmpurilor din \fIu_info\fP. .P \fBset_thread_area\fP() stabilește o intrare TLS în GDT. .P Intrarea din matricea TLS definită de \fBset_thread_area\fP() corespunde valorii lui \fIu_info\->entry_number\fP (u_info\->numărul\-intrării) transmisă de utilizator. În cazul în care această valoare este în limite, \fBset_thread_area\fP() scrie descriptorul TLS indicat de \fIu_info\fP în matricea TLS a firului. .P Atunci când \fBset_thread_area\fP() primește un \fIentry_number\fP de \-1, caută o intrare TLS liberă. În cazul în care \fBset_thread_area\fP() găsește o intrare TLS liberă, valoarea \fIu_info\->entry_number\fP este definită la returnare pentru a arăta ce intrare a fost modificată. .P Un \fIuser_desc\fP este considerat „gol” dacă \fIread_exec_only\fP și \fIseg_not_present\fP sunt stabilite la 1 și toate celelalte câmpuri sunt 0. Dacă un descriptor „gol” este transmis la \fBset_thread_area\fP(), intrarea TLS corespunzătoare va fi ștearsă. A se vedea secțiunea ERORI pentru detalii suplimentare. .P Începând cu Linux 3.19, \fBset_thread_area\fP() nu poate fi utilizat pentru a scrie segmente neprezente, segmente pe 16 biți sau segmente de cod, deși ștergerea unui segment este în continuare acceptată. .SH "VALOAREA RETURNATĂ" Pe x86, aceste apeluri de sistem returnează 0 în caz de succes și \-1 în caz de eșec, cu \fIerrno\fP configurată pentru a indica eroarea. .P Pe C\-SKY, MIPS și m68k, \fBset_thread_area\fP() returnează întotdeauna 0. Pe m68k, \fBget_thread_area\fP() returnează valoarea indicatorului de zonă a firului (stabilită anterior prin \fBset_thread_area\fP()). .SH ERORI\-IEȘIRE .TP \fBEFAULT\fP \fIu_info\fP este un indicator nevalid. .TP \fBEINVAL\fP \fIu_info\->entry_number\fP este în afara limitelor. .TP \fBENOSYS\fP \fBget_thread_area\fP() sau \fBset_thread_area\fP() a fost invocat ca un apel de sistem pe 64 de biți. .TP \fBESRCH\fP (\fBset_thread_area\fP()) Nu a putut fi localizată o intrare TLS liberă. .SH STANDARDE Linux. .SH ISTORIC .TP \fBset_thread_area\fP() Linux 2.5.29. .TP \fBget_thread_area\fP() Linux 2.5.32. .SH NOTE Aceste apeluri de sistem sunt, în general, destinate a fi utilizate numai de bibliotecile de fire de execuție „threading”. .P \fBarch_prctl\fP(2) poate interfera cu \fBset_thread_area\fP() pe x86. Consultați \fBarch_prctl\fP(2) pentru mai multe detalii. În mod normal, acest lucru nu reprezintă o problemă, deoarece \fBarch_prctl\fP(2) este utilizat în mod normal numai de programele pe 64 de biți. .P Pe MIPS, valoarea curentă a indicatorului zonei firului de execuție poate fi obținută cu ajutorul instrucțiunii: .P .in +4n .EX rdhwr dest, $29 .EE .in .P Această instrucțiune este capturează și este gestionată de către nucleu. .SH ERORI .\" commit e30ab185c490e9a9381385529e0fd32f0a399495 Pe nucleele pe 64 de biți înainte de Linux 3.19, unul dintre biții de umplutură din \fIuser_desc\fP, dacă era definit, ar fi împiedicat ca descriptorul să fie considerat gol (a se vedea \fBmodify_ldt\fP(2)). Ca urmare, singura modalitate fiabilă de a șterge o intrare TLS este de a utiliza \fBmemset\fP(3) pentru a aduce la zero întreaga structură \fIuser_desc\fP, inclusiv biții de umplutură, și apoi de a defini biții \fIread_exec_only\fP și \fIseg_not_present\fP. Pe Linux 3.19, un \fIuser_desc\fP format în întregime din zerouri, cu excepția lui \fIentry_number\fP, va fi, de asemenea, interpretat ca o cerere de ștergere a unei intrări TLS, dar acest lucru s\-a comportat diferit pe nucleele mai vechi. .P Înainte de Linux 3.19, registrele segmentelor DS și ES nu trebuie să facă referire la intrările TLS. .SH "CONSULTAȚI ȘI" \fBarch_prctl\fP(2), \fBmodify_ldt\fP(2), \fBptrace\fP(2) (\fBPTRACE_GET_THREAD_AREA\fP și \fBPTRACE_SET_THREAD_AREA\fP) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .