PR28098 Skip R_*_NONE relocation entries with zero r_sym without counting

	PR gold/28098
	* reloc.cc (Track_relocs::advance): Skip R_*_NONE relocation entries
	with r_sym of zero without counting in advance method.
diff --git a/gold/ChangeLog b/gold/ChangeLog
index d37902b..6aba1e0 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2021-07-17  Michael Krasnyk  <michael.krasnyk@gmail.com>
+
+	PR gold/28098
+	* reloc.cc (Track_relocs::advance): Skip R_*_NONE relocation entries
+	with r_sym of zero without counting in advance method.
+
 2021-07-03  Nick Clifton  <nickc@redhat.com>
 
 	* po/gold.pot: Regenerate.
diff --git a/gold/reloc.cc b/gold/reloc.cc
index 34a836f..82ec6cb 100644
--- a/gold/reloc.cc
+++ b/gold/reloc.cc
@@ -1602,7 +1602,10 @@
       elfcpp::Rel<size, big_endian> rel(this->prelocs_ + this->pos_);
       if (static_cast<off_t>(rel.get_r_offset()) >= offset)
 	break;
-      ++ret;
+      // Skip R_*_NONE relocation entries with r_sym of zero
+      // without counting.
+      if (rel.get_r_info() != 0)
+	++ret;
       this->pos_ += this->reloc_size_;
     }
   return ret;
diff --git a/gold/reloc.h b/gold/reloc.h
index 5f1d382..773e79b 100644
--- a/gold/reloc.h
+++ b/gold/reloc.h
@@ -1171,7 +1171,7 @@
   next_addend() const;
 
   // Advance to OFFSET within the data section, and return the number
-  // of relocs which would be skipped.
+  // of relocs which would be skipped, excluding r_info==0 relocs.
   int
   advance(off_t offset);