<div dir="ltr">Hello Alexander,<br><br>This commit broke tests for couple of our builders yesterday:<br><br><a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/17420">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/17420</a><br><a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win">http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win</a><br><br>. . .<br>Failing Tests (1):<br>    LLVM :: tools/llvm-readobj/note-gnu-property.s<br><br>Please have a look ASAP?<br><br>Thanks<br><br><div>Galina</div><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 29, 2018 at 7:49 AM, Alexander Ivchenko via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: aivchenk<br>
Date: Tue May 29 07:49:51 2018<br>
New Revision: 333424<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=333424&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=333424&view=rev</a><br>
Log:<br>
[llvm-readobj] Support GNU_PROPERTY_X86_FEATURE_1_AND notes in .note.gnu.property<br>
<br>
This patch allows parsing GNU_PROPERTY_X86_FEATURE_1_AND<br>
notes in .note.gnu.property sections. These notes<br>
indicate that the object file is built to support Intel CET.<br>
<br>
patch by mike.dvoretsky<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D47473" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D47473</a><br>
<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h<br>
    llvm/trunk/test/tools/llvm-<wbr>readobj/note-gnu-property.s<br>
    llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/ELF.h?rev=333424&r1=333423&r2=333424&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/BinaryFormat/ELF.h?rev=<wbr>333424&r1=333423&r2=333424&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>BinaryFormat/ELF.h Tue May 29 07:49:51 2018<br>
