7d5f076 x86-64: Correct unwind info for the BND PLT and .plt.bnd

Authored and Committed by H.J. Lu 7 years ago
    x86-64: Correct unwind info for the BND PLT and .plt.bnd
    
    Since the BND PLT has
    
     230:	68 00 00 00 00       	pushq  $0x0
     235:	f2 e9 e5 ff ff ff    	bnd jmpq 220 <.plt>
     23b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
    
    instead of
    
     230:	ff 25 e2 0d 20 00    	jmpq   *0x200de2(%rip)        # 201018
    <func>
     236:	68 00 00 00 00       	pushq  $0x0
     23b:	e9 e0 ff ff ff       	jmpq   220 <.plt>
    
    its unwind info should be
    
    DW_CFA_def_cfa_expression (DW_OP_breg7 (rsp): 8; DW_OP_breg16 (rip): 0;
    DW_OP_lit15; DW_OP_and; DW_OP_lit5; DW_OP_ge; DW_OP_lit3; DW_OP_shl;
    DW_OP_plus)
    
    Also generate unwind info for the .plt.bnd section.  Sine it is the same
    as unwind info for the .plt.got section, we use unwind info for the
    .plt.got section to cover the the .plt.bnd section.
    
    bfd/
    
    2017-01-13  H.J. Lu  <hongjiu.lu@intel.com>
    
    	Backport from master
    	2017-01-12  H.J. Lu  <hongjiu.lu@intel.com>
    
    	PR ld/21038
    	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add
    	plt_bnd_eh_frame.
    	(elf_x86_64_check_relocs): Create .eh_frame section for the
    	.plt.bnd section.
    	(elf_x86_64_size_dynamic_sections): Allocate and initialize
    	.eh_frame section for the .plt.bnd section.
    	(elf_x86_64_finish_dynamic_sections): Adjust .eh_frame section
    	for the .plt.bnd section.
    
    	2017-01-11  H.J. Lu  <hongjiu.lu@intel.com>
    
    	PR ld/21038
    	* elf64-x86-64.c (elf_x86_64_eh_frame_bnd_plt): New.
    	(elf_x86_64_bnd_arch_bed): Use elf_x86_64_eh_frame_bnd_plt and
    	elf_x86_64_eh_frame_plt_got.
    	(elf_x86_64_size_dynamic_sections): Get unwind info from
    	elf_x86_64_bnd_arch_bed for the BND PLT.
    
    ld/
    
    2017-01-13  H.J. Lu  <hongjiu.lu@intel.com>
    
    	Backport from master
    	2017-01-12  H.J. Lu  <hongjiu.lu@intel.com>
    
    	PR ld/21038
    	* testsuite/ld-x86-64/pr21038b.d: Updated.
    	* testsuite/ld-x86-64/pr21038c.d: New file.
    	* testsuite/ld-x86-64/pr21038c.s: Likewise.
    	* testsuite/ld-x86-64/x86-64.exp: Run pr21038c.
    
    	2017-01-11  H.J. Lu  <hongjiu.lu@intel.com>
    
    	PR ld/21038
    	* testsuite/ld-x86-64/pr21038a.d: New file.
    	* testsuite/ld-x86-64/pr21038a.s: Likewise.
    	* testsuite/ld-x86-64/pr21038b.d: Likewise.
    	* testsuite/ld-x86-64/pr21038b.s: Likewise.
    	* testsuite/ld-x86-64/x86-64.exp: Run pr21038a and pr21038b.
    
        
file modified
+24 -0
file modified
+115 -28
file modified
+20 -0