arch_prctl() is only supported on Linux/x86-64 for 64bit programs currently.
The 64bit base changes when a new 32bit segment selector is loaded.
ARCH_SET_GS is disabled in some kernels.
Context switches for 64bit segment bases are rather expensive. It may be a
faster alternative to set a 32bit base using a segment selector by setting up
an LDT with
modify_ldt(2)
or using the
set_thread_area(2)
system call in a 2.5 kernel.
arch_prctl() is only needed when you want to set bases that are larger than 4GB.
Memory in the first 2GB of address space can be allocated by using
mmap(2)
with the
MAP_32BIT flag.
As of version 2.3.5, glibc provides no prototype for
arch_prctl(). You have to declare it yourself for now.
This may be fixed in future glibc versions.
FS may be already used by the threading library.