Modifying debug information through llvm pass

Hi All,

I want to change debug information of an llvm instruction so that the modified debug info is subsequently passed to executable binary. So if I use “addr2line” utility on the binary, it will return my modified debug information.

I’ve tried to change by using the following code snippet:

MDNode *N = Inst->getMetadata(“dbg”);
DebugLoc Loc = DebugLoc::get(newLine, newCol, N);
Inst->setDebugLoc(Loc);

I read the DebugLoc back by using

const DebugLoc D = Inst->getDebugLoc();
unsigned Line = D.getLine();
outs() << Line <<“\n”;

But I can’t set the debug info correctly. How can I change the debug info correctly through llvm pass?

Thanks
Riyad

Hi All,

I want to change debug information of an llvm instruction so that the modified debug info is subsequently passed to executable binary. So if I use "addr2line" utility on the binary, it will return my modified debug information.

I've tried to change by using the following code snippet:

MDNode *N = Inst->getMetadata("dbg");
DebugLoc Loc = DebugLoc::get(newLine, newCol, N);

Your use of N looks sketchy here. The third argument of DebugLoc::get() is supposed to be the scope of the location, so you probably want
  Inst->getDebugLoc().getScope()
there?

-- adrian

Hi All,

I want to change debug information of an llvm instruction so that the modified debug info is subsequently passed to executable binary. So if I use "addr2line" utility on the binary, it will return my modified debug information.

I've tried to change by using the following code snippet:

MDNode *N = Inst->getMetadata("dbg");
DebugLoc Loc = DebugLoc::get(newLine, newCol, N);

Your use of N looks sketchy here. The third argument of DebugLoc::get() is supposed to be the scope of the location, so you probably want
   Inst->getDebugLoc().getScope()
there?

Thanks for pointing that out. It worked.

Thanks
Riyad