Assorted debugger upgrades and fixes + changed DolphinWX project not to depend on its plugins

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@169 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
hrydgard
2008-08-10 18:21:16 +00:00
parent 4cec78a13b
commit f9019d0ad3
14 changed files with 115 additions and 36 deletions

View File

@ -1144,6 +1144,8 @@ namespace Gen
// WARNING not REX compatible
void PSRAW(X64Reg reg, int shift) {
if (reg > 7)
PanicAlert("The PSRAW-emitter does not support regs above 7");
Write8(0x66);
Write8(0x0f);
Write8(0x71);
@ -1153,12 +1155,25 @@ namespace Gen
// WARNING not REX compatible
void PSRAD(X64Reg reg, int shift) {
if (reg > 7)
PanicAlert("The PSRAD-emitter does not support regs above 7");
Write8(0x66);
Write8(0x0f);
Write8(0x72);
Write8(0xE0 | reg);
Write8(shift);
}
void PSHUFB(X64Reg dest, OpArg arg) {
INT3(); //still untested
Write8(0x66);
arg.WriteRex(false);
Write8(0x0f);
Write8(0x38);
Write8(0x00);
arg.WriteRest(0);
}
void PAND(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0xDB, true, dest, arg);}
void PANDN(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0xDF, true, dest, arg);}
void PXOR(X64Reg dest, OpArg arg) {WriteSSEOp(64, 0xEF, true, dest, arg);}
@ -1230,7 +1245,7 @@ namespace Gen
// Don't really need to do anything
#elif defined(_M_X64)
#if _WIN32
int stacksize = ((maxCallParams+1)&~1)*8 + 8;
int stacksize = ((maxCallParams + 1) & ~1)*8 + 8;
// Set up a stack frame so that we can call functions
// TODO: use maxCallParams
SUB(64, R(RSP), Imm8(stacksize));

View File

@ -493,6 +493,7 @@ namespace Gen
void PMINUB(X64Reg dest, OpArg arg);
void PMOVMSKB(X64Reg dest, OpArg arg);
void PSHUFB(X64Reg dest, OpArg arg);
namespace Util
{

View File

@ -20,6 +20,7 @@ public:
virtual void setPC(unsigned int /*address*/) {}
virtual void step() {}
virtual void runToBreakpoint() {}
virtual void insertBLR(unsigned int address) {}
virtual int getColor(unsigned int /*address*/){return 0xFFFFFFFF;}
virtual std::string getDescription(unsigned int /*address*/) = 0;
};

View File

@ -70,7 +70,12 @@ void PPCDebugInterface::clearAllBreakpoints() {}
void PPCDebugInterface::toggleBreakpoint(unsigned int address)
{
CBreakPoints::IsAddressBreakPoint(address)?CBreakPoints::RemoveBreakPoint(address):CBreakPoints::AddBreakPoint(address);
CBreakPoints::IsAddressBreakPoint(address) ? CBreakPoints::RemoveBreakPoint(address) : CBreakPoints::AddBreakPoint(address);
}
void PPCDebugInterface::insertBLR(unsigned int address)
{
Memory::Write_U32(0x4e800020, address);
}
int PPCDebugInterface::getColor(unsigned int address)

View File

@ -22,6 +22,7 @@ public:
virtual void setPC(unsigned int address);
virtual void step() {}
virtual void runToBreakpoint();
virtual void insertBLR(unsigned int address);
virtual int getColor(unsigned int address);
virtual std::string getDescription(unsigned int address);
};

View File

@ -884,11 +884,14 @@ bool IsRAMAddress(const u32 addr)
case 0x00:
case 0x80:
case 0xC0:
return true;
if ((addr & 0x1FFFFFFF) < RAM_SIZE)
return true;
else
return false;
case 0x10:
case 0x90:
case 0xD0:
if (Core::g_CoreStartupParameter.bWii)
if (Core::g_CoreStartupParameter.bWii && (addr & 0x1FFFFFFF) < EXRAM_SIZE)
return true;
else
return false;

View File

@ -623,10 +623,13 @@ void PPCAnalyst::FindFunctionsFromBranches(u32 startAddr, u32 endAddr)
{
if (instr.LK) //bl
{
u32 target = SignExt26(instr.LI<<2);
u32 target = SignExt26(instr.LI << 2);
if (!instr.AA)
target += addr;
PPCAnalyst::AddFunction(target);
if (Memory::IsRAMAddress(target))
{
PPCAnalyst::AddFunction(target);
}
}
}
break;

View File

@ -186,8 +186,8 @@ GekkoOPTemplate primarytable[] =
{54, CInterpreter::stfd, Jit64::stfd, {"stfd", OPTYPE_STOREFP, 0}},
{55, CInterpreter::stfdu, Jit64::Default, {"stfdu", OPTYPE_STOREFP, 0}},
{46, CInterpreter::lmw, Jit64::lmw, {"lmw", OPTYPE_SYSTEM, 0}},
{47, CInterpreter::stmw, Jit64::stmw, {"stmw", OPTYPE_SYSTEM, 0}},
{46, CInterpreter::lmw, Jit64::lmw, {"lmw", OPTYPE_SYSTEM, 0, 10}},
{47, CInterpreter::stmw, Jit64::stmw, {"stmw", OPTYPE_SYSTEM, 0, 10}},
{56, CInterpreter::psq_l, Jit64::psq_l, {"psq_l", OPTYPE_PS, 0}},
{57, CInterpreter::psq_lu, Jit64::psq_l, {"psq_lu", OPTYPE_PS, 0}},

