[all-commits] [llvm/llvm-project] 80e326: [dfsan] Support passing non-i16 shadow values in T...

Z via All-commits all-commits at lists.llvm.org
Thu Dec 3 18:51:30 PST 2020


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 80e326a8c4cfae770c10d7bb3d0ae291011bd91f
      https://github.com/llvm/llvm-project/commit/80e326a8c4cfae770c10d7bb3d0ae291011bd91f
  Author: Jianzhou Zhao <jianzhouzh at google.com>
  Date:   2020-12-04 (Fri, 04 Dec 2020)

  Changed paths:
    M compiler-rt/lib/dfsan/dfsan.cpp
    M llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
    M llvm/test/Instrumentation/DataFlowSanitizer/arith.ll
    M llvm/test/Instrumentation/DataFlowSanitizer/call.ll
    M llvm/test/Instrumentation/DataFlowSanitizer/callback.ll
    M llvm/test/Instrumentation/DataFlowSanitizer/fast16labels.ll
    M llvm/test/Instrumentation/DataFlowSanitizer/load.ll
    M llvm/test/Instrumentation/DataFlowSanitizer/phi.ll
    M llvm/test/Instrumentation/DataFlowSanitizer/select.ll

  Log Message:
  -----------
  [dfsan] Support passing non-i16 shadow values in TLS mode

This is a child diff of D92261.

It extended TLS arg/ret to work with aggregate types.

For a function
  t foo(t1 a1, t2 a2, ... tn an)
Its arguments shadow are saved in TLS args like
  a1_s, a2_s, ..., an_s
TLS ret simply includes r_s. By calculating the type size of each shadow
value, we can get their offset.

This is similar to what MSan does. See __msan_retval_tls and __msan_param_tls
from llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp.

Note that this change does not add test cases for overflowed TLS
arg/ret because this is hard to test w/o supporting aggregate shdow
types. We will be adding them after supporting that.

Reviewed-by: morehouse

Differential Revision: https://reviews.llvm.org/D92440




More information about the All-commits mailing list