]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/grub-0.97/grub-0.96-PIC.patch
HinzugefĆ¼gt:
[ipfire-2.x.git] / src / patches / grub-0.97 / grub-0.96-PIC.patch
diff --git a/src/patches/grub-0.97/grub-0.96-PIC.patch b/src/patches/grub-0.97/grub-0.96-PIC.patch
new file mode 100644 (file)
index 0000000..c69c0fa
--- /dev/null
@@ -0,0 +1,71 @@
+--- grub-0.96/stage2/char_io.c.orig    2005-02-18 09:12:39.163407496 +0100
++++ grub-0.96/stage2/char_io.c 2005-02-18 09:13:11.431502000 +0100
+@@ -1202,37 +1202,62 @@
+ }
+ #endif /* ! STAGE1_5 */
++#ifdef GRUB_UTIL
++# ifdef __PIC__
++#  if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
++      extern char start[];
++      extern char end[];
++#  elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
++      extern char _start[];
++      extern char _end[];
++#  endif
++# endif
++#endif
+ int
+ memcheck (int addr, int len)
+ {
+ #ifdef GRUB_UTIL
++# ifdef __PIC__
++#  if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
++  if (start <= addr && end > addr + len)
++    return ! errnum;
++#  elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
++  if (_start <= addr && _end > addr + len)
++    return ! errnum;
++#  endif
++# else /* __PIC__ */
+   auto int start_addr (void);
+   auto int end_addr (void);
+   
+   auto int start_addr (void)
+     {
+       int ret;
+-# if defined(HAVE_START_SYMBOL)
++#  if defined(HAVE_START_SYMBOL)
+       asm volatile ("movl     $start, %0" : "=a" (ret));
+-# elif defined(HAVE_USCORE_START_SYMBOL)
++#  elif defined(HAVE_USCORE_START_SYMBOL)
+       asm volatile ("movl     $_start, %0" : "=a" (ret));
+-# endif
++#  else
++      erk! /* function would return undefined data in this case - barf */
++#  endif
+       return ret;
+     }
+   auto int end_addr (void)
+     {
+       int ret;
+-# if defined(HAVE_END_SYMBOL)
++#  if defined(HAVE_END_SYMBOL)
+       asm volatile ("movl     $end, %0" : "=a" (ret));
+-# elif defined(HAVE_USCORE_END_SYMBOL)
++#  elif defined(HAVE_USCORE_END_SYMBOL)
+       asm volatile ("movl     $_end, %0" : "=a" (ret));
+-# endif
++#  else
++      erk! /* function would return undefined data in this case - barf */
++#  endif
+       return ret;
+     }
+   if (start_addr () <= addr && end_addr () > addr + len)
+     return ! errnum;
++# endif /* __PIC__ */
+ #endif /* GRUB_UTIL */
+   if ((addr < RAW_ADDR (0x1000))