• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// REQUIRES: x86-registered-target
2// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t
3// RUN: llvm-readobj -elf-output-style GNU --notes %t | FileCheck %s
4
5// CHECK:      Displaying notes found at file offset 0x00000040 with length 0x000000b8:
6// CHECK-NEXT:   Owner                 Data size       Description
7// CHECK-NEXT:   GNU                   0x000000a8      NT_GNU_PROPERTY_TYPE_0 (property note)
8// CHECK-NEXT:     Properties:  stack size: 0x100
9// CHECK-NEXT:     stack size: 0x100
10// CHECK-NEXT:     no copy on protected
11// CHECK-NEXT:     X86 features: SHSTK
12// CHECK-NEXT:     X86 features: IBT, SHSTK
13// CHECK-NEXT:     X86 features: none
14// CHECK-NEXT:     <application-specific type 0xfefefefe>
15// CHECK-NEXT:     stack size: <corrupt length: 0x0>
16// CHECK-NEXT:     stack size: <corrupt length: 0x4>
17// CHECK-NEXT:     no copy on protected <corrupt length: 0x1>
18// CHECK-NEXT:     X86 features: <corrupt length: 0x0>
19// CHECK-NEXT:     X86 features: IBT, <unknown flags: 0xf000f000f000f000>
20// CHECK-NEXT:     <corrupt type (0x2) datasz: 0x1>
21
22.section ".note.gnu.property", "a"
23.align 4
24  .long 4           /* Name length is always 4 ("GNU") */
25  .long end - begin /* Data length */
26  .long 5           /* Type: NT_GNU_PROPERTY_TYPE_0 */
27  .asciz "GNU"      /* Name */
28  .p2align 3
29begin:
30  .long 1           /* Type: GNU_PROPERTY_STACK_SIZE */
31  .long 8           /* Data size */
32  .quad 0x100       /* Data (stack size) */
33  .p2align 3        /* Align to 8 byte for 64 bit */
34
35  /* Test we handle alignment properly */
36  .long 1           /* Type: GNU_PROPERTY_STACK_SIZE */
37  .long 8           /* Data size */
38  .long 0x100       /* Data (stack size) */
39  .p2align 3        /* Align to 8 byte for 64 bit */
40
41  .long 2           /* Type: GNU_PROPERTY_NO_COPY_ON_PROTECTED */
42  .long 0           /* Data size */
43  .p2align 3        /* Align to 8 byte for 64 bit */
44
45  /* CET property note */
46  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */
47  .long 8           /* Data size */
48  .quad 2           /* GNU_PROPERTY_X86_FEATURE_1_SHSTK */
49  .p2align 3        /* Align to 8 byte for 64 bit */
50
51  /* CET property note with padding */
52  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */
53  .long 4           /* Data size */
54  .long 3           /* Full CET support */
55  .p2align 3        /* Align to 8 byte for 64 bit */
56
57  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */
58  .long 8           /* Data size */
59  .quad 0           /* Empty flags, not an error */
60  .p2align 3        /* Align to 8 byte for 64 bit */
61
62  /* All notes below are broken. Test we are able to report them. */
63
64  /* Broken note type */
65  .long 0xfefefefe  /* Invalid type for testing */
66  .long 0           /* Data size */
67  .p2align 3        /* Align to 8 byte for 64 bit */
68
69  /* GNU_PROPERTY_STACK_SIZE with zero stack size */
70  .long 1           /* Type: GNU_PROPERTY_STACK_SIZE */
71  .long 0           /* Data size */
72  .p2align 3        /* Align to 8 byte for 64 bit */
73
74  /* GNU_PROPERTY_STACK_SIZE with data size 4 (should be 8) */
75  .long 1           /* Type: GNU_PROPERTY_STACK_SIZE */
76  .long 4           /* Data size */
77  .long 0x100       /* Data (stack size) */
78  .p2align 3        /* Align to 8 byte for 64 bit */
79
80  /* GNU_PROPERTY_NO_COPY_ON_PROTECTED with pr_datasz and some data */
81  .long 2           /* Type: GNU_PROPERTY_NO_COPY_ON_PROTECTED */
82  .long 1           /* Data size (corrupted) */
83  .byte 1           /* Data */
84  .p2align 3        /* Align to 8 byte for 64 bit */
85
86  /* CET note with size zero */
87  .long 0xc0000002  /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */
88  .long 0           /* Data size */
89  .p2align 3        /* Align to 8 byte for 64 bit */
90
91  /* CET note with bad flags */
92  .long 0xc0000002         /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */
93  .long 8                  /* Data size */
94  .quad 0xf000f000f000f001 /* GNU_PROPERTY_X86_FEATURE_1_IBT and bad bits */
95  .p2align 3               /* Align to 8 byte for 64 bit */
96
97  /* GNU_PROPERTY_NO_COPY_ON_PROTECTED with pr_datasz and without data */
98  .long 2           /* Type: GNU_PROPERTY_NO_COPY_ON_PROTECTED */
99  .long 1           /* Data size (corrupted) */
100  .p2align 3        /* Align to 8 byte for 64 bit */
101end:
102