Module Name:    src
Committed By:   darran
Date:           Sun Mar 14 21:27:50 UTC 2010

Modified Files:
        src/sys/kern: kern_ksyms.c
        src/sys/sys: ksyms.h

Log Message:
DTrace: Make the CTF handling conditional on KDTRACE_HOOKS for now since
it breaks the boot of the atari kernel (and possibly others).


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/kern/kern_ksyms.c
cvs rdiff -u -r1.25 -r1.26 src/sys/sys/ksyms.h

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

Modified files:

Index: src/sys/kern/kern_ksyms.c
diff -u src/sys/kern/kern_ksyms.c:1.57 src/sys/kern/kern_ksyms.c:1.58
--- src/sys/kern/kern_ksyms.c:1.57	Sat Mar 13 16:27:06 2010
+++ src/sys/kern/kern_ksyms.c	Sun Mar 14 21:27:49 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_ksyms.c,v 1.57 2010/03/13 16:27:06 christos Exp $	*/
+/*	$NetBSD: kern_ksyms.c,v 1.58 2010/03/14 21:27:49 darran Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_ksyms.c,v 1.57 2010/03/13 16:27:06 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_ksyms.c,v 1.58 2010/03/14 21:27:49 darran Exp $");
 
 #if defined(_KERNEL) && defined(_KERNEL_OPT)
 #include "opt_ddb.h"
@@ -298,10 +298,12 @@
 	tab->sd_maxsym = 0;
 	tab->sd_usroffset = 0;
 	tab->sd_gone = false;
+#ifdef KDTRACE_HOOKS
 	tab->sd_ctfstart = ctfstart;
 	tab->sd_ctfsize = ctfsize;
 	tab->sd_nmap = nmap;
 	tab->sd_nmapsize = nsyms;
+#endif
 #ifdef KSYMS_DEBUG
 	printf("newstart %p sym %p ksyms_symsz %d str %p strsz %d send %p\n",
 	    newstart, symstart, symsize, strstart, strsize,
@@ -345,6 +347,7 @@
 		/* Save symbol. Set it as an absolute offset */
 		nsym[n] = sym[i];
 
+#ifdef KDTRACE_HOOKS
 		if (nmap != NULL) {
 			/* Save the size, replace it with the symbol id so
 			 * the mapping can be done after the cleanup and sort.
@@ -352,6 +355,7 @@
 			nmap[i] = nsym[n].st_size;
 			nsym[n].st_size = i+1;	/* zero is reserved */
 		}
+#endif
 
 		nsym[n].st_shndx = SHBSS;
 		j = strlen(nsym[n].st_name + str) + 1;
@@ -377,6 +381,7 @@
 	if (kheapsort(nsym, n, sizeof(Elf_Sym), addsymtab_compar, &ts) != 0)
 		panic("addsymtab");
 
+#ifdef KDTRACE_HOOKS
 	/* 
 	 * Build the mapping from original symbol id to new symbol table.
 	 * Deleted symbols will have a zero map, indices will be one based
@@ -395,6 +400,7 @@
 			nsym[new].st_size = size;
 		}
 	}
+#endif
 
 	/* ksymsread() is unlocked, so membar. */
 	membar_producer();
@@ -416,7 +422,6 @@
 	Elf_Ehdr *ehdr;
 	char *ctfstart = NULL;
 	size_t ctfsize = 0;
-	char *shstr = NULL;
 
 	if (symsize <= 0) {
 		printf("[ Kernel symbol table missing! ]\n");
@@ -461,10 +466,12 @@
 		break;
 	}
 
+#ifdef KDTRACE_HOOKS
 	/* Find the CTF section */
 	shdr = (Elf_Shdr *)((uint8_t *)start + ehdr->e_shoff);
 	if (ehdr->e_shstrndx != 0) {
-		shstr = (uint8_t*)start + shdr[ehdr->e_shstrndx].sh_offset;
+		char *shstr = (uint8_t*)start +
+				shdr[ehdr->e_shstrndx].sh_offset;
 		for (i = 1; i < ehdr->e_shnum; i++) {
 			if (shdr[i].sh_type != SHT_PROGBITS)
 				continue;
@@ -480,6 +487,7 @@
 			break;
 		}
 	}
+#endif
 
 	if (!ksyms_verify(symstart, strstart))
 		return;
@@ -875,6 +883,7 @@
 	ksyms_hdr.kh_shdr[SHBSS].sh_addralign = PAGE_SIZE;
 	ksyms_hdr.kh_shdr[SHBSS].sh_flags = SHF_ALLOC | SHF_EXECINSTR;
 
