This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Add support for DWARF-4 line number tables.


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

commit c83344582375e65643c5efe68b3739e87db482f3
Author: Cary Coutant <ccoutant@gmail.com>
Date:   Fri Feb 2 17:44:27 2018 -0800

    Add support for DWARF-4 line number tables.
    
    Reads the maximum_operations_per_instruction field, added in DWARF-4 to the
    line number program header.
    
    gold/
    	* PR gold/22776
    	* dwarf_reader.cc (Sized_dwarf_line_info::read_header_prolog): Add
    	support for DWARF-4 line number tables.
    	* dwarf_reader.h (Sized_dwarf_line_info::max_ops_per_insn): New field.

Diff:
---
 gold/ChangeLog       |  7 +++++++
 gold/dwarf_reader.cc | 11 +++++++++++
 gold/dwarf_reader.h  |  3 ++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index b833a7b..b341fd2 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,10 @@
+2018-02-02  Cary Coutant  <ccoutant@gmail.com>
+
+	* PR gold/22776
+	* dwarf_reader.cc (Sized_dwarf_line_info::read_header_prolog): Add
+	support for DWARF-4 line number tables.
+	* dwarf_reader.h (Sized_dwarf_line_info::max_ops_per_insn): New field.
+
 2018-01-18  Alan Modra  <amodra@gmail.com>
 
 	* powerpc.cc (param_plt_align): New function supplying default
diff --git a/gold/dwarf_reader.cc b/gold/dwarf_reader.cc
index 6350247..5cdb0b2 100644
--- a/gold/dwarf_reader.cc
+++ b/gold/dwarf_reader.cc
@@ -1667,6 +1667,17 @@ Sized_dwarf_line_info<size, big_endian>::read_header_prolog(
   header_.min_insn_length = *lineptr;
   lineptr += 1;
 
+  if (header_.version < 4)
+    header_.max_ops_per_insn = 1;
+  else
+    {
+      // DWARF 4 added the maximum_operations_per_instruction field.
+      header_.max_ops_per_insn = *lineptr;
+      lineptr += 1;
+      // TODO: Add support for values other than 1.
+      gold_assert(header_.max_ops_per_insn == 1);
+    }
+
   header_.default_is_stmt = *lineptr;
   lineptr += 1;
 
diff --git a/gold/dwarf_reader.h b/gold/dwarf_reader.h
index f994bf2..8c96923 100644
--- a/gold/dwarf_reader.h
+++ b/gold/dwarf_reader.h
@@ -1070,7 +1070,8 @@ class Sized_dwarf_line_info : public Dwarf_line_info
     off_t total_length;
     int version;
     off_t prologue_length;
-    int min_insn_length; // insn stands for instructin
+    int min_insn_length; // insn stands for instruction
+    int max_ops_per_insn; // Added in DWARF-4.
     bool default_is_stmt; // stmt stands for statement
     signed char line_base;
     int line_range;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]