arch_prctl(2) System Calls Manual arch_prctl(2) NUME arch_prctl - stabilete starea firului de execuie specifica arhitecturii BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include /* Definiia constantelor ARCH_* */ #include /* Definiia constantelor SYS_* */ #include int syscall(SYS_arch_prctl, int op, unsigned long addr); int syscall(SYS_arch_prctl, int op, unsigned long *addr); Nota: glibc nu ofera nici o funcie de invaluire pentru arch_prctl(), fiind necesara utilizarea syscall(2). DESCRIERE arch_prctl() stabilete starea procesului sau a firului de execuie specifica arhitecturii. op selecteaza o subfuncie i ii transmite argumentul addr; addr este interpretat fie ca un unsigned long pentru operaiile de ,,set" (stabilire), fie ca un unsigned long *, pentru operaiile de ,,get" (obinere). Subfunciile atat pentru x86 cat i pentru x86-64 sunt: ARCH_SET_CPUID (incepand cu Linux 4.12) Activeaza (addr != 0) sau dezactiveaza (addr == 0) instruciunea cpuid pentru firul apelant. Instruciunea este activata in mod implicit. Daca este dezactivata, orice execuie a unei instruciuni cpuid va genera in schimb un semnal SIGSEGV. Aceasta caracteristica poate fi utilizata pentru a emula rezultatele cpuid care difera de ceea ce ar fi produs hardware-ul subiacent (de exemplu, intr-un mediu de paravirtualizare). Valoarea parametrului ARCH_SET_CPUID este pastrata in fork(2) i clone(2), dar este restabilita la valoarea implicita (adica cpuid activat) in execve(2). ARCH_GET_CPUID (incepand cu Linux 4.12) Returneaza valoarea fanionului manipulat de ARCH_SET_CPUID ca rezultat al apelului de sistem (1 pentru activat, 0 pentru dezactivat). Parametrul addr este ignorat. Subfunciile numai pentru x86-64 sunt: ARCH_SET_FS Stabilete baza pe 64 de bii pentru registrul FS la addr. ARCH_GET_FS Returneaza valoarea de baza pe 64 de bii pentru registrul FS al firului apelant in unsigned long indicat de addr. ARCH_SET_GS Stabilete baza pe 64 de bii pentru registrul GS la addr. ARCH_GET_GS Returneaza valoarea de baza pe 64 de bii pentru registrul GS al firului apelant in unsigned long indicat de addr. VALOAREA RETURNATA In caz de succes, arch_prctl() returneaza 0; in caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EFAULT addr indica o adresa nealocata sau se afla in afara spaiului de adrese al procesului. EINVAL op nu este o subcomanda valida. ENODEV A fost solicitat ARCH_SET_CPUID, dar hardware-ul subiacent nu accepta erorile CPUID. EPERM addr se afla in afara spaiului de adrese al procesului. STANDARDE Linux/x86-64. NOTE arch_prctl() este acceptat numai pe Linux/x86-64 pentru programele pe 64 de bii in prezent. Baza pe 64 de bii se modifica atunci cand se incarca un nou selector de segmente pe 32 de bii. ARCH_SET_GS este dezactivat in unele nuclee. Comutarile de context pentru bazele de segmente pe 64 de bii sunt destul de costisitoare. Ca o optimizare, daca se utilizeaza o adresa de baza TLS pe 32 de bii, arch_prctl() poate utiliza o intrare TLS reala ca i cum ar fi fost apelat set_thread_area(2), in loc sa manipuleze direct registrul bazei segmentului. Memoria din primii 2 Go de spaiu de adresare poate fi alocata prin utilizarea mmap(2) cu fanionul MAP_32BIT. Din cauza optimizarii menionate mai sus, utilizarea arch_prctl() i set_thread_area(2) in acelai fir de execuie este periculoasa, deoarece acestea pot suprascrie intrarile TLS ale celuilalt. Este posibil ca FS sa fie deja utilizat de biblioteca de fire de execuie. Programele care utilizeaza direct ARCH_SET_FS sunt foarte susceptibile de a se bloca. CONSULTAI I mmap(2), modify_ldt(2), prctl(2), set_thread_area(2) AMD X86-64 Programmer's manual TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 arch_prctl(2)