]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
sparc64: Fix assembly to let compiler to fill in memory references.
authorVladimir Serbinenko <phcoder@gmail.com>
Thu, 31 Dec 2015 12:07:16 +0000 (13:07 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Thu, 31 Dec 2015 12:07:16 +0000 (13:07 +0100)
This fixes the use of not fully relocatable (they assume that variables are
under 4G limit in virtual memory) references.

grub-core/loader/sparc64/ieee1275/linux.c

index 346d9538e3b7f35c4956b65c58e8574c4528c3fc..d44d7a113ca66a5ab2274d0fa03393ac337cd310 100644 (file)
@@ -140,17 +140,17 @@ grub_linux_boot (void)
   grub_dprintf ("loader", "Jumping to Linux...\n");
 
   /* Boot the kernel.  */
-  asm volatile ("sethi %hi(grub_ieee1275_entry_fn), %o1\n"
-               "ldx    [%o1 + %lo(grub_ieee1275_entry_fn)], %o4\n"
-               "sethi  %hi(grub_ieee1275_original_stack), %o1\n"
-               "ldx    [%o1 + %lo(grub_ieee1275_original_stack)], %o6\n"
-               "sethi  %hi(linux_addr), %o1\n"
-               "ldx    [%o1 + %lo(linux_addr)], %o5\n"
-               "mov    %g0, %o0\n"
-               "mov    %g0, %o2\n"
-               "mov    %g0, %o3\n"
-               "jmp    %o5\n"
-               "mov    %g0, %o1\n");
+  asm volatile ("ldx   %0, %%o4\n"
+               "ldx    %1, %%o6\n"
+               "ldx    %2, %%o5\n"
+               "mov    %%g0, %%o0\n"
+               "mov    %%g0, %%o2\n"
+               "mov    %%g0, %%o3\n"
+               "jmp    %%o5\n"
+               "mov    %%g0, %%o1\n": :
+               "m"(grub_ieee1275_entry_fn),
+               "m"(grub_ieee1275_original_stack),
+               "m"(linux_addr));
 
   return GRUB_ERR_NONE;
 }