* elf64-ppc.c (maybe_strip_output): New function.
	(ppc64_elf_size_stubs): Use it to strip .branch_lt and .eh_frame.
ld/testsuite/
	* ld-powerpc/tlsexe.r: Update for stripped .branch_lt.
	* ld-powerpc/tlsexetoc.r: Likewise.
	* ld-powerpc/tlsso.r: Likewise.
	* ld-powerpc/tlstocso.r: Likewise.
This commit is contained in:
Alan Modra 2011-08-05 06:22:22 +00:00
parent 43e1669b2d
commit d969d15f50
7 changed files with 41 additions and 18 deletions

View File

@ -1,3 +1,8 @@
2011-08-05 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (maybe_strip_output): New function.
(ppc64_elf_size_stubs): Use it to strip .branch_lt and .eh_frame.
2011-08-05 Alan Modra <amodra@gmail.com> 2011-08-05 Alan Modra <amodra@gmail.com>
PR ld/12762 PR ld/12762

View File

@ -10871,6 +10871,26 @@ static const unsigned char glink_eh_frame_cie[] =
DW_CFA_def_cfa, 1, 0 /* def_cfa: r1 offset 0. */ DW_CFA_def_cfa, 1, 0 /* def_cfa: r1 offset 0. */
}; };
/* Stripping output sections is normally done before dynamic section
symbols have been allocated. This function is called later, and
handles cases like htab->brlt which is mapped to its own output
section. */
static void
maybe_strip_output (struct bfd_link_info *info, asection *isec)
{
if (isec->size == 0
&& isec->output_section->size == 0
&& !bfd_section_removed_from_list (info->output_bfd,
isec->output_section)
&& elf_section_data (isec->output_section)->dynindx == 0)
{
isec->output_section->flags |= SEC_EXCLUDE;
bfd_section_list_remove (info->output_bfd, isec->output_section);
info->output_bfd->section_count--;
}
}
/* Determine and set the size of the stub section for a final link. /* Determine and set the size of the stub section for a final link.
The basic idea here is to examine all the relocations looking for The basic idea here is to examine all the relocations looking for
@ -11251,10 +11271,9 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size,
(*htab->layout_sections_again) (); (*htab->layout_sections_again) ();
} }
/* It would be nice to strip htab->brlt from the output if the maybe_strip_output (info, htab->brlt);
section is empty, but it's too late. If we strip sections here, if (htab->glink_eh_frame != NULL)
the dynamic symbol table is corrupted since the section symbol maybe_strip_output (info, htab->glink_eh_frame);
for the stripped section isn't written. */
return TRUE; return TRUE;
} }

View File

@ -1,3 +1,10 @@
2011-08-05 Alan Modra <amodra@gmail.com>
* ld-powerpc/tlsexe.r: Update for stripped .branch_lt.
* ld-powerpc/tlsexetoc.r: Likewise.
* ld-powerpc/tlsso.r: Likewise.
* ld-powerpc/tlstocso.r: Likewise.
2011-08-01 H.J. Lu <hongjiu.lu@intel.com> 2011-08-01 H.J. Lu <hongjiu.lu@intel.com>
PR ld/13048 PR ld/13048

View File

@ -20,7 +20,6 @@ Section Headers:
+\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.dynamic +DYNAMIC .* 0+160 10 +WA +4 +0 +8 +\[[ 0-9]+\] \.dynamic +DYNAMIC .* 0+160 10 +WA +4 +0 +8
+\[[ 0-9]+\] \.branch_lt + PROGBITS .* 0+ 0+ +WA +0 +0 +8
+\[[ 0-9]+\] \.got +PROGBITS .* 0+30 08 +WA +0 +0 +8 +\[[ 0-9]+\] \.got +PROGBITS .* 0+30 08 +WA +0 +0 +8
+\[[ 0-9]+\] \.plt +.* +\[[ 0-9]+\] \.plt +.*
+\[[ 0-9]+\] \.shstrtab +.* +\[[ 0-9]+\] \.shstrtab +.*
@ -47,7 +46,7 @@ Program Headers:
+0+ + +0+ +
+01 +\.interp +01 +\.interp
+02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text +02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+03 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt +03 +\.tdata \.dynamic \.got \.plt
+04 +\.dynamic +04 +\.dynamic
+05 +\.tdata \.tbss +05 +\.tdata \.tbss
@ -87,7 +86,6 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.* SECTION +LOCAL +DEFAULT +10 .* SECTION +LOCAL +DEFAULT +10
.* SECTION +LOCAL +DEFAULT +11 .* SECTION +LOCAL +DEFAULT +11
.* SECTION +LOCAL +DEFAULT +12 .* SECTION +LOCAL +DEFAULT +12
.* SECTION +LOCAL +DEFAULT +13
.* TLS +LOCAL +DEFAULT +8 gd4 .* TLS +LOCAL +DEFAULT +8 gd4
.* TLS +LOCAL +DEFAULT +8 ld4 .* TLS +LOCAL +DEFAULT +8 ld4
.* TLS +LOCAL +DEFAULT +8 ld5 .* TLS +LOCAL +DEFAULT +8 ld5

