- SEE ALSO
- COPYRIGHT AND LICENSE
Linux::Personality - Perl interface to the personality(2) Linux system call.
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);
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.
None by default.
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
man 2 personality /usr/include/sys/personality.h
<firstname.lastname@example.org> for having the problem in the first place and digging the according solution.
<email@example.com> for the usual Perl low-level support.
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.