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 function 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 abstracted 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, resume, 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 exception 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 comparisons 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 register 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.
