Add initial support for TLS sections in PE format files.

This commit is contained in:
Nick Clifton 2003-11-10 17:04:55 +00:00
parent 100bcc3f4e
commit ca6dee30a3
4 changed files with 35 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2003-11-10 Jonathan Wilson <jonwil@tpgi.com.au>
* peXXigen.c (_bfd_XXi_swap_aouthdr_out): Swap out tls pointer.
(_bfd_XXi_final_link_postscript): Look for __tks_used symbol. If
found initialise the tls data directory entry.
2003-11-07 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (ppc_elf_install_value): Delete.

View File

@ -570,8 +570,7 @@ _bfd_XXi_swap_aouthdr_out (abfd, in, out)
struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr;
PEAOUTHDR *aouthdr_out = (PEAOUTHDR *) out;
bfd_vma sa, fa, ib;
IMAGE_DATA_DIRECTORY idata2, idata5;
IMAGE_DATA_DIRECTORY idata2, idata5, tls;
if (pe->force_minimum_alignment)
{
@ -590,6 +589,7 @@ _bfd_XXi_swap_aouthdr_out (abfd, in, out)
idata2 = pe->pe_opthdr.DataDirectory[1];
idata5 = pe->pe_opthdr.DataDirectory[12];
tls = pe->pe_opthdr.DataDirectory[9];
if (aouthdr_in->tsize)
{
@ -641,6 +641,7 @@ _bfd_XXi_swap_aouthdr_out (abfd, in, out)
a final link is going to be performed, it can overwrite them. */
extra->DataDirectory[1] = idata2;
extra->DataDirectory[12] = idata5;
extra->DataDirectory[9] = tls;
if (extra->DataDirectory[1].VirtualAddress == 0)
/* Until other .idata fixes are made (pending patch), the entry for
@ -2025,7 +2026,19 @@ _bfd_XXi_final_link_postscript (abfd, pfinfo)
+ h1->root.u.def.section->output_offset)
- pe_data (abfd)->pe_opthdr.DataDirectory[12].VirtualAddress);
}
h1 = coff_link_hash_lookup (coff_hash_table (info),
"__tls_used", FALSE, FALSE, TRUE);
if (h1 != NULL)
{
pe_data (abfd)->pe_opthdr.DataDirectory[9].VirtualAddress =
(h1->root.u.def.value
+ h1->root.u.def.section->output_section->vma
+ h1->root.u.def.section->output_offset
- pe_data (abfd)->pe_opthdr.ImageBase);
pe_data (abfd)->pe_opthdr.DataDirectory[9].Size = 0x18;
}
/* If we couldn't find idata$2, we either have an excessively
trivial program or are in DEEP trouble; we have to assume trivial
program.... */

View File

@ -1,3 +1,7 @@
2003-11-10 Jonathan Wilson <jonwil@tpgi.com.au>
* scripttempl/pe.sc: Add support for TLS sections.
2003-11-09 Alan Modra <amodra@bigpond.net.au>
* configure.host (HOSTING_LIBS): Group libgcc and libc with

View File

@ -25,6 +25,10 @@ if test "${RELOCATING}"; then
SORT(*)(.idata$6)
SORT(*)(.idata$7)'
R_CRT='*(SORT(.CRT$*))'
R_TLS='
*(.tls)
*(.tls$)
*(SORT(.tls$*))'
R_RSRC='*(SORT(.rsrc$*))'
else
R_TEXT=
@ -129,6 +133,11 @@ SECTIONS
${R_CRT}
}
.tls ${RELOCATING+BLOCK(__section_alignment__)} :
{
${R_TLS}
}
.endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
{
/* end is deprecated, don't use it */