#!/bin/sh set -e #--------------------------------------------------------------------- # This quick and dirty script assists in updating the C++ demangler # machinery in coregrind/m_demangle. # The script will check out # - old and new revisions of the C++ demangler related files from GCC's trunk # - m_demangle from valgrind's trunk. # It will assemble # - a patch file with local changes that were applied to the C++ # demangler to make it work within valgrind # - a directory new_m_demangle whose contents should be copied to # m_demangle in valgrind trunk # The patch will *not* be applied automatically. #--------------------------------------------------------------------- # You need to modify these revision numbers for your update. old_gcc_revision=r240068 # the revision of the previous update new_gcc_revision=r246502 # the revision for this update # Unless the organization of demangler related files has changed, no # changes below this line should be necessary. # Setup a temp directory DIR=/tmp/demangle rm -rf $DIR mkdir -p $DIR cd $DIR echo "Updating the demangler in $DIR" # 1) Check out files from old GCC revision echo "Checking out GCC files @ $old_gcc_revision" mkdir gcc-$old_gcc_revision cd gcc-$old_gcc_revision svn co -$old_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/libiberty libiberty > /dev/null svn co -$old_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/include include > /dev/null rm -rf libiberty/.svn rm -rf include/.svn cd .. # 2) Assemble the ones we need in $DIR/$old_gcc_revision mkdir $old_gcc_revision cd $old_gcc_revision cp ../gcc-$old_gcc_revision/include/ansidecl.h . cp ../gcc-$old_gcc_revision/include/demangle.h . cp ../gcc-$old_gcc_revision/include/dyn-string.h . cp ../gcc-$old_gcc_revision/include/safe-ctype.h . cp ../gcc-$old_gcc_revision/libiberty/cp-demangle.c . cp ../gcc-$old_gcc_revision/libiberty/cp-demangle.h . cp ../gcc-$old_gcc_revision/libiberty/cplus-dem.c . cp ../gcc-$old_gcc_revision/libiberty/dyn-string.c . cp ../gcc-$old_gcc_revision/libiberty/d-demangle.c . cp ../gcc-$old_gcc_revision/libiberty/rust-demangle.c . cp ../gcc-$old_gcc_revision/libiberty/safe-ctype.c . cd .. # 3) Check out files from new GCC revision echo "Checking out GCC files @ $new_gcc_revision" mkdir gcc-$new_gcc_revision cd gcc-$new_gcc_revision svn co -$new_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/libiberty libiberty > /dev/null svn co -$new_gcc_revision svn://gcc.gnu.org/svn/gcc/trunk/include include > /dev/null rm -rf libiberty/.svn rm -rf include/.svn cd .. # 4) Assemble the ones we need in $DIR/$new_gcc_revision mkdir $new_gcc_revision cd $new_gcc_revision cp ../gcc-$new_gcc_revision/include/ansidecl.h . cp ../gcc-$new_gcc_revision/include/demangle.h . cp ../gcc-$new_gcc_revision/include/dyn-string.h . cp ../gcc-$new_gcc_revision/include/safe-ctype.h . cp ../gcc-$new_gcc_revision/libiberty/cp-demangle.c . cp ../gcc-$new_gcc_revision/libiberty/cp-demangle.h . cp ../gcc-$new_gcc_revision/libiberty/cplus-dem.c . cp ../gcc-$new_gcc_revision/libiberty/dyn-string.c . cp ../gcc-$new_gcc_revision/libiberty/d-demangle.c . cp ../gcc-$new_gcc_revision/libiberty/rust-demangle.c . cp ../gcc-$new_gcc_revision/libiberty/safe-ctype.c . cd .. # 5) Check out valgrind coregrind/m_demangle into old_m_demangle echo "Checking out coregrind/m_demangle" svn co svn://svn.valgrind.org/valgrind/trunk/coregrind/m_demangle old_m_demangle > /dev/null rm -rf old_m_demangle/.svn # 6) Create new_m_demangle cp -rp old_m_demangle new_m_demangle cp -rp $new_gcc_revision/*.[ch] new_m_demangle # 7) Compare files from previous GCC revision against old_m_demangle # (This gets us the changes we made to the demangler). echo "Creating patch" set +e diff -r -u $old_gcc_revision old_m_demangle > our-changes echo "Patch file 'our-changes' created" # 7) See how the patch would apply echo "Attempting to apply the patch (but not actualy doing it)." cd new_m_demangle patch --dry -p1 < ../our-changes