On Wed, Mar 02, 2016 at 01:54:50PM -0800, H. Peter Anvin wrote:
> A relocating bootloader is one that doesn't load the kernel at
> CONFIG_PHYSICAL_ADDRESS.  The EFI stub is one example.
> 
> __START_KERNEL_map is not relocated.  On x86-64 we do relocation by
> pointing the page tables at a different address.
> 
> So I really think we need this to be a leaq, so we take a nonstandard
> load address into consideration.

Hmm, but __START_KERNEL_map is a simple macro:

#define __START_KERNEL_map      _AC(0xffffffff80000000, UL)

Ok, I think you want to do something like this for stack_start too:

        /*
         * Compute the delta between the address I am compiled to run at and the
         * address I am actually running at.
         */
        leaq    _text(%rip), %rbp
        subq    $_text - __START_KERNEL_map, %rbp
        ...

in the normal case %rbp is 0, of course.

-- 
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.

Reply via email to