生成使用GCC与埃及全面的调用图(Generating a comprehensive callgr

2019-09-16 14:35发布

我想产生一个全面的调用图(完整的低级别调用到Linux,运行时,不少)。

我有静态编译“-fdump-RTL-展开”我的源文件并创建了RTL文件,这是我传给叫埃及PERL脚本(我相信是的Graphviz /点),并生成调用图的PDF文件。 这工作完全没有问题的。

除此之外,也有被制作成被越来越显示为内置的一些库调用。 我一直在寻找,看看是否有是调用图不被打印为,而是制作成库的实际调用的方法吗?

请让我知道,如果这个问题还不清楚。

http://i.imgur.com/sp58v.jpg

基本上,我试图避免产生调用图<内置>

有没有办法做到这一点 ?

-------- --------- CODE

#include <cilk/cilk.h>
#include <stdio.h>
#include <stdlib.h>

unsigned long int t0, t5;
unsigned int NOSPAWN_THRESHOLD = 32;

int fib_nospawn(int n)
{
  if (n < 2) 
    return n;
  else 
    {
      int x = fib_nospawn(n-1);
      int y = fib_nospawn(n-2);
      return x + y;
    }
}

// spawning fibonacci function
int fib(long int n)
{
  long int x, y;
  if (n < 2) 
    return n;
  else if (n <= NOSPAWN_THRESHOLD)
    {
      x = fib_nospawn(n-1);
      y = fib_nospawn(n-2);
      return x + y;
    }
  else 
    {
      x = cilk_spawn fib(n-1);
      y = cilk_spawn fib(n-2);
      cilk_sync;
      return x + y;
    }
}

int main(int argc, char *argv[])
{
  int n;
  long int result;
  long int exec_time;

  n = atoi(argv[1]);
  NOSPAWN_THRESHOLD = atoi(argv[2]);
  result = fib(n);

  printf("%ld\n", result);
  return 0;
}

我从源代码编译的Cilk的图书馆。

Answer 1:

我可能已经找到了部分解决的问题:

你需要通过下列选项来埃及

--include-external

这样就产生了稍微更全面的调用图,虽然仍是“看得见

http://i.imgur.com/GWPJO.jpg?1

任何人都可以提出,如果我在调用图获得更深入?



Answer 2:

您可以使用GCC VCG插件 :一个GCC插件,它可以在调试时,GCC被加载,以显示内部结构的图形。

gcc -fplugin=/path/to/vcg_plugin.so -fplugin-arg-vcg_plugin-cgraph foo.c

调用图是地方来存储所需的内部程序优化的数据。 所有的数据结构被分成三个部分: local_info ,尽管分析功能产生时, global_info即上汇编的端部的调用图的全球行走的结果和rtl_info通过RTL使用后端从已编译的功能的数据传播到他们的来电。



文章来源: Generating a comprehensive callgraph using GCC & Egypt