| 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. |
| * 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. |