ldc icon indicating copy to clipboard operation
ldc copied to clipboard

macOS: Need to run `dsymutil` for debug builds

Open JohanEngelen opened this issue 3 years ago • 2 comments

When creating an executable with debug information (-g), we need to run dsymutil afterwards to create the correct debuginformation on macOS.

Not running dsymutil resulted in a strange bug, which could have been very confusing for larger source files. It happened while working on the LSan testcase.

  1. The source did not contain //CHECK: lines yet. Compiled with -g and ran test. LSan detects memory leak, and reports it is on line 14.
  2. I added //CHECK: lines, effectively changing the line of malloc (i.e. the line on which the leaked memory was allocated).
  3. Reran the testcase. LSan still reported the old line!
  4. Running dsymutil on the executable --> now LSan reports the correct line of malloc.

AFAICT, other compilers all run dsymutil after linking for -g invocations of the compiler (e.g. clang, nim, rustc). Note it is nice to include an option to turn default running dsymutil off (see: https://github.com/rust-lang/rust/issues/79361).

Reference: https://stackoverflow.com/a/32299029

JohanEngelen avatar Jun 26 '22 10:06 JohanEngelen

We invoke clang for linking, so I assume forwarding the -g would be enough? And I guess some -Xcc option could be used to prevent clang from running that extra tool, without introducing any extra Mac-specific cmdline options.

kinke avatar Jul 30 '22 15:07 kinke

We invoke clang for linking, so I assume forwarding the -g would be enough?

Very good point, I'll try.

JohanEngelen avatar Jul 30 '22 21:07 JohanEngelen