Call Host_NotifyMapLoaded when clearing g_symbolDB
Otherwise DolphinQt will have a stale symbol list and you can get nullptr dereferences when trying to use it.
This commit is contained in:
parent
d9999f406b
commit
8fd6f8f6e9
|
@ -42,6 +42,11 @@ void SymbolDB::List()
|
||||||
INFO_LOG(OSHLE, "%zu functions known in this program above.", m_functions.size());
|
INFO_LOG(OSHLE, "%zu functions known in this program above.", m_functions.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SymbolDB::IsEmpty() const
|
||||||
|
{
|
||||||
|
return m_functions.empty();
|
||||||
|
}
|
||||||
|
|
||||||
void SymbolDB::Clear(const char* prefix)
|
void SymbolDB::Clear(const char* prefix)
|
||||||
{
|
{
|
||||||
// TODO: honor prefix
|
// TODO: honor prefix
|
||||||
|
|
|
@ -78,6 +78,7 @@ public:
|
||||||
|
|
||||||
const XFuncMap& Symbols() const { return m_functions; }
|
const XFuncMap& Symbols() const { return m_functions; }
|
||||||
XFuncMap& AccessSymbols() { return m_functions; }
|
XFuncMap& AccessSymbols() { return m_functions; }
|
||||||
|
bool IsEmpty() const;
|
||||||
void Clear(const char* prefix = "");
|
void Clear(const char* prefix = "");
|
||||||
void List();
|
void List();
|
||||||
void Index();
|
void Index();
|
||||||
|
|
|
@ -383,7 +383,11 @@ bool CBoot::BootUp(std::unique_ptr<BootParameters> boot)
|
||||||
{
|
{
|
||||||
SConfig& config = SConfig::GetInstance();
|
SConfig& config = SConfig::GetInstance();
|
||||||
|
|
||||||
g_symbolDB.Clear();
|
if (!g_symbolDB.IsEmpty())
|
||||||
|
{
|
||||||
|
g_symbolDB.Clear();
|
||||||
|
UpdateDebugger_MapLoaded();
|
||||||
|
}
|
||||||
|
|
||||||
// PAL Wii uses NTSC framerate and linecount in 60Hz modes
|
// PAL Wii uses NTSC framerate and linecount in 60Hz modes
|
||||||
VideoInterface::Preset(DiscIO::IsNTSC(config.m_region) ||
|
VideoInterface::Preset(DiscIO::IsNTSC(config.m_region) ||
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "Core/HLE/HLE.h"
|
#include "Core/HLE/HLE.h"
|
||||||
#include "Core/HW/DVD/DVDInterface.h"
|
#include "Core/HW/DVD/DVDInterface.h"
|
||||||
#include "Core/HW/SI/SI.h"
|
#include "Core/HW/SI/SI.h"
|
||||||
|
#include "Core/Host.h"
|
||||||
#include "Core/IOS/ES/ES.h"
|
#include "Core/IOS/ES/ES.h"
|
||||||
#include "Core/IOS/ES/Formats.h"
|
#include "Core/IOS/ES/Formats.h"
|
||||||
#include "Core/PatchEngine.h"
|
#include "Core/PatchEngine.h"
|
||||||
|
@ -724,7 +725,11 @@ void SConfig::SetRunningGameMetadata(const std::string& game_id, const std::stri
|
||||||
if (Core::IsRunning())
|
if (Core::IsRunning())
|
||||||
{
|
{
|
||||||
// TODO: have a callback mechanism for title changes?
|
// TODO: have a callback mechanism for title changes?
|
||||||
g_symbolDB.Clear();
|
if (!g_symbolDB.IsEmpty())
|
||||||
|
{
|
||||||
|
g_symbolDB.Clear();
|
||||||
|
Host_NotifyMapLoaded();
|
||||||
|
}
|
||||||
CBoot::LoadMapFromFilename();
|
CBoot::LoadMapFromFilename();
|
||||||
HLE::Reload();
|
HLE::Reload();
|
||||||
PatchEngine::Reload();
|
PatchEngine::Reload();
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "Core/HW/DVD/DVDInterface.h"
|
#include "Core/HW/DVD/DVDInterface.h"
|
||||||
#include "Core/HW/Memmap.h"
|
#include "Core/HW/Memmap.h"
|
||||||
#include "Core/HW/SystemTimers.h"
|
#include "Core/HW/SystemTimers.h"
|
||||||
|
#include "Core/Host.h"
|
||||||
#include "Core/PowerPC/PPCSymbolDB.h"
|
#include "Core/PowerPC/PPCSymbolDB.h"
|
||||||
#include "Core/PowerPC/PowerPC.h"
|
#include "Core/PowerPC/PowerPC.h"
|
||||||
|
|
||||||
|
@ -52,11 +53,16 @@ bool Load()
|
||||||
NOTICE_LOG(IOS, "Reinitialised hardware.");
|
NOTICE_LOG(IOS, "Reinitialised hardware.");
|
||||||
|
|
||||||
// Load symbols for the IPL if they exist.
|
// Load symbols for the IPL if they exist.
|
||||||
g_symbolDB.Clear();
|
if (!g_symbolDB.IsEmpty())
|
||||||
|
{
|
||||||
|
g_symbolDB.Clear();
|
||||||
|
Host_NotifyMapLoaded();
|
||||||
|
}
|
||||||
if (g_symbolDB.LoadMap(File::GetUserPath(D_MAPS_IDX) + "mios-ipl.map"))
|
if (g_symbolDB.LoadMap(File::GetUserPath(D_MAPS_IDX) + "mios-ipl.map"))
|
||||||
{
|
{
|
||||||
::HLE::Clear();
|
::HLE::Clear();
|
||||||
::HLE::PatchFunctions();
|
::HLE::PatchFunctions();
|
||||||
|
Host_NotifyMapLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
const PowerPC::CoreMode core_mode = PowerPC::GetMode();
|
const PowerPC::CoreMode core_mode = PowerPC::GetMode();
|
||||||
|
|
Loading…
Reference in New Issue