On 7/8/06, Jim Gifford <[EMAIL PROTECTED]> wrote:
The best example and most noticeable is from page.h, PAGE_SHIFT is set by a variable from the configuration file used to create the kernel. Here is an unsanitized version. The same holds true with all architectures in various different files. /* * PAGE_SHIFT determines the page size */ #ifdef CONFIG_PAGE_SIZE_4KB #define PAGE_SHIFT 12 #endif #ifdef CONFIG_PAGE_SIZE_8KB #define PAGE_SHIFT 13 #endif #ifdef CONFIG_PAGE_SIZE_16KB #define PAGE_SHIFT 14 #endif #ifdef CONFIG_PAGE_SIZE_64KB #define PAGE_SHIFT 16 #endif #define PAGE_SIZE (1UL << PAGE_SHIFT) #define PAGE_MASK (~((1 << PAGE_SHIFT) - 1)) Here is a santized version #define PAGE_SIZE (getpagesize()) static __inline__ int getpageshift() { int pagesize = getpagesize(); return (__builtin_clz(pagesize) ^ 31); }
Interesting. I'd take another look. There is more sanitization in the kernel build now. If you're talking about asm/page.h, here's what I get on i386. #ifndef _I386_PAGE_H #define _I386_PAGE_H #include <unistd.h> #define PAGE_SIZE (getpagesize()) static __inline__ int getpageshift() { int pagesize = getpagesize(); #if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)) return (__builtin_clz(pagesize) ^ 31); #else register int pageshift = -1; while (pagesize) { pagesize >>= 1; pageshift++; } return pageshift; #endif } #define PAGE_SHIFT (getpageshift()) #define PAGE_MASK (~(PAGE_SIZE-1)) #endif /* _I386_PAGE_H */ -- Dan -- http://linuxfromscratch.org/mailman/listinfo/lfs-dev FAQ: http://www.linuxfromscratch.org/faq/ Unsubscribe: See the above information page