comparison libiberty/getpagesize.c @ 0:a06113de4d67

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