In general, merging process should not be very difficult, but we need to
track various ABI changes and GCC-specific patches carefully.  Here is a
general list of actions required to perform the merge:

* Checkout recent GCC tree.
* Run merge.sh script from libsanitizer directory.  The script accepts one
  argument that is control version system (svn or git).
* Modify Makefile.am files into asan/tsan/lsan/ubsan/sanitizer_common/interception
  directories if needed.  In particular, you may need to add new source files
  and remove old ones in source files list, add new flags to {C, CXX}FLAGS if
  needed and update DEFS with new defined variables.  You can find these changes
  in corresponding CMakeLists.txt and config-ix.cmake files from compiler-rt source
  directory.
* Apply all needed GCC-specific patches to libsanitizer (note that some of
  them might be already included to upstream).  The list of these patches is stored
  into LOCAL_PATCHES file.
* Apply all necessary compiler changes.  Be especially careful here, you must
  not break ABI between compiler and library.  You can reveal these changes by
  inspecting the history of AddressSanitizer.cpp and ThreadSanitizer.cpp files
  from LLVM source tree.
* Update ASan testsuite with corresponding tests from lib/asan/tests directory.
  Not all tests can be migrated easily, so you don't need them all to be adapted.
* Modify configure.ac file if needed (e.g. if you need to add link against new
  library for sanitizer libs).
* Add new target platforms in configure.tgt script if needed.
* Bump SONAME for sanitizer libraries in asan/tsan/ubsan libtool-version files
  if ABI has changed.
* Regenerate configure script and all Makefiles by autoreconf.  You should use
  exactly the same autoconf and automake versions as for other GCC directories (current
  versions are written in Makefile.in and configure files).
* Run regression testing on at least three platforms (e.g. x86-linux-gnu, x86_64-linux-gnu,
  aarch64-linux-gnu, arm-linux-gnueabi).
* Run {A, UB}San bootstrap on at least three platforms.
* Compare ABI of corresponding libclang_rt.asan and newly build libasan libraries.
  Similarly you can compare latest GCC release with the newly built libraries
  (libasan.so.*, libubsan.so.*, libtsan.so*).
  You can use a pretty good libabigail tool (https://sourceware.org/libabigail/index.html)
  to perform such a comparision.  Note, that the list of exported symbols may differ,
  e.g. because libasan currently does not include UBSan runtime.
* Split your changes into logical parts (e.g. raw merge, compiler changes, GCC-specific changes
  in libasan, configure/Makefile changes). The review process has O(N^2) complexity, so you
  would simplify and probably speed up the review process by doing this.
* Send your patches for review to GCC Patches Mailing List (gcc-patches@gcc.gnu.org).
* Update LOCAL_PATCHES file when you've committed the whole patch set with new revisions numbers.
