x86: Remove empty X86_FEATURE_1_AND property

Message ID 20180812010219.GA12676@gmail.com
State New
Headers show
Series
  • x86: Remove empty X86_FEATURE_1_AND property
Related show

Commit Message

H.J. Lu Aug. 12, 2018, 1:02 a.m.
There is no need to generate .note.gnu.property section with empty
X86_FEATURE_1_AND property.  This patch adds fixup_gnu_properties
to ELF linker backend so that x86 backend can remove it.

OK for master?

H.J.
---
bfd/

	PR ld/23515
	* elf-bfd.h (elf_backend_data): Add fixup_gnu_properties.
	* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Call
	backend fixup_gnu_properties if it isn't NULL.  Discard
	.note.gnu.property section if all properties have been removed.
	* elfxx-target.h (elf_backend_fixup_gnu_properties): New.
	(elfNN_bed): Initialize fixup_gnu_properties.
	* elfxx-x86.c (_bfd_x86_elf_link_fixup_gnu_properties): New
	function.
	* elfxx-x86.h (_bfd_x86_elf_link_fixup_gnu_properties): New
	prototype.
	(elf_backend_fixup_gnu_properties): New.

ld/

	PR ld/23515
	* testsuite/ld-i386/ibt-plt-2a.d: Updated.
	* testsuite/ld-i386/ibt-plt-2b.d: Likewise.
	* testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise.
	* testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
	* testsuite/ld-x86-64/ibt-plt-2b-x32.d: Likewise.
	* testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.
---
 bfd/elf-bfd.h                           |  4 ++++
 bfd/elf-properties.c                    | 12 +++++++++++
 bfd/elfxx-target.h                      |  4 ++++
 bfd/elfxx-x86.c                         | 28 +++++++++++++++++++++++++
 bfd/elfxx-x86.h                         |  5 +++++
 ld/testsuite/ld-i386/ibt-plt-2a.d       | 22 +++++++++----------
 ld/testsuite/ld-i386/ibt-plt-2b.d       | 26 +++++++++--------------
 ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d | 24 ++++++++++-----------
 ld/testsuite/ld-x86-64/ibt-plt-2a.d     | 24 ++++++++++-----------
 ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d | 20 +++++++-----------
 ld/testsuite/ld-x86-64/ibt-plt-2b.d     | 20 +++++++-----------
 11 files changed, 112 insertions(+), 77 deletions(-)

-- 
2.17.1

Comments

H.J. Lu Aug. 14, 2018, 1:20 p.m. | #1
On Sat, Aug 11, 2018 at 6:02 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> There is no need to generate .note.gnu.property section with empty

> X86_FEATURE_1_AND property.  This patch adds fixup_gnu_properties

> to ELF linker backend so that x86 backend can remove it.

>

> OK for master?


Any feedback or objections?

> H.J.

> ---

> bfd/

>

>         PR ld/23515

>         * elf-bfd.h (elf_backend_data): Add fixup_gnu_properties.

>         * elf-properties.c (_bfd_elf_link_setup_gnu_properties): Call

>         backend fixup_gnu_properties if it isn't NULL.  Discard

>         .note.gnu.property section if all properties have been removed.

>         * elfxx-target.h (elf_backend_fixup_gnu_properties): New.

>         (elfNN_bed): Initialize fixup_gnu_properties.

>         * elfxx-x86.c (_bfd_x86_elf_link_fixup_gnu_properties): New

>         function.

>         * elfxx-x86.h (_bfd_x86_elf_link_fixup_gnu_properties): New

>         prototype.

>         (elf_backend_fixup_gnu_properties): New.

>

> ld/

>

>         PR ld/23515

>         * testsuite/ld-i386/ibt-plt-2a.d: Updated.

>         * testsuite/ld-i386/ibt-plt-2b.d: Likewise.

>         * testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise.

>         * testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.

>         * testsuite/ld-x86-64/ibt-plt-2b-x32.d: Likewise.

>         * testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.

> ---

>  bfd/elf-bfd.h                           |  4 ++++

>  bfd/elf-properties.c                    | 12 +++++++++++

>  bfd/elfxx-target.h                      |  4 ++++

>  bfd/elfxx-x86.c                         | 28 +++++++++++++++++++++++++

>  bfd/elfxx-x86.h                         |  5 +++++

>  ld/testsuite/ld-i386/ibt-plt-2a.d       | 22 +++++++++----------

>  ld/testsuite/ld-i386/ibt-plt-2b.d       | 26 +++++++++--------------

>  ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d | 24 ++++++++++-----------

>  ld/testsuite/ld-x86-64/ibt-plt-2a.d     | 24 ++++++++++-----------

>  ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d | 20 +++++++-----------

>  ld/testsuite/ld-x86-64/ibt-plt-2b.d     | 20 +++++++-----------

>  11 files changed, 112 insertions(+), 77 deletions(-)

>

> diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h

> index 530679f9c8..cf256f70e0 100644

> --- a/bfd/elf-bfd.h

> +++ b/bfd/elf-bfd.h

> @@ -1479,6 +1479,10 @@ struct elf_backend_data

>    /* Set up GNU properties.  */

>    bfd *(*setup_gnu_properties) (struct bfd_link_info *);

>

> +  /* Fix up GNU properties.  */

> +  void (*fixup_gnu_properties) (struct bfd_link_info *,

> +                               elf_property_list **);

> +

>    /* Encoding used for compact EH tables.  */

>    int (*compact_eh_encoding) (struct bfd_link_info *);

>

> diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c

> index f58bdc0711..0d98ef1eec 100644

> --- a/bfd/elf-properties.c

> +++ b/bfd/elf-properties.c

> @@ -520,6 +520,18 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)

>           return NULL;

>         }

>

> +      /* Fix up GNU properties.  */

> +      if (bed->fixup_gnu_properties)

> +       bed->fixup_gnu_properties (info, &elf_properties (first_pbfd));

> +

> +      if (elf_properties (first_pbfd) == NULL)

> +       {

> +         /* Discard .note.gnu.property section if all properties have

> +            been removed.  */

> +         sec->output_section = bfd_abs_section_ptr;

> +         return NULL;

> +       }

> +

>        /* Compute the section size.  */

>        list = elf_properties (first_pbfd);

>        size = elf_get_gnu_property_section_size (list, align_size);

> diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h

> index a86ea587a2..0c4de8cc66 100644

> --- a/bfd/elfxx-target.h

> +++ b/bfd/elfxx-target.h

> @@ -550,6 +550,9 @@

>  #ifndef elf_backend_setup_gnu_properties

>  #define elf_backend_setup_gnu_properties       _bfd_elf_link_setup_gnu_properties

>  #endif

> +#ifndef elf_backend_fixup_gnu_properties

> +#define elf_backend_fixup_gnu_properties       NULL

> +#endif

>  #ifndef elf_backend_static_tls_alignment

>  #define elf_backend_static_tls_alignment       1

>  #endif

> @@ -876,6 +879,7 @@ static struct elf_backend_data elfNN_bed =

>    elf_backend_parse_gnu_properties,

>    elf_backend_merge_gnu_properties,

>    elf_backend_setup_gnu_properties,

> +  elf_backend_fixup_gnu_properties,

>    elf_backend_compact_eh_encoding,

>    elf_backend_cant_unwind_opcode,

>    elf_backend_static_tls_alignment,

> diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c

> index 2d8f7b640b..1a4c723969 100644

> --- a/bfd/elfxx-x86.c

> +++ b/bfd/elfxx-x86.c

> @@ -2959,3 +2959,31 @@ error_alignment:

>

>    return pbfd;

>  }

> +

> +/* Fix up x86 GNU properties.  */

> +

> +void

> +_bfd_x86_elf_link_fixup_gnu_properties

> +  (struct bfd_link_info *info ATTRIBUTE_UNUSED,

> +   elf_property_list **listp)

> +{

> +  elf_property_list *p;

> +

> +  for (p = *listp; p; p = p->next)

> +    switch (p->property.pr_type)

> +      {

> +      case GNU_PROPERTY_X86_ISA_1_USED:

> +      case GNU_PROPERTY_X86_ISA_1_NEEDED:

> +      case GNU_PROPERTY_X86_FEATURE_1_AND:

> +       if (p->property.u.number == 0)

> +         {

> +           /* Remove empty property.  */

> +           *listp = p->next;

> +           continue;

> +         }

> +       listp = &p->next;

> +       break;

> +      default:

> +       break;

> +      }

> +}

> diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h

> index 6a5609467d..964843822e 100644

> --- a/bfd/elfxx-x86.h

> +++ b/bfd/elfxx-x86.h

> @@ -684,6 +684,9 @@ extern enum elf_property_kind _bfd_x86_elf_parse_gnu_properties

>  extern bfd_boolean _bfd_x86_elf_merge_gnu_properties

>    (struct bfd_link_info *, bfd *, elf_property *, elf_property *);

>

> +extern void _bfd_x86_elf_link_fixup_gnu_properties

> +  (struct bfd_link_info *, elf_property_list **);

