https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84257
Iain Sandoe <iains at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |iains at gcc dot gnu.org --- Comment #5 from Iain Sandoe <iains at gcc dot gnu.org> --- (In reply to Dominique d'Humieres from comment #4) > Confirmed even if I recover only a factor 2. Unfortunately, neither SIP's ignoring - nor removing RPATH_ENVVAR - produces the intended result. Quoting from the Makefile " # This is the list of directories that may be needed in RPATH_ENVVAR # so that programs built for the target machine work. TARGET_LIB_PATH = # This is the list of directories that may be needed in RPATH_ENVVAR # so that programs built for the host machine work. HOST_LIB_PATH = " > I don't think setting RPATH_ENVVAR to DYLD_LIBRARY_PATH is necessary on > modern macOS > versions, please check. The requirement has nothing to do with 'modern' c.f. 'old' macOS/Darwin; these paths are intended to ensure that the correct (just-built, or even not present in the system installation) libraries are available to the stage#1 target libraries build and stage#2+ where needed. For most people's "usual" build the compiler is statically linked with libstdc++ &c. and so this really only affects configure steps when the new compiler is generating code that _should_ use the newly-built support libs. When SIP is enabled (or when you remove the DYLD_LIBRARY_PATH setting) we have been "getting away" falling back to system versions of libstdc++ and libgcc_s.x ... this doesn't work if one introduces a new lib that isn't present on the system (which I want to do to solve the long-standing hassles with the unwinder). * As an aside, there is no Good Solution to using DYLD_LIBRARY_PATH - if it's exported at the top level, since it must be honoured for *every* exe that runs below this, which means that it also affects system-utils (e.g. ld).. this has been a source of instability on occasion. So.. what to do? We don't (well I don't) really want to be forced to switch SIP off to build toolchains, but OTOH it's necessary to manipulate the library load ordering when building a toolchain.... 1) Speculation: that there are a lot of paths to search and they might contain many files, so that if there's no caching of the results (perhaps that was present pre-SIP and is now removed) .. it could mean a lot of work to find the libgcc_s - that's the last path in the list. * To test this hypothesis, I'm going to experiment with re-ordering the search path (temporary fix). 2) A possible proper fix is to make use of @rpath/ and set appropriate rpaths in the build. A while ago I was experimenting with this to solve some of our general deployment issues * will look out those patches. 3) We could (probably) abandon the shared libgcc_ext lib, after some patches in progress to eliminate the unwinder hassles. This would hide (most) of the problem, but not really solve it. * I can easily try this. 1 and 3 are, of course, the easier options (they paper over cracks for the short-term) - but 2 might be quite tricky to get right (it has to work in the build layout _and_ when installed). 4) I did think that we could perhaps move all built host libs to a Known Place in the build tree [e.g. $(builddir)/host-libs, prev-host-libs] (likewise target libs, to a separate Known Place). That would mean a reduced number of paths to search, and that path would only have the libs - not thousands of other files too. That's probably quite a bit of build/test system hacking tho ..