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

From: Brian Gerst
Date: Thu Apr 11 2024 - 14:39:01 EST


On Thu, Apr 11, 2024 at 11:26 AM Jason Andryuk <jason.andryuk@xxxxxxx> wrote:
>
> 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.

Change it to a direct jump, since branches are always RIP-relative.

Brian Gerst