[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC PATCH 20/28] x64/acpi: Use PIC-compatible references in wakeup_64.S



From: Ard Biesheuvel <ardb@xxxxxxxxxx>

Use ordinary RIP-relative references to make the code compatible with
running the linker in PIE mode.

Note that wakeup_long64() runs in the kernel's ordinary virtual mapping
so there is no need to record the address of .Lresume_point in a global
variable. And fix the comment while at it.

Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
---
 arch/x86/kernel/acpi/wakeup_64.S | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/acpi/wakeup_64.S b/arch/x86/kernel/acpi/wakeup_64.S
index 94ff83f3d3fe..af2f2ed57658 100644
--- a/arch/x86/kernel/acpi/wakeup_64.S
+++ b/arch/x86/kernel/acpi/wakeup_64.S
@@ -14,7 +14,7 @@
 
 .code64
        /*
-        * Hooray, we are in Long 64-bit mode (but still running in low memory)
+        * Hooray, we are in Long 64-bit mode
         */
 SYM_FUNC_START(wakeup_long64)
        movq    saved_magic(%rip), %rax
@@ -40,7 +40,7 @@ SYM_FUNC_START(wakeup_long64)
        movq    saved_rsi(%rip), %rsi
        movq    saved_rbp(%rip), %rbp
 
-       movq    saved_rip(%rip), %rax
+       leaq    .Lresume_point(%rip), %rax
        ANNOTATE_RETPOLINE_SAFE
        jmp     *%rax
 SYM_FUNC_END(wakeup_long64)
@@ -51,7 +51,7 @@ SYM_FUNC_START(do_suspend_lowlevel)
        xorl    %eax, %eax
        call    save_processor_state
 
-       movq    $saved_context, %rax
+       leaq    saved_context(%rip), %rax
        movq    %rsp, pt_regs_sp(%rax)
        movq    %rbp, pt_regs_bp(%rax)
        movq    %rsi, pt_regs_si(%rax)
@@ -70,8 +70,6 @@ SYM_FUNC_START(do_suspend_lowlevel)
        pushfq
        popq    pt_regs_flags(%rax)
 
-       movq    $.Lresume_point, saved_rip(%rip)
-
        movq    %rsp, saved_rsp(%rip)
        movq    %rbp, saved_rbp(%rip)
        movq    %rbx, saved_rbx(%rip)
@@ -88,7 +86,7 @@ SYM_FUNC_START(do_suspend_lowlevel)
        .align 4
 .Lresume_point:
        /* We don't restore %rax, it must be 0 anyway */
-       movq    $saved_context, %rax
+       leaq    saved_context(%rip), %rax
        movq    saved_context_cr4(%rax), %rbx
        movq    %rbx, %cr4
        movq    saved_context_cr3(%rax), %rbx
@@ -137,7 +135,6 @@ saved_rsi:          .quad   0
 saved_rdi:             .quad   0
 saved_rbx:             .quad   0
 
-saved_rip:             .quad   0
 saved_rsp:             .quad   0
 
 SYM_DATA(saved_magic,  .quad   0)
-- 
2.46.0.792.g87dc391469-goog




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.