1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

*** empty log message ***

Thu Sep  5 13:18:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/init-first.c (__libc_argc, __libc_argv):
	New variables.
	(init1): Initialize them.
	* hurd/hurdinit.c (_hurd_setproc): Now that happens to be
	available, pass __libc_argv in call to __proc_set_arg_locations.

	* gmon/gmon.c (write_hist): Call __profile_frequency instead of
	hertz. 
	(hertz): Delete function.
	* gmon/Makefile (routines): Add `prof-freq'.
	* sysdeps/generic/prof-freq.c: New file.
	* sysdeps/mach/hurd/prof-freq.c: New (stubby) file.
	* sysdeps/mach/hurd/profil.c (profile_tick): New variable.
	(update_waiter): Store frequency in profile_tick.
	(__profile_frequency): New function.

	* sysdeps/mach/hurd/sendto.c (sendto): Use prototype definition
	syntax.

	* Rules (generated): Restore reference to $(generated).

	* mach/Machrules (mig.uh, mig.__h): Don't include $(user-MIGFLAGS)
	here. 

 	* malloc/free.c (free): __lib_malloc_lock -> __libc_malloc_lock.
	
	* malloc/free.c: Provide extern decl of __libc_malloc_lock.
	* malloc/realloc.c: Likewise.
	* malloc/malloc-find.c: Likewise.
	* malloc/malloc-size.c: Likewise.
	* malloc/malloc-walk.c: Likewise.
	* malloc/memalign.c: Likewise.

  	* mach/Machrules (mig.uh, mig.__h): Include $(user-MIGFLAGS) and
This commit is contained in:
Thomas Bushnell, BSG
1996-09-06 00:08:55 +00:00
parent 57ba7bb471
commit acf51e0261
11 changed files with 126 additions and 41 deletions

View File

@ -1,3 +1,38 @@
Thu Sep 5 13:18:25 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* sysdeps/mach/hurd/i386/init-first.c (__libc_argc, __libc_argv):
New variables.
(init1): Initialize them.
* hurd/hurdinit.c (_hurd_setproc): Now that happens to be
available, pass __libc_argv in call to __proc_set_arg_locations.
* gmon/gmon.c (write_hist): Call __profile_frequency instead of
hertz.
(hertz): Delete function.
* gmon/Makefile (routines): Add `prof-freq'.
* sysdeps/generic/prof-freq.c: New file.
* sysdeps/mach/hurd/prof-freq.c: New (stubby) file.
* sysdeps/mach/hurd/profil.c (profile_tick): New variable.
(update_waiter): Store frequency in profile_tick.
(__profile_frequency): New function.
* sysdeps/mach/hurd/sendto.c (sendto): Use prototype definition
syntax.
* Rules (generated): Restore reference to $(generated).
* mach/Machrules (mig.uh, mig.__h): Don't include $(user-MIGFLAGS)
here.
* malloc/free.c (free): __lib_malloc_lock -> __libc_malloc_lock.
* malloc/free.c: Provide extern decl of __libc_malloc_lock.
* malloc/realloc.c: Likewise.
* malloc/malloc-find.c: Likewise.
* malloc/malloc-size.c: Likewise.
* malloc/malloc-walk.c: Likewise.
* malloc/memalign.c: Likewise.
Thu Sep 5 03:20:42 1996 Ulrich Drepper <drepper@cygnus.com> Thu Sep 5 03:20:42 1996 Ulrich Drepper <drepper@cygnus.com>
Change configuration and Makefiles to allow add-ons to have a Change configuration and Makefiles to allow add-ons to have a
@ -276,7 +311,7 @@ Thu Aug 29 12:00:30 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
spelling error of _hurd_itimerval. spelling error of _hurd_itimerval.
* mach/Makefile (MIGFLAGS-mach/mach4): Define variable. * mach/Makefile (MIGFLAGS-mach/mach4): Define variable.
mach/Machrules (mig.uh, mig.__h): Include $(user-MIGFLAGS) and * mach/Machrules (mig.uh, mig.__h): Include $(user-MIGFLAGS) and
$(MIGFLAGS-$*) here too, as well as in the code-generating MiG calls. $(MIGFLAGS-$*) here too, as well as in the code-generating MiG calls.
* hurd/hurdinline.c: Include "hurd.h" for function definitions too. * hurd/hurdinline.c: Include "hurd.h" for function definitions too.

3
Rules
View File

@ -136,7 +136,8 @@ subdir_dist: dist
# Convenient target to update all the generated source files. # Convenient target to update all the generated source files.
.PHONY: generated .PHONY: generated
generated: $(addprefix $(common-objpfx),$(common-generated)) generated: $(addprefix $(common-objpfx),$(common-generated)) \
$(addprefix $(objpfx),$(generated))
ifndef libc.so-version ifndef libc.so-version
# Undefine this because it can't work when we libc.so is unversioned. # Undefine this because it can't work when we libc.so is unversioned.