+#ifdef KDTRACE_HOOKS
 	/* Sixth section header; ".SUNW_ctf" */
 	ksyms_hdr.kh_shdr[SHCTF].sh_name = 32; /* Section 6 offset */
 	ksyms_hdr.kh_shdr[SHCTF].sh_type = SHT_PROGBITS;
@@ -882,6 +891,7 @@
 /*	ksyms_hdr.kh_shdr[SHCTF].sh_size = filled in at open */
 	ksyms_hdr.kh_shdr[SHCTF].sh_link = SYMTAB; /* Corresponding symtab */
 	ksyms_hdr.kh_shdr[SHCTF].sh_addralign = sizeof(char);
+#endif
 
 	/* Set section names */
 	strlcpy(&ksyms_hdr.kh_strtab[1], ".symtab",
@@ -892,8 +902,10 @@
 	    sizeof(ksyms_hdr.kh_strtab) - 17);
 	strlcpy(&ksyms_hdr.kh_strtab[27], ".bss",
 	    sizeof(ksyms_hdr.kh_strtab) - 27);
+#ifdef KDTRACE_HOOKS
 	strlcpy(&ksyms_hdr.kh_strtab[32], ".SUNW_ctf",
 	    sizeof(ksyms_hdr.kh_strtab) - 32);
+#endif
 }
 
 static int
@@ -913,9 +925,11 @@
 	ksyms_hdr.kh_shdr[STRTAB].sh_offset = ksyms_symsz +
 	    ksyms_hdr.kh_shdr[SYMTAB].sh_offset;
 	ksyms_hdr.kh_shdr[STRTAB].sh_size = ksyms_strsz;
+#ifdef KDTRACE_HOOKS
 	ksyms_hdr.kh_shdr[SHCTF].sh_offset = ksyms_strsz +
 	    ksyms_hdr.kh_shdr[STRTAB].sh_offset;
 	ksyms_hdr.kh_shdr[SHCTF].sh_size = ksyms_ctfsz;
+#endif
 	ksyms_isopen = true;
 	mutex_exit(&ksyms_lock);
 
@@ -950,9 +964,12 @@
 static int
 ksymsread(dev_t dev, struct uio *uio, int ioflag)
 {
-	struct ksyms_symtab *st, *cst;
+	struct ksyms_symtab *st;
 	size_t filepos, inpos, off;
 	int error;
+#ifdef KDTRACE_HOOKS
+	struct ksyms_symtab *cst;
+#endif
 
 	/*
 	 * First: Copy out the ELF header.   XXX Lose if ksymsopen()
@@ -1001,6 +1018,7 @@
 		filepos += st->sd_strsize;
 	}
 
+#ifdef KDTRACE_HOOKS
 	/*
 	 * Copy out the CTF table.
 	 */
@@ -1017,7 +1035,7 @@
 		}
 		filepos += cst->sd_ctfsize;
 	}
-
+#endif
 
 	return 0;
 }

Index: src/sys/sys/ksyms.h
diff -u src/sys/sys/ksyms.h:1.25 src/sys/sys/ksyms.h:1.26
--- src/sys/sys/ksyms.h:1.25	Fri Mar 12 21:43:10 2010
+++ src/sys/sys/ksyms.h	Sun Mar 14 21:27:50 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ksyms.h,v 1.25 2010/03/12 21:43:10 darran Exp $	*/
+/*	$NetBSD: ksyms.h,v 1.26 2010/03/14 21:27:50 darran Exp $	*/
 
 /*
  * Copyright (c) 2001, 2003 Anders Magnusson (ra...@ludd.luth.se).
@@ -47,10 +47,12 @@
 	int sd_strsize;		/* Size of string table */
 	int sd_nglob;		/* Number of global symbols */
 	bool sd_gone;		/* dead but around for open() */
+#ifdef KDTRACE_HOOKS
 	void *sd_ctfstart;	/* Address of CTF contents */
 	int sd_ctfsize;		/* Size in bytes of CTF contents */
 	uint32_t *sd_nmap;	/* Name map for sorted symbols */
 	int sd_nmapsize;	/* Total span of map */
+#endif
 };
 
 /*
@@ -61,8 +63,12 @@
 #define	STRTAB		2
 #define	SHSTRTAB	3
 #define	SHBSS		4
+#ifdef KDTRACE_HOOKS
 #define	SHCTF		5
 #define NSECHDR		6
+#else
+#define NSECHDR		5
+#endif
 
 #define	NPRGHDR		1
 #define	SHSTRSIZ	42

Reply via email to