https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113874
--- Comment #6 from Florian Weimer <fw at gcc dot gnu.org> --- > (In reply to H.J. Lu from comment #4) > > (In reply to H.J. Lu from comment #3) > > > Created attachment 57385 [details] > > > A patch > > > > > > Try this. > > > > This doesn't work properly. To work around in ld.so, _dl_tlsdesc_dynamic > > needs to save and restore ALL registers, which can be expensive. Why doesn't this work properly? Is it possible to make it work with a different approach? The __tls_get_addr call with the default approach potentially needs to solve the same problem, doesn't it? (In reply to Jakub Jelinek from comment #5) > Or it could be compiled with options to make sure it doesn't use vector > registers etc., and only save/restore if it needs to call into some code > where libc can't afford that (say allocate memory). We currently call into malloc, which could be a replacement malloc. If GCC cannot be fixed, full context switch or elimination of the slow path are our best options for a glibc-side fix.