> +

>  extern bfd * _bfd_x86_elf_link_setup_gnu_properties

>    (struct bfd_link_info *, struct elf_x86_init_table *);

>

> @@ -726,3 +729,5 @@ extern void _bfd_x86_elf_link_fixup_ifunc_symbol

>    _bfd_x86_elf_parse_gnu_properties

>  #define elf_backend_merge_gnu_properties \

>    _bfd_x86_elf_merge_gnu_properties

> +#define elf_backend_fixup_gnu_properties \

> +  _bfd_x86_elf_link_fixup_gnu_properties

> diff --git a/ld/testsuite/ld-i386/ibt-plt-2a.d b/ld/testsuite/ld-i386/ibt-plt-2a.d

> index 03c8e127a9..5825be43f4 100644

> --- a/ld/testsuite/ld-i386/ibt-plt-2a.d

> +++ b/ld/testsuite/ld-i386/ibt-plt-2a.d

> @@ -8,45 +8,45 @@

>

>  Disassembly of section .plt:

>

> -0+160 <.plt>:

> +0+140 <.plt>:

>   +[a-f0-9]+:   ff b3 04 00 00 00       pushl  0x4\(%ebx\)

>   +[a-f0-9]+:   ff a3 08 00 00 00       jmp    \*0x8\(%ebx\)

>   +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%eax\)

>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>   +[a-f0-9]+:   68 00 00 00 00          push   \$0x0

> - +[a-f0-9]+:   e9 e2 ff ff ff          jmp    160 <.plt>

> + +[a-f0-9]+:   e9 e2 ff ff ff          jmp    140 <.plt>

>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>   +[a-f0-9]+:   68 08 00 00 00          push   \$0x8

> - +[a-f0-9]+:   e9 d2 ff ff ff          jmp    160 <.plt>

> + +[a-f0-9]+:   e9 d2 ff ff ff          jmp    140 <.plt>

>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>

>  Disassembly of section .plt.sec:

>

> -0+190 <bar1@plt>:

> +0+170 <bar1@plt>:

>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>   +[a-f0-9]+:   ff a3 0c 00 00 00       jmp    \*0xc\(%ebx\)

>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%eax,%eax,1\)

>

> -0+1a0 <bar2@plt>:

> +0+180 <bar2@plt>:

>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>   +[a-f0-9]+:   ff a3 10 00 00 00       jmp    \*0x10\(%ebx\)

>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%eax,%eax,1\)

>

>  Disassembly of section .text:

>

> -0+1b0 <foo>:

> +0+190 <foo>:

>   +[a-f0-9]+:   53                      push   %ebx

> - +[a-f0-9]+:   e8 18 00 00 00          call   1ce <__x86.get_pc_thunk.bx>

> - +[a-f0-9]+:   81 c3 36 11 00 00       add    \$0x1136,%ebx

> + +[a-f0-9]+:   e8 18 00 00 00          call   1ae <__x86.get_pc_thunk.bx>

> + +[a-f0-9]+:   81 c3 1a 11 00 00       add    \$0x111a,%ebx

>   +[a-f0-9]+:   83 ec 08                sub    \$0x8,%esp

> - +[a-f0-9]+:   e8 dc ff ff ff          call   1a0 <bar2@plt>

> - +[a-f0-9]+:   e8 c7 ff ff ff          call   190 <bar1@plt>

> + +[a-f0-9]+:   e8 dc ff ff ff          call   180 <bar2@plt>

> + +[a-f0-9]+:   e8 c7 ff ff ff          call   170 <bar1@plt>

>   +[a-f0-9]+:   83 c4 08                add    \$0x8,%esp

>   +[a-f0-9]+:   5b                      pop    %ebx

>   +[a-f0-9]+:   c3                      ret

>

> -0+1ce <__x86.get_pc_thunk.bx>:

> +0+1ae <__x86.get_pc_thunk.bx>:

>   +[a-f0-9]+:   8b 1c 24                mov    \(%esp\),%ebx

>   +[a-f0-9]+:   c3                      ret

>  #pass

> diff --git a/ld/testsuite/ld-i386/ibt-plt-2b.d b/ld/testsuite/ld-i386/ibt-plt-2b.d

> index d7b4e1e74c..0fa9a998f1 100644

> --- a/ld/testsuite/ld-i386/ibt-plt-2b.d

> +++ b/ld/testsuite/ld-i386/ibt-plt-2b.d

> @@ -18,37 +18,31 @@ Contents of the .eh_frame section:

>    DW_CFA_nop

>    DW_CFA_nop

>

> -0+18 0000001c 0000001c FDE cie=00000000 pc=000001b0..000001ce

> -  DW_CFA_advance_loc: 1 to 000001b1

> +0+18 0000001c 0000001c FDE cie=00000000 pc=00000190..000001ae

> +  DW_CFA_advance_loc: 1 to 00000191

>    DW_CFA_def_cfa_offset: 8

>    DW_CFA_offset: r3 \(ebx\) at cfa-8

> -  DW_CFA_advance_loc: 14 to 000001bf

> +  DW_CFA_advance_loc: 14 to 0000019f

>    DW_CFA_def_cfa_offset: 16

> -  DW_CFA_advance_loc: 13 to 000001cc

> +  DW_CFA_advance_loc: 13 to 000001ac

>    DW_CFA_def_cfa_offset: 8

> -  DW_CFA_advance_loc: 1 to 000001cd

> +  DW_CFA_advance_loc: 1 to 000001ad

>    DW_CFA_restore: r3 \(ebx\)

>    DW_CFA_def_cfa_offset: 4

>

> -0+38 00000010 0000003c FDE cie=00000000 pc=000001ce..000001d2

> +0+38 00000010 0000003c FDE cie=00000000 pc=000001ae..000001b2

>    DW_CFA_nop

>    DW_CFA_nop

>    DW_CFA_nop

>

> -0+4c 00000020 00000050 FDE cie=00000000 pc=00000160..00000190

> +0+4c 00000020 00000050 FDE cie=00000000 pc=00000140..00000170

>    DW_CFA_def_cfa_offset: 8

> -  DW_CFA_advance_loc: 6 to 00000166

> +  DW_CFA_advance_loc: 6 to 00000146

>    DW_CFA_def_cfa_offset: 12

> -  DW_CFA_advance_loc: 10 to 00000170

> +  DW_CFA_advance_loc: 10 to 00000150

>    DW_CFA_def_cfa_expression \(DW_OP_breg4 \(esp\): 4; DW_OP_breg8 \(eip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit2; DW_OP_shl; DW_OP_plus\)

>

> -0+70 00000010 00000074 FDE cie=00000000 pc=00000190..000001b0

> +0+70 00000010 00000074 FDE cie=00000000 pc=00000170..00000190

>    DW_CFA_nop

>    DW_CFA_nop

>    DW_CFA_nop

> -

> -

> -Displaying notes found in: .note.gnu.property

> -  Owner                 Data size      Description

> -  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0

> -      Properties: x86 feature:

> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d

> index 27f47d7179..70585634bf 100644

> --- a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d

> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d

> @@ -8,36 +8,36 @@

>

>  Disassembly of section .plt:

>

> -0+160 <.plt>:

> - +[a-f0-9]+:   ff 35 62 01 20 00       pushq  0x200162\(%rip\)        # 2002c8 <_GLOBAL_OFFSET_TABLE_\+0x8>

> - +[a-f0-9]+:   ff 25 64 01 20 00       jmpq   \*0x200164\(%rip\)        # 2002d0 <_GLOBAL_OFFSET_TABLE_\+0x10>

> +0+140 <.plt>:

> + +[a-f0-9]+:   ff 35 4a 01 20 00       pushq  0x20014a\(%rip\)        # 200290 <_GLOBAL_OFFSET_TABLE_\+0x8>

> + +[a-f0-9]+:   ff 25 4c 01 20 00       jmpq   \*0x20014c\(%rip\)        # 200298 <_GLOBAL_OFFSET_TABLE_\+0x10>

>   +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>   +[a-f0-9]+:   68 00 00 00 00          pushq  \$0x0

> - +[a-f0-9]+:   e9 e2 ff ff ff          jmpq   160 <.plt>

> + +[a-f0-9]+:   e9 e2 ff ff ff          jmpq   140 <.plt>

>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>   +[a-f0-9]+:   68 01 00 00 00          pushq  \$0x1

> - +[a-f0-9]+:   e9 d2 ff ff ff          jmpq   160 <.plt>

> + +[a-f0-9]+:   e9 d2 ff ff ff          jmpq   140 <.plt>

>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>

>  Disassembly of section .plt.sec:

>

> -0+190 <bar1@plt>:

> +0+170 <bar1@plt>:

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

> - +[a-f0-9]+:   ff 25 3e 01 20 00       jmpq   \*0x20013e\(%rip\)        # 2002d8 <bar1>

> + +[a-f0-9]+:   ff 25 26 01 20 00       jmpq   \*0x200126\(%rip\)        # 2002a0 <bar1>

>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)

