From b20760c02318fa6da228587c401a8b2bb22a1aab Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Sun, 15 Sep 2013 02:00:32 +0000 Subject: support configurable page size on mips, powerpc and microblaze PAGE_SIZE was hardcoded to 4096, which is historically what most systems use, but on several archs it is a kernel config parameter, user space can only know it at execution time from the aux vector. PAGE_SIZE and PAGESIZE are not defined on archs where page size is a runtime parameter, applications should use sysconf(_SC_PAGE_SIZE) to query it. Internally libc code defines PAGE_SIZE to libc.page_size, which is set to aux[AT_PAGESZ] in __init_libc and early in __dynlink as well. (Note that libc.page_size can be accessed without GOT, ie. before relocations are done) Some fpathconf settings are hardcoded to 4096, these should be actually queried from the filesystem using statfs. --- arch/microblaze/bits/limits.h | 1 - arch/microblaze/reloc.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'arch/microblaze') diff --git a/arch/microblaze/bits/limits.h b/arch/microblaze/bits/limits.h index 65a3dd64..fbc6d238 100644 --- a/arch/microblaze/bits/limits.h +++ b/arch/microblaze/bits/limits.h @@ -1,6 +1,5 @@ #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -#define PAGE_SIZE 4096 #define LONG_BIT 32 #endif diff --git a/arch/microblaze/reloc.h b/arch/microblaze/reloc.h index 60f74225..7bf3a5b0 100644 --- a/arch/microblaze/reloc.h +++ b/arch/microblaze/reloc.h @@ -49,7 +49,7 @@ void __reloc_self(int c, size_t *a, size_t *dynv) for (a+=c+1; *a; a++); for (a++; *a; a+=2) if (*a<20) t[*a] = a[1]; base = (char *)t[AT_BASE]; - if (!base) base = (char *)(t[AT_PHDR] & -4096); + if (!base) base = (char *)(t[AT_PHDR] & -t[AT_PAGESZ]); for (a=dynv; *a; a+=2) if (*a<20) t[*a] = a[1]; n = t[DT_RELASZ]; for (a=(void *)(base+t[DT_RELA]); n; a+=3, n-=12) -- cgit v1.2.1