diff options
Diffstat (limited to 'toolchain/uClibc/patches/pagesize-fix.patch')
-rw-r--r-- | toolchain/uClibc/patches/pagesize-fix.patch | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/toolchain/uClibc/patches/pagesize-fix.patch b/toolchain/uClibc/patches/pagesize-fix.patch new file mode 100644 index 000000000..789820638 --- /dev/null +++ b/toolchain/uClibc/patches/pagesize-fix.patch @@ -0,0 +1,276 @@ +diff -Nur uClibc-0.9.30.1.orig/ldso/include/ldso.h uClibc-0.9.30.1/ldso/include/ldso.h +--- uClibc-0.9.30.1.orig/ldso/include/ldso.h 2008-05-30 16:35:31.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/include/ldso.h 2009-06-21 19:34:42.324963528 +0200 +@@ -39,6 +39,19 @@ + #include <dl-elf.h> + #include <dl-hash.h> + ++/* common align masks, if not specified by sysdep headers */ ++#ifndef ADDR_ALIGN ++#define ADDR_ALIGN (_dl_pagesize - 1) ++#endif ++ ++#ifndef PAGE_ALIGN ++#define PAGE_ALIGN (~ADDR_ALIGN) ++#endif ++ ++#ifndef OFFS_ALIGN ++#define OFFS_ALIGN (PAGE_ALIGN & ~(1ul << (sizeof(_dl_pagesize) * 8 - 1))) ++#endif ++ + /* For INIT/FINI dependency sorting. */ + struct init_fini_list { + struct init_fini_list *next; +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/arm/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/arm/dl-sysdep.h 2008-09-25 10:35:20.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/arm/dl-sysdep.h 2009-06-21 19:34:42.324963528 +0200 +@@ -55,11 +55,6 @@ + struct elf_resolve; + unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. + ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/avr32/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/avr32/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/avr32/dl-sysdep.h 2008-11-03 16:54:24.000000000 +0100 ++++ uClibc-0.9.30.1/ldso/ldso/avr32/dl-sysdep.h 2009-06-21 19:34:42.324963528 +0200 +@@ -46,11 +46,6 @@ + + unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + #define elf_machine_type_class(type) \ + ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) + +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/bfin/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/bfin/dl-sysdep.h 2008-07-23 13:23:36.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/bfin/dl-sysdep.h 2009-06-21 19:34:42.324963528 +0200 +@@ -67,12 +67,6 @@ + + extern int _dl_linux_resolve(void) __attribute__((__visibility__("hidden"))); + +-/* 4KiB page alignment. Should perhaps be made dynamic using +- getpagesize(), based on AT_PAGESZ from auxvt? */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + struct funcdesc_ht; + + #undef SEND_EARLY_STDERR +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/cris/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/cris/dl-sysdep.h 2008-07-23 13:19:00.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/cris/dl-sysdep.h 2009-06-21 19:34:42.324963528 +0200 +@@ -18,11 +18,6 @@ + struct elf_resolve; + extern unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry); + +-/* 8192 bytes alignment */ +-#define PAGE_ALIGN 0xffffe000 +-#define ADDR_ALIGN 0x1fff +-#define OFFS_ALIGN 0xffffe000 +- + /* The union of reloc-type-classes where the reloc TYPE is a member. + + TYPE is in the class ELF_RTYPE_CLASS_PLT if it can describe a +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/frv/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/frv/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/frv/dl-sysdep.h 2008-07-23 13:23:36.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/frv/dl-sysdep.h 2009-06-21 19:34:42.324963528 +0200 +@@ -51,12 +51,6 @@ + + extern int _dl_linux_resolve(void) __attribute__((__visibility__("hidden"))); + +-/* 16KiB page alignment. Should perhaps be made dynamic using +- getpagesize(), based on AT_PAGESZ from auxvt? */ +-#define PAGE_ALIGN 0xffffc000 +-#define ADDR_ALIGN 0x3fff +-#define OFFS_ALIGN 0x7fffc000 +- + struct funcdesc_ht; + + /* We must force strings used early in the bootstrap into the data +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/i386/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/i386/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/i386/dl-sysdep.h 2009-06-21 19:34:42.328963480 +0200 +@@ -25,11 +25,6 @@ + struct elf_resolve; + extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or + TLS variable, so undefined references should not be allowed to + define the value. +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/m68k/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/m68k/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/m68k/dl-sysdep.h 2009-06-21 19:34:42.328963480 +0200 +@@ -25,11 +25,6 @@ + struct elf_resolve; + extern unsigned long _dl_linux_resolver (struct elf_resolve *, int); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. + ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/mips/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/mips/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/mips/dl-sysdep.h 2009-06-22 20:51:04.324542339 +0200 +@@ -148,14 +148,9 @@ + + /* 4096 bytes alignment */ + #if _MIPS_SIM == _MIPS_SIM_ABI64 +-#define PAGE_ALIGN (~0xfffUL) +-#define ADDR_ALIGN 0xfffUL +-#define OFFS_ALIGN (0x10000000000UL-0x1000) +-#else /* O32 || N32 */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +-#endif /* O32 || N32 */ ++#define OFFS_ALIGN (0x10000000000UL-_dl_pagesize) ++#endif ++/* O32 || N32 */ + + #define elf_machine_type_class(type) ELF_RTYPE_CLASS_PLT + /* MIPS does not have COPY relocs */ +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/powerpc/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/powerpc/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/powerpc/dl-sysdep.h 2009-06-21 19:34:42.328963480 +0200 +@@ -67,11 +67,6 @@ + extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); + void _dl_init_got(unsigned long *lpnt,struct elf_resolve *tpnt); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. + ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/sh/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/sh/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/sh/dl-sysdep.h 2009-06-21 19:34:42.328963480 +0200 +@@ -83,11 +83,6 @@ + + #define do_rem(result, n, base) ((result) = _dl_urem((n), (base))) + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or + TLS variable, so undefined references should not be allowed to + define the value. +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/sh64/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/sh64/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/sh64/dl-sysdep.h 2009-06-21 19:34:42.328963480 +0200 +@@ -25,11 +25,6 @@ + struct elf_resolve; + extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or + TLS variable, so undefined references should not be allowed to + define the value. +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/sparc/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/sparc/dl-sysdep.h 2008-09-15 18:36:11.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/sparc/dl-sysdep.h 2009-06-21 19:34:42.332963990 +0200 +@@ -89,18 +89,6 @@ + #define do_rem(result, n, base) ((result) = sparc_mod(n, base)) + #endif + +-/* 4096 bytes alignment */ +-#if defined(__sparc_v9__) +-/* ...but 8192 is required for mmap() on sparc64 kernel */ +-#define PAGE_ALIGN 0xffffe000 +-#define ADDR_ALIGN 0x1fff +-#define OFFS_ALIGN 0x7fffe000 +-#elif defined(__sparc_v8__) +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +-#endif +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so + PLT entries should not be allowed to define the value. + ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/x86_64/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/x86_64/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/x86_64/dl-sysdep.h 2006-03-08 04:58:13.000000000 +0100 ++++ uClibc-0.9.30.1/ldso/ldso/x86_64/dl-sysdep.h 2009-06-21 19:34:42.332963990 +0200 +@@ -41,11 +41,6 @@ + struct elf_resolve; + extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or + TLS variable, so undefined references should not be allowed to + define the value. +diff -Nur uClibc-0.9.30.1.orig/ldso/ldso/xtensa/dl-sysdep.h uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h +--- uClibc-0.9.30.1.orig/ldso/ldso/xtensa/dl-sysdep.h 2008-07-23 13:19:00.000000000 +0200 ++++ uClibc-0.9.30.1/ldso/ldso/xtensa/dl-sysdep.h 2009-06-21 19:34:42.332963990 +0200 +@@ -76,11 +76,6 @@ + struct elf_resolve; + extern unsigned long _dl_linux_resolver (struct elf_resolve *, int); + +-/* 4096 bytes alignment */ +-#define PAGE_ALIGN 0xfffff000 +-#define ADDR_ALIGN 0xfff +-#define OFFS_ALIGN 0x7ffff000 +- + /* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so + undefined references should not be allowed to define the value. */ + #define elf_machine_type_class(type) \ +diff -Nur uClibc-0.9.30.1.orig/libc/sysdeps/linux/mips/bits/uClibc_page.h uClibc-0.9.30.1/libc/sysdeps/linux/mips/bits/uClibc_page.h +--- uClibc-0.9.30.1.orig/libc/sysdeps/linux/mips/bits/uClibc_page.h 2004-08-14 01:39:45.000000000 +0200 ++++ uClibc-0.9.30.1/libc/sysdeps/linux/mips/bits/uClibc_page.h 2009-06-22 21:04:53.505363149 +0200 +@@ -20,15 +20,17 @@ + #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 ++/* This approach sucks, one should really use sysconf(_SC_PAGESIZE) ++ * instead. The current mips64 kernel only seems to boot with a 16K ++ * page size on a Loongson 2f notebook, so we hardcode it to 16K on ++ * MIPS64 (matching the kernel developer's default) and 4K otherwise. ++ */ ++#ifdef __mips64 + #define PAGE_SHIFT 14 +-#endif ++#else + #define PAGE_SHIFT 12 ++#endif ++ + #define PAGE_SIZE (1UL << PAGE_SHIFT) + #define PAGE_MASK (~(PAGE_SIZE-1)) + |