debug information for functions

Suppose I have fun.h as:

static void fun() {

  int a =10;

}

Now I have two files foo.c and goo.c as

foo.c :

#include "fun.h"

void foo()

{

  fun();

}

goo.c:

#include "fun.h"

void goo()

{

  fun();

}

I get .bc files for foo.c and foo.bc through clang. Now I run llvm-ld
with -disable-opt for foo.bc and goo.bc. In the resulting .bc files, one
of the two functions fun, is renamed to fun<number>. There are two
llvm.dbg.subprogram descriptors created for the two fun functions. Both
have name foo . So there is no way to know which descriptor represents
which function. I am trying to get this information in assembly printer.

Proposed solution : llvm.dbg.subprogram.type should have a reference to
function is represents. This is in the same way as
llvm.dbg.global_variable.type has a reference to global variable it
represents.

Thanks

Vasudev

I would assume this is similar to the problem of dealing with structure tags, and I guess your proposal is along lines of the same solution right?

A.

What is the use of this info ? The descriptor includes enough location
info (thru func.start) and the display name for static functions.

I get .bc files for foo.c and foo.bc through clang. Now I run llvm-ld
with -disable-opt for foo.bc and goo.bc. In the resulting .bc files,

one

of the two functions fun, is renamed to fun<number>. There are two
llvm.dbg.subprogram descriptors created for the two fun functions.

Both

have name foo . So there is no way to know which descriptor represents
which function. I am trying to get this information in assembly

printer.

What is the use of this info ? The descriptor includes enough location
info (thru func.start) and the display name for static functions.