[PATCH] D93044: [llvm-readobj/elf] - AArch64: Handle AARCH64_VARIANT_PCS for GNUStyle

Adhemerval Zanella via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 11 05:11:39 PST 2020


zatrazz updated this revision to Diff 311177.
zatrazz added a comment.
Herald added a reviewer: espindola.

Updated patch based on previous comments.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93044/new/

https://reviews.llvm.org/D93044

Files:
  llvm/include/llvm/BinaryFormat/DynamicTags.def
  llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
  llvm/tools/llvm-readobj/ELFDumper.cpp


Index: llvm/tools/llvm-readobj/ELFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/ELFDumper.cpp
+++ llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -2471,6 +2471,7 @@
     switch (Type) {
     case DT_AARCH64_BTI_PLT:
     case DT_AARCH64_PAC_PLT:
+    case DT_AARCH64_VARIANT_PCS:
       return std::to_string(Value);
     default:
       break;
@@ -4033,9 +4034,22 @@
       printEnum(Symbol.getBinding(), makeArrayRef(ElfSymbolBindings));
   Fields[5].Str =
       printEnum(Symbol.getVisibility(), makeArrayRef(ElfSymbolVisibilities));
-  if (Symbol.st_other & ~0x3)
-    Fields[5].Str +=
-        " [<other: " + to_string(format_hex(Symbol.st_other, 2)) + ">]";
+
+  if (Symbol.st_other & ~0x3) {
+    if (this->Obj.getHeader().e_machine == ELF::EM_AARCH64) {
+      uint8_t other = Symbol.st_other & ~0x3;
+      if (other & STO_AARCH64_VARIANT_PCS) {
+        other &= ~STO_AARCH64_VARIANT_PCS;
+        Fields[5].Str += " [VARIANT_PCS";
+        if (other != 0)
+          Fields[5].Str.append(" | " + to_hexString(other, false));
+        Fields[5].Str.append("]");
+      }
+    } else {
+      Fields[5].Str +=
+          " [<other: " + to_string(format_hex(Symbol.st_other, 2)) + ">]";
+    }
+  }
 
   Fields[6].Column += NonVisibilityBitsUsed ? 13 : 0;
   Fields[6].Str = getSymbolSectionNdx(Symbol, SymIndex);
Index: llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
===================================================================
--- llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
+++ llvm/test/tools/llvm-readobj/ELF/dynamic-tags-machine-specific.test
@@ -351,17 +351,19 @@
 # RUN: llvm-readobj --dynamic-table %t.aarch64 | FileCheck %s --check-prefix=LLVM-AARCH64
 # RUN: llvm-readelf --dynamic-table %t.aarch64 | FileCheck %s --check-prefix=GNU-AARCH64
 
-# LLVM-AARCH64:     DynamicSection [ (3 entries)
+# LLVM-AARCH64:     DynamicSection [ (4 entries)
 # LLVM-AARCH64-NEXT:  Tag                Type            Name/Value
 # LLVM-AARCH64-NEXT:  0x0000000070000001 AARCH64_BTI_PLT 1
 # LLVM-AARCH64-NEXT:  0x0000000070000003 AARCH64_PAC_PLT 2
+# LLVM-AARCH64-NEXT:  0x0000000070000005 AARCH64_VARIANT_PCS 3
 # LLVM-AARCH64-NEXT:  0x0000000000000000 NULL            0x0
 # LLVM-AARCH64-NEXT:]
 
-# GNU-AARCH64:      Dynamic section at offset {{.*}} contains 3 entries:
+# GNU-AARCH64:      Dynamic section at offset {{.*}} contains 4 entries:
 # GNU-AARCH64-NEXT:  Tag                Type              Name/Value
 # GNU-AARCH64-NEXT:  0x0000000070000001 (AARCH64_BTI_PLT) 1
 # GNU-AARCH64-NEXT:  0x0000000070000003 (AARCH64_PAC_PLT) 2
+# GNU-AARCH64-NEXT:  0x0000000070000005 (AARCH64_VARIANT_PCS) 3
 # GNU-AARCH64-NEXT:  0x0000000000000000 (NULL)            0x0
 
 --- !ELF
@@ -378,6 +380,8 @@
         Value: 1
       - Tag:   DT_AARCH64_PAC_PLT
         Value: 2
+      - Tag:   DT_AARCH64_VARIANT_PCS
+        Value: 3
       - Tag:   DT_NULL
         Value: 0
 ProgramHeaders:
Index: llvm/include/llvm/BinaryFormat/DynamicTags.def
===================================================================
--- llvm/include/llvm/BinaryFormat/DynamicTags.def
+++ llvm/include/llvm/BinaryFormat/DynamicTags.def
@@ -120,6 +120,7 @@
 // AArch64 specific dynamic table entries
 AARCH64_DYNAMIC_TAG(AARCH64_BTI_PLT, 0x70000001)
 AARCH64_DYNAMIC_TAG(AARCH64_PAC_PLT, 0x70000003)
+AARCH64_DYNAMIC_TAG(AARCH64_VARIANT_PCS, 0x70000005)
 
 // Hexagon specific dynamic table entries
 HEXAGON_DYNAMIC_TAG(HEXAGON_SYMSZ, 0x70000000)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D93044.311177.patch
Type: text/x-patch
Size: 3530 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201211/51a107f0/attachment.bin>


More information about the llvm-commits mailing list