Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       arch_prctl - stabilește starea firului de execuție specifică arhitecturii

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <asm/prctl.h>        /* Definiția constantelor ARCH_* */
       #include <sys/syscall.h>      /* Definiția constantelor SYS_* */
       #include <unistd.h>

       int syscall(SYS_arch_prctl, int op, unsigned long addr);
       int syscall(SYS_arch_prctl, int op, unsigned long *addr);

       Notă:  glibc  nu  oferă  nici  o  funcție  de  învăluire  pentru  arch_prctl(), fiind necesară utilizarea
       syscall(2).

DESCRIERE

       arch_prctl() stabilește starea procesului sau a firului de execuție specifică arhitecturii. op selectează
       o subfuncție și îi transmite argumentul addr; addr este  interpretat  fie  ca  un  unsigned  long  pentru
       operațiile de „set” (stabilire), fie ca un unsigned long *, pentru operațiile de „get” (obținere).

       Subfuncțiile atât pentru x86 cât și pentru x86-64 sunt:

       ARCH_SET_CPUID (începând cu Linux 4.12)
              Activează  (addr  !=  0)  sau  dezactivează  (addr == 0) instrucțiunea cpuid pentru firul apelant.
              Instrucțiunea este activată în  mod  implicit.  Dacă  este  dezactivată,  orice  execuție  a  unei
              instrucțiuni  cpuid  va  genera  în  schimb  un  semnal  SIGSEGV.  Această caracteristică poate fi
              utilizată pentru a emula rezultatele cpuid care  diferă  de  ceea  ce  ar  fi  produs  hardware-ul
              subiacent (de exemplu, într-un mediu de paravirtualizare).

              Valoarea parametrului ARCH_SET_CPUID este păstrată în fork(2) și clone(2), dar este restabilită la
              valoarea implicită (adică cpuid activat) în execve(2).

       ARCH_GET_CPUID (începând cu Linux 4.12)
              Returnează  valoarea  fanionului  manipulat de ARCH_SET_CPUID ca rezultat al apelului de sistem (1
              pentru activat, 0 pentru dezactivat). Parametrul addr este ignorat.

       Subfuncțiile numai pentru x86-64 sunt:

       ARCH_SET_FS
              Stabilește baza pe 64 de biți pentru registrul FS la addr.

       ARCH_GET_FS
              Returnează valoarea de bază pe 64 de biți pentru registrul FS al firului apelant în unsigned  long
              indicat de addr.

       ARCH_SET_GS
              Stabilește baza pe 64 de biți pentru registrul GS la addr.

       ARCH_GET_GS
              Returnează  valoarea de bază pe 64 de biți pentru registrul GS al firului apelant în unsigned long
              indicat de addr.

VALOAREA RETURNATĂ

       În caz de succes, arch_prctl() returnează 0;  în  caz  de  eroare,  se  returnează  -1,  iar  errno  este
       configurată pentru a indica eroarea.

ERORI-IEȘIRE

       EFAULT addr indică o adresă nealocată sau se află în afara spațiului de adrese al procesului.

       EINVAL op nu este o subcomandă validă.

       ENODEV A fost solicitat ARCH_SET_CPUID, dar hardware-ul subiacent nu acceptă erorile CPUID.

       EPERM  addr se află în afara spațiului de adrese al procesului.

STANDARDE

       Linux/x86-64.

NOTE

       arch_prctl() este acceptat numai pe Linux/x86-64 pentru programele pe 64 de biți în prezent.

       Baza pe 64 de biți se modifică atunci când se încarcă un nou selector de segmente pe 32 de biți.

       ARCH_SET_GS este dezactivat în unele nuclee.

       Comutările  de  context  pentru  bazele  de  segmente  pe  64  de  biți sunt destul de costisitoare. Ca o
       optimizare, dacă se utilizează o adresă de bază TLS pe 32 de biți, arch_prctl() poate utiliza  o  intrare
       TLS  reală  ca  și  cum ar fi fost apelat set_thread_area(2), în loc să manipuleze direct registrul bazei
       segmentului. Memoria din primii 2 Go de spațiu de adresare poate fi alocată prin  utilizarea  mmap(2)  cu
       fanionul MAP_32BIT.

       Din cauza optimizării menționate mai sus, utilizarea arch_prctl() și set_thread_area(2) în același fir de
       execuție este periculoasă, deoarece acestea pot suprascrie intrările TLS ale celuilalt.

       Este  posibil  ca  FS  să fie deja utilizat de biblioteca de fire de execuție. Programele care utilizează
       direct ARCH_SET_FS sunt foarte susceptibile de a se bloca.

CONSULTAȚI ȘI

       mmap(2), modify_ldt(2), prctl(2), set_thread_area(2)

       AMD X86-64 Programmer's manual

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                      arch_prctl(2)