NAME
Linux::Personality - Perl interface to the personality(2) Linux system call.
SYNOPSIS
Common usage:
use Linux::Personality qw/personality PER_LINUX32 /;
print `uname -m`; # x86_64
personality(PER_LINUX32);
print `uname -m`; # i686
Use flags for bugs emulation:
use Linux::Personality qw/personality
PER_LINUX32
ADDR_LIMIT_3GB
SHORT_INODE
MMAP_PAGE_ZERO /;
personality(PER_LINUX32 | ADDR_LIMIT_3GB | SHORT_INODE | MMAP_PAGE_ZERO);
DESCRIPTION
You can use this for instance when running 32bit compiles started from inside a Perl program in a 32bit chroot but running on a 64bit host kernel. Without hints the compile tools get confused and try do do 64bit in the 32bit environment.
It's somewhat comparable to the setarch
(also known as linux32
) utility. With personality
you can get similar effect inside a Perl program.
From "man 2 personality":
NAME
personality - set the process execution domain
SYNOPSIS
#include <sys/personality.h>
int personality(unsigned long persona);
DESCRIPTION
Linux supports different execution domains, or personalities,
for each process. Among other things, execution domains tell
Linux how to map signal numbers into signal actions. The
execution domain system allows Linux to provide limited
support for binaries compiled under other Unix-like operating
systems.
This function will return the current personality() when
persona equals 0xffffffff. Otherwise, it will make the
execution domain referenced by persona the new execution
domain of the calling process.
RETURN VALUE
On success, the previous persona is returned. On error, -1 is
returned, and errno is set appropriately.
ERRORS
EINVAL The kernel was unable to change the personality.
CONFORMING TO
personality() is Linux-specific and should not be used in
programs intended to be portable.
EXPORT
None by default.
Exportable functions
personality
Exportable constants
ADDR_LIMIT_32BIT
ADDR_LIMIT_3GB
ADDR_NO_RANDOMIZE
MMAP_PAGE_ZERO
PER_BSD
PER_HPUX
PER_IRIX32
PER_IRIX64
PER_IRIXN32
PER_ISCR4
PER_LINUX
PER_LINUX32
PER_LINUX32_3GB
PER_LINUX_32BIT
PER_MASK
PER_OSF4
PER_OSR5
PER_RISCOS
PER_SCOSVR3
PER_SOLARIS
PER_SUNOS
PER_SVR3
PER_SVR4
PER_UW7
PER_WYSEV386
PER_XENIX
SHORT_INODE
STICKY_TIMEOUTS
WHOLE_SECONDS
SEE ALSO
man 2 personality
/usr/include/sys/personality.h
AUTHOR
Steffen Schwigon, <ss5@renormalist.net>
CREDITS
Maik Hentsche <maik.hentsche@amd.com>
for having the problem in the first place and digging the according solution.
Florian Ragwitz <rafl@debian.org>
for the usual Perl low-level support.
COPYRIGHT AND LICENSE
Copyright (C) 2010 by Steffen Schwigon
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.