For simplification, allocate trampoline in lower memory for every x86 variation.
This would help setting right attributes for memory in UEFI environments that restricts execution of some memory regions. Signed-off-by: Baskov Evgeniy <bas...@ispras.ru> diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c index 54a1dcd8b..0b5a22dea 100644 --- a/grub-core/lib/i386/relocator.c +++ b/grub-core/lib/i386/relocator.c @@ -172,14 +172,13 @@ grub_relocator16_boot (struct grub_relocator *rel, grub_err_t grub_relocator64_boot (struct grub_relocator *rel, - struct grub_relocator64_state state, - grub_addr_t min_addr, grub_addr_t max_addr) + struct grub_relocator64_state state) { grub_err_t err; void *relst; grub_relocator_chunk_t ch; - err = grub_relocator_alloc_chunk_align_safe (rel, &ch, min_addr, max_addr, + err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0x1000, 0xa0000, RELOCATOR_SIZEOF (64), 16, GRUB_RELOCATOR_PREFERENCE_NONE, 0); if (err) diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c index 68ef1289a..131b6859f 100644 --- a/grub-core/lib/relocator.c +++ b/grub-core/lib/relocator.c @@ -24,6 +24,7 @@ #include <grub/memory.h> #include <grub/dl.h> #include <grub/i18n.h> +#include <grub/efi/efi.h> GRUB_MOD_LICENSE ("GPLv3+"); diff --git a/grub-core/lib/x86_64/efi/relocator.c b/grub-core/lib/x86_64/efi/relocator.c index 7d200a125..d438f9a05 100644 --- a/grub-core/lib/x86_64/efi/relocator.c +++ b/grub-core/lib/x86_64/efi/relocator.c @@ -47,10 +47,10 @@ grub_relocator64_efi_boot (struct grub_relocator *rel, grub_relocator_chunk_t ch; /* - * 64-bit relocator code may live above 4 GiB quite well. - * However, I do not want ask for problems. Just in case. + * GRUB relocator may be placed at any address but GRUB EFI setup code + * only guaranties the range [0x1000; 0xa0000) to be executable. */ - err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0, 0x100000000, + err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0, 0xa0000, RELOCATOR_SIZEOF (64_efi), 16, GRUB_RELOCATOR_PREFERENCE_NONE, 1); if (err) diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 799a24cd2..8b4ae5ba2 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -763,7 +763,7 @@ grub_freebsd_boot (void) stack[0] = entry; stack[1] = bi.tags; stack[2] = kern_end; - return grub_relocator64_boot (relocator, state, 0, 0x40000000); + return grub_relocator64_boot (relocator, state); } else { diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h index 2a56c3b54..0dbd1f25c 100644 --- a/include/grub/i386/relocator.h +++ b/include/grub/i386/relocator.h @@ -87,8 +87,7 @@ grub_err_t grub_relocator32_boot (struct grub_relocator *rel, int avoid_efi_bootservices); grub_err_t grub_relocator64_boot (struct grub_relocator *rel, - struct grub_relocator64_state state, - grub_addr_t min_addr, grub_addr_t max_addr); + struct grub_relocator64_state state); #ifdef GRUB_MACHINE_EFI #ifdef __x86_64__ -- 2.35.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel