https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113874
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to Florian Weimer from comment #6) > > (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? Clobber must be attached to TLS descriptor call insn. > The __tls_get_addr call with the default approach potentially needs to solve > the same problem, doesn't it? Isn't __tls_get_addr called via the PLT entry? > (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. We should open a glibc bug. I am working on the glibc fix.