Home | History | Annotate | Download | only in tests
      1 # Copyright (C) 2018 Red Hat, Inc.
      2 # This file is part of elfutils.
      3 #
      4 # This file is free software; you can redistribute it and/or modify
      5 # it under the terms of the GNU General Public License as published by
      6 # the Free Software Foundation; either version 3 of the License, or
      7 # (at your option) any later version.
      8 #
      9 # elfutils is distributed in the hope that it will be useful, but
     10 # WITHOUT ANY WARRANTY; without even the implied warranty of
     11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 # GNU General Public License for more details.
     13 #
     14 # You should have received a copy of the GNU General Public License
     15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     16 
     17 . $srcdir/test-subr.sh
     18 
     19 # - testfile-gnu-property-note.c
     20 # int
     21 # main ()
     22 # {
     23 #   return 0;
     24 # }
     25 #
     26 # gcc -fcf-protection -c testfile-gnu-property-note.c
     27 # gcc -o testfile-gnu-property-note testfile-gnu-property-note.o
     28 # eu-strip --strip-sections testfile-gnu-property-note
     29 
     30 testfiles testfile-gnu-property-note.o testfile-gnu-property-note
     31 
     32 # Test reading notes through sections
     33 testrun_compare ${abs_top_builddir}/src/readelf -n testfile-gnu-property-note.o << EOF
     34 
     35 Note section [ 6] '.note.gnu.property' of 32 bytes at offset 0x80:
     36   Owner          Data size  Type
     37   GNU                   16  GNU_PROPERTY_TYPE_0
     38     X86 FEATURE_1_AND: 00000003 IBT SHSTK
     39 EOF
     40 
     41 # Test reading notes through segments
     42 testrun_compare ${abs_top_builddir}/src/readelf -n testfile-gnu-property-note << EOF
     43 
     44 Note segment of 32 bytes at offset 0x300:
     45   Owner          Data size  Type
     46   GNU                   16  GNU_PROPERTY_TYPE_0
     47     X86 FEATURE_1_AND: 00000003 IBT SHSTK
     48 
     49 Note segment of 68 bytes at offset 0x320:
     50   Owner          Data size  Type
     51   GNU                   16  GNU_ABI_TAG
     52     OS: Linux, ABI: 3.2.0
     53   GNU                   20  GNU_BUILD_ID
     54     Build ID: 83cb2229fabd2065d1361f5b46424cd75270f94b
     55 EOF
     56 
     57 # NT_VERSION note type clashes with "GNU" owner type NT_GNU_ABI_TAG.
     58 # Uses owner name (with zero desc) for version string.
     59 testfiles testfile11
     60 testrun_compare ${abs_top_builddir}/src/readelf -n testfile11 << EOF
     61 
     62 Note section [ 2] '.note.ABI-tag' of 32 bytes at offset 0x128:
     63   Owner          Data size  Type
     64   GNU                   16  GNU_ABI_TAG
     65     OS: Linux, ABI: 2.2.5
     66 
     67 Note section [35] '.note' of 60 bytes at offset 0x13364:
     68   Owner          Data size  Type
     69   01.01                  0  VERSION
     70   01.01                  0  VERSION
     71   01.01                  0  VERSION
     72 EOF
     73 
     74 # See run-annobingroup.sh
     75 testfiles testfile-annobingroup.o
     76 testrun_compare ${abs_top_builddir}/src/readelf -n testfile-annobingroup.o << EOF
     77 
     78 Note section [ 5] '.gnu.build.attributes' of 272 bytes at offset 0x50:
     79   Owner          Data size  Type
     80   GA                    16  GNU Build Attribute OPEN
     81     Address Range: 0 - 0
     82     VERSION: "3p8"
     83   GA                     0  GNU Build Attribute OPEN
     84     TOOL: "gcc 8.1.1 20180712"
     85   GA                     0  GNU Build Attribute OPEN
     86     "GOW": 5
     87   GA                     0  GNU Build Attribute OPEN
     88     STACK_PROT: 0
     89   GA                     0  GNU Build Attribute OPEN
     90     "stack_clash": FALSE
     91   GA                     0  GNU Build Attribute OPEN
     92     "cf_protection": 0
     93   GA                     0  GNU Build Attribute OPEN
     94     PIC: 0
     95   GA                     0  GNU Build Attribute OPEN
     96     SHORT_ENUM: FALSE
     97   GA                     0  GNU Build Attribute OPEN
     98     ABI: c001100000012
     99   GA                     0  GNU Build Attribute OPEN
    100     "stack_realign": FALSE
    101 
    102 Note section [ 7] '.gnu.build.attributes..text.unlikely' of 216 bytes at offset 0x160:
    103   Owner          Data size  Type
    104   GA                    16  GNU Build Attribute FUNC
    105     Address Range: 0 - 0
    106     ABI: c001100000012
    107   GA                     0  GNU Build Attribute FUNC
    108     "stack_realign": FALSE
    109   GA                     0  GNU Build Attribute FUNC
    110     STACK_PROT: 0
    111   GA                     0  GNU Build Attribute FUNC
    112     "stack_clash": FALSE
    113   GA                     0  GNU Build Attribute FUNC
    114     "cf_protection": 0
    115   GA                     0  GNU Build Attribute FUNC
    116     PIC: 0
    117   GA                     0  GNU Build Attribute FUNC
    118     "GOW": 5
    119   GA                     0  GNU Build Attribute FUNC
    120     SHORT_ENUM: FALSE
    121 
    122 Note section [22] '.note.gnu.property' of 48 bytes at offset 0x40c:
    123   Owner          Data size  Type
    124   GNU                   32  GNU_PROPERTY_TYPE_0
    125     X86 0xc0000000 data: 00 00 00 00
    126     X86 0xc0000001 data: 00 00 00 00
    127 EOF
    128 
    129 #
    130 # = gnu_props.S
    131 #
    132 # #define NT_GNU_PROPERTY_TYPE_0 5
    133 # #define GNU_PROPERTY_STACK_SIZE 1
    134 # #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2
    135 
    136 # /* Normal notes always have alignment and padding of 4 bytes,
    137 #    but GNU Property notes use 4 byte words, with 8 byte padding
    138 #    for ELFCLASS64.  */
    139 # #if __SIZEOF_PTRDIFF_T__  == 8
    140 # # define ALIGN 3
    141 # #elif __SIZEOF_PTRDIFF_T__  == 4
    142 # # define ALIGN 2
    143 # #endif
    144 #
    145 # 	.section ".note.gnu.property", "a"
    146 # 	.p2align ALIGN
    147 # 	/* First note.  */
    148 # 	.long 1f - 0f			/* name length.  */
    149 # 	.long 4f - 2f			/* data length.  */
    150 # 	.long NT_GNU_PROPERTY_TYPE_0	/* note type.  */
    151 # 0:
    152 # 	.asciz "GNU"			/* vendor name.  */
    153 # 1:
    154 # 	.p2align ALIGN			/* Padding.  */
    155 # 2:
    156 # 	.long GNU_PROPERTY_STACK_SIZE	/* pr_type.  */
    157 # 	.long 4f - 3f			/* pr_datasz.  */
    158 # 3:
    159 # 	.dc.a 0x280000			/* Stack size.  */
    160 # 4:
    161 # 	.p2align ALIGN
    162 #
    163 # 	/* Second note.  */
    164 # 	.long 6f - 5f				/* name length.  */
    165 # 	.long 8f - 7f				/* data length.  */
    166 # 	.long NT_GNU_PROPERTY_TYPE_0		/* note type.  */
    167 # 5:
    168 # 	.asciz "GNU"				/* vendor name.  */
    169 # 6:
    170 # 	.p2align ALIGN				/* Padding.  */
    171 # 7:
    172 # 	.long GNU_PROPERTY_NO_COPY_ON_PROTECTED /* pr_type.  */
    173 # 	.long 0					/* pr_datasz.  */
    174 # 	/* No data.  */
    175 # 8:
    176 # 	.p2align ALIGN
    177 #
    178 # On x86_64
    179 # gcc -m64 -c -o testfile_gnu_props_64le.o gnu_props.S
    180 # gcc -m32 -c -o testfile_gnu_props_32le.o gnu_props.S
    181 
    182 testfiles testfile_gnu_props.32le.o testfile_gnu_props.64le.o
    183 
    184 testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.32le.o << EOF
    185 
    186 Note section [ 4] '.note.gnu.property' of 52 bytes at offset 0x34:
    187   Owner          Data size  Type
    188   GNU                   12  GNU_PROPERTY_TYPE_0
    189     STACK_SIZE 0x280000
    190   GNU                    8  GNU_PROPERTY_TYPE_0
    191     NO_COPY_ON_PROTECTION
    192 EOF
    193 
    194 testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.64le.o << EOF
    195 
    196 Note section [ 4] '.note.gnu.property' of 56 bytes at offset 0x40:
    197   Owner          Data size  Type
    198   GNU                   16  GNU_PROPERTY_TYPE_0
    199     STACK_SIZE 0x280000
    200   GNU                    8  GNU_PROPERTY_TYPE_0
    201     NO_COPY_ON_PROTECTION
    202 EOF
    203 
    204 # On ppc64
    205 # gcc -m32 -c -o testfile_gnu_props.32be.o gnu_props.S
    206 # gcc -m64 -c -o testfile_gnu_props.64be.o gnu_props.S
    207 
    208 testfiles testfile_gnu_props.32be.o testfile_gnu_props.64be.o
    209 
    210 testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.32be.o << EOF
    211 
    212 Note section [ 4] '.note.gnu.property' of 52 bytes at offset 0x34:
    213   Owner          Data size  Type
    214   GNU                   12  GNU_PROPERTY_TYPE_0
    215     STACK_SIZE 0x280000
    216   GNU                    8  GNU_PROPERTY_TYPE_0
    217     NO_COPY_ON_PROTECTION
    218 EOF
    219 
    220 testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.64be.o << EOF
    221 
    222 Note section [ 4] '.note.gnu.property' of 56 bytes at offset 0x40:
    223   Owner          Data size  Type
    224   GNU                   16  GNU_PROPERTY_TYPE_0
    225     STACK_SIZE 0x280000
    226   GNU                    8  GNU_PROPERTY_TYPE_0
    227     NO_COPY_ON_PROTECTION
    228 EOF
    229