diff options
-rw-r--r-- | sysdeps/mach/hurd/Makefile | 4 | ||||
-rw-r--r-- | sysdeps/mach/hurd/Versions | 4 | ||||
-rw-r--r-- | sysdeps/mach/hurd/bits/time.h | 62 | ||||
-rw-r--r-- | sysdeps/mach/hurd/clk_tck.c | 40 | ||||
-rw-r--r-- | sysdeps/mach/hurd/getrusage.c | 80 |
5 files changed, 190 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile index 9ad681d550..b18f9f100e 100644 --- a/sysdeps/mach/hurd/Makefile +++ b/sysdeps/mach/hurd/Makefile @@ -183,4 +183,8 @@ ifeq (hurd, $(subdir)) sysdep_routines += cthreads endif +ifeq (posix, $(subdir)) +sysdep_routines += clk_tck +endif + endif # in-Makerules diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions index e86d225dd5..9a08c414fd 100644 --- a/sysdeps/mach/hurd/Versions +++ b/sysdeps/mach/hurd/Versions @@ -10,6 +10,10 @@ libc { # functions with a weak definition in the dynamic linker __getcwd; __mmap; } + GLIBC_2.1.1 { + # functions used in inline functions or macros + __libc_clk_tck; + } } ld.so { diff --git a/sysdeps/mach/hurd/bits/time.h b/sysdeps/mach/hurd/bits/time.h new file mode 100644 index 0000000000..14c7146243 --- /dev/null +++ b/sysdeps/mach/hurd/bits/time.h @@ -0,0 +1,62 @@ +/* System-dependent timing definitions. Hurd version. + Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* + * Never include this file directly; use <time.h> instead. + */ + +#ifndef __need_timeval +# ifndef _BITS_TIME_H +# define _BITS_TIME_H 1 + +/* ISO/IEC 9899:1990 7.12.1: <time.h> + The macro `CLOCKS_PER_SEC' is the number per second of the value + returned by the `clock' function. */ +/* CAE XSH, Issue 4, Version 2: <time.h> + The value of CLOCKS_PER_SEC is required to be 1 million on all + XSI-conformant systems. */ +# define CLOCKS_PER_SEC 1000000 + +# ifndef __STRICT_ANSI__ +/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK + presents the real value for clock ticks per second for the system. + This value is determined at runtime. */ +# define CLK_TCK __libc_clk_tck() +extern int __libc_clk_tck __P ((void)) __attribute__ ((const)); +# endif + +# endif /* bits/time.h */ +#endif + + +#ifdef __need_timeval +# undef __need_timeval +# ifndef _STRUCT_TIMEVAL +# define _STRUCT_TIMEVAL 1 +# include <bits/types.h> + +/* A time value that is accurate to the nearest + microsecond but also has a range of years. */ +struct timeval + { + __time_t tv_sec; /* Seconds. */ + __time_t tv_usec; /* Microseconds. */ + }; +# endif /* struct timeval */ +#endif /* need timeval */ diff --git a/sysdeps/mach/hurd/clk_tck.c b/sysdeps/mach/hurd/clk_tck.c new file mode 100644 index 0000000000..9656e37f83 --- /dev/null +++ b/sysdeps/mach/hurd/clk_tck.c @@ -0,0 +1,40 @@ +/* Return run-time value of CLK_TCK for Hurd. + Copyright (C) 1999 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <time.h> +#include <unistd.h> +#include <mach.h> +#include <mach/host_info.h> + +int +__libc_clk_tck () +{ + struct host_sched_info hsi; + mach_msg_type_number_t count; + error_t err; + + count = HOST_SCHED_INFO_COUNT; + err = __host_info (__mach_task_self (), HOST_SCHED_INFO, + (host_info_t) &hsi, &count); + if (err) + return 100; + + return hsi.min_quantum; +} diff --git a/sysdeps/mach/hurd/getrusage.c b/sysdeps/mach/hurd/getrusage.c new file mode 100644 index 0000000000..3ead1d7f14 --- /dev/null +++ b/sysdeps/mach/hurd/getrusage.c @@ -0,0 +1,80 @@ +/* getrusage -- Get resource usage information about processes. Hurd version. + Copyright (C) 1999 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <string.h> +#include <sys/resource.h> +#include <mach.h> +#include <mach/task_info.h> +#include <hurd.h> + +/* Return resource usage information on process indicated by WHO + and put it in *USAGE. Returns 0 for success, -1 for failure. */ +int +__getrusage (who, usage) + enum __rusage_who who; + struct rusage *usage; +{ + struct task_basic_info bi; + struct task_thread_times_info tti; + mach_msg_type_number_t count; + error_t err; + + switch (who) + { + case RUSAGE_SELF: + count = TASK_BASIC_INFO_COUNT; + err = __task_info (__mach_task_self (), TASK_BASIC_INFO, + (task_info_t) &bi, &count); + if (err) + return __hurd_fail (err); + + count = TASK_THREAD_TIMES_INFO_COUNT; + err = __task_info (__mach_task_self (), TASK_THREAD_TIMES_INFO, + (task_info_t) &tti, &count); + if (err) + return __hurd_fail (err); + + time_value_add (&bi.user_time, &tti.user_time); + time_value_add (&bi.system_time, &tti.system_time); + + memset (usage, 0, sizeof (struct rusage)); + + usage->ru_utime.tv_sec = bi.user_time.seconds; + usage->ru_utime.tv_usec = bi.user_time.microseconds; + usage->ru_stime.tv_sec = bi.system_time.seconds; + usage->ru_stime.tv_usec = bi.system_time.microseconds; + + break; + + case RUSAGE_CHILDREN: + /* XXX Not implemented yet. However, zero out USAGE to be + consistent with the wait3 and wait4 functions. */ + memset (usage, 0, sizeof (struct rusage)); + + break; + + default: + return EINVAL; + } + + return 0; +} + +weak_alias (__getrusage, getrusage) |