Hi Keren,

I am sorry for the late response. See my inlined comments.

*      //ret_func->_cache_valid = true;*
>

In your case, I don't think you need to maintain _cache_valid, because
_cache_valid is used by the Dyninst parser. You should be able to ignore it.


> *        //ret_func->add_block(ret_block);*
>

Right now, there is indeed no easy way to add a block to a function,
because Function::add_block is declared as a private member function.
Personally, I am fine with changing Function::add_block to a public
function. Making it public is consistent with an existing interface
Edge::install(), which adds an edge to the source and target block.


>
>
> *            //ret_func->_call_edge_list.insert(ret_edge);*
>

There is no good interface for inserting call edges to a function. But I
don't think this information is needed for loop analysis because the loop
analysis in ParseAPI just iterate every edge of a basic block and ignore
the call edges. If you want to maintain a list of call edges in a function,
you can either create a new public interface in parseAPI/h/CFG.h to access
_call_edge_list, or you can inherit the ParseAPI::Function class and
maintain your own version of call edge list.

Considering that you may want to maintain other information about a
function, I would recommend inherit the ParseAPI::Function.


>
>           } else {  // TODO(Keren): Add more edge types
>
>             ret_edge = new Edge(ret_block, ret_target_block, DIRECT);
>
>           }
>
>
>
>           ret_edge->install();
>
>           edges_.add(*ret_edge);
>
>         }
>
>       }
>
>
>
>       return ret_func;
>
>     }
>
>   }
>
>
>
>   return NULL;
>
>   // iterate blocks
>
>   // add blocks
>
>   // iterate targets
>
>   // add edges
>
> }
>
>
>
> Regards,
>
> Keren
>
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
> Windows 10
>
>
>
> *From: *John Mellor-Crummey <joh...@rice.edu>
> *Sent: *Thursday, May 31, 2018 9:58 PM
> *To: *Xiaozhu Meng <mxz...@gmail.com>
> *Cc: *John Mellor-Crummey <joh...@rice.edu>; Keren Zhou <k...@rice.edu>
> *Subject: *Re: [DynInst_API:] Creating ParseAPI graphs to CFGs for
> externalrepresentations; adding line map information from external sources
>
>
>
> Xiaozhu,
>
>
>
> Thanks! We’ll give the CFG construction a try.
>
>
>
> I believe that Bill thought that I could push in line maps, but I haven’t
> tried it yet.
>
> --
> John Mellor-Crummey            Professor
> Dept of Computer Science      Rice University
> email: joh...@rice.edu <joh...@rice.edu>                     phone:
> 713-348-5179
>
>
>
> On May 31, 2018, at 8:55 AM, Xiaozhu Meng <mxz...@gmail.com> wrote:
>
>
>
> Hi John,
>
>
>
> I can answer the part about ParseAPI. You can definitely use the
> CFGFactory to construct your ParseAPI CFG, which should contains a bunch of
> ParseAPI::Function, ParseAPI::Block, and ParseAPI::Edge objects. Then, you
> can invoke loop analysis through Function objects. You won't have the
> SymtabCodeSource or CodeObject, but they are not needed for loop analysis.
>
>
>
> Thanks,
>
>
>
> --Xiaozhu
>
>
>
> On Tue, May 29, 2018 at 2:53 PM, John Mellor-Crummey <joh...@rice.edu>
> wrote:
>
> We are interested in building ParseAPI CFGs for a GPU binary given a
> representation of the CFG for a GPU binary in as a graph in dot format. We
> are currently parsing the GPU CFG for each function out of dot, understand
> its blocks, edges, and calls. From scanning through the documentation in
> ParseAPI, it is not clear whether it would be feasible to simply use the
> CFG factory interface to supply graph elements to Dyninst to construct a
> CFG. If we did so, would it then be possible to use the Loop Analyzer to
> analyze this CFG? (At present, we have a copy of the LoopAnalyzer code that
> analyzes our lightweight internal representation of the dot graph, but it
> would be better for HPCToolkit’s hpcstruct to just work with one
> representation  - Dyninst CFGs for binaries.)
>
>
>
> Also, can I push line map information into dyninst from the outside? Line
> maps for optimized GPU binaries can’t be read from libdw. If I write my own
> reader, can I push information associating address ranges with source file
> and line? There is no information about compilation units, which is what
> makes NVIDIA’s cubin line maps unreadable with libdw. If I were to push
> information in from the outside about source lines and files, would I have
> to fake a compilation unit, or could I just put it in the default module?
>
>
>
> We would appreciate any advice. If is easier to have a conversation than
> sending a long email, let me know.
>
> --
> John Mellor-Crummey Professor
> Dept of Computer Science Rice University
> email: joh...@rice.edu <joh...@rice.edu> phone: 713-348-5179
>
>
>
>
> _______________________________________________
> Dyninst-api mailing list
> Dyninst-api@cs.wisc.edu
> https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
>
>
>
>
>
>
>
_______________________________________________
Dyninst-api mailing list
Dyninst-api@cs.wisc.edu
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api

Reply via email to