View File

@ -20,7 +20,6 @@ Section Headers:
+\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.dynamic +DYNAMIC .* 0+160 10 +WA +4 +0 +8 +\[[ 0-9]+\] \.dynamic +DYNAMIC .* 0+160 10 +WA +4 +0 +8
+\[[ 0-9]+\] \.branch_lt +PROGBITS .* 0+ 0+ +WA +0 +0 +8
+\[[ 0-9]+\] \.got +PROGBITS .* 0+58 08 +WA +0 +0 +8 +\[[ 0-9]+\] \.got +PROGBITS .* 0+58 08 +WA +0 +0 +8
+\[[ 0-9]+\] \.plt +.* +\[[ 0-9]+\] \.plt +.*
+\[[ 0-9]+\] \.shstrtab +.* +\[[ 0-9]+\] \.shstrtab +.*
@ -47,7 +46,7 @@ Program Headers:
+0+ + +0+ +
+01 +\.interp +01 +\.interp
+02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text +02 +\.interp \.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+03 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt +03 +\.tdata \.dynamic \.got \.plt
+04 +\.dynamic +04 +\.dynamic
+05 +\.tdata \.tbss +05 +\.tdata \.tbss
@ -86,7 +85,6 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.* SECTION +LOCAL +DEFAULT +10 .* SECTION +LOCAL +DEFAULT +10
.* SECTION +LOCAL +DEFAULT +11 .* SECTION +LOCAL +DEFAULT +11
.* SECTION +LOCAL +DEFAULT +12 .* SECTION +LOCAL +DEFAULT +12
.* SECTION +LOCAL +DEFAULT +13
.* TLS +LOCAL +DEFAULT +8 gd4 .* TLS +LOCAL +DEFAULT +8 gd4
.* TLS +LOCAL +DEFAULT +8 ld4 .* TLS +LOCAL +DEFAULT +8 ld4
.* TLS +LOCAL +DEFAULT +8 ld5 .* TLS +LOCAL +DEFAULT +8 ld5
@ -94,7 +92,7 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.* TLS +LOCAL +DEFAULT +8 ie4 .* TLS +LOCAL +DEFAULT +8 ie4
.* TLS +LOCAL +DEFAULT +8 le4 .* TLS +LOCAL +DEFAULT +8 le4
.* TLS +LOCAL +DEFAULT +8 le5 .* TLS +LOCAL +DEFAULT +8 le5
.* NOTYPE +LOCAL +DEFAULT +12 \.Lie0 .* NOTYPE +LOCAL +DEFAULT +11 \.Lie0
.* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC .* OBJECT +LOCAL +DEFAULT +10 _DYNAMIC
.* (NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt)) .* (NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0|(FUNC|NOTYPE) +LOCAL +DEFAULT +UND \.__tls_get_addr(|_opt))
.* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0) .* (NOTYPE +LOCAL +DEFAULT +7 __glink_PLTresolve|NOTYPE +LOCAL +DEFAULT +7 00000010\.plt_call\.__tls_get_addr(|_opt)\+0)

View File

