svn commit: r349424 - head/contrib/elftoolchain/libdwarf

Mark Johnston markj at FreeBSD.org
Wed Jun 26 16:38:31 UTC 2019


Author: markj
Date: Wed Jun 26 16:38:30 2019
New Revision: 349424
URL: https://svnweb.freebsd.org/changeset/base/349424

Log:
  libdwarf: Use the cached strtab pointer when reading string attributes.
  
  Previously we would perform a linear search of the DWARF section
  list for ".debug_str".  However, libdwarf always caches a pointer to
  the strtab image in its debug descriptor.  Using it gives a modest
  performance improvement when iterating over the attributes of each
  DIE.
  
  Reviewed by:	emaste
  MFC after:	1 week
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D20759

Modified:
  head/contrib/elftoolchain/libdwarf/libdwarf_attr.c

Modified: head/contrib/elftoolchain/libdwarf/libdwarf_attr.c
==============================================================================
--- head/contrib/elftoolchain/libdwarf/libdwarf_attr.c	Wed Jun 26 16:35:37 2019	(r349423)
+++ head/contrib/elftoolchain/libdwarf/libdwarf_attr.c	Wed Jun 26 16:38:30 2019	(r349424)
@@ -100,7 +100,6 @@ _dwarf_attr_init(Dwarf_Debug dbg, Dwarf_Section *ds, u
     uint64_t form, int indirect, Dwarf_Error *error)
 {
 	struct _Dwarf_Attribute atref;
-	Dwarf_Section *str;
 	int ret;
 
 	ret = DW_DLE_NONE;
@@ -183,9 +182,7 @@ _dwarf_attr_init(Dwarf_Debug dbg, Dwarf_Section *ds, u
 		break;
 	case DW_FORM_strp:
 		atref.u[0].u64 = dbg->read(ds->ds_data, offsetp, dwarf_size);
-		str = _dwarf_find_section(dbg, ".debug_str");
-		assert(str != NULL);
-		atref.u[1].s = (char *) str->ds_data + atref.u[0].u64;
+		atref.u[1].s = _dwarf_strtab_get_table(dbg) + atref.u[0].u64;
 		break;
 	case DW_FORM_ref_sig8:
 		atref.u[0].u64 = 8;


More information about the svn-src-head mailing list