summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-08-13 23:39:45 +0000
committerEric Andersen <andersen@codepoet.org>2004-08-13 23:39:45 +0000
commit64c5a652fb76e999eea27aed777d710d747ed949 (patch)
tree99f55f2b3ed8fd1b6d0fda2523d5a6ee7063b05a
parent9f47eaf3223c17a99cc88aea3287697e2635681f (diff)
Fixup PAGE_SIZE problems
-Erik
-rw-r--r--ldso/include/ldso.h6
-rw-r--r--ldso/ldso/frv/dl-syscalls.h2
-rw-r--r--libc/misc/internals/__uClibc_main.c2
-rw-r--r--libc/stdlib/malloc/malloc.h5
-rw-r--r--libc/sysdeps/linux/alpha/bits/uClibc_page.h28
-rw-r--r--libc/sysdeps/linux/alpha/sys/user.h2
-rw-r--r--libc/sysdeps/linux/common/bits/uClibc_page.h28
-rw-r--r--libc/sysdeps/linux/i386/sys/user.h4
-rw-r--r--libc/sysdeps/linux/mips/bits/uClibc_page.h35
-rw-r--r--libc/sysdeps/linux/mips/sys/user.h4
-rw-r--r--libpthread/linuxthreads/internals.h8
11 files changed, 104 insertions, 20 deletions
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 <dl-syscall.h>
#include <dl-string.h>
/* Pull in the arch specific page size */
-#include <asm/page.h>
-#ifndef PAGE_SIZE
-# define PAGE_SHIFT 12
-# define PAGE_SIZE (1UL << PAGE_SHIFT)
-#endif
+#include <bits/uClibc_page.h>
/* Now the ldso specific headers */
#include <dl-elf.h>
#include <dl-hash.h>
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 <asm/page.h> /* for PAGE_SIZE */
+#include <bits/uClibc_page.h> /* 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 <stdlib.h>
#include <string.h>
#include <elf.h>
-#include <sys/user.h>
+#include <bits/uClibc_page.h>
#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 <asm/page.h>
+#include <bits/uClibc_page.h>
#include <asm/reg.h>
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 <bits/uClibc_page.h>
#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 <bits/uClibc_page.h>
#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 <bits/uClibc_page.h>
#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