This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB 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] Code cleanup: Refactor abbrev_table_read_table cycle


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

commit 22d2f3ab926890490deed2888f6f013031fa6a6e
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Mon Feb 20 20:53:20 2017 +0100

    Code cleanup: Refactor abbrev_table_read_table cycle
    
    I find it as an improvement on its own, it prevents more code duplication in
    a future patch.
    
    gdb/ChangeLog
    2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	* dwarf2read.c (abbrev_table_read_table): Read the data only once.

Diff:
---
 gdb/ChangeLog    |  4 ++++
 gdb/dwarf2read.c | 21 +++++++++++----------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 99fcca0..75f1b02 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
 2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
+	* dwarf2read.c (abbrev_table_read_table): Read the data only once.
+
+2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
 	* dwarf2read.c (dwarf2_ranges_process): New function from
 	dwarf2_ranges_read.
 	(dwarf2_ranges_read, dwarf2_record_block_ranges): Use
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index e0ede18..a987e0e 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -15339,12 +15339,16 @@ abbrev_table_read_table (struct dwarf2_section_info *section,
       abbrev_ptr += 1;
 
       /* now read in declarations */
-      abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-      abbrev_ptr += bytes_read;
-      abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-      abbrev_ptr += bytes_read;
-      while (abbrev_name)
+      for (;;)
 	{
+	  abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
+	  abbrev_ptr += bytes_read;
+	  abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
+	  abbrev_ptr += bytes_read;
+
+	  if (abbrev_name == 0)
+	    break;
+
 	  if (cur_abbrev->num_attrs == allocated_attrs)
 	    {
 	      allocated_attrs += ATTR_ALLOC_CHUNK;
@@ -15354,12 +15358,9 @@ abbrev_table_read_table (struct dwarf2_section_info *section,
 
 	  cur_attrs[cur_abbrev->num_attrs].name
 	    = (enum dwarf_attribute) abbrev_name;
-	  cur_attrs[cur_abbrev->num_attrs++].form
+	  cur_attrs[cur_abbrev->num_attrs].form
 	    = (enum dwarf_form) abbrev_form;
-	  abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-	  abbrev_ptr += bytes_read;
-	  abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-	  abbrev_ptr += bytes_read;
+	  ++cur_abbrev->num_attrs;
 	}
 
       cur_abbrev->attrs =


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