On Wed, 21 Jan 2004, Dimitri Torfs wrote:
> Compiler choked on the first file it tries to compile: gcc added
> -mips1 automatically to the as command line which conflicts with the
> -Wa,--trap option:
>
> /usr/local/lib/gcc-lib/mips-linux/3.2.2/../../../../mips-linux/bin/as
> -G 0 -O2 -g0 -32 -march=r4100 -v -mips1 -non_shared -32 -march=r4100
> --trap -o scripts/.tmp_empty.o -
> Assembler messages:
> Error: trap exception not supported at ISA 1
>
> Removing the line which unsets the gas_isa option makes it work again:
> /usr/local/lib/gcc-lib/mips-linux/3.2.2/../../../../mips-linux/bin/as
> -G 0 -O2 -g0 -32 -march=r4100 -v -mips1 -non_shared -32 -march=r4100
> -mips3 --trap -o scripts/.tmp_empty.o
Thanks for digging into it. Actually after fixing the typos I've noticed
gcc 2.95.4 always implies the ISA from the ABI unless overridden and
-mabi=64 implies -mips4, so it bails out with -march/-mcpu set to
something like r4600. This also proves the uncertainity about what's
passed to gas and so far including an ISA specification in gas settings is
tolerable if carefully chosen. So here's a set of new updates -- now the
ISA specifier is removed from gcc flags only if it actually works and the
ISA specifier for gas is untouched.
Hopefully this is the last attempt. Please try it.
Maciej
--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
patch-mips-2.4.23-20031209-mabi-8
diff -up --recursive --new-file
linux-mips-2.4.23-20031209.macro/arch/mips/Makefile
linux-mips-2.4.23-20031209/arch/mips/Makefile
--- linux-mips-2.4.23-20031209.macro/arch/mips/Makefile 2003-12-22
02:35:03.000000000 +0000
+++ linux-mips-2.4.23-20031209/arch/mips/Makefile 2004-01-21
23:53:31.000000000 +0000
@@ -98,6 +98,11 @@ while :; do \
gas_abi=; gas_opt=; gas_cpu=; gas_isa=; \
break; \
done; \
+if test "$$gcc_opt" = -march= && test -n "$$gcc_abi"; then \
+ $(CC) $$gcc_abi $$gcc_opt$$gcc_cpu -S -o /dev/null \
+ -xc /dev/null > /dev/null 2>&1 && \
+ gcc_isa=; \
+fi; \
echo $$gcc_abi $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_abi $$gas_opt$$gas_cpu
$$gas_isa)
#
diff -up --recursive --new-file
linux-mips-2.4.23-20031209.macro/arch/mips64/Makefile
linux-mips-2.4.23-20031209/arch/mips64/Makefile
--- linux-mips-2.4.23-20031209.macro/arch/mips64/Makefile 2003-12-22
02:32:44.000000000 +0000
+++ linux-mips-2.4.23-20031209/arch/mips64/Makefile 2004-01-21
23:53:25.000000000 +0000
@@ -37,7 +37,7 @@ endif
# crossformat linking we rely on the elf2ecoff tool for format conversion.
#
GCCFLAGS := -I $(TOPDIR)/include/asm/gcc
-GCCFLAGS += -mabi=64 -G 0 -mno-abicalls -fno-pic -Wa,--trap -pipe
+GCCFLAGS += -G 0 -mno-abicalls -fno-pic -Wa,--trap -pipe
GCCFLAGS += $(call check_gcc, -finline-limit=100000,)
LINKFLAGS += -G 0 -static # -N
MODFLAGS += -mlong-calls
@@ -76,6 +76,7 @@ while :; do \
done; \
break; \
done; \
+gcc_abi=-mabi=64; \
gcc_cpu=$$cpu; gcc_isa=$$isa; \
gas_cpu=$$cpu; gas_isa=-Wa,$$isa; \
while :; do \
@@ -87,7 +88,12 @@ while :; do \
gas_opt=; gas_cpu=; gas_isa=; \
break; \
done; \
-echo $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_opt$$gas_cpu $$gas_isa)
+if test "$$gcc_opt" = -march=; then \
+ $(CC) $$gcc_abi $$gcc_opt$$gcc_cpu -S -o /dev/null \
+ -xc /dev/null > /dev/null 2>&1 && \
+ gcc_isa=; \
+fi; \
+echo $$gcc_abi $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_opt$$gas_cpu $$gas_isa)
#
# CPU-dependent compiler/assembler options for optimization.
patch-mips-2.6.0-20040108-mabi-8
diff -up --recursive --new-file
linux-mips-2.6.0-20040108.macro/arch/mips/Makefile
linux-mips-2.6.0-20040108/arch/mips/Makefile
--- linux-mips-2.6.0-20040108.macro/arch/mips/Makefile 2004-01-07
04:56:39.000000000 +0000
+++ linux-mips-2.6.0-20040108/arch/mips/Makefile 2004-01-21
23:53:58.000000000 +0000
@@ -108,9 +108,14 @@ while :; do \
gas_abi=; gas_opt=; gas_cpu=; gas_isa=; \
break; \
done; \
-if test x$(gcc-abi) != x$(gas-abi); then \
+if test "$(gcc-abi)" != "$(gas-abi)"; then \
gas_abi="-Wa,-$(gas-abi) -Wa,-mgp$(gcc-abi)"; \
fi; \
+if test "$$gcc_opt" = -march= && test -n "$$gcc_abi"; then \
+ $(CC) $$gcc_abi $$gcc_opt$$gcc_cpu -S -o /dev/null \
+ -xc /dev/null > /dev/null 2>&1 && \
+ gcc_isa=; \
+fi; \
echo $$gcc_abi $$gcc_opt$$gcc_cpu $$gcc_isa $$gas_abi $$gas_opt$$gas_cpu
$$gas_isa)
#
|