]> git.ipfire.org Git - ipfire-2.x.git/blame - 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
CommitLineData
27996c53
MT
1--- grub-0.96/stage2/char_io.c.orig 2005-02-18 09:12:39.163407496 +0100
2+++ grub-0.96/stage2/char_io.c 2005-02-18 09:13:11.431502000 +0100
3@@ -1202,37 +1202,62 @@
4 }
5 #endif /* ! STAGE1_5 */
6
7+#ifdef GRUB_UTIL
8+# ifdef __PIC__
9+# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
10+ extern char start[];
11+ extern char end[];
12+# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
13+ extern char _start[];
14+ extern char _end[];
15+# endif
16+# endif
17+#endif
18 int
19 memcheck (int addr, int len)
20 {
21 #ifdef GRUB_UTIL
22+# ifdef __PIC__
23+# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
24+ if (start <= addr && end > addr + len)
25+ return ! errnum;
26+# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
27+ if (_start <= addr && _end > addr + len)
28+ return ! errnum;
29+# endif
30+# else /* __PIC__ */
31 auto int start_addr (void);
32 auto int end_addr (void);
33
34 auto int start_addr (void)
35 {
36 int ret;
37-# if defined(HAVE_START_SYMBOL)
38+# if defined(HAVE_START_SYMBOL)
39 asm volatile ("movl $start, %0" : "=a" (ret));
40-# elif defined(HAVE_USCORE_START_SYMBOL)
41+# elif defined(HAVE_USCORE_START_SYMBOL)
42 asm volatile ("movl $_start, %0" : "=a" (ret));
43-# endif
44+# else
45+ erk! /* function would return undefined data in this case - barf */
46+# endif
47 return ret;
48 }
49
50 auto int end_addr (void)
51 {
52 int ret;
53-# if defined(HAVE_END_SYMBOL)
54+# if defined(HAVE_END_SYMBOL)
55 asm volatile ("movl $end, %0" : "=a" (ret));
56-# elif defined(HAVE_USCORE_END_SYMBOL)
57+# elif defined(HAVE_USCORE_END_SYMBOL)
58 asm volatile ("movl $_end, %0" : "=a" (ret));
59-# endif
60+# else
61+ erk! /* function would return undefined data in this case - barf */
62+# endif
63 return ret;
64 }
65
66 if (start_addr () <= addr && end_addr () > addr + len)
67 return ! errnum;
68+# endif /* __PIC__ */
69 #endif /* GRUB_UTIL */
70
71 if ((addr < RAW_ADDR (0x1000))