[llvm-readobj] Rename JSON Flag fields to be more consistent
authorPaul Kirth <paulkirth@google.com>
Sat, 18 Mar 2023 00:00:57 +0000 (00:00 +0000)
committerPaul Kirth <paulkirth@google.com>
Sat, 18 Mar 2023 00:04:47 +0000 (00:04 +0000)
Today the JSON uses `Value` and `RawValue` when printing `Flags`, when really
the `Value` field is always the name of an Enum variant, and `RawValue` is its
underlying numeric value. Similarly, we rename the `RawFlags` key to `Value`,
to match the new scheme. This also allows JSON parsing to use consistent logic
for `Flag` types.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D137091

llvm/docs/ReleaseNotes.rst
llvm/include/llvm/Support/ScopedPrinter.h
llvm/test/tools/llvm-readobj/ELF/aarch64-symbols-stother.test
llvm/test/tools/llvm-readobj/ELF/mips-symbols-stother.test
llvm/test/tools/llvm-readobj/ELF/relocations.test
llvm/test/tools/llvm-readobj/ELF/symbol-visibility.test
llvm/unittests/Support/ScopedPrinterTest.cpp

index e0da56d..c752b8d 100644 (file)
@@ -205,6 +205,9 @@ Changes to the LLVM tools
 ---------------------------------
 * llvm-lib now supports the /def option for generating a Windows import library from a definition file.
 
+* Made significant changes to JSON output format of `llvm-readobj`/`llvm-readelf`
+  to improve correctness and clarity.
+
 Changes to LLDB
 ---------------------------------
 
