From 64c5a652fb76e999eea27aed777d710d747ed949 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Fri, 13 Aug 2004 23:39:45 +0000 Subject: Fixup PAGE_SIZE problems -Erik --- ldso/include/ldso.h | 6 +---- ldso/ldso/frv/dl-syscalls.h | 2 +- libc/misc/internals/__uClibc_main.c | 2 +- libc/stdlib/malloc/malloc.h | 5 ++-- libc/sysdeps/linux/alpha/bits/uClibc_page.h | 28 ++++++++++++++++++++++ libc/sysdeps/linux/alpha/sys/user.h | 2 +- libc/sysdeps/linux/common/bits/uClibc_page.h | 28 ++++++++++++++++++++++ libc/sysdeps/linux/i386/sys/user.h | 4 +--- libc/sysdeps/linux/mips/bits/uClibc_page.h | 35 ++++++++++++++++++++++++++++ libc/sysdeps/linux/mips/sys/user.h | 4 +--- libpthread/linuxthreads/internals.h | 8 ++++--- 11 files changed, 104 insertions(+), 20 deletions(-) create mode 100644 libc/sysdeps/linux/alpha/bits/uClibc_page.h create mode 100644 libc/sysdeps/linux/common/bits/uClibc_page.h create mode 100644 libc/sysdeps/linux/mips/bits/uClibc_page.h diff --git a/ldso/include/ldso.h b/ldso/include/ldso.h index 6bb87c264..494b57521 100644 --- a/ldso/include/ldso.h +++ b/ldso/include/ldso.h @@ -26,11 +26,7 @@ #include #include /* Pull in the arch specific page size */ -#include -#ifndef PAGE_SIZE -# define PAGE_SHIFT 12 -# define PAGE_SIZE (1UL << PAGE_SHIFT) -#endif +#include /* Now the ldso specific headers */ #include #include diff --git a/ldso/ldso/frv/dl-syscalls.h b/ldso/ldso/frv/dl-syscalls.h index 3cfe2d7b1..4ee1992a5 100644 --- a/ldso/ldso/frv/dl-syscalls.h +++ b/ldso/ldso/frv/dl-syscalls.h @@ -42,7 +42,7 @@ static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, # define MMAP2_PAGE_SHIFT 12 # endif -#include /* for PAGE_SIZE */ +#include /* for PAGE_SIZE */ inline static void *_dl_memset(void*,int,size_t); inline static ssize_t _dl_pread(int fd, void *buf, size_t count, off_t offset); diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index 6d5a930b1..6b5463f58 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -17,7 +17,7 @@ #include #include #include -#include +#include #ifdef __UCLIBC_PROPOLICE__ extern void __guard_setup(void); #endif diff --git a/libc/stdlib/malloc/malloc.h b/libc/stdlib/malloc/malloc.h index 37afe7299..ef95994a6 100644 --- a/libc/stdlib/malloc/malloc.h +++ b/libc/stdlib/malloc/malloc.h @@ -14,9 +14,8 @@ /* The alignment we guarantee for malloc return values. */ #define MALLOC_ALIGNMENT (sizeof (double)) -/* The system pagesize we assume; we really ought to get it with - getpagesize, but gee, how annoying. */ -#define MALLOC_PAGE_SIZE 4096 +/* The system pagesize... */ +#define MALLOC_PAGE_SIZE _dl_pagesize /* The minimum size of block we request from the the system to extend the heap for small allocations (we may request a bigger block if necessary to diff --git a/libc/sysdeps/linux/alpha/bits/uClibc_page.h b/libc/sysdeps/linux/alpha/bits/uClibc_page.h new file mode 100644 index 000000000..8219a19da --- /dev/null +++ b/libc/sysdeps/linux/alpha/bits/uClibc_page.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Erik Andersen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* Supply an architecture specific value for PAGE_SIZE and friends. */ + +#ifndef _UCLIBC_PAGE_H +#define _UCLIBC_PAGE_H + +/* PAGE_SHIFT determines the page size -- in this case 8192 */ +#define PAGE_SHIFT 13 +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) + +#endif /* _UCLIBC_PAGE_H */ diff --git a/libc/sysdeps/linux/alpha/sys/user.h b/libc/sysdeps/linux/alpha/sys/user.h index 4cd29d2ff..f9beea082 100644 --- a/libc/sysdeps/linux/alpha/sys/user.h +++ b/libc/sysdeps/linux/alpha/sys/user.h @@ -23,7 +23,7 @@ only. Don't read too much into it. Don't use it for anything other than gdb/strace unless you know what you are doing. */ -#include +#include #include struct user diff --git a/libc/sysdeps/linux/common/bits/uClibc_page.h b/libc/sysdeps/linux/common/bits/uClibc_page.h new file mode 100644 index 000000000..e91be2d13 --- /dev/null +++ b/libc/sysdeps/linux/common/bits/uClibc_page.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2004 Erik Andersen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* Supply an architecture specific value for PAGE_SIZE and friends. */ + +#ifndef _UCLIBC_PAGE_H +#define _UCLIBC_PAGE_H + +/* PAGE_SHIFT determines the page size -- in this case 4096 */ +#define PAGE_SHIFT 12 +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) + +#endif /* _UCLIBC_PAGE_H */ diff --git a/libc/sysdeps/linux/i386/sys/user.h b/libc/sysdeps/linux/i386/sys/user.h index aca46e7d3..c5cfff256 100644 --- a/libc/sysdeps/linux/i386/sys/user.h +++ b/libc/sysdeps/linux/i386/sys/user.h @@ -92,9 +92,7 @@ struct user int u_debugreg [8]; }; -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE-1)) +#include #define NBPG PAGE_SIZE #define UPAGES 1 #define HOST_TEXT_START_ADDR (u.start_code) diff --git a/libc/sysdeps/linux/mips/bits/uClibc_page.h b/libc/sysdeps/linux/mips/bits/uClibc_page.h new file mode 100644 index 000000000..915918c36 --- /dev/null +++ b/libc/sysdeps/linux/mips/bits/uClibc_page.h @@ -0,0 +1,35 @@ +/* Copyright (C) 2004 Erik Andersen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* Supply an architecture specific value for PAGE_SIZE and friends. */ + +#ifndef _UCLIBC_PAGE_H +#define _UCLIBC_PAGE_H + +/* PAGE_SIZE of mips is sortof wierd, and depends on how the kernel + * happens to have been configured. It might use 4KB, 16K or 64K + * pages. To avoid using the current kernel configuration settings, + * uClibc will simply use 4KB on mips and call it good. */ +#if 0 +#define PAGE_SHIFT 16 +#define PAGE_SHIFT 14 +#endif +#define PAGE_SHIFT 12 +#define PAGE_SIZE (1UL << PAGE_SHIFT) +#define PAGE_MASK (~(PAGE_SIZE-1)) + +#endif /* _UCLIBC_PAGE_H */ diff --git a/libc/sysdeps/linux/mips/sys/user.h b/libc/sysdeps/linux/mips/sys/user.h index 8b21ff278..8e6b1e1ef 100644 --- a/libc/sysdeps/linux/mips/sys/user.h +++ b/libc/sysdeps/linux/mips/sys/user.h @@ -205,9 +205,7 @@ struct user { #endif -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE-1)) +#include #define NBPG PAGE_SIZE #define UPAGES 1 #define HOST_TEXT_START_ADDR (u.start_code) diff --git a/libpthread/linuxthreads/internals.h b/libpthread/linuxthreads/internals.h index d4a9b85ba..b82a0365a 100644 --- a/libpthread/linuxthreads/internals.h +++ b/libpthread/linuxthreads/internals.h @@ -316,6 +316,8 @@ static inline int invalid_handle(pthread_handle h, pthread_t id) /* The page size we can get from the system. This should likely not be changed by the machine file but, you never know. */ +extern size_t _dl_pagesize; +#include #ifndef PAGE_SIZE #define PAGE_SIZE (sysconf (_SC_PAGESIZE)) #endif @@ -327,19 +329,19 @@ static inline int invalid_handle(pthread_handle h, pthread_t id) #ifdef __ARCH_HAS_MMU__ #define STACK_SIZE (2 * 1024 * 1024) #else -#define STACK_SIZE (4 * PAGE_SIZE) +#define STACK_SIZE (4 * _dl_pagesize) #endif #endif /* The initial size of the thread stack. Must be a multiple of PAGE_SIZE. */ #ifndef INITIAL_STACK_SIZE -#define INITIAL_STACK_SIZE (4 * PAGE_SIZE) +#define INITIAL_STACK_SIZE (4 * _dl_pagesize) #endif /* Size of the thread manager stack. The "- 32" avoids wasting space with some malloc() implementations. */ #ifndef THREAD_MANAGER_STACK_SIZE -#define THREAD_MANAGER_STACK_SIZE (2 * PAGE_SIZE - 32) +#define THREAD_MANAGER_STACK_SIZE (2 * _dl_pagesize - 32) #endif /* The base of the "array" of thread stacks. The array will grow down from -- cgit v1.2.3