Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What to use instead of mudflap with gcc/llvm (for detecting memory access bugs)?

It seems that the -fmudflap feature was removed from GCC.

Thus my question: what to use instead of it for dynamically analyzing programs for out-of-bound read/writes, uninitialized reads and such issues?

(and perhaps as a side question: why was it removed?)

The approach of mudflap (instrumentalizing generated code inside the compiler) looks quite elegant.

Background

Other tools instrumentalize on a machine-code level (e.g. Purify), on a source-code level (e.g. Insure) or instrumentalize during the emulation of a CPU (e.g. Valgrind).

The mudflap approach has the potential to find errors which can't be detected by valgrind or purify (e.g. stack based array access errors). It is also more lightweight than other approaches.

I am searching for an open source solution.

like image 874
maxschlepzig Avatar asked Nov 14 '13 22:11

maxschlepzig


2 Answers

It looks like -fsanitize is a direct replacement of -fmudflap. To quote the GCC 4.8.5 man page:

-fsanitize=address
  Enable AddressSanitizer, a fast memory error detector.  Memory access
  instructions will be instrumented to detect out-of-bounds and use-after-
  free bugs.  See <http://code.google.com/p/address-sanitizer/> for more 
  details.

-fsanitize=thread
  Enable ThreadSanitizer, a fast data race detector.  Memory access
  instructions will be instrumented to detect data race bugs.  See
  <http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> for 
  more details.

It is also available as part of LLVM (>= 3.1).

like image 58
maxschlepzig Avatar answered Oct 22 '22 21:10

maxschlepzig


The sanitizers are also quite a bit more advanced in llvm than in gcc as the primary group contributes to llvm and then someone else ports it over to gcc.

http://llvm.org/devmtg/2012-11/#talk4

Has information given by the authors in 2012 on the sanitizers.

like image 28
echristo Avatar answered Oct 22 '22 23:10

echristo