.Dd Apr 14, 2008 .Dt REEXEC_TO_MATCH_KERNEL 3 .Os "Mac OS X" .Sh NAME .Nm reexec_to_match_kernel .Nd Re-exec the current binary to match the ABI of the running kernel .Sh LIBRARY .Lb libutil .Sh SYNOPSIS .In libutil.h .Ft int .Fo reexec_to_match_kernel .Fa "void" .Fc .Ft int .Fo reexec_to_match_lp64ness .Fa "bool isLP64" .Fc .Sh DESCRIPTION The .Fn reexec_to_match_kernel function re-executes the current binary to match the ABI of the running kernel. That is, if the current kernel is a 64-bit Intel kernel, it will attempt to execute the 64-bit x86_64 userspace slice of the universal binary. The API intentionally does not take arguments because its use should be transparent to the program and to the user. .Pp The .Fn reexec_to_match_lp64ness is coarser-grained, and only attempts to match the word width that is requested. For example, if the current system defaults to executing the 64-bit x86_64 userspace slice, but the program should instead run in 32-bit i386 mode, this routine can be used. .Pp Both .Fn reexec_to_match_kernel and .Fn reexec_to_match_lp64ness can each be used exactly once in a program's lifetime. In certain circumstances, it may even be desirable to use one, and then the other. .Sh RETURN VALUES The .Fn reexec_to_match_kernel and .Fn reexec_to_match_lp64ness functions return 0 if re-execution was not required. It returns -1 and sets errno if there was an error performing the re-execution, for example if the binary is not universal, or does not contain a slice to match the running kernel's ABI. If the function succeeds, control never returns to the caller and the program starts from main() again.