From e871fbb936d39edd8558e25169114820f1042ef1 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 10 May 2012 20:07:02 +0000 Subject: [PATCH] * cc-with-dwz.sh: New file. --- gdb/ChangeLog | 4 +++ gdb/cc-with-dwz.sh | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100755 gdb/cc-with-dwz.sh diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d3ec55a6ac6..31cf97ba77f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Tom Tromey + + * cc-with-dwz.sh: New file. + 2012-05-10 Tom Tromey * symtab.h (struct symtab) : New fields. diff --git a/gdb/cc-with-dwz.sh b/gdb/cc-with-dwz.sh new file mode 100755 index 00000000000..f66deb1d9d4 --- /dev/null +++ b/gdb/cc-with-dwz.sh @@ -0,0 +1,80 @@ +#! /bin/sh +# Wrapper around gcc to run 'dwz' when running the testsuite. + +# Copyright (C) 2010-2012 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 . + +# This program requires dwz in addition to gcc. +# +# Example usage: +# +# bash$ cd $objdir/gdb/testsuite +# bash$ runtest \ +# CC_FOR_TARGET="/bin/sh $srcdir/cc-with-dwz.sh gcc" \ +# CXX_FOR_TARGET="/bin/sh $srcdir/cc-with-dwz.sh g++" +# + +myname=cc-with-dwz.sh + +DWZ=${DWZ:-dwz} + +have_link=unknown +next_is_output_file=no +output_file=a.out + +for arg in "$@" +do + if [ "$next_is_output_file" = "yes" ] + then + output_file="$arg" + next_is_output_file=no + continue + fi + + # Poor man's gcc argument parser. + # We don't need to handle all arguments, we just need to know if we're + # doing a link and what the output file is. + # It's not perfect, but it seems to work well enough for the task at hand. + case "$arg" in + "-c") have_link=no ;; + "-E") have_link=no ;; + "-S") have_link=no ;; + "-o") next_is_output_file=yes ;; + esac +done + +if [ "$next_is_output_file" = "yes" ] +then + echo "$myname: Unable to find output file" >&2 + exit 1 +fi + +if [ "$have_link" = "no" ] +then + "$@" + exit $? +fi + +"$@" +rc=$? +[ $rc != 0 ] && exit $rc +if [ ! -f "$output_file" ] +then + echo "$myname: Internal error: $output_file missing." >&2 + exit 1 +fi + +$DWZ "$output_file" > /dev/null 2>&1 + +exit 0 -- 2.30.2