From 03f630eb5fcf2eb98ca87d798d20d13da0aead49 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Thu, 26 Mar 2009 20:45:36 -0400 Subject: [PATCH] Expand gcc tests. Verify -fwhole-program works at make startup. Warn when gcc marks global functions as local. --- Makefile | 9 ++++++-- tools/test-combine.sh | 23 -------------------- tools/test-gcc.sh | 50 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 25 deletions(-) delete mode 100755 tools/test-combine.sh create mode 100755 tools/test-gcc.sh diff --git a/Makefile b/Makefile index 34a7535..7d7dbeb 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc \ # Default compiler flags COMMONCFLAGS = -Wall -Os -MD -m32 -march=i386 -mregparm=3 \ - -mpreferred-stack-boundary=2 -mrtd \ + -mpreferred-stack-boundary=2 -mrtd -freg-struct-return \ -ffreestanding -fwhole-program -fomit-frame-pointer \ -fno-delete-null-pointer-checks -Wno-strict-aliasing COMMONCFLAGS += $(call cc-option,$(CC),-nopie,) @@ -54,8 +54,13 @@ vpath %.S src ################ Build rules +TESTGCC:=$(shell CC=$(CC) tools/test-gcc.sh) +ifeq "$(TESTGCC)" "-1" +$(error "Please upgrade GCC") +endif + ifndef AVOIDCOMBINE -AVOIDCOMBINE=$(shell CC=$(CC) tools/test-combine.sh) +AVOIDCOMBINE=$(TESTGCC) endif # Do a whole file compile - two methods are supported. The first diff --git a/tools/test-combine.sh b/tools/test-combine.sh deleted file mode 100755 index 6d17fd0..0000000 --- a/tools/test-combine.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# Script to test if gcc's -combine option works properly. - -TMPFILE1=out/tmp_testcompile1.c -TMPFILE2=out/tmp_testcompile.o - -mkdir -p out -cat - > $TMPFILE1 < /dev/null 2>&1 - -if [ $? -eq 0 ]; then - #echo " Setting AVOIDCOMBINE=0" > /dev/fd/2 - echo 0 -else - echo " Enabling AVOIDCOMBINE=1" > /dev/fd/2 - echo 1 -fi - -rm -f $TMPFILE1 $TMPFILE2 diff --git a/tools/test-gcc.sh b/tools/test-gcc.sh new file mode 100755 index 0000000..1dce450 --- /dev/null +++ b/tools/test-gcc.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# Script to test if gcc's -combine option works properly. + +mkdir -p out +TMPFILE1=out/tmp_testcompile1.c +TMPFILE1o=out/tmp_testcompile1.o +TMPFILE2=out/tmp_testcompile2.c +TMPFILE2o=out/tmp_testcompile2.o +TMPFILE3o=out/tmp_testcompile3.o + +# Test for "-fwhole-program" +gcc -fwhole-program -S -o /dev/null -xc /dev/null > /dev/null 2>&1 +if [ $? -ne 0 ]; then + echo "This version of gcc does not support -fwhole-program." > /dev/fd/2 + echo "Please upgrade to gcc v4.1 or later" > /dev/fd/2 + echo -1 + exit -1 +fi + +# Test if "visible" functions are marked global. +cat - > $TMPFILE1 < /dev/null 2>&1 +cat - > $TMPFILE2 < /dev/null 2>&1 +$CC $TMPFILE1o $TMPFILE2o -o $TMPFILE3o > /dev/null 2>&1 +if [ $? -ne 0 ]; then + echo " Working around non-global functions in -fwhole-program" > /dev/fd/2 +fi + +# Test if "-combine" works +mkdir -p out +cat - > $TMPFILE1 < /dev/null 2>&1 +if [ $? -eq 0 ]; then + #echo " Setting AVOIDCOMBINE=0" > /dev/fd/2 + echo 0 +else + echo " Enabling AVOIDCOMBINE=1" > /dev/fd/2 + echo 1 +fi + +rm -f $TMPFILE1 $TMPFILE1o $TMPFILE2 $TMPFILE2o $TMPFILE3o -- 2.25.1