The branch stable/12 has been updated by mhorne:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7937837f11b648193cb1ad44947eb941b63cc197

commit 7937837f11b648193cb1ad44947eb941b63cc197
Author:     mhorne <[email protected]>
AuthorDate: 2020-12-21 16:16:09 +0000
Commit:     Mitchell Horne <[email protected]>
CommitDate: 2021-01-25 13:57:30 +0000

    arm64: remove pcb_pc
    
    Reviewed by:    markj, jhb
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 5f66d5a313bf2b2254de92b2915e48e5cf528893)
---
 sys/arm64/arm64/db_trace.c      | 2 +-
 sys/arm64/arm64/exception.S     | 2 +-
 sys/arm64/arm64/genassym.c      | 1 +
 sys/arm64/arm64/machdep.c       | 6 +++---
 sys/arm64/arm64/stack_machdep.c | 2 +-
 sys/arm64/arm64/swtch.S         | 8 ++++----
 sys/arm64/arm64/vm_machdep.c    | 6 +++---
 sys/arm64/include/db_machdep.h  | 2 +-
 sys/arm64/include/pcb.h         | 6 +++---
 9 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/sys/arm64/arm64/db_trace.c b/sys/arm64/arm64/db_trace.c
index ee20e9f14f0a..82b6e07fc261 100644
--- a/sys/arm64/arm64/db_trace.c
+++ b/sys/arm64/arm64/db_trace.c
@@ -111,7 +111,7 @@ db_trace_thread(struct thread *thr, int count)
 
                frame.sp = (uint64_t)ctx->pcb_sp;
                frame.fp = (uint64_t)ctx->pcb_x[29];
-               frame.pc = (uint64_t)ctx->pcb_x[30];
+               frame.pc = (uintptr_t)ctx->pcb_lr;
                db_stack_trace_cmd(&frame);
        } else
                db_trace_self();
diff --git a/sys/arm64/arm64/exception.S b/sys/arm64/arm64/exception.S
index d3242f4ac0b7..19dd9e9d85e2 100644
--- a/sys/arm64/arm64/exception.S
+++ b/sys/arm64/arm64/exception.S
@@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
        sub     sp, sp, #128
 .endif
        sub     sp, sp, #(TF_SIZE + 16)
