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 /gold/testsuite/gnu_property_a.S | |
parent | 8e7767e3f782c46451a548d708f5582669d7a6d7 (diff) | |
download | binutils-6c04fd9b2fb4396c0189cb414ce598161ac8673e.zip binutils-6c04fd9b2fb4396c0189cb414ce598161ac8673e.tar.gz binutils-6c04fd9b2fb4396c0189cb414ce598161ac8673e.tar.bz2 |
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 'gold/testsuite/gnu_property_a.S')
-rw-r--r-- | gold/testsuite/gnu_property_a.S | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gold/testsuite/gnu_property_a.S b/gold/testsuite/gnu_property_a.S new file mode 100644 index 0000000..2fa073d --- /dev/null +++ b/gold/testsuite/gnu_property_a.S @@ -0,0 +1,41 @@ +#define NT_GNU_PROPERTY_TYPE_0 5 + +#define GNU_PROPERTY_STACK_SIZE 1 +#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 +#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 +#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 + +#if __SIZEOF_PTRDIFF_T__ == 8 +# define ALIGN 3 +#elif __SIZEOF_PTRDIFF_T__ == 4 +# define ALIGN 2 +#endif + + .section ".note.gnu.property", "a" + .p2align ALIGN + + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long NT_GNU_PROPERTY_TYPE_0 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: + .p2align ALIGN +2: .long GNU_PROPERTY_STACK_SIZE /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .dc.a 0x800 /* Stack size. */ +4: + .p2align ALIGN + .long GNU_PROPERTY_X86_ISA_1_USED + .long 4 + .byte 0x01,0x10,0x00,0x00 + .p2align ALIGN + .long GNU_PROPERTY_X86_ISA_1_NEEDED + .long 4 + .byte 0x01,0x10,0x00,0x00 + .p2align ALIGN + .long GNU_PROPERTY_X86_FEATURE_1_AND + .long 4 + .byte 0x01,0x00,0x00,0x00 + .p2align ALIGN +5: |