Re: [PATCH 2/5] x86/pvh: Make PVH entrypoint PIC for x86-64

From: Jason Andryuk
Date: Thu Apr 11 2024 - 11:28:43 EST


On 2024-04-10 17:00, Brian Gerst wrote:
On Wed, Apr 10, 2024 at 3:50 PM Jason Andryuk <jason.andryuk@xxxxxxx> wrote:

/* 64-bit entry point. */
.code64
1:
+ UNWIND_HINT_END_OF_STACK
+
/* Set base address in stack canary descriptor. */
mov $MSR_GS_BASE,%ecx
- mov $_pa(canary), %eax
+ leal rva(canary)(%ebp), %eax

Since this is in 64-bit mode, RIP-relative addressing can be used.

xor %edx, %edx
wrmsr

call xen_prepare_pvh

/* startup_64 expects boot_params in %rsi. */
- mov $_pa(pvh_bootparams), %rsi
- mov $_pa(startup_64), %rax
+ lea rva(pvh_bootparams)(%ebp), %rsi
+ lea rva(startup_64)(%ebp), %rax

RIP-relative here too.

Yes, thanks for catching that. With the RIP-relative conversion, there is now:
vmlinux.o: warning: objtool: pvh_start_xen+0x10d: relocation to !ENDBR: startup_64+0x0

I guess RIP-relative made it visible. That can be quieted by adding ANNOTATE_NOENDBR to startup_64.

Thanks,
Jason