As is, if you compile libc.so with gcc-3.3.1 on sh4, it will be marked with DT_RPATH even though it doesn't need it, which causes ld.so to crash silently when loading libc.so. This is catastrophic, since all dynamically loaded programs crash. The crash is caused by the line assert (info[DT_RPATH] == NULL); which occurs too early for an error message to be printed. This is caused by the line !rpath:-rpath /lib in the spec file. A patch written by Kaz to fix this is at http://www.kegel.com/crosstool/current/gcc-3.3-patches/sh-spec.patch I have tried it, and it seems to solve the problem for me. Please include this patch in gcc-3.3.2.
Same as before: * config/sh/linux.h (SUBTARGET_LINK_SPEC): Don't set rpath. (LIB_SPEC): Set -lpthread always when -pthread set. Set -lieee when -mieee-fp set and -shared not set. (SH_FALLBACK_FRAME_FLOAT_STATE): Don't define for SH5.
Subject: Re: [3.3 only] spec file improperly inserts rpath even when none needed > Same as before: > * config/sh/linux.h (SUBTARGET_LINK_SPEC): Don't set rpath. > (LIB_SPEC): Set -lpthread always when -pthread set. Set -lieee > when -mieee-fp set and -shared not set. > (SH_FALLBACK_FRAME_FLOAT_STATE): Don't define for SH5. The corresponding patch was checked in already to 3.3.2 under the approval with Mark Mitchell: 2003-08-08 Kaz Kojima <kkojima@gcc.gnu.org> * config/sh/linux.h (SUBTARGET_LINK_SPEC): Don't set rpath. (LIB_SPEC): Set -lpthread always when -pthread set. Set -lieee when -mieee-fp set and -shared not set.
Closing as fixed. I should have looked before confirming bugs (it is too late for me need sleep).
Oh, man, I am so embarassed... thanks, guys!