What's a good way to disassemble Phobos?
max haughton
maxhaton at gmail.com
Sat Apr 30 20:11:16 UTC 2022
On Saturday, 30 April 2022 at 18:18:02 UTC, Dukc wrote:
> I have figured out that my development build of Phobos is for
> some reason including instances of `__cmp` and `dstrcmp`
> templates from DRuntime in the Phobos binary. Since `-betterC`
> client code does not link Phobos in, it fails if it tries to
> use those functions.
>
> The problem: how do I track down what includes those functions
> in the Phobos binary? The -vasm switch of DMD gives a neat
> output, but I can get it to only show the disassembly of files
> I'm compiling (not already combined files), and before the
> linking phase. So no info where the function calls point to.
>
> I also tried ndisasm. It can disassemble already compiled
> binaries, but it's output is utter trash. It can't even figure
> where a function begins or ends, let alone displaying their
> name. Instead it displays just a sea of `add` instructions for
> the areas between the functions.
>
> I'm looking for something where I could search for the call to
> the DRuntime functions in question, from an already combined .o
> or .a. What do you suggest? I'm on Linux.
If they are templates then try compiling whatever is causing them
with `-vtemplates=list-instances`. If you can't recompile then
you may be stuck grepping whatever disassembler output works.
The sea of add instructions is padding, lookup what `add BYTE
PTR [rax],al` assembles to. vasm isn't a good disassembler for
anything other than debugging the compiler, all the jumps and
relocations aren't resolved.
More information about the Digitalmars-d-learn
mailing list