-       stp     x29, x30, [sp, #(TF_SIZE)]
+       stp     x29, lr, [sp, #(TF_SIZE)]
        stp     x28, x29, [sp, #(TF_X + 28 * 8)]
        stp     x26, x27, [sp, #(TF_X + 26 * 8)]
        stp     x24, x25, [sp, #(TF_X + 24 * 8)]
diff --git a/sys/arm64/arm64/genassym.c b/sys/arm64/arm64/genassym.c
index debe63c62659..8bd4b791d417 100644
--- a/sys/arm64/arm64/genassym.c
+++ b/sys/arm64/arm64/genassym.c
@@ -49,6 +49,7 @@ ASSYM(PC_SSBD, offsetof(struct pcpu, pc_ssbd));
 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_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 90a2659d9521..c0df74bd1f6f 100644
--- a/sys/arm64/arm64/machdep.c
+++ b/sys/arm64/arm64/machdep.c
@@ -631,11 +631,11 @@ makectx(struct trapframe *tf, struct pcb *pcb)
 {
        int i;
 
-       for (i = 0; i < PCB_LR; i++)
+       for (i = 0; i < nitems(pcb->pcb_x); i++)
                pcb->pcb_x[i] = tf->tf_x[i];
 
-       pcb->pcb_x[PCB_LR] = tf->tf_lr;
-       pcb->pcb_pc = tf->tf_elr;
+       /* NB: pcb_lr is the PC, see PC_REGS() in db_machdep.h */
+       pcb->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 0212c6335a05..feba7e41286d 100644
--- a/sys/arm64/arm64/stack_machdep.c
+++ b/sys/arm64/arm64/stack_machdep.c
@@ -67,7 +67,7 @@ stack_save_td(struct stack *st, struct thread *td)
 
        frame.sp = td->td_pcb->pcb_sp;
        frame.fp = td->td_pcb->pcb_x[29];
-       frame.pc = td->td_pcb->pcb_x[30];
+       frame.pc = td->td_pcb->pcb_lr;
 
        stack_capture(st, &frame);
 }
diff --git a/sys/arm64/arm64/swtch.S b/sys/arm64/arm64/swtch.S
index d9921f7e9528..bc87114dd0ee 100644
--- a/sys/arm64/arm64/swtch.S
+++ b/sys/arm64/arm64/swtch.S
@@ -101,7 +101,7 @@ ENTRY(cpu_throw)
        ldp     x24, x25, [x4, #PCB_REGS + 24 * 8]
        ldp     x26, x27, [x4, #PCB_REGS + 26 * 8]
        ldp     x28, x29, [x4, #PCB_REGS + 28 * 8]
-       ldr     x30, [x4, #PCB_REGS + 30 * 8]
+       ldr     lr, [x4, #PCB_LR]
 
        ret
 END(cpu_throw)
@@ -132,7 +132,7 @@ ENTRY(cpu_switch)
        stp     x24, x25, [x4, #PCB_REGS + 24 * 8]
        stp     x26, x27, [x4, #PCB_REGS + 26 * 8]
        stp     x28, x29, [x4, #PCB_REGS + 28 * 8]
-       str     x30, [x4, #PCB_REGS + 30 * 8]
+       str     lr, [x4, #PCB_LR]
        /* And the old stack pointer */
        mov     x5, sp
        mrs     x6, tpidrro_el0
@@ -198,7 +198,7 @@ ENTRY(cpu_switch)
        ldp     x24, x25, [x4, #PCB_REGS + 24 * 8]
        ldp     x26, x27, [x4, #PCB_REGS + 26 * 8]
        ldp     x28, x29, [x4, #PCB_REGS + 28 * 8]
-       ldr     x30, [x4, #PCB_REGS + 30 * 8]
+       ldr     lr, [x4, #PCB_LR]
 
        str     xzr, [x4, #PCB_REGS + 18 * 8]
        ret
@@ -270,7 +270,7 @@ ENTRY(savectx)
        stp     x24, x25, [x0, #PCB_REGS + 24 * 8]
        stp     x26, x27, [x0, #PCB_REGS + 26 * 8]
        stp     x28, x29, [x0, #PCB_REGS + 28 * 8]
-       str     x30, [x0, #PCB_REGS + 30 * 8]
+       str     lr, [x0, #PCB_LR]
        /* And the old stack pointer */
        mov     x5, sp
        mrs     x6, tpidrro_el0
diff --git a/sys/arm64/arm64/vm_machdep.c b/sys/arm64/arm64/vm_machdep.c
index 8f0dfa1a15e7..1d6ccace82ed 100644
--- a/sys/arm64/arm64/vm_machdep.c
+++ b/sys/arm64/arm64/vm_machdep.c
@@ -104,7 +104,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[8] = (uintptr_t)fork_return;
        td2->td_pcb->pcb_x[9] = (uintptr_t)td2;
-       td2->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline;
+       td2->td_pcb->pcb_lr = (uintptr_t)fork_trampoline;
        td2->td_pcb->pcb_sp = (uintptr_t)td2->td_frame;
        td2->td_pcb->pcb_fpusaved = &td2->td_pcb->pcb_fpustate;
        td2->td_pcb->pcb_vfpcpu = UINT_MAX;
@@ -175,7 +175,7 @@ cpu_copy_thread(struct thread *td, struct thread *td0)
 
        td->td_pcb->pcb_x[8] = (uintptr_t)fork_return;
        td->td_pcb->pcb_x[9] = (uintptr_t)td;
-       td->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline;
+       td->td_pcb->pcb_lr = (uintptr_t)fork_trampoline;
        td->td_pcb->pcb_sp = (uintptr_t)td->td_frame;
        td->td_pcb->pcb_fpusaved = &td->td_pcb->pcb_fpustate;
        td->td_pcb->pcb_vfpcpu = UINT_MAX;
@@ -253,7 +253,7 @@ cpu_fork_kthread_handler(struct thread *td, void 
(*func)(void *), void *arg)
 
        td->td_pcb->pcb_x[8] = (uintptr_t)func;
        td->td_pcb->pcb_x[9] = (uintptr_t)arg;
-       td->td_pcb->pcb_x[PCB_LR] = (uintptr_t)fork_trampoline;
+       td->td_pcb->pcb_lr = (uintptr_t)fork_trampoline;
        td->td_pcb->pcb_sp = (uintptr_t)td->td_frame;
        td->td_pcb->pcb_fpusaved = &td->td_pcb->pcb_fpustate;
        td->td_pcb->pcb_vfpcpu = UINT_MAX;
diff --git a/sys/arm64/include/db_machdep.h b/sys/arm64/include/db_machdep.h
index 45d548c750bc..f2fd2a57a9c3 100644
--- a/sys/arm64/include/db_machdep.h
+++ b/sys/arm64/include/db_machdep.h
@@ -43,7 +43,7 @@
 typedef vm_offset_t    db_addr_t;
 typedef long           db_expr_t;
 
-#define        PC_REGS()       ((db_addr_t)kdb_thrctx->pcb_pc)
+#define        PC_REGS()       ((db_addr_t)kdb_thrctx->pcb_lr)
 
 #define        BKPT_INST       (0xd4200000)
 #define        BKPT_SIZE       (4)
diff --git a/sys/arm64/include/pcb.h b/sys/arm64/include/pcb.h
index bd8b1b4235a8..cbf43133e9ad 100644
--- a/sys/arm64/include/pcb.h
+++ b/sys/arm64/include/pcb.h
@@ -35,10 +35,10 @@
 
 struct trapframe;
 
-#define        PCB_LR          30
 struct pcb {
-       uint64_t        pcb_x[31];
-       uint64_t        pcb_pc;
+       uint64_t        pcb_x[30];
+       uint64_t        pcb_lr;
+       uint64_t        _reserved;      /* Was pcb_pc */
        /* These two need to be in order as we access them together */
        uint64_t        pcb_sp;
        uint64_t        pcb_tpidr_el0;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to