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. --- src/internal/libc.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/internal/libc.h') diff --git a/src/internal/libc.h b/src/internal/libc.h index c8fbe3fd..3350b3d1 100644 --- a/src/internal/libc.h +++ b/src/internal/libc.h @@ -3,6 +3,7 @@ #include #include +#include struct __libc { void *main_thread; @@ -14,10 +15,15 @@ struct __libc { FILE *ofl_head; int ofl_lock[2]; size_t tls_size; + size_t page_size; }; extern size_t __hwcap; +#ifndef PAGE_SIZE +#define PAGE_SIZE libc.page_size +#endif + #if !defined(__PIC__) || (100*__GNUC__+__GNUC_MINOR__ >= 303 && !defined(__PCC__)) #ifdef __PIC__ -- cgit v1.2.1