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