[PATCH] D84565: [Darwin] [Driver] Clang should invoke dsymutil for lto builds -g*

Chris Bieneman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 24 18:39:02 PDT 2020


beanz marked an inline comment as done.
beanz added inline comments.


================
Comment at: clang/lib/Driver/Driver.cpp:2037
+    bool isGeneratingTemporaryObject =
+        ContainsCompileOrAssembleAction(Actions.back()) || LTOMode != LTOK_None;
     if ((enablesDebugInfo || willEmitRemarks(Args)) &&
----------------
dsanders wrote:
> This should fix the same issue as the workaround I was using in D84127.
> 
> I'm not entirely convinced that this is all of it though. It seems strange to me that these two scripts produce different build products (aside from ret0.o):
> ```
> $ rm -rf external ret0 ret0.*
> $ echo 'int main() { return 0; }' > ret0.c
> $ use_cflags="--sysroot=$SYSROOT -g"
> $ ../build/bin/clang -o ret0 ret0.c ${=use_cflags}
> $ ls
> ret0      ret0.c    ret0.dSYM
> ```
> ```
> $ rm -rf external ret0 ret0.*
> $ echo 'int main() { return 0; }' > ret0.c
> $ use_cflags="--sysroot=$SYSROOT -g"
> $ ../build/bin/clang -c -o ret0.o ret0.c ${=use_cflags}
> $ ../build/bin/clang -o ret0 ret0.o ${=use_cflags}
> $ ls
> ret0   ret0.c ret0.o
> ```
> I'd expect them to either consistently extract the dSYM or consistently lipo the slices together including the debug info. I don't have a strong opinion about which is right, it's just the inconsistency that's bothering me
The reason they behave differently is because in the case where clang compiles + links in the same invocation the intermediate object files are deleted. In MachO we do not link debug information in ld, instead we do it in dsymutil. dsymutil cannot run across a temporary object file that has been deleted, so the clang driver runs it for you.

Clang doesn't run it in the case of just linking object files because it takes time and isn't strictly required as long as you keep all your object files around so that your debugger can find the unlinked debug info in the object files. This is why one of the common ways people speed up debug builds with mach-o is to skip dSYM generation.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D84565





More information about the cfe-commits mailing list