From nobody Thu Mar 23 19:02:49 2023 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 4PjF8n5zg0z41gnk; Thu, 23 Mar 2023 19:02:49 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PjF8n54wgz3pSf; Thu, 23 Mar 2023 19:02:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679598169; 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=CsP9SqTRF70uuSYgvwofa9jHO9+qHitfKDiTPkD4sCk=; b=M7efwJTL4mUtw9Wps1BfU+hg5UIH6VrONYiFZQbIQ8G4ayuTJin2yKzOG67UjTrvVo047G rlqEXgEUNX/KsarcPPDSdzwcD8SjPSbx8wabGI9PalCzasJixfKXKQ2/f5ohU2tqqKpefM f8beS2Xx62Hr7ymiYY3Xh3Qhn7EsDYopRtDfOSOcT6gtkRB7E8X6CZVhogLNxW4HweEC76 oQQIEz3Hj66ohOqX/nvx72o8NaADlRszpdnUGpUAkJUMfCevbXwy7fLTJM/eoslTBNan7t ol+tGOXZ5lAVnJrZsMBT56/X5lDDzehKJWSPJO0BFBsEFYpuNYqOjGNytCyi2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679598169; 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=CsP9SqTRF70uuSYgvwofa9jHO9+qHitfKDiTPkD4sCk=; b=oIoJeOxbvuJ1HKJhBWQyHwpjsf0vejXI32IpD3OVASKTfIo86RS24M6NhozR6WFB1c7Ayf KdNYbkx3nGDukAzOsXCSkpPrxt9JXNJh96AoThMQBLgv7hymyqqGPeFygGAf2jA+JktPWU pSB8puySeAYEJzXE2mhv7FFK32ZJ/CXs+REEc2IiAKc7aZIjOVjLsxOdpIJ1uGouwmpi4a xOJ0Lrh0wYmkTHayUrJC6IkEaf0yfkG1bVO882ulh1FVcDi95uLT3pb2+5p+UFKf48dqcu 7LBeNvDx2DM68XeVjdY8Abo5k4oSP7ZOPfSF0cRixgPogdSe1InymtaL2iONmA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679598169; a=rsa-sha256; cv=none; b=RyZNqkC2Ny1OhKfKBHEEc+QQ5aKsJ2zZXtIZl0W1iBjafxBkoC8mh0x4VHLqZBIHncGkf+ G4AFePx2Mw5XcnjgrmTmFaR0Gi1q3B0FuleziqV3DApv0Psbgfr06J2hD2mhAj/ZGNIgXK X5JFgs8EupDao8amdQBr1Eu1edkPHpjwg0jqkfg8KGaXfRaOtUmQ9HTNeCa/u/lW8mew+I f4epUI3cD9A8SpdwFYUVG/o378LaFs6G+rLT0+Fi2u0CR8cDDyoQuBMusBXGv/OYQ5N43L yCLzpr4AVEPhR0QMimSREcvVCXciRsbzK5UW+e6qkL/MZUM170c4jypXCFjg0g== 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 4PjF8n4Bh2zncM; Thu, 23 Mar 2023 19:02:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 32NJ2n4Q039372; Thu, 23 Mar 2023 19:02:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32NJ2nj3039371; Thu, 23 Mar 2023 19:02:49 GMT (envelope-from git) Date: Thu, 23 Mar 2023 19:02:49 GMT Message-Id: <202303231902.32NJ2nj3039371@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 1c1f31a5e517 - main - Remove unused registes from the arm pcb 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1c1f31a5e517ebb940c752c3468b03cdc687c5c7 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=1c1f31a5e517ebb940c752c3468b03cdc687c5c7 commit 1c1f31a5e517ebb940c752c3468b03cdc687c5c7 Author: Andrew Turner AuthorDate: 2023-03-22 12:33:05 +0000 Commit: Andrew Turner CommitDate: 2023-03-23 18:56:26 +0000 Remove unused registes from the arm pcb These were kept for ABI reasons. Remove them and bump __FreeBSD_version so debuggers can be updated to use the new layout. Reviewed by: jhb Sponsored by: Arm Ltd Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D35378 --- sys/arm64/arm64/db_trace.c | 2 +- sys/arm64/arm64/gdb_machdep.c | 12 ++++++------ sys/arm64/arm64/genassym.c | 1 - sys/arm64/arm64/machdep.c | 6 +++--- sys/arm64/arm64/stack_machdep.c | 2 +- sys/arm64/arm64/vm_machdep.c | 4 ++-- sys/arm64/include/db_machdep.h | 4 ++-- sys/arm64/include/gdb_machdep.h | 1 + sys/arm64/include/pcb.h | 14 ++++++++------ 9 files changed, 24 insertions(+), 22 deletions(-) diff --git a/sys/arm64/arm64/db_trace.c b/sys/arm64/arm64/db_trace.c index 6abdd6c5ca7a..42230f273716 100644 --- a/sys/arm64/arm64/db_trace.c +++ b/sys/arm64/arm64/db_trace.c @@ -145,7 +145,7 @@ db_trace_thread(struct thread *thr, int count) ctx = kdb_thr_ctx(thr); frame.fp = (uintptr_t)ctx->pcb_x[PCB_FP]; - frame.pc = (uintptr_t)ctx->pcb_lr; + frame.pc = (uintptr_t)ctx->pcb_x[PCB_LR]; db_stack_trace_cmd(thr, &frame); } else db_trace_self(); diff --git a/sys/arm64/arm64/gdb_machdep.c b/sys/arm64/arm64/gdb_machdep.c index b27e1edb3d7f..fed8a8b5e9d4 100644 --- a/sys/arm64/arm64/gdb_machdep.c +++ b/sys/arm64/arm64/gdb_machdep.c @@ -60,10 +60,10 @@ gdb_cpu_getreg(int regnum, size_t *regsz) switch (regnum) { case GDB_REG_SP: return (&kdb_thrctx->pcb_sp); case GDB_REG_PC: /* FALLTHROUGH */ - case GDB_REG_LR: return (&kdb_thrctx->pcb_lr); + case GDB_REG_LR: return (&kdb_thrctx->pcb_x[PCB_LR]); default: - if (regnum >= GDB_REG_X0 && regnum <= GDB_REG_X29) - return (&kdb_thrctx->pcb_x[regnum]); + if (regnum >= GDB_REG_X19 && regnum <= GDB_REG_X29) + return (&kdb_thrctx->pcb_x[regnum - GDB_REG_X19]); break; } @@ -89,11 +89,11 @@ gdb_cpu_setreg(int regnum, void *val) } switch (regnum) { case GDB_REG_PC: /* FALLTHROUGH */ - case GDB_REG_LR: kdb_thrctx->pcb_lr = regval; break; + case GDB_REG_LR: kdb_thrctx->pcb_x[PCB_LR] = regval; break; case GDB_REG_SP: kdb_thrctx->pcb_sp = regval; break; default: - if (regnum >= GDB_REG_X0 && regnum <= GDB_REG_X29) { - kdb_thrctx->pcb_x[regnum] = regval; + if (regnum >= GDB_REG_X19 && regnum <= GDB_REG_X29) { + kdb_thrctx->pcb_x[regnum - GDB_REG_X19] = regval; } break; } diff --git a/sys/arm64/arm64/genassym.c b/sys/arm64/arm64/genassym.c index db07f1714f5a..2bc0804aef27 100644 --- a/sys/arm64/arm64/genassym.c +++ b/sys/arm64/arm64/genassym.c @@ -57,7 +57,6 @@ ASSYM(PCB_SIZE, roundup2(sizeof(struct pcb), STACKALIGNBYTES + 1)); ASSYM(PCB_SINGLE_STEP_SHIFT, PCB_SINGLE_STEP_SHIFT); ASSYM(PCB_REGS, offsetof(struct pcb, pcb_x)); ASSYM(PCB_X19, PCB_X19); -ASSYM(PCB_LR, offsetof(struct pcb, pcb_lr)); ASSYM(PCB_SP, offsetof(struct pcb, pcb_sp)); ASSYM(PCB_TPIDRRO, offsetof(struct pcb, pcb_tpidrro_el0)); ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault)); diff --git a/sys/arm64/arm64/machdep.c b/sys/arm64/arm64/machdep.c index 0659602a9ded..31e7568a0605 100644 --- a/sys/arm64/arm64/machdep.c +++ b/sys/arm64/arm64/machdep.c @@ -356,10 +356,10 @@ makectx(struct trapframe *tf, struct pcb *pcb) int i; for (i = 0; i < nitems(pcb->pcb_x); i++) - pcb->pcb_x[i] = tf->tf_x[i]; + pcb->pcb_x[i] = tf->tf_x[i + PCB_X_START]; - /* NB: pcb_lr is the PC, see PC_REGS() in db_machdep.h */ - pcb->pcb_lr = tf->tf_elr; + /* NB: pcb_x[PCB_LR] is the PC, see PC_REGS() in db_machdep.h */ + pcb->pcb_x[PCB_LR] = tf->tf_elr; pcb->pcb_sp = tf->tf_sp; } diff --git a/sys/arm64/arm64/stack_machdep.c b/sys/arm64/arm64/stack_machdep.c index 8a3e8ce7dbc7..9fdb3da211cd 100644 --- a/sys/arm64/arm64/stack_machdep.c +++ b/sys/arm64/arm64/stack_machdep.c @@ -69,7 +69,7 @@ stack_save_td(struct stack *st, struct thread *td) return (EOPNOTSUPP); frame.fp = td->td_pcb->pcb_x[PCB_FP]; - frame.pc = ADDR_MAKE_CANONICAL(td->td_pcb->pcb_lr); + frame.pc = ADDR_MAKE_CANONICAL(td->td_pcb->pcb_x[PCB_LR]); stack_capture(td, st, &frame); return (0); diff --git a/sys/arm64/arm64/vm_machdep.c b/sys/arm64/arm64/vm_machdep.c index dee42a8b568d..e111995f09b0 100644 --- a/sys/arm64/arm64/vm_machdep.c +++ b/sys/arm64/arm64/vm_machdep.c @@ -107,7 +107,7 @@ cpu_fork(struct thread *td1, struct proc *p2, struct thread *td2, int flags) /* Set the return value registers for fork() */ td2->td_pcb->pcb_x[PCB_X19] = (uintptr_t)fork_return; td2->td_pcb->pcb_x[PCB_X20] = (uintptr_t)td2; - td2->td_pcb->pcb_lr = (uintptr_t)fork_trampoline; + td2->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline; td2->td_pcb->pcb_sp = (uintptr_t)td2->td_frame; vfp_new_thread(td2, td1, true); @@ -185,7 +185,7 @@ cpu_copy_thread(struct thread *td, struct thread *td0) td->td_pcb->pcb_x[PCB_X19] = (uintptr_t)fork_return; td->td_pcb->pcb_x[PCB_X20] = (uintptr_t)td; - td->td_pcb->pcb_lr = (uintptr_t)fork_trampoline; + td->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline; td->td_pcb->pcb_sp = (uintptr_t)td->td_frame; /* Update VFP state for the new thread */ diff --git a/sys/arm64/include/db_machdep.h b/sys/arm64/include/db_machdep.h index 9ec0b6402a91..88cebee8fc30 100644 --- a/sys/arm64/include/db_machdep.h +++ b/sys/arm64/include/db_machdep.h @@ -44,7 +44,7 @@ typedef vm_offset_t db_addr_t; typedef long db_expr_t; -#define PC_REGS() ((db_addr_t)kdb_thrctx->pcb_lr) +#define PC_REGS() ((db_addr_t)kdb_thrctx->pcb_x[PCB_LR]) #define BKPT_INST (0xd4200000) #define BKPT_SIZE (4) @@ -52,7 +52,7 @@ typedef long db_expr_t; #define BKPT_SKIP do { \ kdb_frame->tf_elr += BKPT_SIZE; \ - kdb_thrctx->pcb_lr += BKPT_SIZE; \ + kdb_thrctx->pcb_x[PCB_LR] += BKPT_SIZE; \ } while (0) #define db_clear_single_step kdb_cpu_clear_singlestep diff --git a/sys/arm64/include/gdb_machdep.h b/sys/arm64/include/gdb_machdep.h index 17b46edd1a27..82354f52bd5e 100644 --- a/sys/arm64/include/gdb_machdep.h +++ b/sys/arm64/include/gdb_machdep.h @@ -34,6 +34,7 @@ #define GDB_BUFSZ 4096 #define GDB_NREGS 68 #define GDB_REG_X0 0 +#define GDB_REG_X19 19 #define GDB_REG_X29 29 #define GDB_REG_LR 30 #define GDB_REG_SP 31 diff --git a/sys/arm64/include/pcb.h b/sys/arm64/include/pcb.h index 8767a9e4dba3..8ffe6f2d483e 100644 --- a/sys/arm64/include/pcb.h +++ b/sys/arm64/include/pcb.h @@ -36,14 +36,16 @@ struct trapframe; -#define PCB_X19 19 -#define PCB_X20 20 -#define PCB_FP 29 +/* The first register in pcb_x is x19 */ +#define PCB_X_START 19 + +#define PCB_X19 0 +#define PCB_X20 1 +#define PCB_FP 10 +#define PCB_LR 11 struct pcb { - uint64_t pcb_x[30]; - uint64_t pcb_lr; - uint64_t _reserved; /* Was pcb_pc */ + uint64_t pcb_x[12]; /* These two need to be in order as we access them together */ uint64_t pcb_sp; uint64_t pcb_tpidr_el0;