>

> -0+1a0 <bar2@plt>:

> +0+180 <bar2@plt>:

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

> - +[a-f0-9]+:   ff 25 36 01 20 00       jmpq   \*0x200136\(%rip\)        # 2002e0 <bar2>

> + +[a-f0-9]+:   ff 25 1e 01 20 00       jmpq   \*0x20011e\(%rip\)        # 2002a8 <bar2>

>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)

>

>  Disassembly of section .text:

>

> -0+1b0 <foo>:

> +0+190 <foo>:

>   +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp

> - +[a-f0-9]+:   e8 e7 ff ff ff          callq  1a0 <bar2@plt>

> + +[a-f0-9]+:   e8 e7 ff ff ff          callq  180 <bar2@plt>

>   +[a-f0-9]+:   48 83 c4 08             add    \$0x8,%rsp

> - +[a-f0-9]+:   e9 ce ff ff ff          jmpq   190 <bar1@plt>

> + +[a-f0-9]+:   e9 ce ff ff ff          jmpq   170 <bar1@plt>

>  #pass

> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a.d b/ld/testsuite/ld-x86-64/ibt-plt-2a.d

> index 62d77835b6..0894354026 100644

> --- a/ld/testsuite/ld-x86-64/ibt-plt-2a.d

> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2a.d

> @@ -8,36 +8,36 @@

>

>  Disassembly of section .plt:

>

> -0+220 <.plt>:

> - +[a-f0-9]+:   ff 35 ea 01 20 00       pushq  0x2001ea\(%rip\)        # 200410 <_GLOBAL_OFFSET_TABLE_\+0x8>

> - +[a-f0-9]+:   f2 ff 25 eb 01 20 00    bnd jmpq \*0x2001eb\(%rip\)        # 200418 <_GLOBAL_OFFSET_TABLE_\+0x10>

> +0+1f0 <.plt>:

> + +[a-f0-9]+:   ff 35 ca 01 20 00       pushq  0x2001ca\(%rip\)        # 2003c0 <_GLOBAL_OFFSET_TABLE_\+0x8>

> + +[a-f0-9]+:   f2 ff 25 cb 01 20 00    bnd jmpq \*0x2001cb\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>

>   +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>   +[a-f0-9]+:   68 00 00 00 00          pushq  \$0x0

> - +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmpq 220 <.plt>

> + +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmpq 1f0 <.plt>

>   +[a-f0-9]+:   90                      nop

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>   +[a-f0-9]+:   68 01 00 00 00          pushq  \$0x1

> - +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmpq 220 <.plt>

> + +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmpq 1f0 <.plt>

>   +[a-f0-9]+:   90                      nop

>

>  Disassembly of section .plt.sec:

>

> -0+250 <bar1@plt>:

> +0+220 <bar1@plt>:

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

> - +[a-f0-9]+:   f2 ff 25 c5 01 20 00    bnd jmpq \*0x2001c5\(%rip\)        # 200420 <bar1>

> + +[a-f0-9]+:   f2 ff 25 a5 01 20 00    bnd jmpq \*0x2001a5\(%rip\)        # 2003d0 <bar1>

>   +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)

>

> -0+260 <bar2@plt>:

> +0+230 <bar2@plt>:

>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

> - +[a-f0-9]+:   f2 ff 25 bd 01 20 00    bnd jmpq \*0x2001bd\(%rip\)        # 200428 <bar2>

> + +[a-f0-9]+:   f2 ff 25 9d 01 20 00    bnd jmpq \*0x20019d\(%rip\)        # 2003d8 <bar2>

>   +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)

>

>  Disassembly of section .text:

>

> -0+270 <foo>:

> +0+240 <foo>:

>   +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp

> - +[a-f0-9]+:   e8 e7 ff ff ff          callq  260 <bar2@plt>

> + +[a-f0-9]+:   e8 e7 ff ff ff          callq  230 <bar2@plt>

>   +[a-f0-9]+:   48 83 c4 08             add    \$0x8,%rsp

> - +[a-f0-9]+:   e9 ce ff ff ff          jmpq   250 <bar1@plt>

> + +[a-f0-9]+:   e9 ce ff ff ff          jmpq   220 <bar1@plt>

>  #pass

> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d

> index b4ca256895..2f7505a70d 100644

> --- a/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d

> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d

> @@ -18,27 +18,21 @@ Contents of the .eh_frame section:

>    DW_CFA_nop

>    DW_CFA_nop

>

> -0+18 00000014 0000001c FDE cie=00000000 pc=000001b0..000001c2

> -  DW_CFA_advance_loc: 4 to 000001b4

> +0+18 00000014 0000001c FDE cie=00000000 pc=00000190..000001a2

> +  DW_CFA_advance_loc: 4 to 00000194

>    DW_CFA_def_cfa_offset: 16

> -  DW_CFA_advance_loc: 9 to 000001bd

> +  DW_CFA_advance_loc: 9 to 0000019d

>    DW_CFA_def_cfa_offset: 8

>    DW_CFA_nop

>

> -0+30 00000020 00000034 FDE cie=00000000 pc=00000160..00000190

> +0+30 00000020 00000034 FDE cie=00000000 pc=00000140..00000170

>    DW_CFA_def_cfa_offset: 16

> -  DW_CFA_advance_loc: 6 to 00000166

> +  DW_CFA_advance_loc: 6 to 00000146

>    DW_CFA_def_cfa_offset: 24

> -  DW_CFA_advance_loc: 10 to 00000170

> +  DW_CFA_advance_loc: 10 to 00000150

>    DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)

>

> -0+54 00000010 00000058 FDE cie=00000000 pc=00000190..000001b0

> +0+54 00000010 00000058 FDE cie=00000000 pc=00000170..00000190

>    DW_CFA_nop

>    DW_CFA_nop

>    DW_CFA_nop

> -

> -

> -Displaying notes found in: .note.gnu.property

> -  Owner                 Data size      Description

> -  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0

> -      Properties: x86 feature:

> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2b.d b/ld/testsuite/ld-x86-64/ibt-plt-2b.d

> index 4a670ee1b9..2bb59d0d83 100644

> --- a/ld/testsuite/ld-x86-64/ibt-plt-2b.d

> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2b.d

> @@ -18,31 +18,25 @@ Contents of the .eh_frame section:

>    DW_CFA_nop

>    DW_CFA_nop

>

> -0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000270..0000000000000282

> -  DW_CFA_advance_loc: 4 to 0000000000000274

> +0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000240..0000000000000252

> +  DW_CFA_advance_loc: 4 to 0000000000000244

>    DW_CFA_def_cfa_offset: 16

> -  DW_CFA_advance_loc: 9 to 000000000000027d

> +  DW_CFA_advance_loc: 9 to 000000000000024d

>    DW_CFA_def_cfa_offset: 8

>    DW_CFA_nop

>

> -0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000220..0000000000000250

> +0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001f0..0000000000000220

>    DW_CFA_def_cfa_offset: 16

> -  DW_CFA_advance_loc: 6 to 0000000000000226

> +  DW_CFA_advance_loc: 6 to 00000000000001f6

>    DW_CFA_def_cfa_offset: 24

> -  DW_CFA_advance_loc: 10 to 0000000000000230

> +  DW_CFA_advance_loc: 10 to 0000000000000200

>    DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)

>    DW_CFA_nop

>    DW_CFA_nop

>    DW_CFA_nop

>    DW_CFA_nop

>

> -0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000250..0000000000000270

> +0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000220..0000000000000240

>    DW_CFA_nop

>    DW_CFA_nop

>    DW_CFA_nop

> -

> -

> -Displaying notes found in: .note.gnu.property

> -  Owner                 Data size      Description

> -  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0

> -      Properties: x86 feature:

> --

> 2.17.1

>




-- 
H.J.
H.J. Lu Aug. 15, 2018, 6:44 p.m. | #2
On Tue, Aug 14, 2018 at 6:20 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sat, Aug 11, 2018 at 6:02 PM, H.J. Lu <hjl.tools@gmail.com> wrote:

>> There is no need to generate .note.gnu.property section with empty

>> X86_FEATURE_1_AND property.  This patch adds fixup_gnu_properties

>> to ELF linker backend so that x86 backend can remove it.

>>

>> OK for master?

>

> Any feedback or objections?


If there are no objections,  I will check it in this Friday.

>> H.J.

>> ---

>> bfd/

>>

>>         PR ld/23515

>>         * elf-bfd.h (elf_backend_data): Add fixup_gnu_properties.

>>         * elf-properties.c (_bfd_elf_link_setup_gnu_properties): Call

>>         backend fixup_gnu_properties if it isn't NULL.  Discard

>>         .note.gnu.property section if all properties have been removed.

>>         * elfxx-target.h (elf_backend_fixup_gnu_properties): New.

>>         (elfNN_bed): Initialize fixup_gnu_properties.

>>         * elfxx-x86.c (_bfd_x86_elf_link_fixup_gnu_properties): New

>>         function.

>>         * elfxx-x86.h (_bfd_x86_elf_link_fixup_gnu_properties): New