@ -18,7 +18,6 @@ Section Headers:
+\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.dynamic .* +\[[ 0-9]+\] \.dynamic .*
+\[[ 0-9]+\] \.branch_lt .*
+\[[ 0-9]+\] \.got .* +\[[ 0-9]+\] \.got .*
+\[[ 0-9]+\] \.plt .* +\[[ 0-9]+\] \.plt .*
+\[[ 0-9]+\] \.shstrtab .* +\[[ 0-9]+\] \.shstrtab .*
@ -40,7 +39,7 @@ Program Headers:
Section to Segment mapping: Section to Segment mapping:
+Segment Sections\.\.\. +Segment Sections\.\.\.
+0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text +0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+01 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt +01 +\.tdata \.dynamic .got \.plt
+02 +\.dynamic +02 +\.dynamic
+03 +\.tdata \.tbss +03 +\.tdata \.tbss
@ -101,7 +100,6 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.* SECTION +LOCAL +DEFAULT +9 .* SECTION +LOCAL +DEFAULT +9
.* SECTION +LOCAL +DEFAULT +10 .* SECTION +LOCAL +DEFAULT +10
.* SECTION +LOCAL +DEFAULT +11 .* SECTION +LOCAL +DEFAULT +11
.* SECTION +LOCAL +DEFAULT +12
.* TLS +LOCAL +DEFAULT +7 gd4 .* TLS +LOCAL +DEFAULT +7 gd4
.* TLS +LOCAL +DEFAULT +7 ld4 .* TLS +LOCAL +DEFAULT +7 ld4
.* TLS +LOCAL +DEFAULT +7 ld5 .* TLS +LOCAL +DEFAULT +7 ld5

View File

@ -18,7 +18,6 @@ Section Headers:
+\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8 +\[[ 0-9]+\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+\[[ 0-9]+\] \.dynamic .* +\[[ 0-9]+\] \.dynamic .*
+\[[ 0-9]+\] \.branch_lt .*
+\[[ 0-9]+\] \.got .* +\[[ 0-9]+\] \.got .*
+\[[ 0-9]+\] \.plt .* +\[[ 0-9]+\] \.plt .*
+\[[ 0-9]+\] \.shstrtab .* +\[[ 0-9]+\] \.shstrtab .*
@ -40,7 +39,7 @@ Program Headers:
Section to Segment mapping: Section to Segment mapping:
+Segment Sections\.\.\. +Segment Sections\.\.\.
+0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text +0+ +\.hash \.dynsym \.dynstr \.rela\.dyn \.rela\.plt \.text
+01 +\.tdata \.dynamic (\.branch_lt |)\.got \.plt +01 +\.tdata \.dynamic \.got \.plt
+02 +\.dynamic +02 +\.dynamic
+03 +\.tdata \.tbss +03 +\.tdata \.tbss
@ -96,7 +95,6 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.* SECTION +LOCAL +DEFAULT +9 .* SECTION +LOCAL +DEFAULT +9
.* SECTION +LOCAL +DEFAULT +10 .* SECTION +LOCAL +DEFAULT +10
.* SECTION +LOCAL +DEFAULT +11 .* SECTION +LOCAL +DEFAULT +11
.* SECTION +LOCAL +DEFAULT +12
.* TLS +LOCAL +DEFAULT +7 gd4 .* TLS +LOCAL +DEFAULT +7 gd4
.* TLS +LOCAL +DEFAULT +7 ld4 .* TLS +LOCAL +DEFAULT +7 ld4
.* TLS +LOCAL +DEFAULT +7 ld5 .* TLS +LOCAL +DEFAULT +7 ld5
@ -104,7 +102,7 @@ Symbol table '\.symtab' contains [0-9]+ entries:
.* TLS +LOCAL +DEFAULT +7 ie4 .* TLS +LOCAL +DEFAULT +7 ie4
.* TLS +LOCAL +DEFAULT +7 le4 .* TLS +LOCAL +DEFAULT +7 le4
.* TLS +LOCAL +DEFAULT +7 le5 .* TLS +LOCAL +DEFAULT +7 le5
.* NOTYPE +LOCAL +DEFAULT +11 \.Lie0 .* NOTYPE +LOCAL +DEFAULT +10 \.Lie0
.* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC .* OBJECT +LOCAL +DEFAULT +ABS _DYNAMIC
.* NOTYPE +LOCAL +DEFAULT +6 00000010\.plt_call\.__tls_get_addr\+0 .* NOTYPE +LOCAL +DEFAULT +6 00000010\.plt_call\.__tls_get_addr\+0
.* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve .* NOTYPE +LOCAL +DEFAULT +6 __glink_PLTresolve