@@ -1308,6 +1308,13 @@ enum {<br>
 enum {<br>
   GNU_PROPERTY_STACK_SIZE = 1,<br>
   GNU_PROPERTY_NO_COPY_ON_<wbr>PROTECTED = 2,<br>
+  GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002<br>
+};<br>
+<br>
+// CET properties<br>
+enum {<br>
+  GNU_PROPERTY_X86_FEATURE_1_IBT = 1 << 0,<br>
+  GNU_PROPERTY_X86_FEATURE_1_<wbr>SHSTK = 1 << 1<br>
 };<br>
<br>
 // AMDGPU specific notes.<br>
<br>
Modified: llvm/trunk/test/tools/llvm-<wbr>readobj/note-gnu-property.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/note-gnu-property.s?rev=333424&r1=333423&r2=333424&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/tools/<wbr>llvm-readobj/note-gnu-<wbr>property.s?rev=333424&r1=<wbr>333423&r2=333424&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/tools/llvm-<wbr>readobj/note-gnu-property.s (original)<br>
+++ llvm/trunk/test/tools/llvm-<wbr>readobj/note-gnu-property.s Tue May 29 07:49:51 2018<br>
@@ -2,16 +2,21 @@<br>
 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t<br>
 // RUN: llvm-readobj -elf-output-style GNU --notes %t | FileCheck %s<br>
<br>
-// CHECK:      Displaying notes found at file offset 0x00000040 with length 0x00000070:<br>
+// CHECK:      Displaying notes found at file offset 0x00000040 with length 0x000000b8:<br>
 // CHECK-NEXT:   Owner                 Data size       Description<br>
-// CHECK-NEXT:   GNU                   0x00000060      NT_GNU_PROPERTY_TYPE_0 (property note)<br>
+// CHECK-NEXT:   GNU                   0x000000a8      NT_GNU_PROPERTY_TYPE_0 (property note)<br>
 // CHECK-NEXT:     Properties:  stack size: 0x100<br>
 // CHECK-NEXT:     stack size: 0x100<br>
 // CHECK-NEXT:     no copy on protected<br>
+// CHECK-NEXT:     X86 features: SHSTK<br>
+// CHECK-NEXT:     X86 features: IBT, SHSTK<br>
+// CHECK-NEXT:     X86 features: none<br>
 // CHECK-NEXT:     <application-specific type 0xfefefefe><br>
 // CHECK-NEXT:     stack size: <corrupt length: 0x0><br>
 // CHECK-NEXT:     stack size: <corrupt length: 0x4> <br>
 // CHECK-NEXT:     no copy on protected <corrupt length: 0x1><br>
+// CHECK-NEXT:     X86 features: <corrupt length: 0x0><br>
+// CHECK-NEXT:     X86 features: IBT, <unknown flags: 0xf000f000f000f000><br>
 // CHECK-NEXT:     <corrupt type (0x2) datasz: 0x1><br>
<br>
 .section ".note.gnu.property", "a"<br>
@@ -26,7 +31,7 @@ begin:<br>
   .long 8           /* Data size */<br>
   .quad 0x100       /* Data (stack size) */<br>
   .p2align 3        /* Align to 8 byte for 64 bit */<br>
-  <br>
+<br>
   /* Test we handle alignment properly */<br>
   .long 1           /* Type: GNU_PROPERTY_STACK_SIZE */<br>
   .long 8           /* Data size */<br>
@@ -36,6 +41,23 @@ begin:<br>
   .long 2           /* Type: GNU_PROPERTY_NO_COPY_ON_<wbr>PROTECTED */<br>
   .long 0           /* Data size */<br>
   .p2align 3        /* Align to 8 byte for 64 bit */<br>
+<br>
+  /* CET property note */<br>
+  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */<br>
+  .long 8           /* Data size */<br>
+  .quad 2           /* GNU_PROPERTY_X86_FEATURE_1_<wbr>SHSTK */<br>
+  .p2align 3        /* Align to 8 byte for 64 bit */<br>
+<br>
+  /* CET property note with padding */<br>
+  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */<br>
+  .long 4           /* Data size */<br>
+  .long 3           /* Full CET support */<br>
+  .p2align 3        /* Align to 8 byte for 64 bit */<br>
+<br>
+  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */<br>
+  .long 8           /* Data size */<br>
+  .quad 0           /* Empty flags, not an error */<br>
+  .p2align 3        /* Align to 8 byte for 64 bit */<br>
<br>
   /* All notes below are broken. Test we are able to report them. */<br>
<br>
@@ -60,6 +82,17 @@ begin:<br>
   .long 1           /* Data size (corrupted) */<br>
   .byte 1           /* Data */<br>
   .p2align 3        /* Align to 8 byte for 64 bit */<br>
+<br>
+  /* CET note with size zero */<br>
+  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */<br>
+  .long 0           /* Data size */<br>
+  .p2align 3        /* Align to 8 byte for 64 bit */<br>
+<br>
+  /* CET note with bad flags */<br>
+  .long 0xc0000002         /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */<br>
+  .long 8                  /* Data size */<br>
+  .quad 0xf000f000f000f001 /* GNU_PROPERTY_X86_FEATURE_1_IBT and bad bits */<br>
+  .p2align 3               /* Align to 8 byte for 64 bit */<br>
<br>
   /* GNU_PROPERTY_NO_COPY_ON_<wbr>PROTECTED with pr_datasz and without data */<br>
   .long 2           /* Type: GNU_PROPERTY_NO_COPY_ON_<wbr>PROTECTED */<br>
<br>
Modified: llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=333424&r1=333423&r2=333424&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/tools/llvm-<wbr>readobj/ELFDumper.cpp?rev=<wbr>333424&r1=333423&r2=333424&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp (original)<br>
+++ llvm/trunk/tools/llvm-readobj/<wbr>ELFDumper.cpp Tue May 29 07:49:51 2018<br>
@@ -3457,7 +3457,7 @@ static void printGNUProperty(raw_ostream<br>
   case GNU_PROPERTY_STACK_SIZE: {<br>
     OS << "    stack size: ";<br>
     if (DataSize == sizeof(typename ELFT::uint))<br>
-      OS << format("0x%x\n",<br>
+      OS << format("0x%lx\n",<br>
                    (uint64_t)(*(const typename ELFT::Addr *)Data.data()));<br>
     else<br>
       OS << format("<corrupt length: 0x%x>\n", DataSize);<br>
@@ -3469,6 +3469,36 @@ static void printGNUProperty(raw_ostream<br>
       OS << format(" <corrupt length: 0x%x>", DataSize);<br>
     OS << "\n";<br>
     break;<br>
+  case GNU_PROPERTY_X86_FEATURE_1_<wbr>AND:<br>
+    OS << "    X86 features: ";<br>
+    if (DataSize != 4 && DataSize != 8) {<br>
+      OS << format("<corrupt length: 0x%x>\n", DataSize);<br>
+      break;<br>
+    }<br>
+    uint64_t CFProtection =<br>
+        (DataSize == 4)<br>
+            ? support::endian::read32<ELFT::<wbr>TargetEndianness>(Data.data())<br>
+            : support::endian::read64<ELFT::<wbr>TargetEndianness>(Data.data())<wbr>;<br>
+    if (CFProtection == 0) {<br>
+      OS << "none\n";<br>
+      break;<br>
+    }<br>
+    if (CFProtection & GNU_PROPERTY_X86_FEATURE_1_<wbr>IBT) {<br>
+      OS << "IBT";<br>
+      CFProtection &= ~GNU_PROPERTY_X86_FEATURE_1_<wbr>IBT;<br>
+      if (CFProtection)<br>
+        OS << ", ";<br>
+    }<br>
+    if (CFProtection & GNU_PROPERTY_X86_FEATURE_1_<wbr>SHSTK) {<br>
+      OS << "SHSTK";<br>
+      CFProtection &= ~GNU_PROPERTY_X86_FEATURE_1_<wbr>SHSTK;<br>
+      if (CFProtection)<br>
+        OS << ", ";<br>
+    }<br>
+    if (CFProtection)<br>
+      OS << format("<unknown flags: 0x%lx>", CFProtection);<br>
+    OS << "\n";<br>
+    break;<br>
   }<br>
 }<br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>