Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Nov 2014 03:47:04 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r274735 - head/sys/powerpc/powerpc
Message-ID:  <201411200347.sAK3l4d8002478@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhibbits
Date: Thu Nov 20 03:47:04 2014
New Revision: 274735
URL: https://svnweb.freebsd.org/changeset/base/274735

Log:
  Use db_printsym() instead of our own in backtraces
  
  Summary:
  Currently if there are problems finding a symbol, backtrace ends up printing
  something like:
  
  0xdeadbeef: at +0x12345
  
  Which is pretty useless.  This on its own should be fixed (retrieving symbols),
  but aside from that, using db_printsym() is a better solution anyway.  If it
  can't find a valid symbol it prints the actual address, and it has the added
  benefit that if it can find the symbol, it might be able to print the file and
  line as well.
  
  Test Plan: Tested on my G4 PowerBook
  
  Reviewers: #powerpc, nwhitehorn
  
  Reviewed By: nwhitehorn
  
  Differential Revision: https://reviews.freebsd.org/D1173
  
  MFC after:	3 weeks

Modified:
  head/sys/powerpc/powerpc/db_trace.c

Modified: head/sys/powerpc/powerpc/db_trace.c
==============================================================================
--- head/sys/powerpc/powerpc/db_trace.c	Thu Nov 20 03:46:35 2014	(r274734)
+++ head/sys/powerpc/powerpc/db_trace.c	Thu Nov 20 03:47:04 2014	(r274735)
@@ -135,9 +135,6 @@ static int
 db_backtrace(struct thread *td, db_addr_t fp, int count)
 {
 	db_addr_t stackframe, lr, *args;
-	db_expr_t diff;
-	c_db_sym_t sym;
-	const char *symname;
 	boolean_t kernel_only = TRUE;
 	boolean_t full = FALSE;
 
@@ -265,16 +262,8 @@ db_backtrace(struct thread *td, db_addr_
 
 		   print_trap:
 			lr = (db_addr_t) tf->srr0;
-			diff = 0;
-			symname = NULL;
-			sym = db_search_symbol(lr, DB_STGY_ANY, &diff);
-			db_symbol_values(sym, &symname, 0);
-			if (symname == NULL || !strcmp(symname, "end")) {
-				db_printf("%#zx: srr1=%#zx\n", lr, tf->srr1);
-			} else {
-				db_printf("%s+%#zx: srr1=%#zx\n", symname, diff,
-				    tf->srr1);
-			}
+			db_printsym(lr, DB_STGY_ANY);
+			db_printf(": srr1=%#x\n", tf->srr1);
 			db_printf("%-10s  r1=%#zx cr=%#x xer=%#x ctr=%#zx",
 			    "", tf->fixreg[1], (uint32_t)tf->cr,
 			    (uint32_t)tf->xer, tf->ctr);
@@ -288,14 +277,8 @@ db_backtrace(struct thread *td, db_addr_
 			goto next_frame;
 		}
 
-		diff = 0;
-		symname = NULL;
-		sym = db_search_symbol(lr, DB_STGY_ANY, &diff);
-		db_symbol_values(sym, &symname, 0);
-		if (symname == NULL || !strcmp(symname, "end"))
-			db_printf("at %zx", lr);
-		else
-			db_printf("at %s+%#zx", symname, diff);
+		db_printf("at ");
+		db_printsym(lr, DB_STGY_PROC);
 		if (full)
 			/* Print all the args stored in that stackframe. */
 			db_printf("(%zx, %zx, %zx, %zx, %zx, %zx, %zx, %zx)",



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