index b91acb5..15965bf 100644 (file)
@@ -682,7 +682,7 @@ private:
   void printFlagsImpl(StringRef Label, HexNumber Value,
                       ArrayRef<FlagEntry> Flags) override {
     JOS.attributeObject(Label, [&]() {
-      JOS.attribute("RawFlags", hexNumberToInt(Value));
+      JOS.attribute("Value", hexNumberToInt(Value));
       JOS.attributeArray("Flags", [&]() {
         for (const FlagEntry &Flag : Flags) {
           JOS.objectBegin();
@@ -697,7 +697,7 @@ private:
   void printFlagsImpl(StringRef Label, HexNumber Value,
                       ArrayRef<HexNumber> Flags) override {
     JOS.attributeObject(Label, [&]() {
-      JOS.attribute("RawFlags", hexNumberToInt(Value));
+      JOS.attribute("Value", hexNumberToInt(Value));
       JOS.attributeArray("Flags", [&]() {
         for (const HexNumber &Flag : Flags) {
           JOS.value(Flag.Value);
@@ -728,8 +728,8 @@ private:
 
   void printHexImpl(StringRef Label, StringRef Str, HexNumber Value) override {
     JOS.attributeObject(Label, [&]() {
-      JOS.attribute("Value", Str);
-      JOS.attribute("RawValue", hexNumberToInt(Value));
+      JOS.attribute("Name", Str);
+      JOS.attribute("Value", hexNumberToInt(Value));
     });
   }
 
@@ -744,8 +744,8 @@ private:
   void printNumberImpl(StringRef Label, StringRef Str,
                        StringRef Value) override {
     JOS.attributeObject(Label, [&]() {
-      JOS.attribute("Value", Str);
-      JOS.attributeBegin("RawValue");
+      JOS.attribute("Name", Str);
+      JOS.attributeBegin("Value");
       JOS.rawValueBegin() << Value;
       JOS.rawValueEnd();
       JOS.attributeEnd();
index 35205ae..a223c51 100644 (file)
@@ -29,9 +29,9 @@
 # GNU-NEXT: 3: 0000000000000000 0 NOTYPE LOCAL PROTECTED [VARIANT_PCS]      UND foo3
 # GNU-NEXT: 4: 0000000000000000 0 NOTYPE LOCAL PROTECTED                    UND foo4
 
-# JSON:     "Value": "foo1",
+# JSON:     "Name": "foo1",
 # JSON:     "Other": {
-# JSON-NEXT:  "RawFlags": 128,
+# JSON-NEXT:  "Value": 128,
 # JSON-NEXT:  "Flags": [
 # JSON-NEXT:    {
 # JSON-NEXT:      "Name": "STO_AARCH64_VARIANT_PCS",
@@ -40,9 +40,9 @@
 # JSON-NEXT:  ]
 # JSON-NEXT:},
 
-# JSON:     "Value": "foo2",
+# JSON:     "Name": "foo2",
 # JSON:     "Other": {
-# JSON-NEXT:  "RawFlags": 192,
+# JSON-NEXT:  "Value": 192,
 # JSON-NEXT:  "Flags": [
 # JSON-NEXT:    {
 # JSON-NEXT:      "Name": "STO_AARCH64_VARIANT_PCS",
@@ -51,9 +51,9 @@
 # JSON-NEXT:  ]
 # JSON-NEXT:},
 
-# JSON:     "Value": "foo3",
+# JSON:     "Name": "foo3",
 # JSON:     "Other": {
-# JSON-NEXT:  "RawFlags": 131,
+# JSON-NEXT:  "Value": 131,
 # JSON-NEXT:  "Flags": [
 # JSON-NEXT:    {
 # JSON-NEXT:      "Name": "STO_AARCH64_VARIANT_PCS",
@@ -66,9 +66,9 @@
 # JSON-NEXT:  ]
 # JSON-NEXT:},
 
-# JSON:     "Value": "foo4",
+# JSON:     "Name": "foo4",
 # JSON:     "Other": {
-# JSON-NEXT:  "RawFlags": 3,
+# JSON-NEXT:  "Value": 3,
 # JSON-NEXT:  "Flags": [
 # JSON-NEXT:    {
 # JSON-NEXT:      "Name": "STV_PROTECTED",
index 983aefb..cc6a139 100644 (file)
@@ -24,9 +24,9 @@
 # MIPS-GNU-NEXT:    1: 00000000     0 NOTYPE  LOCAL  DEFAULT [<other: 0xac>] UND foo
 # MIPS-GNU-NEXT:    2: 00000000     0 NOTYPE  LOCAL  DEFAULT [<other: 0xf0>] UND bar
 
-# MIPS-JSON:      "Value": "foo",
+# MIPS-JSON:      "Name": "foo",
 # MIPS-JSON:      "Other": {
-# MIPS-JSON-NEXT:   "RawFlags": 172,
+# MIPS-JSON-NEXT:   "Value": 172,
 # MIPS-JSON-NEXT:   "Flags": [
 # MIPS-JSON-NEXT:     {
 # MIPS-JSON-NEXT:       "Name": "STO_MIPS_MICROMIPS",
@@ -46,9 +46,9 @@
 # MIPS-JSON-NEXT:     }
 # MIPS-JSON-NEXT:   ]
 # MIPS-JSON-NEXT: },
-# MIPS-JSON:      "Value": "bar",
+# MIPS-JSON:      "Name": "bar",
 # MIPS-JSON:      "Other": {
-# MIPS-JSON-NEXT:   "RawFlags": 240,
+# MIPS-JSON-NEXT:   "Value": 240,
 # MIPS-JSON-NEXT:   "Flags": [
 # MIPS-JSON-NEXT:     {
 # MIPS-JSON-NEXT:       "Name": "STO_MIPS_MIPS16",
index 5c9e029..34a610b 100644 (file)
 # JSON-EXPAND-64:        "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 0,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_NONE",
-# JSON-EXPAND-64-NEXT:       "RawValue": 0
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_NONE",
+# JSON-EXPAND-64-NEXT:       "Value": 0
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rel_0",
-# JSON-EXPAND-64-NEXT:       "RawValue": 1
+# JSON-EXPAND-64-NEXT:       "Name": "rel_0",
+# JSON-EXPAND-64-NEXT:       "Value": 1
 # JSON-EXPAND-64-NEXT:     }
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT: },
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 1,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_PC32",
-# JSON-EXPAND-64-NEXT:       "RawValue": 2
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_PC32",
+# JSON-EXPAND-64-NEXT:       "Value": 2
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rel_neg",
-# JSON-EXPAND-64-NEXT:       "RawValue": 2
+# JSON-EXPAND-64-NEXT:       "Name": "rel_neg",
+# JSON-EXPAND-64-NEXT:       "Value": 2
 # JSON-EXPAND-64-NEXT:     }
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT: },
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 5,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_PLT32",
-# JSON-EXPAND-64-NEXT:       "RawValue": 4
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_PLT32",
+# JSON-EXPAND-64-NEXT:       "Value": 4
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rel_pos",
-# JSON-EXPAND-64-NEXT:       "RawValue": 3
+# JSON-EXPAND-64-NEXT:       "Name": "rel_pos",
+# JSON-EXPAND-64-NEXT:       "Value": 3
 # JSON-EXPAND-64-NEXT:     }
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT: },
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 9,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_64",
-# JSON-EXPAND-64-NEXT:       "RawValue": 1
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_64",
+# JSON-EXPAND-64-NEXT:       "Value": 1
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rel_64",
-# JSON-EXPAND-64-NEXT:       "RawValue": 4
+# JSON-EXPAND-64-NEXT:       "Name": "rel_64",
+# JSON-EXPAND-64-NEXT:       "Value": 4
 # JSON-EXPAND-64-NEXT:     }
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT: }}
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 0,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_NONE",
-# JSON-EXPAND-64-NEXT:       "RawValue": 0
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_NONE",
+# JSON-EXPAND-64-NEXT:       "Value": 0
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rela_0",
-# JSON-EXPAND-64-NEXT:       "RawValue": 5
+# JSON-EXPAND-64-NEXT:       "Name": "rela_0",
+# JSON-EXPAND-64-NEXT:       "Value": 5
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Addend": 0
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 1,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_PC32",
-# JSON-EXPAND-64-NEXT:       "RawValue": 2
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_PC32",
+# JSON-EXPAND-64-NEXT:       "Value": 2
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rela_neg",
-# JSON-EXPAND-64-NEXT:       "RawValue": 6
+# JSON-EXPAND-64-NEXT:       "Name": "rela_neg",
+# JSON-EXPAND-64-NEXT:       "Value": 6
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Addend": 18446744073709551615
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 5,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_PLT32",
-# JSON-EXPAND-64-NEXT:       "RawValue": 4
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_PLT32",
+# JSON-EXPAND-64-NEXT:       "Value": 4
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rela_pos",
-# JSON-EXPAND-64-NEXT:       "RawValue": 7
+# JSON-EXPAND-64-NEXT:       "Name": "rela_pos",
+# JSON-EXPAND-64-NEXT:       "Value": 7
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Addend": 2
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 18446744073709551615,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_64",
-# JSON-EXPAND-64-NEXT:       "RawValue": 1
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_64",
+# JSON-EXPAND-64-NEXT:       "Value": 1
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rela_minneg",
-# JSON-EXPAND-64-NEXT:       "RawValue": 8
+# JSON-EXPAND-64-NEXT:       "Name": "rela_minneg",
+# JSON-EXPAND-64-NEXT:       "Value": 8
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Addend": 9223372036854775808
 # JSON-EXPAND-64-NEXT:   }
 # JSON-EXPAND-64-NEXT:   "Relocation": {
 # JSON-EXPAND-64-NEXT:     "Offset": 9,
 # JSON-EXPAND-64-NEXT:     "Type": {
-# JSON-EXPAND-64-NEXT:       "Value": "R_X86_64_32S",
-# JSON-EXPAND-64-NEXT:       "RawValue": 11
+# JSON-EXPAND-64-NEXT:       "Name": "R_X86_64_32S",
+# JSON-EXPAND-64-NEXT:       "Value": 11
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Symbol": {
-# JSON-EXPAND-64-NEXT:       "Value": "rela_maxpos",
-# JSON-EXPAND-64-NEXT:       "RawValue": 9
+# JSON-EXPAND-64-NEXT:       "Name": "rela_maxpos",
+# JSON-EXPAND-64-NEXT:       "Value": 9
 # JSON-EXPAND-64-NEXT:     },
 # JSON-EXPAND-64-NEXT:     "Addend": 9223372036854775807
 # JSON-EXPAND-64-NEXT:   }
index fa3a8c1..a25e1e0 100644 (file)
 # GNU-NEXT: HIDDEN    UND hidden
 # GNU-NEXT: PROTECTED UND protected
 
-# JSON:      "Value": "default",
+# JSON:      "Name": "default",
 # JSON:      "Other": {
-# JSON-NEXT:   "RawFlags": 0,
+# JSON-NEXT:   "Value": 0,
 # JSON-NEXT:   "Flags": []
 # JSON-NEXT: },
 
-# JSON:      "Value": "internal",
+# JSON:      "Name": "internal",
 # JSON:      "Other": {
-# JSON-NEXT:    "RawFlags": 1,
+# JSON-NEXT:    "Value": 1,
 # JSON-NEXT:    "Flags": [
 # JSON-NEXT:      {
 # JSON-NEXT:        "Name": "STV_INTERNAL",
@@ -48,9 +48,9 @@
 # JSON-NEXT:    ]
 # JSON-NEXT:  },
 
-# JSON:      "Value": "hidden",
+# JSON:      "Name": "hidden",
 # JSON:      "Other": {
-# JSON-NEXT:    "RawFlags": 2,
+# JSON-NEXT:    "Value": 2,
 # JSON-NEXT:    "Flags": [
 # JSON-NEXT:      {
 # JSON-NEXT:        "Name": "STV_HIDDEN",
@@ -59,9 +59,9 @@
 # JSON-NEXT:    ]
 # JSON-NEXT:  },
 
-# JSON:      "Value": "protected",
+# JSON:      "Name": "protected",
 # JSON:      "Other": {
-# JSON-NEXT:    "RawFlags": 3,
+# JSON-NEXT:    "Value": 3,
 # JSON-NEXT:    "Flags": [
 # JSON-NEXT:      {
 # JSON-NEXT:        "Name": "STV_PROTECTED",
index 5afb796..b98fe53 100644 (file)
@@ -236,8 +236,8 @@ DoesNotExist: 0x5
 
   const char *JSONExpectedOut = R"({
   "Exists": {
-    "Value": "Name2",
-    "RawValue": 2
+    "Name": "Name2",
+    "Value": 2
   },
   "DoesNotExist": 5
 })";
@@ -345,15 +345,15 @@ FirstSecondThirdByteMask [ (0x333)
 
   const char *JSONExpectedOut = R"({
   "ZeroFlag": {
-    "RawFlags": 0,
+    "Value": 0,
     "Flags": []
   },
   "NoFlag": {
-    "RawFlags": 8,
+    "Value": 8,
     "Flags": []
   },
   "Flag1": {
-    "RawFlags": 1,
+    "Value": 1,
     "Flags": [
       {
         "Name": "Name1",
@@ -362,7 +362,7 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "Flag1&3": {
-    "RawFlags": 5,
+    "Value": 5,
     "Flags": [
       {
         "Name": "Name1",
@@ -375,30 +375,30 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "ZeroFlagRaw": {
-    "RawFlags": 0,
+    "Value": 0,
     "Flags": []
   },
   "NoFlagRaw": {
-    "RawFlags": 8,
+    "Value": 8,
     "Flags": [
       8
     ]
   },
   "Flag1Raw": {
-    "RawFlags": 1,
+    "Value": 1,
     "Flags": [
       1
     ]
   },
   "Flag1&3Raw": {
-    "RawFlags": 5,
+    "Value": 5,
     "Flags": [
       1,
       4
     ]
   },
   "FlagSorted": {
-    "RawFlags": 7,
+    "Value": 7,
     "Flags": [
       {
         "Name": "A",
@@ -415,7 +415,7 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "NoBitMask": {
-    "RawFlags": 4095,
+    "Value": 4095,
     "Flags": [
       {
         "Name": "FirstByte1",
@@ -456,7 +456,7 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "FirstByteMask": {
-    "RawFlags": 3,
+    "Value": 3,
     "Flags": [
       {
         "Name": "FirstByte3",
@@ -465,7 +465,7 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "SecondByteMask": {
-    "RawFlags": 48,
+    "Value": 48,
     "Flags": [
       {
         "Name": "SecondByte3",
@@ -474,7 +474,7 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "ValueOutsideMask": {
-    "RawFlags": 1,
+    "Value": 1,
     "Flags": [
       {
         "Name": "FirstByte1",
@@ -483,11 +483,11 @@ FirstSecondThirdByteMask [ (0x333)
     ]
   },
   "FirstSecondByteMask": {
-    "RawFlags": 255,
+    "Value": 255,
     "Flags": []
   },
   "FirstSecondThirdByteMask": {
-    "RawFlags": 819,
+    "Value": 819,
     "Flags": [
       {
         "Name": "FirstByte3",
@@ -594,8 +594,8 @@ label: value (0)
   "int8_t-min": -128,
   "apsint": 9999999999999999999999,
   "label": {
-    "Value": "value",
-    "RawValue": 0
+    "Name": "value",
+    "Value": 0
   }
 })";
   verifyAll(ExpectedOut, JSONExpectedOut, PrintFunc);
@@ -761,8 +761,8 @@ HexLabel: Name (0x10)
   const char *JSONExpectedOut = R"({
   "HexNumber": 16,
   "HexLabel": {
-    "Value": "Name",
-    "RawValue": 16
+    "Name": "Name",
+    "Value": 16
   }
 })";
   verifyAll(ExpectedOut, JSONExpectedOut, PrintFunc);