Index: head/sys/powerpc/powerpc/elf_common.c =================================================================== --- head/sys/powerpc/powerpc/elf_common.c +++ head/sys/powerpc/powerpc/elf_common.c @@ -36,7 +36,22 @@ Elf_Auxinfo *argarray, *pos; int error; - if (imgp->proc->p_osrel >= P_OSREL_POWERPC_NEW_AUX_ARGS) + /* + * XXX If we can't find image's OSREL, assume it uses the new auxv + * format. + * + * This is specially important for rtld, that is not tagged. Using + * direct exec mode with new (ELFv2) binaries that expect the new auxv + * format would result in crashes otherwise. + * + * Unfortunately, this may break direct exec'ing old binaries, + * but it seems better to correctly support new binaries by default, + * considering the transition to ELFv2 happened quite some time + * ago. If needed, a sysctl may be added to allow old auxv format to + * be used when OSREL is not found. + */ + if (imgp->proc->p_osrel >= P_OSREL_POWERPC_NEW_AUX_ARGS || + imgp->proc->p_osrel == 0) return (__elfN(freebsd_copyout_auxargs)(imgp, base)); args = (Elf_Auxargs *)imgp->auxargs;