NOMBRE¶
arch_prctl - Fija el estado de un hilo para una arquitectura específica.
SINOPSIS¶
#include <asm/prctl.h>
#include <sys/prctl.h>
int arch_prctl(int code, unsigned long addr)
DESCRIPCIÓN¶
La función
arch_prctl fija el estado de un hilo o proceso para una
arquitectura específica.
code escoge una subfunción y le pasa
el argumento
addr.
Las subfunciones para la arquitectura x86-64 son:
- ARCH_SET_FS
- Establece la base de 64 bits para el registro FS a
addr.
- ARCH_GET_FS
- Devuelve el valor de base de 64 bits para el registro FS
del hilo actual en la variable unsigned long apuntada por el
parámetro address
- ARCH_SET_GS
- Establece la base de 64 bits para el registro GS a
addr.
- ARCH_GET_GS
- Devuelve el valor de base 64 bits para el registro GS del
hilo actual en la variable unsigned long apuntada por el
parámetro address.
OBSERVACIONES¶
En la actualidad
arch_prctl es soportada solamente por la plataforma
Linux/x86-64 para programas de 64 bits.
La base de 64 bits cambia cuando se carga un nuevo selector de segmento de 32
bits.
ARCH_SET_GS está deshabilitado en algunos núcleos.
Los cambios de contexto para las bases de segmento de 64 bits son bastante
costosos. Una alternativa más rápida sería fijar una base de 32
bits usando un selector de segmento configurando un LDT con
modify_ldt(2) o usando la llamada al sistema
set_thread_area(2)
en un núcleo 2.5.
arch_prctl solamente se necesita cuando se
quieren establecer bases mayores de 4GB. La memoria en los primeros 2GB del
espacio de direcciones puede ser asignada usando
mmap(2) con la
opción
MAP_32BIT.
No existe el prototipo de
arch_prctl en glibc 2.2. Es tarea del
programador declararlo por sí mismo. Este inconveniente será
subsanado en versiones futuras de glibc.
FS puede estar ya usado por la biblioteca de hilos.
ERRORES¶
- EINVAL
- code no es un subcomando válido.
- EPERM
- addr está fuera del espacio de
direcciones.
- EFAULT
- addr apunta a una dirección no asignada o que
está fuera del espacio de direcciones del proceso.
AUTOR¶
Página de manual escrita por Andi Kleen.
arch_prctl es una extensión de Linux/x86-64 y no debería
emplearse en programas que se pretenden que sean portables.
VÉASE TAMBIÉN¶
mmap(2),
modify_ldt(2),
prctl(2),
set_thread_area(2)
Manual del Programador de AMD X86-64