Date: Wed, 15 Nov 2000 18:59:26 +0100 From: Adrian Chadd <adrian@freebsd.org> To: jkh@freebsd.org Cc: freebsd-stable@freebsd.org Subject: [tanimura@r.dl.itc.u-tokyo.ac.jp: Re: savecore snafu, dirname vs dirname()] Message-ID: <20001115185926.B6612@roaming.cacheboy.net>
next in thread | raw e-mail | index | archive | help
Hrm. I should MFC this too, or savecore won't work in RELENG_4. :) Mr jkh, can I unbreak RELENG_4 ? Adrian ----- Forwarded message from Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> ----- Date: Wed, 15 Nov 2000 21:04:00 +0900 From: Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> To: steve@megahack.com, Jesse <j@lumiere.net>, Adrian Chadd <adrian@FreeBSD.org> Subject: Re: savecore snafu, dirname vs dirname() Cc: Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> User-Agent: Wanderlust/1.1.1 (Purple Rain) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) MULE XEmacs/21.1 (patch 12) (Channel Islands) (i386--freebsd) On Sun, 12 Nov 2000 20:56:08 -0600 (CST), Steven Farmer <steve@megahack.com> said: Steven> Here's wierd one. It seems to be a mixup between "char *dirname" in Steven> savecore.c and dirname() in libc... Steven> After today's cvsup/build/install, savecore dies during the reboot: Steven> pid 133 (savecore), uid 0: exited on signal 10 (core dumped) (snip) Steven> /usr/libexec/elf/ld: Warning: size of symbol `dirname' changed from 4 to 206 in dirname.o Steven> /usr/libexec/elf/ld: Warning: type of symbol `dirname' changed from 1 to 2 in dirname.o On Wed, 15 Nov 2000 03:28:21 -0800 (PST), Jesse <j@lumiere.net> said: Jesse> I cvsup'd today to 4.2-BETA and did a make world and recompiled my kernel. Jesse> Everything appears to be working fine, except for savecore. Jesse> When savecore is run (either from rc or commandline) with a directory Jesse> argument (required) it core dumps reporting a Bus Error. Jesse> # savecore /var/crash Jesse> Bus error (core dumped) I have seen exactly the same problem in -current, which was fixed in src/sbin/savecore/savecore.c rev 1.34. Attached is the patch to fix the bug. Index: savecore/savecore.c =================================================================== RCS file: /home/ncvs/src/sbin/savecore/savecore.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- savecore/savecore.c 2000/05/09 22:20:14 1.33 +++ savecore/savecore.c 2000/09/03 07:02:00 1.34 @@ -42,7 +42,7 @@ static char sccsid[] = "@(#)savecore.c 8.3 (Berkeley) 1/2/94"; #endif static const char rcsid[] = - "$FreeBSD: src/sbin/savecore/savecore.c,v 1.33 2000/05/09 22:20:14 ps Exp $"; + "$FreeBSD: src/sbin/savecore/savecore.c,v 1.34 2000/09/03 07:02:00 peter Exp $"; #endif /* not lint */ #include <sys/param.h> @@ -108,7 +108,7 @@ int dumpsize; /* amount of memory dumped */ char *kernel; -char *dirname; /* directory to save dumps in */ +char *savedir; /* directory to save dumps in */ char *ddname; /* name of dump device */ dev_t dumpdev; /* dump device */ int dumpfd; /* read/write descriptor on char dev */ @@ -175,7 +175,7 @@ if (!clear) { if (argc != 1 && argc != 2) usage(); - dirname = argv[0]; + savedir = argv[0]; } if (argc == 2) kernel = argv[1]; @@ -348,7 +348,7 @@ * Get the current number and update the bounds file. Do the update * now, because may fail later and don't want to overwrite anything. */ - (void)snprintf(path, sizeof(path), "%s/bounds", dirname); + (void)snprintf(path, sizeof(path), "%s/bounds", savedir); if ((fp = fopen(path, "r")) == NULL) goto err1; if (fgets(buf, sizeof(buf), fp) == NULL) { @@ -369,7 +369,7 @@ /* Create the core file. */ oumask = umask(S_IRWXG|S_IRWXO); /* Restrict access to the core file.*/ (void)snprintf(path, sizeof(path), "%s/vmcore.%d%s", - dirname, bounds, compress ? ".Z" : ""); + savedir, bounds, compress ? ".Z" : ""); if (compress) { if ((fp = zopen(path, "w", 0)) == NULL) { syslog(LOG_ERR, "%s: %s", path, strerror(errno)); @@ -420,7 +420,7 @@ /* Copy the kernel. */ ifd = Open(kernel ? kernel : getbootfile(), O_RDONLY); (void)snprintf(path, sizeof(path), "%s/kernel.%d%s", - dirname, bounds, compress ? ".Z" : ""); + savedir, bounds, compress ? ".Z" : ""); if (compress) { if ((fp = zopen(path, "w", 0)) == NULL) { syslog(LOG_ERR, "%s: %s", path, strerror(errno)); @@ -541,14 +541,14 @@ } kernelsize = st.st_blocks * S_BLKSIZE; - if (statfs(dirname, &fsbuf) < 0) { - syslog(LOG_ERR, "%s: %m", dirname); + if (statfs(savedir, &fsbuf) < 0) { + syslog(LOG_ERR, "%s: %m", savedir); exit(1); } spacefree = ((off_t) fsbuf.f_bavail * fsbuf.f_bsize) / 1024; totfree = ((off_t) fsbuf.f_bfree * fsbuf.f_bsize) / 1024; - (void)snprintf(path, sizeof(path), "%s/minfree", dirname); + (void)snprintf(path, sizeof(path), "%s/minfree", savedir); if ((fp = fopen(path, "r")) == NULL) minfree = 0; else { -- Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> <tanimura@FreeBSD.org> ----- End forwarded message ----- -- Adrian Chadd "Programming is like sex: <adrian@freebsd.org> One mistake and you have to support for a lifetime." -- rec.humor.funny To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001115185926.B6612>