forked from OSchip/llvm-project
Context is allocated just a few lines above. Don't check if it is null.
llvm-svn: 241373
This commit is contained in:
parent
a4b2733c86
commit
a88a196f04
|
@ -130,41 +130,35 @@ void IntelJITEventListener::NotifyObjectEmitted(
|
|||
// Build the function loaded notification message
|
||||
iJIT_Method_Load FunctionMessage =
|
||||
FunctionDescToIntelJITFormat(*Wrapper, Name->data(), Addr, Size);
|
||||
if (Context) {
|
||||
DILineInfoTable Lines = Context->getLineInfoForAddressRange(Addr, Size);
|
||||
DILineInfoTable::iterator Begin = Lines.begin();
|
||||
DILineInfoTable::iterator End = Lines.end();
|
||||
for (DILineInfoTable::iterator It = Begin; It != End; ++It) {
|
||||
LineInfo.push_back(DILineInfoToIntelJITFormat((uintptr_t)Addr,
|
||||
It->first,
|
||||
It->second));
|
||||
}
|
||||
if (LineInfo.size() == 0) {
|
||||
FunctionMessage.source_file_name = 0;
|
||||
FunctionMessage.line_number_size = 0;
|
||||
FunctionMessage.line_number_table = 0;
|
||||
} else {
|
||||
// Source line information for the address range is provided as
|
||||
// a code offset for the start of the corresponding sub-range and
|
||||
// a source line. JIT API treats offsets in LineNumberInfo structures
|
||||
// as the end of the corresponding code region. The start of the code
|
||||
// is taken from the previous element. Need to shift the elements.
|
||||
|
||||
LineNumberInfo last = LineInfo.back();
|
||||
last.Offset = FunctionMessage.method_size;
|
||||
LineInfo.push_back(last);
|
||||
for (size_t i = LineInfo.size() - 2; i > 0; --i)
|
||||
LineInfo[i].LineNumber = LineInfo[i - 1].LineNumber;
|
||||
|
||||
SourceFileName = Lines.front().second.FileName;
|
||||
FunctionMessage.source_file_name = const_cast<char *>(SourceFileName.c_str());
|
||||
FunctionMessage.line_number_size = LineInfo.size();
|
||||
FunctionMessage.line_number_table = &*LineInfo.begin();
|
||||
}
|
||||
} else {
|
||||
DILineInfoTable Lines = Context->getLineInfoForAddressRange(Addr, Size);
|
||||
DILineInfoTable::iterator Begin = Lines.begin();
|
||||
DILineInfoTable::iterator End = Lines.end();
|
||||
for (DILineInfoTable::iterator It = Begin; It != End; ++It) {
|
||||
LineInfo.push_back(
|
||||
DILineInfoToIntelJITFormat((uintptr_t)Addr, It->first, It->second));
|
||||
}
|
||||
if (LineInfo.size() == 0) {
|
||||
FunctionMessage.source_file_name = 0;
|
||||
FunctionMessage.line_number_size = 0;
|
||||
FunctionMessage.line_number_table = 0;
|
||||
} else {
|
||||
// Source line information for the address range is provided as
|
||||
// a code offset for the start of the corresponding sub-range and
|
||||
// a source line. JIT API treats offsets in LineNumberInfo structures
|
||||
// as the end of the corresponding code region. The start of the code
|
||||
// is taken from the previous element. Need to shift the elements.
|
||||
|
||||
LineNumberInfo last = LineInfo.back();
|
||||
last.Offset = FunctionMessage.method_size;
|
||||
LineInfo.push_back(last);
|
||||
for (size_t i = LineInfo.size() - 2; i > 0; --i)
|
||||
LineInfo[i].LineNumber = LineInfo[i - 1].LineNumber;
|
||||
|
||||
SourceFileName = Lines.front().second.FileName;
|
||||
FunctionMessage.source_file_name =
|
||||
const_cast<char *>(SourceFileName.c_str());
|
||||
FunctionMessage.line_number_size = LineInfo.size();
|
||||
FunctionMessage.line_number_table = &*LineInfo.begin();
|
||||
}
|
||||
|
||||
Wrapper->iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED,
|
||||
|
|
Loading…
Reference in New Issue