xref: /netbsd-src/external/gpl3/gcc/dist/libiberty/getpagesize.c (revision 4fee23f98c45552038ad6b5bd05124a41302fb01)
1*4fee23f9Smrg /* Emulation of getpagesize() for systems that need it. */
2*4fee23f9Smrg 
3*4fee23f9Smrg /*
4*4fee23f9Smrg 
5*4fee23f9Smrg @deftypefn Supplemental int getpagesize (void)
6*4fee23f9Smrg 
7*4fee23f9Smrg Returns the number of bytes in a page of memory.  This is the
8*4fee23f9Smrg granularity of many of the system memory management routines.  No
9*4fee23f9Smrg guarantee is made as to whether or not it is the same as the basic
10*4fee23f9Smrg memory management hardware page size.
11*4fee23f9Smrg 
12*4fee23f9Smrg @end deftypefn
13*4fee23f9Smrg 
14*4fee23f9Smrg BUGS
15*4fee23f9Smrg 
16*4fee23f9Smrg 	Is intended as a reasonable replacement for systems where this
17*4fee23f9Smrg 	is not provided as a system call.  The value of 4096 may or may
18*4fee23f9Smrg 	not be correct for the systems where it is returned as the default
19*4fee23f9Smrg 	value.
20*4fee23f9Smrg 
21*4fee23f9Smrg */
22*4fee23f9Smrg 
23*4fee23f9Smrg #ifndef VMS
24*4fee23f9Smrg 
25*4fee23f9Smrg #include "config.h"
26*4fee23f9Smrg 
27*4fee23f9Smrg #include <sys/types.h>
28*4fee23f9Smrg #ifdef HAVE_SYS_PARAM_H
29*4fee23f9Smrg #include <sys/param.h>
30*4fee23f9Smrg #endif
31*4fee23f9Smrg 
32*4fee23f9Smrg #undef GNU_OUR_PAGESIZE
33*4fee23f9Smrg #if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H)
34*4fee23f9Smrg #include <unistd.h>
35*4fee23f9Smrg #ifdef _SC_PAGESIZE
36*4fee23f9Smrg #define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE)
37*4fee23f9Smrg #endif
38*4fee23f9Smrg #endif
39*4fee23f9Smrg 
40*4fee23f9Smrg #ifndef GNU_OUR_PAGESIZE
41*4fee23f9Smrg # ifdef	PAGESIZE
42*4fee23f9Smrg #  define	GNU_OUR_PAGESIZE PAGESIZE
43*4fee23f9Smrg # else	/* no PAGESIZE */
44*4fee23f9Smrg #  ifdef	EXEC_PAGESIZE
45*4fee23f9Smrg #   define	GNU_OUR_PAGESIZE EXEC_PAGESIZE
46*4fee23f9Smrg #  else	/* no EXEC_PAGESIZE */
47*4fee23f9Smrg #   ifdef	NBPG
48*4fee23f9Smrg #    define	GNU_OUR_PAGESIZE (NBPG * CLSIZE)
49*4fee23f9Smrg #    ifndef	CLSIZE
50*4fee23f9Smrg #     define	CLSIZE 1
51*4fee23f9Smrg #    endif	/* CLSIZE */
52*4fee23f9Smrg #   else	/* no NBPG */
53*4fee23f9Smrg #    ifdef	NBPC
54*4fee23f9Smrg #     define	GNU_OUR_PAGESIZE NBPC
55*4fee23f9Smrg #    else	/* no NBPC */
56*4fee23f9Smrg #     define	GNU_OUR_PAGESIZE 4096	/* Just punt and use reasonable value */
57*4fee23f9Smrg #    endif /* NBPC */
58*4fee23f9Smrg #   endif /* NBPG */
59*4fee23f9Smrg #  endif /* EXEC_PAGESIZE */
60*4fee23f9Smrg # endif /* PAGESIZE */
61*4fee23f9Smrg #endif /* GNU_OUR_PAGESIZE */
62*4fee23f9Smrg 
63*4fee23f9Smrg int
getpagesize(void)64*4fee23f9Smrg getpagesize (void)
65*4fee23f9Smrg {
66*4fee23f9Smrg   return (GNU_OUR_PAGESIZE);
67*4fee23f9Smrg }
68*4fee23f9Smrg 
69*4fee23f9Smrg #else /* VMS */
70*4fee23f9Smrg 
71*4fee23f9Smrg #if 0	/* older distributions of gcc-vms are missing <syidef.h> */
72*4fee23f9Smrg #include <syidef.h>
73*4fee23f9Smrg #endif
74*4fee23f9Smrg #ifndef SYI$_PAGE_SIZE	/* VMS V5.4 and earlier didn't have this yet */
75*4fee23f9Smrg #define SYI$_PAGE_SIZE 4452
76*4fee23f9Smrg #endif
77*4fee23f9Smrg extern unsigned long lib$getsyi(const unsigned short *,...);
78*4fee23f9Smrg 
getpagesize(void)79*4fee23f9Smrg int getpagesize (void)
80*4fee23f9Smrg {
81*4fee23f9Smrg   long pagsiz = 0L;
82*4fee23f9Smrg   unsigned short itmcod = SYI$_PAGE_SIZE;
83*4fee23f9Smrg 
84*4fee23f9Smrg   (void) lib$getsyi (&itmcod, (void *) &pagsiz);
85*4fee23f9Smrg   if (pagsiz == 0L)
86*4fee23f9Smrg     pagsiz = 512L;	/* VAX default */
87*4fee23f9Smrg   return (int) pagsiz;
88*4fee23f9Smrg }
89*4fee23f9Smrg 
90*4fee23f9Smrg #endif /* VMS */
91