--- stage2/char_io.c.mps Mon May 10 22:20:57 2004 +++ stage2/char_io.c Mon May 10 22:27:54 2004 @@ -1162,33 +1162,42 @@ } #endif /* ! STAGE1_5 */ +#ifdef __PIC__ +extern char _start[]; +extern char _end[]; +#endif + int memcheck (int addr, int len) { #ifdef GRUB_UTIL +#ifdef __PIC__ + if (_start <= addr && _end > addr + len) +#else static int start_addr (void) { int ret; # if defined(HAVE_START_SYMBOL) asm volatile ("movl $start, %0" : "=a" (ret)); # elif defined(HAVE_USCORE_START_SYMBOL) asm volatile ("movl $_start, %0" : "=a" (ret)); # endif return ret; } static int end_addr (void) { int ret; # if defined(HAVE_END_SYMBOL) asm volatile ("movl $end, %0" : "=a" (ret)); # elif defined(HAVE_USCORE_END_SYMBOL) asm volatile ("movl $_end, %0" : "=a" (ret)); # endif return ret; } if (start_addr () <= addr && end_addr () > addr + len) +#endif return ! errnum; #endif /* GRUB_UTIL */