diff options
author | Cary Coutant <ccoutant@gmail.com> | 2018-06-22 09:27:39 -0700 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2018-06-22 09:52:00 -0700 |
commit | 6c04fd9b2fb4396c0189cb414ce598161ac8673e (patch) | |
tree | 8b3630b03edb8d663a592b472cae1292aad05e7c /elfcpp | |
parent | Use partial register read/writes in transfer_regset (diff) | |
download | binutils-gdb-6c04fd9b2fb4396c0189cb414ce598161ac8673e.tar.gz binutils-gdb-6c04fd9b2fb4396c0189cb414ce598161ac8673e.tar.bz2 binutils-gdb-6c04fd9b2fb4396c0189cb414ce598161ac8673e.zip |
Add support for .note.gnu.property sections.
elfcpp/
PR gold/22914
* elfcpp.h (NT_GNU_PROPERTY_TYPE_0): New note type.
(GNU_PROPERTY_*): New Gnu property types.
* x86_64.h (GNU_PROPERTY_X86_FEATURE_1_IBT)
(GNU_PROPERTY_X86_FEATURE_1_SHSTK): New x86 feature bits.
gold/
PR gold/22914
* layout.cc (Layout::Layout): Initialize gnu_properties_.
(read_sized_value, write_sized_value): New functions.
(Layout::layout_gnu_property): New method.
(Layout::create_notes): Call create_gnu_properties_note.
(Layout::create_gnu_properties_note): New method.
* layout.h (Layout::layout_gnu_property): New method.
(Layout::create_gnu_properties_note): New method.
(Layout::Gnu_property, Layout::Gnu_properties): New types.
(Layout::gnu_properties_): New data member.
* object.cc (Sized_relobj_file::layout_gnu_property_section): New
method.
(Sized_relobj_file::do_layout): Handle .note.gnu.property sections.
* object.h (Sized_relobj_file::layout_gnu_property_section): New
method.
* target.h (Target::merge_gnu_property): New method.
(Target::do_merge_gnu_property): New virtual method.
* x86_64.cc (Target_x86_64::do_merge_gnu_property): New method.
* testsuite/Makefile.am (gnu_property_test): New test case.
* testsuite/Makefile.in: Regenerate.
* testsuite/gnu_property_a.S: New source file.
* testsuite/gnu_property_b.S: New source file.
* testsuite/gnu_property_c.S: New source file.
* testsuite/gnu_property_main.c: New source file.
* testsuite/gnu_property_test.sh: New test script.
Diffstat (limited to 'elfcpp')
-rw-r--r-- | elfcpp/ChangeLog | 8 | ||||
-rw-r--r-- | elfcpp/elfcpp.h | 19 | ||||
-rw-r--r-- | elfcpp/x86_64.h | 6 |
3 files changed, 32 insertions, 1 deletions
diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog index 7c4a51423b3..27ca12759c9 100644 --- a/elfcpp/ChangeLog +++ b/elfcpp/ChangeLog @@ -1,3 +1,11 @@ +2018-06-22 Cary Coutant <ccoutant@gmail.com> + + PR gold/22914 + * elfcpp.h (NT_GNU_PROPERTY_TYPE_0): New note type. + (GNU_PROPERTY_*): New Gnu property types. + * x86_64.h (GNU_PROPERTY_X86_FEATURE_1_IBT) + (GNU_PROPERTY_X86_FEATURE_1_SHSTK): New x86 feature bits. + 2018-04-09 Alan Modra <amodra@gmail.com> * powerpc.h (R_POWERPC_PLTSEQ, R_POWERPC_PLTCALL): Define. diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h index 018e0f50da1..ea2e8eab134 100644 --- a/elfcpp/elfcpp.h +++ b/elfcpp/elfcpp.h @@ -984,7 +984,9 @@ enum NT_GNU_BUILD_ID = 3, // The version of gold used to link. Th descriptor is just a // string. - NT_GNU_GOLD_VERSION = 4 + NT_GNU_GOLD_VERSION = 4, + // Program property note, as described in "Linux Extensions to the gABI". + NT_GNU_PROPERTY_TYPE_0 = 5 }; // The OS values which may appear in word 0 of a NT_GNU_ABI_TAG note. @@ -999,6 +1001,21 @@ enum ELF_NOTE_OS_SYLLABLE = 5 }; +// Program property types for NT_GNU_PROPERTY_TYPE_0. + +enum +{ + GNU_PROPERTY_STACK_SIZE = 1, + GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2, + GNU_PROPERTY_LOPROC = 0xc0000000, + GNU_PROPERTY_X86_ISA_1_USED = 0xc0000000, + GNU_PROPERTY_X86_ISA_1_NEEDED = 0xc0000001, + GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002, + GNU_PROPERTY_HIPROC = 0xdfffffff, + GNU_PROPERTY_LOUSER = 0xe0000000, + GNU_PROPERTY_HIUSER = 0xffffffff +}; + } // End namespace elfcpp. // Include internal details after defining the types. diff --git a/elfcpp/x86_64.h b/elfcpp/x86_64.h index a8883dd20ca..0f1dc9af602 100644 --- a/elfcpp/x86_64.h +++ b/elfcpp/x86_64.h @@ -103,6 +103,12 @@ enum R_X86_64_GNU_VTENTRY = 251 }; +// The bit values that can appear in the GNU_PROPERTY_X86_FEATURE_1_AND +// program property. + +const uint64_t GNU_PROPERTY_X86_FEATURE_1_IBT = 1ULL << 0; +const uint64_t GNU_PROPERTY_X86_FEATURE_1_SHSTK = 1ULL << 1; + } // End namespace elfcpp. #endif // !defined(ELFCPP_X86_64_H) |