isaexec(3C) is a 32-bit executable binary file that performs the wrapper function outlined in the shell script wrapper presented in the immediately preceding description, but with precise preservation of the argument list. The executable's full pathname is /usr/lib/isaexec, but it is not designed to be executed by that name. Rather, it can be copied or linked (hard link, not soft link) to the primary name of a program that exists in more than one version, selected using isalist(1).
For example, in a SPARC environment, the command truss(1) exists as three executable files:
The executables in the sparcv7 and sparcv9 subdirectories are the real truss(1) executables, 32-bit and 64-bit respectively. The wrapper file, /usr/bin/truss, is a hard link to /usr/lib/isaexec.
In the x86 environment, the command truss(1) exists as three executable files:
The isaexec(3C) wrapper determines its own fully resolved symlink-free path name using getexecname(3C), independent of its argv argument, gets the isalist(1) through sysinfo(SI_ISALIST, ...), and performs an exec(2) of the first executable file bearing its own name found in the resulting list of subdirectories of its own directory. It then passes the argument vector and environment vector unchanged. In this way, argv passed to the final program image appears as first specified, not as transformed into a full path name modified to contain the name of the subdirectory.
Because wrappers might exist, you need to be careful when moving executables to different locations. You might move the wrapper rather than the actual program.