- fix hertz()
- fix error and warning messages
This commit is contained in:
christos 2010-03-01 19:52:38 +00:00
parent 4146a232bf
commit 4fc887422c

View File

@ -1,4 +1,4 @@
/* $NetBSD: gmon.c,v 1.31 2010/01/17 23:09:02 wiz Exp $ */
/* $NetBSD: gmon.c,v 1.32 2010/03/01 19:52:38 christos Exp $ */
/*
* Copyright (c) 2003, 2004 Wasabi Systems, Inc.
@ -69,7 +69,7 @@
#if 0
static char sccsid[] = "@(#)gmon.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID("$NetBSD: gmon.c,v 1.31 2010/01/17 23:09:02 wiz Exp $");
__RCSID("$NetBSD: gmon.c,v 1.32 2010/03/01 19:52:38 christos Exp $");
#endif
#endif
@ -104,24 +104,21 @@ static u_int s_scale;
/* see profil(2) where this is describe (incorrectly) */
#define SCALE_1_TO_1 0x10000L
#define ERR(s) write(STDERR_FILENO, s, sizeof(s))
void moncontrol __P((int));
void monstartup __P((u_long, u_long));
void _mcleanup __P((void));
static int hertz __P((void));
void moncontrol(int);
void monstartup(u_long, u_long);
void _mcleanup(void);
static int hertz(void);
#ifdef _REENTRANT
static void _m_gmon_destructor(void *);
struct gmonparam *_m_gmon_alloc(void) __attribute__((__no_instrument_function__));
struct gmonparam *_m_gmon_alloc(void)
__attribute__((__no_instrument_function__));
static void _m_gmon_merge(void);
static void _m_gmon_merge_two(struct gmonparam *, struct gmonparam *);
#endif
void
monstartup(lowpc, highpc)
u_long lowpc;
u_long highpc;
monstartup(u_long lowpc, u_long highpc)
{
u_long o;
char *cp;
@ -146,11 +143,11 @@ monstartup(lowpc, highpc)
cp = sbrk((intptr_t)(p->kcountsize + p->fromssize + p->tossize));
if (cp == (char *)-1) {
ERR("monstartup: out of memory\n");
warnx("%s: out of memory", __func__);
return;
}
#ifdef notdef
memset(cp, 0, p->kcountsize + p->fromssize + p->tossize);
(void)memset(cp, 0, p->kcountsize + p->fromssize + p->tossize);
#endif
p->tos = (struct tostruct *)(void *)cp;
cp += (size_t)p->tossize;
@ -350,10 +347,12 @@ _m_gmon_merge(void)
mutex_lock(&_gmonlock);
for (q = _gmonfree; q != NULL; q = (struct gmonparam *)(void *)q->kcount)
for (q = _gmonfree; q != NULL;
q = (struct gmonparam *)(void *)q->kcount)
_m_gmon_merge_two(&_gmonparam, q);
for (q = _gmoninuse; q != NULL; q = (struct gmonparam *)(void *)q->kcount) {
for (q = _gmoninuse; q != NULL;
q = (struct gmonparam *)(void *)q->kcount) {
q->state = GMON_PROF_OFF;
_m_gmon_merge_two(&_gmonparam, q);
}
@ -363,7 +362,7 @@ _m_gmon_merge(void)
#endif
void
_mcleanup()
_mcleanup(void)
{
int fd;
int fromindex;
@ -390,13 +389,13 @@ _mcleanup()
* our real one.
*/
if (issetugid() && (geteuid() != getuid() || getegid() != getgid())) {
warnx("mcount: Profiling of set{u,g}id binaries is not"
" allowed");
warnx("%s: Profiling of set{u,g}id binaries is not"
" allowed", __func__);
return;
}
if (p->state == GMON_PROF_ERROR)
ERR("_mcleanup: tos overflow\n");
warnx("%s: tos overflow", __func__);
size = sizeof(clockinfo);
mib[0] = CTL_KERN;
@ -422,8 +421,9 @@ _mcleanup()
return;
if (snprintf(buf, sizeof buf, "%s/%d.%s",
profdir, getpid(), getprogname()) >= (int)(sizeof buf)) {
warnx("_mcleanup: internal buffer overflow, PROFDIR too long");
profdir, getpid(), getprogname()) >= (int)(sizeof buf)) {
warnx("%s: internal buffer overflow, PROFDIR too long",
__func__);
return;
}
@ -434,13 +434,13 @@ _mcleanup()
fd = open(proffile , O_CREAT|O_TRUNC|O_WRONLY, 0666);
if (fd < 0) {
warn("mcount: Cannot open `%s'", proffile);
warn("%s: Cannot open `%s'", __func__, proffile);
return;
}
#ifdef DEBUG
logfd = open("gmon.log", O_CREAT|O_TRUNC|O_WRONLY, 0664);
if (logfd < 0) {
warn("mcount: Cannot open `gmon.log'");
warn("%s: Cannot open `%s'", __func__, "gmon.log");
return;
}
len = snprintf(buf2, sizeof buf2, "[mcleanup1] kcount %p ssiz %lu\n",
@ -477,12 +477,12 @@ _mcleanup()
rawarc.raw_frompc = frompc;
rawarc.raw_selfpc = p->tos[toindex].selfpc;
rawarc.raw_count = p->tos[toindex].count;
write(fd, &rawarc, sizeof rawarc);
(void)write(fd, &rawarc, sizeof rawarc);
}
}
close(fd);
(void)close(fd);
#ifdef DEBUG
close(logfd);
(void)close(logfd);
#endif
}
@ -492,8 +492,7 @@ _mcleanup()
* all the data structures are ready.
*/
void
moncontrol(mode)
int mode;
moncontrol(int mode)
{
struct gmonparam *p = &_gmonparam;
@ -514,17 +513,31 @@ moncontrol(mode)
* if something goes wrong, we return 0, an impossible hertz.
*/
static int
hertz()
hertz(void)
{
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 (int)(1000000 / tim.it_interval.tv_usec);
struct itimerspec tim;
timer_t t;
int rv = 0;
tim.it_interval.tv_sec = 0;
tim.it_interval.tv_nsec = 1;
tim.it_value.tv_sec = 0;
tim.it_value.tv_nsec = 0;
if (timer_create(CLOCK_REALTIME, NULL, &t) == -1)
return 0;
if (timer_settime(t, 0, &tim, NULL) == -1)
goto out;
if (timer_gettime(t, &tim) == -1)
goto out;
if (tim.it_interval.tv_nsec < 2)
goto out;
rv = (int)(1000000000LL / tim.it_interval.tv_nsec);
out:
(void)timer_delete(t);
return rv;
}