Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jul 2015 23:07:56 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r285774 - head/sys/ddb
Message-ID:  <201507212307.t6LN7umu002624@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Tue Jul 21 23:07:55 2015
New Revision: 285774
URL: https://svnweb.freebsd.org/changeset/base/285774

Log:
  Don't return undefined symbols to a DDB symbol lookup.
  
  Undefined symbols have a value of zero, so it makes no sense to return
  such a symbol when performing a lookup by value. This occurs for example
  when unwinding the stack after calling a NULL function pointer, and we
  confusingly report the faulting function as uart_sab82532_class() on
  amd64.
  
  Convert db_print_loc_and_inst() to only attempt disassembly if we managed
  to find a symbol corresponding to the IP. Otherwise we may fault and
  re-enter the debugger.
  
  Reviewed by:	jhb
  Sponsored by:	EMC / Isilon Storage Division
  Differential Revision:	https://reviews.freebsd.org/D2858

Modified:
  head/sys/ddb/db_examine.c
  head/sys/ddb/db_main.c

Modified: head/sys/ddb/db_examine.c
==============================================================================
--- head/sys/ddb/db_examine.c	Tue Jul 21 23:03:21 2015	(r285773)
+++ head/sys/ddb/db_examine.c	Tue Jul 21 23:07:55 2015	(r285774)
@@ -232,9 +232,13 @@ db_print_cmd(db_expr_t addr, bool have_a
 void
 db_print_loc_and_inst(db_addr_t loc)
 {
+	db_expr_t off;
+
 	db_printsym(loc, DB_STGY_PROC);
-	db_printf(":\t");
-	(void) db_disasm(loc, true);
+	if (db_search_symbol(loc, DB_STGY_PROC, &off) != C_DB_SYM_NULL) {
+		db_printf(":\t");
+		(void)db_disasm(loc, true);
+	}
 }
 
 /*

Modified: head/sys/ddb/db_main.c
==============================================================================
--- head/sys/ddb/db_main.c	Tue Jul 21 23:03:21 2015	(r285773)
+++ head/sys/ddb/db_main.c	Tue Jul 21 23:07:55 2015	(r285774)
@@ -110,7 +110,7 @@ X_db_search_symbol(db_symtab_t *symtab, 
 	diff = ~0UL;
 	match = NULL;
 	for (sym = (Elf_Sym*)symtab->start; (char*)sym < symtab->end; sym++) {
-		if (sym->st_name == 0)
+		if (sym->st_name == 0 || sym->st_shndx == SHN_UNDEF)
 			continue;
 		if (off < sym->st_value)
 			continue;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201507212307.t6LN7umu002624>