>>         prototype.

>>         (elf_backend_fixup_gnu_properties): New.

>>

>> ld/

>>

>>         PR ld/23515

>>         * testsuite/ld-i386/ibt-plt-2a.d: Updated.

>>         * testsuite/ld-i386/ibt-plt-2b.d: Likewise.

>>         * testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise.

>>         * testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.

>>         * testsuite/ld-x86-64/ibt-plt-2b-x32.d: Likewise.

>>         * testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.

>> ---

>>  bfd/elf-bfd.h                           |  4 ++++

>>  bfd/elf-properties.c                    | 12 +++++++++++

>>  bfd/elfxx-target.h                      |  4 ++++

>>  bfd/elfxx-x86.c                         | 28 +++++++++++++++++++++++++

>>  bfd/elfxx-x86.h                         |  5 +++++

>>  ld/testsuite/ld-i386/ibt-plt-2a.d       | 22 +++++++++----------

>>  ld/testsuite/ld-i386/ibt-plt-2b.d       | 26 +++++++++--------------

>>  ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d | 24 ++++++++++-----------

>>  ld/testsuite/ld-x86-64/ibt-plt-2a.d     | 24 ++++++++++-----------

>>  ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d | 20 +++++++-----------

>>  ld/testsuite/ld-x86-64/ibt-plt-2b.d     | 20 +++++++-----------

>>  11 files changed, 112 insertions(+), 77 deletions(-)

>>

>> diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h

>> index 530679f9c8..cf256f70e0 100644

>> --- a/bfd/elf-bfd.h

>> +++ b/bfd/elf-bfd.h

>> @@ -1479,6 +1479,10 @@ struct elf_backend_data

>>    /* Set up GNU properties.  */

>>    bfd *(*setup_gnu_properties) (struct bfd_link_info *);

>>

>> +  /* Fix up GNU properties.  */

>> +  void (*fixup_gnu_properties) (struct bfd_link_info *,

>> +                               elf_property_list **);

>> +

>>    /* Encoding used for compact EH tables.  */

>>    int (*compact_eh_encoding) (struct bfd_link_info *);

>>

>> diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c

>> index f58bdc0711..0d98ef1eec 100644

>> --- a/bfd/elf-properties.c

>> +++ b/bfd/elf-properties.c

>> @@ -520,6 +520,18 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)

>>           return NULL;

>>         }

>>

>> +      /* Fix up GNU properties.  */

>> +      if (bed->fixup_gnu_properties)

>> +       bed->fixup_gnu_properties (info, &elf_properties (first_pbfd));

>> +

>> +      if (elf_properties (first_pbfd) == NULL)

>> +       {

>> +         /* Discard .note.gnu.property section if all properties have

>> +            been removed.  */

>> +         sec->output_section = bfd_abs_section_ptr;

>> +         return NULL;

>> +       }

>> +

>>        /* Compute the section size.  */

>>        list = elf_properties (first_pbfd);

>>        size = elf_get_gnu_property_section_size (list, align_size);

>> diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h

>> index a86ea587a2..0c4de8cc66 100644

>> --- a/bfd/elfxx-target.h

>> +++ b/bfd/elfxx-target.h

>> @@ -550,6 +550,9 @@

>>  #ifndef elf_backend_setup_gnu_properties

>>  #define elf_backend_setup_gnu_properties       _bfd_elf_link_setup_gnu_properties

>>  #endif

>> +#ifndef elf_backend_fixup_gnu_properties

>> +#define elf_backend_fixup_gnu_properties       NULL

>> +#endif

>>  #ifndef elf_backend_static_tls_alignment

>>  #define elf_backend_static_tls_alignment       1

>>  #endif

>> @@ -876,6 +879,7 @@ static struct elf_backend_data elfNN_bed =

>>    elf_backend_parse_gnu_properties,

>>    elf_backend_merge_gnu_properties,

>>    elf_backend_setup_gnu_properties,

>> +  elf_backend_fixup_gnu_properties,

>>    elf_backend_compact_eh_encoding,

>>    elf_backend_cant_unwind_opcode,

>>    elf_backend_static_tls_alignment,

>> diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c

>> index 2d8f7b640b..1a4c723969 100644

>> --- a/bfd/elfxx-x86.c

>> +++ b/bfd/elfxx-x86.c

>> @@ -2959,3 +2959,31 @@ error_alignment:

>>

>>    return pbfd;

>>  }

>> +

>> +/* Fix up x86 GNU properties.  */

>> +

>> +void

>> +_bfd_x86_elf_link_fixup_gnu_properties

>> +  (struct bfd_link_info *info ATTRIBUTE_UNUSED,

>> +   elf_property_list **listp)

>> +{

>> +  elf_property_list *p;

>> +

>> +  for (p = *listp; p; p = p->next)

>> +    switch (p->property.pr_type)

>> +      {

>> +      case GNU_PROPERTY_X86_ISA_1_USED:

>> +      case GNU_PROPERTY_X86_ISA_1_NEEDED:

>> +      case GNU_PROPERTY_X86_FEATURE_1_AND:

>> +       if (p->property.u.number == 0)

>> +         {

>> +           /* Remove empty property.  */

>> +           *listp = p->next;

>> +           continue;

>> +         }

>> +       listp = &p->next;

>> +       break;

>> +      default:

>> +       break;

>> +      }

>> +}

>> diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h

>> index 6a5609467d..964843822e 100644

>> --- a/bfd/elfxx-x86.h

>> +++ b/bfd/elfxx-x86.h

>> @@ -684,6 +684,9 @@ extern enum elf_property_kind _bfd_x86_elf_parse_gnu_properties

>>  extern bfd_boolean _bfd_x86_elf_merge_gnu_properties

>>    (struct bfd_link_info *, bfd *, elf_property *, elf_property *);

>>

>> +extern void _bfd_x86_elf_link_fixup_gnu_properties

>> +  (struct bfd_link_info *, elf_property_list **);

>> +

>>  extern bfd * _bfd_x86_elf_link_setup_gnu_properties

>>    (struct bfd_link_info *, struct elf_x86_init_table *);

>>

>> @@ -726,3 +729,5 @@ extern void _bfd_x86_elf_link_fixup_ifunc_symbol

>>    _bfd_x86_elf_parse_gnu_properties

>>  #define elf_backend_merge_gnu_properties \

>>    _bfd_x86_elf_merge_gnu_properties

>> +#define elf_backend_fixup_gnu_properties \

>> +  _bfd_x86_elf_link_fixup_gnu_properties

>> diff --git a/ld/testsuite/ld-i386/ibt-plt-2a.d b/ld/testsuite/ld-i386/ibt-plt-2a.d

>> index 03c8e127a9..5825be43f4 100644

>> --- a/ld/testsuite/ld-i386/ibt-plt-2a.d

>> +++ b/ld/testsuite/ld-i386/ibt-plt-2a.d

>> @@ -8,45 +8,45 @@

>>

>>  Disassembly of section .plt:

>>

>> -0+160 <.plt>:

>> +0+140 <.plt>:

>>   +[a-f0-9]+:   ff b3 04 00 00 00       pushl  0x4\(%ebx\)

>>   +[a-f0-9]+:   ff a3 08 00 00 00       jmp    \*0x8\(%ebx\)

>>   +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%eax\)

>>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>>   +[a-f0-9]+:   68 00 00 00 00          push   \$0x0

>> - +[a-f0-9]+:   e9 e2 ff ff ff          jmp    160 <.plt>

>> + +[a-f0-9]+:   e9 e2 ff ff ff          jmp    140 <.plt>

>>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>>   +[a-f0-9]+:   68 08 00 00 00          push   \$0x8

>> - +[a-f0-9]+:   e9 d2 ff ff ff          jmp    160 <.plt>

>> + +[a-f0-9]+:   e9 d2 ff ff ff          jmp    140 <.plt>

>>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>>

>>  Disassembly of section .plt.sec:

>>

>> -0+190 <bar1@plt>:

>> +0+170 <bar1@plt>:

>>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>>   +[a-f0-9]+:   ff a3 0c 00 00 00       jmp    \*0xc\(%ebx\)

>>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%eax,%eax,1\)

>>

>> -0+1a0 <bar2@plt>:

>> +0+180 <bar2@plt>:

>>   +[a-f0-9]+:   f3 0f 1e fb             endbr32

>>   +[a-f0-9]+:   ff a3 10 00 00 00       jmp    \*0x10\(%ebx\)

>>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%eax,%eax,1\)

>>

>>  Disassembly of section .text:

>>

>> -0+1b0 <foo>:

>> +0+190 <foo>:

>>   +[a-f0-9]+:   53                      push   %ebx

>> - +[a-f0-9]+:   e8 18 00 00 00          call   1ce <__x86.get_pc_thunk.bx>

>> - +[a-f0-9]+:   81 c3 36 11 00 00       add    \$0x1136,%ebx

>> + +[a-f0-9]+:   e8 18 00 00 00          call   1ae <__x86.get_pc_thunk.bx>

