On 6/17/20 9:10 AM, Shuai Wang wrote:
Dear Martin,
Thanks for the information. I am tentatively experimenting some random gadgets;
given the critical if condition belonging to each sanitizer check, i will do
some data flow analysis and then decide whether to remove that check or not
(done). If so, I will rewrite that if condition into always false (done), and
hope I can re-launch the dead code elimination pass of GCC to automatically
remove that particular sanitizer check (and the if condition).
That seems very close to what we do in maybe_optimize_asan_check_ifn
(sanopt.c). There we make a decision
if a ASAN_CHECK should be expanded or optimized out. You may implement your
functionality to the place.
This is just some random hacks, so probably far from the adoption stage... If
it does, then i will be glad to reach out and discuss more on the details
(although i am not sure how it goes)...
I see.
Note that I'm not a plug-in guy, but more a GCC developer. That's why I prefer
direct modifications
to the compiler rather than offloading work to a plug-in ;)
Martin
Shuai
On Wed, Jun 17, 2020 at 3:05 PM Martin Liška <mli...@suse.cz
<mailto:mli...@suse.cz>> wrote:
On 6/17/20 9:00 AM, Shuai Wang wrote:
> Dear Martin,
>
> Thanks for the kind reply.
Hey.
You're welcome.
> I don't have a strong preference between `asan0` vs. `sanopt`. But I
note that I am primarily working on sanitizer enabled code, where I can only find
some .ASAN_CHECK function calls in `asan0`, but those function calls seem have
been inlined in `sanopt`.
Note that .ASAN_CHECK is not inlined but "instrumented". The function is
about taking look in the shadow memory
and checking that a memory write is valid.
> In other words, I can constantly find the following pattern:
>
> *if (_44 != 0)*
> goto <bb 9>; [0.05%]
> else
> goto <bb 8>; [99.95%]
>
> <bb 9> :
> __builtin___asan_report_load4 (_34);
>
> The marked if condition is where my analysis and instrumentation starts
from. If I go with `asan0`, then I just cannot find it (it's somewhat wrapped
within .ASAN_CHECK).
Can you please explain which ASAN_CHECKs are you trying to modify? We can
probably find a proper
place where to implement your plugin-in functionality.
Martin
>
> Best,
> Shuai
>
> On Wed, Jun 17, 2020 at 2:49 PM Martin Liška <mli...@suse.cz <mailto:mli...@suse.cz>
<mailto:mli...@suse.cz <mailto:mli...@suse.cz>>> wrote:
>
> On 6/17/20 4:10 AM, Shuai Wang via Gcc wrote:
> > Hello,
> >
> > Suppose I have changed certain if condition in the GIMPLE code
(generated
> > by the `sanopt` pass) into the following format:
>
> Hello.
>
> What kind of instrumentation are you doing? Can you make the
instrumentation
> in a ASAN pass? Then you'll go through DCE.
>
> Martin
>
> >
> > if (0 == 1)
> > {
> > xxxx
> > }
> >
> > Then, in order to completely remove this unnecessary if condition
and the
> > guarded true branch, I want to leverage the dead code elimination
> > optimization of gcc. However, I just cannot figure out a way of
doing so. I
> > use the following command to output the instrumented GIMPLE code:
> >
> > gcc -fdump-tree-all -fplugin=./instrumentor.so -g
-fsanitize=address test.c
> >
> > And notice that the instrumented gimple code is right there in the
> > outputs: test.c.322t.instrumentor. Everything seems fine.
> >
> > Anyone could shed some light on how to re-optimize (e.g., with
deadcode
> > elimination or just use -O3 if possible) the instrumented GIMPLE
code?
> > Thank you very much.
> >
> > Shuai
> >
>