mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21420 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===-- RuntimeInfo.cpp - Compute and cache info about running program ----===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file was developed by the LLVM research group and is distributed under
 | 
						|
// the University of Illinois Open Source License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file implements the RuntimeInfo and related classes, by querying and
 | 
						|
// cachine information from the running inferior process.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "llvm/Debugger/InferiorProcess.h"
 | 
						|
#include "llvm/Debugger/ProgramInfo.h"
 | 
						|
#include "llvm/Debugger/RuntimeInfo.h"
 | 
						|
using namespace llvm;
 | 
						|
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
// StackFrame class implementation
 | 
						|
 | 
						|
StackFrame::StackFrame(RuntimeInfo &ri, void *ParentFrameID)
 | 
						|
  : RI(ri), SourceInfo(0) {
 | 
						|
  FrameID = RI.getInferiorProcess().getPreviousFrame(ParentFrameID);
 | 
						|
  if (FrameID == 0) throw "Stack frame does not exist!";
 | 
						|
 | 
						|
  // Compute lazily as needed.
 | 
						|
  FunctionDesc = 0;
 | 
						|
}
 | 
						|
 | 
						|
const GlobalVariable *StackFrame::getFunctionDesc() {
 | 
						|
  if (FunctionDesc == 0)
 | 
						|
    FunctionDesc = RI.getInferiorProcess().getSubprogramDesc(FrameID);
 | 
						|
  return FunctionDesc;
 | 
						|
}
 | 
						|
 | 
						|
/// getSourceLocation - Return the source location that this stack frame is
 | 
						|
/// sitting at.
 | 
						|
void StackFrame::getSourceLocation(unsigned &lineNo, unsigned &colNo,
 | 
						|
                                   const SourceFileInfo *&sourceInfo) {
 | 
						|
  if (SourceInfo == 0) {
 | 
						|
    const GlobalVariable *SourceDesc = 0;
 | 
						|
    RI.getInferiorProcess().getFrameLocation(FrameID, LineNo,ColNo, SourceDesc);
 | 
						|
    SourceInfo = &RI.getProgramInfo().getSourceFile(SourceDesc);
 | 
						|
  }
 | 
						|
 | 
						|
  lineNo = LineNo;
 | 
						|
  colNo = ColNo;
 | 
						|
  sourceInfo = SourceInfo;
 | 
						|
}
 | 
						|
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
// RuntimeInfo class implementation
 | 
						|
 | 
						|
/// materializeFrame - Create and process all frames up to and including the
 | 
						|
/// specified frame number.  This throws an exception if the specified frame
 | 
						|
/// ID is nonexistant.
 | 
						|
void RuntimeInfo::materializeFrame(unsigned ID) {
 | 
						|
  assert(ID >= CallStack.size() && "no need to materialize this frame!");
 | 
						|
  void *CurFrame = 0;
 | 
						|
  if (!CallStack.empty())
 | 
						|
    CurFrame = CallStack.back().getFrameID();
 | 
						|
 | 
						|
  while (CallStack.size() <= ID) {
 | 
						|
    CallStack.push_back(StackFrame(*this, CurFrame));
 | 
						|
    CurFrame = CallStack.back().getFrameID();
 | 
						|
  }
 | 
						|
}
 |