>> + +[a-f0-9]+:   81 c3 1a 11 00 00       add    \$0x111a,%ebx

>>   +[a-f0-9]+:   83 ec 08                sub    \$0x8,%esp

>> - +[a-f0-9]+:   e8 dc ff ff ff          call   1a0 <bar2@plt>

>> - +[a-f0-9]+:   e8 c7 ff ff ff          call   190 <bar1@plt>

>> + +[a-f0-9]+:   e8 dc ff ff ff          call   180 <bar2@plt>

>> + +[a-f0-9]+:   e8 c7 ff ff ff          call   170 <bar1@plt>

>>   +[a-f0-9]+:   83 c4 08                add    \$0x8,%esp

>>   +[a-f0-9]+:   5b                      pop    %ebx

>>   +[a-f0-9]+:   c3                      ret

>>

>> -0+1ce <__x86.get_pc_thunk.bx>:

>> +0+1ae <__x86.get_pc_thunk.bx>:

>>   +[a-f0-9]+:   8b 1c 24                mov    \(%esp\),%ebx

>>   +[a-f0-9]+:   c3                      ret

>>  #pass

>> diff --git a/ld/testsuite/ld-i386/ibt-plt-2b.d b/ld/testsuite/ld-i386/ibt-plt-2b.d

>> index d7b4e1e74c..0fa9a998f1 100644

>> --- a/ld/testsuite/ld-i386/ibt-plt-2b.d

>> +++ b/ld/testsuite/ld-i386/ibt-plt-2b.d

>> @@ -18,37 +18,31 @@ Contents of the .eh_frame section:

>>    DW_CFA_nop

>>    DW_CFA_nop

>>

>> -0+18 0000001c 0000001c FDE cie=00000000 pc=000001b0..000001ce

>> -  DW_CFA_advance_loc: 1 to 000001b1

>> +0+18 0000001c 0000001c FDE cie=00000000 pc=00000190..000001ae

>> +  DW_CFA_advance_loc: 1 to 00000191

>>    DW_CFA_def_cfa_offset: 8

>>    DW_CFA_offset: r3 \(ebx\) at cfa-8

>> -  DW_CFA_advance_loc: 14 to 000001bf

>> +  DW_CFA_advance_loc: 14 to 0000019f

>>    DW_CFA_def_cfa_offset: 16

>> -  DW_CFA_advance_loc: 13 to 000001cc

>> +  DW_CFA_advance_loc: 13 to 000001ac

>>    DW_CFA_def_cfa_offset: 8

>> -  DW_CFA_advance_loc: 1 to 000001cd

>> +  DW_CFA_advance_loc: 1 to 000001ad

>>    DW_CFA_restore: r3 \(ebx\)

>>    DW_CFA_def_cfa_offset: 4

>>

>> -0+38 00000010 0000003c FDE cie=00000000 pc=000001ce..000001d2

>> +0+38 00000010 0000003c FDE cie=00000000 pc=000001ae..000001b2

>>    DW_CFA_nop

>>    DW_CFA_nop

>>    DW_CFA_nop

>>

>> -0+4c 00000020 00000050 FDE cie=00000000 pc=00000160..00000190

>> +0+4c 00000020 00000050 FDE cie=00000000 pc=00000140..00000170

>>    DW_CFA_def_cfa_offset: 8

>> -  DW_CFA_advance_loc: 6 to 00000166

>> +  DW_CFA_advance_loc: 6 to 00000146

>>    DW_CFA_def_cfa_offset: 12

>> -  DW_CFA_advance_loc: 10 to 00000170

>> +  DW_CFA_advance_loc: 10 to 00000150

>>    DW_CFA_def_cfa_expression \(DW_OP_breg4 \(esp\): 4; DW_OP_breg8 \(eip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit2; DW_OP_shl; DW_OP_plus\)

>>

>> -0+70 00000010 00000074 FDE cie=00000000 pc=00000190..000001b0

>> +0+70 00000010 00000074 FDE cie=00000000 pc=00000170..00000190

>>    DW_CFA_nop

>>    DW_CFA_nop

>>    DW_CFA_nop

>> -

>> -

>> -Displaying notes found in: .note.gnu.property

>> -  Owner                 Data size      Description

>> -  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0

>> -      Properties: x86 feature:

>> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d

>> index 27f47d7179..70585634bf 100644

>> --- a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d

>> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d

>> @@ -8,36 +8,36 @@

>>

>>  Disassembly of section .plt:

>>

>> -0+160 <.plt>:

>> - +[a-f0-9]+:   ff 35 62 01 20 00       pushq  0x200162\(%rip\)        # 2002c8 <_GLOBAL_OFFSET_TABLE_\+0x8>

>> - +[a-f0-9]+:   ff 25 64 01 20 00       jmpq   \*0x200164\(%rip\)        # 2002d0 <_GLOBAL_OFFSET_TABLE_\+0x10>

>> +0+140 <.plt>:

>> + +[a-f0-9]+:   ff 35 4a 01 20 00       pushq  0x20014a\(%rip\)        # 200290 <_GLOBAL_OFFSET_TABLE_\+0x8>

>> + +[a-f0-9]+:   ff 25 4c 01 20 00       jmpq   \*0x20014c\(%rip\)        # 200298 <_GLOBAL_OFFSET_TABLE_\+0x10>

>>   +[a-f0-9]+:   0f 1f 40 00             nopl   0x0\(%rax\)

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>>   +[a-f0-9]+:   68 00 00 00 00          pushq  \$0x0

>> - +[a-f0-9]+:   e9 e2 ff ff ff          jmpq   160 <.plt>

>> + +[a-f0-9]+:   e9 e2 ff ff ff          jmpq   140 <.plt>

>>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>>   +[a-f0-9]+:   68 01 00 00 00          pushq  \$0x1

>> - +[a-f0-9]+:   e9 d2 ff ff ff          jmpq   160 <.plt>

>> + +[a-f0-9]+:   e9 d2 ff ff ff          jmpq   140 <.plt>

>>   +[a-f0-9]+:   66 90                   xchg   %ax,%ax

>>

>>  Disassembly of section .plt.sec:

>>

>> -0+190 <bar1@plt>:

>> +0+170 <bar1@plt>:

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>> - +[a-f0-9]+:   ff 25 3e 01 20 00       jmpq   \*0x20013e\(%rip\)        # 2002d8 <bar1>

>> + +[a-f0-9]+:   ff 25 26 01 20 00       jmpq   \*0x200126\(%rip\)        # 2002a0 <bar1>

>>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)

>>

>> -0+1a0 <bar2@plt>:

>> +0+180 <bar2@plt>:

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>> - +[a-f0-9]+:   ff 25 36 01 20 00       jmpq   \*0x200136\(%rip\)        # 2002e0 <bar2>

>> + +[a-f0-9]+:   ff 25 1e 01 20 00       jmpq   \*0x20011e\(%rip\)        # 2002a8 <bar2>

>>   +[a-f0-9]+:   66 0f 1f 44 00 00       nopw   0x0\(%rax,%rax,1\)

>>

>>  Disassembly of section .text:

>>

>> -0+1b0 <foo>:

>> +0+190 <foo>:

>>   +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp

>> - +[a-f0-9]+:   e8 e7 ff ff ff          callq  1a0 <bar2@plt>

>> + +[a-f0-9]+:   e8 e7 ff ff ff          callq  180 <bar2@plt>

>>   +[a-f0-9]+:   48 83 c4 08             add    \$0x8,%rsp

>> - +[a-f0-9]+:   e9 ce ff ff ff          jmpq   190 <bar1@plt>

>> + +[a-f0-9]+:   e9 ce ff ff ff          jmpq   170 <bar1@plt>

>>  #pass

>> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a.d b/ld/testsuite/ld-x86-64/ibt-plt-2a.d

>> index 62d77835b6..0894354026 100644

>> --- a/ld/testsuite/ld-x86-64/ibt-plt-2a.d

>> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2a.d

>> @@ -8,36 +8,36 @@

>>

>>  Disassembly of section .plt:

>>

>> -0+220 <.plt>:

>> - +[a-f0-9]+:   ff 35 ea 01 20 00       pushq  0x2001ea\(%rip\)        # 200410 <_GLOBAL_OFFSET_TABLE_\+0x8>

>> - +[a-f0-9]+:   f2 ff 25 eb 01 20 00    bnd jmpq \*0x2001eb\(%rip\)        # 200418 <_GLOBAL_OFFSET_TABLE_\+0x10>

>> +0+1f0 <.plt>:

>> + +[a-f0-9]+:   ff 35 ca 01 20 00       pushq  0x2001ca\(%rip\)        # 2003c0 <_GLOBAL_OFFSET_TABLE_\+0x8>

>> + +[a-f0-9]+:   f2 ff 25 cb 01 20 00    bnd jmpq \*0x2001cb\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>

>>   +[a-f0-9]+:   0f 1f 00                nopl   \(%rax\)

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>>   +[a-f0-9]+:   68 00 00 00 00          pushq  \$0x0

