gdb/gdb_buildall.sh - gdb
Functions defined
Source code
- LANG=c ; export LANG
- LC_ALL=c ; export LC_ALL
- usage()
- {
- cat <<EOF
- Usage: gdb_buildall.sh [ <options> ... ] <srcdir> <builddir>
- Options:
- --bfd64 Enable 64-bit BFD.
- --clean Delete build directory after check.
- -e <regexp> Regular expression for selecting the targets to build.
- --force Force rebuild.
- -j <makejobs> Run <makejobs> in parallel. Passed to make.
- On a single cpu machine, 2 is recommended.
- Arguments:
- <srcdir> Source code directory.
- <builddir> Build directory.
- Environment variables examined (with default if not defined):
- MAKE (make)"
- EOF
- exit 1
- }
- makejobs=
- force=false
- targexp=""
- bfd_flag=""
- clean=false
- while test $# -gt 0
- do
- case "$1" in
- -j )
-
- shift
- test $# -ge 1 || usage
- makejobs="-j $1"
- ;;
- --clean )
-
- clean=true
- ;;
- -e )
-
- shift
- test $# -ge 1 || usage
- targexp="${targexp} -e ${1}"
- ;;
- --force )
-
- force=true ;
- ;;
- --bfd64)
-
- bfd_flag="--enable-64-bit-bfd"
- ;;
- -* ) usage ;;
- *) break ;;
- esac
- shift
- done
- if test $# -ne 2
- then
- usage
- fi
- srcdir=`cd $1 && /bin/pwd` || exit 1
- builddir=`cd $2 && /bin/pwd` || exit 1
- make=${MAKE:-make}
- MAKE=${make}
- export MAKE
- ulimit -c 0
- maintainers=${srcdir}/gdb/MAINTAINERS
- if [ ! -r ${maintainers} ]
- then
- echo Maintainers file ${maintainers} not found
- exit 1
- fi
- echo "Starting gdb_buildall.sh ..."
- trap "exit 1" 1 2 15
- dir=${builddir}/ALL
- if ${force}
- then
- echo ... forcing rebuild
- rm -rf ${dir}
- fi
- if test -d ${dir} -a ! -r ${dir}/Makefile
- then
- echo ... removing partially configured
- rm -rf ${dir}
- if test -d ${dir}
- then
- echo "... ERROR: Unable to remove directory ${dir}"
- exit 1
- fi
- fi
- mkdir -p ${dir}
- cd ${dir} || exit 1
- if test ! -r Makefile
- then
-
- test -z "${simopts}" && simopts="${gdbopts}"
-
- __build="--enable-targets=all"
- __enable_gdb_build_warnings=`test -z "${gdbopts}" \
- || echo "--enable-gdb-build-warnings=${gdbopts}"`
- __enable_sim_build_warnings=`test -z "${simopts}" \
- || echo "--enable-sim-build-warnings=${simopts}"`
- __configure="${srcdir}/configure \
- ${__build} ${bfd_flag}\
- ${__enable_gdb_build_warnings} \
- ${__enable_sim_build_warnings}"
- echo ... ${__configure}
- trap "echo Removing partially configured ${dir} directory ...; rm -rf ${dir}; exit 1" 1 2 15
- ${__configure} > Config.log 2>&1
- trap "exit 1" 1 2 15
-
- if test ! -r Makefile
- then
- echo "... CONFIG ERROR: GDB couldn't be configured " | tee -a Config.log
- echo "... CONFIG ERROR: see Config.log for details "
- exit 1
- fi
- fi
- gdb_bin="gdb/gdb"
- if test ! -x gdb/gdb -a ! -x gdb/gdb.exe
- then
- echo ... ${make} ${makejobs}
- ( ${make} ${makejobs} all-gdb || rm -f gdb/gdb gdb/gdb.exe
- ) > Build.log 2>&1
-
- if test ! -x gdb/gdb -a ! -x gdb/gdb.exe
- then
- echo "... BUILD ERROR: GDB couldn't be compiled " | tee -a Build.log
- echo "... BUILD ERROR: see Build.log for details "
- exit 1
- fi
- if test -x gdb/gdb.exe
- then
- gdb_bin="gdb/gdb.exe"
- fi
- fi
- cat <<EOF > arch
- set architecture
- quit
- EOF
- ./gdb/gdb --batch -nx -x arch 2>&1 | cat > gdb_archs
- tail -n 1 gdb_archs | sed 's/auto./\n/g' | sed 's/,/\n/g' | sed 's/Requires an argument. Valid arguments are/\n/g' | sed '/^[ ]*$/d' > arch
- mv arch gdb_archs
- if test "${targexp}" != ""
- then
- alltarg=`cat gdb_archs | grep ${targexp}`
- else
- alltarg=`cat gdb_archs`
- fi
- rm -f gdb_archs
- echo "maint print architecture for"
- echo "$alltarg" | while read target
- do
- cat <<EOF > x
- set architecture ${target}
- maint print architecture
- quit
- EOF
- log_file=$target.log
- log_file=${log_file//:/_}
- echo -n "... ${target}"
- ./gdb/gdb -batch -nx -x x 2>&1 | cat > $log_file
-
- if test ! -s $log_file
- then
- echo " ERR: gdb printed no output" | tee -a $log_file
- elif test `grep -o internal-error $log_file | tail -n 1`
- then
- echo " ERR: gdb panic" | tee -a $log_file
- else
- echo " OK"
- fi
-
- rm -f mbuild.sed
-
- sed -n -e '/<0x0*>/d' -e 's/^.*<0x\([0-9a-f]*\)>.*$/0x\1/p' $log_file \
- | sort -u \
- | while read addr
- do
- func="`addr2line -f -e ./$gdb_bin -s ${addr} | sed -n -e 1p`"
- echo "s/<${addr}>/<${func}>/g"
- done >> mbuild.sed
-
- echo 's/"\/.*\/gdb\//"gdb\//g' >> mbuild.sed
-
- sed -f mbuild.sed $log_file > Mbuild.log
- mv Mbuild.log ${builddir}/$log_file
- rm -rf $log_file x mbuild.sed
- done
- echo "done."
- if ${clean}
- then
- echo "cleanning up $dir"
- rm -rf ${dir}
- fi
- exit 0