summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2017-07-25 16:16:35 +0100
committer Vas Crabb <vas@vastheman.com>2017-07-26 09:09:02 +1000
commitc55140ee1bbbbfa2699163389b65b916fa683fc4 (patch)
treebe58fb868736484c57b96e8a1a2d1f63ebf17feb
parent9b4b422ade102249c2ddccfca9cbdb011d964c0d (diff)
stop hotspot from crashing when you start running. (nw)
-rw-r--r--src/emu/debug/debugcpu.cpp59
1 files changed, 30 insertions, 29 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index 43f1f60cd5c..46ad9e04683 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -2794,41 +2794,42 @@ void debugger_cpu::watchpoint_check(address_space& space, int type, offs_t addre
m_wpdata = value_to_write;
// see if we match
- for (device_debug::watchpoint *wp = wplist[space.spacenum()]; wp != nullptr; wp = wp->next())
- if (wp->hit(type, address, size))
- {
- // halt in the debugger by default
- m_execution_state = EXECUTION_STATE_STOPPED;
-
- // if we hit, evaluate the action
- if (!wp->action().empty())
- m_machine.debugger().console().execute_command(wp->action(), false);
-
- // print a notification, unless the action made us go again
- if (m_execution_state == EXECUTION_STATE_STOPPED)
+ if (space.spacenum() < int(wplist.size()))
+ for (device_debug::watchpoint *wp = wplist[space.spacenum()]; wp != nullptr; wp = wp->next())
+ if (wp->hit(type, address, size))
{
- static const char *const sizes[] =
- {
- "0bytes", "byte", "word", "3bytes", "dword", "5bytes", "6bytes", "7bytes", "qword"
- };
- offs_t pc = space.device().safe_pcbase();
- std::string buffer;
+ // halt in the debugger by default
+ m_execution_state = EXECUTION_STATE_STOPPED;
+
+ // if we hit, evaluate the action
+ if (!wp->action().empty())
+ m_machine.debugger().console().execute_command(wp->action(), false);
- if (type & WATCHPOINT_WRITE)
+ // print a notification, unless the action made us go again
+ if (m_execution_state == EXECUTION_STATE_STOPPED)
{
- buffer = string_format("Stopped at watchpoint %X writing %s to %08X (PC=%X)", wp->index(), sizes[size], space.byte_to_address(address), pc);
- if (value_to_write >> 32)
- buffer.append(string_format(" (data=%X%08X)", u32(value_to_write >> 32), u32(value_to_write)));
+ static const char *const sizes[] =
+ {
+ "0bytes", "byte", "word", "3bytes", "dword", "5bytes", "6bytes", "7bytes", "qword"
+ };
+ offs_t pc = space.device().safe_pcbase();
+ std::string buffer;
+
+ if (type & WATCHPOINT_WRITE)
+ {
+ buffer = string_format("Stopped at watchpoint %X writing %s to %08X (PC=%X)", wp->index(), sizes[size], space.byte_to_address(address), pc);
+ if (value_to_write >> 32)
+ buffer.append(string_format(" (data=%X%08X)", u32(value_to_write >> 32), u32(value_to_write)));
+ else
+ buffer.append(string_format(" (data=%X)", u32(value_to_write)));
+ }
else
- buffer.append(string_format(" (data=%X)", u32(value_to_write)));
+ buffer = string_format("Stopped at watchpoint %X reading %s from %08X (PC=%X)", wp->index(), sizes[size], space.byte_to_address(address), pc);
+ m_machine.debugger().console().printf("%s\n", buffer.c_str());
+ space.device().debug()->compute_debug_flags();
}
- else
- buffer = string_format("Stopped at watchpoint %X reading %s from %08X (PC=%X)", wp->index(), sizes[size], space.byte_to_address(address), pc);
- m_machine.debugger().console().printf("%s\n", buffer.c_str());
- space.device().debug()->compute_debug_flags();
+ break;
}
- break;
- }
m_within_instruction_hook = false;
}