Silence the "no mapping symbol" warnings in arm gold linker.

What are mapping symbols - they are special symbols defined to mark
attributes of a part of a section, the attributes could be "$a", "$t",
"$d", for arm code, thumb code and data respectively.

Why are mapping symbols needed in handling cortex-a8 erratum - because
the erratum only applies to thumb and only to thumb code, mapping
symbols are needed by the linker's eratum scanner.

Why silence the warnings - to make gold behave the same as Gnu BFD
linker, which silently ignores such "no mapping symbol" cases (and
does nothing about the erratum).

Why certain objects do not have mapping symbols - chromium:464017

diff --git a/gold/arm.cc b/gold/arm.cc
index 04ca5da..9429063 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -6250,26 +6250,21 @@ Arm_relobj<big_endian>::scan_section_for_cortex_a8_erratum(
 {
   // Look for the first mapping symbol in this section.  It should be
   // at (shndx, 0).
   Mapping_symbol_position section_start(shndx, 0);
   typename Mapping_symbols_info::const_iterator p =
     this->mapping_symbols_info_.lower_bound(section_start);
 
   // There are no mapping symbols for this section.  Treat it as a data-only
-  // section.  Issue a warning if section is marked as containing
-  // instructions.
+  // section.  Note - we've changed the following code to silence the no mapping
+  // warning, making this consistent with Gnu BFD linker, which just ignores
+  // silently no-mapping symbol cases.
   if (p == this->mapping_symbols_info_.end() || p->first.first != shndx)
-    {
-      if ((this->section_flags(shndx) & elfcpp::SHF_EXECINSTR) != 0)
-	gold_warning(_("cannot scan executable section %u of %s for Cortex-A8 "
-		       "erratum because it has no mapping symbols."),
-		     shndx, this->name().c_str());
-      return;
-    }
+    return;
 
   Arm_address output_address =
     this->simple_input_section_output_address(shndx, os);
 
   // Get the section contents.
   section_size_type input_view_size = 0;
   const unsigned char* input_view =
     this->section_contents(shndx, &input_view_size, false);
