diff options
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 16 | ||||
-rw-r--r-- | binutils/readelf.c | 38 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/i386/empty.d | 9 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/i386/empty.s | 27 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/i386/ibt.d | 9 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/i386/ibt.s | 27 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/x86-64/empty-x32.d | 10 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/x86-64/empty.d | 9 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/x86-64/empty.s | 27 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/x86-64/ibt-x32.d | 10 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/x86-64/ibt.d | 9 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/x86-64/ibt.s | 27 |
12 files changed, 218 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index a9166de..3870711 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,19 @@ +2017-06-22 H.J. Lu <hongjiu.lu@intel.com> + + * readelf.c (decode_x86_feature): New. + (print_gnu_property_note): Call decode_x86_feature on + GNU_PROPERTY_X86_FEATURE_1_AND. + * testsuite/binutils-all/i386/empty.d: New file. + * testsuite/binutils-all/i386/empty.s: Likewise. + * testsuite/binutils-all/i386/ibt.d: Likewise. + * testsuite/binutils-all/i386/ibt.s: Likewise. + * testsuite/binutils-all/x86-64/empty-x32.d: Likewise. + * testsuite/binutils-all/x86-64/empty.d: Likewise. + * testsuite/binutils-all/x86-64/empty.s: Likewise. + * testsuite/binutils-all/x86-64/ibt-x32.d: Likewise. + * testsuite/binutils-all/x86-64/ibt.d: Likewise. + * testsuite/binutils-all/x86-64/ibt.s: Likewise. + 2017-06-21 H.J. Lu <hongjiu.lu@intel.com> * dwarf.c (READ_ULEB): Use DWARF_VMA_FMT to report error. diff --git a/binutils/readelf.c b/binutils/readelf.c index bb6bb79..50354c1 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -16338,6 +16338,36 @@ decode_x86_isa (unsigned int bitmask) } static void +decode_x86_feature (unsigned int type, unsigned int bitmask) +{ + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_X86_FEATURE_1_IBT: + switch (type) + { + case GNU_PROPERTY_X86_FEATURE_1_AND: + printf ("IBT"); + break; + default: + /* This should never happen. */ + abort (); + } + break; + default: + printf (_("<unknown: %x>"), bit); + break; + } + if (bitmask) + printf (", "); + } +} + +static void print_gnu_property_note (Elf_Internal_Note * pnote) { unsigned char * ptr = (unsigned char *) pnote->descdata; @@ -16391,6 +16421,14 @@ print_gnu_property_note (Elf_Internal_Note * pnote) decode_x86_isa (byte_get (ptr, 4)); goto next; + case GNU_PROPERTY_X86_FEATURE_1_AND: + printf ("x86 feature: "); + if (datasz != 4) + printf (_("<corrupt length: %#x> "), datasz); + else + decode_x86_feature (type, byte_get (ptr, 4)); + goto next; + default: break; } diff --git a/binutils/testsuite/binutils-all/i386/empty.d b/binutils/testsuite/binutils-all/i386/empty.d new file mode 100644 index 0000000..5f4cc56 --- /dev/null +++ b/binutils/testsuite/binutils-all/i386/empty.d @@ -0,0 +1,9 @@ +#PROG: objcopy +#as: --32 +#objcopy: +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 feature: diff --git a/binutils/testsuite/binutils-all/i386/empty.s b/binutils/testsuite/binutils-all/i386/empty.s new file mode 100644 index 0000000..6a6b517 --- /dev/null +++ b/binutils/testsuite/binutils-all/i386/empty.s @@ -0,0 +1,27 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +2: .long 0xc0000002 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x0 +4: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +5: diff --git a/binutils/testsuite/binutils-all/i386/ibt.d b/binutils/testsuite/binutils-all/i386/ibt.d new file mode 100644 index 0000000..dfd7676 --- /dev/null +++ b/binutils/testsuite/binutils-all/i386/ibt.d @@ -0,0 +1,9 @@ +#PROG: objcopy +#as: --32 +#objcopy: +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 feature: IBT diff --git a/binutils/testsuite/binutils-all/i386/ibt.s b/binutils/testsuite/binutils-all/i386/ibt.s new file mode 100644 index 0000000..84ee964 --- /dev/null +++ b/binutils/testsuite/binutils-all/i386/ibt.s @@ -0,0 +1,27 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +2: .long 0xc0000002 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x1 +4: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +5: diff --git a/binutils/testsuite/binutils-all/x86-64/empty-x32.d b/binutils/testsuite/binutils-all/x86-64/empty-x32.d new file mode 100644 index 0000000..4193818 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/empty-x32.d @@ -0,0 +1,10 @@ +#source: empty.s +#PROG: objcopy +#as: --x32 +#objcopy: +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 feature: diff --git a/binutils/testsuite/binutils-all/x86-64/empty.d b/binutils/testsuite/binutils-all/x86-64/empty.d new file mode 100644 index 0000000..777efbb --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/empty.d @@ -0,0 +1,9 @@ +#PROG: objcopy +#as: --64 -defsym __64_bit__=1 +#objcopy: +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 feature: diff --git a/binutils/testsuite/binutils-all/x86-64/empty.s b/binutils/testsuite/binutils-all/x86-64/empty.s new file mode 100644 index 0000000..6a6b517 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/empty.s @@ -0,0 +1,27 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +2: .long 0xc0000002 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x0 +4: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +5: diff --git a/binutils/testsuite/binutils-all/x86-64/ibt-x32.d b/binutils/testsuite/binutils-all/x86-64/ibt-x32.d new file mode 100644 index 0000000..5be7c98 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/ibt-x32.d @@ -0,0 +1,10 @@ +#source: ibt.s +#PROG: objcopy +#as: --x32 +#objcopy: +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 feature: IBT diff --git a/binutils/testsuite/binutils-all/x86-64/ibt.d b/binutils/testsuite/binutils-all/x86-64/ibt.d new file mode 100644 index 0000000..7bedff5 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/ibt.d @@ -0,0 +1,9 @@ +#PROG: objcopy +#as: --64 -defsym __64_bit__=1 +#objcopy: +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: x86 feature: IBT diff --git a/binutils/testsuite/binutils-all/x86-64/ibt.s b/binutils/testsuite/binutils-all/x86-64/ibt.s new file mode 100644 index 0000000..84ee964 --- /dev/null +++ b/binutils/testsuite/binutils-all/x86-64/ibt.s @@ -0,0 +1,27 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +2: .long 0xc0000002 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x1 +4: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +5: |