From nobody Thu Apr 30 17:43:06 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4g61jQ4gPgz6bvnD for ; Thu, 30 Apr 2026 17:43:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4g61jQ3wvhz3l20 for ; Thu, 30 Apr 2026 17:43:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777570986; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PrK194CaGlh1jyevPOqndwSgmFTeJHs5fQkgbd8NkRY=; b=OyyHOiHc/2yPSZu82k2kfl9mjTg4i3XaUJZFVf2qHtAXQtIl95wfejmll4uiKXFs/EtgsY GeFucqmcCNx7bS8grP2NkoAj3Hxk0/k1lZUm0H2E67XSG84dO0FOjU81rAGLX86L3MUPdv WCkNGaj/EPCG6SJ8O9kdZJJ5UrXE88NO8PwihUYP4knnZEIlZ6o92rWIDf4ztsxcl7/pC5 9Rptdw+IwSnFQpy0xnrNIfxFq2zuEcsB9S7X8zQnG5JJDc70bau9g7Aqd55Ld83MhRNseh 5YeQ/kdIT9a81+J5m2FqM2jMQKnNEbbKumfD5JWs4F6YKKlTODJuZ5NvDJcIcg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777570986; a=rsa-sha256; cv=none; b=b5ER210wI1ZpUCP3r3mBQig6f+ict/ZuD470jAMM+zacgX0WQKqHBDIhU0d/ul7Q8Z8Xwu KyEfBgAcJ7HJw0/KqZUPEcNdVCFRMSyuyT8riLt1g90gW4bPUIWtWnV+BR8MMPcoJqYfo5 0z4n/uYAK2hrMt/xxEACuLoClqDHRP0Gf/RlLczafV+JImQXwvsYA/FtHT/DU0197OSx5R fAGg5SyT0y9dnSbJu4rVjqGngxvQvfWMugybk5TzsAnwPG4Mv+Bb+2lUvSLrCeXxRDME1O ow5ZAbcscozNX4OVLasj8c7D4RVTl8pNOGBMBdHhPxiqmcIFm29QECYOklzRMQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777570986; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PrK194CaGlh1jyevPOqndwSgmFTeJHs5fQkgbd8NkRY=; b=RVUavEGthIEzOinWHWNze5q3amRK+i1QA0gu4vYbYzFrHxI9WlQIkc8z+0ug8IAEeRHog6 VfPooaHfACXpvD/dPtK9NT4Xuz4bzE9CKrbVkm28pavNvJYHcQKEEY5lrYvR0fSIg0aP4L MR7zWPLJG7rFN1FCBlhw4MTJM4UxqqTKrrxCF0Ono+mGXVcPQqo+B1Q0BaUALPOE142Ww4 jerojZ1laWI9af7lmOS0jmfrQ6UR407Wru84Q9BnDfCenAECCE/ppZSAbqf6RMRXt9mAIW uX3WBB+5zghc3/XtAnk3OgSYP86zciNMIHHcSO9kYYdqD45Sfvhy6ogGIKWmnw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g61jQ3Vjcz6gP for ; Thu, 30 Apr 2026 17:43:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 303d7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 30 Apr 2026 17:43:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Jessica Clarke Subject: git: bf7eaff8df4f - stable/15 - loader.efi: Defer efi_translate(e_entry) until after bi_load List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jrtc27 X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: bf7eaff8df4fafcdc3e45127a7c690f170f1edb7 Auto-Submitted: auto-generated Date: Thu, 30 Apr 2026 17:43:06 +0000 Message-Id: <69f394aa.303d7.b9d1de8@gitrepo.freebsd.org> The branch stable/15 has been updated by jrtc27: URL: https://cgit.FreeBSD.org/src/commit/?id=bf7eaff8df4fafcdc3e45127a7c690f170f1edb7 commit bf7eaff8df4fafcdc3e45127a7c690f170f1edb7 Author: Jessica Clarke AuthorDate: 2026-04-17 14:20:12 +0000 Commit: Jessica Clarke CommitDate: 2026-04-30 17:42:29 +0000 loader.efi: Defer efi_translate(e_entry) until after bi_load bi_load itself loads various things into the staging area which can cause it to grow, which may result in the staging area moving, including the kernel. Therefore the address we get for the kernel entry point prior to bi_load may not be correct afterwards when we actually call it, and so we must defer the translation. On arm and riscv (but not arm64, which predates both of them in loader.efi and did not gain a copy of arm's added printf when arm support was added) we also printf this entry point to the console, which we can no longer do since bi_load calls ExitBootServices, so remove this printf that, in practice, seems to not be so useful, given nobody ever felt the need to add it to arm64. If anyone really feels this is an important printf to have then bi_load will need to be split so we can call printf after all the loading and potential reallocation of the staging area, but before ExitBootServices is called. We may also want to make this code more uniform and shared between the three architectures here, since there isn't much architecture-specific about this (and something like the RISC-V boot hart protocol could easily be made an MD hook). Reviewed by: imp Fixes: 0cafabf97fae ("Add support for arm64 to loader.efi and boot1.efi") Fixes: ea7796a9ae6b ("EFI: don't call printf after ExitBootServices, since it uses Boot Services") Fixes: 2192efc03bc4 ("RISC-V boot1.efi and loader.efi support") MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D56431 (cherry picked from commit ab1d659e78e454995b7c2b4566e035269b215e48) --- stand/efi/loader/arch/arm/exec.c | 5 ++--- stand/efi/loader/arch/arm64/exec.c | 3 ++- stand/efi/loader/arch/riscv/exec.c | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/stand/efi/loader/arch/arm/exec.c b/stand/efi/loader/arch/arm/exec.c index 3963b6c0104b..71516569763d 100644 --- a/stand/efi/loader/arch/arm/exec.c +++ b/stand/efi/loader/arch/arm/exec.c @@ -69,9 +69,6 @@ __elfN(arm_exec)(struct preloaded_file *fp) efi_time_fini(); - entry = efi_translate(e->e_entry); - - printf("Kernel entry at %p...\n", entry); printf("Kernel args: %s\n", fp->f_args); /* @@ -85,6 +82,8 @@ __elfN(arm_exec)(struct preloaded_file *fp) return (error); } + entry = efi_translate(e->e_entry); + (*entry)((void *)modulep); panic("exec returned"); } diff --git a/stand/efi/loader/arch/arm64/exec.c b/stand/efi/loader/arch/arm64/exec.c index 89e2ad7521a8..d0a5e26c8b3b 100644 --- a/stand/efi/loader/arch/arm64/exec.c +++ b/stand/efi/loader/arch/arm64/exec.c @@ -67,7 +67,6 @@ elf64_exec(struct preloaded_file *fp) return(EFTYPE); ehdr = (Elf_Ehdr *)&(md->md_data); - entry = efi_translate(ehdr->e_entry); /* * we have to cleanup here because net_cleanup() doesn't work after @@ -82,6 +81,8 @@ elf64_exec(struct preloaded_file *fp) return (err); } + entry = efi_translate(ehdr->e_entry); + /* Clean D-cache under kernel area and invalidate whole I-cache */ clean_addr = (vm_offset_t)efi_translate(fp->f_addr); clean_size = (vm_offset_t)efi_translate(kernendp) - clean_addr; diff --git a/stand/efi/loader/arch/riscv/exec.c b/stand/efi/loader/arch/riscv/exec.c index a53fbd9442b0..5689d41c54aa 100644 --- a/stand/efi/loader/arch/riscv/exec.c +++ b/stand/efi/loader/arch/riscv/exec.c @@ -81,9 +81,6 @@ __elfN(exec)(struct preloaded_file *fp) efi_time_fini(); - entry = efi_translate(e->e_entry); - - printf("Kernel entry at %p...\n", entry); printf("Kernel args: %s\n", fp->f_args); /* @@ -97,6 +94,8 @@ __elfN(exec)(struct preloaded_file *fp) return (error); } + entry = efi_translate(e->e_entry); + (*entry)((void *)modulep); panic("exec returned"); }