From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29597 invoked by alias); 11 Feb 2008 08:01:40 -0000 Received: (qmail 29581 invoked by uid 22791); 11 Feb 2008 08:01:37 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate7.de.ibm.com (HELO mtagate7.de.ibm.com) (195.212.29.156) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 11 Feb 2008 08:00:58 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate7.de.ibm.com (8.13.8/8.13.8) with ESMTP id m1B80tfU286652 for ; Mon, 11 Feb 2008 08:00:55 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m1B80teV1822844 for ; Mon, 11 Feb 2008 09:00:55 +0100 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m1B80sgn029975 for ; Mon, 11 Feb 2008 09:00:54 +0100 Received: from bbkeks.de.ibm.com (dyn-9-152-248-39.boeblingen.de.ibm.com [9.152.248.39]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m1B80qfE029941 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 11 Feb 2008 09:00:54 +0100 Message-ID: <47B00041.2030800@de.ibm.com> Date: Mon, 11 Feb 2008 08:01:00 -0000 From: Markus Deuling User-Agent: Thunderbird 2.0.0.9 (X11/20071031) MIME-Version: 1.0 To: GDB Patches CC: Eli Zaretskii , Daniel Jacobowitz , Ulrich Weigand , Pierre Muller Subject: [Patch]: Build script gdb_buildall.sh Content-Type: multipart/mixed; boundary="------------020404050504080208010604" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-02/txt/msg00169.txt.bz2 This is a multi-part message in MIME format. --------------020404050504080208010604 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Content-length: 504 Hi, this patch adds documentation to this patch: http://sourceware.org/ml/gdb-patches/2008-01/msg00671.html. ChangeLog: Add script to build and test GDB using enable-targets=all. * gdb_buildall.sh: New file. ChangeLog Doc: * gdbint.texinfo (Build Script): New section. Mention new build script gdb_buildall.sh. Eli, is the documentation ok? I added a section to "Hints" in gdbint.texinfo. Ok to commit? -- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com --------------020404050504080208010604 Content-Type: text/plain; name="diff-all-build" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff-all-build" Content-length: 7154 diff -urpN src/gdb/gdb_buildall.sh dev/gdb/gdb_buildall.sh --- src/gdb/gdb_buildall.sh 1970-01-01 01:00:00.000000000 +0100 +++ dev/gdb/gdb_buildall.sh 2008-01-30 06:46:43.000000000 +0100 @@ -0,0 +1,268 @@ +#!/bin/sh + +# Build script to build GDB with all targets enabled. + +# Copyright (C) 2008 Free Software Foundation, Inc. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Make certain that the script is not running in an internationalized +# environment. The script is grepping for GDB's output. + +# Contributed by Markus Deuling . +# Based on gdb_mbuild.sh from Richard Earnshaw. + + +LANG=c ; export LANG +LC_ALL=c ; export LC_ALL + +# Prints a usage message. +usage() +{ + cat < ... ] + +Options: + + --bfd64 Enable 64-bit BFD. + --clean Delete build directory after check. + -e Regular expression for selecting the targets to build. + --force Force rebuild. + -j Run in parallel. Passed to make. + On a single cpu machine, 2 is recommended. + Arguments: + Source code directory. + Build directory. + + Environment variables examined (with default if not defined): + MAKE (make)" +EOF + exit 1 +} + +### Command line options. +makejobs= +force=false +targexp="" +bfd_flag="" +clean=false +while test $# -gt 0 +do + case "$1" in + -j ) + # Number of parallel make jobs. + shift + test $# -ge 1 || usage + makejobs="-j $1" + ;; + --clean ) + # Shall the build directory be deleted after processing? + clean=true + ;; + -e ) + # A regular expression for selecting targets + shift + test $# -ge 1 || usage + targexp="${targexp} -e ${1}" + ;; + --force ) + # Force a rebuild + force=true ; + ;; + --bfd64) + # Enable 64-bit BFD + bfd_flag="--enable-64-bit-bfd" + ;; + -* ) usage ;; + *) break ;; + esac + shift +done + +if test $# -ne 2 +then + usage +fi + +### Environment. + +# Convert these to absolute directory paths. +srcdir=`cd $1 && /bin/pwd` || exit 1 +builddir=`cd $2 && /bin/pwd` || exit 1 +# Version of make to use +make=${MAKE:-make} +MAKE=${make} +export MAKE +# We dont want GDB do dump cores. +ulimit -c 0 + +# Just make sure we're in the right directory. +maintainers=${srcdir}/gdb/MAINTAINERS +if [ ! -r ${maintainers} ] +then + echo Maintainers file ${maintainers} not found + exit 1 +fi + + +# Build GDB with all targets enabled. +echo "Starting gdb_buildall.sh ..." + +trap "exit 1" 1 2 15 +dir=${builddir}/ALL + +# Should a scratch rebuild be forced, for perhaps the entire build be skipped? +if ${force} +then + echo ... forcing rebuild + rm -rf ${dir} +fi + +# Did the previous configure attempt fail? If it did restart from scratch +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 + +# Create build directory. +mkdir -p ${dir} +cd ${dir} || exit 1 + +# Configure GDB. +if test ! -r Makefile +then + # Default SIMOPTS to GDBOPTS. + test -z "${simopts}" && simopts="${gdbopts}" + + # The config options. + __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 + + # Without Makefile GDB won't build. + 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 + +# Build GDB, if not built. +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 the build fails, exit. + 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 + + +# Retrieve a list of settable architectures by invoking "set architecture" +# without parameters. +cat < 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 + +# Test all architectures available in ALLTARG +echo "maint print architecture for" +echo "$alltarg" | while read target +do + cat < 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 + # Check GDBs results + 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 + + # Create a sed script that cleans up the output from GDB. + rm -f mbuild.sed + # Rules to replace <0xNNNN> with the corresponding function's name. + 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 + # Rules to strip the leading paths off of file names. + echo 's/"\/.*\/gdb\//"gdb\//g' >> mbuild.sed + # Run the script. + sed -f mbuild.sed $log_file > Mbuild.log + + mv Mbuild.log ${builddir}/$log_file + rm -rf $log_file x mbuild.sed +done +echo "done." + +# Clean up build directory if necessary. +if ${clean} +then + echo "cleanning up $dir" + rm -rf ${dir} +fi + +exit 0 --------------020404050504080208010604 Content-Type: text/plain; name="diff-DOC-build-all" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff-DOC-build-all" Content-length: 935 diff -urpN src/gdb/doc/gdbint.texinfo dev/gdb/doc/gdbint.texinfo --- src/gdb/doc/gdbint.texinfo 2008-01-29 09:48:39.000000000 +0100 +++ dev/gdb/doc/gdbint.texinfo 2008-02-11 08:19:44.000000000 +0100 @@ -7058,6 +7058,20 @@ is so old that it has never been convert @end table +@section Build Script + +@cindex build script + +The script @code{gdb_buildall.sh} builds GDB with flag +@code{--enable-targets=all} set. This builds GDB with all supported targets +activated. This helps testing GDB when doing changes that affect more than one +architecture and is much faster than using @code{gdb_mbuild.sh}. + +After building GDB the scripts checks which architectures are supported and +then switches the current architecture to each of those to get information about +the architecture. The test results are stored in log files in the directory +the script was called from. + @include observer.texi @raisesections @include fdl.texi --------------020404050504080208010604--