5 #---------------------------------------------------------------------
6 # This quick and dirty script assists in updating the C++ demangler
7 # machinery in coregrind/m_demangle.
8 # The script will check out
9 # - old and new revisions of the C++ demangler related files from GCC's trunk
10 # - m_demangle from valgrind's trunk.
12 # - a patch file with local changes that were applied to the C++
13 # demangler to make it work within valgrind
14 # - a directory new_m_demangle whose contents should be copied to
15 # m_demangle in valgrind trunk
16 # The patch will *not* be applied automatically.
17 #---------------------------------------------------------------------
19 # You need to modify these revision numbers for your update.
20 old_gcc_revision
=1719fa40c4ee4def60a2ce2f27e17f8168cf28ba
# the revision of the previous update
21 new_gcc_revision
=ca2f7c84927f85b95f0f48f82b93f1460c372db4
# the revision for this update
23 # Unless the organization of demangler related files has changed, no
24 # changes below this line should be necessary.
26 # Setup a temp directory
34 echo "Updating the demangler in $DIR"
36 # 1) Make a shallow clone of the GCC repo containing only the 2 commits we need
40 git remote add origin https
://gcc.gnu.org
/git
/gcc.git
41 git config core.sparsecheckout true
42 echo "libiberty/*" > .git
/info
/sparse-checkout
43 echo "include/*" >> .git
/info
/sparse-checkout
44 echo git fetch
--depth 1 origin
$old_gcc_revision $new_gcc_revision
45 git fetch
--depth 1 origin
$old_gcc_revision $new_gcc_revision \
46 || git fetch origin
# In case the above fails we will have to fetch all
47 git checkout
$old_gcc_revision
50 # 2) Check out files from old GCC revision
51 echo "Checking out GCC files @ $old_gcc_revision"
53 # 3) Assemble the ones we need in $DIR/$old_gcc_revision
54 mkdir
$old_gcc_revision
56 cp ..
/gcc
/include
/ansidecl.h .
57 cp ..
/gcc
/include
/demangle.h .
58 cp ..
/gcc
/include
/dyn-string.h .
59 cp ..
/gcc
/include
/safe-ctype.h .
60 cp ..
/gcc
/libiberty
/cp-demangle.c .
61 cp ..
/gcc
/libiberty
/cp-demangle.h .
62 cp ..
/gcc
/libiberty
/cplus-dem.c .
63 cp ..
/gcc
/libiberty
/dyn-string.c .
64 cp ..
/gcc
/libiberty
/d-demangle.c .
65 cp ..
/gcc
/libiberty
/rust-demangle.c .
66 cp ..
/gcc
/libiberty
/safe-ctype.c .
69 # 4) Check out files from new GCC revision
70 echo "Checking out GCC files @ $new_gcc_revision"
72 git checkout
$new_gcc_revision
75 # 5) Assemble the ones we need in $DIR/$new_gcc_revision
76 mkdir
$new_gcc_revision
78 cp ..
/gcc
/include
/ansidecl.h .
79 cp ..
/gcc
/include
/demangle.h .
80 cp ..
/gcc
/include
/dyn-string.h .
81 cp ..
/gcc
/include
/safe-ctype.h .
82 cp ..
/gcc
/libiberty
/cp-demangle.c .
83 cp ..
/gcc
/libiberty
/cp-demangle.h .
84 cp ..
/gcc
/libiberty
/cplus-dem.c .
85 cp ..
/gcc
/libiberty
/dyn-string.c .
86 cp ..
/gcc
/libiberty
/d-demangle.c .
87 cp ..
/gcc
/libiberty
/rust-demangle.c .
88 cp ..
/gcc
/libiberty
/safe-ctype.c .
91 # 6) Sparse check out valgrind coregrind/m_demangle into old_m_demangle
92 echo "Checking out coregrind/m_demangle"
93 mkdir valgrind-sparse-clone
94 cd valgrind-sparse-clone
96 git remote add origin
-f https
://sourceware.org
/git
/valgrind.git
/
97 git config core.sparsecheckout true
98 echo "coregrind/m_demangle/*" > .git
/info
/sparse-checkout
99 git pull origin master
101 mv valgrind-sparse-clone
/coregrind
/m_demangle old_m_demangle
102 rm -rf valgrind-sparse-clone
104 # 7) Create new_m_demangle
105 cp -rp old_m_demangle new_m_demangle
106 cp -rp $new_gcc_revision/*.
[ch
] new_m_demangle
108 # 8) Compare files from previous GCC revision against old_m_demangle
109 # (This gets us the changes we made to the demangler).
110 echo "Creating patch"
112 diff -r -u $old_gcc_revision old_m_demangle
> our-changes
113 echo "Patch file 'our-changes' created"
115 # 9) See how the patch would apply
116 echo "Attempting to apply the patch (but not actualy doing it)."
118 patch --dry -p1 < ..
/our-changes