diff options
Diffstat (limited to 'gdb/config.gdb')
-rwxr-xr-x | gdb/config.gdb | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/gdb/config.gdb b/gdb/config.gdb new file mode 100755 index 0000000..917d94e --- /dev/null +++ b/gdb/config.gdb @@ -0,0 +1,185 @@ +#!/bin/sh + +# Shell script to do machine-dependent things in +# preparation for compiling gdb. +# +# Usage: config.gdb machine +# +# If config.gdb succeeds, it leaves its status in config.status. +# If config.gdb fails after disturbing the status quo, +# config.status is removed. + +progname=$0 +host= +target= +list_hosts= +list_targets= +srcdir= + +for arg in $*; do + case $arg in + -srcdir=*|+srcdir=*) + srcdir=`echo $arg | sed 's/[+-]srcdir=//'` + ;; + -host|+host) + list_hosts=true + ;; + -target|+target) + list_targets=true + ;; + -host=*|+host=*) + if [ "$host" = "" ]; then + host=`echo $arg | sed 's/[+-]host=//'` + else + echo Error: Attempt to specify host machine twice + bad=true + fi + ;; + -target=*|+target=*) + if [ "$target" = "" ]; then + target=`echo $arg | sed 's/[+-]target=//'` + else + echo Error: Attempt to specify target machine twice + bad=true + fi + ;; + *) + if [ "$host" = "" ]; then + host=$arg + else + if [ "$target" = "" ]; then + target=$arg + else + echo Error: More arguments than host and target machine names + bad=true + fi + fi + ;; + esac +done + +if [ "$target" = "" ]; then target=$host; fi +if [ "$host" = "" ]; then bad=true; fi + +# Find the source files, if location was not specified +if [ "$srcdir" = "" ]; then + srcdirdefaulted=true + srcdir=. + if [ ! -r main.c ]; then + srcdir=.. + fi +fi +if [ ! -r ${srcdir}/main.c ]; then + if [ "$srcdirdefaulted" != "true" ]; then + echo "$progname: Can't find debugger sources in \`${srcdir}'." 1>&2 + else + echo "$progname: Can't find debugger sources in \`.' or \`..'." 1>&2 + fi + exit 1 +fi + +if [ "$list_hosts" = "true" ]; then + cd $srcdir/xconfig + for i in * ; do +# The {} in ${i} are required or else /bin/sh in sony newsos 3.2 removes +# the quote after it. + awk <$i "NR == 1 { lastchar = substr(\"${i}\", length(\"${i}\"), 1) +if (lastchar != \"~\" && lastchar != \"#\") \ +printf \"%-12s %s\n\", \"${i}\", substr(\$0,2) }" + done +fi + +if [ "$list_targets" = "true" ]; then + cd $srcdir/tconfig + for i in * ; do + awk <$i "NR == 1 { lastchar = substr(\"${i}\", length(\"${i}\"), 1) +if (lastchar != \"~\" && lastchar != \"#\") \ +printf \"%-12s %s\n\", \"${i}\", substr(\$0,2) }" + done +fi + +if [ "$list_hosts" = "true" -o "$list_targets" = "true" ]; then + exit 0 +fi + +if [ "$host" != "" -a ! -f $srcdir/xconfig/$host ]; then + echo "No such host $host" + bad=true +fi + +if [ "$target" != "" -a ! -f $srcdir/tconfig/$target ]; then + echo "No such target $target" + bad=true +fi + +if [ "$bad" = "true" ] ; then + echo "Usage: " + echo " $progname [+srcdir=\`dir'] machine" + echo " For normal usage" + echo " $progname [+srcdir=\`dir'] \`host' \`target'" + echo " $progname [+srcdir=\`dir'] +host=\`host' +target=\`target'" + echo " If you are doing remote debugging between machines of two" + echo " different types (cross-debugging). \`host' is the type of" + echo " machine on which GDB will be running. \`target' is the" + echo " machine that the program you are debugging will be" + echo " running on." + echo " $progname +host" + echo " Print a list of valid host machine types." + echo " $progname +target" + echo " Print a list of valid target machine types." + echo + echo " +srcdir=\`dir' means that the sources are in \`dir'. For" + echo " example, \`cd /obj/hp300; config.gdb +srcdir=/src/gdb hp300'" + echo " If +srcdir is not specified, sources can either be in \`.'" + echo " or \`..'." + echo + + if [ -r config.status ] + then + cat config.status + fi + exit 1 +fi + +rm -f tm.h xm.h + +cat $srcdir/xconfig/$host $srcdir/tconfig/$target | awk '$1 == "#msg" { + print substr($0,6)}' +paramfile=${srcdir}/`awk ' + $1 == "TM_FILE=" { print $2 }' <$srcdir/tconfig/$target` +if [ "$paramfile" != "${srcdir}/" ] ; then + # Make a symlink if possible, otherwise try a hard link + ln -s $paramfile tm.h 2>/dev/null || ln $paramfile tm.h +fi + +paramfile=${srcdir}/`awk ' + $1 == "XM_FILE=" { print $2 }' <$srcdir/xconfig/$host` +if [ "$paramfile" != "${srcdir}/" ] ; then + # Make a symlink if possible, otherwise try a hard link + ln -s $paramfile xm.h 2>/dev/null || ln $paramfile xm.h +fi + +rm -f config.status + +case ${srcdir} in + .) + ;; + *) + echo "srcdir=${srcdir}" >./Makefile.srcdir + grep -s "source ${srcdir}/.gdbinit" .gdbinit 2>/dev/null || \ + echo "source ${srcdir}/.gdbinit" >> .gdbinit + if [ ! -d readline ]; then + mkdir readline + # This could be a symlink, but getting the name right (because + # srcdir can be either relative or absolute) would be hairy. + cp ${srcdir}/readline/Makefile readline + fi +esac + +make "srcdir=${srcdir}" \ + "M_MAKEFILE=$srcdir/tconfig/$target $srcdir/xconfig/$host" \ + -f $srcdir/Makefile.dist Makefile + +echo "GDB is now set up for host machine $host and target machine $target." \ + | tee config.status +exit 0 |