Home
March 19, 2010 6:10:17 PM EST
home
back print
ARCH_PRCTL   (2) manpage
ARCH_PRCTL
2
2007-12-26
Linux
Linux Programmer's Manual
  • NAME
      arch_prctl - set architecture-specific thread state
  • SYNOPSIS
      
       #include <asm/prctl.h>
      
       #include <sys/prctl.h>
      
       int arch_prctl(int  code , unsigned long  addr );
        int arch_prctl(int  code , unsigned long * addr ); 
  • DESCRIPTION
      The
      arch_prctl ()
      function sets architecture-specific process or thread state.
      code
      selects a subfunction
      and passes argument
      addr
      to it;
      addr
      is interpreted as either an
      "unsigned long"
      for the "set" operations, or as an
      "unsigned long *" ,
      for the "get" operations.

      Sub functions for x86-64 are:
      ARCH_SET_FS
      Set the 64-bit base for the
      FS
      register to
      addr .
      ARCH_GET_FS
      Return the 64-bit base value for the
      FS
      register of the current thread in the
      unsigned long
      pointed to by
      addr .
      ARCH_SET_GS
      Set the 64-bit base for the
      GS
      register to
      addr .
      ARCH_GET_GS
      Return the 64-bit base value for the
      GS
      register of the current thread in the
      unsigned long
      pointed to by
      addr .
  • RETURN VALUE
      On success,
      arch_prctl ()
      returns 0; on error, -1 is returned, and
      errno
      is set to indicate the error.
  • ERRORS
      EFAULT
      addr
      points to an unmapped address or is outside the process address space.
      EINVAL
      code
      is not a valid subcommand.
      EPERM
      addr
      is outside the process address space.


  • CONFORMING TO
      arch_prctl ()
      is a Linux/x86-64 extension and should not be used in programs intended
      to be portable.
  • NOTES
      arch_prctl ()
      is only supported on Linux/x86-64 for 64-bit programs currently.

      The 64-bit base changes when a new 32-bit segment selector is loaded.

      ARCH_SET_GS is disabled in some kernels.

      Context switches for 64-bit segment bases are rather expensive.
      It may be a faster alternative to set a 32-bit base using a
      segment selector by setting up an LDT with
      modify_ldt(2)
      or using the
      set_thread_area(2)
      system call in kernel 2.5 or later.
      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.7, 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.
  • SEE ALSO
  • COLOPHON
      This page is part of release 3.19 of the Linux
      man-pages
      project.
      A description of the project,
      and information about reporting bugs,
      can be found at
      http://www.kernel.org/doc/man-pages/.


Current Users: 130 © 1999-2009 PenguinSoft. All trademarks and copyrights on this page are owned by their respective companies. Linux is a trademark of Linus Torvalds.