macOS: Need to run `dsymutil` for debug builds
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.
- The source did not contain
//CHECK:lines yet. Compiled with-gand ran test. LSan detects memory leak, and reports it is on line 14. - I added
//CHECK:lines, effectively changing the line of malloc (i.e. the line on which the leaked memory was allocated). - Reran the testcase. LSan still reported the old line!
- 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
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.
We invoke clang for linking, so I assume forwarding the
-gwould be enough?
Very good point, I'll try.