Using AddressSanitizer & ThreadSanitizer In GCC 4.8

Posted by Michael Larabel on November 30, 2012

While born originally at Google as projects for LLVM, AddressSanitizer and ThreadSanitizer have been ported to GCC and will be part of the forthcoming GCC 4.8 compiler release. Back at Google, they're onto developing MemorySanitizer for LLVM.

AddressSanitizer (ASAN) was developed at Google to be a fast memory error detector. ASAN is capable of finding use-after-free and heap, stack, and global buffer overflow bugs within C and C++ programs. AddressSanitizer was merged into LLVM 3.1 earlier this year and running an ASAN-enabled program leads to only about a 2x slowdown for developers wishing to easily spot these memory errors within their programs. The GCC port of ASAN is currently supported on IA-32, x86-64, and x32 architectures under Linux.

ThreadSanitizer (TSAN) is another newer Google project for detecting data race within C/C++ programs. ThreadSanitizier is based upon the popular Valgrind program and is similar to Helgrind. The slowdown of running a ThreadSanitizier-enabled LLVM program is around 5~15x slower and also requires a run-time library aside from a supported compiler. Within LLVM, ThreadSanitizer is much more primitive and in an alpha state compared to ASAN.

With GCC 4.8, both AddressSanitizer and ThreadSanitizer are available for detecting memory errors and data races, respectively. For tapping AddressSanitizer in GCC, the -fsanitize=address switch must be passed to GCC when building a program. The -fno-omit-frame-pointer switch can also be optionally passed for nicer stack-traces. If you wish to utilize ThreadSanitizer in GCC 4.8, the -fsanitize=thread switch must be thrown, but this port is only working on 64-bit Linux.

Meanwhile, still being developed at Google for LLVM (and presumably ported to GCC too) is MemorySanitizer. MemorySanitizer is intended to spot uninitialized memory reads and shares concepts with Valgrind and Memcheck but uses compile-time instrumentation within LLVM and 1:1 direct shadow memory mapping. MemorySanitizer promises to be much faster than Valgrind (2~3x vs. 20x) for spotting these uninitialized memory reads in C/C++ code-bases. For those interested in more details on MemorySanitizier (MSAN) there is a PDF poster from the talk given earlier this month at the LLVM Developers' Meeting.

Discuss this article in our forums, IRC channel, or email the author. You can also follow our content via RSS and on social networks like Facebook, Identi.ca, and Twitter (@Phoronix and @MichaelLarabel). Subscribe to Phoronix Premium to view our content without advertisements, view entire articles on a single page, and experience other benefits.
Latest Hardware Reviews
  1. Sumo Lounge Emperor
  2. Gallium3D Continues Improving OpenGL For Older Radeon GPUs
  3. 15-Way Open vs. Closed Source NVIDIA/AMD Linux GPU Comparison
  4. Nouveau vs. NVIDIA Linux Comparison Shows Shortcomings
Latest Software Articles
  1. GCC 4.8.0 vs. LLVM Clang 3.3 Compiler Performance
  2. Intel Linux OpenGL Driver Leading Over Apple OS X
  3. The Cost Of Ubuntu Disk Encryption
  4. Btrfs vs. EXT4 vs. XFS vs. F2FS On Linux 3.10
Latest Linux News
  1. A New X.Org-Free Wayland LiveCD Released
  2. Unity 8, Mir Made Progress This Week On Features
  3. LLVM Clang 3.3 RC2 Is Ready For Testing
  4. AMD RadeonSI Gallium3D Begins Simple CL Demos
  5. Intel Shows Off GNOME3-Based Tizen Shell
  6. Linux Desktop Security Could Be A Whole Lot Better
  7. KDE 4.11 Will Be The Last Major KDE4 Workspaces Feature Release
  8. New NVIDIA Linux Driver Supports The GeForce GTX 780
  9. Chrome 28 To Offer More Speed Improvements
  10. Digia Announces "Boot To Qt" Project
  11. X.Org Libraries Hit By Round Of Security Issues
Latest Forum Talk
  1. AMD RadeonSI Gallium3D Begins Simple CL Demos
  2. A New X.Org-Free Wayland LiveCD Released
  3. X.Org Libraries Hit By Round Of Security Issues
  4. Wayland's Weston Gets Output Scaling Support
  5. GCC 4.8.0 vs. LLVM Clang 3.3 Compiler Performance
  6. Linux's "Ondemand" Governor Is No...
  1. Computers
  2. Display Drivers
  3. Graphics Cards
  4. Motherboards
  5. Peripherals
  6. Processors
  7. Software
  8. Operating Systems
  9. All Articles
  1. Linux Benchmarking
  2. OpenBenchmarking.org
  3. Phoronix Test Suite