Magellan Linux

Annotation of /trunk/grub/patches/grub-0.97-pic.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (hide annotations) (download)
Tue May 8 20:06:05 2007 UTC (17 years, 1 month ago) by niro
File size: 1980 byte(s)
-import

1 niro 144 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))