[MSan] Enable MSAN for aarch64

Description

[MSan] Enable MSAN for aarch64

This patch enabled msan for aarch64 with 39-bit VMA and 42-bit VMA.
As defined by lib/msan/msan.h the memory layout used is for 39-bit is:

00 0000 0000 - 40 0000 0000:  invalid
40 0000 0000 - 43 0000 0000:  shadow
43 0000 0000 - 46 0000 0000:  origin
46 0000 0000 - 55 0000 0000:  invalid
55 0000 0000 - 56 0000 0000:  app (low)
56 0000 0000 - 70 0000 0000:  invalid
70 0000 0000 - 80 0000 0000:  app (high)

And for 42-bit VMA:

000 0000 0000 - 100 0000 0000:  invalid
100 0000 0000 - 11b 0000 0000:  shadow
11b 0000 0000 - 120 0000 0000:  invalid
120 0000 0000 - 13b 0000 0000:  origin
13b 0000 0000 - 2aa 0000 0000:  invalid
2aa 0000 0000 - 2ab 0000 0000:  app (low)
2ab 0000 0000 - 3f0 0000 0000:  invalid
3f0 0000 0000 - 400 0000 0000:  app (high)

Most of tests are passing with exception of:

  • Linux/mallinfo.cc
  • chained_origin_limits.cc
  • dlerror.cc
  • param_tls_limit.cc
  • signal_stress_test.cc
  • nonnull-arg.cpp

The 'Linux/mallinfo.cc' is due the fact AArch64 returns the sret in 'x8'
instead of default first argument 'x1'. So a function prototype that
aims to mimic (by using first argument as the return of function) won't
work. For GCC one can make a register alias (register var asm ("r8")), but
for clang it detects is an unused variable and generate wrong code.

The 'chained_origin_limits' is probably due a wrong code generation,
since it fails only when origin memory is used
(-fsanitize-memory-track-origins=2) and only in the returned code
(return buf[50]).

The 'signal_streess_test' and 'nonnull-arg' are due currently missing variadic
argument handling in memory sanitizer code instrumentation on LLVM side.

Both 'dlerror' and 'param_tls_test' are unknown failures that require
further investigation.

All the failures are XFAIL for aarch64 for now.

Details

Committed
azanellaSep 16 2015, 8:12 AM
Parents
rL247808: [sanitizers] Enable memory sanitizer on clang
Branches
Unknown
Tags
Unknown