The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=280e50461a1f638088e7a0b9116976821c374b56

commit 280e50461a1f638088e7a0b9116976821c374b56
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2024-09-12 05:43:44 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2024-09-16 08:12:25 +0000

    amd64 la57_trampoline: save registers in memory
    
    AMD64 ARM states that 64bit part of the architectural state is undefined
    after 32<->64 mode switching.
    
    Sponsored by:   Advanced Micro Devices (AMD)
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
---
 sys/amd64/amd64/locore.S | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index 3df3dd722f45..1ed9085e655c 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -91,11 +91,12 @@ ENTRY(btext)
 
 /* la57_trampoline(%rdi pml5) */
 ENTRY(la57_trampoline)
-       movq    %rsp,%r11
-       movq    %rbx,%r10
-       movq    %rbp,%r9
-       movq    %cr4,%r8
-       orl     $CR4_LA57,%r8d
+       movq    %rsp,lst(%rip)
+       movq    %rbx,lst+8(%rip)
+       movq    %rbp,lst+0x10(%rip)
+       movq    %cr4,%rax
+       orq     $CR4_LA57,%rax
+       movq    %rax,lst+0x18(%rip)
        leaq    la57_trampoline_end(%rip),%rsp
 
        movq    %cr0,%rbp
@@ -143,12 +144,14 @@ l1:       movl    $(3<<3),%eax
        lretl
        .code64
 
-l2:    movq    %r11,%rsp
-       movq    %r10,%rbx
-       movq    %r9,%rbp
-       movq    %r8,%cr4
+l2:    movq    lst(%rip),%rsp
+       movq    lst+8(%rip),%rbx
+       movq    lst+0x10(%rip),%rbp
+       movq    lst+0x18(%rip),%rax
+       movq    %rax,%cr4
        retq
        .p2align 4,0
+lst:   .quad   0,0,0,0
 ENTRY(la57_trampoline_gdt_desc)
        .word   la57_trampoline_end - la57_trampoline_gdt
        .long   0, 0            /* filled by pmap_bootstrap_la57 */

Reply via email to