View File

@ -23,7 +23,7 @@ subdir := gmon
headers := sys/gmon.h sys/gmon_out.h headers := sys/gmon.h sys/gmon_out.h
distribute := machine-gmon.h profil-counter.h distribute := machine-gmon.h profil-counter.h
routines := gmon mcount profil bb_init_func bb_exit_func routines := gmon mcount profil bb_init_func bb_exit_func prof-freq
include ../Rules include ../Rules

View File

@ -57,27 +57,6 @@ static int s_scale;
#define ERR(s) write(2, s, sizeof(s) - 1) #define ERR(s) write(2, s, sizeof(s) - 1)
/*
* Discover the tick frequency of the machine if something goes wrong,
* we return 0, an impossible hertz.
*/
static int
DEFUN_VOID(hertz)
{
struct itimerval tim;
tim.it_interval.tv_sec = 0;
tim.it_interval.tv_usec = 1;
tim.it_value.tv_sec = 0;
tim.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &tim, 0);
setitimer(ITIMER_REAL, 0, &tim);
if (tim.it_interval.tv_usec < 2)
return 0;
return (1000000 / tim.it_interval.tv_usec);
}
/* /*
* Control profiling * Control profiling
* profiling is what mcount checks to see if * profiling is what mcount checks to see if
@ -183,7 +162,7 @@ DEFUN(write_hist, (fd), int fd)
if (_gmonparam.kcountsize > 0) if (_gmonparam.kcountsize > 0)
{ {
size = _gmonparam.kcountsize / sizeof(HISTCOUNTER); size = _gmonparam.kcountsize / sizeof(HISTCOUNTER);
rate = hertz(); rate = __profile_frequency();
bcopy(&_gmonparam.lowpc, &thdr.low_pc, sizeof(thdr.low_pc)); bcopy(&_gmonparam.lowpc, &thdr.low_pc, sizeof(thdr.low_pc));
bcopy(&_gmonparam.highpc, &thdr.high_pc, sizeof(thdr.high_pc)); bcopy(&_gmonparam.highpc, &thdr.high_pc, sizeof(thdr.high_pc));
bcopy(&size, &thdr.hist_size, sizeof(thdr.hist_size)); bcopy(&size, &thdr.hist_size, sizeof(thdr.hist_size));

View File

@ -165,6 +165,7 @@ _hurd_setproc (process_t procserver)
{ {
error_t err; error_t err;
mach_port_t oldmsg; mach_port_t oldmsg;
extern char **__libc_argv;
/* Give the proc server our message port. */ /* Give the proc server our message port. */
if (err = __proc_setmsgport (procserver, _hurd_msgport, &oldmsg)) if (err = __proc_setmsgport (procserver, _hurd_msgport, &oldmsg))
@ -175,8 +176,8 @@ _hurd_setproc (process_t procserver)
/* Tell the proc server where our args and environment are. */ /* Tell the proc server where our args and environment are. */
if (err = __proc_set_arg_locations (procserver, if (err = __proc_set_arg_locations (procserver,
/* We don't know the ARGV location. */ _hide_arguments ? 0 :
(vm_address_t) 0, (vm_address_t) __libc_argv,
_hide_environment ? 0 : _hide_environment ? 0 :
(vm_address_t) __environ)) (vm_address_t) __environ))
return err; return err;

View File

@ -149,14 +149,14 @@ $(objpfx)%.uh:; $(mig.uh)
define mig.uh define mig.uh
$(make-target-directory) $(make-target-directory)
$(include-%.defs) | \ $(include-%.defs) | \
$(MIG) - /dev/null $(MIGFLAGS) $(user-MIGFLAGS) $(MIGFLAGS-$*) \ $(MIG) - /dev/null $(MIGFLAGS) $(MIGFLAGS-$*) \
-header $@ -server /dev/null -user /dev/null -header $@ -server /dev/null -user /dev/null
endef endef
$(objpfx)%.__h:; $(mig.__h) $(objpfx)%.__h:; $(mig.__h)
define mig.__h define mig.__h
$(make-target-directory) $(make-target-directory)
$(include-%.defs) | \ $(include-%.defs) | \
$(MIG) - /dev/null $(MIGFLAGS) $(user-MIGFLAGS) $(MIGFLAGS-$*) -prefix __ \ $(MIG) - /dev/null $(MIGFLAGS) $(MIGFLAGS-$*) -prefix __ \
-header $@ -server /dev/null -user /dev/null -header $@ -server /dev/null -user /dev/null
endef endef

