From nobody Sun Jun 22 03:58:10 2025 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 4bPy9b4DCFz5tCJp; Sun, 22 Jun 2025 03:58: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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bPy9b1j4Pz3gW5; Sun, 22 Jun 2025 03:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750564691; 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=30gddP+YESqHVhwPcAGU+IvK7Btxg0LE3WpJUybzMLI=; b=NhcC3YDYZVJV4gLyDFrhYWyJyjSMXzTuKSCRWMyyP+DUgpwJyXOxo8/Vm1970SqHTckZEc EYDo+Gmm/d9ZUlJXAWzZkHTvDR4Gu/I4Wtph0VQysL1z0TexVt/nJvETmJm5/rnCW3uOon 3UbAz+A5bB1CxXXUQXKDlJLdxMu+qXrgzqTtPD8n+9ppKh65kJ5JEvdlPxknGHVneha9O3 wBSBd7Nezr0gxxOTMeNGIl1ewNSM0hWWS3P7JVFPuQliGPF9NQ2nA/txJoJe/pGdE5NqRg A0zegIKUbNGQgRwGubotywvu2nmKGPEfgq51MEGHJhebyQobK6tEV/1s7WKZFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750564691; 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=30gddP+YESqHVhwPcAGU+IvK7Btxg0LE3WpJUybzMLI=; b=Rd/HUytIuZ1aWqE6vFIf4NAYX0skCHbJ83t3Z+x8nAHSIyMYAu97/ytFS1mdRm7zmYtNb1 3Kf8F4k2U+kvbkqFCoyyMzWPVLG5NyywU7Tt2jR4dLfLnnOe1twyTe++gSxhx4sC4oNhsa rF/35Q4l4Vfh31JCOz6XvUFkW2q14qwbeuiMsl+TaeiEGyFPwlGqF6EKLxguhXw7q1M7oJ aQyoi0AC0NtrVAtg+OTCU9j3iWXZ1kYEywwTOzRKG9S9FI8o+i/rBP5UNVKPyedcK/rb/Z b+ozHmqGVhJMxteF+dzKMkdEXOS7PBGOpfZi3kehlQakVJYKMKauL62CicygVw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1750564691; a=rsa-sha256; cv=none; b=vf8vzhV6ekAm2riNz2gP6uclJ7dvfaoy7GZPE1hfaW5oQwoRI+MXxt3Jpt3FIpVV0zUqxu Bd7EBfiAB5IzfcSTeHXFK7H93omjpfHvpldE/D6YoMPq5/8zsCcEEOCNREIsH8Ix3ih2r8 4n2u2CzeqfM7eBZdLZtPMXlkJyZwlgw5xMMlRF3u1gCgZ25xtGaiRqatplWJSR+DP62u2M cZfAimX7bFysZ+sBBBgWROfXI4mcMQKCG6KP9elpYIk76FRb+EkQHArjdQVOG866t73fl2 gQ9j9uG+ggR0cqdzK5yPqqrI6jefLzii7ifax/V7eJ8kxmjOcxPxtDJWYHCjew== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bPy9b0XGpz11S5; Sun, 22 Jun 2025 03:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55M3wA1q041038; Sun, 22 Jun 2025 03:58:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55M3wAfg041035; Sun, 22 Jun 2025 03:58:10 GMT (envelope-from git) Date: Sun, 22 Jun 2025 03:58:10 GMT Message-Id: <202506220358.55M3wAfg041035@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ahmad Khalifa Subject: git: 308659acbff3 - main - libkvm/kvm_amd64: account for relocatable kernels 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: vexeduxr X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 308659acbff34c51e57693e4dbfa43cbbc910fa1 Auto-Submitted: auto-generated The branch main has been updated by vexeduxr: URL: https://cgit.FreeBSD.org/src/commit/?id=308659acbff34c51e57693e4dbfa43cbbc910fa1 commit 308659acbff34c51e57693e4dbfa43cbbc910fa1 Author: Ahmad Khalifa AuthorDate: 2025-05-21 20:41:15 +0000 Commit: Ahmad Khalifa CommitDate: 2025-06-22 03:49:32 +0000 libkvm/kvm_amd64: account for relocatable kernels amd64 kernels don't have to be loaded at 2M physical anymore, they can be anywhere in the lower 4G of the physical address space. The kernel now provides its physical address in an ELF section in the dump, so account for it. Reviewed by: markj Approved by: imp (mentor) Pull Request: https://github.com/freebsd/freebsd-src/pull/1706 --- lib/libkvm/kvm_amd64.c | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/lib/libkvm/kvm_amd64.c b/lib/libkvm/kvm_amd64.c index e3640cf12243..acc7ac017a3c 100644 --- a/lib/libkvm/kvm_amd64.c +++ b/lib/libkvm/kvm_amd64.c @@ -109,8 +109,9 @@ _amd64_initvtop(kvm_t *kd) { struct kvm_nlist nl[2]; amd64_physaddr_t pa; - kvaddr_t kernbase; + kvaddr_t kernbase, kernphys; amd64_pml4e_t *PML4; + int found = 0; kd->vmst = (struct vmstate *)_kvm_malloc(kd, sizeof(*kd->vmst)); if (kd->vmst == NULL) { @@ -123,16 +124,43 @@ _amd64_initvtop(kvm_t *kd) if (_kvm_read_core_phdrs(kd, &kd->vmst->phnum, &kd->vmst->phdr) == -1) return (-1); + + for (size_t i = 0; i < kd->vmst->phnum; i++) { + if (kd->vmst->phdr[i].p_type == PT_DUMP_DELTA) { + /* Account for the 2M hole at KERNBASE. */ + kernphys = kd->vmst->phdr[i].p_paddr - + kd->vmst->phdr[i].p_align; + kernbase = kd->vmst->phdr[i].p_vaddr; + + found = 1; + break; + } + } } - nl[0].n_name = "kernbase"; - nl[1].n_name = 0; + if (found == 0) { + nl[0].n_name = "kernbase"; + nl[1].n_name = 0; - if (kvm_nlist2(kd, nl) != 0) { - _kvm_err(kd, kd->program, "bad namelist - no kernbase"); - return (-1); + if (kvm_nlist2(kd, nl) != 0) { + _kvm_err(kd, kd->program, "bad namelist - no kernbase"); + return (-1); + } + + nl[0].n_name = "kernphys"; + nl[1].n_name = 0; + + /* XXX + * Relocatable kernels can still be loaded at 2M. + */ + if (kvm_nlist2(kd, nl) != 1) { + _kvm_err(kd, kd->program, "cannot determine kernphys"); + return (-1); + } + + kernphys = 0; + kernbase = nl[0].n_value; } - kernbase = nl[0].n_value; nl[0].n_name = "KPML4phys"; nl[1].n_name = 0; @@ -141,8 +169,8 @@ _amd64_initvtop(kvm_t *kd) _kvm_err(kd, kd->program, "bad namelist - no KPML4phys"); return (-1); } - if (kvm_read2(kd, (nl[0].n_value - kernbase), &pa, sizeof(pa)) != - sizeof(pa)) { + if (kvm_read2(kd, (nl[0].n_value - kernbase + kernphys), &pa, + sizeof(pa)) != sizeof(pa)) { _kvm_err(kd, kd->program, "cannot read KPML4phys"); return (-1); }