[Bug target/42947] multilib and startup files paths differ on sh4 with -m4 and without -m4 where -m4 is default multilib
slyfox at inbox dot ru
gcc-bugzilla@gcc.gnu.org
Sat Apr 14 11:55:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42947
--- Comment #5 from Sergei Trofimovich <slyfox at inbox dot ru> ---
I have looked at it a bit and I think the bug here is in interaction between
MULTILIB_DEFAULTS
and
SYSROOT_SUFFIX_SPEC
AFAIU normally gcc ignores spec overrides for MULTILIB_DEFAULTS.
In our case values are:
// from sh/sh.h expansion
#define MULTILIB_DEFAULTS { "ml", "m4" }
// from autogenerated multilib.h
static const char *const multilib_raw[] = {
". !m4;",
"m4 m4;",
NULL
};
// from autogenerated sysroot-suffix.h
#define SYSROOT_SUFFIX_SPEC "" \
"%{m4:/m4;" \
":}"
Note even when we pass option -m4 we never append 'm4' suffix in library search
path (because it's a MULTILIB_DEFAULTS).
Looks like sh is one of 2 rare targets that touch t-sysroot-suffix:
sh-*-elf* | sh[12346l]*-*-elf* | \
sh-*-linux* | sh[2346lbe]*-*-linux* | \
sh-*-netbsdelf* | shl*-*-netbsdelf*)
tmake_file="... t-sysroot-suffix"
tic6x-*-uclinux)
tmake_file="t-sysroot-suffix ..."
I think a few possible solutions here are:
- drop SYSROOT_SUFFIX_SPEC support for sh* targets (or some of sh targets)
- fix SYSROOT_SUFFIX_SPEC parsing to respect MULTILIB_DEFAULTS
Does the above sound about right?
I know nothing about SYSROOT_SUFFIX_SPEC.
What uses it? It feels like a competing mechanism to multilib.
More information about the Gcc-bugs
mailing list