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:
37
ChangeLog
37
ChangeLog
@ -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
3
Rules
@ -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.
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
23
gmon/gmon.c
23
gmon/gmon.c
@ -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));
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
59
sysdeps/generic/prof-freq.c
Normal file
59
sysdeps/generic/prof-freq.c
Normal 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -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;
|
||||||
|
2
sysdeps/mach/hurd/prof-freq.c
Normal file
2
sysdeps/mach/hurd/prof-freq.c
Normal 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. */
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user