Date: Fri, 1 Jun 2018 11:38:11 +0200 From: Szabolcs Nagy <nsz@...t70.net> To: musl@...ts.openwall.com Subject: Re: TLS issue on aarch64 * Rich Felker <dalias@...c.org> [2018-05-31 20:52:00 -0400]: > On Fri, Jun 01, 2018 at 02:11:02AM +0200, Szabolcs Nagy wrote: > > aarch64: tp + alignup(16, align) must be aligned == tp must be aligned > > OK, I see two possible solutions here: > > 1. tp==self+sizeof(struct pthread). In this case we'll waste some > space (vs the current approach) when no extra alignment is needed, but > it's simple and clean because all the alignments match up naturally. > > 2. tp==self+sizeof(struct pthread)-16 (or rather -reserved in > general). This preserves the current memory usage, but requires > complex new alignment logic since self will no longer be aligned mod > tls_align when tls_align>reserved. > > I pretty strongly prefer option 1. > ok. > In either case, the main_tls.offset/app.tls.offset value needs to > correctly reflect the offset of the TLS from TP, so it either needs to > be alignup(reserved,tls_align) or alignup(reserved,tls_align)-reserved > depending on option 1 or 2. After that change is made, we need to make > sure the storage needs (libc.tls_size) are computed correctly and > account for the extra space due to the initial positive offset. > > No change is then needed in __copy_tls. > > Changes to TP_ADJ and __pthread_self are needed to get reserved out of > them, and the value of reserved needs to be provided somewhere else > for computing main_tls.offset. > ok. i'll try to prepare a patch. > > for initial-exec to work: > > tp + *got - add must be aligned (i.e. *got has to be set up to meet > > the alignment requirement of the module, this does not seem to require > > realignment of tp so even runtime loading of initial-exec tls should > > be possible assuming there is enough space etc...) > > There's never space so it's not even a question, but even if there > were, no, it can't be done because tp will not be aligned mod some > possibly-larger alignment than the alignment in effect at the time the > thread was created. > ah right because there are many threads with different tp so tp + *got can only be aligned if tp modulo alignment is the same in all of them.
Powered by blists - more mailing lists
Powered by Openwall GNU/*/Linux - Powered by OpenVZ