Skip to content

[mlir] ASAN ODR violations in mlir-pdll when LLVM_LINK_LLVM_DYLIB=ON #162426

@christopherbate

Description

@christopherbate

There appears to be a circular dependency issue with the [MLIR mlir-pdll tool](https://github.com/llvm/llvm-project/blob/main/mlir/tools/mlir-pdll/CMakeLists.txt):

set(LIBS
  MLIRIR
  MLIRPDLLAST
  MLIRPDLLCodeGen
  MLIRPDLLODS
  MLIRPDLLParser
  )

add_tablegen(mlir-pdll MLIR_PDLL
  DESTINATION "${MLIR_TOOLS_INSTALL_DIR}"
  EXPORT MLIR
  mlir-pdll.cpp

  DEPENDS
  ${LIBS}
  )

Some of the libraries in LIBS here will link libLLVM when LLVM_LINK_LLVM_DYLIB=ON. This includes MLIRIR but also MLIRPDLLCodeGen and others. TableGen binaries are explictly linked statically against LLVM.

This results in ODR violation messages when building with both ASAN and LLVM_LINK_LLVM_DYLIB=ON:

==1842017==ERROR: AddressSanitizer: odr-violation (0x61a21d591220):
  [1] size=1 'llvm::vfs::FileSystem::ID' /llvm-project/llvm/lib/Support/VirtualFileSystem.cpp in /build/bin/mlir-pdll
  [2] size=1 'llvm::vfs::FileSystem::ID' /llvm-project/llvm/lib/Support/VirtualFileSystem.cpp in /build/bin/../lib/libLLVM.so.21.0git
These globals were registered at these points:
...

Looking at the dependency graph, we need to force mlir-pdll to link all its dependencies statically. That can be done by swapping out targets that aren't explicitly declared STATIc (e.g. MLIRIR) with object lib (obj.MLIRIR) targets if available, However, you have to transitively resolve all the dependencies required. It looks like the set it needs is (MLIRIR , MLIRSupport , MLIRPDLDialect, and some builtin op interface libraries). In some cases, object libraries are currently not built (e.g. if BUILD_SHARED_LIBS=ON and LLVM_LINK_LLVM_DYLIB=ON and (too be added in PR#155488) MLIR_BUILD_MLIR_DYLIB=OFF. Therefore we would need to start explicitly requesting that object libraries be built for at least this subset of libraries.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions