Module Name:    src
Committed By:   bsh
Date:           Mon Mar 19 05:38:26 UTC 2012

Modified Files:
        src/external/gpl3/binutils/usr.sbin/dbsym: dbsym.8 dbsym.c
        src/sys/arch/arm/conf: Makefile.arm
        src/sys/conf: Makefile.kern.inc

Log Message:
adjust the size of db_symtab space automatically.
proposed on tech-toolchain@, and got no objections.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.8 \
    src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/arm/conf/Makefile.arm
cvs rdiff -u -r1.152 -r1.153 src/sys/conf/Makefile.kern.inc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.8
diff -u src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.8:1.1 src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.8:1.2
--- src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.8:1.1	Tue Aug 18 20:22:20 2009
+++ src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.8	Mon Mar 19 05:38:26 2012
@@ -1,4 +1,4 @@
-.\"	$NetBSD: dbsym.8,v 1.1 2009/08/18 20:22:20 skrll Exp $
+.\"	$NetBSD: dbsym.8,v 1.2 2012/03/19 05:38:26 bsh Exp $
 .\"
 .Dd November 9, 2001
 .Dt DBSYM 8
@@ -8,7 +8,7 @@
 .Nd copy kernel symbol table into db_symtab space
 .Sh SYNOPSIS
 .Nm
-.Op Fl v
+.Op Fl pv
 .Op Fl b Ar bfdname
 .Ar kernel
 .Sh DESCRIPTION
@@ -39,6 +39,14 @@ flag is given,
 will print out status information as
 it is copying the symbol table.
 .Pp
+If the
+.Fl p
+flag is given,
+.Nm
+will report the size of the kernel symbol table and the size of the
+db_symtab space.
+Two values are printed out in a line separated by a space.
+.Pp
 Note that debugging symbols are not useful to the
 .Xr ddb 4
 kernel debugger, so to minimize the size of the kernel, one should
Index: src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.c
diff -u src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.c:1.1 src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.c:1.2
--- src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.c:1.1	Tue Aug 18 20:22:20 2009
+++ src/external/gpl3/binutils/usr.sbin/dbsym/dbsym.c	Mon Mar 19 05:38:26 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: dbsym.c,v 1.1 2009/08/18 20:22:20 skrll Exp $ */
+/* $NetBSD: dbsym.c,v 1.2 2012/03/19 05:38:26 bsh Exp $ */
 
 /*
  * Copyright (c) 2001 Simon Burge (for Wasabi Systems)
@@ -39,7 +39,7 @@
 __COPYRIGHT("@(#) Copyright (c) 1996 Christopher G. Demetriou.\
   Copyright 2001 Simon Burge.\
   All rights reserved.");
-__RCSID("$NetBSD: dbsym.c,v 1.1 2009/08/18 20:22:20 skrll Exp $");
+__RCSID("$NetBSD: dbsym.c,v 1.2 2012/03/19 05:38:26 bsh Exp $");
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -75,6 +75,7 @@ int	find_symtab(bfd *, struct symbols *)
 int	load_symtab(bfd *, int fd, char **, u_int32_t *);
 
 int	verbose;
+int	printsize;
 
 int
 main(int argc, char **argv)
@@ -90,7 +91,7 @@ main(int argc, char **argv)
 	setprogname(argv[0]);
 
 	bfdname = NULL;
-	while ((ch = getopt(argc, argv, "b:v")) != -1)
+	while ((ch = getopt(argc, argv, "b:pv")) != -1)
 		switch (ch) {
 		case 'b':
 			bfdname = optarg;
@@ -98,6 +99,9 @@ main(int argc, char **argv)
 		case 'v':
 			verbose = 1;
 			break;
+		case 'p':
+			printsize = 1;
+			break;
 		case '?':
 		default:
 			usage();
@@ -150,6 +154,11 @@ main(int argc, char **argv)
 	symtab_space = bfd_get_32(abfd,
 	    &mappedkfile[db_symtab_symbols[X_DB_SYMTABSIZE].offset]);
 
+	if (printsize) {
+		printf("%d %d\n", symtabsize, symtab_space);
+		goto done;
+	}
+
 	if (symtabsize > symtab_space)
 		errx(1, "symbol table (%u bytes) too big for buffer (%u bytes)\n"
 		    "Increase options SYMTAB_SPACE in your kernel config",
@@ -168,6 +177,7 @@ main(int argc, char **argv)
 	bfd_put_32(abfd, symtabsize,
 	    &mappedkfile[db_symtab_symbols[X_DB_SYMTABSIZE].offset]);
 
+done:
 	munmap(mappedkfile, ksb.st_size);
 	close(kfd);
 

Index: src/sys/arch/arm/conf/Makefile.arm
diff -u src/sys/arch/arm/conf/Makefile.arm:1.32 src/sys/arch/arm/conf/Makefile.arm:1.33
--- src/sys/arch/arm/conf/Makefile.arm:1.32	Sun Apr 27 03:23:13 2008
+++ src/sys/arch/arm/conf/Makefile.arm	Mon Mar 19 05:38:26 2012
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.arm,v 1.32 2008/04/27 03:23:13 tsutsui Exp $
+#	$NetBSD: Makefile.arm,v 1.33 2012/03/19 05:38:26 bsh Exp $
 
 # Makefile for NetBSD
 #
@@ -63,7 +63,8 @@ LINKFLAGS_NORMAL=	-X
 # Strip ARM mapping symbols from the kernel image, as they interfere
 # with ddb. Do it differently if 'makeoptions DEBUG="-g"' was specified.
 .if !defined(DEBUG) || empty(DEBUG:M-g*)
-SYSTEM_LD_TAIL?=	@${OBJCOPY} --strip-symbol='$$a'	 \
+SYSTEM_LD_TAIL?=	@${SYSTEM_LD_TAIL_DBSYM} ; \
+			${OBJCOPY} --strip-symbol='$$a'	 \
 				    --strip-symbol='$$t'	 \
 				    --strip-symbol='$$d' $@	;\
 			${SIZE} $@; chmod 755 $@

Index: src/sys/conf/Makefile.kern.inc
diff -u src/sys/conf/Makefile.kern.inc:1.152 src/sys/conf/Makefile.kern.inc:1.153
--- src/sys/conf/Makefile.kern.inc:1.152	Sun Feb 12 16:34:11 2012
+++ src/sys/conf/Makefile.kern.inc	Mon Mar 19 05:38:26 2012
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.kern.inc,v 1.152 2012/02/12 16:34:11 matt Exp $
+#	$NetBSD: Makefile.kern.inc,v 1.153 2012/03/19 05:38:26 bsh Exp $
 #
 # This file contains common `MI' targets and definitions and it is included
 # at the bottom of each `MD' ${MACHINE}/conf/Makefile.${MACHINE}.
@@ -233,9 +233,43 @@ SYSTEM_LD?=	@${_MKSHMSG} "   link  ${.CU
 		${_MKSHECHO}\
 		${LD} -Map $@.map --cref ${LINKFLAGS} -o $@ '$${SYSTEM_OBJ}' '$${EXTRA_OBJ}' vers.o; \
 		${LD} -Map $@.map --cref ${LINKFLAGS} -o $@ ${SYSTEM_OBJ} ${EXTRA_OBJ} vers.o
-SYSTEM_LD_TAIL?=@${TOOL_SED} '/const char sccs/!d;s/.*@(.)//;s/\\.*//' vers.c; \
+
+AUTO_SYMTAB_SPACE?=   yes
+
+.if empty(AUTO_SYMTAB_SPACE:M[Yy][Ee][Ss]) || defined(_SYMTAB_SPACE_ADJUSTED)
+SYSTEM_LD_TAIL_DBSYM?=	true
+.else
+SYSTEM_LD_TAIL_DBSYM?=	\
+	if grep '^\#define.*SYMTAB_SPACE' opt_ksyms.h > /dev/null; then \
+		_modify_opt_ksyms_h () {				\
+			${TOOL_SED}					\
+	-e 's/^\(\#define.*SYMTAB_SPACE[ 	]*\)[0-9]*/\1'$$1/	\
+	-e 's/\(.equiv[ 	]*_KERNEL_OPT_SYMTAB_SPACE,0x\)[0-9a-f]*/\1'$$(printf %x $$1)/ \
+			opt_ksyms.h > opt_ksyms.h.ADJ &&		\
+			mv opt_ksyms.h.ADJ opt_ksyms.h &&		\
+			${MAKE} ${MFLAGS} _SYMTAB_SPACE_ADJUSTED=1 $@;	\
+		};							\
+		_adj_symtab_space () {				\
+			set -- $$(${DBSYM} -p $@); 		\
+			echo Symtab size: $$1, space: $$2;	\
+			if [ "$$1" -gt "$$2" ]; then		\
+				echo Adjusting symtab space;	\
+				rm -f $@;			\
+				_modify_opt_ksyms_h $$1;	\
+			fi;					\
+		};						\
+		_adj_symtab_space;				\
+	fi
+.endif
+
+.if defined(_SYMTAB_SPACE_ADJUSTED)
+SYSTEM_LD_TAIL?=true
+.else
+SYSTEM_LD_TAIL?=@${SYSTEM_LD_TAIL_DBSYM} ; \
+		${TOOL_SED} '/const char sccs/!d;s/.*@(.)//;s/\\.*//' vers.c; \
 		${SIZE} $@; chmod 755 $@; \
 		${SYSTEM_CTFMERGE}
+.endif
 
 TEXTADDR?=	${LOADADDRESS}			# backwards compatibility
 LINKTEXT?=	${TEXTADDR:C/.+/-Ttext &/}
@@ -259,21 +293,24 @@ SYSTEM_LD_TAIL+=${SYSTEM_LD_TAIL_DEBUG}
 LINKFLAGS+=	${LINKFLAGS_DEBUG}
 EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.gdb@}
 CTFFLAGS+=	-g
+.if !defined(_SYMTAB_SPACE_ADJUSTED)
 SYSTEM_LD_TAIL+=; \
 	if grep '^\#define.*SYMTAB_SPACE' opt_ksyms.h > /dev/null; then \
 		echo "${DBSYM} $@.gdb"; \
 		${DBSYM} $@.gdb || (rm -f $@ ; exit 1) || exit 1; \
 	fi
-
+.endif
 .elifndef PROF
 LINKFLAGS+=	${LINKFLAGS_NORMAL}
 .endif
 
+.if !defined(_SYMTAB_SPACE_ADJUSTED)
 SYSTEM_LD_TAIL+=; \
 	if grep '^\#define.*SYMTAB_SPACE' opt_ksyms.h > /dev/null; then \
 		echo "${DBSYM} $@"; \
 		${DBSYM} $@ || (rm -f $@ ; exit 1) || exit 1; \
 	fi
+.endif
 
 SYSTEM_LD_HEAD+=${SYSTEM_LD_HEAD_EXTRA}
 SYSTEM_LD_TAIL+=${SYSTEM_LD_TAIL_EXTRA}

Reply via email to