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 Capabilities Section: .SUNW_cap Object Capabilities: index tag value [0] CA_SUNW_SF_1 0x4 [ SF1_SUNW_ADDR32 ] |