[llvm-commits] CVS: llvm/utils/check-each-file

Brian Gaeke gaeke at cs.uiuc.edu
Thu Jan 15 16:36:01 PST 2004


Changes in directory llvm/utils:

check-each-file added (r1.1)

---
Log message:

This is my script for narrowing down miscompilations to a single file.


---
Diffs of the changes:  (+147 -0)

Index: llvm/utils/check-each-file
diff -c /dev/null llvm/utils/check-each-file:1.1
*** /dev/null	Thu Jan 15 16:35:53 2004
--- llvm/utils/check-each-file	Thu Jan 15 16:35:43 2004
***************
*** 0 ****
--- 1,147 ----
+ #!/bin/sh
+ # check-each-file
+ # Used to narrow down a miscompilation to one .o file from a list. Please read
+ # the usage procedure, below, for command-line syntax (or run it with --help).
+ # This script depends on the llvm-native-gcc script.
+ 
+ if [ x$1 = x--make-linker-script ]
+ then
+ 	program=$2
+ 	linker=./link-$program
+ 	echo "Building $program with llvm-native-gcc"
+ 	rm -f $program
+ 	gmake -s $program CC=llvm-native-gcc
+ 	echo "Erasing $program and re-linking it" 
+ 	rm -f $program
+ 	echo "rm -f $program" > $linker
+ 	gmake -n $program >> $linker
+ 	chmod 755 $linker
+ 	echo "Linker script created in $linker; testing it out"
+ 	output=`./$linker 2>&1`
+ 	case "$output" in
+ 		*undefined*reference*__main*) 
+ 			echo "$program appears to need a dummy __main function; adding one"
+ 			echo "void __main () { }" > __main.c
+ 			gcc -c __main.c
+ 			echo "Done; rebuilding $linker"
+ 			echo "rm -f $program" > $linker
+ 			gmake -n $program 2>&1 | sed '/gcc/s/$/__main.o/' >> $linker
+ 			./$linker > /dev/null 2>&1
+ 			if [ ! -x $program ]
+ 			then
+ 				echo "WARNING: linker script didn't work"
+ 			fi
+ 			;;
+ 		*)
+ 			if [ ! -x $program ]
+ 			then
+ 				echo "WARNING: linker script didn't work"
+ 			fi
+ 			;;
+ 	esac
+ 	echo "Linker script created in $linker; please check it manually"
+ 	exit 0
+ fi
+ 
+ checkfiles="$1"
+ program="$2"
+ linker="$3"
+ checker="$4"
+ 
+ usage () {
+ 	myname=`basename $0`
+ 	echo "$myname --make-linker-script PROGRAM"
+ 	echo "$myname OBJECTS-FILE PROGRAM LINKER CHECKER"
+ 	echo ""
+ 	echo "OBJECTS-FILE is a text file containing the names of all the .o files"
+ 	echo "PROGRAM is the name of the executable under test"
+ 	echo "(there must also exist a Makefile in the current directory which
+ 	echo "has PROGRAM as a target)"
+ 	echo "LINKER is the script that builds PROGRAM; try --make-linker-script" 
+ 	echo "to automatically generate it"
+ 	echo "CHECKER is the script that exits 0 if PROGRAM is ok, 1 if it is not OK"
+ 	echo "(LINKER and CHECKER must be in your PATH, or you should specify ./)"
+ 	echo ""
+ 	echo "Bugs to <gaeke at uiuc.edu>."
+ 	exit 1
+ }
+ 
+ if [ x$1 = x--help ]
+ then
+ 	usage
+ fi
+ 
+ if [ -z "$checkfiles" ]
+ then
+ 	echo "ERROR: Must specify name of file w/ list of objects as 1st arg."
+ 	echo "(got \"$checkfiles\")"
+ 	usage
+ fi
+ if [ ! -f "$checkfiles" ]
+ then
+ 	echo "ERROR: $checkfiles not found"
+ 	usage
+ fi
+ if [ -z "$program" ]
+ then
+ 	echo "ERROR: Must specify name of program as 2nd arg."
+ 	usage
+ fi
+ if [ -z "$linker" ]
+ then
+ 	echo "ERROR: Must specify name of link script as 3rd arg."
+ 	usage
+ fi
+ if [ ! -x "$linker" ]
+ then
+ 	echo "ERROR: $linker not found or not executable"
+ 	echo "You may wish to try: $0 --make-linker-script $program"
+ 	usage
+ fi
+ if [ -z "$checker" ]
+ then
+ 	echo "ERROR: Must specify name of $program check script as 3rd arg."
+ 	usage
+ fi
+ if [ ! -x "$checker" ]
+ then
+ 	echo "ERROR: $checker not found or not executable"
+ 	usage
+ fi
+ 
+ files=`cat $checkfiles`
+ echo "Recompiling everything with llvm-native-gcc"
+ for f in $files
+ do
+ 	rm -f $f && gmake $f CC=llvm-native-gcc
+ done
+ if $checker
+ then
+ 	echo "Sorry, I can't help you, $program is OK when compiled with llvm-native-gcc"
+ 	exit 1
+ fi
+ for f in $files
+ do
+ 	echo Trying to compile $f with native gcc and rebuild $program
+ 	mv ${f} ${f}__OLD__
+ 	gmake ${f} CC=gcc > /dev/null 2>&1
+ 	$linker
+ 	echo Checking validity of new $program
+ 	if $checker
+ 	then
+ 		echo Program is OK
+ 		okfiles="$okfiles $f"
+ 	else
+ 		echo Program is not OK
+ 		notokfiles="$notokfiles $f"
+ 	fi
+ 	mv ${f}__OLD__ ${f}
+ done
+ echo ""
+ echo "Program is OK when these files are recompiled with native gcc: "
+ echo "$okfiles"
+ echo ""
+ echo "Program is not OK when these files are recompiled with native gcc: "
+ echo "$notokfiles"
+ echo ""
+ exit 0





More information about the llvm-commits mailing list