changeset 14162:b876bad2811a

4054 dis sometimes decides random symbols are functions Reviewed by: Robert Mustacchi <rm@joyent.com> Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net> Approved by: Albert Lee <trisk@nexenta.com>
author Richard Lowe <richlowe@richlowe.net>
date Sat, 17 Aug 2013 17:54:47 -0400
parents 374f51e72d3f
children 712ede127bb4
files usr/src/cmd/dis/dis_target.c
diffstat 1 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/dis/dis_target.c	Fri Aug 16 18:18:28 2013 -0400
+++ b/usr/src/cmd/dis/dis_target.c	Sat Aug 17 17:54:47 2013 -0400
@@ -647,13 +647,22 @@
 	sym_entry_t *sym, *osym, *match;
 	int found;
 
+	*offset = 0;
+	*size = 0;
+	if (isfunc != NULL)
+		*isfunc = 0;
+
 	if (tgt->dt_symcache != NULL &&
 	    addr >= tgt->dt_symcache->se_sym.st_value &&
 	    addr < tgt->dt_symcache->se_sym.st_value +
 	    tgt->dt_symcache->se_sym.st_size) {
-		*offset = addr - tgt->dt_symcache->se_sym.st_value;
-		*size = tgt->dt_symcache->se_sym.st_size;
-		return (tgt->dt_symcache->se_name);
+		sym = tgt->dt_symcache;
+		*offset = addr - sym->se_sym.st_value;
+		*size = sym->se_sym.st_size;
+		if (isfunc != NULL)
+			*isfunc = (GELF_ST_TYPE(sym->se_sym.st_info) ==
+			    STT_FUNC);
+		return (sym->se_name);
 	}
 
 	lo = 0;