bring back gcore from the dead.

This commit is contained in:
christos 2003-01-23 17:34:49 +00:00
parent e9a4b099b2
commit 8dd5658494
4 changed files with 179 additions and 2 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.130 2003/01/22 00:16:39 jhawk Exp $
# $NetBSD: Makefile,v 1.131 2003/01/23 17:34:49 christos Exp $
# from: @(#)Makefile 8.3 (Berkeley) 1/7/94
.include <bsd.own.mk>
@ -9,7 +9,7 @@ SUBDIR= apply apropos asa at audio banner basename biff \
column comm compress crontab crunch ctags cut \
db dirname du eject elf2aout elf2ecoff env error expand \
false fdformat fgen file find finger fmt fold fpr \
from fsplit fstat ftp gencat getconf getopt gprof \
from fsplit fstat ftp gcore gencat getconf getopt gprof \
head hexdump id indent innetgr ipcrm ipcs join jot \
kdump ktrace ktruss lam last lastcomm ldd leave less \
lex locate lock logger login logname look lorder m4 \

5
usr.bin/gcore/Makefile Normal file
View File

@ -0,0 +1,5 @@
# $NetBSD: Makefile,v 1.5 2003/01/23 17:34:50 christos Exp $
PROG= gcore
.include <bsd.prog.mk>

76
usr.bin/gcore/gcore.1 Normal file
View File

@ -0,0 +1,76 @@
.\" Copyright (c) 1983, 1990, 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.
.\"
.\" @(#)gcore.1 8.2 (Berkeley) 4/18/94
.\" $NetBSD: gcore.1,v 1.4 2003/01/23 17:34:50 christos Exp $
.\"
.Dd "April 18, 1994"
.Dt GCORE 1
.Os
.Sh NAME
.Nm gcore
.Nd get core images of running process
.Sh SYNOPSIS
.Nm
.Ar pid Op ...pid
.Sh DESCRIPTION
.Nm
creates a core image of the specified processes
suitable for use with
.Xr gdb 1 .
By default, the core is written to the file
.Dq Pa progname.<core>
(where
.Dq Pa progname
is the program name of the process corresponding to the pid that is given on
the command line) or to what the
.Xr sysctl 8
.Dq Pa proc.<pid>.corename
argument is set to.
.Sh FILES
.Bl -tag -width /var/log/messages -compact
.It Pa progname.<core>
The core image.
.EL
.Dp
.Sh HISTORY
.Nm
appeared in BSD 4.2, dissappeared in
.Nx 1.2 ,
and reappeared in
.Nx 2.0 .
.Sh SEE ALSO
.Xr gdb 1 ,
.Xr sysctl 8
.Sh BUGS
The
.Op Fl o Ar corename
option is not implemented.

96
usr.bin/gcore/gcore.c Normal file
View File

@ -0,0 +1,96 @@
/* $NetBSD: gcore.c,v 1.4 2003/01/23 17:34:50 christos Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Christos Zoulas.
*
* 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 NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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/cdefs.h>
__RCSID("$NetBSD: gcore.c,v 1.4 2003/01/23 17:34:50 christos Exp $");
#include <sys/types.h>
#include <sys/param.h>
#include <sys/time.h>
#include <sys/ptrace.h>
#include <sys/proc.h>
#include <stdio.h>
#include <err.h>
#include <limits.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
static void usage(void) __attribute__((__noreturn__));
static void
usage(void)
{
(void)fprintf(stderr, "Usage: %s <pid> [...<pid>]", getprogname());
exit(1);
}
int
main(int argc, char **argv)
{
int c;
while ((c = getopt(argc, argv, "o:")) != -1)
switch (c) {
case 'o':
errx(1, "-o is not supported yet.");
/*NOTREACHED*/
case '?':
default:
usage();
/*NOTREACHED*/
}
if (optind == argc)
usage();
for (c = optind; c < argc; c++) {
char *ep;
long lval = strtol(argv[c], &ep, 0);
if (argv[c] == '\0' || *ep)
errx(1, "`%s' is not a number.", argv[c]);
if (errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))
err(1, "Pid `%s'", argv[c]);
if (ptrace(PT_DUMPCORE, (pid_t)lval, NULL, 0) == -1)
err(1, "ptrace(PT_DUMPCORE) failed");
}
return 0;
}