]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Support
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 13 Dec 2011 18:56:50 +0000 (19:56 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 13 Dec 2011 18:56:50 +0000 (19:56 +0100)
HH22 and HM10 relocations.

ChangeLog
grub-core/kern/sparc64/dl.c

index 53d151b62090bd90564a4c8c556e2c4cdc729ca2..784b4a25e8f109fb038ea13470bfe4caf0dc2469 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-12-13  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Support
+       HH22 and HM10 relocations.
+
 2011-12-13  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/misc.c (grub_vsnprintf_real): Fix fmt2 parsing.
index 7b6266cac0e4d5d2138780260613218dc1d5bb3b..e1be5d9ece1ed99176acccc2ba640ebfab6658de 100644 (file)
@@ -111,10 +111,13 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
                       (((grub_int32_t) ((value - (Elf_Addr) addr) >> 2)) &
                        0x3FFFFFFF);
                     break;
+                  case R_SPARC_HH22: /* 9 V-imm22 */
+                    *addr = (*addr & 0xFFC00000) | ((value >> 42) & 0x3FFFFF);
+                    break;
+                  case R_SPARC_HM10: /* 12 T-simm13 */
+                    *addr = (*addr & 0xFFFFFC00) | ((value >> 32) & 0x3FF);
+                    break;
                   case R_SPARC_HI22: /* 9 V-imm22 */
-                    if (((grub_int32_t) value) & 0xFF00000000)
-                      return grub_error (GRUB_ERR_BAD_MODULE,
-                                         "high address out of 22 bits range");
                     *addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF);
                     break;
                   case R_SPARC_LO10: /* 12 T-simm13 */