[binutils-gdb] Two fixes in dwarf-mode.el

Tom Tromey tromey@sourceware.org
Wed Aug 12 14:41:36 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d3511b24ea82409d1769a3b62d0996fe813635d4

commit d3511b24ea82409d1769a3b62d0996fe813635d4
Author: Tom Tromey <tromey@adacore.com>
Date:   Wed Aug 12 08:41:03 2020 -0600

    Two fixes in dwarf-mode.el
    
    This fixes a couple of small problems in dwarf-mode.el.
    
    First, I noticed that for an attribute like:
    
     <2><136c>: Abbrev Number: 11 (DW_TAG_member)
        <136d>   DW_AT_name        : t
    
    ... the "t" would not be font-locked using the function name face.
    The problem here is that the regexp assumed the indirect string
    format, like:
    
        <12ac>   DW_AT_name        : (indirect string, offset: 0x1b40): whatever
    
    Here the fix is to adjust the regexp to match both formats.
    
    Second, when following a DIE reference, point could end up on an
    attribute instead.  This happens when there is a zero-length attribute
    with the same "offset" as the following DIE, like:
    
        <12c5>   DW_AT_GNU_all_call_sites: 1
     <2><12c5>: Abbrev Number: 5 (DW_TAG_formal_parameter)
    
    Here the fix is to search for the DIE by looking for the depth ("<2>"
    in the example) as well.
    
    I've bumped the internal version number to make it simpler to install
    this using the Emacs package facility.
    
    binutils/ChangeLog
    2020-08-12  Tom Tromey  <tromey@adacore.com>
    
            * dwarf-mode.el (Version): Now 1.6.
            (dwarf-die-button-action): Tighten DIE reference regexp.
            (dwarf-font-lock-keywords): Update name regexp.

Diff:
---
 binutils/ChangeLog     |  6 ++++++
 binutils/dwarf-mode.el | 12 +++++++-----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 162159f5cf8..5037d91e0dd 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2020-08-12  Tom Tromey  <tromey@adacore.com>
+
+	* dwarf-mode.el (Version): Now 1.6.
+	(dwarf-die-button-action): Tighten DIE reference regexp.
+	(dwarf-font-lock-keywords): Update name regexp.
+
 2020-08-12  Nick Clifton  <nickc@redhat.com>
 
 	PR binutils/26331
diff --git a/binutils/dwarf-mode.el b/binutils/dwarf-mode.el
index a1b2fdb75eb..4d35c4a1fd2 100644
--- a/binutils/dwarf-mode.el
+++ b/binutils/dwarf-mode.el
@@ -1,6 +1,6 @@
 ;;; dwarf-mode.el --- Browser for DWARF information. -*-lexical-binding:t-*-
 
-;; Version: 1.5
+;; Version: 1.6
 
 ;; Copyright (C) 2012-2020 Free Software Foundation, Inc.
 
@@ -27,7 +27,7 @@
 (defconst dwarf-font-lock-keywords
   '(
     ;; Name and linkage name.
-    ("DW_AT_[a-z_]*name\\s *: .*:\\(.*\\)\\s *$"
+    ("DW_AT_[a-zA-Z_]*name\\s *:\\(?:\\s *(.*):\\)?\\s *\\(.*\\)\\s *$"
      (1 font-lock-function-name-face))
 
     ("Compilation Unit @ offset 0x[0-9a-f]+"
@@ -120,9 +120,11 @@ A prefix argument means expand all children."
 ;; Either follows a DIE reference, or expands a "...".
 (defun dwarf-die-button-action (button)
   (let* ((die (button-get button 'die))
-	 ;; Note that the first number can only be decimal.
-	 (die-rx (concat "^\\s *\\(<[0-9]+>\\)?<"
-			 die ">[^<]"))
+	 ;; Note that the first number can only be decimal.  It is
+	 ;; included in this search because otherwise following a ref
+	 ;; might lead to a zero-length boolean attribute in the
+	 ;; previous DIE.
+	 (die-rx (concat "^\\s *<[0-9]+><" die ">:"))
 	 (old (point))
 	 (is-ref (button-get button 'die-ref)))
     (if is-ref


More information about the Binutils-cvs mailing list