Submitted By:            Kevin Day <kevin AT kevux DOT org>
Date:                    2006-10-01
Initial Package Version: 0.97
Upstream Status:         Not submitted
Description:             This is a rediff of the gentoo grub-0.96 patch that adds PIC support.

--- grub-0.97/stage2/char_io.c.orig	2006-10-01 12:10:40.000000000 -0500
+++ grub-0.97/stage2/char_io.c	2006-10-01 12:14:42.000000000 -0500
@@ -1174,10 +1174,32 @@
 }
 #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);
   
@@ -1188,6 +1210,8 @@
       asm volatile ("movl	$start, %0" : "=a" (ret));
 # elif defined(HAVE_USCORE_START_SYMBOL)
       asm volatile ("movl	$_start, %0" : "=a" (ret));
+# else
+      erk! /* function would return undefined data in this case - barf */
 # endif
       return ret;
     }
@@ -1199,12 +1223,15 @@
       asm volatile ("movl	$end, %0" : "=a" (ret));
 # elif defined(HAVE_USCORE_END_SYMBOL)
       asm volatile ("movl	$_end, %0" : "=a" (ret));
+# 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))
