]> git.ipfire.org Git - ipfire-2.x.git/blob - 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
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))