diff options
author | Nick Clifton <nickc@redhat.com> | 2003-11-10 17:04:55 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2003-11-10 17:04:55 +0000 |
commit | ca6dee30a352a58b5764e3c299e93d34f9e08bad (patch) | |
tree | 45e6dd6f323bd1c70970ecad802d36fddc612c63 /bfd | |
parent | 100bcc3f4efba15caf81be6f8da4d0b6309a3334 (diff) | |
download | fsf-binutils-gdb-ca6dee30a352a58b5764e3c299e93d34f9e08bad.zip fsf-binutils-gdb-ca6dee30a352a58b5764e3c299e93d34f9e08bad.tar.gz fsf-binutils-gdb-ca6dee30a352a58b5764e3c299e93d34f9e08bad.tar.bz2 |
Add initial support for TLS sections in PE format files.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/peXXigen.c | 19 |
2 files changed, 22 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b45ea43..73cabd8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index cd0a91c..f3b3a96 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -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.... */ |