OSDN Git Service

include:
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Feb 2003 00:27:04 +0000 (00:27 +0000)
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Feb 2003 00:27:04 +0000 (00:27 +0000)
* libiberty.h (physmem_total, physmem_available): Prototype.

libiberty:
* Makefile.in (CFILES): Add physmem.c.
(REQUIRED_OFILES): Add physmem.o.
* configure.in: Check for sys/pstat.h.
(checkfuncs): Add pstat_getstatic and pstat_getdynamic.
* physmem.c: New file, copied from textutils.

* config.in, configure: Regenerated.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63198 138bc75d-0d04-0410-961f-82ee72b054a4

include/ChangeLog
include/libiberty.h
libiberty/ChangeLog
libiberty/Makefile.in
libiberty/config.in
libiberty/configure
libiberty/configure.in
libiberty/physmem.c [new file with mode: 0644]

index 9724e6a..861aefc 100644 (file)
@@ -1,3 +1,7 @@
+2003-02-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * libiberty.h (physmem_total, physmem_available): Prototype.
+
 2003-02-20  Daniel Jacobowitz  <drow@mvista.com>
 
        * libiberty.h (lrealpath): Add declaration.
index 0419eb1..dca120e 100644 (file)
@@ -246,6 +246,10 @@ extern char *xstrdup PARAMS ((const char *)) ATTRIBUTE_MALLOC;
 
 extern PTR xmemdup PARAMS ((const PTR, size_t, size_t)) ATTRIBUTE_MALLOC;
 
+/* Physical memory routines.  */
+extern double physmem_total PARAMS ((void));
+extern double physmem_available PARAMS ((void));
+
 /* hex character manipulation routines */
 
 #define _hex_array_size 256
index f470380..2c72bfc 100644 (file)
@@ -1,3 +1,13 @@
+2003-02-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * Makefile.in (CFILES): Add physmem.c.
+       (REQUIRED_OFILES): Add physmem.o.
+       * configure.in: Check for sys/pstat.h.
+       (checkfuncs): Add pstat_getstatic and pstat_getdynamic.
+       * physmem.c: New file, copied from textutils.
+
+       * config.in, configure: Regenerated.
+
 2003-02-20  Daniel Jacobowitz  <drow@mvista.com>
 
        * Makefile.in (CFILES): Add lrealpath.c.
index c576357..a12ebb1 100644 (file)
@@ -145,7 +145,7 @@ CFILES = alloca.c argv.c asprintf.c atexit.c                                \
        partition.c                                                     \
         pex-djgpp.c pex-mpw.c pex-msdos.c pex-os2.c                    \
         pex-unix.c pex-win32.c                                         \
-         putenv.c                                                      \
+         physmem.c putenv.c                                            \
        random.c regex.c rename.c rindex.c                              \
        safe-ctype.c setenv.c sigsetmask.c sort.c spaces.c              \
         splay-tree.c strcasecmp.c strchr.c strdup.c strerror.c         \
@@ -170,7 +170,7 @@ REQUIRED_OFILES = regex.o cplus-dem.o cp-demangle.o md5.o           \
        make-relative-prefix.o                                          \
        make-temp-file.o                                                \
        objalloc.o obstack.o                                            \
-       partition.o @pexecute@                                          \
+       partition.o physmem.o @pexecute@                                                \
        safe-ctype.o sort.o spaces.o splay-tree.o strerror.o            \
         strsignal.o                                                    \
        ternary.o                                                       \
index 738f075..97c5702 100644 (file)
@@ -1,4 +1,4 @@
-/* config.in.  Generated automatically from configure.in by autoheader 2.13.  */
+/* config.in.  Generated automatically from configure.in by autoheader.  */
 
 /* Define to empty if the keyword does not work.  */
 #undef const
 /* Define if you have the <sys/param.h> header file.  */
 #undef HAVE_SYS_PARAM_H
 
+/* Define if you have the <sys/pstat.h> header file.  */
+#undef HAVE_SYS_PSTAT_H
+
 /* Define if you have the <sys/resource.h> header file.  */
 #undef HAVE_SYS_RESOURCE_H
 
index 320d854..75e7564 100755 (executable)
@@ -1356,7 +1356,7 @@ else
 fi
 echo "$ac_t""$CPP" 1>&6
 
-for ac_hdr in sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h
+for ac_hdr in sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
@@ -1738,7 +1738,7 @@ funcs="$funcs waitpid"
 vars="sys_errlist sys_nerr sys_siglist"
 
 checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday"
-checkfuncs="$checkfuncs realpath canonicalize_file_name"
+checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic"
 
 # These are neither executed nor required, but they help keep
 # autoheader happy without adding a bunch of text to acconfig.h.
index d170a9f..71e7a09 100644 (file)
@@ -142,7 +142,7 @@ AC_SUBST_FILE(host_makefile_frag)
 # It's OK to check for header files.  Although the compiler may not be
 # able to link anything, it had better be able to at least compile
 # something.
-AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h)
+AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h)
 AC_HEADER_SYS_WAIT
 AC_HEADER_TIME
 
@@ -207,7 +207,7 @@ funcs="$funcs waitpid"
 vars="sys_errlist sys_nerr sys_siglist"
 
 checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday"
-checkfuncs="$checkfuncs realpath canonicalize_file_name"
+checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic"
 
 # These are neither executed nor required, but they help keep
 # autoheader happy without adding a bunch of text to acconfig.h.
diff --git a/libiberty/physmem.c b/libiberty/physmem.c
new file mode 100644 (file)
index 0000000..c540d18
--- /dev/null
@@ -0,0 +1,92 @@
+/* Calculate the size of physical memory.
+   Copyright 2000, 2001 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Written by Paul Eggert.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if HAVE_SYS_PSTAT_H
+# include <sys/pstat.h>
+#endif
+
+/* Return the total amount of physical memory.  */
+double
+physmem_total (void)
+{
+#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
+  {
+    double pages = sysconf (_SC_PHYS_PAGES);
+    double pagesize = sysconf (_SC_PAGESIZE);
+    if (0 <= pages && 0 <= pagesize)
+      return pages * pagesize;
+  }
+#endif
+
+#if HAVE_PSTAT_GETSTATIC
+  {
+    struct pst_static pss;
+    if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0))
+      {
+       double pages = pss.physical_memory;
+       double pagesize = pss.page_size;
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+  /* Return 0 if we can't determine the value.  */
+  return 0;
+}
+
+/* Return the amount of physical memory available.  */
+double
+physmem_available (void)
+{
+#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
+  {
+    double pages = sysconf (_SC_AVPHYS_PAGES);
+    double pagesize = sysconf (_SC_PAGESIZE);
+    if (0 <= pages && 0 <= pagesize)
+      return pages * pagesize;
+  }
+#endif
+
+#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC
+  {
+    struct pst_static pss;
+    struct pst_dynamic psd;
+    if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)
+       && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0))
+      {
+       double pages = psd.psd_free;
+       double pagesize = pss.page_size;
+       if (0 <= pages && 0 <= pagesize)
+         return pages * pagesize;
+      }
+  }
+#endif
+
+  /* Guess 25% of physical memory.  */
+  return physmem_total () / 4;
+}