View File

@ -0,0 +1,59 @@
/* Return frequency of ticks reported by profil. Generic version. */
/*-
* Copyright (c) 1983, 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/types.h>
#include <sys/time.h>
int
__profile_frequency ()
{
/*
* Discover the tick frequency of the machine if something goes wrong,
* we return 0, an impossible hertz.
*/
struct itimerval tim;
tim.it_interval.tv_sec = 0;
tim.it_interval.tv_usec = 1;
tim.it_value.tv_sec = 0;
tim.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &tim, 0);
setitimer(ITIMER_REAL, 0, &tim);
if (tim.it_interval.tv_usec < 2)
return 0;
return (1000000 / tim.it_interval.tv_usec);
}

View File

@ -31,15 +31,16 @@ extern void __libc_global_ctors (void);
int __libc_multiple_libcs = 1; int __libc_multiple_libcs = 1;
int __libc_argc;
char **__libc_argv;
void *(*_cthread_init_routine) (void); /* Returns new SP to use. */ void *(*_cthread_init_routine) (void); /* Returns new SP to use. */
void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__)); void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__));
/* Things that want to be run before _hurd_init or much anything else. /* Things that want to be run before _hurd_init or much anything else.
Importantly, these are called before anything tries to use malloc. */ Importantly, these are called before anything tries to use malloc. */
DEFINE_HOOK (_hurd_preinit_hook, (void)); DEFINE_HOOK (_hurd_preinit_hook, (void));
static void static void
init1 (int argc, char *arg0, ...) init1 (int argc, char *arg0, ...)
{ {
@ -47,6 +48,8 @@ init1 (int argc, char *arg0, ...)
char **envp = &argv[argc + 1]; char **envp = &argv[argc + 1];
struct hurd_startup_data *d; struct hurd_startup_data *d;
__libc_argc = argc;
__libc_argv = argv;
__environ = envp; __environ = envp;
while (*envp) while (*envp)
++envp; ++envp;

View File

@ -0,0 +1,2 @@
/* __profile_frequency is in sysdeps/mach/hurd/profil.c. This file
is here as a place-holder to prevent the use of sysdeps/generic/prof-freq.c. */

View File

@ -36,6 +36,7 @@ static size_t sample_scale;
static sampled_pc_seqno_t seqno; static sampled_pc_seqno_t seqno;
static struct mutex lock = MUTEX_INITIALIZER; static struct mutex lock = MUTEX_INITIALIZER;
static mach_msg_timeout_t collector_timeout; /* ms between collections. */ static mach_msg_timeout_t collector_timeout; /* ms between collections. */
static int profile_tick;
/* Enable statistical profiling, writing samples of the PC into at most /* Enable statistical profiling, writing samples of the PC into at most
SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling
@ -62,8 +63,7 @@ update_waiter (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
if (! err) if (! err)
{ {
int tick; /* Microseconds per sample. */ err = __task_enable_pc_sampling (__mach_task_self (), &profile_tick,
err = __task_enable_pc_sampling (__mach_task_self (), &tick,
SAMPLED_PC_PERIODIC); SAMPLED_PC_PERIODIC);
if (!err && sample_scale == 0) if (!err && sample_scale == 0)
/* Profiling was not turned on, so the collector thread was /* Profiling was not turned on, so the collector thread was
@ -79,13 +79,19 @@ update_waiter (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
and the kernel buffer size we get the length of time it takes and the kernel buffer size we get the length of time it takes
to fill the buffer; translate that to milliseconds for to fill the buffer; translate that to milliseconds for
mach_msg, and chop it in half for general lag factor. */ mach_msg, and chop it in half for general lag factor. */
collector_timeout = MAX_PC_SAMPLES * tick / 1000 / 2; collector_timeout = MAX_PC_SAMPLES * profile_tick / 1000 / 2;
} }
} }
return err; return err;
} }
int
__profile_frequency ()
{
return profile_tick;
}
int int
profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
{ {

View File

@ -27,13 +27,12 @@ Cambridge, MA 02139, USA. */
/* Send N bytes of BUF on socket FD to peer at address ADDR (which is /* Send N bytes of BUF on socket FD to peer at address ADDR (which is
ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */
int int
sendto (fd, buf, n, flags, addr, addr_len) sendto (int fd,
int fd; const void *buf,
const void *buf; size_t n,
size_t n; int flags,
int flags; const struct sockaddr_un *addr,
const struct sockaddr_un *addr; size_t addr_len)
size_t addr_len;
{ {
addr_port_t aport; addr_port_t aport;
error_t err; error_t err;