powerpc64: fix loader regression

After b4cb3fe0e3, loader started crashing on PowerPC64, with a
Program Exception (700) error. The problem was that archsw was
used before being initialized, with the new mount feature. This
change fixes the issue by initializing archsw earlier, before
setting currdev, that triggers the mount.

Reviewed by:		tsoome
MFC after:		1 month
X-MFC-With:		b4cb3fe0e3
Sponsored by:		Instituto de Pesquisas Eldorado (eldorado.org.br)
Differential Revision:	https://reviews.freebsd.org/D32027
This commit is contained in:
Leandro Lupori 2021-09-21 17:22:42 -03:00
parent bd84094a51
commit 680ca73945

View File

@ -137,6 +137,17 @@ main(int (*openfirm)(void *))
*/
cons_probe();
archsw.arch_getdev = ofw_getdev;
archsw.arch_copyin = ofw_copyin;
archsw.arch_copyout = ofw_copyout;
archsw.arch_readin = ofw_readin;
#ifdef CAS
setenv("cas", "1", 0);
archsw.arch_autoload = ppc64_autoload;
#else
archsw.arch_autoload = ofw_autoload;
#endif
/* Set up currdev variable to have hooks in place. */
env_setenv("currdev", EV_VOLATILE, "", ofw_setcurrdev, env_nounset);
@ -183,17 +194,6 @@ main(int (*openfirm)(void *))
if (!(mfmsr() & PSL_DR))
setenv("usefdt", "1", 1);
archsw.arch_getdev = ofw_getdev;
archsw.arch_copyin = ofw_copyin;
archsw.arch_copyout = ofw_copyout;
archsw.arch_readin = ofw_readin;
#ifdef CAS
setenv("cas", "1", 0);
archsw.arch_autoload = ppc64_autoload;
#else
archsw.arch_autoload = ofw_autoload;
#endif
interact(); /* doesn't return */
OF_exit();