mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			45 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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.
 |