[PATCH] D69003: [dsymutil] Add ${system_libs} to target link libraries

Gokturk Yuksek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 5 14:20:05 PST 2019


gokturk added a comment.

In D69003#1721908 <https://reviews.llvm.org/D69003#1721908>, @beanz wrote:

> You don't need to add the library to `dsymutil`. It is not code in `dsymutil` that depends on `libatomic`, it is code in `LLVMSupport` that `dsymutil` is using. By fixing this in `LLVMSupport`, any library linked against `LLVMSupport` will have a linkage to `libatomic` added.
>
> Please don't spend 20 hours testing this patch. I'm very pretty sure this isn't the correct fix.


I've debugged why the '-latomic' flag is not propagating from `Support` to `dsymutil`. When `LLVM_DYLIB_COMPONENTS` is set to `all`, `dsymutil` is set to link against `libLLVM` as opposed to `Support` (https://github.com/llvm/llvm-project/blob/5be949e3d007ea0bf1979a483ce558d33eca5d6a/llvm/cmake/modules/LLVM-Config.cmake#L84):

  -- target_link_libraries name: LLVMSupport libtype: INTERFACE ARG_LINK_LIBS: z;rt;dl;tinfo;atomic;-lpthread;m lib_deps: LLVMDemangle llvm_libs: 
  -- Targeting RISCV
  -- add_llvm_executable() name: dsymutil USE_SHARED LLVM_LINK_COMPONENTS: AllTargetsAsmPrinters;AllTargetsCodeGens;AllTargetsDescs;AllTargetsInfos;AsmPrinter;DebugInfoDWARF;MC;Object;Option;Support;Target
  -- llvm_config() executable: dsymutil ARG_USE_SHARED: TRUE link_components: AllTargetsAsmPrinters;AllTargetsCodeGens;AllTargetsDescs;AllTargetsInfos;AsmPrinter;DebugInfoDWARF;MC;Object;Option;Support;Target ARGN: USE_SHARED;AllTargetsAsmPrinters;AllTargetsCodeGens;AllTargetsDescs;AllTargetsInfos;AsmPrinter;DebugInfoDWARF;MC;Object;Option;Support;Target
  -- llvm_config() LLVM_DYLIB_COMPONENTS: all
  -- explicit_llvm_config() executable: dsymutil type: EXECUTABLE LIBRARIES:  link_components: 
  
  LINK_LIBRARIES = -Wl,-rpath,"\$$ORIGIN/../lib64/lp64d" lib64/lp64d/libLLVM-10svn.so -lpthread

and the resulting `LINK_LIBRARIES` doesn't contain the '-latomic' that should have been propagated through `Support`. If I forcefully inject `Support` back into `link_components` in (https://github.com/llvm/llvm-project/blob/5be949e3d007ea0bf1979a483ce558d33eca5d6a/llvm/cmake/modules/LLVM-Config.cmake#L84), it does propagate correctly:

  -- target_link_libraries name: LLVMSupport libtype: INTERFACE ARG_LINK_LIBS: z;rt;dl;tinfo;atomic;-lpthread;m lib_deps: LLVMDemangle llvm_libs: 
  -- Targeting RISCV
  -- add_llvm_executable() name: dsymutil USE_SHARED LLVM_LINK_COMPONENTS: AllTargetsAsmPrinters;AllTargetsCodeGens;AllTargetsDescs;AllTargetsInfos;AsmPrinter;DebugInfoDWARF;MC;Object;Option;Support;Target
  -- llvm_config() executable: dsymutil ARG_USE_SHARED: TRUE link_components: AllTargetsAsmPrinters;AllTargetsCodeGens;AllTargetsDescs;AllTargetsInfos;AsmPrinter;DebugInfoDWARF;MC;Object;Option;Support;Target ARGN: USE_SHARED;AllTargetsAsmPrinters;AllTargetsCodeGens;AllTargetsDescs;AllTargetsInfos;AsmPrinter;DebugInfoDWARF;MC;Object;Option;Support;Target
  -- llvm_config() LLVM_DYLIB_COMPONENTS: all
  -- explicit_llvm_config() executable: dsymutil type: EXECUTABLE LIBRARIES: LLVMSupport link_components: Support
  
  LINK_LIBRARIES = -Wl,-rpath,"\$$ORIGIN/../lib64/lp64d" lib64/lp64d/libLLVM-10svn.so lib64/lp64d/libLLVMSupport.a -lpthread -lz -lrt -ldl -ltinfo -latomic -lpthread -lm lib64/lp64d/libLLVMDemangle.a

I don't understand why the flag doesn't propagate from `Support` to `libLLVM` to `dsymutil`.

@beanz which fix is being requested? I think the current patch is incorrect because `-latomic` propagates if not dynamically linking against `libLLVM`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69003/new/

https://reviews.llvm.org/D69003





More information about the llvm-commits mailing list