From nobody Fri Apr 17 14:22:11 2026 X-Original-To: dev-commits-src-main@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 4fxxsb6f4Jz6ZsNm for ; Fri, 17 Apr 2026 14:22:11 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fxxsb3tqpz3K1P for ; Fri, 17 Apr 2026 14:22:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776435731; 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=MfpC7v1SPvmNT4oZqq9cDE9MXJQGmUouTSLGa+R+UWw=; b=L0vp6liDffJLJCaEu48RS3sGShafWns1ThCtIrd/ZbCU5+hs6W/2CpPdb2mGVwQ+f31Emc sDSCfqlMPsB4vr/PGNi1RLF/XqhF67ucvS/nCudSjK1ZWOQeGG1azk53Dam/ktqhLJtMaM MuSSrZ2eBJlrqmSZvFITKl0/RuSTfRp0AibWaC0oI61dyT5WgOLA4VOOsjvZGxnWA0WmSB MpCUFjfXMLOkAmRuw2CYXDhzRB9k6jAW7djTzGzvVXMrQTBzyQTBPIkWOuuQ7quleyilvI T79uRIPiLtuvEGNSN/8UVslTnqBpQPzgCCLA8g7qT9JKm6smijH9T4dv8gnAIA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776435731; a=rsa-sha256; cv=none; b=UvHPmAfHtaJWPzXPMthx9xEOwJ43itBral8au/FebTolvlT3PTNjK6jeUrmPM9XGdaPjUq ZxjBxd6iihtUiXIe47+64lyS7ThyT6Fr2fxmtP35lCGS5BVujexDfndJpwvN/VHHHtdFB6 /hFduu4S01sfNYCl3s4jw2P/PQtrU/H8pMK8zXAmg1QYMZkyzRfrBqUfrPTXI75t3xp0us YxW73AZbf2zMCD6lGnEdrc9ghvAC2JBKZOImHVoxKUJFzPHwZgZufVS9A/N2kMN+0ImuvR VRXzMwkfBpYHYyPTSHA85oNtJgnhz9V2nts8GLJK2kJuU4GmTGuS//x31jGNXw== 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=1776435731; 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=MfpC7v1SPvmNT4oZqq9cDE9MXJQGmUouTSLGa+R+UWw=; b=ToHSKU/+Zu1CySmMShkypbbKo4CeHY+udK+NIGrBKR0WoIZwloZ17JQ86fl8vM92yuQJTK cUItIs1avu/mp3s7f/FVIAQtDIyN1syG3zX55y6bED8vMCcFdYVp/cqprZxl5xbxCzeI0+ zb4CwmDvPnKUoTHZR/4TePYRAvXDscfWEiHL9QxNaKLOdANf0rx9wqxIZ6upKv/uBIt4m7 t5D1wZCMkRhS9QBhIEzc6k/uaGlAx0DjotwcqOo7ApAongqfdajZDaYz1tMPWmrJTGtvc8 Ne1iNe9+tl2TKuX+knVlKTbDeUsfB0kZ8hrJx3Ehf8xuq/A20KovikbgoKBI/g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fxxsb3VTszxTR for ; Fri, 17 Apr 2026 14:22:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 47fd5 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 17 Apr 2026 14:22:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Jessica Clarke Subject: git: ab1d659e78e4 - main - loader.efi: Defer efi_translate(e_entry) until after bi_load List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: ab1d659e78e454995b7c2b4566e035269b215e48 Auto-Submitted: auto-generated Date: Fri, 17 Apr 2026 14:22:11 +0000 Message-Id: <69e24213.47fd5.5e13e45e@gitrepo.freebsd.org> The branch main has been updated by jrtc27: URL: https://cgit.FreeBSD.org/src/commit/?id=ab1d659e78e454995b7c2b4566e035269b215e48 commit ab1d659e78e454995b7c2b4566e035269b215e48 Author: Jessica Clarke AuthorDate: 2026-04-17 14:20:12 +0000 Commit: Jessica Clarke CommitDate: 2026-04-17 14:20:12 +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 --- 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 50e94af05fd2..a33855397a5a 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 6b5181b54507..406be822a28c 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 64e522775471..900e8ca8ff62 100644 --- a/stand/efi/loader/arch/riscv/exec.c +++ b/stand/efi/loader/arch/riscv/exec.c @@ -85,9 +85,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); /* @@ -101,6 +98,8 @@ __elfN(exec)(struct preloaded_file *fp) return (error); } + entry = efi_translate(e->e_entry); + (*entry)((void *)modulep); panic("exec returned"); }