>> - +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmpq 220 <.plt>

>> + +[a-f0-9]+:   f2 e9 e1 ff ff ff       bnd jmpq 1f0 <.plt>

>>   +[a-f0-9]+:   90                      nop

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>>   +[a-f0-9]+:   68 01 00 00 00          pushq  \$0x1

>> - +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmpq 220 <.plt>

>> + +[a-f0-9]+:   f2 e9 d1 ff ff ff       bnd jmpq 1f0 <.plt>

>>   +[a-f0-9]+:   90                      nop

>>

>>  Disassembly of section .plt.sec:

>>

>> -0+250 <bar1@plt>:

>> +0+220 <bar1@plt>:

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>> - +[a-f0-9]+:   f2 ff 25 c5 01 20 00    bnd jmpq \*0x2001c5\(%rip\)        # 200420 <bar1>

>> + +[a-f0-9]+:   f2 ff 25 a5 01 20 00    bnd jmpq \*0x2001a5\(%rip\)        # 2003d0 <bar1>

>>   +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)

>>

>> -0+260 <bar2@plt>:

>> +0+230 <bar2@plt>:

>>   +[a-f0-9]+:   f3 0f 1e fa             endbr64

>> - +[a-f0-9]+:   f2 ff 25 bd 01 20 00    bnd jmpq \*0x2001bd\(%rip\)        # 200428 <bar2>

>> + +[a-f0-9]+:   f2 ff 25 9d 01 20 00    bnd jmpq \*0x20019d\(%rip\)        # 2003d8 <bar2>

>>   +[a-f0-9]+:   0f 1f 44 00 00          nopl   0x0\(%rax,%rax,1\)

>>

>>  Disassembly of section .text:

>>

>> -0+270 <foo>:

>> +0+240 <foo>:

>>   +[a-f0-9]+:   48 83 ec 08             sub    \$0x8,%rsp

>> - +[a-f0-9]+:   e8 e7 ff ff ff          callq  260 <bar2@plt>

>> + +[a-f0-9]+:   e8 e7 ff ff ff          callq  230 <bar2@plt>

>>   +[a-f0-9]+:   48 83 c4 08             add    \$0x8,%rsp

>> - +[a-f0-9]+:   e9 ce ff ff ff          jmpq   250 <bar1@plt>

>> + +[a-f0-9]+:   e9 ce ff ff ff          jmpq   220 <bar1@plt>

>>  #pass

>> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d

>> index b4ca256895..2f7505a70d 100644

>> --- a/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d

>> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d

>> @@ -18,27 +18,21 @@ Contents of the .eh_frame section:

>>    DW_CFA_nop

>>    DW_CFA_nop

>>

>> -0+18 00000014 0000001c FDE cie=00000000 pc=000001b0..000001c2

>> -  DW_CFA_advance_loc: 4 to 000001b4

>> +0+18 00000014 0000001c FDE cie=00000000 pc=00000190..000001a2

>> +  DW_CFA_advance_loc: 4 to 00000194

>>    DW_CFA_def_cfa_offset: 16

>> -  DW_CFA_advance_loc: 9 to 000001bd

>> +  DW_CFA_advance_loc: 9 to 0000019d

>>    DW_CFA_def_cfa_offset: 8

>>    DW_CFA_nop

>>

>> -0+30 00000020 00000034 FDE cie=00000000 pc=00000160..00000190

>> +0+30 00000020 00000034 FDE cie=00000000 pc=00000140..00000170

>>    DW_CFA_def_cfa_offset: 16

>> -  DW_CFA_advance_loc: 6 to 00000166

>> +  DW_CFA_advance_loc: 6 to 00000146

>>    DW_CFA_def_cfa_offset: 24

>> -  DW_CFA_advance_loc: 10 to 00000170

>> +  DW_CFA_advance_loc: 10 to 00000150

>>    DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)

>>

>> -0+54 00000010 00000058 FDE cie=00000000 pc=00000190..000001b0

>> +0+54 00000010 00000058 FDE cie=00000000 pc=00000170..00000190

>>    DW_CFA_nop

>>    DW_CFA_nop

>>    DW_CFA_nop

>> -

>> -

>> -Displaying notes found in: .note.gnu.property

>> -  Owner                 Data size      Description

>> -  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0

>> -      Properties: x86 feature:

>> diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2b.d b/ld/testsuite/ld-x86-64/ibt-plt-2b.d

>> index 4a670ee1b9..2bb59d0d83 100644

>> --- a/ld/testsuite/ld-x86-64/ibt-plt-2b.d

>> +++ b/ld/testsuite/ld-x86-64/ibt-plt-2b.d

>> @@ -18,31 +18,25 @@ Contents of the .eh_frame section:

>>    DW_CFA_nop

>>    DW_CFA_nop

>>

>> -0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000270..0000000000000282

>> -  DW_CFA_advance_loc: 4 to 0000000000000274

>> +0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000240..0000000000000252

>> +  DW_CFA_advance_loc: 4 to 0000000000000244

>>    DW_CFA_def_cfa_offset: 16

>> -  DW_CFA_advance_loc: 9 to 000000000000027d

>> +  DW_CFA_advance_loc: 9 to 000000000000024d

>>    DW_CFA_def_cfa_offset: 8

>>    DW_CFA_nop

>>

>> -0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000220..0000000000000250

>> +0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001f0..0000000000000220

>>    DW_CFA_def_cfa_offset: 16

>> -  DW_CFA_advance_loc: 6 to 0000000000000226

>> +  DW_CFA_advance_loc: 6 to 00000000000001f6

>>    DW_CFA_def_cfa_offset: 24

>> -  DW_CFA_advance_loc: 10 to 0000000000000230

>> +  DW_CFA_advance_loc: 10 to 0000000000000200

>>    DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)

>>    DW_CFA_nop

>>    DW_CFA_nop

>>    DW_CFA_nop

>>    DW_CFA_nop

>>

>> -0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000250..0000000000000270

>> +0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000220..0000000000000240

>>    DW_CFA_nop

>>    DW_CFA_nop

>>    DW_CFA_nop

>> -

>> -

>> -Displaying notes found in: .note.gnu.property

>> -  Owner                 Data size      Description

>> -  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0

>> -      Properties: x86 feature:

>> --

>> 2.17.1

>>

>

>

>

> --

> H.J.




-- 
H.J.

Patch

diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 530679f9c8..cf256f70e0 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1479,6 +1479,10 @@  struct elf_backend_data
   /* Set up GNU properties.  */
   bfd *(*setup_gnu_properties) (struct bfd_link_info *);
 
+  /* Fix up GNU properties.  */
+  void (*fixup_gnu_properties) (struct bfd_link_info *,
+				elf_property_list **);
+
   /* Encoding used for compact EH tables.  */
   int (*compact_eh_encoding) (struct bfd_link_info *);
 
diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c
index f58bdc0711..0d98ef1eec 100644
--- a/bfd/elf-properties.c
+++ b/bfd/elf-properties.c
@@ -520,6 +520,18 @@  _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
 	  return NULL;
 	}
 
+      /* Fix up GNU properties.  */
+      if (bed->fixup_gnu_properties)
+	bed->fixup_gnu_properties (info, &elf_properties (first_pbfd));
+
+      if (elf_properties (first_pbfd) == NULL)
+	{
+	  /* Discard .note.gnu.property section if all properties have
+	     been removed.  */
+	  sec->output_section = bfd_abs_section_ptr;
+	  return NULL;
+	}
+
       /* Compute the section size.  */
       list = elf_properties (first_pbfd);
       size = elf_get_gnu_property_section_size (list, align_size);
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index a86ea587a2..0c4de8cc66 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -550,6 +550,9 @@ 
 #ifndef elf_backend_setup_gnu_properties
 #define elf_backend_setup_gnu_properties	_bfd_elf_link_setup_gnu_properties
 #endif
+#ifndef elf_backend_fixup_gnu_properties
+#define elf_backend_fixup_gnu_properties	NULL
+#endif
 #ifndef elf_backend_static_tls_alignment
 #define elf_backend_static_tls_alignment	1
 #endif
@@ -876,6 +879,7 @@  static struct elf_backend_data elfNN_bed =
   elf_backend_parse_gnu_properties,
   elf_backend_merge_gnu_properties,
   elf_backend_setup_gnu_properties,
+  elf_backend_fixup_gnu_properties,
   elf_backend_compact_eh_encoding,
   elf_backend_cant_unwind_opcode,
   elf_backend_static_tls_alignment,
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index 2d8f7b640b..1a4c723969 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -2959,3 +2959,31 @@  error_alignment:
 
   return pbfd;
 }
