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

Reply via email to