[PATCH] Two fixes in dwarf-mode.el
Tom Tromey
tromey@adacore.com
Wed Aug 5 15:42:42 GMT 2020
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.
In https://sourceware.org/bugzilla/show_bug.cgi?id=22249#c10, Nick
offered me maintainership of this file, but I wasn't sure if that was
official or not, so I haven't pushed it.
binutils/ChangeLog
2020-08-05 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.
---
binutils/ChangeLog | 6 ++++++
binutils/dwarf-mode.el | 12 +++++++-----
2 files changed, 13 insertions(+), 5 deletions(-)
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
--
2.26.2
More information about the Binutils
mailing list