3
# Used to narrow down a miscompilation to one .o file from a list. Please read
4
# the usage procedure, below, for command-line syntax (or run it with --help).
5
# This script depends on the llvm-native-gcc script.
7
if [ x$1 = x--make-linker-script ]
10
linker=./link-$program
11
echo "Building $program with llvm-native-gcc"
13
gmake -e $program CC=llvm-native-gcc CXX=llvm-native-gxx
14
echo "Erasing $program and re-linking it"
16
echo "rm -f $program" > $linker
17
gmake -n $program >> $linker
19
echo "Linker script created in $linker; testing it out"
20
output=`./$linker 2>&1`
22
*undefined*reference*__main*)
23
echo "$program appears to need a dummy __main function; adding one"
24
echo "void __main () { }" > __main.c
26
echo "Done; rebuilding $linker"
27
echo "rm -f $program" > $linker
28
gmake -n $program 2>&1 | sed '/gcc/s/$/__main.o/' >> $linker
29
./$linker > /dev/null 2>&1
32
echo "WARNING: linker script didn't work"
38
echo "WARNING: linker script didn't work"
42
echo "Linker script created in $linker; please check it manually"
53
echo "$myname --make-linker-script PROGRAM"
54
echo "$myname OBJECTS-FILE PROGRAM LINKER CHECKER"
56
echo "OBJECTS-FILE is a text file containing the names of all the .o files"
57
echo "PROGRAM is the name of the executable under test"
58
echo "(there must also exist a Makefile in the current directory which"
59
echo "has PROGRAM as a target)"
60
echo "LINKER is the script that builds PROGRAM; try --make-linker-script"
61
echo "to automatically generate it"
62
echo "CHECKER is the script that exits 0 if PROGRAM is ok, 1 if it is not OK"
63
echo "(LINKER and CHECKER must be in your PATH, or you should specify ./)"
65
echo "Bugs to <gaeke@uiuc.edu>."
74
if [ -z "$checkfiles" ]
76
echo "ERROR: Must specify name of file w/ list of objects as 1st arg."
77
echo "(got \"$checkfiles\")"
80
if [ ! -f "$checkfiles" ]
82
echo "ERROR: $checkfiles not found"
87
echo "ERROR: Must specify name of program as 2nd arg."
92
echo "ERROR: Must specify name of link script as 3rd arg."
97
echo "ERROR: $linker not found or not executable"
98
echo "You may wish to try: $0 --make-linker-script $program"
103
echo "ERROR: Must specify name of $program check script as 3rd arg."
106
if [ ! -x "$checker" ]
108
echo "ERROR: $checker not found or not executable"
112
files=`cat $checkfiles`
113
echo "Recompiling everything with llvm-native-gcc"
117
gmake $f CC=llvm-native-gcc CXX=llvm-native-gxx
123
echo "Sorry, I can't help you, $program is OK when compiled with llvm-native-gcc"
128
echo Trying to compile $f with native gcc and rebuild $program
130
gmake ${f} CC=gcc > /dev/null 2>&1
132
echo Checking validity of new $program
136
okfiles="$okfiles $f"
138
echo Program is not OK
139
notokfiles="$notokfiles $f"
144
echo "Program is OK when these files are recompiled with native gcc: "
147
echo "Program is not OK when these files are recompiled with native gcc: "