[all-commits] [llvm/llvm-project] 36b52c: [sanitizer] Compare against the alignment of the l...

Xi Ruoyao via All-commits all-commits at lists.llvm.org
Sun Jul 17 00:45:28 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 36b52c38aaffa3cd1936b7992fffd0cfa6d67f7b
      https://github.com/llvm/llvm-project/commit/36b52c38aaffa3cd1936b7992fffd0cfa6d67f7b
  Author: Xi Ruoyao <xry111 at mengyan1223.wang>
  Date:   2022-07-17 (Sun, 17 Jul 2022)

  Changed paths:
    M compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp

  Log Message:
  -----------
  [sanitizer] Compare against the alignment of the latter range trying to find consecutive TLS blocks in GetStaticTlsBoundary

On a mips64el-linux-gnu system, the dynamic linker arranges TLS blocks
like:

    [0] 0xfff7fe9680..0xfff7fe9684, align = 0x4
    [1] 0xfff7fe9688..0xfff7fe96a8, align = 0x8
    [2] 0xfff7fe96c0..0xfff7fe9e60, align = 0x40
    [3] 0xfff7fe9e60..0xfff7fe9ef8, align = 0x8

Note that the dynamic linker can only put [1] at 0xfff7fe9688, not
0xfff7fe9684 or it will be misaligned.  But we were comparing the
distance between two blocks with the alignment of the previous range,
causing GetStaticTlsBoundary fail to merge the consecutive blocks.

Compare against the alignment of the latter range to fix the issue.

Reviewed By: MaskRay

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




More information about the All-commits mailing list