2010-01-29  Greg Clayton  <gclayton@apple.com>

	* MachProcess.cpp (MachProcess::PrepareForAttach): No longer use the
	SBSLaunchApplication macro from the SpringBoard.framework, use the actual
	function name SBSLaunchApplicationForDebugging.
	(MachProcess::CleanupAfterAttach): Ditto.
	(MachProcess::SBForkChildForPTraceDebugging): Ditto.
	(debugserver-entitlements.plist): Added the "seatbelt-profiles" entitlement
	so debugserver can be sandboxed.

2009-07-06  Greg Clayton  <gclayton@apple.com>

	* MachTask.cpp (MachTask::GetDYLDAllImageInfosAddress): Hack around bad
	kernel code that renamed the first member of the TASK_DYLD_INFO without
	any way to detect it has changed.

2009-06-29  Greg Clayton  <gclayton@apple.com>

	* DNB.cpp (GetAllInfosMatchingName): Correctly truncate process name string
	to MAXCOMLEN when searching kinfo_proc structs for process matches by name.
	* MachProcess.cpp (MachProcess::PrepareForAttach): Added logging when 
	attaching to a program by name.

2009-06-25  Greg Clayton  <gclayton@apple.com>

	* DNB.cpp (DNBProcessLaunch): Added a stat on the incoming path that we are
	about to launch to make sure the file exists. If the file doesn't, then an
	appropriate error string is returned. Also if we fail to get the task for
	our process ID, we return an error string right away instead of letting the
	debug session go for a little bit and then later failing after a few more
	packets.

2009-04-07  Jim Ingham  <jingham@apple.com>

    * RNBRemote.h: Add vAttachWait
	* RNBRemote.cpp (RNBRemote::CreatePacketTable): Add vattachwait.
	(RNBRemoteShouldCancelCallback): New function.
	(RNBRemote::HandlePacket_v): Handle vattachwait.
	* RNBSocket.cpp (RNBSocket::Read): Mark the connection as closed when the
	port goes away.
	* DNB.cpp (DNBProcessAttachByName): New function.
	(DNBProcessAttach): Make this handle catching the attach when done and
	dealing with timeout & return conditions.
	(GetAllInfos): New function.
	(GetAlInfosMatchingName): New function.
	(DNBProcessAttachWait): New function.
	DNB.h: Declare DNBProcessAttachByName, DNBProcessAttachWait, change 
	signature of DNBProcessAttach.
	* MachProcess.cpp (MachProcess::PrepareForAttach): New function.
	(MachProcess::CheckForProcess): New function.
	(MachProcess::CleanupAfterAttach): New function.
	(CopyBundleIDForPath): New function.
	(MachProcess::SBForkChildForPTraceDebugging): Convert to using 
	CopyBundleIDForPath.
	* MachProcess.h: Declare PrepareForAttach, CleanupAfterAttach and
	CheckForProcess.
    * DNBTimer.h (TimeOfDayLaterThan): New function.
	* test-remotenub.cpp (RNBRunLoopGetStartModeFromRemote): Rename from
	RNBRunLoopGetArgsFromRemote, and handle vattachwait.
	(RNBRunLoopLaunchAttaching): Code was moved from here into DNBProcessAttach.
	(StartListening): New function.
	(GetAllProcessInfos, GetAllProcessInfosMatchingName): Moved to 
	DNBProcess.cpp.
	(main): Handle attach waitfor, and make debugserver with only a host and
	port wait on commands from gdb.

2009-04-03  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.h (PacketEnum): Added enum for qShlibInfoAddr.
	* RNBRemote.cpp (RNBRemote::CreatePacketTable) Added the qShlibInfoAddr 
	packet definition to m_packets.
	(RNBRemote::GetPacket): Log when we run into an unimplemented packet.
	(RNBRemote::HandleReceivedPacket): Only log the packet when logging
	LOG_RNB_REMOTE.
	(RNBRemote::HandlePacket_q): Add support for the new qShlibInfoAddr packet.
	* DNB.h (DNBProcessGetSharedLibraryInfoAddress): New prototype.
	* DNB.cpp (DNBProcessGetSharedLibraryInfoAddress): New function.
	* MachTask.h (MachProcess::GetDYLDAllImageInfosAddress): New prototype.
	* MachTask.cpp (MachProcess::GetDYLDAllImageInfosAddress): New function.
	
2009-04-01  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (main): Display the detailed error message if any when
	attaching fails.

2009-03-25  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (RNBRunLoopGetArgsFromRemote): Cleaned up logging and
	removed time deltas form the messages.
	(RNBRunLoopLaunchAttaching): Ditto.
	(RNBRunLoopLaunchInferior): Ditto and also use new DNBProcessLaunch that
	takes an error string pointer.
	* RNBContext.h (class RNBContext): Removed the m_timer member.
	* RNBContext.cpp (RNBContext::StartProcessStatusThread): Cleaned up logging
	and removed time deltas form the messages.
	(RNBContext::ThreadFunctionProcessStatus): Ditto.
	* RNBSocket.h (class RNBSocket): Removed unused m_last_errno member and
	accessor functions.
	* RNBSocket.cpp (RNBSocket::Listen): Cleaned up logging  and
	removed time deltas form the messages.
	(RNBSocket::ConnectToService): Ditto.
	(RNBSocket::Read): Ditto.
	(RNBSocket::Write): Ditto.
	(RNBSocket::SaveErrno): Removed.
	(RNBSocket::ClosePort): Don't call RNBSocket::SaveErrno().
	* RNBRemote.cpp (RNBRemote::RNBRemote): Cleaned up logging  and
	removed time deltas form the messages.
	(RNBRemote::~RNBRemote): Ditto.
	(RNBRemote::SendPacket): Ditto.
	(RNBRemote::GetPacketPayload): Ditto.
	(RNBRemote::GetPacket): Ditto): Ditto.
	(RNBRemote::HandleAsyncPacket): Ditto.
	(RNBRemote::HandleReceivedPacket): Ditto.
	(RNBRemote::CommDataReceived): Ditto.
	* DNB.cpp (DNBProcessLaunch): Changed to take a eror string pointer with 
	size for more desciptive error reporting (instead of a uint32_t pointer).
	* DNB.h (DNBProcessLaunch): Ditto.
	* DNBError.cpp (DNBError::AsString): Now returns NULL if there is no error.
	* DNBError.h (DNBError::SetErrorString): New accessor to allow custom error
	strings.
	* arm/DNBArchImpl.cpp (DNBArchMachARM::GetGPRState): Improved logging.
	* MachProcess.cpp (MachProcess::SBForkChildForPTraceDebugging): Improved
	error messages when a file doesn't exist, or when unable to extract the
	CFBundleIdentifier.
	* PThreadEvent.cpp (class PThreadEvent): Commented out all logging calls.

2009-03-07  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (GetAllProcessInfosMatchingName): New function that
	returns matching kinfo_proc structs given a process name.
	(main): Enhanced the --attach option to be able to take a PROCNAME or
	a PID. Changed the --waitfor=PROCNAME option to ignore any existing 
	processes with PROCNAME so we only catch new process invocations.

2009-03-07  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.cpp (RNBRemote::HandlePacket_p): Use the correct get current
	thread function call so we get the correct thread registers.

2009-03-03  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (g_isatty): New global that gets set to non-zero if
	STDOUT is a TTY in the beginning of main.
	(RNBLogSTDOUT): New macro that logs to STDOUT if g_isatty is non-zero, else
	it logs to asl.
	(RNBLogSTDERR): New macro that logs to STDERR if g_isatty is non-zero, else
	it logs to asl.
	(RNBRunLoopGetArgsFromRemote): Use new RNBLogSTDOUT/RNBLogSTDERR macros.
	(GetAllProcessInfos): Get all process info structs for everything on the 
	system.
	(main): Implemented new --waitfor=NAME option to allow waiting for a process
	to run by polling the system processes. The new --waitfor-interval=N option
	allows fine control over the polling interval where N is the number of mirco
	seconds (usec) to wait between polls (defaults to 1000). The new 
	--waitfor-duration=N allows	a timeout in seconds to be specified when 
	waiting for a process (defaults	to infinite).
	
2009-03-02  Greg Clayton  <gclayton@apple.com>

	* DNBArchImpl.cpp (DNBArchMachARM::EvaluateNextInstructionForSoftwareBreakpointSetup):
	Take care of a case where no instructions execute in a Thumb IT block and
	the last of which is a branch.

2009-02-10  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.h (PacketEnum): Added 'detach' enumeration.
	(RNBRemote::HandlePacket_D): New member function prototype.
	* RNBRemote.cpp (RNBRemote::CreatePacketTable): Added detach support.
	(RNBRemote::HandlePacket_D): New function for detach support.

2009-02-10  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.cpp (RNBRemote::HandlePacket_UNIMPLEMENTED): Log this
	packet with the packet that is unimplemented.
	(RNBRemote::GetPacket): Call RNBRemote::HandlePacket_UNIMPLEMENTED()
	when we don't recognize a packet.
	(RNBRemote::HandleReceivedPacket): Don't reply to packets we don't
	recognize with unimplemented in this fucntion as that should have
	already been done for us in RNBRemote::GetPacket().

2009-02-10  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.h (PacketEnum): Added query_step_packet_supported.
	* RNBRemot.cpp (RNBRemote::CreatePacketTable): Added new 
	qStepPacketSupported packet.
	(RNBRemote::HandlePacket_q): Added support for the new
	"qStepPacketSupported" packet.
	(RNBRemote::HandlePacket_G): Some cleanup when reading registers
	to avoid spurious console logging.

2009-01-30  Greg Clayton  <gclayton@apple.com>

	* debugserver-entitlements.plist: Changed the entitlement 
	"run-invalid-allow" to "run-unsigned-code".

