diff --git a/llvm/tools/llvm-readobj/ARMAttributeParser.cpp b/llvm/tools/llvm-readobj/ARMAttributeParser.cpp
index 2059887..688d349 100644
--- a/llvm/tools/llvm-readobj/ARMAttributeParser.cpp
+++ b/llvm/tools/llvm-readobj/ARMAttributeParser.cpp
@@ -118,7 +118,7 @@
 
 void ARMAttributeParser::CPU_arch(AttrType Tag, const uint8_t *Data,
                                   uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Pre-v4", "ARM v4", "ARM v4T", "ARM v5T", "ARM v5TE", "ARM v5TEJ", "ARM v6",
     "ARM v6KZ", "ARM v6T2", "ARM v6K", "ARM v7", "ARM v6-M", "ARM v6S-M",
     "ARM v7E-M", "ARM v8"
@@ -149,7 +149,7 @@
 
 void ARMAttributeParser::ARM_ISA_use(AttrType Tag, const uint8_t *Data,
                                      uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "Permitted" };
+  static const char *const Strings[] = { "Not Permitted", "Permitted" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -159,7 +159,7 @@
 
 void ARMAttributeParser::THUMB_ISA_use(AttrType Tag, const uint8_t *Data,
                                        uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "Thumb-1", "Thumb-2" };
+  static const char *const Strings[] = { "Not Permitted", "Thumb-1", "Thumb-2" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -169,7 +169,7 @@
 
 void ARMAttributeParser::FP_arch(AttrType Tag, const uint8_t *Data,
                                  uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "VFPv1", "VFPv2", "VFPv3", "VFPv3-D16", "VFPv4",
     "VFPv4-D16", "ARMv8-a FP", "ARMv8-a FP-D16"
   };
@@ -182,7 +182,7 @@
 
 void ARMAttributeParser::WMMX_arch(AttrType Tag, const uint8_t *Data,
                                    uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "WMMXv1", "WMMXv2" };
+  static const char *const Strings[] = { "Not Permitted", "WMMXv1", "WMMXv2" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -192,7 +192,7 @@
 
 void ARMAttributeParser::Advanced_SIMD_arch(AttrType Tag, const uint8_t *Data,
                                             uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "NEONv1", "NEONv2+FMA", "ARMv8-a NEON", "ARMv8.1-a NEON"
   };
 
@@ -204,7 +204,7 @@
 
 void ARMAttributeParser::PCS_config(AttrType Tag, const uint8_t *Data,
                                     uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "None", "Bare Platform", "Linux Application", "Linux DSO", "Palm OS 2004",
     "Reserved (Palm OS)", "Symbian OS 2004", "Reserved (Symbian OS)"
   };
@@ -217,7 +217,7 @@
 
 void ARMAttributeParser::ABI_PCS_R9_use(AttrType Tag, const uint8_t *Data,
                                         uint32_t &Offset) {
-  static const char *Strings[] = { "v6", "Static Base", "TLS", "Unused" };
+  static const char *const Strings[] = { "v6", "Static Base", "TLS", "Unused" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -227,7 +227,7 @@
 
 void ARMAttributeParser::ABI_PCS_RW_data(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Absolute", "PC-relative", "SB-relative", "Not Permitted"
   };
 
@@ -239,7 +239,9 @@
 
 void ARMAttributeParser::ABI_PCS_RO_data(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = { "Absolute", "PC-relative", "Not Permitted" };
+  static const char *const Strings[] = {
+    "Absolute", "PC-relative", "Not Permitted"
+  };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -249,7 +251,9 @@
 
 void ARMAttributeParser::ABI_PCS_GOT_use(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "Direct", "GOT-Indirect" };
+  static const char *const Strings[] = {
+    "Not Permitted", "Direct", "GOT-Indirect"
+  };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -259,7 +263,7 @@
 
 void ARMAttributeParser::ABI_PCS_wchar_t(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "Unknown", "2-byte", "Unknown", "4-byte"
   };
 
@@ -271,7 +275,7 @@
 
 void ARMAttributeParser::ABI_FP_rounding(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = { "IEEE-754", "Runtime" };
+  static const char *const Strings[] = { "IEEE-754", "Runtime" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -281,7 +285,9 @@
 
 void ARMAttributeParser::ABI_FP_denormal(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = { "Unsupported", "IEEE-754", "Sign Only" };
+  static const char *const Strings[] = {
+    "Unsupported", "IEEE-754", "Sign Only"
+  };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -291,7 +297,7 @@
 
 void ARMAttributeParser::ABI_FP_exceptions(AttrType Tag, const uint8_t *Data,
                                            uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "IEEE-754" };
+  static const char *const Strings[] = { "Not Permitted", "IEEE-754" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -302,7 +308,7 @@
 void ARMAttributeParser::ABI_FP_user_exceptions(AttrType Tag,
                                                 const uint8_t *Data,
                                                 uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "IEEE-754" };
+  static const char *const Strings[] = { "Not Permitted", "IEEE-754" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -312,7 +318,7 @@
 
 void ARMAttributeParser::ABI_FP_number_model(AttrType Tag, const uint8_t *Data,
                                              uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "Finite Only", "RTABI", "IEEE-754"
   };
 
@@ -324,7 +330,7 @@
 
 void ARMAttributeParser::ABI_align_needed(AttrType Tag, const uint8_t *Data,
                                           uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "8-byte alignment", "4-byte alignment", "Reserved"
   };
 
@@ -344,7 +350,7 @@
 
 void ARMAttributeParser::ABI_align_preserved(AttrType Tag, const uint8_t *Data,
                                              uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Required", "8-byte data alignment", "8-byte data and code alignment",
     "Reserved"
   };
@@ -365,7 +371,7 @@
 
 void ARMAttributeParser::ABI_enum_size(AttrType Tag, const uint8_t *Data,
                                        uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "Packed", "Int32", "External Int32"
   };
 
@@ -377,7 +383,7 @@
 
 void ARMAttributeParser::ABI_HardFP_use(AttrType Tag, const uint8_t *Data,
                                         uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Tag_FP_arch", "Single-Precision", "Reserved", "Tag_FP_arch (deprecated)"
   };
 
@@ -389,7 +395,7 @@
 
 void ARMAttributeParser::ABI_VFP_args(AttrType Tag, const uint8_t *Data,
                                       uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "AAPCS", "AAPCS VFP", "Custom", "Not Permitted"
   };
 
@@ -401,7 +407,7 @@
 
 void ARMAttributeParser::ABI_WMMX_args(AttrType Tag, const uint8_t *Data,
                                        uint32_t &Offset) {
-  static const char *Strings[] = { "AAPCS", "iWMMX", "Custom" };
+  static const char *const Strings[] = { "AAPCS", "iWMMX", "Custom" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -412,7 +418,7 @@
 void ARMAttributeParser::ABI_optimization_goals(AttrType Tag,
                                                 const uint8_t *Data,
                                                 uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "None", "Speed", "Aggressive Speed", "Size", "Aggressive Size", "Debugging",
     "Best Debugging"
   };
@@ -426,7 +432,7 @@
 void ARMAttributeParser::ABI_FP_optimization_goals(AttrType Tag,
                                                    const uint8_t *Data,
                                                    uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "None", "Speed", "Aggressive Speed", "Size", "Aggressive Size", "Accuracy",
     "Best Accuracy"
   };
@@ -461,7 +467,7 @@
 
 void ARMAttributeParser::CPU_unaligned_access(AttrType Tag, const uint8_t *Data,
                                               uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "v6-style" };
+  static const char *const Strings[] = { "Not Permitted", "v6-style" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -471,7 +477,7 @@
 
 void ARMAttributeParser::FP_HP_extension(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = { "If Available", "Permitted" };
+  static const char *const Strings[] = { "If Available", "Permitted" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -481,7 +487,7 @@
 
 void ARMAttributeParser::ABI_FP_16bit_format(AttrType Tag, const uint8_t *Data,
                                              uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "IEEE-754", "VFPv3" };
+  static const char *const Strings[] = { "Not Permitted", "IEEE-754", "VFPv3" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -491,7 +497,7 @@
 
 void ARMAttributeParser::MPextension_use(AttrType Tag, const uint8_t *Data,
                                          uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "Permitted" };
+  static const char *const Strings[] = { "Not Permitted", "Permitted" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -501,7 +507,7 @@
 
 void ARMAttributeParser::DIV_use(AttrType Tag, const uint8_t *Data,
                                  uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "If Available", "Not Permitted", "Permitted"
   };
 
@@ -513,7 +519,7 @@
 
 void ARMAttributeParser::T2EE_use(AttrType Tag, const uint8_t *Data,
                                   uint32_t &Offset) {
-  static const char *Strings[] = { "Not Permitted", "Permitted" };
+  static const char *const Strings[] = { "Not Permitted", "Permitted" };
 
   uint64_t Value = ParseInteger(Data, Offset);
   StringRef ValueDesc =
@@ -523,7 +529,7 @@
 
 void ARMAttributeParser::Virtualization_use(AttrType Tag, const uint8_t *Data,
                                             uint32_t &Offset) {
-  static const char *Strings[] = {
+  static const char *const Strings[] = {
     "Not Permitted", "TrustZone", "Virtualization Extensions",
     "TrustZone + Virtualization Extensions"
   };