+
+/* Fix up x86 GNU properties.  */
+
+void
+_bfd_x86_elf_link_fixup_gnu_properties
+  (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+   elf_property_list **listp)
+{
+  elf_property_list *p;
+
+  for (p = *listp; p; p = p->next)
+    switch (p->property.pr_type)
+      {
+      case GNU_PROPERTY_X86_ISA_1_USED:
+      case GNU_PROPERTY_X86_ISA_1_NEEDED:
+      case GNU_PROPERTY_X86_FEATURE_1_AND:
+	if (p->property.u.number == 0)
+	  {
+	    /* Remove empty property.  */
+	    *listp = p->next;
+	    continue;
+	  }
+	listp = &p->next;
+	break;
+      default:
+	break;
+      }
+}
diff --git a/bfd/elfxx-x86.h b/bfd/elfxx-x86.h
index 6a5609467d..964843822e 100644
--- a/bfd/elfxx-x86.h
+++ b/bfd/elfxx-x86.h
@@ -684,6 +684,9 @@  extern enum elf_property_kind _bfd_x86_elf_parse_gnu_properties
 extern bfd_boolean _bfd_x86_elf_merge_gnu_properties
   (struct bfd_link_info *, bfd *, elf_property *, elf_property *);
 
+extern void _bfd_x86_elf_link_fixup_gnu_properties
+  (struct bfd_link_info *, elf_property_list **);
+
 extern bfd * _bfd_x86_elf_link_setup_gnu_properties
   (struct bfd_link_info *, struct elf_x86_init_table *);
 
@@ -726,3 +729,5 @@  extern void _bfd_x86_elf_link_fixup_ifunc_symbol
   _bfd_x86_elf_parse_gnu_properties
 #define elf_backend_merge_gnu_properties \
   _bfd_x86_elf_merge_gnu_properties
+#define elf_backend_fixup_gnu_properties \
+  _bfd_x86_elf_link_fixup_gnu_properties
diff --git a/ld/testsuite/ld-i386/ibt-plt-2a.d b/ld/testsuite/ld-i386/ibt-plt-2a.d
index 03c8e127a9..5825be43f4 100644
--- a/ld/testsuite/ld-i386/ibt-plt-2a.d
+++ b/ld/testsuite/ld-i386/ibt-plt-2a.d
@@ -8,45 +8,45 @@ 
 
 Disassembly of section .plt:
 
