}
class FilenameCache {
- // Holds the filename of each CompileUnit, so that we can pass the
+ // Holds the filename of each Scope, so that we can pass the
// pointer into oprofile. These char*s are freed in the destructor.
DenseMap<MDNode*, char*> Filenames;
public:
- const char *getFilename(MDNode *CompileUnit) {
- char *&Filename = Filenames[CompileUnit];
+ const char *getFilename(MDNode *Scope) {
+ char *&Filename = Filenames[Scope];
if (Filename == NULL) {
- DICompileUnit CU(CompileUnit);
- Filename = strdup(CU.getFilename());
+ DIScope S(Scope);
+ Filename = strdup(S.getFilename());
}
return Filename;
}
Result.vma = Address;
const DebugLocTuple &tuple = MF.getDebugLocTuple(Loc);
Result.lineno = tuple.Line;
- Result.filename = Filenames.getFilename(tuple.CompileUnit);
+ Result.filename = Filenames.getFilename(tuple.Scope);
DEBUG(errs() << "Mapping " << reinterpret_cast<void*>(Result.vma) << " to "
<< Result.filename << ":" << Result.lineno << "\n");
return Result;