git: 680ca739458b - main - powerpc64: fix loader regression

Leandro Lupori luporl at FreeBSD.org
Tue Sep 21 20:29:34 UTC 2021


The branch main has been updated by luporl:

URL: https://cgit.FreeBSD.org/src/commit/?id=680ca739458ba8cba221ea74794c2cd9771c77f8

commit 680ca739458ba8cba221ea74794c2cd9771c77f8
Author:     Leandro Lupori <luporl at FreeBSD.org>
AuthorDate: 2021-09-21 20:22:42 +0000
Commit:     Leandro Lupori <luporl at FreeBSD.org>
CommitDate: 2021-09-21 20:22:42 +0000

    powerpc64: fix loader regression
    
    After b4cb3fe0e39a, 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:             b4cb3fe0e39a
    Sponsored by:           Instituto de Pesquisas Eldorado (eldorado.org.br)
    Differential Revision:  https://reviews.freebsd.org/D32027
---
 stand/powerpc/ofw/main.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/stand/powerpc/ofw/main.c b/stand/powerpc/ofw/main.c
index e705871796b1..7b1ec384b6bd 100644
--- a/stand/powerpc/ofw/main.c
+++ b/stand/powerpc/ofw/main.c
@@ -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();


More information about the dev-commits-src-all mailing list