# Copyright (C) 2018 Red Hat, Inc. # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # elfutils is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . . $srcdir/test-subr.sh # - testfile-gnu-property-note.c # int # main () # { # return 0; # } # # gcc -fcf-protection -c testfile-gnu-property-note.c # gcc -o testfile-gnu-property-note testfile-gnu-property-note.o # eu-strip --strip-sections testfile-gnu-property-note testfiles testfile-gnu-property-note.o testfile-gnu-property-note # Test reading notes through sections testrun_compare ${abs_top_builddir}/src/readelf -n testfile-gnu-property-note.o << EOF Note section [ 6] '.note.gnu.property' of 32 bytes at offset 0x80: Owner Data size Type GNU 16 GNU_PROPERTY_TYPE_0 X86 FEATURE_1_AND: 00000003 IBT SHSTK EOF # Test reading notes through segments testrun_compare ${abs_top_builddir}/src/readelf -n testfile-gnu-property-note << EOF Note segment of 32 bytes at offset 0x300: Owner Data size Type GNU 16 GNU_PROPERTY_TYPE_0 X86 FEATURE_1_AND: 00000003 IBT SHSTK Note segment of 68 bytes at offset 0x320: Owner Data size Type GNU 16 GNU_ABI_TAG OS: Linux, ABI: 3.2.0 GNU 20 GNU_BUILD_ID Build ID: 83cb2229fabd2065d1361f5b46424cd75270f94b EOF # NT_VERSION note type clashes with "GNU" owner type NT_GNU_ABI_TAG. # Uses owner name (with zero desc) for version string. testfiles testfile11 testrun_compare ${abs_top_builddir}/src/readelf -n testfile11 << EOF Note section [ 2] '.note.ABI-tag' of 32 bytes at offset 0x128: Owner Data size Type GNU 16 GNU_ABI_TAG OS: Linux, ABI: 2.2.5 Note section [35] '.note' of 60 bytes at offset 0x13364: Owner Data size Type 01.01 0 VERSION 01.01 0 VERSION 01.01 0 VERSION EOF # See run-annobingroup.sh testfiles testfile-annobingroup.o testrun_compare ${abs_top_builddir}/src/readelf -n testfile-annobingroup.o << EOF Note section [ 5] '.gnu.build.attributes' of 272 bytes at offset 0x50: Owner Data size Type GA 16 GNU Build Attribute OPEN Address Range: 0 - 0 VERSION: "3p8" GA 0 GNU Build Attribute OPEN TOOL: "gcc 8.1.1 20180712" GA 0 GNU Build Attribute OPEN "GOW": 5 GA 0 GNU Build Attribute OPEN STACK_PROT: 0 GA 0 GNU Build Attribute OPEN "stack_clash": FALSE GA 0 GNU Build Attribute OPEN "cf_protection": 0 GA 0 GNU Build Attribute OPEN PIC: 0 GA 0 GNU Build Attribute OPEN SHORT_ENUM: FALSE GA 0 GNU Build Attribute OPEN ABI: c001100000012 GA 0 GNU Build Attribute OPEN "stack_realign": FALSE Note section [ 7] '.gnu.build.attributes..text.unlikely' of 216 bytes at offset 0x160: Owner Data size Type GA 16 GNU Build Attribute FUNC Address Range: 0 - 0 ABI: c001100000012 GA 0 GNU Build Attribute FUNC "stack_realign": FALSE GA 0 GNU Build Attribute FUNC STACK_PROT: 0 GA 0 GNU Build Attribute FUNC "stack_clash": FALSE GA 0 GNU Build Attribute FUNC "cf_protection": 0 GA 0 GNU Build Attribute FUNC PIC: 0 GA 0 GNU Build Attribute FUNC "GOW": 5 GA 0 GNU Build Attribute FUNC SHORT_ENUM: FALSE Note section [22] '.note.gnu.property' of 48 bytes at offset 0x40c: Owner Data size Type GNU 32 GNU_PROPERTY_TYPE_0 X86 0xc0000000 data: 00 00 00 00 X86 0xc0000001 data: 00 00 00 00 EOF # # = gnu_props.S # # #define NT_GNU_PROPERTY_TYPE_0 5 # #define GNU_PROPERTY_STACK_SIZE 1 # #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 # /* Normal notes always have alignment and padding of 4 bytes, # but GNU Property notes use 4 byte words, with 8 byte padding # for ELFCLASS64. */ # #if __SIZEOF_PTRDIFF_T__ == 8 # # define ALIGN 3 # #elif __SIZEOF_PTRDIFF_T__ == 4 # # define ALIGN 2 # #endif # # .section ".note.gnu.property", "a" # .p2align ALIGN # /* First note. */ # .long 1f - 0f /* name length. */ # .long 4f - 2f /* data length. */ # .long NT_GNU_PROPERTY_TYPE_0 /* note type. */ # 0: # .asciz "GNU" /* vendor name. */ # 1: # .p2align ALIGN /* Padding. */ # 2: # .long GNU_PROPERTY_STACK_SIZE /* pr_type. */ # .long 4f - 3f /* pr_datasz. */ # 3: # .dc.a 0x280000 /* Stack size. */ # 4: # .p2align ALIGN # # /* Second note. */ # .long 6f - 5f /* name length. */ # .long 8f - 7f /* data length. */ # .long NT_GNU_PROPERTY_TYPE_0 /* note type. */ # 5: # .asciz "GNU" /* vendor name. */ # 6: # .p2align ALIGN /* Padding. */ # 7: # .long GNU_PROPERTY_NO_COPY_ON_PROTECTED /* pr_type. */ # .long 0 /* pr_datasz. */ # /* No data. */ # 8: # .p2align ALIGN # # On x86_64 # gcc -m64 -c -o testfile_gnu_props_64le.o gnu_props.S # gcc -m32 -c -o testfile_gnu_props_32le.o gnu_props.S testfiles testfile_gnu_props.32le.o testfile_gnu_props.64le.o testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.32le.o << EOF Note section [ 4] '.note.gnu.property' of 52 bytes at offset 0x34: Owner Data size Type GNU 12 GNU_PROPERTY_TYPE_0 STACK_SIZE 0x280000 GNU 8 GNU_PROPERTY_TYPE_0 NO_COPY_ON_PROTECTION EOF testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.64le.o << EOF Note section [ 4] '.note.gnu.property' of 56 bytes at offset 0x40: Owner Data size Type GNU 16 GNU_PROPERTY_TYPE_0 STACK_SIZE 0x280000 GNU 8 GNU_PROPERTY_TYPE_0 NO_COPY_ON_PROTECTION EOF # On ppc64 # gcc -m32 -c -o testfile_gnu_props.32be.o gnu_props.S # gcc -m64 -c -o testfile_gnu_props.64be.o gnu_props.S testfiles testfile_gnu_props.32be.o testfile_gnu_props.64be.o testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.32be.o << EOF Note section [ 4] '.note.gnu.property' of 52 bytes at offset 0x34: Owner Data size Type GNU 12 GNU_PROPERTY_TYPE_0 STACK_SIZE 0x280000 GNU 8 GNU_PROPERTY_TYPE_0 NO_COPY_ON_PROTECTION EOF testrun_compare ${abs_top_builddir}/src/readelf -n testfile_gnu_props.64be.o << EOF Note section [ 4] '.note.gnu.property' of 56 bytes at offset 0x40: Owner Data size Type GNU 16 GNU_PROPERTY_TYPE_0 STACK_SIZE 0x280000 GNU 8 GNU_PROPERTY_TYPE_0 NO_COPY_ON_PROTECTION EOF