View File

@ -29,6 +29,7 @@ enum
IDM_COPYADDRESS,
IDM_COPYHEX,
IDM_COPYCODE,
IDM_INSERTBLR,
IDM_RUNTOHERE,
IDM_DYNARECRESULTS,
};
@ -183,6 +184,13 @@ void CCodeView::OnPopupMenu(wxCommandEvent& event)
}
break;
case IDM_INSERTBLR:
{
debugger->insertBLR(selection);
redraw();
break;
}
case IDM_DYNARECRESULTS:
{
// CDynaViewDlg::ViewAddr(selection);
@ -210,6 +218,7 @@ void CCodeView::OnMouseUpR(wxMouseEvent& event)
menu.Append(IDM_COPYHEX, wxString::FromAscii("Copy &hex"));
#endif
menu.Append(IDM_RUNTOHERE, _T("&Run To Here"));
menu.Append(IDM_INSERTBLR, wxString::FromAscii("Insert &blr"));
//menu.Append(IDM_DYNARECRESULTS, "Copy &address");
PopupMenu(&menu);
event.Skip(true);

View File

@ -67,6 +67,8 @@ BEGIN_EVENT_TABLE(CCodeWindow, wxFrame)
EVT_MENU(IDM_MEMORYWINDOW, CCodeWindow::OnToggleMemoryWindow)
EVT_MENU(IDM_SCANFUNCTIONS, CCodeWindow::OnSymbolsMenu)
EVT_MENU(IDM_LOADMAPFILE, CCodeWindow::OnSymbolsMenu)
EVT_MENU(IDM_SAVEMAPFILE, CCodeWindow::OnSymbolsMenu)
// toolbar
EVT_MENU(IDM_DEBUG_GO, CCodeWindow::OnCodeStep)
EVT_MENU(IDM_STEP, CCodeWindow::OnCodeStep)
@ -261,14 +263,51 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
// TODO: disable menu items instead :P
return;
}
wxString path;
switch (event.GetId())
{
case IDM_SCANFUNCTIONS:
PPCAnalyst::FindFunctions(0x80003100, 0x80400000);
PPCAnalyst::LoadFuncDB("data/totaldb.dsy");
PPCAnalyst::LoadFuncDB("Data/totaldb.dsy");
Debugger::GetFromAnalyzer();
NotifyMapLoaded();
break;
case IDM_LOADMAPFILE:
path = wxFileSelector(
_T("Select the mapfile to load"),
wxEmptyString, wxEmptyString, wxEmptyString,
wxString::Format
(
_T("Map files (*.map)|*.map|All files (%s)|%s"),
wxFileSelectorDefaultWildcardStr,
wxFileSelectorDefaultWildcardStr
),
wxFD_OPEN | wxFD_FILE_MUST_EXIST,
this);
if (!path)
{
return;
}
Debugger::LoadSymbolMap(path.c_str());
break;
case IDM_SAVEMAPFILE:
path = wxFileSelector(
_T("Name your mapfile"),
wxEmptyString, wxEmptyString, wxEmptyString,
wxString::Format
(
_T("Map files (*.map)|*.map|All files (%s)|%s"),
wxFileSelectorDefaultWildcardStr,
wxFileSelectorDefaultWildcardStr
),
wxFD_SAVE,
this);
if (!path)
{
return;
}
Debugger::SaveSymbolMap(path.c_str());
break;
}
}
@ -434,6 +473,11 @@ void CCodeWindow::OnSymbolListChange(wxCommandEvent& event)
}
}
void CCodeWindow::OnSymbolListContextMenu(wxContextMenuEvent& event)
{
int index = symbols->GetSelection();
}
void CCodeWindow::OnCallstackListChange(wxCommandEvent& event)
{

View File

@ -79,6 +79,8 @@ class CCodeWindow
IDM_BREAKPOINTWINDOW,
IDM_MEMORYWINDOW,
IDM_SCANFUNCTIONS,
IDM_LOADMAPFILE,
IDM_SAVEMAPFILE,
};
enum
@ -109,6 +111,7 @@ class CCodeWindow
DECLARE_EVENT_TABLE()
void OnSymbolListChange(wxCommandEvent& event);
void OnSymbolListContextMenu(wxContextMenuEvent& event);
void OnCallstackListChange(wxCommandEvent& event);
void OnCodeStep(wxCommandEvent& event);

View File

@ -379,7 +379,6 @@ CFrame::OnOpen(wxCommandEvent& WXUNUSED (event))
),
wxFD_OPEN | wxFD_PREVIEW | wxFD_FILE_MUST_EXIST,
this);
if (!path)
{
return;