-0+160 <.plt>:
+0+140 <.plt>:
  +[a-f0-9]+:	ff b3 04 00 00 00    	pushl  0x4\(%ebx\)
  +[a-f0-9]+:	ff a3 08 00 00 00    	jmp    \*0x8\(%ebx\)
  +[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
  +[a-f0-9]+:	f3 0f 1e fb          	endbr32 
  +[a-f0-9]+:	68 00 00 00 00       	push   \$0x0
- +[a-f0-9]+:	e9 e2 ff ff ff       	jmp    160 <.plt>
+ +[a-f0-9]+:	e9 e2 ff ff ff       	jmp    140 <.plt>
  +[a-f0-9]+:	66 90                	xchg   %ax,%ax
  +[a-f0-9]+:	f3 0f 1e fb          	endbr32 
  +[a-f0-9]+:	68 08 00 00 00       	push   \$0x8
- +[a-f0-9]+:	e9 d2 ff ff ff       	jmp    160 <.plt>
+ +[a-f0-9]+:	e9 d2 ff ff ff       	jmp    140 <.plt>
  +[a-f0-9]+:	66 90                	xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
-0+190 <bar1@plt>:
+0+170 <bar1@plt>:
  +[a-f0-9]+:	f3 0f 1e fb          	endbr32 
  +[a-f0-9]+:	ff a3 0c 00 00 00    	jmp    \*0xc\(%ebx\)
  +[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
 
-0+1a0 <bar2@plt>:
+0+180 <bar2@plt>:
  +[a-f0-9]+:	f3 0f 1e fb          	endbr32 
  +[a-f0-9]+:	ff a3 10 00 00 00    	jmp    \*0x10\(%ebx\)
  +[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
 
 Disassembly of section .text:
 
-0+1b0 <foo>:
+0+190 <foo>:
  +[a-f0-9]+:	53                   	push   %ebx
- +[a-f0-9]+:	e8 18 00 00 00       	call   1ce <__x86.get_pc_thunk.bx>
- +[a-f0-9]+:	81 c3 36 11 00 00    	add    \$0x1136,%ebx
+ +[a-f0-9]+:	e8 18 00 00 00       	call   1ae <__x86.get_pc_thunk.bx>
+ +[a-f0-9]+:	81 c3 1a 11 00 00    	add    \$0x111a,%ebx
  +[a-f0-9]+:	83 ec 08             	sub    \$0x8,%esp
- +[a-f0-9]+:	e8 dc ff ff ff       	call   1a0 <bar2@plt>
- +[a-f0-9]+:	e8 c7 ff ff ff       	call   190 <bar1@plt>
+ +[a-f0-9]+:	e8 dc ff ff ff       	call   180 <bar2@plt>
+ +[a-f0-9]+:	e8 c7 ff ff ff       	call   170 <bar1@plt>
  +[a-f0-9]+:	83 c4 08             	add    \$0x8,%esp
  +[a-f0-9]+:	5b                   	pop    %ebx
  +[a-f0-9]+:	c3                   	ret    
 
-0+1ce <__x86.get_pc_thunk.bx>:
+0+1ae <__x86.get_pc_thunk.bx>:
  +[a-f0-9]+:	8b 1c 24             	mov    \(%esp\),%ebx
  +[a-f0-9]+:	c3                   	ret    
 #pass
diff --git a/ld/testsuite/ld-i386/ibt-plt-2b.d b/ld/testsuite/ld-i386/ibt-plt-2b.d
index d7b4e1e74c..0fa9a998f1 100644
--- a/ld/testsuite/ld-i386/ibt-plt-2b.d
+++ b/ld/testsuite/ld-i386/ibt-plt-2b.d
@@ -18,37 +18,31 @@  Contents of the .eh_frame section:
   DW_CFA_nop
   DW_CFA_nop
 
-0+18 0000001c 0000001c FDE cie=00000000 pc=000001b0..000001ce
-  DW_CFA_advance_loc: 1 to 000001b1
+0+18 0000001c 0000001c FDE cie=00000000 pc=00000190..000001ae
+  DW_CFA_advance_loc: 1 to 00000191
   DW_CFA_def_cfa_offset: 8
   DW_CFA_offset: r3 \(ebx\) at cfa-8
-  DW_CFA_advance_loc: 14 to 000001bf
+  DW_CFA_advance_loc: 14 to 0000019f
   DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 13 to 000001cc
+  DW_CFA_advance_loc: 13 to 000001ac
   DW_CFA_def_cfa_offset: 8
-  DW_CFA_advance_loc: 1 to 000001cd
+  DW_CFA_advance_loc: 1 to 000001ad
   DW_CFA_restore: r3 \(ebx\)
   DW_CFA_def_cfa_offset: 4
 
-0+38 00000010 0000003c FDE cie=00000000 pc=000001ce..000001d2
+0+38 00000010 0000003c FDE cie=00000000 pc=000001ae..000001b2
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
 
-0+4c 00000020 00000050 FDE cie=00000000 pc=00000160..00000190
+0+4c 00000020 00000050 FDE cie=00000000 pc=00000140..00000170
   DW_CFA_def_cfa_offset: 8
-  DW_CFA_advance_loc: 6 to 00000166
+  DW_CFA_advance_loc: 6 to 00000146
   DW_CFA_def_cfa_offset: 12
-  DW_CFA_advance_loc: 10 to 00000170
+  DW_CFA_advance_loc: 10 to 00000150
   DW_CFA_def_cfa_expression \(DW_OP_breg4 \(esp\): 4; DW_OP_breg8 \(eip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit2; DW_OP_shl; DW_OP_plus\)
 
-0+70 00000010 00000074 FDE cie=00000000 pc=00000190..000001b0
+0+70 00000010 00000074 FDE cie=00000000 pc=00000170..00000190
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
-
-
-Displaying notes found in: .note.gnu.property
-  Owner                 Data size	Description
-  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 feature: 
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d
index 27f47d7179..70585634bf 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-2a-x32.d
@@ -8,36 +8,36 @@ 
 
 Disassembly of section .plt:
 
-0+160 <.plt>:
- +[a-f0-9]+:	ff 35 62 01 20 00    	pushq  0x200162\(%rip\)        # 2002c8 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	ff 25 64 01 20 00    	jmpq   \*0x200164\(%rip\)        # 2002d0 <_GLOBAL_OFFSET_TABLE_\+0x10>
+0+140 <.plt>:
+ +[a-f0-9]+:	ff 35 4a 01 20 00    	pushq  0x20014a\(%rip\)        # 200290 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+:	ff 25 4c 01 20 00    	jmpq   \*0x20014c\(%rip\)        # 200298 <_GLOBAL_OFFSET_TABLE_\+0x10>
  +[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%rax\)
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
  +[a-f0-9]+:	68 00 00 00 00       	pushq  \$0x0
- +[a-f0-9]+:	e9 e2 ff ff ff       	jmpq   160 <.plt>
+ +[a-f0-9]+:	e9 e2 ff ff ff       	jmpq   140 <.plt>
  +[a-f0-9]+:	66 90                	xchg   %ax,%ax
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
  +[a-f0-9]+:	68 01 00 00 00       	pushq  \$0x1
- +[a-f0-9]+:	e9 d2 ff ff ff       	jmpq   160 <.plt>
+ +[a-f0-9]+:	e9 d2 ff ff ff       	jmpq   140 <.plt>
  +[a-f0-9]+:	66 90                	xchg   %ax,%ax
 
 Disassembly of section .plt.sec:
 
-0+190 <bar1@plt>:
+0+170 <bar1@plt>:
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
- +[a-f0-9]+:	ff 25 3e 01 20 00    	jmpq   \*0x20013e\(%rip\)        # 2002d8 <bar1>
+ +[a-f0-9]+:	ff 25 26 01 20 00    	jmpq   \*0x200126\(%rip\)        # 2002a0 <bar1>
  +[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%rax,%rax,1\)
 
-0+1a0 <bar2@plt>:
+0+180 <bar2@plt>:
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
- +[a-f0-9]+:	ff 25 36 01 20 00    	jmpq   \*0x200136\(%rip\)        # 2002e0 <bar2>
+ +[a-f0-9]+:	ff 25 1e 01 20 00    	jmpq   \*0x20011e\(%rip\)        # 2002a8 <bar2>
  +[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
-0+1b0 <foo>:
+0+190 <foo>:
  +[a-f0-9]+:	48 83 ec 08          	sub    \$0x8,%rsp
- +[a-f0-9]+:	e8 e7 ff ff ff       	callq  1a0 <bar2@plt>
+ +[a-f0-9]+:	e8 e7 ff ff ff       	callq  180 <bar2@plt>
  +[a-f0-9]+:	48 83 c4 08          	add    \$0x8,%rsp
- +[a-f0-9]+:	e9 ce ff ff ff       	jmpq   190 <bar1@plt>
+ +[a-f0-9]+:	e9 ce ff ff ff       	jmpq   170 <bar1@plt>
 #pass
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2a.d b/ld/testsuite/ld-x86-64/ibt-plt-2a.d
index 62d77835b6..0894354026 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-2a.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-2a.d
@@ -8,36 +8,36 @@ 
 
 Disassembly of section .plt:
 
-0+220 <.plt>:
- +[a-f0-9]+:	ff 35 ea 01 20 00    	pushq  0x2001ea\(%rip\)        # 200410 <_GLOBAL_OFFSET_TABLE_\+0x8>
- +[a-f0-9]+:	f2 ff 25 eb 01 20 00 	bnd jmpq \*0x2001eb\(%rip\)        # 200418 <_GLOBAL_OFFSET_TABLE_\+0x10>
+0+1f0 <.plt>:
+ +[a-f0-9]+:	ff 35 ca 01 20 00    	pushq  0x2001ca\(%rip\)        # 2003c0 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ +[a-f0-9]+:	f2 ff 25 cb 01 20 00 	bnd jmpq \*0x2001cb\(%rip\)        # 2003c8 <_GLOBAL_OFFSET_TABLE_\+0x10>
  +[a-f0-9]+:	0f 1f 00             	nopl   \(%rax\)
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
  +[a-f0-9]+:	68 00 00 00 00       	pushq  \$0x0
- +[a-f0-9]+:	f2 e9 e1 ff ff ff    	bnd jmpq 220 <.plt>
+ +[a-f0-9]+:	f2 e9 e1 ff ff ff    	bnd jmpq 1f0 <.plt>
  +[a-f0-9]+:	90                   	nop
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
  +[a-f0-9]+:	68 01 00 00 00       	pushq  \$0x1
- +[a-f0-9]+:	f2 e9 d1 ff ff ff    	bnd jmpq 220 <.plt>
+ +[a-f0-9]+:	f2 e9 d1 ff ff ff    	bnd jmpq 1f0 <.plt>
  +[a-f0-9]+:	90                   	nop
 
 Disassembly of section .plt.sec:
 
-0+250 <bar1@plt>:
+0+220 <bar1@plt>:
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
- +[a-f0-9]+:	f2 ff 25 c5 01 20 00 	bnd jmpq \*0x2001c5\(%rip\)        # 200420 <bar1>
+ +[a-f0-9]+:	f2 ff 25 a5 01 20 00 	bnd jmpq \*0x2001a5\(%rip\)        # 2003d0 <bar1>
  +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
 
-0+260 <bar2@plt>:
+0+230 <bar2@plt>:
  +[a-f0-9]+:	f3 0f 1e fa          	endbr64 
- +[a-f0-9]+:	f2 ff 25 bd 01 20 00 	bnd jmpq \*0x2001bd\(%rip\)        # 200428 <bar2>
+ +[a-f0-9]+:	f2 ff 25 9d 01 20 00 	bnd jmpq \*0x20019d\(%rip\)        # 2003d8 <bar2>
  +[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%rax,%rax,1\)
 
 Disassembly of section .text:
 
-0+270 <foo>:
+0+240 <foo>:
  +[a-f0-9]+:	48 83 ec 08          	sub    \$0x8,%rsp
- +[a-f0-9]+:	e8 e7 ff ff ff       	callq  260 <bar2@plt>
+ +[a-f0-9]+:	e8 e7 ff ff ff       	callq  230 <bar2@plt>
  +[a-f0-9]+:	48 83 c4 08          	add    \$0x8,%rsp
- +[a-f0-9]+:	e9 ce ff ff ff       	jmpq   250 <bar1@plt>
+ +[a-f0-9]+:	e9 ce ff ff ff       	jmpq   220 <bar1@plt>
 #pass
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d b/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d
index b4ca256895..2f7505a70d 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-2b-x32.d
@@ -18,27 +18,21 @@  Contents of the .eh_frame section:
   DW_CFA_nop
   DW_CFA_nop
 
-0+18 00000014 0000001c FDE cie=00000000 pc=000001b0..000001c2
-  DW_CFA_advance_loc: 4 to 000001b4
+0+18 00000014 0000001c FDE cie=00000000 pc=00000190..000001a2
+  DW_CFA_advance_loc: 4 to 00000194
   DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 9 to 000001bd
+  DW_CFA_advance_loc: 9 to 0000019d
   DW_CFA_def_cfa_offset: 8
   DW_CFA_nop
 
-0+30 00000020 00000034 FDE cie=00000000 pc=00000160..00000190
+0+30 00000020 00000034 FDE cie=00000000 pc=00000140..00000170
   DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 6 to 00000166
+  DW_CFA_advance_loc: 6 to 00000146
   DW_CFA_def_cfa_offset: 24
-  DW_CFA_advance_loc: 10 to 00000170
+  DW_CFA_advance_loc: 10 to 00000150
   DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit9; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
 
-0+54 00000010 00000058 FDE cie=00000000 pc=00000190..000001b0
+0+54 00000010 00000058 FDE cie=00000000 pc=00000170..00000190
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
-
-
-Displaying notes found in: .note.gnu.property
-  Owner                 Data size	Description
-  GNU                  0x0000000c	NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 feature: 
diff --git a/ld/testsuite/ld-x86-64/ibt-plt-2b.d b/ld/testsuite/ld-x86-64/ibt-plt-2b.d
index 4a670ee1b9..2bb59d0d83 100644
--- a/ld/testsuite/ld-x86-64/ibt-plt-2b.d
+++ b/ld/testsuite/ld-x86-64/ibt-plt-2b.d
@@ -18,31 +18,25 @@  Contents of the .eh_frame section:
   DW_CFA_nop
   DW_CFA_nop
 
-0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000270..0000000000000282
-  DW_CFA_advance_loc: 4 to 0000000000000274
+0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000240..0000000000000252
+  DW_CFA_advance_loc: 4 to 0000000000000244
   DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 9 to 000000000000027d
+  DW_CFA_advance_loc: 9 to 000000000000024d
   DW_CFA_def_cfa_offset: 8
   DW_CFA_nop
 
-0+30 0000000000000024 00000034 FDE cie=00000000 pc=0000000000000220..0000000000000250
+0+30 0000000000000024 00000034 FDE cie=00000000 pc=00000000000001f0..0000000000000220
   DW_CFA_def_cfa_offset: 16
-  DW_CFA_advance_loc: 6 to 0000000000000226
+  DW_CFA_advance_loc: 6 to 00000000000001f6
   DW_CFA_def_cfa_offset: 24
-  DW_CFA_advance_loc: 10 to 0000000000000230
+  DW_CFA_advance_loc: 10 to 0000000000000200
   DW_CFA_def_cfa_expression \(DW_OP_breg7 \(rsp\): 8; DW_OP_breg16 \(rip\): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit10; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus\)
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
 
-0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000250..0000000000000270
+0+58 0000000000000010 0000005c FDE cie=00000000 pc=0000000000000220..0000000000000240
   DW_CFA_nop
   DW_CFA_nop
   DW_CFA_nop
-
-
-Displaying notes found in: .note.gnu.property
-  Owner                 Data size	Description
-  GNU                  0x00000010	NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 feature: