mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Emulation of getpagesize() for systems that need it. */
 | |
| 
 | |
| /*
 | |
| 
 | |
| @deftypefn Supplemental int getpagesize (void)
 | |
| 
 | |
| Returns the number of bytes in a page of memory.  This is the
 | |
| granularity of many of the system memory management routines.  No
 | |
| guarantee is made as to whether or not it is the same as the basic
 | |
| memory management hardware page size.
 | |
| 
 | |
| @end deftypefn
 | |
| 
 | |
| BUGS
 | |
| 
 | |
| 	Is intended as a reasonable replacement for systems where this
 | |
| 	is not provided as a system call.  The value of 4096 may or may
 | |
| 	not be correct for the systems where it is returned as the default
 | |
| 	value.
 | |
| 
 | |
| */
 | |
| 
 | |
| #ifndef VMS
 | |
| 
 | |
| #include "config.h"
 | |
| 
 | |
| #include <sys/types.h>
 | |
| #ifdef HAVE_SYS_PARAM_H
 | |
| #include <sys/param.h>
 | |
| #endif
 | |
| 
 | |
| #undef GNU_OUR_PAGESIZE
 | |
| #if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H)
 | |
| #include <unistd.h>
 | |
| #ifdef _SC_PAGESIZE
 | |
| #define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE)
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifndef GNU_OUR_PAGESIZE
 | |
| # ifdef	PAGESIZE
 | |
| #  define	GNU_OUR_PAGESIZE PAGESIZE
 | |
| # else	/* no PAGESIZE */
 | |
| #  ifdef	EXEC_PAGESIZE
 | |
| #   define	GNU_OUR_PAGESIZE EXEC_PAGESIZE
 | |
| #  else	/* no EXEC_PAGESIZE */
 | |
| #   ifdef	NBPG
 | |
| #    define	GNU_OUR_PAGESIZE (NBPG * CLSIZE)
 | |
| #    ifndef	CLSIZE
 | |
| #     define	CLSIZE 1
 | |
| #    endif	/* CLSIZE */
 | |
| #   else	/* no NBPG */
 | |
| #    ifdef	NBPC
 | |
| #     define	GNU_OUR_PAGESIZE NBPC
 | |
| #    else	/* no NBPC */
 | |
| #     define	GNU_OUR_PAGESIZE 4096	/* Just punt and use reasonable value */
 | |
| #    endif /* NBPC */
 | |
| #   endif /* NBPG */
 | |
| #  endif /* EXEC_PAGESIZE */
 | |
| # endif /* PAGESIZE */
 | |
| #endif /* GNU_OUR_PAGESIZE */
 | |
| 
 | |
| int
 | |
| getpagesize (void)
 | |
| {
 | |
|   return (GNU_OUR_PAGESIZE);
 | |
| }
 | |
| 
 | |
| #else /* VMS */
 | |
| 
 | |
| #if 0	/* older distributions of gcc-vms are missing <syidef.h> */
 | |
| #include <syidef.h>
 | |
| #endif
 | |
| #ifndef SYI$_PAGE_SIZE	/* VMS V5.4 and earlier didn't have this yet */
 | |
| #define SYI$_PAGE_SIZE 4452
 | |
| #endif
 | |
| extern unsigned long lib$getsyi(const unsigned short *,...);
 | |
| 
 | |
| int getpagesize (void)
 | |
| {
 | |
|   long pagsiz = 0L;
 | |
|   unsigned short itmcod = SYI$_PAGE_SIZE;
 | |
| 
 | |
|   (void) lib$getsyi (&itmcod, (void *) &pagsiz);
 | |
|   if (pagsiz == 0L)
 | |
|     pagsiz = 512L;	/* VAX default */
 | |
|   return (int) pagsiz;
 | |
| }
 | |
| 
 | |
| #endif /* VMS */
 |