1008dd426SIngo Weinhold/*
27483c98dSIngo Weinhold * Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
368e78ff8SRene Gollent * Copyright 2013-2015, Rene Gollent, rene@gollent.com.
4008dd426SIngo Weinhold * Distributed under the terms of the MIT License.
5008dd426SIngo Weinhold */
6008dd426SIngo Weinhold
7a5e1e7ceSIngo Weinhold
8008dd426SIngo Weinhold#include "Team.h"
9008dd426SIngo Weinhold
10008dd426SIngo Weinhold#include <new>
11008dd426SIngo Weinhold
12ae53f490SIngo Weinhold#include <AutoLocker.h>
13ae53f490SIngo Weinhold
14a5e1e7ceSIngo Weinhold#include "Breakpoint.h"
1518ca318aSIngo Weinhold#include "DisassembledCode.h"
16a5e1e7ceSIngo Weinhold#include "FileSourceCode.h"
17a4b0c192SIngo Weinhold#include "Function.h"
18f66bd625SIngo Weinhold#include "ImageDebugInfo.h"
1914a55dceSRene Gollent#include "SignalDispositionTypes.h"
20a4b0c192SIngo Weinhold#include "SourceCode.h"
21f66bd625SIngo Weinhold#include "SpecificImageDebugInfo.h"
2218ca318aSIngo Weinhold#include "Statement.h"
23671ef9b0SIngo Weinhold#include "TeamDebugInfo.h"
246e72ebfcSIngo Weinhold#include "Tracing.h"
252d5794a1SRene Gollent#include "Value.h"
264235cb3eSRene Gollent#include "Watchpoint.h"
27a5e1e7ceSIngo Weinhold
28a5e1e7ceSIngo Weinhold
29a5e1e7ceSIngo Weinhold// #pragma mark - BreakpointByAddressPredicate
30a5e1e7ceSIngo Weinhold
31a5e1e7ceSIngo Weinhold
32a5e1e7ceSIngo Weinholdstruct Team::BreakpointByAddressPredicate
33a5e1e7ceSIngo Weinhold	: UnaryPredicate<Breakpoint> {
34a5e1e7ceSIngo Weinhold	BreakpointByAddressPredicate(target_addr_t address)
35a5e1e7ceSIngo Weinhold		:
36a5e1e7ceSIngo Weinhold		fAddress(address)
37a5e1e7ceSIngo Weinhold	{
38a5e1e7ceSIngo Weinhold	}
39a5e1e7ceSIngo Weinhold
40a5e1e7ceSIngo Weinhold	virtual int operator()(const Breakpoint* breakpoint) const
41a5e1e7ceSIngo Weinhold	{
42a5e1e7ceSIngo Weinhold		return -Breakpoint::CompareAddressBreakpoint(&fAddress, breakpoint);
43a5e1e7ceSIngo Weinhold	}
44a5e1e7ceSIngo Weinhold
45a5e1e7ceSIngo Weinholdprivate:
46a5e1e7ceSIngo Weinhold	target_addr_t	fAddress;
47a5e1e7ceSIngo Weinhold};
48a5e1e7ceSIngo Weinhold
49671ef9b0SIngo Weinhold
504235cb3eSRene Gollent// #pragma mark - WatchpointByAddressPredicate
514235cb3eSRene Gollent
524235cb3eSRene Gollent
534235cb3eSRene Gollentstruct Team::WatchpointByAddressPredicate
544235cb3eSRene Gollent	: UnaryPredicate<Watchpoint> {
554235cb3eSRene Gollent	WatchpointByAddressPredicate(target_addr_t address)
564235cb3eSRene Gollent		:
574235cb3eSRene Gollent		fAddress(address)
584235cb3eSRene Gollent	{
594235cb3eSRene Gollent	}
604235cb3eSRene Gollent
614235cb3eSRene Gollent	virtual int operator()(const Watchpoint* watchpoint) const
624235cb3eSRene Gollent	{
634235cb3eSRene Gollent		return -Watchpoint::CompareAddressWatchpoint(&fAddress, watchpoint);
644235cb3eSRene Gollent	}
654235cb3eSRene Gollent
664235cb3eSRene Gollentprivate:
674235cb3eSRene Gollent	target_addr_t	fAddress;
684235cb3eSRene Gollent};
694235cb3eSRene Gollent
70008dd426SIngo Weinhold
71ac8b6713SIngo Weinhold// #pragma mark - Team
72ac8b6713SIngo Weinhold
73ac8b6713SIngo Weinhold
74a5e1e7ceSIngo WeinholdTeam::Team(team_id teamID, TeamMemory* teamMemory, Architecture* architecture,
75698ad097SRene Gollent	TeamDebugInfo* debugInfo, TeamTypeInformation* typeInformation)
76008dd426SIngo Weinhold	:
77a5e1e7ceSIngo Weinhold	fLock("team lock"),
78671ef9b0SIngo Weinhold	fID(teamID),
79a5e1e7ceSIngo Weinhold	fTeamMemory(teamMemory),
80698ad097SRene Gollent	fTypeInformation(typeInformation),
81a5e1e7ceSIngo Weinhold	fArchitecture(architecture),
82cae8421dSRene Gollent	fDebugInfo(debugInfo),
83cae8421dSRene Gollent	fStopOnImageLoad(false),
8414a55dceSRene Gollent	fStopImageNameListEnabled(false),
8514a55dceSRene Gollent	fDefaultSignalDisposition(SIGNAL_DISPOSITION_IGNORE)
86008dd426SIngo Weinhold{
872bf55b39SIngo Weinhold	fDebugInfo->AcquireReference();
88008dd426SIngo Weinhold}
89008dd426SIngo Weinhold
90008dd426SIngo Weinhold
91008dd426SIngo WeinholdTeam::~Team()
92008dd426SIngo Weinhold{
932bf55b39SIngo Weinhold	while (UserBreakpoint* userBreakpoint = fUserBreakpoints.RemoveHead())
942bf55b39SIngo Weinhold		userBreakpoint->ReleaseReference();
952bf55b39SIngo Weinhold
96a5e1e7ceSIngo Weinhold	for (int32 i = 0; Breakpoint* breakpoint = fBreakpoints.ItemAt(i); i++)
972bf55b39SIngo Weinhold		breakpoint->ReleaseReference();
9812c53499SRene Gollent
9912c53499SRene Gollent	for (int32 i = 0; Watchpoint* watchpoint = fWatchpoints.ItemAt(i); i++)
10012c53499SRene Gollent		watchpoint->ReleaseReference();
101a5e1e7ceSIngo Weinhold
102008dd426SIngo Weinhold	while (Image* image = fImages.RemoveHead())
1032bf55b39SIngo Weinhold		image->ReleaseReference();
104008dd426SIngo Weinhold
105008dd426SIngo Weinhold	while (Thread* thread = fThreads.RemoveHead())
1062bf55b39SIngo Weinhold		thread->ReleaseReference();
107671ef9b0SIngo Weinhold
1082bf55b39SIngo Weinhold	fDebugInfo->ReleaseReference();
109008dd426SIngo Weinhold}
110008dd426SIngo Weinhold
111008dd426SIngo Weinhold
112008dd426SIngo Weinholdstatus_t
113008dd426SIngo WeinholdTeam::Init()
114008dd426SIngo Weinhold{
115a5e1e7ceSIngo Weinhold	return fLock.InitCheck();
116008dd426SIngo Weinhold}
117008dd426SIngo Weinhold
118008dd426SIngo Weinhold
119008dd426SIngo Weinholdvoid
120008dd426SIngo WeinholdTeam::SetName(const BString& name)
121008dd426SIngo Weinhold{
122008dd426SIngo Weinhold	fName = name;
123754b42a5SRene Gollent	_NotifyTeamRenamed();
124008dd426SIngo Weinhold}
125008dd426SIngo Weinhold
126008dd426SIngo Weinhold
127008dd426SIngo Weinholdvoid
128008dd426SIngo WeinholdTeam::AddThread(Thread* thread)
129008dd426SIngo Weinhold{
130008dd426SIngo Weinhold	fThreads.Add(thread);
131ac8b6713SIngo Weinhold	_NotifyThreadAdded(thread);
132008dd426SIngo Weinhold}
133f208695cSIngo Weinhold
134f208695cSIngo Weinhold
135008dd426SIngo Weinhold
136008dd426SIngo Weinholdstatus_t
137f208695cSIngo WeinholdTeam::AddThread(const ThreadInfo& threadInfo, Thread** _thread)
138008dd426SIngo Weinhold{
139f208695cSIngo Weinhold	Thread* thread = new(std::nothrow) Thread(this, threadInfo.ThreadID());
140008dd426SIngo Weinhold	if (thread == NULL)
141008dd426SIngo Weinhold		return B_NO_MEMORY;
142008dd426SIngo Weinhold
143008dd426SIngo Weinhold	status_t error = thread->Init();
144008dd426SIngo Weinhold	if (error != B_OK) {
145008dd426SIngo Weinhold		delete thread;
146008dd426SIngo Weinhold		return error;
147008dd426SIngo Weinhold	}
148008dd426SIngo Weinhold
149f208695cSIngo Weinhold	thread->SetName(threadInfo.Name());
150008dd426SIngo Weinhold	AddThread(thread);
151008dd426SIngo Weinhold
152008dd426SIngo Weinhold	if (_thread != NULL)
153008dd426SIngo Weinhold		*_thread = thread;
154008dd426SIngo Weinhold
155008dd426SIngo Weinhold	return B_OK;
156008dd426SIngo Weinhold}
157008dd426SIngo Weinhold
158008dd426SIngo Weinhold
159008dd426SIngo Weinholdvoid
160008dd426SIngo WeinholdTeam::RemoveThread(Thread* thread)
161008dd426SIngo Weinhold{
162008dd426SIngo Weinhold	fThreads.Remove(thread);
163ac8b6713SIngo Weinhold	_NotifyThreadRemoved(thread);
164008dd426SIngo Weinhold}
165008dd426SIngo Weinhold
166008dd426SIngo Weinhold
167008dd426SIngo Weinholdbool
168008dd426SIngo WeinholdTeam::RemoveThread(thread_id threadID)
169008dd426SIngo Weinhold{
170008dd426SIngo Weinhold	Thread* thread = ThreadByID(threadID);
171008dd426SIngo Weinhold	if (thread == NULL)
172008dd426SIngo Weinhold		return false;
173008dd426SIngo Weinhold
174008dd426SIngo Weinhold	RemoveThread(thread);
1752bf55b39SIngo Weinhold	thread->ReleaseReference();
176008dd426SIngo Weinhold	return true;
177008dd426SIngo Weinhold}
178008dd426SIngo Weinhold
179008dd426SIngo Weinhold
180008dd426SIngo WeinholdThread*
181008dd426SIngo WeinholdTeam::ThreadByID(thread_id threadID) const
182008dd426SIngo Weinhold{
183008dd426SIngo Weinhold	for (ThreadList::ConstIterator it = fThreads.GetIterator();
184008dd426SIngo Weinhold			Thread* thread = it.Next();) {
185008dd426SIngo Weinhold		if (thread->ID() == threadID)
186008dd426SIngo Weinhold			return thread;
187008dd426SIngo Weinhold	}
188008dd426SIngo Weinhold
189008dd426SIngo Weinhold	return NULL;
190008dd426SIngo Weinhold}
191008dd426SIngo Weinhold
192008dd426SIngo Weinhold
193ac8b6713SIngo Weinholdconst ThreadList&
194ac8b6713SIngo WeinholdTeam::Threads() const
195ac8b6713SIngo Weinhold{
196ac8b6713SIngo Weinhold	return fThreads;
197ac8b6713SIngo Weinhold}
198ac8b6713SIngo Weinhold
199ac8b6713SIngo Weinhold
200008dd426SIngo Weinholdstatus_t
2013c5dbb46SIngo WeinholdTeam::AddImage(const ImageInfo& imageInfo, LocatableFile* imageFile,
2023c5dbb46SIngo Weinhold	Image** _image)
203008dd426SIngo Weinhold{
2043c5dbb46SIngo Weinhold	Image* image = new(std::nothrow) Image(this, imageInfo, imageFile);
205008dd426SIngo Weinhold	if (image == NULL)
206008dd426SIngo Weinhold		return B_NO_MEMORY;
207008dd426SIngo Weinhold
208008dd426SIngo Weinhold	status_t error = image->Init();
209008dd426SIngo Weinhold	if (error != B_OK) {
210008dd426SIngo Weinhold		delete image;
211008dd426SIngo Weinhold		return error;
212008dd426SIngo Weinhold	}
213008dd426SIngo Weinhold
2142bf55b39SIngo Weinhold	if (image->Type() == B_APP_IMAGE)
2152bf55b39SIngo Weinhold		SetName(image->Name());
2162bf55b39SIngo Weinhold
2173c5dbb46SIngo Weinhold	fImages.Add(image);
2183c5dbb46SIngo Weinhold	_NotifyImageAdded(image);
219008dd426SIngo Weinhold
220008dd426SIngo Weinhold	if (_image != NULL)
221008dd426SIngo Weinhold		*_image = image;
222008dd426SIngo Weinhold
223008dd426SIngo Weinhold	return B_OK;
224008dd426SIngo Weinhold}
225008dd426SIngo Weinhold
226008dd426SIngo Weinhold
227008dd426SIngo Weinholdvoid
228008dd426SIngo WeinholdTeam::RemoveImage(Image* image)
229008dd426SIngo Weinhold{
230008dd426SIngo Weinhold	fImages.Remove(image);
231ac8b6713SIngo Weinhold	_NotifyImageRemoved(image);
232008dd426SIngo Weinhold}
233008dd426SIngo Weinhold
234008dd426SIngo Weinhold
235008dd426SIngo Weinholdbool
236008dd426SIngo WeinholdTeam::RemoveImage(image_id imageID)
237008dd426SIngo Weinhold{
238008dd426SIngo Weinhold	Image* image = ImageByID(imageID);
239008dd426SIngo Weinhold	if (image == NULL)
240008dd426SIngo Weinhold		return false;
241008dd426SIngo Weinhold
242008dd426SIngo Weinhold	RemoveImage(image);
2432bf55b39SIngo Weinhold	image->ReleaseReference();
244008dd426SIngo Weinhold	return true;
245008dd426SIngo Weinhold}
246008dd426SIngo Weinhold
247008dd426SIngo Weinhold
248008dd426SIngo WeinholdImage*
249008dd426SIngo WeinholdTeam::ImageByID(image_id imageID) const
250008dd426SIngo Weinhold{
251008dd426SIngo Weinhold	for (ImageList::ConstIterator it = fImages.GetIterator();
252008dd426SIngo Weinhold			Image* image = it.Next();) {
253008dd426SIngo Weinhold		if (image->ID() == imageID)
254008dd426SIngo Weinhold			return image;
255008dd426SIngo Weinhold	}
256008dd426SIngo Weinhold
257008dd426SIngo Weinhold	return NULL;
258008dd426SIngo Weinhold}
259ac8b6713SIngo Weinhold
260ac8b6713SIngo Weinhold
2610b60fa86SIngo WeinholdImage*
2620b60fa86SIngo WeinholdTeam::ImageByAddress(target_addr_t address) const
2630b60fa86SIngo Weinhold{
2640b60fa86SIngo Weinhold	for (ImageList::ConstIterator it = fImages.GetIterator();
2650b60fa86SIngo Weinhold			Image* image = it.Next();) {
2660b60fa86SIngo Weinhold		if (image->ContainsAddress(address))
2670b60fa86SIngo Weinhold			return image;
2680b60fa86SIngo Weinhold	}
2690b60fa86SIngo Weinhold
2700b60fa86SIngo Weinhold	return NULL;
2710b60fa86SIngo Weinhold}
2720b60fa86SIngo Weinhold
2730b60fa86SIngo Weinhold
274ac8b6713SIngo Weinholdconst ImageList&
275ac8b6713SIngo WeinholdTeam::Images() const
276ac8b6713SIngo Weinhold{
277ac8b6713SIngo Weinhold	return fImages;
278ac8b6713SIngo Weinhold}
279ac8b6713SIngo Weinhold
280ac8b6713SIngo Weinhold
2818f21b175SRene Gollentvoid
2828f21b175SRene GollentTeam::ClearImages()
2838f21b175SRene Gollent{
2848f21b175SRene Gollent	while (!fImages.IsEmpty())
2858f21b175SRene Gollent		RemoveImage(fImages.First());
2868f21b175SRene Gollent}
2878f21b175SRene Gollent
2888f21b175SRene Gollent
289cae8421dSRene Gollentbool
290cae8421dSRene GollentTeam::AddStopImageName(const BString& name)
291cae8421dSRene Gollent{
292cae8421dSRene Gollent	if (!fStopImageNames.Add(name))
293cae8421dSRene Gollent		return false;
294cae8421dSRene Gollent
295cae8421dSRene Gollent	fStopImageNames.Sort();
296cae8421dSRene Gollent
297cae8421dSRene Gollent	NotifyStopImageNameAdded(name);
298cae8421dSRene Gollent	return true;
299cae8421dSRene Gollent}
300cae8421dSRene Gollent
301cae8421dSRene Gollent
302cae8421dSRene Gollentvoid
303cae8421dSRene GollentTeam::RemoveStopImageName(const BString& name)
304cae8421dSRene Gollent{
305cae8421dSRene Gollent	fStopImageNames.Remove(name);
306cae8421dSRene Gollent	NotifyStopImageNameRemoved(name);
307cae8421dSRene Gollent}
308cae8421dSRene Gollent
309cae8421dSRene Gollent
310cae8421dSRene Gollentvoid
311cae8421dSRene GollentTeam::SetStopOnImageLoad(bool enabled, bool useImageNameList)
312cae8421dSRene Gollent{
313cae8421dSRene Gollent	fStopOnImageLoad = enabled;
314cae8421dSRene Gollent	fStopImageNameListEnabled = useImageNameList;
315cae8421dSRene Gollent	NotifyStopOnImageLoadChanged(enabled, useImageNameList);
316cae8421dSRene Gollent}
317cae8421dSRene Gollent
318cae8421dSRene Gollent
319cae8421dSRene Gollentconst BStringList&
320cae8421dSRene GollentTeam::StopImageNames() const
321cae8421dSRene Gollent{
322cae8421dSRene Gollent	return fStopImageNames;
323cae8421dSRene Gollent}
324cae8421dSRene Gollent
325cae8421dSRene Gollent
32614a55dceSRene Gollentvoid
32714a55dceSRene GollentTeam::SetDefaultSignalDisposition(int32 disposition)
32814a55dceSRene Gollent{
32914a55dceSRene Gollent	if (disposition != fDefaultSignalDisposition) {
33014a55dceSRene Gollent		fDefaultSignalDisposition = disposition;
33114a55dceSRene Gollent		NotifyDefaultSignalDispositionChanged(disposition);
33214a55dceSRene Gollent	}
33314a55dceSRene Gollent}
33414a55dceSRene Gollent
33514a55dceSRene Gollent
33614a55dceSRene Gollentbool
33714a55dceSRene GollentTeam::SetCustomSignalDisposition(int32 signal, int32 disposition)
33814a55dceSRene Gollent{
33914a55dceSRene Gollent	SignalDispositionMappings::iterator it = fCustomSignalDispositions.find(
34014a55dceSRene Gollent		signal);
34114a55dceSRene Gollent	if (it != fCustomSignalDispositions.end() && it->second == disposition)
34214a55dceSRene Gollent		return true;
34314a55dceSRene Gollent
34414a55dceSRene Gollent	try {
34514a55dceSRene Gollent		fCustomSignalDispositions[signal] = disposition;
34614a55dceSRene Gollent	} catch (...) {
34714a55dceSRene Gollent		return false;
34814a55dceSRene Gollent	}
34914a55dceSRene Gollent
35014a55dceSRene Gollent	NotifyCustomSignalDispositionChanged(signal, disposition);
35114a55dceSRene Gollent
35214a55dceSRene Gollent	return true;
35314a55dceSRene Gollent}
35414a55dceSRene Gollent
35514a55dceSRene Gollent
35614a55dceSRene Gollentvoid
35714a55dceSRene GollentTeam::RemoveCustomSignalDisposition(int32 signal)
35814a55dceSRene Gollent{
35914a55dceSRene Gollent	SignalDispositionMappings::iterator it = fCustomSignalDispositions.find(
36014a55dceSRene Gollent		signal);
36114a55dceSRene Gollent	if (it == fCustomSignalDispositions.end())
36214a55dceSRene Gollent		return;
36314a55dceSRene Gollent
36414a55dceSRene Gollent	fCustomSignalDispositions.erase(it);
36514a55dceSRene Gollent
36614a55dceSRene Gollent	NotifyCustomSignalDispositionRemoved(signal);
36714a55dceSRene Gollent}
36814a55dceSRene Gollent
36914a55dceSRene Gollent
37014a55dceSRene Gollentint32
37114a55dceSRene GollentTeam::SignalDispositionFor(int32 signal) const
37214a55dceSRene Gollent{
37314a55dceSRene Gollent	SignalDispositionMappings::const_iterator it
37414a55dceSRene Gollent		= fCustomSignalDispositions.find(signal);
37514a55dceSRene Gollent	if (it != fCustomSignalDispositions.end())
37614a55dceSRene Gollent		return it->second;
37714a55dceSRene Gollent
37814a55dceSRene Gollent	return fDefaultSignalDisposition;
37914a55dceSRene Gollent}
38014a55dceSRene Gollent
38114a55dceSRene Gollent
38214a55dceSRene Gollentconst SignalDispositionMappings&
38314a55dceSRene GollentTeam::GetSignalDispositionMappings() const
38414a55dceSRene Gollent{
38514a55dceSRene Gollent	return fCustomSignalDispositions;
38614a55dceSRene Gollent}
38714a55dceSRene Gollent
38814a55dceSRene Gollent
3898f21b175SRene Gollentvoid
3908f21b175SRene GollentTeam::ClearSignalDispositionMappings()
3918f21b175SRene Gollent{
3928f21b175SRene Gollent	fCustomSignalDispositions.clear();
3938f21b175SRene Gollent}
3948f21b175SRene Gollent
3958f21b175SRene Gollent
396a5e1e7ceSIngo Weinholdbool
397a5e1e7ceSIngo WeinholdTeam::AddBreakpoint(Breakpoint* breakpoint)
398a5e1e7ceSIngo Weinhold{
399a5e1e7ceSIngo Weinhold	if (fBreakpoints.BinaryInsert(breakpoint, &Breakpoint::CompareBreakpoints))
400a5e1e7ceSIngo Weinhold		return true;
401a5e1e7ceSIngo Weinhold
4022bf55b39SIngo Weinhold	breakpoint->ReleaseReference();
403a5e1e7ceSIngo Weinhold	return false;
404a5e1e7ceSIngo Weinhold}
405a5e1e7ceSIngo Weinhold
406a5e1e7ceSIngo Weinhold
407a5e1e7ceSIngo Weinholdvoid
408a5e1e7ceSIngo WeinholdTeam::RemoveBreakpoint(Breakpoint* breakpoint)
409a5e1e7ceSIngo Weinhold{
410a5e1e7ceSIngo Weinhold	int32 index = fBreakpoints.BinarySearchIndex(*breakpoint,
411a5e1e7ceSIngo Weinhold		&Breakpoint::CompareBreakpoints);
412a5e1e7ceSIngo Weinhold	if (index < 0)
413a5e1e7ceSIngo Weinhold		return;
414a5e1e7ceSIngo Weinhold
415a5e1e7ceSIngo Weinhold	fBreakpoints.RemoveItemAt(index);
4162bf55b39SIngo Weinhold	breakpoint->ReleaseReference();
417a5e1e7ceSIngo Weinhold}
418a5e1e7ceSIngo Weinhold
419a5e1e7ceSIngo Weinhold
420a5e1e7ceSIngo Weinholdint32
421a5e1e7ceSIngo WeinholdTeam::CountBreakpoints() const
422a5e1e7ceSIngo Weinhold{
423a5e1e7ceSIngo Weinhold	return fBreakpoints.CountItems();
424a5e1e7ceSIngo Weinhold}
425a5e1e7ceSIngo Weinhold
426a5e1e7ceSIngo Weinhold
427a5e1e7ceSIngo WeinholdBreakpoint*
428a5e1e7ceSIngo WeinholdTeam::BreakpointAt(int32 index) const
429a5e1e7ceSIngo Weinhold{
430a5e1e7ceSIngo Weinhold	return fBreakpoints.ItemAt(index);
431a5e1e7ceSIngo Weinhold}
432a5e1e7ceSIngo Weinhold
433a5e1e7ceSIngo Weinhold
434a5e1e7ceSIngo WeinholdBreakpoint*
435a5e1e7ceSIngo WeinholdTeam::BreakpointAtAddress(target_addr_t address) const
436a5e1e7ceSIngo Weinhold{
437a5e1e7ceSIngo Weinhold	return fBreakpoints.BinarySearchByKey(address,
438a5e1e7ceSIngo Weinhold		&Breakpoint::CompareAddressBreakpoint);
439a5e1e7ceSIngo Weinhold}
440a5e1e7ceSIngo Weinhold
441a5e1e7ceSIngo Weinhold
442a5e1e7ceSIngo Weinholdvoid
443a5e1e7ceSIngo WeinholdTeam::GetBreakpointsInAddressRange(TargetAddressRange range,
444a5e1e7ceSIngo Weinhold	BObjectList<UserBreakpoint>& breakpoints) const
445a5e1e7ceSIngo Weinhold{
446a5e1e7ceSIngo Weinhold	int32 index = fBreakpoints.FindBinaryInsertionIndex(
447a5e1e7ceSIngo Weinhold		BreakpointByAddressPredicate(range.Start()));
448a5e1e7ceSIngo Weinhold	for (; Breakpoint* breakpoint = fBreakpoints.ItemAt(index); index++) {
449a5e1e7ceSIngo Weinhold		if (breakpoint->Address() > range.End())
450a5e1e7ceSIngo Weinhold			break;
451a5e1e7ceSIngo Weinhold
452a5e1e7ceSIngo Weinhold		for (UserBreakpointInstanceList::ConstIterator it
453a5e1e7ceSIngo Weinhold				= breakpoint->UserBreakpoints().GetIterator();
454a5e1e7ceSIngo Weinhold			UserBreakpointInstance* instance = it.Next();) {
455a5e1e7ceSIngo Weinhold			breakpoints.AddItem(instance->GetUserBreakpoint());
456a5e1e7ceSIngo Weinhold		}
457a5e1e7ceSIngo Weinhold	}
458a5e1e7ceSIngo Weinhold
459a5e1e7ceSIngo Weinhold	// TODO: Avoid duplicates!
460a5e1e7ceSIngo Weinhold}
461a5e1e7ceSIngo Weinhold
462a5e1e7ceSIngo Weinhold
463a5e1e7ceSIngo Weinholdvoid
464a5e1e7ceSIngo WeinholdTeam::GetBreakpointsForSourceCode(SourceCode* sourceCode,
465a5e1e7ceSIngo Weinhold	BObjectList<UserBreakpoint>& breakpoints) const
466a5e1e7ceSIngo Weinhold{
467a5e1e7ceSIngo Weinhold	if (DisassembledCode* disassembledCode
468a5e1e7ceSIngo Weinhold			= dynamic_cast<DisassembledCode*>(sourceCode)) {
469a5e1e7ceSIngo Weinhold		GetBreakpointsInAddressRange(disassembledCode->StatementAddressRange(),
470a5e1e7ceSIngo Weinhold			breakpoints);
471a5e1e7ceSIngo Weinhold		return;
472a5e1e7ceSIngo Weinhold	}
473a5e1e7ceSIngo Weinhold
474a5e1e7ceSIngo Weinhold	LocatableFile* sourceFile = sourceCode->GetSourceFile();
475a5e1e7ceSIngo Weinhold	if (sourceFile == NULL)
476a5e1e7ceSIngo Weinhold		return;
477a5e1e7ceSIngo Weinhold
478a5e1e7ceSIngo Weinhold	// TODO: This can probably be optimized. Maybe by registering the user
479a5e1e7ceSIngo Weinhold	// breakpoints with the team and sorting them by source code.
480a5e1e7ceSIngo Weinhold	for (int32 i = 0; Breakpoint* breakpoint = fBreakpoints.ItemAt(i); i++) {
481a5e1e7ceSIngo Weinhold		UserBreakpointInstance* userBreakpointInstance
482a5e1e7ceSIngo Weinhold			= breakpoint->FirstUserBreakpoint();
483a5e1e7ceSIngo Weinhold		if (userBreakpointInstance == NULL)
484a5e1e7ceSIngo Weinhold			continue;
485a5e1e7ceSIngo Weinhold
486a5e1e7ceSIngo Weinhold		UserBreakpoint* userBreakpoint
487a5e1e7ceSIngo Weinhold			= userBreakpointInstance->GetUserBreakpoint();
4882bf55b39SIngo Weinhold		if (userBreakpoint->Location().SourceFile() == sourceFile)
489a5e1e7ceSIngo Weinhold			breakpoints.AddItem(userBreakpoint);
490a5e1e7ceSIngo Weinhold	}
491a5e1e7ceSIngo Weinhold}
492a5e1e7ceSIngo Weinhold
493a5e1e7ceSIngo Weinhold
4942bf55b39SIngo Weinholdvoid
4952bf55b39SIngo WeinholdTeam::AddUserBreakpoint(UserBreakpoint* userBreakpoint)
4962bf55b39SIngo Weinhold{
4972bf55b39SIngo Weinhold	fUserBreakpoints.Add(userBreakpoint);
4982bf55b39SIngo Weinhold	userBreakpoint->AcquireReference();
4992bf55b39SIngo Weinhold}
5002bf55b39SIngo Weinhold
5012bf55b39SIngo Weinhold
5022bf55b39SIngo Weinholdvoid
5032bf55b39SIngo WeinholdTeam::RemoveUserBreakpoint(UserBreakpoint* userBreakpoint)
5042bf55b39SIngo Weinhold{
5052bf55b39SIngo Weinhold	fUserBreakpoints.Remove(userBreakpoint);
5062bf55b39SIngo Weinhold	userBreakpoint->ReleaseReference();
5072bf55b39SIngo Weinhold}
5082bf55b39SIngo Weinhold
5092bf55b39SIngo Weinhold
5104235cb3eSRene Gollentbool
5114235cb3eSRene GollentTeam::AddWatchpoint(Watchpoint* watchpoint)
5124235cb3eSRene Gollent{
5134235cb3eSRene Gollent	if (fWatchpoints.BinaryInsert(watchpoint, &Watchpoint::CompareWatchpoints))
5144235cb3eSRene Gollent		return true;
5154235cb3eSRene Gollent
5164235cb3eSRene Gollent	watchpoint->ReleaseReference();
5174235cb3eSRene Gollent	return false;
5184235cb3eSRene Gollent}
5194235cb3eSRene Gollent
5204235cb3eSRene Gollent
5214235cb3eSRene Gollentvoid
5224235cb3eSRene GollentTeam::RemoveWatchpoint(Watchpoint* watchpoint)
5234235cb3eSRene Gollent{
5244235cb3eSRene Gollent	int32 index = fWatchpoints.BinarySearchIndex(*watchpoint,
5254235cb3eSRene Gollent		&Watchpoint::CompareWatchpoints);
5264235cb3eSRene Gollent	if (index < 0)
5274235cb3eSRene Gollent		return;
5284235cb3eSRene Gollent
5294235cb3eSRene Gollent	fWatchpoints.RemoveItemAt(index);
5304235cb3eSRene Gollent	watchpoint->ReleaseReference();
5314235cb3eSRene Gollent}
5324235cb3eSRene Gollent
5334235cb3eSRene Gollent
5344235cb3eSRene Gollentint32
5354235cb3eSRene GollentTeam::CountWatchpoints() const
5364235cb3eSRene Gollent{
5374235cb3eSRene Gollent	return fWatchpoints.CountItems();
5384235cb3eSRene Gollent}
5394235cb3eSRene Gollent
5404235cb3eSRene Gollent
5414235cb3eSRene GollentWatchpoint*
5424235cb3eSRene GollentTeam::WatchpointAt(int32 index) const
5434235cb3eSRene Gollent{
5444235cb3eSRene Gollent	return fWatchpoints.ItemAt(index);
5454235cb3eSRene Gollent}
5464235cb3eSRene Gollent
5474235cb3eSRene Gollent
5484235cb3eSRene GollentWatchpoint*
5494235cb3eSRene GollentTeam::WatchpointAtAddress(target_addr_t address) const
5504235cb3eSRene Gollent{
5514235cb3eSRene Gollent	return fWatchpoints.BinarySearchByKey(address,
5524235cb3eSRene Gollent		&Watchpoint::CompareAddressWatchpoint);
5534235cb3eSRene Gollent}
5544235cb3eSRene Gollent
5554235cb3eSRene Gollent
5564235cb3eSRene Gollentvoid
5574235cb3eSRene GollentTeam::GetWatchpointsInAddressRange(TargetAddressRange range,
5584235cb3eSRene Gollent	BObjectList<Watchpoint>& watchpoints) const
5594235cb3eSRene Gollent{
5604235cb3eSRene Gollent	int32 index = fWatchpoints.FindBinaryInsertionIndex(
5614235cb3eSRene Gollent		WatchpointByAddressPredicate(range.Start()));
5624235cb3eSRene Gollent	for (; Watchpoint* watchpoint = fWatchpoints.ItemAt(index); index++) {
5634235cb3eSRene Gollent		if (watchpoint->Address() > range.End())
5644235cb3eSRene Gollent			break;
5654235cb3eSRene Gollent
5664235cb3eSRene Gollent		watchpoints.AddItem(watchpoint);
5674235cb3eSRene Gollent	}
5684235cb3eSRene Gollent}
5694235cb3eSRene Gollent
5704235cb3eSRene Gollent
571f66bd625SIngo Weinholdstatus_t
572f66bd625SIngo WeinholdTeam::GetStatementAtAddress(target_addr_t address, FunctionInstance*& _function,
573f66bd625SIngo Weinhold	Statement*& _statement)
574f66bd625SIngo Weinhold{
5757483c98dSIngo Weinhold	TRACE_CODE("Team::GetStatementAtAddress(%#" B_PRIx64 ")\n", address);
5766e72ebfcSIngo Weinhold
577f66bd625SIngo Weinhold	// get the image at the address
578f66bd625SIngo Weinhold	Image* image = ImageByAddress(address);
5796e72ebfcSIngo Weinhold	if (image == NULL) {
5806e72ebfcSIngo Weinhold		TRACE_CODE("  -> no image\n");
581f66bd625SIngo Weinhold		return B_ENTRY_NOT_FOUND;
5826e72ebfcSIngo Weinhold	}
583f66bd625SIngo Weinhold
584f66bd625SIngo Weinhold	ImageDebugInfo* imageDebugInfo = image->GetImageDebugInfo();
5856e72ebfcSIngo Weinhold	if (imageDebugInfo == NULL) {
5866e72ebfcSIngo Weinhold		TRACE_CODE("  -> no image debug info\n");
587f66bd625SIngo Weinhold		return B_ENTRY_NOT_FOUND;
5886e72ebfcSIngo Weinhold	}
589f66bd625SIngo Weinhold
590f66bd625SIngo Weinhold	// get the function
591f66bd625SIngo Weinhold	FunctionInstance* functionInstance
592f66bd625SIngo Weinhold		= imageDebugInfo->FunctionAtAddress(address);
5936e72ebfcSIngo Weinhold	if (functionInstance == NULL) {
5946e72ebfcSIngo Weinhold		TRACE_CODE("  -> no function instance\n");
595f66bd625SIngo Weinhold		return B_ENTRY_NOT_FOUND;
5966e72ebfcSIngo Weinhold	}
597f66bd625SIngo Weinhold
59818ca318aSIngo Weinhold	// If the function instance has disassembled code attached, we can get the
59918ca318aSIngo Weinhold	// statement directly.
60018ca318aSIngo Weinhold	if (DisassembledCode* code = functionInstance->GetSourceCode()) {
60118ca318aSIngo Weinhold		Statement* statement = code->StatementAtAddress(address);
60225598171SIngo Weinhold		if (statement == NULL)
60325598171SIngo Weinhold			return B_ENTRY_NOT_FOUND;
60425598171SIngo Weinhold
60525598171SIngo Weinhold		statement->AcquireReference();
60625598171SIngo Weinhold		_statement = statement;
60725598171SIngo Weinhold		_function = functionInstance;
60825598171SIngo Weinhold		return B_OK;
60918ca318aSIngo Weinhold	}
61018ca318aSIngo Weinhold
611f66bd625SIngo Weinhold	// get the statement from the image debug info
612f66bd625SIngo Weinhold	FunctionDebugInfo* functionDebugInfo
613f66bd625SIngo Weinhold		= functionInstance->GetFunctionDebugInfo();
614f66bd625SIngo Weinhold	status_t error = functionDebugInfo->GetSpecificImageDebugInfo()
615f66bd625SIngo Weinhold		->GetStatement(functionDebugInfo, address, _statement);
6166e72ebfcSIngo Weinhold	if (error != B_OK) {
6176e72ebfcSIngo Weinhold		TRACE_CODE("  -> no statement from the specific image debug info\n");
618f66bd625SIngo Weinhold		return error;
6196e72ebfcSIngo Weinhold	}
620f66bd625SIngo Weinhold
621f66bd625SIngo Weinhold	_function = functionInstance;
622f66bd625SIngo Weinhold	return B_OK;
623f66bd625SIngo Weinhold}
624f66bd625SIngo Weinhold
625f66bd625SIngo Weinhold
626a4b0c192SIngo Weinholdstatus_t
627a4b0c192SIngo WeinholdTeam::GetStatementAtSourceLocation(SourceCode* sourceCode,
628a4b0c192SIngo Weinhold	const SourceLocation& location, Statement*& _statement)
629a4b0c192SIngo Weinhold{
6307483c98dSIngo Weinhold	TRACE_CODE("Team::GetStatementAtSourceLocation(%p, (%" B_PRId32 ", %"
6317483c98dSIngo Weinhold		B_PRId32 "))\n", sourceCode, location.Line(), location.Column());
6326e72ebfcSIngo Weinhold
633a4b0c192SIngo Weinhold	// If we're lucky the source code can provide us with a statement.
63418ca318aSIngo Weinhold	if (DisassembledCode* code = dynamic_cast<DisassembledCode*>(sourceCode)) {
63518ca318aSIngo Weinhold		Statement* statement = code->StatementAtLocation(location);
63618ca318aSIngo Weinhold		if (statement == NULL)
63718ca318aSIngo Weinhold			return B_ENTRY_NOT_FOUND;
63818ca318aSIngo Weinhold
63918ca318aSIngo Weinhold		statement->AcquireReference();
64018ca318aSIngo Weinhold		_statement = statement;
64118ca318aSIngo Weinhold		return B_OK;
64218ca318aSIngo Weinhold	}
643a4b0c192SIngo Weinhold
644a4b0c192SIngo Weinhold	// Go the long and stony way over the source file and the team debug info.
645a4b0c192SIngo Weinhold	// get the source file for the source code
646a4b0c192SIngo Weinhold	LocatableFile* sourceFile = sourceCode->GetSourceFile();
647a4b0c192SIngo Weinhold	if (sourceFile == NULL)
648a4b0c192SIngo Weinhold		return B_ENTRY_NOT_FOUND;
649a4b0c192SIngo Weinhold
650a4b0c192SIngo Weinhold	// get the function at the source location
651a4b0c192SIngo Weinhold	Function* function = fDebugInfo->FunctionAtSourceLocation(sourceFile,
652a4b0c192SIngo Weinhold		location);
653a4b0c192SIngo Weinhold	if (function == NULL)
654a4b0c192SIngo Weinhold		return B_ENTRY_NOT_FOUND;
655a4b0c192SIngo Weinhold
656a4b0c192SIngo Weinhold	// Get some function instance and ask its image debug info to provide us
657a4b0c192SIngo Weinhold	// with a statement.
658a4b0c192SIngo Weinhold	FunctionInstance* functionInstance = function->FirstInstance();
659a4b0c192SIngo Weinhold	if (functionInstance == NULL)
660a4b0c192SIngo Weinhold		return B_ENTRY_NOT_FOUND;
661a4b0c192SIngo Weinhold
662a4b0c192SIngo Weinhold	FunctionDebugInfo* functionDebugInfo
663a4b0c192SIngo Weinhold		= functionInstance->GetFunctionDebugInfo();
664a4b0c192SIngo Weinhold	return functionDebugInfo->GetSpecificImageDebugInfo()
665a4b0c192SIngo Weinhold		->GetStatementAtSourceLocation(functionDebugInfo, location, _statement);
6662bf55b39SIngo Weinhold}
6672bf55b39SIngo Weinhold
668a4b0c192SIngo Weinhold
6692bf55b39SIngo WeinholdFunction*
6702bf55b39SIngo WeinholdTeam::FunctionByID(FunctionID* functionID) const
6712bf55b39SIngo Weinhold{
6722bf55b39SIngo Weinhold	return fDebugInfo->FunctionByID(functionID);
673a4b0c192SIngo Weinhold}
674a4b0c192SIngo Weinhold
675a4b0c192SIngo Weinhold
676ac8b6713SIngo Weinholdvoid
677ac8b6713SIngo WeinholdTeam::AddListener(Listener* listener)
678ac8b6713SIngo Weinhold{
679ae53f490SIngo Weinhold	AutoLocker<Team> locker(this);
680ac8b6713SIngo Weinhold	fListeners.Add(listener);
681ac8b6713SIngo Weinhold}
682ac8b6713SIngo Weinhold
683ac8b6713SIngo Weinhold
684ac8b6713SIngo Weinholdvoid
685ac8b6713SIngo WeinholdTeam::RemoveListener(Listener* listener)
686ac8b6713SIngo Weinhold{
687ae53f490SIngo Weinhold	AutoLocker<Team> locker(this);
688ac8b6713SIngo Weinhold	fListeners.Remove(listener);
689ac8b6713SIngo Weinhold}
690ac8b6713SIngo Weinhold
691ac8b6713SIngo Weinhold
692b6aff5aaSIngo Weinholdvoid
693b6aff5aaSIngo WeinholdTeam::NotifyThreadStateChanged(Thread* thread)
694b6aff5aaSIngo Weinhold{
695b6aff5aaSIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
696b6aff5aaSIngo Weinhold			Listener* listener = it.Next();) {
697b6aff5aaSIngo Weinhold		listener->ThreadStateChanged(
698b6aff5aaSIngo Weinhold			ThreadEvent(TEAM_EVENT_THREAD_STATE_CHANGED, thread));
699b6aff5aaSIngo Weinhold	}
700b6aff5aaSIngo Weinhold}
701b6aff5aaSIngo Weinhold
702b6aff5aaSIngo Weinhold
703b6aff5aaSIngo Weinholdvoid
704b6aff5aaSIngo WeinholdTeam::NotifyThreadCpuStateChanged(Thread* thread)
705b6aff5aaSIngo Weinhold{
706b6aff5aaSIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
707b6aff5aaSIngo Weinhold			Listener* listener = it.Next();) {
708b6aff5aaSIngo Weinhold		listener->ThreadCpuStateChanged(
709b6aff5aaSIngo Weinhold			ThreadEvent(TEAM_EVENT_THREAD_CPU_STATE_CHANGED, thread));
710b6aff5aaSIngo Weinhold	}
711b6aff5aaSIngo Weinhold}
712b6aff5aaSIngo Weinhold
713b6aff5aaSIngo Weinhold
714b6aff5aaSIngo Weinholdvoid
715b6aff5aaSIngo WeinholdTeam::NotifyThreadStackTraceChanged(Thread* thread)
716b6aff5aaSIngo Weinhold{
717b6aff5aaSIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
718b6aff5aaSIngo Weinhold			Listener* listener = it.Next();) {
719b6aff5aaSIngo Weinhold		listener->ThreadStackTraceChanged(
720b6aff5aaSIngo Weinhold			ThreadEvent(TEAM_EVENT_THREAD_STACK_TRACE_CHANGED, thread));
721b6aff5aaSIngo Weinhold	}
722b6aff5aaSIngo Weinhold}
723b6aff5aaSIngo Weinhold
724b6aff5aaSIngo Weinhold
72593b64845SIngo Weinholdvoid
72693b64845SIngo WeinholdTeam::NotifyImageDebugInfoChanged(Image* image)
72793b64845SIngo Weinhold{
72893b64845SIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
72993b64845SIngo Weinhold			Listener* listener = it.Next();) {
73093b64845SIngo Weinhold		listener->ImageDebugInfoChanged(
73193b64845SIngo Weinhold			ImageEvent(TEAM_EVENT_IMAGE_DEBUG_INFO_CHANGED, image));
73293b64845SIngo Weinhold	}
73393b64845SIngo Weinhold}
73493b64845SIngo Weinhold
73593b64845SIngo Weinhold
736cae8421dSRene Gollentvoid
737cae8421dSRene GollentTeam::NotifyStopOnImageLoadChanged(bool enabled, bool useImageNameList)
738cae8421dSRene Gollent{
739cae8421dSRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
740cae8421dSRene Gollent			Listener* listener = it.Next();) {
741cae8421dSRene Gollent		listener->StopOnImageLoadSettingsChanged(
742cae8421dSRene Gollent			ImageLoadEvent(TEAM_EVENT_IMAGE_LOAD_SETTINGS_CHANGED, this,
743cae8421dSRene Gollent				enabled, useImageNameList));
744cae8421dSRene Gollent	}
745cae8421dSRene Gollent}
746cae8421dSRene Gollent
747cae8421dSRene Gollent
748cae8421dSRene Gollentvoid
749cae8421dSRene GollentTeam::NotifyStopImageNameAdded(const BString& name)
750cae8421dSRene Gollent{
751cae8421dSRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
752cae8421dSRene Gollent			Listener* listener = it.Next();) {
753cae8421dSRene Gollent		listener->StopOnImageLoadNameAdded(
754cae8421dSRene Gollent			ImageLoadNameEvent(TEAM_EVENT_IMAGE_LOAD_NAME_ADDED, this, name));
755cae8421dSRene Gollent	}
756cae8421dSRene Gollent}
757cae8421dSRene Gollent
758cae8421dSRene Gollent
759cae8421dSRene Gollentvoid
760cae8421dSRene GollentTeam::NotifyStopImageNameRemoved(const BString& name)
761cae8421dSRene Gollent{
762cae8421dSRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
763cae8421dSRene Gollent			Listener* listener = it.Next();) {
764cae8421dSRene Gollent		listener->StopOnImageLoadNameRemoved(
765cae8421dSRene Gollent			ImageLoadNameEvent(TEAM_EVENT_IMAGE_LOAD_NAME_REMOVED, this,
766cae8421dSRene Gollent				name));
767cae8421dSRene Gollent	}
768cae8421dSRene Gollent}
769cae8421dSRene Gollent
770cae8421dSRene Gollent
77114a55dceSRene Gollentvoid
77214a55dceSRene GollentTeam::NotifyDefaultSignalDispositionChanged(int32 disposition)
77314a55dceSRene Gollent{
77414a55dceSRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
77514a55dceSRene Gollent			Listener* listener = it.Next();) {
77614a55dceSRene Gollent		listener->DefaultSignalDispositionChanged(
77714a55dceSRene Gollent			DefaultSignalDispositionEvent(
77814a55dceSRene Gollent				TEAM_EVENT_DEFAULT_SIGNAL_DISPOSITION_CHANGED, this,
77914a55dceSRene Gollent				disposition));
78014a55dceSRene Gollent	}
78114a55dceSRene Gollent}
78214a55dceSRene Gollent
78314a55dceSRene Gollent
78414a55dceSRene Gollentvoid
78514a55dceSRene GollentTeam::NotifyCustomSignalDispositionChanged(int32 signal, int32 disposition)
78614a55dceSRene Gollent{
78714a55dceSRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
78814a55dceSRene Gollent			Listener* listener = it.Next();) {
78914a55dceSRene Gollent		listener->CustomSignalDispositionChanged(
79014a55dceSRene Gollent			CustomSignalDispositionEvent(
79114a55dceSRene Gollent				TEAM_EVENT_CUSTOM_SIGNAL_DISPOSITION_CHANGED, this,
79214a55dceSRene Gollent				signal, disposition));
79314a55dceSRene Gollent	}
79414a55dceSRene Gollent}
79514a55dceSRene Gollent
79614a55dceSRene Gollent
79714a55dceSRene Gollentvoid
79814a55dceSRene GollentTeam::NotifyCustomSignalDispositionRemoved(int32 signal)
79914a55dceSRene Gollent{
80014a55dceSRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
80114a55dceSRene Gollent			Listener* listener = it.Next();) {
80214a55dceSRene Gollent		listener->CustomSignalDispositionRemoved(
80314a55dceSRene Gollent			CustomSignalDispositionEvent(
80414a55dceSRene Gollent				TEAM_EVENT_CUSTOM_SIGNAL_DISPOSITION_REMOVED, this,
80514a55dceSRene Gollent				signal, SIGNAL_DISPOSITION_IGNORE));
80614a55dceSRene Gollent	}
80714a55dceSRene Gollent}
80814a55dceSRene Gollent
80914a55dceSRene Gollent
810d692e338SRene Gollentvoid
811d692e338SRene GollentTeam::NotifyConsoleOutputReceived(int32 fd, const BString& output)
812d692e338SRene Gollent{
813d692e338SRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
814d692e338SRene Gollent			Listener* listener = it.Next();) {
815d692e338SRene Gollent		listener->ConsoleOutputReceived(
816d692e338SRene Gollent			ConsoleOutputEvent(TEAM_EVENT_CONSOLE_OUTPUT_RECEIVED, this,
817d692e338SRene Gollent				fd, output));
818d692e338SRene Gollent	}
819d692e338SRene Gollent}
820d692e338SRene Gollent
821d692e338SRene Gollent
822a5e1e7ceSIngo Weinholdvoid
8230fc8a75cSIngo WeinholdTeam::NotifyUserBreakpointChanged(UserBreakpoint* breakpoint)
824a5e1e7ceSIngo Weinhold{
825a5e1e7ceSIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
826a5e1e7ceSIngo Weinhold			Listener* listener = it.Next();) {
8270fc8a75cSIngo Weinhold		listener->UserBreakpointChanged(UserBreakpointEvent(
828a5e1e7ceSIngo Weinhold			TEAM_EVENT_USER_BREAKPOINT_CHANGED, this, breakpoint));
829a5e1e7ceSIngo Weinhold	}
830a5e1e7ceSIngo Weinhold}
831a5e1e7ceSIngo Weinhold
832a5e1e7ceSIngo Weinhold
833ac8b6713SIngo Weinholdvoid
8344235cb3eSRene GollentTeam::NotifyWatchpointChanged(Watchpoint* watchpoint)
835ac8b6713SIngo Weinhold{
836ac8b6713SIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
837ac8b6713SIngo Weinhold			Listener* listener = it.Next();) {
8384235cb3eSRene Gollent		listener->WatchpointChanged(WatchpointEvent(
8394235cb3eSRene Gollent			TEAM_EVENT_WATCHPOINT_CHANGED, this, watchpoint));
840ac8b6713SIngo Weinhold	}
841ac8b6713SIngo Weinhold}
842ac8b6713SIngo Weinhold
843ac8b6713SIngo Weinhold
844248c2ff4SRene Gollentvoid
8457bdeef54SRene GollentTeam::NotifyDebugReportChanged(const char* reportPath, status_t result)
846248c2ff4SRene Gollent{
847248c2ff4SRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
848248c2ff4SRene Gollent			Listener* listener = it.Next();) {
849248c2ff4SRene Gollent		listener->DebugReportChanged(DebugReportEvent(
8507bdeef54SRene Gollent			TEAM_EVENT_DEBUG_REPORT_CHANGED, this, reportPath, result));
851248c2ff4SRene Gollent	}
852248c2ff4SRene Gollent}
853248c2ff4SRene Gollent
854248c2ff4SRene Gollent
855e2d845a4SRene Gollentvoid
856e2d845a4SRene GollentTeam::NotifyCoreFileChanged(const char* targetPath)
857e2d845a4SRene Gollent{
858e2d845a4SRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
859e2d845a4SRene Gollent			Listener* listener = it.Next();) {
860e2d845a4SRene Gollent		listener->CoreFileChanged(CoreFileChangedEvent(
861e2d845a4SRene Gollent			TEAM_EVENT_CORE_FILE_CHANGED, this, targetPath));
862e2d845a4SRene Gollent	}
863e2d845a4SRene Gollent}
864e2d845a4SRene Gollent
865e2d845a4SRene Gollent
86668e78ff8SRene Gollentvoid
86768e78ff8SRene GollentTeam::NotifyMemoryChanged(target_addr_t address, target_size_t size)
86868e78ff8SRene Gollent{
86968e78ff8SRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
87068e78ff8SRene Gollent			Listener* listener = it.Next();) {
87168e78ff8SRene Gollent		listener->MemoryChanged(MemoryChangedEvent(
87268e78ff8SRene Gollent			TEAM_EVENT_MEMORY_CHANGED, this, address, size));
87368e78ff8SRene Gollent	}
87468e78ff8SRene Gollent}
87568e78ff8SRene Gollent
87668e78ff8SRene Gollent
877754b42a5SRene Gollentvoid
878754b42a5SRene GollentTeam::_NotifyTeamRenamed()
879754b42a5SRene Gollent{
880754b42a5SRene Gollent	for (ListenerList::Iterator it = fListeners.GetIterator();
881754b42a5SRene Gollent			Listener* listener = it.Next();) {
882754b42a5SRene Gollent		listener->TeamRenamed(Event(TEAM_EVENT_TEAM_RENAMED, this));
883754b42a5SRene Gollent	}
884754b42a5SRene Gollent}
885754b42a5SRene Gollent
886754b42a5SRene Gollent
887ac8b6713SIngo Weinholdvoid
8884235cb3eSRene GollentTeam::_NotifyThreadAdded(Thread* thread)
889ac8b6713SIngo Weinhold{
890ac8b6713SIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
891ac8b6713SIngo Weinhold			Listener* listener = it.Next();) {
8924235cb3eSRene Gollent		listener->ThreadAdded(ThreadEvent(TEAM_EVENT_THREAD_ADDED, thread));
893ac8b6713SIngo Weinhold	}
894ac8b6713SIngo Weinhold}
895ac8b6713SIngo Weinhold
896ac8b6713SIngo Weinhold
897ac8b6713SIngo Weinholdvoid
8984235cb3eSRene GollentTeam::_NotifyThreadRemoved(Thread* thread)
899ac8b6713SIngo Weinhold{
900ac8b6713SIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
901ac8b6713SIngo Weinhold			Listener* listener = it.Next();) {
9024235cb3eSRene Gollent		listener->ThreadRemoved(ThreadEvent(TEAM_EVENT_THREAD_REMOVED, thread));
903ac8b6713SIngo Weinhold	}
904ac8b6713SIngo Weinhold}
905ac8b6713SIngo Weinhold
906ac8b6713SIngo Weinhold
907a5e1e7ceSIngo Weinholdvoid
9084235cb3eSRene GollentTeam::_NotifyImageAdded(Image* image)
909a5e1e7ceSIngo Weinhold{
910a5e1e7ceSIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
911a5e1e7ceSIngo Weinhold			Listener* listener = it.Next();) {
9124235cb3eSRene Gollent		listener->ImageAdded(ImageEvent(TEAM_EVENT_IMAGE_ADDED, image));
913a5e1e7ceSIngo Weinhold	}
914a5e1e7ceSIngo Weinhold}
915a5e1e7ceSIngo Weinhold
916a5e1e7ceSIngo Weinhold
917a5e1e7ceSIngo Weinholdvoid
9184235cb3eSRene GollentTeam::_NotifyImageRemoved(Image* image)
919a5e1e7ceSIngo Weinhold{
920a5e1e7ceSIngo Weinhold	for (ListenerList::Iterator it = fListeners.GetIterator();
921a5e1e7ceSIngo Weinhold			Listener* listener = it.Next();) {
9224235cb3eSRene Gollent		listener->ImageRemoved(ImageEvent(TEAM_EVENT_IMAGE_REMOVED, image));
923a5e1e7ceSIngo Weinhold	}
924a5e1e7ceSIngo Weinhold}
925a5e1e7ceSIngo Weinhold
926a5e1e7ceSIngo Weinhold
927ae53f490SIngo Weinhold// #pragma mark - Event
928ae53f490SIngo Weinhold
929ae53f490SIngo Weinhold
930ae53f490SIngo WeinholdTeam::Event::Event(uint32 type, Team* team)
931ae53f490SIngo Weinhold	:
932ae53f490SIngo Weinhold	fEventType(type),
933ae53f490SIngo Weinhold	fTeam(team)
934ae53f490SIngo Weinhold{
935ae53f490SIngo Weinhold}
936ae53f490SIngo Weinhold
937ae53f490SIngo Weinhold
938ae53f490SIngo Weinhold// #pragma mark - ThreadEvent
939ae53f490SIngo Weinhold
940ae53f490SIngo Weinhold
941ae53f490SIngo WeinholdTeam::ThreadEvent::ThreadEvent(uint32 type, Thread* thread)
942ae53f490SIngo Weinhold	:
943ae53f490SIngo Weinhold	Event(type, thread->GetTeam()),
944ae53f490SIngo Weinhold	fThread(thread)
945ae53f490SIngo Weinhold{
946ae53f490SIngo Weinhold}
947ae53f490SIngo Weinhold
948ae53f490SIngo Weinhold
949ae53f490SIngo Weinhold// #pragma mark - ImageEvent
950ae53f490SIngo Weinhold
951ae53f490SIngo Weinhold
952ae53f490SIngo WeinholdTeam::ImageEvent::ImageEvent(uint32 type, Image* image)
953ae53f490SIngo Weinhold	:
954ae53f490SIngo Weinhold	Event(type, image->GetTeam()),
955ae53f490SIngo Weinhold	fImage(image)
956ae53f490SIngo Weinhold{
957ae53f490SIngo Weinhold}
958ae53f490SIngo Weinhold
959ae53f490SIngo Weinhold
960cae8421dSRene Gollent// #pragma mark - ImageLoadEvent
961cae8421dSRene Gollent
962cae8421dSRene Gollent
963cae8421dSRene GollentTeam::ImageLoadEvent::ImageLoadEvent(uint32 type, Team* team,
964cae8421dSRene Gollent	bool stopOnImageLoad, bool stopImageNameListEnabled)
965cae8421dSRene Gollent	:
966cae8421dSRene Gollent	Event(type, team),
967cae8421dSRene Gollent	fStopOnImageLoad(stopOnImageLoad),
968cae8421dSRene Gollent	fStopImageNameListEnabled(stopImageNameListEnabled)
969cae8421dSRene Gollent{
970cae8421dSRene Gollent}
971cae8421dSRene Gollent
972cae8421dSRene Gollent
973cae8421dSRene Gollent// #pragma mark - ImageLoadNameEvent
974cae8421dSRene Gollent
975cae8421dSRene Gollent
976cae8421dSRene GollentTeam::ImageLoadNameEvent::ImageLoadNameEvent(uint32 type, Team* team,
977cae8421dSRene Gollent	const BString& name)
978cae8421dSRene Gollent	:
979cae8421dSRene Gollent	Event(type, team),
980cae8421dSRene Gollent	fImageName(name)
981cae8421dSRene Gollent{
982cae8421dSRene Gollent}
983cae8421dSRene Gollent
984cae8421dSRene Gollent
98514a55dceSRene Gollent// #pragma mark - DefaultSignalDispositionEvent
98614a55dceSRene Gollent
98714a55dceSRene Gollent
98814a55dceSRene GollentTeam::DefaultSignalDispositionEvent::DefaultSignalDispositionEvent(uint32 type,
98914a55dceSRene Gollent	Team* team, int32 disposition)
99014a55dceSRene Gollent	:
99114a55dceSRene Gollent	Event(type, team),
99214a55dceSRene Gollent	fDefaultDisposition(disposition)
99314a55dceSRene Gollent{
99414a55dceSRene Gollent}
99514a55dceSRene Gollent
99614a55dceSRene Gollent
99714a55dceSRene Gollent// #pragma mark - CustomSignalDispositionEvent
99814a55dceSRene Gollent
99914a55dceSRene Gollent
100014a55dceSRene GollentTeam::CustomSignalDispositionEvent::CustomSignalDispositionEvent(uint32 type,
100114a55dceSRene Gollent	Team* team, int32 signal, int32 disposition)
100214a55dceSRene Gollent	:
100314a55dceSRene Gollent	Event(type, team),
100414a55dceSRene Gollent	fSignal(signal),
100514a55dceSRene Gollent	fDisposition(disposition)
100614a55dceSRene Gollent{
100714a55dceSRene Gollent}
100814a55dceSRene Gollent
100914a55dceSRene Gollent
1010a5e1e7ceSIngo Weinhold// #pragma mark - BreakpointEvent
1011a5e1e7ceSIngo Weinhold
1012a5e1e7ceSIngo Weinhold
1013a5e1e7ceSIngo WeinholdTeam::BreakpointEvent::BreakpointEvent(uint32 type, Team* team,
1014a5e1e7ceSIngo Weinhold	Breakpoint* breakpoint)
1015a5e1e7ceSIngo Weinhold	:
1016a5e1e7ceSIngo Weinhold	Event(type, team),
1017a5e1e7ceSIngo Weinhold	fBreakpoint(breakpoint)
1018a5e1e7ceSIngo Weinhold{
1019a5e1e7ceSIngo Weinhold}
1020a5e1e7ceSIngo Weinhold
1021a5e1e7ceSIngo Weinhold
1022d692e338SRene Gollent// #pragma mark - ConsoleOutputEvent
1023d692e338SRene Gollent
1024d692e338SRene Gollent
1025d692e338SRene GollentTeam::ConsoleOutputEvent::ConsoleOutputEvent(uint32 type, Team* team,
1026d692e338SRene Gollent	int32 fd, const BString& output)
1027d692e338SRene Gollent	:
1028d692e338SRene Gollent	Event(type, team),
1029d692e338SRene Gollent	fDescriptor(fd),
1030d692e338SRene Gollent	fOutput(output)
1031d692e338SRene Gollent{
1032d692e338SRene Gollent}
1033d692e338SRene Gollent
1034d692e338SRene Gollent
1035248c2ff4SRene Gollent// #pragma mark - DebugReportEvent
1036248c2ff4SRene Gollent
1037248c2ff4SRene Gollent
1038248c2ff4SRene GollentTeam::DebugReportEvent::DebugReportEvent(uint32 type, Team* team,
10397bdeef54SRene Gollent	const char* reportPath, status_t finalStatus)
1040248c2ff4SRene Gollent	:
1041248c2ff4SRene Gollent	Event(type, team),
10427bdeef54SRene Gollent	fReportPath(reportPath),
10437bdeef54SRene Gollent	fFinalStatus(finalStatus)
1044248c2ff4SRene Gollent{
1045248c2ff4SRene Gollent}
1046248c2ff4SRene Gollent
1047248c2ff4SRene Gollent
1048e2d845a4SRene Gollent// #pragma mark - CoreFileChangedEvent
1049e2d845a4SRene Gollent
1050e2d845a4SRene Gollent
1051e2d845a4SRene GollentTeam::CoreFileChangedEvent::CoreFileChangedEvent(uint32 type, Team* team,
1052e2d845a4SRene Gollent	const char* targetPath)
1053e2d845a4SRene Gollent	:
1054e2d845a4SRene Gollent	Event(type, team),
1055e2d845a4SRene Gollent	fTargetPath(targetPath)
1056e2d845a4SRene Gollent{
1057e2d845a4SRene Gollent}
1058e2d845a4SRene Gollent
1059e2d845a4SRene Gollent
106068e78ff8SRene Gollent// #pragma mark - MemoryChangedEvent
106168e78ff8SRene Gollent
106268e78ff8SRene Gollent
106368e78ff8SRene GollentTeam::MemoryChangedEvent::MemoryChangedEvent(uint32 type, Team* team,
106468e78ff8SRene Gollent	target_addr_t address, target_size_t size)
106568e78ff8SRene Gollent	:
106668e78ff8SRene Gollent	Event(type, team),
106768e78ff8SRene Gollent	fTargetAddress(address),
106868e78ff8SRene Gollent	fSize(size)
106968e78ff8SRene Gollent{
107068e78ff8SRene Gollent}
107168e78ff8SRene Gollent
107268e78ff8SRene Gollent
10734235cb3eSRene Gollent// #pragma mark - WatchpointEvent
10744235cb3eSRene Gollent
10754235cb3eSRene Gollent
10764235cb3eSRene GollentTeam::WatchpointEvent::WatchpointEvent(uint32 type, Team* team,
10774235cb3eSRene Gollent	Watchpoint* watchpoint)
10784235cb3eSRene Gollent	:
10794235cb3eSRene Gollent	Event(type, team),
10804235cb3eSRene Gollent	fWatchpoint(watchpoint)
10814235cb3eSRene Gollent{
10824235cb3eSRene Gollent}
10834235cb3eSRene Gollent
10844235cb3eSRene Gollent
10850fc8a75cSIngo Weinhold// #pragma mark - UserBreakpointEvent
10860fc8a75cSIngo Weinhold
10870fc8a75cSIngo Weinhold
10880fc8a75cSIngo WeinholdTeam::UserBreakpointEvent::UserBreakpointEvent(uint32 type, Team* team,
10890fc8a75cSIngo Weinhold	UserBreakpoint* breakpoint)
10900fc8a75cSIngo Weinhold	:
10910fc8a75cSIngo Weinhold	Event(type, team),
10920fc8a75cSIngo Weinhold	fBreakpoint(breakpoint)
10930fc8a75cSIngo Weinhold{
10940fc8a75cSIngo Weinhold}
10950fc8a75cSIngo Weinhold
10960fc8a75cSIngo Weinhold
1097ac8b6713SIngo Weinhold// #pragma mark - Listener
1098ac8b6713SIngo Weinhold
1099ae53f490SIngo Weinhold
1100ac8b6713SIngo WeinholdTeam::Listener::~Listener()
1101ac8b6713SIngo Weinhold{
1102ac8b6713SIngo Weinhold}
1103ac8b6713SIngo Weinhold
1104ac8b6713SIngo Weinhold
1105754b42a5SRene Gollentvoid
1106754b42a5SRene GollentTeam::Listener::TeamRenamed(const Team::Event& event)
1107754b42a5SRene Gollent{
1108754b42a5SRene Gollent}
1109754b42a5SRene Gollent
1110754b42a5SRene Gollent
1111ac8b6713SIngo Weinholdvoid
1112ae53f490SIngo WeinholdTeam::Listener::ThreadAdded(const Team::ThreadEvent& event)
1113ac8b6713SIngo Weinhold{
1114ac8b6713SIngo Weinhold}
1115ac8b6713SIngo Weinhold
1116ac8b6713SIngo Weinhold
1117ac8b6713SIngo Weinholdvoid
1118ae53f490SIngo WeinholdTeam::Listener::ThreadRemoved(const Team::ThreadEvent& event)
1119ac8b6713SIngo Weinhold{
1120ac8b6713SIngo Weinhold}
1121ac8b6713SIngo Weinhold
1122ac8b6713SIngo Weinhold
1123ac8b6713SIngo Weinholdvoid
1124ae53f490SIngo WeinholdTeam::Listener::ImageAdded(const Team::ImageEvent& event)
1125ac8b6713SIngo Weinhold{
1126ac8b6713SIngo Weinhold}
1127ac8b6713SIngo Weinhold
1128ac8b6713SIngo Weinhold
1129ac8b6713SIngo Weinholdvoid
1130ae53f490SIngo WeinholdTeam::Listener::ImageRemoved(const Team::ImageEvent& event)
1131ac8b6713SIngo Weinhold{
1132ac8b6713SIngo Weinhold}
1133b6aff5aaSIngo Weinhold
1134b6aff5aaSIngo Weinhold
1135b6aff5aaSIngo Weinholdvoid
1136b6aff5aaSIngo WeinholdTeam::Listener::ThreadStateChanged(const Team::ThreadEvent& event)
1137b6aff5aaSIngo Weinhold{
1138b6aff5aaSIngo Weinhold}
1139b6aff5aaSIngo Weinhold
1140b6aff5aaSIngo Weinhold
1141b6aff5aaSIngo Weinholdvoid
1142b6aff5aaSIngo WeinholdTeam::Listener::ThreadCpuStateChanged(const Team::ThreadEvent& event)
1143b6aff5aaSIngo Weinhold{
1144b6aff5aaSIngo Weinhold}
1145b6aff5aaSIngo Weinhold
1146b6aff5aaSIngo Weinhold
1147b6aff5aaSIngo Weinholdvoid
1148b6aff5aaSIngo WeinholdTeam::Listener::ThreadStackTraceChanged(const Team::ThreadEvent& event)
1149b6aff5aaSIngo Weinhold{
1150b6aff5aaSIngo Weinhold}
115193b64845SIngo Weinhold
115293b64845SIngo Weinhold
115393b64845SIngo Weinholdvoid
115493b64845SIngo WeinholdTeam::Listener::ImageDebugInfoChanged(const Team::ImageEvent& event)
115593b64845SIngo Weinhold{
115693b64845SIngo Weinhold}
1157a5e1e7ceSIngo Weinhold
1158a5e1e7ceSIngo Weinhold
1159cae8421dSRene Gollentvoid
1160cae8421dSRene GollentTeam::Listener::StopOnImageLoadSettingsChanged(
1161cae8421dSRene Gollent	const Team::ImageLoadEvent& event)
1162cae8421dSRene Gollent{
1163cae8421dSRene Gollent}
1164cae8421dSRene Gollent
1165cae8421dSRene Gollent
1166cae8421dSRene Gollentvoid
1167cae8421dSRene GollentTeam::Listener::StopOnImageLoadNameAdded(const Team::ImageLoadNameEvent& event)
1168cae8421dSRene Gollent{
1169cae8421dSRene Gollent}
1170cae8421dSRene Gollent
1171cae8421dSRene Gollent
1172cae8421dSRene Gollentvoid
1173cae8421dSRene GollentTeam::Listener::StopOnImageLoadNameRemoved(
1174cae8421dSRene Gollent	const Team::ImageLoadNameEvent& event)
1175cae8421dSRene Gollent{
1176cae8421dSRene Gollent}
1177cae8421dSRene Gollent
1178cae8421dSRene Gollent
117914a55dceSRene Gollentvoid
118014a55dceSRene GollentTeam::Listener::DefaultSignalDispositionChanged(
118114a55dceSRene Gollent	const Team::DefaultSignalDispositionEvent& event)
118214a55dceSRene Gollent{
118314a55dceSRene Gollent}
118414a55dceSRene Gollent
118514a55dceSRene Gollent
118614a55dceSRene Gollentvoid
118714a55dceSRene GollentTeam::Listener::CustomSignalDispositionChanged(
118814a55dceSRene Gollent	const Team::CustomSignalDispositionEvent& event)
118914a55dceSRene Gollent{
119014a55dceSRene Gollent}
119114a55dceSRene Gollent
119214a55dceSRene Gollent
119314a55dceSRene Gollentvoid
119414a55dceSRene GollentTeam::Listener::CustomSignalDispositionRemoved(
119514a55dceSRene Gollent	const Team::CustomSignalDispositionEvent& event)
119614a55dceSRene Gollent{
119714a55dceSRene Gollent}
119814a55dceSRene Gollent
119914a55dceSRene Gollent
1200d692e338SRene Gollentvoid
1201d692e338SRene GollentTeam::Listener::ConsoleOutputReceived(const Team::ConsoleOutputEvent& event)
1202d692e338SRene Gollent{
1203d692e338SRene Gollent}
1204d692e338SRene Gollent
1205d692e338SRene Gollent
1206a5e1e7ceSIngo Weinholdvoid
1207a5e1e7ceSIngo WeinholdTeam::Listener::BreakpointAdded(const Team::BreakpointEvent& event)
1208a5e1e7ceSIngo Weinhold{
1209a5e1e7ceSIngo Weinhold}
1210a5e1e7ceSIngo Weinhold
1211a5e1e7ceSIngo Weinhold
1212a5e1e7ceSIngo Weinholdvoid
1213a5e1e7ceSIngo WeinholdTeam::Listener::BreakpointRemoved(const Team::BreakpointEvent& event)
1214a5e1e7ceSIngo Weinhold{
1215a5e1e7ceSIngo Weinhold}
1216a5e1e7ceSIngo Weinhold
1217a5e1e7ceSIngo Weinhold
1218a5e1e7ceSIngo Weinholdvoid
12190fc8a75cSIngo WeinholdTeam::Listener::UserBreakpointChanged(const Team::UserBreakpointEvent& event)
1220a5e1e7ceSIngo Weinhold{
1221a5e1e7ceSIngo Weinhold}
12224235cb3eSRene Gollent
12234235cb3eSRene Gollent
12244235cb3eSRene Gollentvoid
12254235cb3eSRene GollentTeam::Listener::WatchpointAdded(const Team::WatchpointEvent& event)
12264235cb3eSRene Gollent{
12274235cb3eSRene Gollent}
12284235cb3eSRene Gollent
12294235cb3eSRene Gollent
12304235cb3eSRene Gollentvoid
12314235cb3eSRene GollentTeam::Listener::WatchpointRemoved(const Team::WatchpointEvent& event)
12324235cb3eSRene Gollent{
12334235cb3eSRene Gollent}
12344235cb3eSRene Gollent
12354235cb3eSRene Gollent
12364235cb3eSRene Gollentvoid
12374235cb3eSRene GollentTeam::Listener::WatchpointChanged(const Team::WatchpointEvent& event)
12384235cb3eSRene Gollent{
12394235cb3eSRene Gollent}
1240248c2ff4SRene Gollent
1241248c2ff4SRene Gollent
1242248c2ff4SRene Gollentvoid
1243248c2ff4SRene GollentTeam::Listener::DebugReportChanged(const Team::DebugReportEvent& event)
1244248c2ff4SRene Gollent{
1245248c2ff4SRene Gollent}
124668e78ff8SRene Gollent
124768e78ff8SRene Gollent
1248e2d845a4SRene Gollentvoid
1249e2d845a4SRene GollentTeam::Listener::CoreFileChanged(const Team::CoreFileChangedEvent& event)
1250e2d845a4SRene Gollent{
1251e2d845a4SRene Gollent}
1252e2d845a4SRene Gollent
1253e2d845a4SRene Gollent
125468e78ff8SRene Gollentvoid
125568e78ff8SRene GollentTeam::Listener::MemoryChanged(const Team::MemoryChangedEvent& event)
125668e78ff8SRene Gollent{
125768e78ff8SRene Gollent}
1258