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
-s $program CC
=llvm-native-gcc
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
"
116 rm -f $f && gmake $f CC=llvm-native-gcc
120 echo "Sorry
, I can
't help you, $program is OK when compiled with llvm-native-gcc"
125 echo Trying to compile $f with native gcc and rebuild $program
127 gmake ${f} CC=gcc > /dev/null 2>&1
129 echo Checking validity of new $program
133 okfiles="$okfiles $f"
135 echo Program is not OK
136 notokfiles="$notokfiles $f"
141 echo "Program is OK when these files are recompiled with native gcc: "
144 echo "Program is not OK when these files are recompiled with native gcc: "