2009-01-23  Greg Clayton  <gclayton@apple.com>

	* DNBArchImpl.cpp (DNBArchMachARM::EvaluateNextInstructionForSoftwareBreakpointSetup): 
	Merged Yusuf's changes to make software single stepping work.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Call new 
	DNBResolveExecutablePath function to resolve executable paths.
	* DNB.h (DNBResolveExecutablePath): New function prototype.
	* DNB.cpp (DNBResolveExecutablePath): New function that will resolve
	relative paths and also executable paths for executables that aren't relative
	but yet are in the shell PATH environment variable.
	
2009-01-22  Greg Clayton  <gclayton@apple.com>

	* DNBArchImpl.h (class DBNArchMachARM): Renamed member variable 
	m_chained_hw_single_step_addr to m_hw_single_chained_step_addr. Added
	new member variables: m_sw_single_step_itblock_break_id, m_last_decode_pc,
	and m_sw_single_step_itblock_break_count. Renamed m_thumbStaticData to 
	m_last_decode_thumb, and renamed m_decodedInstruction to m_last_decode_arm.
	(DBNArchMachARM::DecodeITBlockInstructions): New prototype.
	(DBNArchMachARM::DecodeInstructionUsingDisassembler): New prototype.
    (DBNArchMachARM::BreakpointHit): New prototype.
	* DNBArchImpl.cpp (DNBArchMachARM::ThreadDidStop): Disable any of the
	many software single step breakpoints if any are set.
	(DNBArchMachARM::StepNotComplete): Changed renamed member accesses.
	(DNBArchMachARM::DecodeITBlockInstructions): New function for software 
	single stepping through Thumb IT blocks.
	(DNBArchMachARM::EnableHardwareSingleStep): Cleaned up logging.
	(DNBArchMachARM::ComputeNextPC): Ditto.
	(DNBArchMachARM::EvaluateNextInstructionForSoftwareBreakpointSetup): Now
	properly handles Thumb IT software single stepping.
	(DNBArchMachARM::SetSingleStepSoftwareBreakpoints): Ditto.
	(DNBArchMachARM::DecodeInstructionUsingDisassembler): New function.
	(DNBArchMachARM::BreakpointHit): New breakpoint callback function.
	
2009-01-21  Greg Clayton  <gclayton@apple.com>
	
	* MachProcess.cpp (MachProcess::PrivateResume): Set the process state before
	we actually resume so we are sure to get the events in the correct order.

2009-01-16  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.cpp (RNBRemote::HandlePacket_last_signal): Include only 
	registers which are to be expedited in the T packets.
	(RNBRemote::HandlePacket_p): Enable for all targets.
	(struct register_map_entry): Added an expedite member so we know which
	registers need to be sent up to the host with each stop reply packet.
	(register_map): Updated each array members' expedite member with an 
	appropriate value.

2009-01-16  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.cpp (RNBRemote::HandlePacket_s): Enabled the step command ("s"
	packet) for ARM now that libdebugnub.dylib can do both hardware and software
	single stepping.

2009-01-13  Greg Clayton  <gclayton@apple.com>
	
	*DNBArchImpl.cpp (bit): New function.
	(bits): New function.
	(DNBArchMachARM::ConditionPassed): Use new "bit" function.
	(DNBArchMachARM::ComputeNextPC): Use new "bit" function, remove inline
	assembly for "RSC" instruction so this compiles for armv7 (which defaults
	to thumb)
	(DNBArchMachARM::NumSupportedHardwareBreakpoints): Use new "bits" function.
	(DNBArchMachARM::NumSupportedHardwareWatchpoints): Use new "bits" function.

