Contents of /trunk/grub/patches/grub-0.97-pic.patch
Parent Directory | Revision Log
Revision 144 -
(show annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 1980 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 1980 byte(s)
-import
1 | fix PIC issues by psm and Kevin F. Quinn |
2 | |
3 | http://bugs.gentoo.org/80693 |
4 | |
5 | --- grub-0.96/stage2/char_io.c |
6 | +++ grub-0.96/stage2/char_io.c |
7 | @@ -1202,37 +1202,62 @@ |
8 | } |
9 | #endif /* ! STAGE1_5 */ |
10 | |
11 | +#ifdef GRUB_UTIL |
12 | +# ifdef __PIC__ |
13 | +# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL) |
14 | + extern char start[]; |
15 | + extern char end[]; |
16 | +# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL) |
17 | + extern char _start[]; |
18 | + extern char _end[]; |
19 | +# endif |
20 | +# endif |
21 | +#endif |
22 | int |
23 | memcheck (int addr, int len) |
24 | { |
25 | #ifdef GRUB_UTIL |
26 | +# ifdef __PIC__ |
27 | +# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL) |
28 | + if (start <= addr && end > addr + len) |
29 | + return ! errnum; |
30 | +# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL) |
31 | + if (_start <= addr && _end > addr + len) |
32 | + return ! errnum; |
33 | +# endif |
34 | +# else /* __PIC__ */ |
35 | auto int start_addr (void); |
36 | auto int end_addr (void); |
37 | |
38 | auto int start_addr (void) |
39 | { |
40 | int ret; |
41 | -# if defined(HAVE_START_SYMBOL) |
42 | +# if defined(HAVE_START_SYMBOL) |
43 | asm volatile ("movl $start, %0" : "=a" (ret)); |
44 | -# elif defined(HAVE_USCORE_START_SYMBOL) |
45 | +# elif defined(HAVE_USCORE_START_SYMBOL) |
46 | asm volatile ("movl $_start, %0" : "=a" (ret)); |
47 | -# endif |
48 | +# else |
49 | + erk! /* function would return undefined data in this case - barf */ |
50 | +# endif |
51 | return ret; |
52 | } |
53 | |
54 | auto int end_addr (void) |
55 | { |
56 | int ret; |
57 | -# if defined(HAVE_END_SYMBOL) |
58 | +# if defined(HAVE_END_SYMBOL) |
59 | asm volatile ("movl $end, %0" : "=a" (ret)); |
60 | -# elif defined(HAVE_USCORE_END_SYMBOL) |
61 | +# elif defined(HAVE_USCORE_END_SYMBOL) |
62 | asm volatile ("movl $_end, %0" : "=a" (ret)); |
63 | -# endif |
64 | +# else |
65 | + erk! /* function would return undefined data in this case - barf */ |
66 | +# endif |
67 | return ret; |
68 | } |
69 | |
70 | if (start_addr () <= addr && end_addr () > addr + len) |
71 | return ! errnum; |
72 | +# endif /* __PIC__ */ |
73 | #endif /* GRUB_UTIL */ |
74 | |
75 | if ((addr < RAW_ADDR (0x1000)) |