]>
Commit | Line | Data |
---|---|---|
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)) |