David B. Serafini asked the musical question:
> Does such a tool exist for F90 for any of IBM, Sun, Cray, NAG, SGI, or HP
> compilers?
I will speak to the Cray tools. The ones I will mention are xbrowse
and cflist.
"xbrowse" is an GUI tool for program analysis. It does run ON the
Cray THROUGH the network (via the X Window System). I usually
recommend running it on a J90 or on T3E command PE if either is
available. Even then, the distance/bandwidth between many Cray
mainframe users and the Cray itself often makes this tool slow and
hard to use.
Having said that, the tool itself is very good for many of the
purposes you desire. "xbrowse" has an "application mode" in which
every source file it sees is considered part of the same application;
when giving information in application mode, xbrowse tries to
integrate all available source information. It also has a "file
mode" (application mode set to "Off") which is less ambitious.
"cflist" is generates listing report files for the f90 compiler
when the "-r" option is used. The "cflist" feature is command in
its own right; its output can be configured through options; on the
f90 command line you can pass options to cflist with the option
f90 -Wr" cflist_options " ...
> The missing tool I ran into today was something to generate a
> listing of what routines are called by every routine in a program
> (known as a "who calls" list, among other names).
In xbrowse there are two possible features for you to check out. The
"Application Call Tree" shows the application's static calling tree.
The "Application Call/Caller Tree" shows one "current" procedure in
the center of the graph with "fan-in" from the left indicating the
names of procedures that call the current procedure and "fan-out"
to the right indicating the names of procedures called by the current
procedure.
In cflist there is a cross-reference listing capability.
> Does said tool handle disambiguating generics?
Yes. Both xbrowse and cflist use the convention:
actual_name (generic_name_or_operator)
> Does it handle
> modules?
Yes. Both tools use the convention:
module_name.name_from_module
> Does it handle the => renaming capability of USE?
Yes. Both tools use the convention:
module_name.name_from_module (local_name)
If a generic is renamed, the generic name from the module is cut out:
module_name.actual_name_from_module (local_generic_name)
> Does it handle
> library archives?
No. Both xbrowse and cflist work directly from source. They can
infer that a procedure is "intrinsic" or "external" (to the
application source, but they do not attempt to go any further.
Having said that the "ar" and "bld" library archival tools both have
a "contents" feature, which could be used to create a shell script to
locate individual procedures in your library path [1].
> Can it tell which of multiple definitions of a routine in
> different object files/libraries will be included by the linker?
No. Only that multiple definitions exist if source is available
both. Having said that, the Cray loaders (ld/segldr/mppldr/mppld/cld)
all give you that feedback at load time. Or you could build that
function into a script like the one mentioned above [1].
> If I get any helpful responses, I'll be both surprised and eternally grateful.
I hope this was helpful.
-------- Cray Research --------- Roger Glover
-- A Silicon Graphics Company -- http://home.cray.com/~glover
[1] I will follow up with such a script. What I have now works, but I am
trying to bullet-proof it a little more.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|