bin/70392: NO_DYNAMICROOT + savecore -z dumps core

Skip Ford skip.ford at verizon.net
Thu Aug 12 19:30:30 PDT 2004


>Number:         70392
>Category:       bin
>Synopsis:       NO_DYNAMICROOT + savecore -z dumps core
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Aug 13 02:30:30 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Skip Ford
>Release:        FreeBSD 5.2-CURRENT i386
>Organization:
>Environment:
System: FreeBSD lucy 5.2-CURRENT FreeBSD 5.2-CURRENT #0: Wed Aug 11 18:44:53 EDT 2004 root at lucy:/usr/obj/src/sys/LUCY i386

>Description:
Statically linking savecore (NO_DYNAMICROOT) causes conflict:

/usr/bin/ld: Warning: size of symbol `compress' changed from 4 in savecore.o to 27 in /usr/lib/libz.a(compress.o)
/usr/bin/ld: Warning: type of symbol `compress' changed from 1 to 2 in /usr/lib/libz.a(compress.o)

'compress' is an integer in savecore.o and a function in compress.o.
The resulting binary dumps core when run with compression (-z).

>How-To-Repeat:
Statically link savecore(8) and execute 'savecore -z'.

$ ldd ./savecore
ldd: ./savecore: not a dynamic executable
$ ./savecore -z
Bus error (core dumped)

>Fix:
Not sure if the conflict is valid or a toolchain problem, but renaming
the int works around the problem.

Index: sbin/savecore/savecore.c
===================================================================
RCS file: /cvs/ncvs/src/sbin/savecore/savecore.c,v
retrieving revision 1.68
diff -u -r1.68 savecore.c
--- sbin/savecore/savecore.c	28 Feb 2004 10:42:27 -0000	1.68
+++ sbin/savecore/savecore.c	12 Aug 2004 13:14:21 -0000
@@ -88,7 +88,7 @@
 /* The size of the buffer used for I/O. */
 #define	BUFFERSIZE	(1024*1024)
 
-int checkfor, compress, clear, force, keep, verbose;	/* flags */
+int checkfor, compress_core, clear, force, keep, verbose;	/* flags */
 int nfound, nsaved, nerr;			/* statistics */
 
 extern FILE *zopen(const char *, const char *);
@@ -347,7 +347,7 @@
 		goto closefd;
 	}
 	oumask = umask(S_IRWXG|S_IRWXO); /* Restrict access to the core file.*/
-	if (compress) {
+	if (compress_core) {
 		sprintf(buf, "vmcore.%d.gz", bounds);
 		fp = zopen(buf, "w");
 	} else {
@@ -371,7 +371,7 @@
 	fclose(info);
 
 	syslog(LOG_NOTICE, "writing %score to %s",
-	    compress ? "compressed " : "", buf);
+	    compress_core ? "compressed " : "", buf);
 
 	while (dumpsize > 0) {
 		wl = BUFFERSIZE;
@@ -387,7 +387,7 @@
 			nerr++;
 			goto closeall;
 		}
-		if (compress) {
+		if (compress_core) {
 			nw = fwrite(buf, 1, wl, fp);
 		} else {
 			for (nw = 0; nw < nr; nw = he) {
@@ -515,7 +515,7 @@
 			force = 1;
 			break;
 		case 'z':
-			compress = 1;
+			compress_core = 1;
 			break;
 		case '?':
 		default:

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list