[all-commits] [llvm/llvm-project] 7b7895: [sanitizer] Place module_ctor/module_dtor in llvm....

Fangrui Song via All-commits all-commits at lists.llvm.org
Wed Jul 21 14:03:41 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 7b789562244ee941b7bf2cefeb3fc08a59a01865
      https://github.com/llvm/llvm-project/commit/7b789562244ee941b7bf2cefeb3fc08a59a01865
  Author: Fangrui Song <i at maskray.me>
  Date:   2021-07-21 (Wed, 21 Jul 2021)

  Changed paths:
    M llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
    M llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
    M llvm/lib/Transforms/Utils/ModuleUtils.cpp
    M llvm/test/Instrumentation/AddressSanitizer/basic.ll
    M llvm/test/Instrumentation/AddressSanitizer/instrument_global.ll
    M llvm/test/Instrumentation/HWAddressSanitizer/basic.ll
    M llvm/test/Instrumentation/HeapProfiler/basic.ll
    M llvm/test/Instrumentation/MemorySanitizer/msan_basic.ll
    M llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll
    M llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard.ll
    M llvm/test/Instrumentation/ThreadSanitizer/tsan_basic.ll

  Log Message:
  -----------
  [sanitizer] Place module_ctor/module_dtor in llvm.used

This removes an abuse of ELF linker behaviors while keeping Mach-O/COFF linker
behaviors unchanged.

ELF: when module_ctor is in a comdat, this patch removes reliance on a linker
abuse (an SHT_INIT_ARRAY in a section group retains the whole group) by using
SHF_GNU_RETAIN. No linker behavior difference when module_ctor is not in a comdat.

Mach-O: module_ctor gets `N_NO_DEAD_STRIP`. No linker behavior difference
because module_ctor is already referenced by a `S_MOD_INIT_FUNC_POINTERS`
section (GC root).

PE/COFF: no-op. SanitizerCoverage already appends module_ctor to `llvm.used`.
Other sanitizers: llvm.used for local linkage is not implemented in
`TargetLoweringObjectFileCOFF::emitLinkerDirectives` (once implemented or
switched to a non-local linkage, COFF can use module_ctor in comdat (i.e.
generalize ELF-specific rL301586)).

There is no object file size difference.

Reviewed By: vitalybuka

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




More information about the All-commits mailing list