[llvm-dev] Is clang+llvm deterministisc?

Alexandre Isoard via llvm-dev llvm-dev at lists.llvm.org
Sun Jul 16 12:49:48 PDT 2017


Hi Ming Zhang,

If you don't want to rely on Clang reproducibility, you could save the IR
into a .bc file. Clang can directly take a .bc file as input.

You then:
- instrument a copy of that .bc file and run your counting
- add control flow checking on an other copy of the original .bc file and
you have your final binary

For the reproducibility, I think we try to preserve that, but sometime we
lose it, you may have to specify -frandom-seed.

On Sun, Jul 16, 2017 at 4:22 AM, 章明 via llvm-dev <llvm-dev at lists.llvm.org>
wrote:

> Hi, there,
>
>
> I am working on a project on software control flow checking, which
> instruments a program to check if the control flow at runtime matches the
> control flow graph computed at compile-time.
>
>
> My instrumentation process has to make use of control flow information,
> including as control flow graph and dominator/post-dominator trees, so it
> is better part of the compiler. On the other hand, I don't want any
> transformation pass to mess up the additional instrumentation code, so my
> instrumentation process has to be run after other transformation passes are
> complete. Therefore, I'd like to implement my instrumentation process as
> the last pass before the machine intermediate representation (MIR) is
> translated to native assembly code.
>
>
> My instrumentation process also needs to take basic block execution
> frequencies into consideration. So I have to compile the same program
> twice. First, the program is compiled, adding code to collect execution
> frequencies. Then, when the execution frequencies have been collected, the
> same program is compiled again to add control flow checking instructions,
> which takes execution frequencies into consideration. Obviously, the
> program profiled to collect execution frequencies and the program
> instrumented with control flow checking instructions have to be consistent.
> At least, they have to have the same basic blocks and identical control
> flow graphs. So my question is this: If I compile the same program twice
> using Clang, with the same command line, is it guaranteed that, at the
> point right before the MIRs are converted to native assembly code, the MIRs
> are identical?
>
>
> Thank you!
>
>
> Ming Zhang
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>


-- 
*Alexandre Isoard*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170716/62d056ba/attachment.html>


More information about the llvm-dev mailing list