stabilize dynamic linker's layout of static TLS
authorRich Felker <dalias@aerifal.cx>
Mon, 13 Apr 2015 22:07:10 +0000 (18:07 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 13 Apr 2015 22:07:10 +0000 (18:07 -0400)
commit0f66fcec2584706116df70cf1db7f2f8815f4444
tree72d239c570ee75e3abbe8f1c390470f29b61073c
parentf630df09b1fd954eda16e2f779da0b5ecc9d80d3
stabilize dynamic linker's layout of static TLS

previously, the layout of the static TLS block was perturbed by the
size of the dtv; dtv size increasing from 0 to 1 perturbed both TLS
arch types, and the TLS-above-TP type's layout was perturbed by the
specific number of dtv slots (libraries with TLS). this behavior made
it virtually impossible to setup a tentative thread pointer address
before loading libraries and keep it unchanged as long as the
libraries' TLS size/alignment requirements fit.

the new code fixes the location of the dtv and pthread structure at
opposite ends of the static TLS block so that they will not move
unless size or alignment changes.
src/ldso/dynlink.c