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

(cherry picked from commit 680ca73945)
This commit is contained in:
Leandro Lupori 2021-09-21 17:22:42 -03:00 committed by Alfredo Dal'Ava Junior
parent 543157870d
commit ed726c3e34

View File

@ -168,6 +168,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);
@ -214,17 +225,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();