Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
A toy program to teach myself more about the mach-o file format. Right now, it roughly does what `dsymutil -s` does (which is a bit more than `nm`), but worse. Demo ---- But one can already see interesting things with this tool. See symbols in `lssym` (like with `nm`, but with some `otool -l` thrown in): clang -o lssym lssym.c -Wall ./lssym lssym See what's left after stripping: strip lssym ./lssym lssym (Compare with the output of `nm lssym` and `dsymutil -s lssym` in both cases. Note that `strip` adds a symbol that looks like radr://5614542 N_STAB 3c n_sect 000 n_desc 0x0000 n_value 0x5614542 I wonder what that bug is. `nm` doesn't list it because `nm` only lists symbols, and this is a stabs debug info entry which `nm` only shows if you pass `-a`.) Now build with debug info: clang -o lssym lssym.c -Wall -gdwarf-2 ./lssym lssym Note that the file now includes stabs debug info, even though we asked for dwarf. `dsymutil lssym` complains about a temporary `.o` file. Let's break up compile and link step: clang -c lssym.c -Wall -gdwarf-2 clang -o lssym lssym.o dsymutil lssym ./lssym lssym # Still contains stabs entries. dwarfdump lssym.dSYM # But this finds dwarf info now, too. dwarfdump lssym.o # So does this. dwarfdump lssym # This doesn't. If you don't want `ld` to write stabs info (since you have a dSYM, it's pointless, and might slow down the `ld` step), link like this: clang -o lssym lssym.o -Wl,-S If you pass `-Wl,-s` instead, `ld` will claim that `-s` is obsolete and ignored, but still still strip all symbols that can be stripped (after first writing them as far as I understand -- so that probably doesn't help with linker performance). Related tools ------------- * `dyldinfo` can show relocation info (`man dyldinfo` works, but dyldinfo isn't in my path for some reason -- `xcrun dyldinfo` finds it though) - e.g. -exports, -opcodes, ... * `dwarfdump` shows dwarf debug data * `dsymutil` can show symbol tables (`-s`) and link dwarf debug info from .o files into a single .dSYM file. * `nm` shows references symbols; a subset of `dsymutil -s` output. * `otool -l` all load commands in a mach-o file. * `dwarfdump --file-stats lssym` * `atos` * `dwarfdump --lookup` * run programs with `DYLD_PRINT_STATISTICS=1` set (see `man dyld` for more flags) http://wiki.dwarfstd.org/index.php?title=Apple's_%22Lazy%22_DWARF_Scheme