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 descriptive 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 available and disable for armv7 for the time
	being (rdar://problem/6372672).
	(DNBArchMachARM::NumSupportedHardwareWatchpoints()): Auto detect how many 
	WRP pairs are available 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 connection.

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 secondary 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.