2009-01-12  Greg Clayton  <gclayton@apple.com>

	* DNBArch.h (DNBArchProtocol::NumSupportedHardwareBreakpoints()): Removed
	the "const" qualifier to allow arches to auto detect how many hardware 
	breakpoints they have.
	(DNBArchProtocol::NumSupportedHardwareWatchpoints()): Removed the "const" 
	qualifier to allow arches to auto detect how many hardware watchpoints they 
	have.
	* DNBArchImpl.h (DNBArchMachARM::NumSupportedHardwareBreakpoints()): Auto
	detect how many BRP pairs are avialable and disable for armv7 for the time
	being (rdar://problem/6372672).
	(DNBArchMachARM::NumSupportedHardwareWatchpoints()): Auto detect how many 
	WRP pairs are avialable and disable for armv7 for the time being 
	(rdar://problem/6372672).

2009-01-09  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (main): Filled in short argument versions for 
	--applist (-t) and --lockdown (-k) options.
	* DNBArchImpl.h (DNBArchMachARM::ConditionPassed): New protected
	member function.
	(DNBArchMachARM::ComputeNextPC): New protected member function.
	(DNBArchMachARM::EvaluateNextInstructionForSoftwareBreakpointSetup): New 
	protected member function.
	(DNBArchMachARM::m_thumbStaticData): New protected member variable.
	(DNBArchMachARM::m_decodedInstruction): New protected member variable.
	* DNBArchImpl.cpp (DNBArchMachARM::ThreadDidStop): Added extra code that
	will log and exit when we are verifying software single stepping (a 
	compile time option).
	(DNBArchMachARM::ConditionPassed): New function.
	(DNBArchMachARM::ComputeNextPC): New function.
	(DNBArchMachARM::EvaluateNextInstructionForSoftwareBreakpointSetup): New
	function.
	(DNBArchMachARM::SetSingleStepSoftwareBreakpoints): Added the guts of the
	software single stepping.
	(DNBArchMachARM::NumSupportedHardwareBreakpoints): Prepared for adding
	auto detection code.
	(DNBArchMachARM::NumSupportedHardwareWatchpoints): Prepared for adding
	auto detection code.

2008-12-11  Greg Clayton  <gclayton@apple.com>

	* DNB.h (DNBProcessWaitForEvent): Renamed to DNBProcessWaitForEvents.
	(DNBProcessSetEvents): Removed (deprecated).
	(DNBProcessGetWaitForResetMask): Removed (unused).
	(DNBProcessSetWaitForResetMask): Removed (unused).
	(DNBProcessInterruptEvents): New function prototype.
	* DNB.cpp (DNBProcessWaitForEvent): Renamed to DNBProcessWaitForEvents.
	(DNBProcessSetEvents): Removed (deprecated).
	(DNBProcessGetWaitForResetMask): Removed (unused).
	(DNBProcessSetWaitForResetMask): Removed (unused).
	(DNBProcessInterruptEvents): New function that can be used to 
	asynchronously interrupt infinite wait for events calls.
	RNBRemote.cpp (RNBRemote::HandlePacket_v): Call DNBProcessWaitForEvents.
	RNBContext.cpp (RNBContext::ThreadFunctionProcessStatus): Ditto.
	test-remotenub.cpp (RNBRunLoopLaunchInferior): Ditto.
	(RNBRunLoopLaunchAttaching): Ditto.

2008-12-11  Greg Clayton  <gclayton@apple.com>

	* DNB.cpp (GetProcessMap): Use new PTHREAD_MUTEX_LOCKER macro to ease
	debugging of deadlocks.
	(DNBProcessLaunch): Improved logging.
	(DNBProcessMemoryRead): Call MachProcess::ReadMemory so breakpoint
	opcodes can be removed from memory.
	(DNBProcessMemoryWrite): Call MachProcess::WriteMemory so that we work
	around enabled software breakpoint traps.
	* DNBLog.cpp (GetLogThreadedMutex): New function.
	(_DNBLogThreaded): Use new PTHREAD_MUTEX_LOCKER macro to ease
	debugging of deadlocks.
	(_DNBLogThreadedIf): Ditto.
	* DNBBreakpoint.h (DNBBreakpoint::IntersectsRange): New function.
	* DNBBreakpoint.cpp	(DNBBreakpointList::FindIDByAddress): Improved 
	logging.
	* MacOSX/MachThread.cpp (MachThread::MachThread): Improved logging.
	(MachThread::~MachThread): Ditto.
	(MachThread::Suspend): Ditto.
	(MachThread::Resume): Ditto.
	(MachThread::RestoreSuspendCount): Ditto.
	(MachThread::GetState): Use new PTHREAD_MUTEX_LOCKER macro to ease 
	debugging of deadlocks.
	(MachThread::SetState): Ditto.
	* MacOSX/MachVMMemory.cpp (MachVMMemory::Read): Improved logging.
	(MachVMMemory::Write): Ditto.
	(MachVMMemory::WriteRegion): Ditto.
	* MacOSX/MachProcess.cpp (MachProcess::GetState): Use new 
	PTHREAD_MUTEX_LOCKER macro to ease debugging of deadlocks.
	(MachProcess::SetState): Ditto.
	(MachProcess::Clear): Ditto.
	(MachProcess::PrivateResume): Ditto.
	(MachProcess::ReplyToAllExceptions): Ditto.
	(MachProcess::ExceptionMessageReceived): Ditto.
	(MachProcess::AppendSTDOUT): Ditto.
	(MachProcess::GetAvailableSTDOUT): Ditto.
	(MachProcess::ThreadFunctionSTDIO): Renamed from to 
	MachProcess::STDIOThread.
	(MachProcess::StartSTDIOThread): Improved logging.
	(MachProcess::CreateBreakpoint): Ditto.
	(MachProcess::CreateWatchpoint): Ditto.
	(MachProcess::DisableAllBreakpoints): Ditto.
	(MachProcess::DisableBreakpoint): Ditto.
	(MachProcess::DisableWatchpoint): Ditto.
	(MachProcess::EnableBreakpoint): Ditto.
	(MachProcess::EnableWatchpoint): Ditto.
	(MachProcess::LaunchForDebug): Ditto.
	(MachProcess::PosixSpawnChildForPTraceDebugging): Ditto.
	(MachProcess::Detach): Reset the running event bit after resuming prior
	to issuing the SIGSTOP to avoid a pause.
	(MachProcess::RemoveTrapsFromBuffer): New function that removes 
	breakpoint traps from a memory buffer.
	(MachProcess::ReadMemory): Read memory from the task, then removes any
	breakpoint traps prior to returning the buffer.
	(MachProcess::WriteMemory): Write memory and any needed data to the 
	breakpoint saved opcodes for any software breakpoint traps that are
	enabled.
	* MacOSX/MachProcess.h (MachProcess::ThreadFunctionException): Removed.
	(MachProcess::ThreadFunctionSTDIO): Renamed to MachProcess::STDIOThread().
	(MachProcess::RemoveTrapsFromBuffer): New function.
	* MacOSX/MachVMRegion.cpp (MachVMRegion::SetProtections): Improved 
	logging.
	(MachVMRegion::RestoreProtections): Ditto.
	(MachVMRegion::GetRegionForAddress): Ditto.
	* MacOSX/MachException.cpp (catch_mach_exception_raise_state): Improved
	logging.
	(catch_mach_exception_raise_state_identity): Ditto.
	(catch_mach_exception_raise): Ditto.
	(MachException::Message::Dump): Ditto.
	(MachException::Data::GetStopInfo): Ditto.
	(MachException::Message::Receive): Ditto.
	(MachException::Message::Reply): Ditto.
	(MachException::Data::Dump): Ditto.
	(MachException::PortInfo::Save): Ditto.
	(MachException::PortInfo::Restore): Ditto.
	* MacOSX/MachTask.cpp (MachTask::Suspend): Improved logging.
	(MachTask::Resume): Ditto.
	(MachTask::ReadMemory): Ditto.
	(MachTask::WriteMemory): Ditto.
	(MachTask::TaskPortForProcessID): Ditto.
	(MachTask::BasicInfo): Ditto.
	(MachTask::StartExceptionThread): Ditto.
	(MachTask::ShutDownExcecptionThread): Ditto and use pthread_cancel to
	interrupt the exception thread.
	(MachTask::ExceptionThread): Ditto and revert back to infinite timeout
	as pthread_cancel will break us out of infinite mach_msg receive calls.
	* MacOSX/MachThreadList.cpp	(MachThreadList::UpdateThreadList): Improved
	logging.
	(MachThreadList::CurrentThread): Use new PTHREAD_MUTEX_LOCKER macro to 
	ease debugging of deadlocks.
	* DNBTimer.h (DNBTimer::DNBTimer): Initialize the mutex with a recursive
	pthread.
	(DNBTimer::Reset): Use new PTHREAD_MUTEX_LOCKER macro to ease debugging 
	of deadlocks.
	(DNBTimer::TotalMicroSeconds): Ditto.
	(DNBTimer::GetTime): Ditto.
	(DNBTimer::ElapsedMicroSeconds): Ditto.
	(DNBTimer::GetTimeOfDay): New class function.
	* DNBError.cpp (DNBError::LogThreaded): Improved logging.
	* test-dbgnub.cpp	
	* PThreadMutex.h: Added the ability to debug deadlocks by defining
	DEBUG_PTHREAD_MUTEX_DEADLOCKS.
	* FunctionProfiler.cpp	
	* PThreadEvent.cpp (PThreadEvent::NewEventBit): Use new 
	PTHREAD_MUTEX_LOCKER macro to ease debugging of deadlocks.
	(PThreadEvent::FreeEventBits): Ditto.
	(PThreadEvent::GetEventBits): Ditto.
	(PThreadEvent::ReplaceEventBits): Ditto.
	(PThreadEvent::SetEvents): Ditto.
	(PThreadEvent::ResetEvents): Ditto.
	(PThreadEvent::WaitForSetEvents): Ditto.
	(PThreadEvent::WaitForEventsToReset): Ditto.

2008-12-05  Greg Clayton  <gclayton@apple.com>

	* DNBDefs.h (LOG_TASK): New log bit.
	* DNB.cpp (DNBProcessIsAlive): User newly abtracted MachTask class.
	(DNBProcessMemoryRead): Ditto.
	(DNBProcessMemoryWrite): Ditto.
	* DNBArchImpl.cpp (DNBArchMachARM::EnableHardwareSingleStep): Ditto.
	(DNBArchMachARM::SetSingleStepSoftwareBreakpoints) Ditto.
	* MachException.cpp (MachException::Message::Receive): Cleaned up logging
	so it doesn't always log timeout errors.
	(MachException::Message::Reply): Use abstracted MachTask class for any
	task related queries.
	(MachException::PortInfo::Save): Cleaned up logging.
	(MachException::PortInfo::Restore): Cleaned up logging and now return an
	error instead of the number of restored port infos.
	* MachProcess.cpp (class MachProcess): Abstracted out all of the task_t
	related stuff (suspend, resuyme, exception ports, exception thread, and 
	more) into a new class MachTask.
	(MachProcess::Task): Now returns a reference to a MachTask class.
	(MachProcess::Clear): Uses new abstracted MachTask class.
	(MachProcess::Detach): Ditto.
	(MachProcess::PrivateResume): Ditto.
	(MachProcess::DisableBreakpoint): Ditto.
	(MachProcess::ExceptionMessageReceived): Ditto.
	(MachProcess::ExceptionMessageBundleComplete): Ditto.
	(MachProcess::AttachForDebug): Ditto.
	(MachProcess::LaunchForDebug): Ditto.
	(MachProcess::SBLaunchForDebug): Ditto.
	(MachProcess::TaskIsValid): Removed (replaced by similar functionality
	in the new MachTask class).
	(MachProcess::ExceptionPort): Ditto.
	(MachProcess::ExceptionPortIsValid): Ditto.
	(MachProcess::StartExceptionThread): Ditto.
	(MachProcess::Suspend): Ditto.
	(MachProcess::TaskResume): Ditto.
	(MachProcess::TaskBasicInfo): Ditto.
	(MachProcess::TaskBasicInfo): Ditto.
	(MachProcess::ReadMemory): Ditto.
	(MachProcess::WriteMemory): Ditto.
	(MachProcess::ThreadFunctionException): Ditto.
	
2008-12-04  Greg Clayton  <gclayton@apple.com>

	* DNB.h (DNBProcessSetEvents): New API function prototype.
	* DNB.cpp (DNBProcessSetEvents): New API function.
	(DNBProcessHalt): Send our process a SIGINT instead of suspending
	the task.
	* DNBDefs.h (NUB_STATE_IS_STOPPED): Removed up duplicate entry in macro.
	(eEventPrcoessAsyncInterrupt): New prcoess event bit that allows async
	interrupting of infinite DNBProcessWaitForEvent() function calls.
	* MachException.cpp (MachException::Message::Receive): Improved logging.
	(MachException::Message::Reply): Improved logging.
	* MachProcess.h (MachProcess::TaskBasicInfo): New member and static 
	functions.
	* MachProcess.cpp (MachProcess::TaskIsValid): Use new TaskBasicInfo() 
	member function.
	(MachProcess::Resume): Removed the detach parameter from the PrivateResume()
	function call.
	(MachProcess::Kill): Added a absolute timeout pointer to allow callers to
	wait for the signal to be received if the timeout is non-NULL.
	(MachProcess::TaskBasicInfo): New member and static function.
	(MachProcess::TaskResume): New function that resumes the task by making sure
	the suspend count is correctly ref counted.
	(MachProcess::Detach): When detaching from a process make sure it is 
	stopped (SIGSTOP) first, then we can successfully detach. The exception
	thread now also properly exits.
	(MachProcess::PrivateResume): Call new TaskResume function, and removed the
	detach functionality.
	(MachProcess::DisableBreakpoint): Only notify the thread list that a 
	breakpoint has changed if the breakpoint is going to be removed.
	(MachProcess::ThreadFunctionException): Added a permanent 1 second timeout
	for each call to mach_msg() so we can exit the thread in the event that
	we detach from a process/task.
	* test-debugnub (main): Modified to show an example of how to detach using
	a signal_handler to asynchronously receive a SIGINT and properly interrupt
	and detach from a running process.

2008-11-26  Greg Clayton  <gclayton@apple.com>

	* DNBDefs.h (LOG_STEP): New logging define.
	* DNBError.cpp (DNBError::LogThreaded): If there is no error, then
	log with "success: " as a prefix instead of "error: ".
	* arm/DBNArchImpl.cpp (DNBArchMachARM::EnableHardwareSingleStep): Log using
	new LOG_STEP instead of LOG_BREAKPOINTS.
	(DNBArchMachARM::SetSingleStepSoftwareBreakpoints): Ditto.
	* MachException.cpp (MachException::Message::Dump): Log excetion header
	and reply header on two separate lines.
	* MachProcess.cpp (IsSBProcess): Check for NULL CFArrayRef returned from
	SBSCopyApplicationDisplayIdentifiers for SkankPhone.
	(MachProcess::Suspend): Check if process state is not running instead of
	having to receive an event after a timeout if one is given.
	(MachProcess::Detach): Deallocate the exception port when detaching and
	restore the inferior task exception ports prior to clearing and detaching.
	(MachProcess::PrivateResume): Grab the task's basic info and make sure we
	get the resume the correct number of times.
	(MachProcess::DisableBreakpoint): Removed unused variable opcode_restored
	and make sure the breakpoint is enabled before we start warning that
	our opcode wasn't there.
	* ppc/DBNArchImpl.cpp (DNBArchMachPPC::EnableHardwareSingleStep): Log 
	using LOG_STEP instead of LOAD_BREAKPOINTS.
	* RNBServices.cpp (IsSBProcess): Check for NULL CFArrayRef returned from
	SBSCopyApplicationDisplayIdentifiers for SkankPhone.
	
2008-11-26  Greg Clayton  <gclayton@apple.com>

	* MachProcess.h (MachProcess::Suspend): Now takes an optional absolute
	timeout that, if non-NULL, will case the function to return after the
	process has been suspended and is in a stopped state. If the timeout is
	NULL, then no waiting will occur.
	* MachProcess.cpp (MachProcess::Suspend): Ditto.
	(MachProcess::Detach): Now replies to all exceptions, un-suspends all
	threads and resumes the task.
	(MachProcess::ReplyToAllExceptions): New function.
	(MachProcess::PrivateResume): Now takes an additional parameter named
	detach that will do the right thing when detaching from a process.
	* DNBArchImpl.h (DNBArchMachI386::ThreadWillResume): Returns void.
	* DNBArchImpl.cpp (DNBArchMachI386::ThreadWillResume): Returns void.
	* RNBServices.cpp (ListApplications): #ifdef-ed for ARM only as it
	currently uses SpringBoard.
	(IsSBProcess): Ditto.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): #ifdef-ed around
	ARM parts so it compiles for i386.
	(main): Ditto.
	
2008-11-24  Greg Clayton  <gclayton@apple.com>

	* DNBArchProtocol.h (DNBArchProtocol::ThreadWillResume): Now returns void.
	* DNBArchImpl.cpp (DNBArchMachARM::ThreadWillResume): Returns void and
	has hollowed out support for software single step.
	(DNBArchMachARM::ThreadDidStop): Has a debug mode that uses hardware single
	step to verify software single step that can be enabled by defining
	DNB_ARCH_MACH_ARM_DEBUG_SW_STEP.
	(DNBArchMachARM::SetSingleStepSoftwareBreakpoints): New function.
	* DNBArchImpl.h (DNBArchMachARM::ThreadWillResume): Returns void.
	(DNBArchMachARM::SetSingleStepSoftwareBreakpoints): New prototype.
	(DNBArchMachARM::m_sw_single_step_next_pc): New member variable.
	(DNBArchMachARM::m_sw_single_step_break_id): New member variable.
	* MachThread.cpp (MachThread::ThreadWillResume): Now returns void.
	* MachThread.h (MachThread::ThreadWillResume): Now returns void.
	
2008-11-19  Greg Clayton  <gclayton@apple.com>

	* DNBError.h (FlavorType): Added SpringBoard error type for arm builds.
	* DNBError.cpp (DNBError::AsString): Now returns SpringBoard error strings
	if the error type is SpringBoard.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Set the error into 
	RNBContext as either a POSIX error or a SpringBoard error.
	* RNBContext.h (m_launch_status): Changed this member to be a DNBError
	instead of a uint32_t.
	(RNBContext::LaunchStatus): Now returns a reference to the DNBError object
	in m_launch_status.
	* RNBContext.cpp (RNBContext::LaunchStatusAsString): Let DNBError handle
	any error string descriptions, including SpringBoard errors.
	* RNBRemote.cpp (RNBRemote::HandlePacket_q): Use new error class in 
	RNBContext.
	(RNBRemote::HandlePacket_C): Return without an erroneous error when resuming
	a process with a signal.
	* DNBArch.h (DNBArchProtocol::StepNotComplete): New protocol function with
	default return value.
	* DNBArchImpl.cpp (DNBArchMachARM::StepNotComplete): New function.
	(DNBArchMachARM::EnableHardwareSingleStep): Handle hardware single stepping
	over 32 bit thumb instructions better so we always do a true instruction
	level single step.
	* MachProcess.cpp (MachProcess::ExceptionMessageBundleComplete): Now resumes
	if single stepping wasn't able to complete in a single run.
	* MachThread.cpp (MachThread::ShouldStop): Fills in new step_more parameter
	if stepping is not complete.
	* MachThreadList.cpp (MachThreadList::ShouldStop): Pass step_more parameter
	to each MachThread::ShouldStop call.
	
2008-11-13  Greg Clayton  <gclayton@apple.com>

	* MachProcess.cpp (MachProcess::PosixSpawnChildForPTraceDebugging): Don't 
	call posix_spawnattr_setbinpref_np when launching with posix_spawn on ARM 
	targets as it currently selects the incorrect slice due to multiple slices
	that contain the same cputype, yet they all have differing cpusubtypes.

2008-11-04  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.h (GetContinueThread): Don't return the current thread when
	the continue thread is zero or -1.
	* RNBRemote.cpp (RNBRemote::HandlePacket_c): Resume the process if we
	have no continue thread set.
	(RNBRemote::HandlePacket_s): Ditto.
	(RNBRemote::HandlePacket_C): Ditto unless a continue address is specified
	in which case we will only succeed if we have one thread when the continue
	with signal and address doesn't have a continue thread specified.
	(RNBRemote::HandlePacket_S): Ditto.
	* DNB.cpp (DNBProcessResumeWithSignal): New function.
	(DNBProcessResume): Added better logging.
	(DNBProcessHalt): Ditto.
	(DNBThreadResume): Ditto.
	(DNBThreadResumeWithSignal): Ditto.
	* DNB.h (DNBProcessResumeWithSignal): New prototype.
	* DNBError.cpp (DNBError::LogThreaded): New function.
	* DNBError.h (DNBError::LogThreaded): New prototype.
	* DNBLog.cpp (_DNBLogThreaded): Added sequence ID for threaded logs.
	(_DNBLogThreadedIf): Ditto.
	* MachException.cpp (MachException::Data::GetStopInfo): Use new SoftSignal()
	accessor.
	(MachException::Data::DumpStopReason): Ditto.
	(MachException::Message::Reply): Added better logging and log using the
	soft signal if our task matches that in the exception.
	(MachException::Data::Dump): Added better logging.
	* MachException.h (IsSoftSignal): Removed.
	(SoftSignal): New function that returns the soft signal in the exception
	data if there is one, or zero otherwise.
	* MachProcess.cpp (MachProcess::Suspend): Improved logging.
	(MachProcess::Resume): Ditto.
	(MachProcess::PrivateResume): Handle the case where the process is told
	to resume with a signal by matching the signal up to the thread that had
	the soft signal if no thread id is specified.
	* MachThread.cpp (MachThread::Suspend): Improved logging.
	(MachThread::Resume): Improved logging.
	(MachThread::RestoreSuspendCount): Improved logging.
	(MachThread::Resume): Improved logging.
	(MachThread::Dump): Improved logging.
	* MachThreadList.cpp (MachThreadList::Dump): Improved logging.
	
2008-10-22  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (RNBRunLoopMode): Added a new enum value
	eRNBRunLoopModeInferiorAttaching.
	(g_long_options): Added "--attach=PID" for attaching to existing processes
	and "--launch=(auto|posix|fork|springboard)" options.
	(RNBRunLoopLaunchInferior): Now launches process with new 
	nub_launch_flavor_t enum that can be overridden with the --launch option.
	(RNBRunLoopLaunchAttaching): New function for attaching to existing 
	processes.
	(main): Added command line option support for the "--attach" and "--launch" 
	options and added attach to pid support and better logging.
	* DNB.cpp/h: (DNBProcessLaunch): Added nub_launch_flavor_t and error 
	parameter for more precise control when launching processes.
	(DNBProcessSBLaunch): Removed function as launching with SpringBoard can 
	now be done using DNBProcessLaunch with launch_flavor being set to
	eLaunchTypeSpringBoard (arm only).
	(DNBProcessSBAttach): Removed function (SpringBoard processes are now auto
	detected in the MachProcess::AttachForDebug function on ARM).
	* DNBDefs.h (NUB_GENERIC_ERROR): New generic error definition.
	(nub_launch_flavor_t): New enumeration used for control over process 
	launching.
	* MachProcess.cpp (IsSBProcess): New function.
	(MachProcess::AttachForDebug): Removed flags parameter that was being used
	for SpringBoard flags and we now detect if a process belongs to SpringBoard
	by calling IsSBProcess.
	(MachProcess::LaunchForDebug): Now has launch parameter that tells it how
	to launch the inferior process and there is also an error code that gets 
	returned. This function can now launch using fork + exec, posix_spawn,
	or SpringBoard on ARM targets.
	(MachProcess::SBLaunchForDebug): Now uses DNBError reference instead of
	uint32_t pointer for the error code.
	(MachProcess::SBForkChildForPTraceDebugging): Ditto.

2008-10-22  Greg Clayton  <gclayton@apple.com>

	* MacOSX/arm/DNBArchImpl.cpp (DNBArchMachARM::GetRegisterValue): Set
	register value to a uint32 value instead of a float64 value for s0 - 
	s31.

2008-10-17  Greg Clayton  <gclayton@apple.com>

	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Don't listen for
	the qLaunchSuccess if we aren't doing a lockdown connnection.

2008-10-13  Greg Clayton  <gclayton@apple.com>

	* RNBRemote.h (class RNBRemote): Added m_watchpoints member.
	* DNB.cpp (DNBBreakpointSet): Added boolean hardware parameter for
	requesting that a hardware breakpoint be set.
	(DNBWatchpointSet): New function.
	(DNBWatchpointClear): New function.
	(DNBWatchpointGetHitCount): New function.
	(DNBWatchpointGetIgnoreCount): New function.
	(DNBWatchpointSetIgnoreCount): New function.
	(DNBWatchpointSetCallback): New function.
	(DNBWatchpointPrint): New function.
	* DNBRegisterInfo.cpp (DNBRegisterValueClass::Dump): Modified to emit
	a single DNBLog() call so there aren't multiple newlines when logging
	to ASL.
	* RNBContext.cpp (RNBContext::ThreadFunctionProcessStatus): Use new
	process state changed events.
	* DNBBreakpoint.h (class DNBBreakpoint): Removed m_state member and
	added m_tid, m_enabled, m_hw_preferred, m_is_watchpoint, m_watch_read,
	m_watch_write, and m_hw_index.
	(DNBBreakpoint::ThreadID()): New accessor.
	(DNBBreakpoint::IsEnabled()): New accessor.
	(DNBBreakpoint::SetEnabled()): New accessor.
	(DNBBreakpoint::IsWatchpoint()): New accessor.
	(DNBBreakpoint::IsBreakpoint()): New accessor.
	(DNBBreakpoint::SetIsWatchpoint()): New accessor.
	(DNBBreakpoint::WatchpointRead()): New accessor.
	(DNBBreakpoint::WatchpointWrite()): New accessor.
	(DNBBreakpoint::HardwarePreferred()): New accessor.
	(DNBBreakpoint::IsHardware()): New accessor.
	(DNBBreakpoint::GetHardwareIndex()): New accessor.
	(DNBBreakpoint::SetHardwareIndex()): New accessor.
	(DNBBreakpoint::ThreadID()): New accessor.
	(DNBBreakpoint::GetState()): Removed accessor.
	(DNBBreakpoint::SetState()): Removed accessor.
	(DNBBreakpoint::AddBreakpoint()): Renamed to Add().
	(DNBBreakpoint::RemoveBreakpoint()): Renamed to Remove().
	(DNBBreakpoint::FindBreakIDForAddress()): Renamed to FindIDByAddress().
	(DNBBreakpoint::ShouldStopAtBreakpoint()): Renamed to ShouldStop().
	(DNBBreakpoint::SetBreakpointCallback()): Renamed to SetCallback().
	(DNBBreakpoint::FindBreakpointWithAddress()): Renamed to 
	FindByAddress().
	(DNBBreakpoint::FindBreakpointWithBreakID()): Renamed to FindByID().
	(DNBBreakpoint::GetBreakpointAtIndex()): Renamed to GetByIndex().
	* FunctionProfiler.h: New header for subclass of DNBRuntimeAction.
	* RNBRemote.cpp (RNBRemote::HandlePacket_v): Use new process state 
	changed events.
	(RNBRemote::HandlePacket_z): Implement the hardware breakpoint and
	watchpoint commands z1, Z1, z2, Z2, z3 and Z3
	* PThreadEvent.h (PThreadEvent::GetEventBits): Made member function 
	const.
	(PThreadEvent::WaitForSetEvents): Ditto.
	(PThreadEvent::WaitForEventsToReset): Ditto.
	(PThreadEvent::WaitForResetAck): Ditto.
	(PThreadEvent::m_mutex): Made class member mutable.
	(PThreadEvent::m_set_condition): Made class member mutable.
	(PThreadEvent::m_reset_condition): New mutable class member.
	* ProfileObjectiveC.cpp
	* DNBArch.h (DNBArch::NotifyException): Now has default implementation
	that returns false.
	(DNBArch::NumSupportedHardwareBreakpoints): New virtual member 
	function with a default implementation.
	(DNBArch::NumSupportedHardwareWatchpoints): Ditto.
	(DNBArch::EnableHardwareBreakpoint): Ditto.
	(DNBArch::EnableHardwareWatchpoint): Ditto.
	(DNBArch::DisableHardwareBreakpoint): Ditto.
	(DNBArch::DisableHardwareWatchpoint): Ditto.
	* DNB.h (DNBBreakpointSet): New take a HARDWARE parameter that allows
	requests for setting hardware breakpoints.
	(DNBWatchpointSet): New function prototype.
	(DNBWatchpointClear): New function prototype.
	(DNBWatchpointGetHitCount): New function prototype.
	(DNBWatchpointGetIgnoreCount): New function prototype.
	(DNBWatchpointSetIgnoreCount): New function prototype.
	(DNBWatchpointSetCallback): New function prototype.
	(DNBWatchpointPrint): New function prototype.
	* MacOSX/arm/DNBArchImpl.cpp: Added hardware breakpoint and watchpoint
	support for ARM.
	(DNBArchMachARM::GetCPUType): New function.
	(DNBArchMachARM::DumpDBGState): New function.
	(DNBArchMachARM::GetDBGState): New function.
	(DNBArchMachARM::SetDBGState): New function.
	(DNBArchMachARM::EnableHardwareSingleStep): New function.
	(DNBArchMachARM::EnableHardwareBreakpoint): New function.
	(DNBArchMachARM::NotifyException): Removed.
	(DNBArchMachARM::DisableHardwareBreakpoint): New function.
	(DNBArchMachARM::EnableHardwareWatchpoint): New function.
	(DNBArchMachARM::DisableHardwareWatchpoint): New function.
	* MacOSX/MachThread.cpp (MachThread::Suspend): Added better logging.
	(MachThread::Resume): Ditto.
	(MachThread::RestoreSuspendCount): Ditto.
	(MachThread::Dump): Ditto.
	(MachThread::EnableHardwareBreakpoint): New function.
	(MachThread::EnableHardwareWatchpoint): New function.
	(MachThread::DisableHardwareBreakpoint): New function.
	(MachThread::DisableHardwareWatchpoint): New function.
	* MacOSX/MachThreadList.h (MachThreadList::GetLastError): Removed.
	(MachThread::EnableHardwareBreakpoint): New prototype.
	(MachThread::DisableHardwareBreakpoint): New prototype.
	(MachThread::EnableHardwareWatchpoint): New prototype.
	(MachThread::DisableHardwareWatchpoint): New prototype.
	(class MachThread): Remove m_err member variable.
	* MacOSX/ppc/DNBArchImpl.cpp (DNBArchMachPPC::GetCPUType) New 
	function.
	(DNBArchMachPPC::NotifyException): Removed.
	* MacOSX/ppc/DNBArchImpl.h (DNBArchMachPPC::NotifyException): Removed.
	* MacOSX/MachThread.h (MachThread::EnableHardwareBreakpoint): New 
	prototype.
	(MachThread::EnableHardwareWatchpoint): New prototype.
	(MachThread::DisableHardwareBreakpoint): New prototype.
	(MachThread::DisableHardwareWatchpoint): New prototype.
	(class MachThread): Renambed class member m_exception to 
	m_stop_exception.
	* MacOSX/MachProcess.cpp (MachProcess::SetState): Updated to use new
	process event enumerations.
	(MachProcess::PrivateResume): Added better logging.
	(MachProcess::CreateBreakpoint): Added bool HARDWARE parameter for 
	requesting hardware breakpoints.
	(MachProcess::CreateWatchpoint): New function.
	(MachProcess::DisableAllWatchpoints): New function.
	(MachProcess::DisableWatchpoint): New function.
	(MachProcess::DumpWatchpoint): New function.
	(MachProcess::EnableBreakpoint): Enabled breakpoints in hardware if
	requested and supported.
	(MachProcess::DisableBreakpoint): Disable hardware breakpoints if that
	is how they were set.
	(MachProcess::EnableWatchpoint): New function.
	(MachProcess::ExceptionMessageBundleComplete): Wait for the 
	eEventProcessRunningStateChanged event to be reset before changing 
	state to stopped to avoid race condition with very fast start/stops.
	(MachProcess::LaunchForDebug): Added posix_spawn support.
	(MachProcess::PosixSpawnChildForPTraceDebugging): New function.
	* MacOSX/i386/DNBArchImpl.cpp (DNBArchMachI386::GetCPUType): New
	function.
	* MacOSX/i386/DNBArchImpl.h (DNBArchMachI386::GetCPUType): New
	prototype.
	* MacOSX/MachProcess.h (PosixSpawnChildForPTraceDebugging): New
	prototype.
	* MacOSX/MachException.cpp (class MachException::ThreadMessage): 
	Renamed	class to MachException::Data.
	* MacOSX/MachThreadList.cpp (class MachThreadList): Removed m_err
	class member.
	(MachThreadList::EnableHardwareBreakpoint): New function.
	(MachThreadList::DisableHardwareBreakpoint): New function.
	(MachThreadList::EnableHardwareWatchpoint): New function.
	(MachThreadList::DisableHardwareWatchpoint): New function.
	* MacOSX/MachException.h (class MachException::ThreadMessage): 
	Renamed	class to MachException::Data.
	* DNBDefs.h (nub_watch_t): New typedef.
	(INVALID_NUB_HW_INDEX): New macro definition.
	(WATCH_TYPE_READ): New macro definition.
	(WATCH_TYPE_WRITE): New macro definition.
	(NUB_STATE_IS_RUNNING): New macro to see if state is a running state.
	(NUB_STATE_IS_STOPPED): New macro to see if state is a stopped state.
	(eEventProcessStateChanged): Deprecated.
	(eEventProcessRunningStateChanged): New process event state.
	(eEventProcessStoppedStateChanged): New process event state.
	(LOG_WATCHPOINTS): New macro definition for logging watchpoints.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Use new process
	event states.
	* FunctionProfiler.cpp: New class that allows single stepping through
	an address range for tracing exact call graphs.

2008-09-22  Greg Clayton  <gclayton@apple.com>

        * RNBRemote.h (GetContinueThread): If the continue thread is zero or
        -1 then return GetCurrentThread().
        * RNBRemote.cpp (m_packets): Made the vCont functions call 
        RNBRemote::HandlePacket_v().
        (RNBRemote::HandlePacket_H): Cleaned up whitespace.
        (RNBRemote::HandlePacket_last_signal): Return actual signal values for
        EXE_SOFTWARE/EXC_SOFT_SIGNAL mach exceptions.
        (RNBRemote::HandlePacket_v): Implemented the 'vCont?' and 'vCont;' 
        packets.
        (RNBRemote::HandlePacket_c): Handle the case where an address is 
        provided.
        (RNBRemote::HandlePacket_C): Implemented the continue with signal 
        including when an address is provided.
        (RNBRemote::HandlePacket_S): Implemented the step with signal 
        including when an address is provided.
        * DNB.cpp (DNBProcessResume): Pass 0 as the signal when resuming
        a process without specifying a thread.
        (DNBThreadResume): Pass 0 as the signal when resuming a specific thread.
        (DNBThreadResumeWithSignal): New function.
        * DNB.h (DNBThreadResumeWithSignal): New prototype.
        * MachException.h (MachException::Message::Reply): Added a signal
        parameter.
        * MachException.cpp (MachException::Message::Reply): Update the thread
        with the new SIGNAL parameter instead of always zero so signals can be
        passed on to programs.
        * MachProcess.h (MachProcess::Resume): Added a signal parameter.
        * MachProcess.h (MachProcess::PrivateResume): Added a signal parameter.
        * MachProcess.cpp (MachProcess::Resume): Pass new SIGNAL parameter to
        MachProcess::PrivateResume.
        * MachProcess.cpp (MachProcess::PrivateResume): Pass new SIGNAL 
        parameter to the mach exception reply.

2008-08-08  Greg Clayton  <gclayton@apple.com>

        * DNB.cpp (gProcessMap): Removed static C++ global.
        (GetProcessMap): New Function.
        (AddProcessToMap): New function.
        (RemoveProcessFromMap): New function.
        (GetProcessSP): Use new GetProcessMap function to get process list.

2008-07-30  Greg Clayton  <gclayton@apple.com>

        * debugserver-entitlements.plist (get-task-allow): Removed.
        (run-invalid-allow): Added boolean value set to TRUE.

2008-04-18  Greg Clayton  <gclayton@apple.com>

        * MachProcess.cpp (MachProcess::Task): Added getuid(), geteuid(), 
        getgid(), getegid() to the log message if task for pid fails.

2008-04-07  Greg Clayton  <gclayton@apple.com>

        * RNBContext.cpp (RNBContext::LaunchStatusAsString): Removed unused
        tmp_str variable.

2008-04-04  Greg Clayton  <gclayton@apple.com>

        * CFString.cpp/h (UTF8): Made a static function that can convert
        a CFStringRef to UTF8.

2008-04-04  Greg Clayton  <gclayton@apple.com>

        * test-remotenub.cpp (main): Make sure we exit after we send the 
        application list.

2008-04-04  Greg Clayton  <gclayton@apple.com>
        
        * RNBServices.h (IsSBProcess): New prototype;
        * RNBServices.cpp (IsSBProcess): New function that returns true it
        SpringBoard owns or knows about the process.
        * RNBRemote.cpp (RNBRemote::HandlePacket_v): Made attach work correctly.
        * DNB.cpp (DNBProcessSBAttach): New function for use when attaching to
        a process owned by SpringBoard.
        (DNBProcessAttach): Fixed an issue where a local was shadowing a 
        parameter.
        * DNB.h (DNBProcessSBAttach): New prototype.
        * MachProcess.cpp (MachProcess::AttachForDebug): AttachForDebug now
        takes some flags so it knows to enable SpringBoard functionality.
        * MachProcess.h (MachProcess::AttachForDebug): Added flags parameter
        to prototype.
        
2008-04-04  Greg Clayton  <gclayton@apple.com>

        * test-remotenub.cpp (RNBRunLoopGetArgsFromRemote): Handle the new
        attach packet and watch for connection being lost.
        (main): handle the --applist option when there we aren't using lockdown
        by printing the results to stdout and exiting with appropriate error code
        if we failed. Also handle the new prototype for ListApplications.
        * RNBServices.h (ListApplications): Change first parameter to be a std::string
        that will get the contents of the plist so we can use this for more than
        just lockdown.
        * RNBServices.cpp (ListApplications): Change first parameter to be a std::string
        that will get the contents of the plist so we can use this for more than
        just lockdown and also fixed the logic so we actually create a full list of
        applications instead of just overwriting the first entry.
        * RNBRemote.h (PacketEnum): Added a new 'vattach' enum for the "vAttach;PID"
        gdb remote command.
        (RNBRemote::HandlePacket_v): New prototype;
        * RNBRemote.cpp (RNBRemote::CreatePacketTable): add the vattach packet definition
        to m_packets.
        (RNBRemote::HandlePacket_v): New function that handles attach to a process.

2008-04-03  Jim Ingham  <jingham@apple.com>

	* RNBRemote.h: Add query_launch_success to packet enum.
	* RNBRemote.cpp (RNBRemote::CreatePacketTable_): Add query_launch_success.
	(HandlePacket_q): Handle query_launch_success.
	* DNB.cpp (DNBProcessSBLaunch): Pass in launch_retval.
	* DNB.h: Change prototype of DNBProcessSBLaunch to take launch_retval.
	* RNBContext.cpp (RNBContext::LaunchStatusAsString): New function.
	* RNBContext.h (RNBContext): Add m_launch_status & accessors.
	* macosx/MachProcess.cpp (MachProcess::SBLaunchForDebug): Pass launch_retval.
	(MachProcess::SBForkChildForPTraceDebugging): Accept & set launch_retval.
	* Macosx/MachProcess.h: Change prototypes of SBLaunchForDebug &
	ForkChildForPTraceDebugging to accept launch_retval.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Get the launch status and
	put it in the context, then wait for the qLaunchStatus packet.
	
2008-04-03  Greg Clayton  <gclayton@apple.com>

        * com.apple.debugserver.plist: Changed plist so debugserver
        runs as mobile user.
        * com.apple.debugserver.applist.plist: Ditto.

2008-04-03  Greg Clayton  <gclayton@apple.com>

        * MachProcess.cpp: (MachProcess::SBForkChildForPTraceDebugging): 
        Increased SBS application launch timeout to 30 seconds.

2008-03-27 Christopher Friesen <friesen@apple.com>

        * RNBServices.h: Pass tasks from SpringBoard as a plist
        * RNBServices.cpp: Ditto.
        * test-remotenub.cpp: added --applist flag
        * com.apple.debugserver.applist.plist: Agent plist

2008-03-17  Jim Ingham  <jingham@apple.com>

        * DNB.h: Pass envp to DNBProcessLaunch & DNBProcessSBLaunch.
        * DNB.cpp: Ditto.
        * MachProcess.h: Ditto for *LaunchForDebug and 
        *ForkChildForPtraceDebugging.
        * MachProcess.cpp (MachProcess::LaunchForDebug): Pass on envp.
        (MachProcess::SBLaunchForDebug): Ditto.
        (MachProcess::ForkChildForPtraceDebugging): Accept envp, haven't actually
        implemented the passing yet.
        (MachProcess::SBForkChildForPtraceDebuggin): Accept envp, convert to
        CFDictionary and pass to SBSLaunchApplication.
        * RNBContext.h: Add environment to the context.
        * RBNContext.cpp (RNBContext::EnvironmentAtIndex): New function.
        * RNBRemote.h: Add set_environment_variable to the PacketEnum.
        * RNBRemote.cpp (RNBRemote::CreatePacketTable): Add QEnvironment:.
        * (RNBRemote::HandlePacket_Q): Ingest the environment variable.
        * test-remotenub.cpp (RNBRunLoppLaunchInferior): Convert the env
        array in the context into an array, and pass it to the DNBProcess*Launch
        methods.

2008-03-17  Greg Clayton  <gclayton@apple.com>

	* DNBBreakpoint.cpp (DNBBreakpointList::GetBreakpointAtIndex): New
	functions (const and non-const versions).
	* DNBBreakpoint.h (DNBBreakpointList::GetBreakpointAtIndex): New
	prototypes (const and non-const versions).
	* DNBError.h (DNBError::Success()): Don't use KERN_SUCCESS define.
	(DNBError::Fail()): Don't use KERN_SUCCESS define.
	* MachProcess.cpp (MachProcess::DisableAllBreakpoints): New function.
	(MachProcess::Detach): Added initial implementation that will halt
	the process, disable all breakpoints and call PT_DETACH.
	* MachProcess.h (MachProcess::DisableAllBreakpoints): New prototype.

2008-03-04  Greg Clayton  <gclayton@apple.com>

        * RNBRemote.h (RNBRemote::SendHexEncodedBytePacket): New prototype.
        * RNBRemote.cpp (RNBRemote::SendHexEncodedBytePacket): New function.
        (RNBRemote::SendSTDOUTPacket): Use SendHexEncodedBytePacket function
        to send bytes.
        (RNBRemote::SendSTDERRPacket): Ditto.
        (RNBRemote::HandlePacket_q): Return a valid thread info string for 
        qThreadExtraInfo queries.
        * DNB.cpp (DNBThreadPrintStopReason): Commented out unused function.
        (DNBThreadGetInfo): New function.
        * DNB.h (DNBThreadPrintStopReason): Commented out prototype.
        (DNBThreadGetInfo): New prototype.
        * MachProcess.cpp (MachProcess::GetThreadInfo): New function.
        * MachProcess.h (MachProcess::GetThreadInfo): New prototype.
        * MachThreadList.cpp (MachThreadList::GetThreadInfo): New function.
        * MachThreadList.h (MachThreadList::GetThreadInfo): New prototype.
        * MachThread.cpp (MachThread::GetBasicInfoAsString): New function.
        (MachThread::InferiorThreadID): New function.
        * MachThread.cpp (MachThread::GetBasicInfoAsString): New prototype.
        (MachThread::InferiorThreadID): New prototype.
        
2008-02-27  Greg Clayton  <gclayton@apple.com>

        * RNBRemote.cpp (RNBRemote::HandlePacket_last_signal): Set the
        current thread when we notify a thread has stopped to subsequent
        g and p packets get the correct data.

2008-02-26  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Add query_thread_extra_info enum.
	* RNBRemote.cpp: Add support for qThreadExtraInfo.
	Currently we return 'Ok' as the packet status for
        every thread.

2008-02-26  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (RNBRemote::HandlePacket_q): Correct handling
	of qfThreadInfo/qsThreadInfo.

2008-02-20  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Change default for gdb's max incoming packet size to
	reflect the real default size.
	* RNBRemote.cpp (HandlePacket_Q): Correct the string comparisions for
	the QSetMaxPayloadSize and QSetMaxPacketSize packets.

2008-02-19 Christopher Friesen <friesen@apple.com>

        * CFDataFormatters.c: CoreFoundation data formatters added to project.

2008-02-19  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Record the max payload size, not the max packet
        size for less ambiguous meaning.
	* RNBRemote.cpp: Add support for QSetMaxPayloadSize: packet which
	should have a clearer meaning than QSetMaxPacketSize.  
	QSetMaxPacketSize will be removed once we get have a chance to get
	a new debugserver and gdb submitted.

2008-02-18  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Make default size 1024.
	* RNBRemote.cpp: Questionmark packet should stay under 
	max_packet_size - 5 to allow for start, end, checksum and nul
	char bytes.

2008-02-18  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Add m_max_packet_size to class defn.
	* RNBRemote.cpp: Initialize it, use it.

2008-02-18  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Add set_max_packet_size.
	* RNBRemote.cpp: Add QSetMaxPacketSize packet handling.

2008-02-18  Greg Clayton <gclayton@apple.com>
    
        * test-remotenub.cpp (HandleProcessStateChange): Call new
        RNBRemote::FlushSTDIO function.
        (RNBRunLoopInferiorExecuting): Ditto.
        * RNBRemote.h (RNBRemote::FlushSTDIO): New prototype.
        * RNBRemote.cpp (RNBRemote::FlushSTDIO): New function to
        centralize the stdio.

2008-02-18  Greg Clayton <gclayton@apple.com>

	* DNB.cpp (DNBProcessWaitForEvent): Added timeout pointer as
	parameter that can be NULL for infinite timeout to simplify
	the DNB interface.
	(DNBProcessTimedWaitForEvent): Removed function.
	* DNB.h (DNBProcessWaitForEvent): Added timeout argument.
	(DNBProcessTimedWaitForEvent): Removed prototype.
	* DNBTimer.h (DNBTimer::OffsetTimeOfDay): New function.
	* CFString.cpp (CFString::GetLength() const): New function.
	* CFString.h (CFString::GetLength() const): New prototype.
	* MachProcess.h (MachProcess class): Removed m_attached and
	added m_flags.
	* MachProcess.cpp (MachProcess::AttachForDebug): Set m_flags 
	to indicate we attached.
	(MachProcess::SBLaunchForDebug): Set m_flags to indicate we 
	attached using SpringBoard and that we attached.
	(MachProcess::SBForkChildForPTraceDebugging): Changed to new
	SpringBoardServices API.
	(MachProcess::ThreadFunctionException): Added code that will
	renew a watchdog assertion when we launch apps through 
	SpringBoardServices.
	* PThreadEvent.cpp (PThreadEvent::WaitForSetEvents): Simplified
	PThreadEvent API to have only one version of WaitForSetEvents
	that has an optional timeout pointer argument.
	* RNBContext.cpp (RNBContext::StopProcessStatusThread): Adapt
	to new PThreadEvent API changes.
	(RNBContext::ThreadFunctionProcessStatus): Adapt to new 
	DNBProcessWaitForEvent API changes.
	* RNBRemote.cpp (RNBRemote::StopReadRemoteDataThread): Adapt
	to new PThreadEvent API changes.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Adapt to new 
	DNBProcessWaitForEvent API changes.
	(RNBRunLoopInferiorExecuting): Process STDIO first, then
	incoming packets.

2008-02-14  Jason Molenda  (jmolenda@apple.com)

	* MachProcess.cpp: (MachProcess::SBForkChildForPTraceDebugging):
	Set mode bits on slave side of pty.

2008-02-12  Greg Clayton  <gclayton@apple.com>

        * DNB.cpp (DNBEnableLogging): Removed function.
        (DNBThreadPrintStopReason): Removed the file handle from this 
        function and use DNBLog calls.
        * DNB.h (DNBEnableLogging): Removed function prototype.
        (DNBThreadPrintStopReason): Removed the file handle
        from the function prototype in favor of using DNBLog calls.
        * DNBDataRef.cpp (DNBDataRef::Dump): Removed file handle to use
        DNBLog for the logging and print a log line each time a full line
        is ready for output after caching it in a local buffer.
        * DNBDataRef.cpp (DNBDataRef::Dump): Removed file handle from
        prototype.
        * DNBDefs.h (DNBCallbackLog): New callback prototype for all 
        logging. 
        DNBLog.cpp(g_debug_opt): Renamed to d_debug and made it a file
        static.
        (DNBLogGetDebug): New accessor function for g_debug.
        (DNBLogSetDebug): New accessor function for g_debug.
        (g_verbose): Made into a file static and added accessors.
        (DNBLogGetVerbose): New accessor function for g_verbose.
        (DNBLogSetVerbose): New accessor function for g_verbose.
        (DNBLogSetLogCallback): New function call that registers a logging
        callback for all logging in libdebugnub.dylib and any code that
        loads it.
        (DNBLogToASL): Removed function as it is deprecated in favor of
        using DNBLogSetLogCallback to regsiter a callback function that
        implements the logging.
        (DNBLogToFile): Ditto.
        (DNBLogCloseLogFile): Ditto.
        (DNBLogToFile): Ditto.
        (DNBLogToFile): Ditto.
        (_DNBLogPuts): Removed unused function.
        (_DNBLogVAPrintf): Calls the callback function to do the logging
        if one has been registered.
        * DNBLog.h (DNBLOG_FLAG_FATAL): New defines that get passed to
        any registered logging callback functions.
        (DNBLOG_FLAG_FATAL): Ditto.
        (DNBLOG_FLAG_ERROR): Ditto.
        (DNBLOG_FLAG_WARNING): Ditto.
        (DNBLOG_FLAG_DEBUG): Ditto.
        (DNBLOG_FLAG_VERBOSE): Ditto.
        (DNBLOG_FLAG_THREADED): Ditto.
        (DNBLog*): All logging calls are now exported from libdebugnub.dylib
        so there aren't two copies (one in debugserver and one in debugnub).
        C99 vararg Macros wrap all logging calls so no var arg processing
        occurs when logging is disabled.
        * DNBRegisterInfo.cpp (DNBRegisterValueClass::Dump): Removed file
        handle and now use DNBLog calls.
        * DNBRegisterInfo.h (DNBRegisterValueClass::Dump): Removed file
        handle from prototype.
        * MachException.cpp (catch_mach_exception_raise_state_identity): 
        Removed newlines from logging call.
        (catch_mach_exception_raise): Ditto.
        (MachException::Message::Dump): Removed file handle from params
        and removed newlines from logging call.
        (MachException::ThreadMessage::DumpStopReason): Removed file handle
        from params and use DNBLog for logging output.
        (MachException::ThreadMessage::Dump): Log using DNBLog instead of
        file handle.
        * MachProcess.cpp (MachProcess::DumpThreadStoppedReason): Ditto.
        (MachProcess::ReadMemory): Ditto.
        (MachProcess::WriteMemory): Ditto.
        (ExceptionMessageBundleComplete): Ditto.
        * MachThread.cpp (MachThread::Dump): Ditto.
        (MachThread::DumpRegisterState): Ditto.
        * MachThreadList.cpp (MachThreadList::DumpThreadStoppedReason): Ditto.
        (MachThreadList::Dump): Ditto.
        * RNBRemote.cpp (set_logging): Use new function callback registration
        calls when enabling ASL logging.
        test-remotenub.cpp (ASLLogCallback): New function to handle all ASL
        logging. This function gets registered with libdebugnub.dylib when we
        want to log using ASL.
        (FileLogCallback): New function to handle all file logging. This 
        function gets registered with libdebugnub.dylib when we want to log
        to a 'FILE *'.
        (main): Register the logging callback functions when we want to log
        to file or using ASL.

2008-02-12  Greg Clayton  <gclayton@apple.com>
    
        * test-remotenub.cpp (main): Default to ASL logging with no log
        bits set to allow for warning and error logging.
        * RNBRemote.h (struct Breakpoint): New structure for ref counting 
        breakpoints in Z and z packets.
        * RNBRemote.cpp (RNBRemote::SendPacket): Use new LOG_RNB_PACKETS
        defined when logging actual packet content.
        (RNBRemote::HandleAsyncPacket): Ditto.
        (RNBRemote::HandleReceivedPacket): Ditto.
        (RNBRemote::HandlePacket_z): Ref count the setting and removing
        of breakpoints with the Z and z packets using new struct
        RNBRemote::Breakpoint.
        * RNBDefs.h (LOG_RNB_PACKETS): New define for logging the sending
        and receiving of packets data.
        * DNB.cpp (DNBPrintf): Check for NULL file handle.
        * DNBBreakpoint.cpp (DNBBreakpoint::Dump): Ditto.
        (DNBBreakpointList::Dump): Ditto.
        * DNBDefs.h (LOG_EVENTS): New define for logging PThreadEvent.
        * DNBLog.cpp (g_debug_opt): Relocated outside of #if that turns off
        logging completely to allow option parsing code that uses it to
        still compile.
        (g_verbose): Ditto.
        * DNBLog.h (DNBLogToASL): Added prototype for when logging is 
        disabled via preprocessor macro.
        (DNBLogToFile): Ditto.
        * DNBRegisterInfo.cpp (DNBRegisterValueClass::Dump): Check for NULL
        file handle.
        * MachException.cpp (MachException::ThreadMessage::DumpStopReason): Ditto.
        (MachException::ThreadMessage::Dump): Ditto.
        * MachProcess.cpp (MachProcess::CreateBreakpoint): Improved logging.
        (MachProcess::DisableBreakpoint): Verify the original opcode gets 
        restored, improved logging and added unconditional logging for when
        things go wrong.
        (MachProcess::EnableBreakpoint): Verify the breakpoint opcode gets 
        written, improved logging and added unconditional logging for when
        things go wrong.
        * MachThread.cpp (MachThread::Dump): Check for NULL file handle.
        * MachVMMemory.cpp (MachVMMemory::WriteRegion): Flush caches in inferior
        after writing to inferior memory.
        * PThreadEvent.cpp: Changed all logging calls to key off of LOG_EVENTS
        instead of LOG_VERBOSE.
        MachDYLD.cpp (MachDYLD::Dump): Check for NULL file handle.
        (MachDYLD::DYLIBInfo::Dump): Ditto.
        ProfileObjectiveC.cpp (ProfileObjectiveC::DumpStats): Ditto.
        
2008-02-09  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (set_logging): Log to ASL unconditionally when
	processing a QSetLogging packet.

2008-02-06  Greg Clayton  <gclayton@apple.com>
        
        * test-remotenub.cpp (main): Dup stdout and stderr to /dev/NULL
        when we use lockdown.

2008-02-06  Greg Clayton  <gclayton@apple.com>

	* RNBSocket.cpp (RNBSocket::Disconnect): Removed unused var ERR.
	* RNBRemote.cpp(RNBRemote::HandlePacket_Q): Removed unused var PID.
	* DNBError.cpp (DNBError::LogThreadedIfError): Removed unused var
	ERR_MSG.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Removed unused 
	variable EXECUTABLE_LENGTH.
	(main): Removed unused variable ARG_IDX.

2008-02-06  Chris Marcellino (cmarcellino@apple.com) and Myke Olson (molson@apple.com)

	* MachProcess.cpp (SBForkChildForPTraceDebugging): Bring up to date with
	current SpringBoardServices.framework types and imports.

2008-02-05  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (set_logging): Remove the mode=file and filename=
	options to the QSetLogging packet.  We're only going to support logging
	to ASL for now.  Logging to a file can still be accomplished by the
	-l command line argument.

2008-02-02  Christopher Friesen  (cfriesen@apple.com)

        * Added libXcodeDebugerSupport.dylib target
        * XCDebuggerIntrospection.[hc]: Support for Xcode's debugger introspection.
        
2008-02-01  Jason Molenda  (jmolenda@apple.com)

	* DNBLog.cpp (DNBLogCloseLogFile): New function to close a logfile
	at exit.
	* DNBLog.h: Prototype.
	* test-remotenub.cpp (main): Close the log file before exiting.

2008-02-01  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (set_logging): Recognize the "filename=" argument
	to the QSetLogging directive.
	* DNBLog.cpp (DNBLogGetLogMask): New fun.c
	* DNBLog.h: Prototype.

2008-01-31  Jason Molenda  (jmolenda@apple.com)

	* DNBLog.cpp: Add ASL logging as a run-time selectable option.
	(DNBLogToASL, DNBLogToFile): Functions to switch between logging to
	a file and logging via ASL.
	* DNBLog.h: Prototypes.
	* RNBRemote.cpp (set_logging): Recognize the "mode=" field to enable
	asl logging.  Skip unrecognized keys.

2008-01-31  Greg Clayton  (gclayton@apple.com)

	* DNB.cpp (sigchld_handler): Better logging when we get a 
	SIGCHILD and we are watching for process related logging events.
	* test-remotenub.cpp (RNBRunLoopInferiorExecuting): Only reset 
	events when we still have event bits set.

2008-01-29  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Add set_logging_mode.
	* RNBRemote.cpp (RNBRemote::CreatePacketTable): Recognize
	QSetLogging.

2008-01-29  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (set_logging): New function to parse the QSetLogging
	packet.
	(RNBRemote::HandlePacket_Q): Call it.

2008-01-28  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: Minimal packet size is 1024 in our gdb now.
	* RNBRemote.cpp: Add the stop_pc value in big-endian order to the
	T response packet to make it a little easier to follow where gdb
	is stepping.

2008-01-28  Greg Clayton  <gclayton@apple.com>

	* RNBContext.h: Removed m_pid_state from RNBContext class so that
	it couldn't get out of sync with the actual process and its accessors
	SetProcessState() and GetProcessState().
	* RNBContext.cpp (RNBContext::ProcessStateRunning): Always return the
	current state of the process instead of a cached value.
	* test-remotenub.cpp (RNBRunLoopLaunchInferior): Remove call to 
        deprecated RNBContext::SetProcessState().
	(HandleProcessStateChange): Ditto.

2008-01-24  Greg Clayton  (gclayton@apple.com)

	* RNBRemote.cpp (RNBRemote::HandlePacket_q): See if command starts with
	"qSymbol" (no trailing "s") and return the empty string.

2008-01-24  Greg Clayton  (gclayton@apple.com)

	* RNBRemote.cpp (RNBRemote::HandlePacket_q): See if command starts with
	"qSymbols" and return the empty string.

2008-01-24  Greg Clayton  (gclayton@apple.com)

	* DNBError.h (DNBError::DumpIfError): Removed prototype.
	* DNBError.cpp (DNBError::DumpIfError): Removed function.
	(DNBError::LogThreadedIfError): Output error as hex.
	* MachException.cpp (MachException::Message::Receive): Don't use
	DNBError::DumpIfError, now use DNBError::LogThreadedIfError.
	* MachProcess.cpp (MachProcess::StartExceptionThread): Ditto.
 	(MachProcess::Suspend): Ditto.
	(MachProcess::SBForkChildForPTraceDebugging): Ditto.
	* MachVMMemory.cpp (MachVMMemory::Read): Cleaned up logging
	calls.
	(MachVMMemory::Write): Ditto.
	(MachVMMemory::WriteRegion): Added logging.
	* RNBContenxt.cpp (display_thread_info): Removed function.
	* RNBRemote.cpp (RNBRemote::GetPacket): Commented out stderr
	messages to avoid SpringBoard from killing us.
	(RNBRemote::HandlePacket_p): Ditto.
	(RNBRemote::HandlePacket_P): Ditto.
	(RNBRemote::HandlePacket_c): Ditto.
	(RNBRemote::HandlePacket_A): Removed code that was already
	* RNBSocket.cpp (RNBSocket::Listen): Commented out stdout
	messages to avoid SpringBoard from killing us.
	(RNBSocket::ConnectToService): Ditto.

2008-01-24  Jim Ingham  <jingham@apple.com>

	* RNBRemote.cpp (RNBRemote::HandlePacket_q): Reply "" to qSymbols
	and qOffsets.
	
2008-01-23  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.h: m_noack_mode to RNBRemote class.
	* RNBRemote.cpp: Change #ifdef NO_ACKS code blocks
	to use m_noack_mode instance variable.
	(RNBRemote::HandlePacket_Q): New function to handle
	QStartNoAckMode packet and set m_noack_mode appropriately.
	* test-remotenub.cpp: Remove NO_ACKS ifdefs.

2008-01-22  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (RNBRemote::CreatePacketTable): Recognize 
	QStartNoAckMode as an unsupported remote protocol request.
	* RNBRemote.h: Add start_noack_mode enum entry.

2008-01-22  Greg Clayton  (gclayton@apple.com)

	* DNBLog.h: Removed C++ namespace for DNBLog (changed all DNBLog::
	to DNBLog) so C99 var arg macros can be used to completely disable 
	all logging and any functions that may be called when making the
	variable arguments.
	* DNBLog.cpp: Ditto.
	* DNB.cpp: Ditto.
	* DNBBreakpoint.cpp: Ditto.
	* DNBError.cpp: Ditto.
	* MacOSX/MachDYLD.cpp: Ditto.
	* MacOSX/MachException.cpp: Ditto.
	* MacOSX/MachProcess.cpp: Ditto.
	* MacOSX/MachThread.cpp: Ditto.
	* MacOSX/MachThreadList.cpp: Ditto.
	* MacOSX/MachVMMemory.cpp: Ditto.
	* MacOSX/MachVMRegion.cpp: Ditto.
	* MacOSX/arm/DNBArchImpl.cpp: Ditto.
	* MacOSX/ppc/DNBArchImpl.cpp: Ditto.
	* PThreadEvent.cpp: Ditto.
	* RNBContext.cpp: Ditto.
	* RNBRemote.cpp: Ditto.
	* RNBSocket.cpp: Ditto.
	* test-remotenub.cpp: Ditto.

2008-01-21  Jason Molenda  (jmolenda@apple.com)

	* test-remotenub.cpp: Add NO_SPRINGBOARD for turning off SpringBoard
	dependency ala NO_ACKS.

2008-01-18  Jason Molenda  (jmolenda@apple.com)

	* RNBSocket.h (RNBSocket::RNBSocket): Take either a port # or
	an already-opened socket, with a boolean to indicate which it is.
	* RNBRemote.cpp (RNBRemote::RNBRemote): Ditto.
	* RNBRemote.h: Prototype update.
	* test-remotenub.cpp: Include lockdown.h.  Take --lockdown command
	line arg, get the socket from liblockdown.dylib instead of opening
	our own socket if it is specified.  --lockdown indicates that 
	the program name/args will be provided via remote protocol instead
	of on the command line.

2008-01-17  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp: Add NO_ACKS #ifdefs around code that computes
	the checksums and sends/expects the gdb remote protocol ACK packets.
	If NO_ACKS is defined, debugserver will not send or expect acks.
	* test-remotenub.cpp (main): Print a different version string
	if NO_ACKS is defined.

2008-01-16  Greg Clayton  (gclayton@apple.com)

	* PThreadEvent.cpp: Added this pointer to all logging calls.

2008-01-16  Greg Clayton  (gclayton@apple.com)

	* RNBSocket.cpp (RNBSocket::Connect()): Use TCP so we can try the
	TCP_NODELAY socket option.
	(RNBSocket::SetSocketOption()): New function.
	* RNBSocket.h (RNBSocket::SetSocketOption()): New class function.

2008-01-14  Jason Molenda  (jmolenda@apple.com)

	* RNBRemote.cpp (RNBRemote::HandlePacket_last_signal): When printing
	registers, skip over gdb regs which don't map to DNB regs.

2008-01-14  Jim Ingham  <jingham@apple.com>

    * ChangeLog - created.
    * RBNContext.h: Added m_arg_vec and accessors.
    * RNBContext.cpp (SetProcessID): New function.
    * RBNRemote.h: Added packet type to HandlePacket & HandleAsyncPacket
    * RNBRemote.cpp (HandlePacket, HandleAsyncPacket): Return type.
    (HandlePacket_A): Fix a few bugs.
    (HandlePacket_H): Return OK if target is not yet running.
    (HandlePacket_q): Return PID of 0 if target is not yet running.
    * testremotenub.cpp (RNBRunLoopGetArgsFromRemote): Implement.
    (RNBRunLoopLaunchInferior): Fetch arguments from context.
    (main) Store arguments in context, call RNBRunLoopGetArgsFromRemote
    if appropriate.
