[4/8] Code cleanup: Refactor abbrev_table_read_table cycle

Message ID 148693099506.9024.3530322781952121865.stgit@host1.jankratochvil.net
State New, archived
Headers

Commit Message

Jan Kratochvil Feb. 12, 2017, 8:23 p.m. UTC
  Hi,

I find it as an improvement on its own, it prevents more code duplication in
a future patch.

Jan


gdb/ChangeLog
2017-02-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (abbrev_table_read_table): Read the data only once.
---
 gdb/dwarf2read.c |   21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
  

Comments

Pedro Alves Feb. 17, 2017, 1:21 a.m. UTC | #1
On 02/12/2017 08:23 PM, Jan Kratochvil wrote:

> gdb/ChangeLog
> 2017-02-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
> 
> 	* dwarf2read.c (abbrev_table_read_table): Read the data only once.

OK.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 1137541..e9c1b6a 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -15341,12 +15341,16 @@  abbrev_table_read_table (struct dwarf2_section_info *section,
       abbrev_ptr += 1;
 
       /* now read in declarations */
-      abbrev_name = gdb_read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-      abbrev_ptr += bytes_read;
-      abbrev_form = gdb_read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-      abbrev_ptr += bytes_read;
-      while (abbrev_name)
+      for (;;)
 	{
+	  abbrev_name = gdb_read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
+	  abbrev_ptr += bytes_read;
+	  abbrev_form = gdb_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;
@@ -15356,12 +15360,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 = gdb_read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-	  abbrev_ptr += bytes_read;
-	  abbrev_form = gdb_read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
-	  abbrev_ptr += bytes_read;
+	  ++cur_abbrev->num_attrs;
 	}
 
       cur_abbrev->attrs =