summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2018-03-21 08:34:55 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2018-03-21 08:34:55 +0000
commit6a14c024310cee82692e7e09ad3a624cd25ebab1 (patch)
treed2afae0496435c3f6bf35b6ad7ed87b000215aa9 /llvm/test
parentf1fc25eb747e12a0d4b81144d15e252f039c49ef (diff)
downloadbcm5719-llvm-6a14c024310cee82692e7e09ad3a624cd25ebab1.tar.gz
bcm5719-llvm-6a14c024310cee82692e7e09ad3a624cd25ebab1.zip
[llvm-readobj] - Teach llvm-readobj to dump .note.gnu.property sections.
NT_GNU_PROPERTY_TYPE_0 is a recently added type of .note.gnu.property section specified in Linux Extensions to gABI. (https://github.com/hjl-tools/linux-abi/wiki/Linux-Extensions-to-gABI) Patch teach tool to print such notes properly. Differential revision: https://reviews.llvm.org/D44469 llvm-svn: 328078
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/tools/llvm-readobj/note-gnu-property.s68
-rw-r--r--llvm/test/tools/llvm-readobj/note-gnu-property2.s22
2 files changed, 90 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-readobj/note-gnu-property.s b/llvm/test/tools/llvm-readobj/note-gnu-property.s
new file mode 100644
index 00000000000..6fd69086612
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/note-gnu-property.s
@@ -0,0 +1,68 @@
+// REQUIRES: x86-registered-target
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t
+// RUN: llvm-readobj -elf-output-style GNU --notes %t | FileCheck %s
+
+// CHECK: Displaying notes found at file offset 0x00000040 with length 0x00000070:
+// CHECK-NEXT: Owner Data size Description
+// CHECK-NEXT: GNU 0x00000060 NT_GNU_PROPERTY_TYPE_0 (property note)
+// CHECK-NEXT: Properties: stack size: 0x100
+// CHECK-NEXT: stack size: 0x100
+// CHECK-NEXT: no copy on protected
+// CHECK-NEXT: <application-specific type 0xfefefefe>
+// CHECK-NEXT: stack size: <corrupt length: 0x0>
+// CHECK-NEXT: stack size: <corrupt length: 0x4>
+// CHECK-NEXT: no copy on protected <corrupt length: 0x1>
+// CHECK-NEXT: <corrupt type (0x2) datasz: 0x1>
+
+.section ".note.gnu.property", "a"
+.align 4
+ .long 4 /* Name length is always 4 ("GNU") */
+ .long end - begin /* Data length */
+ .long 5 /* Type: NT_GNU_PROPERTY_TYPE_0 */
+ .asciz "GNU" /* Name */
+ .p2align 3
+begin:
+ .long 1 /* Type: GNU_PROPERTY_STACK_SIZE */
+ .long 8 /* Data size */
+ .quad 0x100 /* Data (stack size) */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ /* Test we handle alignment properly */
+ .long 1 /* Type: GNU_PROPERTY_STACK_SIZE */
+ .long 8 /* Data size */
+ .long 0x100 /* Data (stack size) */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ .long 2 /* Type: GNU_PROPERTY_NO_COPY_ON_PROTECTED */
+ .long 0 /* Data size */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ /* All notes below are broken. Test we are able to report them. */
+
+ /* Broken note type */
+ .long 0xfefefefe /* Invalid type for testing */
+ .long 0 /* Data size */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ /* GNU_PROPERTY_STACK_SIZE with zero stack size */
+ .long 1 /* Type: GNU_PROPERTY_STACK_SIZE */
+ .long 0 /* Data size */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ /* GNU_PROPERTY_STACK_SIZE with data size 4 (should be 8) */
+ .long 1 /* Type: GNU_PROPERTY_STACK_SIZE */
+ .long 4 /* Data size */
+ .long 0x100 /* Data (stack size) */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ /* GNU_PROPERTY_NO_COPY_ON_PROTECTED with pr_datasz and some data */
+ .long 2 /* Type: GNU_PROPERTY_NO_COPY_ON_PROTECTED */
+ .long 1 /* Data size (corrupted) */
+ .byte 1 /* Data */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+
+ /* GNU_PROPERTY_NO_COPY_ON_PROTECTED with pr_datasz and without data */
+ .long 2 /* Type: GNU_PROPERTY_NO_COPY_ON_PROTECTED */
+ .long 1 /* Data size (corrupted) */
+ .p2align 3 /* Align to 8 byte for 64 bit */
+end:
diff --git a/llvm/test/tools/llvm-readobj/note-gnu-property2.s b/llvm/test/tools/llvm-readobj/note-gnu-property2.s
new file mode 100644
index 00000000000..fe6be0c9bcb
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/note-gnu-property2.s
@@ -0,0 +1,22 @@
+// REQUIRES: x86-registered-target
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t
+// RUN: llvm-readobj -elf-output-style GNU --notes %t | FileCheck %s
+
+// CHECK: Displaying notes found at file offset 0x00000040 with length 0x00000014:
+// CHECK-NEXT: Owner Data size Description
+// CHECK-NEXT: GNU 0x00000004 NT_GNU_PROPERTY_TYPE_0 (property note)
+// CHECK-NEXT: Properties:
+// CHECK-NEXT: <corrupted GNU_PROPERTY_TYPE_0>
+
+// Section below is broken, check we report that.
+
+.section ".note.gnu.property", "a"
+.align 4
+ .long 4 /* Name length is always 4 ("GNU") */
+ .long end - begin /* Data length */
+ .long 5 /* Type: NT_GNU_PROPERTY_TYPE_0 */
+ .asciz "GNU" /* Name */
+ .p2align 3
+begin:
+ .long 1 /* Type: GNU_PROPERTY_STACK_SIZE */
+end:
OpenPOWER on IntegriCloud