[PATCH] D12709: [PATCH] [sanitizers] [msan] Enable MSAN for aarch64

Adhemerval Zanella via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 8 14:18:39 PDT 2015


zatrazz created this revision.
zatrazz added reviewers: kcc, rengolin, dvyukov, eugenis, pcc.
zatrazz added a subscriber: llvm-commits.
Herald added subscribers: rengolin, aemerson.

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

http://reviews.llvm.org/D12709

Files:
  cmake/config-ix.cmake
  lib/msan/msan.h
  lib/msan/msan_allocator.cc
  lib/msan/msan_interceptors.cc
  lib/sanitizer_common/sanitizer_common_syscalls.inc
  lib/sanitizer_common/sanitizer_platform_interceptors.h
  lib/sanitizer_common/sanitizer_platform_limits_posix.cc
  lib/sanitizer_common/sanitizer_platform_limits_posix.h
  lib/sanitizer_common/sanitizer_stacktrace.h
  test/msan/Linux/mallinfo.cc
  test/msan/chained_origin_limits.cc
  test/msan/dlerror.cc
  test/msan/mmap.cc
  test/msan/mmap_below_shadow.cc
  test/msan/param_tls_limit.cc
  test/msan/signal_stress_test.cc
  test/msan/strlen_of_shadow.cc
  test/sanitizer_common/TestCases/Linux/ptrace.cc
  test/ubsan/TestCases/Misc/nonnull-arg.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D12709.34263.patch
Type: text/x-patch
Size: 18925 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150908/a24f2e77/attachment.bin>


More information about the llvm-commits mailing list