On Wed, 2019-04-10 at 17:53 +0200, Basile Starynkevitch wrote:
> Hello All,
> 
> This is work done for the CHARIOT H2020 project (see 
> https://www.chariotproject.eu/ for more context) in relation with my 
> BISMON project (see http://github.com/bstarynk/bismon/ for more, and,
> if 
> you want more context, read the draft report on 
> http://starynkevitch.net/Basile/bismon-chariot-doc.pdf but skip the
> few 
> first pages for H2020 managers).
> 
> I have to make a preliminary proof-of-concept that my BISMON project 
> could be useful, with some ad-hoc GCC 8.3 plugin, to compute a crude 
> approximation of the call stack of a tiny freestanding kernel (for
> x86 
> in 32 bits, so compiled with: gcc-8 -ffreestanding -m32 -O2 -Wall 
> -fstack-usage and my plugin).
> 
> I am working right now on that hand-written GCC 8.3 plugin. It
> inserts 
> two GCC passes, and both passes are only analyzing passes (they
> don't 
> change a single bit of GIMPLE or RTL representations).
> 
> The first pass, named chariot_callgraph, is (oversimplifying)
> printing 
> the call graph (and I will improve later that pass to communicate
> with 
> BISMON).  It is a pass of kind GIMPLE_PASS successfully inserted
> after 
> the reference_pass_name "sra" and it works well enough.
> 
> The second pass, named chariot_framesize, is (oversimplifying)
> expected 
> to run with the printing the call frame size (and I will improve
> later 
> that pass to communicate with BISMON).
> 
> I want to insert that second pass following this explanation (in a 
> comment of mine).
> 
>    /* the fun->su exists as soon as -fstack-usage is passed, but it
> is
>       filled much later, by the RTL pass named "pro_and_epilogue" at
>       gcc-8.3.0/gcc/config/i386/i386.c:13930 in function
>       ix86_expand_prologue; that pass is
>       pass_data_thread_prologue_and_epilogue defined in
> gcc/function.c
>       line 6553 ... */
> 
> 
> To insert that second pass, I tried many things and failed. I was 
> expecting that an rtl- prefix is needed for an RTL pass. My
> plugin_init 
> contains
> 
> 
>    struct register_pass_info my_framesize_pass_info;
>    my_framesize_pass_info.pass = make_pass_chariot_framesize (g);
>    //#warning the below reference pass name is wrong for 
> my_framesize_pass_info
>    my_framesize_pass_info.reference_pass_name = "rtl-
> pro_and_epilogue";
>    my_framesize_pass_info.ref_pass_instance_number = 1;
>    my_framesize_pass_info.pos_op = PASS_POS_INSERT_AFTER;
>    register_callback (plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL,
>                       &my_framesize_pass_info);
> 
> But for some reason I cannot understand the reference_pass_name is 
> wrong. Using "rtl-pro_and_epilogue" don't work. And I tried many 
> variants without any success during several hours.
> 
> 
> So what is the reference_pass_name to use with register_callback
> like 
> above to mention that pass_data_thread_prologue_and_epilogue defined
> in 
> gcc/function.c line 6553 ?

It's been a long time since I touched this code, but the gcc-python-
plugin has an example of an RTL pass in a plugin (albeit in Python)
https://github.com/davidmalcolm/gcc-python-plugin/blob/master/tests/plugin/new-passes/script.py#L97

I just smoketested it and the pass appears to get run.

Specifically, my example registers the plugin pass after "expand" (so I
don't think you need the "rtl-" prefix there; I think these prefixes
are for dump names rather than pass names).

Hope this is helpful
Dave



> 
> The entire code (of that proof-of-concept work in progress) is 
> temporarily available on 
> http://starynkevitch.net/Basile/chariotdemo-2019-Apr-10-5414f7e3a173.
> tar.bz2 
> which is a small archive of 14340 bytes. Please notice that the code
> I 
> have written in collaboration with my colleagues Franck Védrine (in
> BCC) 
> and Yves Lhuillier at CEA LIST is under GPLv3+ license. But that
> example 
> also contains some third-party tiny code taken from 
> https://wiki.osdev.org/Bare_Bones and in good faith we don't know
> what 
> license is that code (files kernel.c etc...) but we guess it is
> morally 
> in the public domain or open source (but we are not lawyers) since
> given 
> as an example on some wiki page.
> 
> Regards
> 
> 

Reply via email to