Software Capability Address Space Restriction Processing
64-bit objects that are identified with the SF1_SUNW_ADDR32
software capabilities flag can contain optimized code that requires a 32-bit address space. 64-bit objects that are identified in this manner can interoperate with any other 64-bit objects whether they are identified with the SF1_SUNW_ADDR32
flag or not. An occurrence of the SF1_SUNW_ADDR32
flag within a 64-bit input relocatable object is propagated to the CA_SUNW_SF_1
value that is created for the output file being created by the link-editor.
The existence of the SF1_SUNW_ADDR32
flag within a 64-bit executable ensures that the associated process is restricted to the lower 32-bit address space. This restricted address space includes the process stack and all process dependencies. Within such a process, all objects, whether they are identified with the SF1_SUNW_ADDR32
flag or not, are loaded within the restricted 32-bit address space.
64-bit shared objects can contain the SF1_SUNW_ADDR32
flag. However, the restricted address space requirement can only be established by a 64-bit executable containing the SF1_SUNW_ADDR32
flag. Therefore, a 64-bit SF1_SUNW_ADDR32
shared object must be a dependency of a 64-bit SF1_SUNW_ADDR32
executable.
A 64-bit SF1_SUNW_ADDR32
shared object that is encountered by the link-editor when building an unrestricted 64-bit executable results in a warning.
$ cc -m64 -o main main.c -lfoo
ld: warning: file libfoo.so: section .SUNW_cap: software capability ADDR32: \
requires executable be built with ADDR32 capability
A 64-bit SF1_SUNW_ADDR32
shared object that is encountered at runtime by a process that is created from an unrestricted 64-bit executable, results in a fatal error.
$ ldd main libfoo.so => ./libfoo.so - software capability unsupported: 0x4 [ ADDR32 ] .... $ main ld.so.1: main: fatal: ./libfoo.so: software capability unsupported: 0x4 [ ADDR32 ]
An executable can be seeded with the SF1_SUNW_ADDR32
using a mapfile
.
$ cat mapfile $mapfile_version 2 CAPABILITY { SF += ADDR32; }; $ cc -m64 -o main main.c -Mmapfile -lfoo $ elfdump -H main Object Capabilities: index tag value [0] CA_SUNW_SF_1 0x4 [ SF1_SUNW_ADDR32 ]