Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 90766 Details for
Bug 209724
[ThreadProf] implementing BCI support at agent
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch
patch_te_05.txt (text/plain), 251.58 KB, created by
Alexander N. Alexeev
on 2008-02-26 12:09:59 EST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Alexander N. Alexeev
Created:
2008-02-26 12:09:59 EST
Size:
251.58 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.tptp.platform.jvmti.runtime >Index: makefile.win_ipf >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/makefile.win_ipf,v >retrieving revision 1.10 >diff -u -r1.10 makefile.win_ipf >--- makefile.win_ipf 6 Dec 2007 16:50:44 -0000 1.10 >+++ makefile.win_ipf 26 Feb 2008 16:50:20 -0000 >@@ -24,6 +24,7 @@ > copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\CGAdaptor\org\eclipse\tptp\martini\CGProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\HeapAdaptor\org\eclipse\tptp\martini\HeapProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini >+ copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\ThreadAdaptor\org\eclipse\tptp\martini\ThreadProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini > > if exist javaprofiler.win_ipf.zip rm -f javaprofiler.win_ipf.zip > cd packaging >@@ -51,6 +52,7 @@ > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib >+ copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\ThreadAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > > if exist javaprofiler.win_ipf.sdk.zip rm -f javaprofiler.win_ipf.sdk.zip >Index: makefile.win_em64t >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/makefile.win_em64t,v >retrieving revision 1.10 >diff -u -r1.10 makefile.win_em64t >--- makefile.win_em64t 6 Dec 2007 16:50:44 -0000 1.10 >+++ makefile.win_em64t 26 Feb 2008 16:50:18 -0000 >@@ -24,6 +24,7 @@ > copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\CGAdaptor\org\eclipse\tptp\martini\CGProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\HeapAdaptor\org\eclipse\tptp\martini\HeapProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini >+ copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\ThreadAdaptor\org\eclipse\tptp\martini\ThreadProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini > > if exist javaprofiler.win_em64t.zip rm -f javaprofiler.win_em64t.zip > cd packaging >@@ -51,6 +52,7 @@ > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib >+ copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\ThreadAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > > if exist javaprofiler.win_em64t.sdk.zip rm -f javaprofiler.win_em64t.sdk.zip >Index: makefile.win_ia32 >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/makefile.win_ia32,v >retrieving revision 1.11 >diff -u -r1.11 makefile.win_ia32 >--- makefile.win_ia32 6 Dec 2007 16:50:44 -0000 1.11 >+++ makefile.win_ia32 26 Feb 2008 16:50:19 -0000 >@@ -24,6 +24,7 @@ > copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\CGAdaptor\org\eclipse\tptp\martini\CGProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\HeapAdaptor\org\eclipse\tptp\martini\HeapProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini >+ copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\src\Martini\Infrastructure\ThreadAdaptor\org\eclipse\tptp\martini\ThreadProxy.class packaging\plugins\org.eclipse.tptp.javaprofiler\org\eclipse\tptp\martini > > if exist javaprofiler.win_ia32.zip rm -f javaprofiler.win_ia32.zip > cd packaging >@@ -51,6 +52,7 @@ > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IA-32\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IA-32\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IA-32\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib >+ copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IA-32\ThreadAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IA-32\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib > > if exist javaprofiler.win_ia32.sdk.zip rm -f javaprofiler.win_ia32.sdk.zip >Index: makefile >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/makefile,v >retrieving revision 1.9 >diff -u -r1.9 makefile >--- makefile 6 Dec 2007 16:50:44 -0000 1.9 >+++ makefile 26 Feb 2008 16:50:18 -0000 >@@ -55,6 +55,7 @@ > cp -d org.eclipse.tptp.platform.jvmti.runtime/static_config/linux/pluginconfig.xml packaging/plugins/org.eclipse.tptp.javaprofiler/config > cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/CGAdaptor/org/eclipse/tptp/martini/CGProxy.class packaging/plugins/org.eclipse.tptp.javaprofiler/org/eclipse/tptp/martini > cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/HeapAdaptor/org/eclipse/tptp/martini/HeapProxy.class packaging/plugins/org.eclipse.tptp.javaprofiler/org/eclipse/tptp/martini >+ cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.class packaging/plugins/org.eclipse.tptp.javaprofiler/org/eclipse/tptp/martini > cd packaging; \ > zip -r9y ../javaprofiler.$(BUILD_PLATFORM).zip *; \ > cd .. >@@ -82,6 +83,7 @@ > cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libJIE.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/ > cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libCGAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/ > cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libHeapAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/ >+ cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libThreadAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/ > cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libMartiniOSA.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/ > > if [ -e javaprofiler.$(BUILD_PLATFORM).sdk.zip ]; then rm -f javaprofiler.$(BUILD_PLATFORM).sdk.zip; \ >Index: src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.cpp,v >retrieving revision 1.16 >diff -u -r1.16 JavaInstrumentorManager.cpp >--- src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.cpp 27 Jan 2008 20:56:54 -0000 1.16 >+++ src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.cpp 26 Feb 2008 16:50:29 -0000 >@@ -21,6 +21,7 @@ > #include <string.h> > #include "CGProxy.h" > #include "HeapProxy.h" >+#include "ThreadProxy.h" > #include "MString.h" > #include "MPIUtils.h" > #include "JpiGlobals.h" >@@ -232,9 +233,12 @@ > case MPI::EG_CALL_GRAPH: > pAdaptor = new CCgAdaptorDelegate(); > break; >- case MPI::EG_HEAP: >+ case MPI::EG_HEAP: > pAdaptor = new CHeapAdaptorDelegate(); > break; >+ case MPI::EG_THREAD_INTERACTION: >+ pAdaptor = new CThreadAdaptorDelegate(); >+ break; > } > return pAdaptor; > } >@@ -286,7 +290,7 @@ > ////////////////////////////////////////////////////////////////////////// > // CCgAdaptorDelegate > >-TResult CCgAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter* pFilter) >+TResult CCgAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter) > { > MPI::ICallGraphFilter *pCgFilter = (MPI::ICallGraphFilter*)pFilter; > m_CGFilterProxy.Init(pCgFilter); >@@ -462,6 +466,212 @@ > return MRTE_RESULT_OK; > } > >+ >+ >+ >+////////////////////////////////////////////////////////////////////////// >+// CThreadAdaptorDelegate >+ >+ >+ >+TResult CThreadAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter) >+{ >+ //Add filtering support >+ MPI::IThreadInteractionFilter *pThreadInteractionFilter = (MPI::IThreadInteractionFilter*)pFilter; >+ m_ThreadInteractionFilterProxy.Init(pThreadInteractionFilter); >+ >+ if (!m_pAdaptor) >+ { >+ // Load the Adaptor library >+ ILibraryLoader *pLibrary = LoadBistroLibrary(THREADADAPTOR_DLL_NAME); >+ if (NULL == pLibrary) >+ { >+ return MRTE_ERROR_FAIL; >+ } >+ >+ TGetInstrumentationAdaptor pfnGetAdaptor = >+ (TGetInstrumentationAdaptor)pLibrary->GetEntry(GET_INSTRUMENTATION_ADAPTOR_NAME); >+ if (pfnGetAdaptor) >+ { >+ // Obtain the Adaptor interface >+ m_pAdaptor = pfnGetAdaptor(); >+ } >+ >+ pLibrary->Destroy(); >+ >+ if (m_pAdaptor == NULL) >+ { >+ return MRTE_ERROR_FAIL; >+ } >+ } >+ >+ // Initialize the Adaptor >+ TResult res = m_pAdaptor->Init(CLogAssert::GetInstance(), &m_ThreadInteractionFilterProxy); >+ return MRTE_RESULT_OK; >+} >+ >+TResult CThreadAdaptorDelegate::ModifyClass(MPI::TId classId, >+ const SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ SClassFile *pInstrumentedClass, >+ IInstrumentationContext *pContext) >+{ >+ CContext context; >+ TResult iRetVal = m_pAdaptor->ModifyClass(classId, classToInstrument, funcAllocator, >+ pInstrumentedClass, &context); >+ DeallocateInstrClassInfo(&context.classInfo); >+ return iRetVal; >+} >+ >+TResult CThreadAdaptorDelegate::ModifyByteCodes(MPI::TId classId, >+ const SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ SClassFile *pInstrumentedClass, >+ IInstrumentationContext *pContext) >+{ >+ >+ CContext context; >+ CDataManager *pDM = CJpiGlobals::Instance()->pDataManager; >+ TResult res = pDM->GetClassInstrContext(&context, classId); >+ if (MRTE_SUCCEEDED(res)) >+ { >+ res = m_pAdaptor->ModifyByteCodes(classId, classToInstrument, funcAllocator, >+ pInstrumentedClass, &context); >+ if (MRTE_SUCCEEDED(res)) >+ { >+ pDM->SetClassInstrumentationStatus(classId, true /* bEventsEnabled */); >+ } >+ delete [] context.classInfo.pMethods; >+ } >+ return res; >+} >+ >+void CThreadAdaptorDelegate::JvmInitDone() >+{ >+ // Register native callback methods in the wrapper class >+ TResult iRetVal = RegisterNativeCallbacksInWrapper(); >+ if (MRTE_SUCCEEDED(iRetVal)) >+ { >+ m_pAdaptor->JvmInitDone(); >+ } >+ else >+ { >+ MARTINI_ERROR("CJavaInstrumentorManager", "failed to register native callbacks " >+ "for the thread events recorder class"); >+ MARTINI_ASSERT("CJavaInstrumentorManager", MRTE_SUCCEEDED(iRetVal), ""); >+ } >+} >+ >+TResult CThreadAdaptorDelegate::RegisterNativeCallbacksInWrapper() >+{ >+ CJpiGlobals *pJpiGlobals = CJpiGlobals::Instance(); >+ >+ if (NULL == pJpiGlobals->pfnThreadInteractionHandler) >+ { >+ return MRTE_ERROR_FAIL; >+ } >+ >+ JNIEnv *pJNIEnv = NULL; >+ >+ TResult iRes = CJpiGlobals::Instance()->pJvmInterface->GetJNIEnv(&pJNIEnv); >+ if (MRTE_FAILED(iRes)) >+ { >+ return iRes; >+ } >+ >+ jclass cls = pJNIEnv->FindClass(THREADADAPTOR_CALLBACK_CLASS_NAME); >+ if (cls == 0) >+ { >+ MARTINI_INFORMATIVE1("CJavaInstrumentorManager", 0, false, >+ "failed to load class '%s'", THREADADAPTOR_CALLBACK_CLASS_NAME); >+ return MRTE_ERROR_FAIL; >+ } >+ >+ JNINativeMethod nativeMethods[THREADADAPTOR_NUM_EVENT_HANDLERS]; >+ nativeMethods[0].name = THREADADAPTOR_CALLBACK_CALL_TI_NAME; >+ nativeMethods[0].signature = THREADADAPTOR_CALLBACK_CALL_TI_SIG; >+ nativeMethods[0].fnPtr = (void*)pJpiGlobals->pfnThreadInteractionHandler; >+ >+ jint ret = pJNIEnv->RegisterNatives(cls, (JNINativeMethod *)nativeMethods, >+ THREADADAPTOR_NUM_EVENT_HANDLERS); >+ if (ret != 0) >+ { >+ return MRTE_ERROR_FAIL; >+ } >+ >+ // Inform the Wrapper class that the native methods were instrumented >+ jmethodID methodId = pJNIEnv->GetStaticMethodID(cls, "JVMInit", "()V"); >+ if (methodId == 0) >+ { >+ MARTINI_ERROR("CJavaInstrumentorManager", >+ "Failed to get static method 'JVMInit' in ThreadProxy wrapper class"); >+ return MRTE_ERROR_FAIL; >+ } >+ pJNIEnv->CallStaticVoidMethod(cls, methodId); >+ MARTINI_INFORMATIVE("CJavaInstrumentorManager", 0, false, >+ "Using Martini Thread Instrumentation Technology"); >+ >+ // Store a handle to the SetEventsStatus method of the proxy class >+ m_grProxyClass = (jclass)pJNIEnv->NewWeakGlobalRef(cls); >+ if (NULL == m_grProxyClass) >+ { >+ MARTINI_ERROR("CJavaInstrumentorManager", >+ "Failed to create a weak global reference for the ThreadProxy wrapper class"); >+ return MRTE_ERROR_FAIL; >+ } >+ m_hSetEventsStatus = pJNIEnv->GetStaticMethodID(cls, "SetEventsStatus", "(I)V"); >+ if (0 == m_hSetEventsStatus) >+ { >+ MARTINI_ERROR("CJavaInstrumentorManager", >+ "Failed to get static method 'SetEventsStatus' in ThreadProxy wrapper class"); >+ return MRTE_ERROR_FAIL; >+ } >+ >+ pJNIEnv->DeleteLocalRef(cls); >+ >+ return MRTE_RESULT_OK; >+} >+ >+ >+/////////////////////////////////////////////////////////////// >+// CJavaInstrumentorManager::CCGFilterProxy implementation >+ >+//TODO: Make one base class for FilterAdapters >+bool >+CThreadAdaptorDelegate::CThreadInteractionFilterProxy::ShouldNotify(MPI::SThreadInteractionFilterData &filterData) >+{ >+ if (NULL == m_pThreadInteractionFilter) >+ { >+ return true; >+ } >+ >+ MCString strClassName; >+ MCString strMethodName; >+ >+ // Translate class name from internal JVM representation to the Java syntax >+ strClassName.Set(filterData.szClassName); >+ strClassName.ReplaceAll("/", "."); >+ >+ // Translate special method names (such as <init>, <clinit>) >+ CJpiGlobals::Instance()->pDataManager->GetUpdatedMethodName(strClassName.Get(), >+ filterData.szMethodName, &strMethodName); >+ >+ // Call the client's filter callback >+ MPI::SThreadInteractionFilterData locFilterData; >+ locFilterData.szClassName = strClassName.Get(); >+ locFilterData.szMethodName = strMethodName.Get(); >+ return m_pThreadInteractionFilter->ShouldNotify(locFilterData); >+} >+ >+ >+TResult CThreadAdaptorDelegate::CThreadInteractionFilterProxy::Init(MPI::IThreadInteractionFilter *pThreadInteractionFilter) >+{ >+ m_pThreadInteractionFilter = pThreadInteractionFilter; >+ return MRTE_RESULT_OK; >+} >+ >+ >+ > // > // Deallocates memory of pInstrClassInfo members > // >@@ -515,7 +725,7 @@ > ////////////////////////////////////////////////////////////////////////// > // CHeapAdaptorDelegate > >-TResult CHeapAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter* pFilter) >+TResult CHeapAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter) > { > if (!m_pAdaptor) > { >@@ -941,6 +1151,7 @@ > m_pEventManager->SetEventImplementor(MPI::EV_METHOD_ENTER, MPI_INSTRUMENTATION); > m_pEventManager->SetEventImplementor(MPI::EV_METHOD_LEAVE, MPI_INSTRUMENTATION); > m_pEventManager->SetEventImplementor(MPI::EV_OBJECT_ALLOC, MPI_INSTRUMENTATION); >+ m_pEventManager->SetEventImplementor(MPI::EV_THREAD_INTERACTION, MPI_INSTRUMENTATION); > > if (!m_csInstrumentation) > { >@@ -1527,4 +1738,4 @@ > pClassRedefQueue->Push(classDef); > } > return iRes; >-} >+} >\ No newline at end of file >Index: src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.h,v >retrieving revision 1.10 >diff -u -r1.10 JavaInstrumentorManager.h >--- src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.h 27 Jan 2008 20:56:54 -0000 1.10 >+++ src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.h 26 Feb 2008 16:50:29 -0000 >@@ -139,6 +139,52 @@ > TResult RegisterNativeCallbacksInWrapper(); > }; > >+ >+ class CThreadAdaptorDelegate : public CBaseAdaptorDelegate >+ { >+ public: >+ // IInstrumentationAdaptor methods >+ >+ virtual TResult Init(Infrastructure::ILogAssert *pLogger = NULL, >+ MPI::IEventFilter *pFilter = NULL); >+ virtual TResult ModifyClass(MPI::TId classId, >+ const Infrastructure::SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ Infrastructure::SClassFile *pInstrumentedClass, >+ Infrastructure::IInstrumentationContext *pContext = NULL); >+ virtual TResult ModifyByteCodes(MPI::TId classId, >+ const Infrastructure::SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ Infrastructure::SClassFile *pInstrumentedClass, >+ Infrastructure::IInstrumentationContext *pContext = NULL); >+ virtual void JvmInitDone(); >+ >+ /** >+ * @brief Thread filter proxy for ThreadAdaptor >+ * >+ * A proxy for the thread filter of ThreadAdaptor. Used for translating method >+ * and class names to friendly names, before sending them to the filter defined >+ * by the MPI client >+ */ >+ class CThreadInteractionFilterProxy : public MPI::IThreadInteractionFilter >+ { >+ public: >+ CThreadInteractionFilterProxy() : m_pThreadInteractionFilter(NULL) {} >+ TResult Init(MPI::IThreadInteractionFilter *pThreadFilter); >+ virtual bool ShouldNotify(MPI::SThreadInteractionFilterData &filterData); >+ >+ private: >+ MPI::IThreadInteractionFilter *m_pThreadInteractionFilter; >+ }; >+ >+ >+ private: >+ TResult RegisterNativeCallbacksInWrapper(); >+ >+ CThreadInteractionFilterProxy m_ThreadInteractionFilterProxy; >+ }; >+ >+ > /** > * @brief Factory for Instrumentation Adaptors (Singleton) > */ >Index: src-native/src/Martini/Infrastructure/JPI/EventDispatcher.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/EventDispatcher.h,v >retrieving revision 1.7 >diff -u -r1.7 EventDispatcher.h >--- src-native/src/Martini/Infrastructure/JPI/EventDispatcher.h 4 Apr 2007 06:19:32 -0000 1.7 >+++ src-native/src/Martini/Infrastructure/JPI/EventDispatcher.h 26 Feb 2008 16:50:28 -0000 >@@ -25,12 +25,14 @@ > > struct SMpiInternalData > { >- MPI::TId methodId; //!< Method id (EV_NEW_METHOD, EV_OBJECT_ALLOC) >- jobject objectJniLocalRef; //!< Local reference of the object (EV_OBJECT_ALLOC) >- //! Valid only in the context of the ObjectAlloc JNI >- //! Callback (!!!) >- SJvmtiObjectTag *pObjectTag; //!< JVMTI object tag (EV_OBJECT_ALLOC) >- U64 allocLocation; //!< Object allocation byte-code index (EV_OBJECT_ALLOC) >+ MPI::TId methodId; //!< Method id (EV_NEW_METHOD, EV_OBJECT_ALLOC) >+ jobject objectJniLocalRef; //!< Local reference of the object (EV_OBJECT_ALLOC) >+ //! Valid only in the context of the ObjectAlloc JNI >+ //! Callback (!!!) >+ SJvmtiObjectTag *pObjectTag; //!< JVMTI object tag (EV_OBJECT_ALLOC and EV_THREAD_INTERACTION) >+ U64 allocLocation; //!< Object allocation byte-code index (EV_OBJECT_ALLOC) >+ >+ int interactionType; //!< type of interaction between threads (EV_THREAD_INTERACTION) > MPI::BitSet validData; > }; > >@@ -460,6 +462,27 @@ > CEventManager *m_pEventManager; > }; > >+ >+ /** >+ * @brief Dispatcher for the Call CA methoda event >+ */ >+ class CThreadInteractionEventDispatcher : public CEventDispatcher >+ { >+ public: >+ CThreadInteractionEventDispatcher(CEventManager *pEventManager) >+ : m_pEventManager(pEventManager) {} >+ >+ void NotifyThreadInteractionObservers(MPI::SThreadInteractionEventData *pData); >+ >+ virtual void Notify(SEmData *pData, >+ MPI::IEventObserver *pObserver, >+ MPI::BitSet dataItems); >+ >+ private: >+ CEventManager *m_pEventManager; >+ }; >+ >+ > /** > * @brief Dispatcher for the Object Alloc event > */ >Index: src-native/src/Martini/Infrastructure/JPI/MPIUtils.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/MPIUtils.cpp,v >retrieving revision 1.4 >diff -u -r1.4 MPIUtils.cpp >--- src-native/src/Martini/Infrastructure/JPI/MPIUtils.cpp 20 Feb 2007 12:00:33 -0000 1.4 >+++ src-native/src/Martini/Infrastructure/JPI/MPIUtils.cpp 26 Feb 2008 16:50:30 -0000 >@@ -43,6 +43,10 @@ > h = eventList->GetLast(); > eventList->InsertAfter(h, EV_CONTENDED_MONITOR_ENTERED); > break; >+ case EG_THREAD_INTERACTION: >+ h = eventList->GetLast(); >+ eventList->InsertAfter(h, EV_THREAD_INTERACTION); >+ break; > } > } > >@@ -77,6 +81,12 @@ > bResult = true; > } > break; >+ case EG_THREAD_INTERACTION: >+ if ( EV_THREAD_INTERACTION == event) >+ { >+ bResult = true; >+ } >+ break; > } > return bResult; > } >@@ -99,6 +109,12 @@ > bResult = true; > } > break; >+ case EG_THREAD_INTERACTION: >+ if (IEventFilter:: FT_THREAD_INTERACTION == filter.Type()) >+ { >+ bResult = true; >+ } >+ break; > } > return bResult; > } >@@ -124,6 +140,10 @@ > case EV_CONTENDED_MONITOR_ENTERED: > group = EG_MONITOR; > break; >+ >+ case EV_THREAD_INTERACTION: >+ group = EG_THREAD_INTERACTION; >+ break; > } > return group; > } >Index: src-native/src/Martini/Infrastructure/JPI/EventManager.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/EventManager.cpp,v >retrieving revision 1.18 >diff -u -r1.18 EventManager.cpp >--- src-native/src/Martini/Infrastructure/JPI/EventManager.cpp 23 Aug 2007 10:40:55 -0000 1.18 >+++ src-native/src/Martini/Infrastructure/JPI/EventManager.cpp 26 Feb 2008 16:50:28 -0000 >@@ -235,6 +235,14 @@ > } > */ > break; >+ case EV_THREAD_INTERACTION: >+ if (m_threadInteractionDataRequestType != DR_NONE && >+ m_threadInteractionDataRequestType != dataRequestType) >+ { >+ return MRTE_ERROR_CONFLICT; >+ } >+ m_threadInteractionDataRequestType = dataRequestType; >+ break; > default: > ; > } >@@ -317,6 +325,7 @@ > m_newMethodDataRequestType = DR_NONE; > m_methodEnterDataRequestType = DR_NONE; > m_methodLeaveDataRequestType = DR_NONE; >+ m_threadInteractionDataRequestType = DR_NONE; > > m_bIsInitialiazationCompleted = false; > m_bVMShutdownReceived = false; >@@ -404,6 +413,9 @@ > case EV_CONTENDED_MONITOR_ENTERED: > pDispatcher = new CContendedMonitorEnteredEventDispatcher(this); > break; >+ case EV_THREAD_INTERACTION: >+ pDispatcher = new CThreadInteractionEventDispatcher(this); >+ break; > case EV_JAVA_CLASS_FILE_LOAD_HOOK: > pDispatcher = new CJavaClassFileLoadHookEventDispatcher(); > break; >@@ -494,6 +506,8 @@ > m_vEventInfo[EV_CONTENDED_MONITOR_ENTERED].pDescriptor = > new CEventDescriptor(EV_CONTENDED_MONITOR_ENTERED, "Contended Monitor Entered", > EG_MONITOR); >+ m_vEventInfo[EV_THREAD_INTERACTION].pDescriptor = >+ new CEventDescriptor(EV_THREAD_INTERACTION, "Thread interaction", EG_THREAD_INTERACTION); > m_vEventInfo[EV_EC_START].pDescriptor = > new CEventDescriptor(EV_EC_START, "External Control Start Notification"); > m_vEventInfo[EV_EC_STOP].pDescriptor = >@@ -745,6 +759,8 @@ > || GetEventGlobalEnabledStatus(EV_MONITOR_WAITED) > || GetEventGlobalEnabledStatus(EV_CONTENDED_MONITOR_ENTER) > || GetEventGlobalEnabledStatus(EV_CONTENDED_MONITOR_ENTERED); >+ case EG_THREAD_INTERACTION: >+ bResult = GetEventGlobalEnabledStatus(EV_THREAD_INTERACTION); > break; > } > return bResult; >@@ -813,6 +829,7 @@ > pJpiGlobals->pfnMethodLeaveWithExcetionHandler = MethodLeaveWithException; > pJpiGlobals->pfnObjectAllocHandler = ObjectAllocHandler; > pJpiGlobals->pfnArrayAllocHandler = ArrayAllocHandler; >+ pJpiGlobals->pfnThreadInteractionHandler = ThreadInteractionHandler; > > return MRTE_RESULT_OK; > } >@@ -1022,6 +1039,7 @@ > { > case EG_CALL_GRAPH: > case EG_HEAP: >+ case EG_THREAD_INTERACTION: > if (!m_pJavaInterface->GetCapabilities()->Enabled( > CT_CAN_ENABLE_OR_DISABLE_BCI_GENERATED_EVENTS)) > { >@@ -1518,3 +1536,48 @@ > { > InternalObjectAllocHandler(env, self, obj, objClass, methodId, loc, true /* isArray */); > } >+ >+ >+// >+// Callback function for handling thread interactions called by instrumentation (through the ThreadProxy Java >+// class) >+// >+extern "C" void JNICALL ThreadInteractionHandler(JNIEnv *pJniEnv, jclass self, jobject obj, jint methodID) >+{ >+ if (s_pEM->IsVMShutdownReceived()) >+ { >+ return; >+ } >+ >+ CEventManager::SEmEventInfo *pEventInfoList = s_pEM->GetEventInfoList(); >+ static CDataManager *s_pDataManager = s_pEM->GetDM(); >+ static CObjectInfoManager *s_pObjectInfoManager = s_pDataManager->GetObjectInfoManager(); >+ >+ MARTINI_ASSERT("EventManager", pEventInfoList, ""); >+ CEventManager::SEmEventInfo& pEventInfo = pEventInfoList[EV_THREAD_INTERACTION]; >+ >+ // Tag the object >+ jlong tag; >+ TId objectId; >+ if (MRTE_FAILED(s_pObjectInfoManager->CreateTag(&objectId, &tag, obj, >+ pJniEnv, true /* bSaveInDb */))) >+ { >+ // Cannot tag the object. Do not report the event >+ MARTINI_INFORMATIVE("InternalObjectAllocHandler", 0, false, >+ "failed to allocate object id"); >+ return; >+ } >+ >+ // Notify the event >+ SMpiInternalData mpiData; >+ mpiData.pObjectTag = s_pObjectInfoManager->GetTagInfo(tag); >+ mpiData.interactionType = methodID; >+ >+ SEmData eventData; >+ eventData.dataType = MPI_INTERNAL; >+ eventData.pJniEnv = pJniEnv; >+ eventData.u.pMpiData = &mpiData; >+ s_pEM->NotifyMpiEvent(Martini::MPI::EV_THREAD_INTERACTION, &eventData); >+} >+ >+ >Index: src-native/src/Martini/Infrastructure/JPI/JpiGlobals.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/JpiGlobals.h,v >retrieving revision 1.4 >diff -u -r1.4 JpiGlobals.h >--- src-native/src/Martini/Infrastructure/JPI/JpiGlobals.h 20 Feb 2007 12:00:33 -0000 1.4 >+++ src-native/src/Martini/Infrastructure/JPI/JpiGlobals.h 26 Feb 2008 16:50:30 -0000 >@@ -18,6 +18,7 @@ > > #include "CGAdaptor.h" > #include "HeapAdaptor.h" >+#include "ThreadAdaptor.h" > #include "IJVM.h" > #include "DataManager.h" > #include "OSA.h" >@@ -115,6 +116,10 @@ > HeapAdaptor::TObjectAllocHandler pfnObjectAllocHandler; > HeapAdaptor::TArrayAllocHandler pfnArrayAllocHandler; > >+ // Call for thread interaction method callbacks >+ ThreadAdaptor::TThreadInteractionHandler pfnThreadInteractionHandler; >+ >+ > // JVM Interface > IJVM* pJvmInterface; > >Index: src-native/src/Martini/Infrastructure/JPI/EventDispatcher.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/EventDispatcher.cpp,v >retrieving revision 1.17 >diff -u -r1.17 EventDispatcher.cpp >--- src-native/src/Martini/Infrastructure/JPI/EventDispatcher.cpp 31 Jul 2007 06:19:38 -0000 1.17 >+++ src-native/src/Martini/Infrastructure/JPI/EventDispatcher.cpp 26 Feb 2008 16:50:28 -0000 >@@ -922,6 +922,9 @@ > return; > } > >+ monWaitedData.isTimedOut = pJvmData->u.monitorWaited.bTimedOut; >+ monWaitedData.validData |= DR_MONITOR_TIMED_OUT; >+ > IMonitorWaitedEventObserver *pConcreteObserver = (IMonitorWaitedEventObserver*)pObserver; > pConcreteObserver->HandleEvent(monWaitedData); > } >@@ -995,6 +998,44 @@ > pConcreteObserver->HandleEvent(monEnteredData); > } > >+ >+ >+////////////////////////////////////////////////////////////////////////// >+// CCallNotifyEventDispatcher >+void CThreadInteractionEventDispatcher::Notify(SEmData *pData, >+ IEventObserver *pObserver, >+ BitSet dataItems) >+{ >+ >+ // Event triggered by instrumentation >+ MARTINI_ASSERT("EventDispatcher", MPI_INTERNAL == pData->dataType, ""); >+ >+ SThreadInteractionEventData callThreadInteraction; >+ callThreadInteraction.validData = DR_NONE; >+ CDataManager *pDataManager = m_pEventManager->GetDM(); >+ >+ if (DR_CONTAINS_OBJECT_ID(dataItems)) >+ { >+ callThreadInteraction.objectId = pData->u.pMpiData->pObjectTag->jobjectInfo.objectId; >+ callThreadInteraction.validData |= DR_OBJECT_ID; >+ } >+ if (DR_CONTAINS_THREAD_ID(dataItems)) >+ { >+ callThreadInteraction.threadId = GetThreadIdFromTls(pData->pJniEnv, pDataManager, NULL); >+ callThreadInteraction.validData |= DR_THREAD_ID; >+ } >+ if (DR_CONTAINS_THREAD_INTERACTION_TYPE(dataItems)) >+ { >+ callThreadInteraction.interactionType = (EThreadInteractionType)pData->u.pMpiData->interactionType; >+ callThreadInteraction.validData |= DR_THREAD_INTERACTION_TYPE; >+ } >+ >+ >+ IThreadInteractionEventObserver *pConcreteObserver = (IThreadInteractionEventObserver*)pObserver; >+ pConcreteObserver->HandleEvent(callThreadInteraction); >+} >+ >+ > ////////////////////////////////////////////////////////////////////////// > // CJavaClassFileLoadHookEventDispatcher > >Index: src-native/src/Martini/Infrastructure/JPI/EventManager.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/JPI/EventManager.h,v >retrieving revision 1.8 >diff -u -r1.8 EventManager.h >--- src-native/src/Martini/Infrastructure/JPI/EventManager.h 20 Feb 2007 12:00:33 -0000 1.8 >+++ src-native/src/Martini/Infrastructure/JPI/EventManager.h 26 Feb 2008 16:50:28 -0000 >@@ -163,6 +163,7 @@ > SEmEventInfo *GetEventInfoList() {return m_vEventInfo;}; > unsigned int GetMethodEnterDataType() {return m_methodEnterDataRequestType;}; > unsigned int GetMethodLeaveDataType() {return m_methodLeaveDataRequestType;}; >+ unsigned int GetThreadInteractionDataType() {return m_threadInteractionDataRequestType;}; > CDataManager *GetDM() {return m_pDataManager;}; > IJVM* GetJVMInterface() { return m_pJavaInterface; } > void InitializationPhaseCompleted(){m_bIsInitialiazationCompleted = true;}; >@@ -258,6 +259,7 @@ > unsigned int m_newMethodDataRequestType; > unsigned int m_methodEnterDataRequestType; > unsigned int m_methodLeaveDataRequestType; >+ unsigned int m_threadInteractionDataRequestType; > > // flag indicating if profilers intialization phase is complete > bool m_bIsInitialiazationCompleted; >@@ -300,4 +302,7 @@ > jint methodId, > jlong loc); > >+extern "C" void JNICALL ThreadInteractionHandler(JNIEnv *env, jclass self, >+ jobject obj, jint methodID); >+ > #endif >Index: src-native/build/BuildMartiniEM64T.mak >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildMartiniEM64T.mak,v >retrieving revision 1.3 >diff -u -r1.3 BuildMartiniEM64T.mak >--- src-native/build/BuildMartiniEM64T.mak 14 Sep 2006 11:34:24 -0000 1.3 >+++ src-native/build/BuildMartiniEM64T.mak 26 Feb 2008 16:50:20 -0000 >@@ -36,12 +36,12 @@ > > !ELSE > >-ALL : "MartiniOSA - Win32 EM64T Debug" "LibraryLoader - Win32 EM64T Debug" "JPIBootLoader - Win32 EM64T Debug" "JPI - Win32 EM64T Debug" "JIE - Win32 EM64T Debug" "CGAdaptor - Win32 EM64T Debug" "HeapAdaptor - Win32 EM64T Debug" >+ALL : "MartiniOSA - Win32 EM64T Debug" "LibraryLoader - Win32 EM64T Debug" "JPIBootLoader - Win32 EM64T Debug" "JPI - Win32 EM64T Debug" "JIE - Win32 EM64T Debug" "CGAdaptor - Win32 EM64T Debug" "HeapAdaptor - Win32 EM64T Debug" "ThreadAdaptor - Win32 EM64T Debug" > > !ENDIF > > !IF "$(RECURSE)" == "1" >-CLEAN :"CGAdaptor - Win32 EM64T DebugCLEAN" "HeapAdaptor - Win32 EM64T DebugCLEAN" "JIE - Win32 EM64T DebugCLEAN" "JPI - Win32 EM64T DebugCLEAN" "JPIBootLoader - Win32 EM64T DebugCLEAN" "LibraryLoader - Win32 EM64T DebugCLEAN" "MartiniOSA - Win32 EM64T DebugCLEAN" >+CLEAN :"CGAdaptor - Win32 EM64T DebugCLEAN" "HeapAdaptor - Win32 EM64T DebugCLEAN" "ThreadAdaptor - Win32 EM64T DebugCLEAN" "JIE - Win32 EM64T DebugCLEAN" "JPI - Win32 EM64T DebugCLEAN" "JPIBootLoader - Win32 EM64T DebugCLEAN" "LibraryLoader - Win32 EM64T DebugCLEAN" "MartiniOSA - Win32 EM64T DebugCLEAN" > !ELSE > CLEAN : > !ENDIF >@@ -66,12 +66,12 @@ > > !ELSE > >-ALL : "MartiniOSA - Win32 EM64T Release" "LibraryLoader - Win32 EM64T Release" "JPIBootLoader - Win32 EM64T Release" "JPI - Win32 EM64T Release" "JIE - Win32 EM64T Release" "CGAdaptor - Win32 EM64T Release" "HeapAdaptor - Win32 EM64T Release" >+ALL : "MartiniOSA - Win32 EM64T Release" "LibraryLoader - Win32 EM64T Release" "JPIBootLoader - Win32 EM64T Release" "JPI - Win32 EM64T Release" "JIE - Win32 EM64T Release" "CGAdaptor - Win32 EM64T Release" "HeapAdaptor - Win32 EM64T Release" "ThreadAdaptor - Win32 EM64T Release" > > !ENDIF > > !IF "$(RECURSE)" == "1" >-CLEAN :"CGAdaptor - Win32 EM64T ReleaseCLEAN" "HeapAdaptor - Win32 EM64T ReleaseCLEAN" "JIE - Win32 EM64T ReleaseCLEAN" "JPI - Win32 EM64T ReleaseCLEAN" "JPIBootLoader - Win32 EM64T ReleaseCLEAN" "LibraryLoader - Win32 EM64T ReleaseCLEAN" "MartiniOSA - Win32 EM64T ReleaseCLEAN" >+CLEAN :"CGAdaptor - Win32 EM64T ReleaseCLEAN" "HeapAdaptor - Win32 EM64T ReleaseCLEAN" "ThreadAdaptor - Win32 EM64T ReleaseCLEAN" "JIE - Win32 EM64T ReleaseCLEAN" "JPI - Win32 EM64T ReleaseCLEAN" "JPIBootLoader - Win32 EM64T ReleaseCLEAN" "LibraryLoader - Win32 EM64T ReleaseCLEAN" "MartiniOSA - Win32 EM64T ReleaseCLEAN" > !ELSE > CLEAN : > !ENDIF >@@ -366,6 +366,44 @@ > > !ENDIF > >+!IF "$(CFG)" == "BuildMartiniEM64T - Win32 EM64T Debug" >+ >+"ThreadAdaptor - Win32 EM64T Debug" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ echo MAKE PROJECT ThreadAdaptor >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Debug" >+ echo DONE PROJECT ThreadAdaptor >+ echo . >+ cd "..\..\..\..\build" >+ >+"ThreadAdaptor - Win32 EM64T DebugCLEAN" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ echo MAKE PROJECT ThreadAdaptor >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Debug" RECURSE=1 CLEAN >+ echo DONE PROJECT ThreadAdaptor >+ echo . >+ cd "..\..\..\..\build" >+ >+!ELSEIF "$(CFG)" == "BuildMartiniEM64T - Win32 EM64T Release" >+ >+"ThreadAdaptor - Win32 EM64T Release" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ echo MAKE PROJECT ThreadAdaptor >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Release" >+ echo DONE PROJECT ThreadAdaptor >+ echo . >+ cd "..\..\..\..\build" >+ >+"ThreadAdaptor - Win32 EM64T ReleaseCLEAN" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ echo MAKE PROJECT ThreadAdaptor >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Release" RECURSE=1 CLEAN >+ echo DONE PROJECT ThreadAdaptor >+ echo . >+ cd "..\..\..\..\build" >+ >+!ENDIF >+ > > !ENDIF > >Index: src-native/build/BuildMartini32.mak >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildMartini32.mak,v >retrieving revision 1.3 >diff -u -r1.3 BuildMartini32.mak >--- src-native/build/BuildMartini32.mak 14 Sep 2006 11:34:24 -0000 1.3 >+++ src-native/build/BuildMartini32.mak 26 Feb 2008 16:50:20 -0000 >@@ -36,12 +36,12 @@ > > !ELSE > >-ALL : "HeapAdaptor - Win32 IA32 Debug" "MartiniOSA - Win32 IA32 Debug" "LibraryLoader - Win32 IA32 Debug" "JPIBootLoader - Win32 IA32 Debug" "JPI - Win32 IA32 Debug" "JIE - Win32 IA32 Debug" "CGAdaptor - Win32 IA32 Debug" >+ALL : "HeapAdaptor - Win32 IA32 Debug" "MartiniOSA - Win32 IA32 Debug" "LibraryLoader - Win32 IA32 Debug" "JPIBootLoader - Win32 IA32 Debug" "JPI - Win32 IA32 Debug" "JIE - Win32 IA32 Debug" "CGAdaptor - Win32 IA32 Debug" "ThreadAdaptor - Win32 IA32 Debug" > > !ENDIF > > !IF "$(RECURSE)" == "1" >-CLEAN :"CGAdaptor - Win32 IA32 DebugCLEAN" "JIE - Win32 IA32 DebugCLEAN" "JPI - Win32 IA32 DebugCLEAN" "JPIBootLoader - Win32 IA32 DebugCLEAN" "LibraryLoader - Win32 IA32 DebugCLEAN" "MartiniOSA - Win32 IA32 DebugCLEAN" "HeapAdaptor - Win32 IA32 DebugCLEAN" >+CLEAN :"CGAdaptor - Win32 IA32 DebugCLEAN" "JIE - Win32 IA32 DebugCLEAN" "JPI - Win32 IA32 DebugCLEAN" "JPIBootLoader - Win32 IA32 DebugCLEAN" "LibraryLoader - Win32 IA32 DebugCLEAN" "MartiniOSA - Win32 IA32 DebugCLEAN" "HeapAdaptor - Win32 IA32 DebugCLEAN" "ThreadAdaptor - Win32 IA32 DebugCLEAN" > !ELSE > CLEAN : > !ENDIF >@@ -66,12 +66,12 @@ > > !ELSE > >-ALL : "MartiniOSA - Win32 IA32 Release" "LibraryLoader - Win32 IA32 Release" "JPIBootLoader - Win32 IA32 Release" "JPI - Win32 IA32 Release" "JIE - Win32 IA32 Release" "CGAdaptor - Win32 IA32 Release" "HeapAdaptor - Win32 IA32 Release" >+ALL : "MartiniOSA - Win32 IA32 Release" "LibraryLoader - Win32 IA32 Release" "JPIBootLoader - Win32 IA32 Release" "JPI - Win32 IA32 Release" "JIE - Win32 IA32 Release" "CGAdaptor - Win32 IA32 Release" "HeapAdaptor - Win32 IA32 Release" "ThreadAdaptor - Win32 IA32 Release" > > !ENDIF > > !IF "$(RECURSE)" == "1" >-CLEAN :"HeapAdaptor - Win32 IA32 ReleaseCLEAN" "CGAdaptor - Win32 IA32 ReleaseCLEAN" "JIE - Win32 IA32 ReleaseCLEAN" "JPI - Win32 IA32 ReleaseCLEAN" "JPIBootLoader - Win32 IA32 ReleaseCLEAN" "LibraryLoader - Win32 IA32 ReleaseCLEAN" "MartiniOSA - Win32 IA32 ReleaseCLEAN" >+CLEAN :"HeapAdaptor - Win32 IA32 ReleaseCLEAN" "CGAdaptor - Win32 IA32 ReleaseCLEAN" "ThreadAdaptor - Win32 IA32 ReleaseCLEAN" "JIE - Win32 IA32 ReleaseCLEAN" "JPI - Win32 IA32 ReleaseCLEAN" "JPIBootLoader - Win32 IA32 ReleaseCLEAN" "LibraryLoader - Win32 IA32 ReleaseCLEAN" "MartiniOSA - Win32 IA32 ReleaseCLEAN" > !ELSE > CLEAN : > !ENDIF >@@ -282,6 +282,32 @@ > > !ENDIF > >+!IF "$(CFG)" == "BuildMartini32 - Win32 IA32 Debug" >+ >+"ThreadAdaptor - Win32 IA32 Debug" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Debug" >+ cd "..\..\..\..\build" >+ >+"HeapAdaptor - Win32 IA32 DebugCLEAN" : >+ cd "..\src\Martini\Infrastructure\HeapAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Debug" RECURSE=1 CLEAN >+ cd "..\..\..\..\build" >+ >+!ELSEIF "$(CFG)" == "BuildMartini32 - Win32 IA32 Release" >+ >+"ThreadAdaptor - Win32 IA32 Release" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Release" >+ cd "..\..\..\..\build" >+ >+"ThreadAdaptor - Win32 IA32 ReleaseCLEAN" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Release" RECURSE=1 CLEAN >+ cd "..\..\..\..\build" >+ >+!ENDIF >+ > > !ENDIF > >Index: src-native/build/build_tptp_all.script >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/build_tptp_all.script,v >retrieving revision 1.2 >diff -u -r1.2 build_tptp_all.script >--- src-native/build/build_tptp_all.script 18 Sep 2006 12:36:20 -0000 1.2 >+++ src-native/build/build_tptp_all.script 26 Feb 2008 16:50:24 -0000 >@@ -25,3 +25,4 @@ > bash build_tptp_martini.script $1 > > bash build_tptp_profiler.script $1 >+ >Index: src-native/build/tptp_martini.dsw >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/tptp_martini.dsw,v >retrieving revision 1.3 >diff -u -r1.3 tptp_martini.dsw >--- src-native/build/tptp_martini.dsw 14 Sep 2006 10:46:47 -0000 1.3 >+++ src-native/build/tptp_martini.dsw 26 Feb 2008 16:50:24 -0000 >@@ -32,6 +32,9 @@ > Begin Project Dependency > Project_Dep_Name HeapAdaptor > End Project Dependency >+ Begin Project Dependency >+ Project_Dep_Name ThreadAdaptor >+ End Project Dependency > }}} > > ############################################################################### >@@ -153,6 +156,24 @@ > > ############################################################################### > >+Project: "ThreadAdaptor"="..\src\Martini\Infrastructure\ThreadAdaptor\ThreadAdaptor.dsp" - Package Owner=<4> >+ >+Package=<5> >+{{{ >+}}} >+ >+Package=<4> >+{{{ >+ Begin Project Dependency >+ Project_Dep_Name LibraryLoader >+ End Project Dependency >+ Begin Project Dependency >+ Project_Dep_Name MartiniOSA >+ End Project Dependency >+}}} >+ >+############################################################################### >+ > Global: > > Package=<5> >Index: src-native/build/BuildThreadProf32.dsp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildThreadProf32.dsp,v >retrieving revision 1.4 >diff -u -r1.4 BuildThreadProf32.dsp >--- src-native/build/BuildThreadProf32.dsp 24 Aug 2007 17:29:23 -0000 1.4 >+++ src-native/build/BuildThreadProf32.dsp 26 Feb 2008 16:50:23 -0000 >@@ -146,6 +146,10 @@ > # End Source File > # Begin Source File > >+SOURCE=..\src\ThreadProf\ThreadInteractionEvent.cpp >+# End Source File >+# Begin Source File >+ > SOURCE=..\src\ThreadProf\ThreadProfiler.cpp > # End Source File > # Begin Source File >@@ -234,6 +238,10 @@ > # End Source File > # Begin Source File > >+SOURCE=..\src\ThreadProf\ThreadInteractionEvent.h >+# End Source File >+# Begin Source File >+ > SOURCE=..\src\ThreadProf\ThreadProfiler.h > # End Source File > # Begin Source File >Index: src-native/build/BuildMartiniIPF.mak >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildMartiniIPF.mak,v >retrieving revision 1.3 >diff -u -r1.3 BuildMartiniIPF.mak >--- src-native/build/BuildMartiniIPF.mak 14 Sep 2006 11:34:24 -0000 1.3 >+++ src-native/build/BuildMartiniIPF.mak 26 Feb 2008 16:50:20 -0000 >@@ -36,12 +36,12 @@ > > !ELSE > >-ALL : "MartiniOSA - Win32 IPF Debug" "LibraryLoader - Win32 IPF Debug" "JPIBootLoader - Win32 IPF Debug" "JPI - Win32 IPF Debug" "JIE - Win32 IPF Debug" "CGAdaptor - Win32 IPF Debug" "HeapAdaptor - Win32 IPF Debug" >+ALL : "MartiniOSA - Win32 IPF Debug" "LibraryLoader - Win32 IPF Debug" "JPIBootLoader - Win32 IPF Debug" "JPI - Win32 IPF Debug" "JIE - Win32 IPF Debug" "CGAdaptor - Win32 IPF Debug" "HeapAdaptor - Win32 IPF Debug" "ThreadAdaptor - Win32 IPF Debug" > > !ENDIF > > !IF "$(RECURSE)" == "1" >-CLEAN :"CGAdaptor - Win32 IPF DebugCLEAN" "HeapAdaptor - Win32 IPF DebugCLEAN" "JIE - Win32 IPF DebugCLEAN" "JPI - Win32 IPF DebugCLEAN" "JPIBootLoader - Win32 IPF DebugCLEAN" "LibraryLoader - Win32 IPF DebugCLEAN" "MartiniOSA - Win32 IPF DebugCLEAN" >+CLEAN :"CGAdaptor - Win32 IPF DebugCLEAN" "HeapAdaptor - Win32 IPF DebugCLEAN" "ThreadAdaptor - Win32 IPF DebugCLEAN" "JIE - Win32 IPF DebugCLEAN" "JPI - Win32 IPF DebugCLEAN" "JPIBootLoader - Win32 IPF DebugCLEAN" "LibraryLoader - Win32 IPF DebugCLEAN" "MartiniOSA - Win32 IPF DebugCLEAN" > !ELSE > CLEAN : > !ENDIF >@@ -66,12 +66,12 @@ > > !ELSE > >-ALL : "MartiniOSA - Win32 IPF Release" "LibraryLoader - Win32 IPF Release" "JPIBootLoader - Win32 IPF Release" "JPI - Win32 IPF Release" "JIE - Win32 IPF Release" "CGAdaptor - Win32 IPF Release" "HeapAdaptor - Win32 IPF Release" >+ALL : "MartiniOSA - Win32 IPF Release" "LibraryLoader - Win32 IPF Release" "JPIBootLoader - Win32 IPF Release" "JPI - Win32 IPF Release" "JIE - Win32 IPF Release" "CGAdaptor - Win32 IPF Release" "HeapAdaptor - Win32 IPF Release" "ThreadAdaptor - Win32 IPF Release" > > !ENDIF > > !IF "$(RECURSE)" == "1" >-CLEAN :"CGAdaptor - Win32 IPF ReleaseCLEAN" "HeapAdaptor - Win32 IPF ReleaseCLEAN" "JIE - Win32 IPF ReleaseCLEAN" "JPI - Win32 IPF ReleaseCLEAN" "JPIBootLoader - Win32 IPF ReleaseCLEAN" "LibraryLoader - Win32 IPF ReleaseCLEAN" "MartiniOSA - Win32 IPF ReleaseCLEAN" >+CLEAN :"CGAdaptor - Win32 IPF ReleaseCLEAN" "HeapAdaptor - Win32 IPF ReleaseCLEAN" "ThreadAdaptor - Win32 IPF ReleaseCLEAN" "JIE - Win32 IPF ReleaseCLEAN" "JPI - Win32 IPF ReleaseCLEAN" "JPIBootLoader - Win32 IPF ReleaseCLEAN" "LibraryLoader - Win32 IPF ReleaseCLEAN" "MartiniOSA - Win32 IPF ReleaseCLEAN" > !ELSE > CLEAN : > !ENDIF >@@ -282,6 +282,32 @@ > > !ENDIF > >+!IF "$(CFG)" == "BuildMartiniIPF - Win32 IPF Debug" >+ >+"ThreadAdaptor - Win32 IPF Debug" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug" >+ cd "..\..\..\..\build" >+ >+"ThreadAdaptor - Win32 IPF DebugCLEAN" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug" RECURSE=1 CLEAN >+ cd "..\..\..\..\build" >+ >+!ELSEIF "$(CFG)" == "BuildMartiniIPF - Win32 IPF Release" >+ >+"ThreadAdaptor - Win32 IPF Release" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Release" >+ cd "..\..\..\..\build" >+ >+"ThreadAdaptor - Win32 IPF ReleaseCLEAN" : >+ cd "..\src\Martini\Infrastructure\ThreadAdaptor" >+ $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Release" RECURSE=1 CLEAN >+ cd "..\..\..\..\build" >+ >+!ENDIF >+ > > !ENDIF > >Index: src-native/build/BuildThreadProf32.mak >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildThreadProf32.mak,v >retrieving revision 1.5 >diff -u -r1.5 BuildThreadProf32.mak >--- src-native/build/BuildThreadProf32.mak 27 Aug 2007 16:39:51 -0000 1.5 >+++ src-native/build/BuildThreadProf32.mak 26 Feb 2008 16:50:24 -0000 >@@ -35,28 +35,30 @@ > > ALL : "$(OUTDIR)\ThreadProf.dll" > >+ > CLEAN : > -@erase "$(INTDIR)\AttachEvent.obj" >+ -@erase "$(INTDIR)\BaseProfiler.obj" >+ -@erase "$(INTDIR)\CallCAMethodEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >+ -@erase "$(INTDIR)\CustomCommandEvent.obj" > -@erase "$(INTDIR)\DetachEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitEvent.obj" >+ -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\ProfEnv.obj" > -@erase "$(INTDIR)\StartEvent.obj" > -@erase "$(INTDIR)\StopEvent.obj" >- -@erase "$(INTDIR)\VMInitEvent.obj" >- -@erase "$(INTDIR)\VMShutdownEvent.obj" >- -@erase "$(INTDIR)\Tickets.obj" >- -@erase "$(INTDIR)\ProfEnv.obj" >- -@erase "$(INTDIR)\BaseProfiler.obj" >- -@erase "$(INTDIR)\ThreadProfiler.obj" >- -@erase "$(INTDIR)\CustomCommandEvent.obj" > -@erase "$(INTDIR)\ThreadEndEvent.obj" >+ -@erase "$(INTDIR)\ThreadProfiler.obj" > -@erase "$(INTDIR)\ThreadStartEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\Tickets.obj" > -@erase "$(INTDIR)\TIdSet.obj" >- -@erase "$(INTDIR)\vc*.idb" >- -@erase "$(INTDIR)\BuildThreadProf32.pch" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\VMInitEvent.obj" >+ -@erase "$(INTDIR)\VMShutdownEvent.obj" > -@erase "$(OUTDIR)\ThreadProf.dll" > -@erase "$(OUTDIR)\ThreadProf.exp" > -@erase "$(OUTDIR)\ThreadProf.lib" >@@ -68,7 +70,7 @@ > if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" > > CPP=cl.exe >-CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "./../src/BaseProf" /I "./../include/Martini" /I "./../include/JPIAgent" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /Fp"$(INTDIR)\BuildThreadProf32.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+CPP_PROJ=/nologo /MT /W3 /GX /Zi /O2 /I "./../include/Martini" /I "./../include/JPIAgent" /I "./../src/BaseProf" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c > > .c{$(INTDIR)}.obj:: > $(CPP) @<< >@@ -108,27 +110,28 @@ > BSC32_SBRS= \ > > LINK32=link.exe >-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib MartiniOSA.lib /nologo /dll /pdb:none /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\release\IA-32" >+LINK32_FLAGS=kernel32.lib user32.lib winspool.lib comdlg32.lib MartiniOSA.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\release\IA-32" > LINK32_OBJS= \ > "$(INTDIR)\AttachEvent.obj" \ >+ "$(INTDIR)\BaseProfiler.obj" \ >+ "$(INTDIR)\CallCAMethodEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >+ "$(INTDIR)\CustomCommandEvent.obj" \ > "$(INTDIR)\DetachEvent.obj" \ >+ "$(INTDIR)\MonitorWaitedEvent.obj" \ >+ "$(INTDIR)\MonitorWaitEvent.obj" \ >+ "$(INTDIR)\NewMethodEvent.obj" \ >+ "$(INTDIR)\ProfEnv.obj" \ > "$(INTDIR)\StartEvent.obj" \ > "$(INTDIR)\StopEvent.obj" \ >- "$(INTDIR)\VMInitEvent.obj" \ >- "$(INTDIR)\VMShutdownEvent.obj" \ >- "$(INTDIR)\Tickets.obj" \ >- "$(INTDIR)\ProfEnv.obj" \ >- "$(INTDIR)\TIdSet.obj" \ >- "$(INTDIR)\BaseProfiler.obj" \ >- "$(INTDIR)\NewMethodEvent.obj" \ >- "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadEndEvent.obj" \ >- "$(INTDIR)\CustomCommandEvent.obj" \ >+ "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadStartEvent.obj" \ >- "$(INTDIR)\MonitorWaitEvent.obj" \ >- "$(INTDIR)\MonitorWaitedEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ "$(INTDIR)\Tickets.obj" \ >+ "$(INTDIR)\TIdSet.obj" \ >+ "$(INTDIR)\VMInitEvent.obj" \ >+ "$(INTDIR)\VMShutdownEvent.obj" > > "$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) > $(LINK32) @<< >@@ -143,36 +146,58 @@ > OutDir=.\..\bin\windows\debug\IA-32 > # End Custom Macros > >-ALL : "$(OUTDIR)\ThreadProf.dll" >+ALL : "$(OUTDIR)\ThreadProf.dll" "$(OUTDIR)\BuildThreadProf32.bsc" > > > CLEAN : > -@erase "$(INTDIR)\AttachEvent.obj" >+ -@erase "$(INTDIR)\AttachEvent.sbr" >+ -@erase "$(INTDIR)\BaseProfiler.obj" >+ -@erase "$(INTDIR)\BaseProfiler.sbr" >+ -@erase "$(INTDIR)\CallCAMethodEvent.obj" >+ -@erase "$(INTDIR)\CallCAMethodEvent.sbr" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.sbr" >+ -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\CustomCommandEvent.sbr" > -@erase "$(INTDIR)\DetachEvent.obj" >+ -@erase "$(INTDIR)\DetachEvent.sbr" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.sbr" >+ -@erase "$(INTDIR)\MonitorWaitEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitEvent.sbr" >+ -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\NewMethodEvent.sbr" >+ -@erase "$(INTDIR)\ProfEnv.obj" >+ -@erase "$(INTDIR)\ProfEnv.sbr" > -@erase "$(INTDIR)\StartEvent.obj" >+ -@erase "$(INTDIR)\StartEvent.sbr" > -@erase "$(INTDIR)\StopEvent.obj" >- -@erase "$(INTDIR)\VMInitEvent.obj" >- -@erase "$(INTDIR)\VMShutdownEvent.obj" >- -@erase "$(INTDIR)\Tickets.obj" >- -@erase "$(INTDIR)\ProfEnv.obj" >- -@erase "$(INTDIR)\BaseProfiler.obj" >- -@erase "$(INTDIR)\ThreadProfiler.obj" >+ -@erase "$(INTDIR)\StopEvent.sbr" > -@erase "$(INTDIR)\ThreadEndEvent.obj" >- -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\ThreadEndEvent.sbr" >+ -@erase "$(INTDIR)\ThreadProfiler.obj" >+ -@erase "$(INTDIR)\ThreadProfiler.sbr" > -@erase "$(INTDIR)\ThreadStartEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\ThreadStartEvent.sbr" >+ -@erase "$(INTDIR)\Tickets.obj" >+ -@erase "$(INTDIR)\Tickets.sbr" > -@erase "$(INTDIR)\TIdSet.obj" >- -@erase "$(INTDIR)\vc*.idb" >- -@erase "$(INTDIR)\vc*.pdb" >- -@erase "$(INTDIR)\BuildThreadProf32.pch" >+ -@erase "$(INTDIR)\TIdSet.sbr" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\VMInitEvent.obj" >+ -@erase "$(INTDIR)\VMInitEvent.sbr" >+ -@erase "$(INTDIR)\VMShutdownEvent.obj" >+ -@erase "$(INTDIR)\VMShutdownEvent.sbr" >+ -@erase "$(OUTDIR)\BuildThreadProf32.bsc" > -@erase "$(OUTDIR)\ThreadProf.dll" > -@erase "$(OUTDIR)\ThreadProf.exp" >- -@erase "$(OUTDIR)\ThreadProf.lib" > -@erase "$(OUTDIR)\ThreadProf.ilk" >+ -@erase "$(OUTDIR)\ThreadProf.lib" >+ -@erase "$(OUTDIR)\ThreadProf.pdb" > > "$(OUTDIR)" : > if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >@@ -181,7 +206,7 @@ > if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" > > CPP=cl.exe >-CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "./../src/BaseProf" /I "./../include/JPIAgent" /I "./../include/Martini" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /Fp"$(INTDIR)\BuildThreadProf32.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c >+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "./../include/JPIAgent" /I "./../include/Martini" /I "./../src/BaseProf" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\BuildThreadProf32.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c > > .c{$(INTDIR)}.obj:: > $(CPP) @<< >@@ -219,29 +244,55 @@ > BSC32=bscmake.exe > BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProf32.bsc" > BSC32_SBRS= \ >- >+ "$(INTDIR)\AttachEvent.sbr" \ >+ "$(INTDIR)\BaseProfiler.sbr" \ >+ "$(INTDIR)\CallCAMethodEvent.sbr" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.sbr" \ >+ "$(INTDIR)\CustomCommandEvent.sbr" \ >+ "$(INTDIR)\DetachEvent.sbr" \ >+ "$(INTDIR)\MonitorWaitedEvent.sbr" \ >+ "$(INTDIR)\MonitorWaitEvent.sbr" \ >+ "$(INTDIR)\NewMethodEvent.sbr" \ >+ "$(INTDIR)\ProfEnv.sbr" \ >+ "$(INTDIR)\StartEvent.sbr" \ >+ "$(INTDIR)\StopEvent.sbr" \ >+ "$(INTDIR)\ThreadEndEvent.sbr" \ >+ "$(INTDIR)\ThreadProfiler.sbr" \ >+ "$(INTDIR)\ThreadStartEvent.sbr" \ >+ "$(INTDIR)\Tickets.sbr" \ >+ "$(INTDIR)\TIdSet.sbr" \ >+ "$(INTDIR)\VMInitEvent.sbr" \ >+ "$(INTDIR)\VMShutdownEvent.sbr" >+ >+"$(OUTDIR)\BuildThreadProf32.bsc" : "$(OUTDIR)" $(BSC32_SBRS) >+ $(BSC32) @<< >+ $(BSC32_FLAGS) $(BSC32_SBRS) >+<< >+ > LINK32=link.exe >-LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib MartiniOSA.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\debug\IA-32" >+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib MartiniOSA.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\ThreadProf.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /pdbtype:sept /libpath:"..\bin\windows\debug\IA-32" > LINK32_OBJS= \ > "$(INTDIR)\AttachEvent.obj" \ >+ "$(INTDIR)\BaseProfiler.obj" \ >+ "$(INTDIR)\CallCAMethodEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >+ "$(INTDIR)\CustomCommandEvent.obj" \ > "$(INTDIR)\DetachEvent.obj" \ >+ "$(INTDIR)\MonitorWaitedEvent.obj" \ >+ "$(INTDIR)\MonitorWaitEvent.obj" \ >+ "$(INTDIR)\NewMethodEvent.obj" \ >+ "$(INTDIR)\ProfEnv.obj" \ > "$(INTDIR)\StartEvent.obj" \ > "$(INTDIR)\StopEvent.obj" \ >- "$(INTDIR)\VMInitEvent.obj" \ >- "$(INTDIR)\VMShutdownEvent.obj" \ >- "$(INTDIR)\Tickets.obj" \ >- "$(INTDIR)\ProfEnv.obj" \ >- "$(INTDIR)\TIdSet.obj" \ >- "$(INTDIR)\BaseProfiler.obj" \ >- "$(INTDIR)\NewMethodEvent.obj" \ >- "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadEndEvent.obj" \ >- "$(INTDIR)\CustomCommandEvent.obj" \ >+ "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadStartEvent.obj" \ >- "$(INTDIR)\MonitorWaitEvent.obj" \ >- "$(INTDIR)\MonitorWaitedEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ "$(INTDIR)\Tickets.obj" \ >+ "$(INTDIR)\TIdSet.obj" \ >+ "$(INTDIR)\VMInitEvent.obj" \ >+ "$(INTDIR)\VMShutdownEvent.obj" > > "$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) > $(LINK32) @<< >@@ -261,101 +312,366 @@ > > > !IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" || "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >- > SOURCE=..\src\BaseProf\AttachEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ > "$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\AttachEvent.obj" "$(INTDIR)\AttachEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\BaseProfiler.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\BaseProfiler.obj" "$(INTDIR)\BaseProfiler.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\CallCAMethodEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\CallCAMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\CallCAMethodEvent.obj" "$(INTDIR)\CallCAMethodEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\ContendedMonitorEnteredEvent.obj" "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\ContendedMonitorEnterEvent.obj" "$(INTDIR)\ContendedMonitorEnterEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\CustomCommandEvent.obj" "$(INTDIR)\CustomCommandEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\DetachEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ > "$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\StartEvent.cpp > >-"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\DetachEvent.obj" "$(INTDIR)\DetachEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\StopEvent.cpp > >-"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\VMInitEvent.cpp > >-"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\MonitorWaitedEvent.obj" "$(INTDIR)\MonitorWaitedEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\VMShutdownEvent.cpp > >-"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\Tickets.cpp > >-"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\MonitorWaitEvent.obj" "$(INTDIR)\MonitorWaitEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\NewMethodEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\NewMethodEvent.obj" "$(INTDIR)\NewMethodEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\ProfEnv.cpp > >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ > "$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\BaseProfiler.cpp > >-"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\ProfEnv.obj" "$(INTDIR)\ProfEnv.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\NewMethodEvent.cpp > >-"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\StartEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ThreadProfiler.cpp > >-"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\StartEvent.obj" "$(INTDIR)\StartEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\StopEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\StopEvent.obj" "$(INTDIR)\StopEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ > "$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp > >-"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\ThreadEndEvent.obj" "$(INTDIR)\ThreadEndEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ThreadProfiler.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\ThreadProfiler.obj" "$(INTDIR)\ThreadProfiler.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ > SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ > "$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp > >-"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)" >- $(CPP) $(CPP_PROJ) $(SOURCE) >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" > >-SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp > >-"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)" >+"$(INTDIR)\ThreadStartEvent.obj" "$(INTDIR)\ThreadStartEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp > >-"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\Tickets.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp > >-"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\Tickets.obj" "$(INTDIR)\Tickets.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\TIdSet.cpp > >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ > "$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\TIdSet.obj" "$(INTDIR)\TIdSet.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\VMInitEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\VMInitEvent.obj" "$(INTDIR)\VMInitEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\VMShutdownEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" >+ >+ >+"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProf32 - Win32 Debug" >+ >+ >+"$(INTDIR)\VMShutdownEvent.obj" "$(INTDIR)\VMShutdownEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+ > !ENDIF > >Index: src-native/build/build_tptp_martini.script >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/build_tptp_martini.script,v >retrieving revision 1.3 >diff -u -r1.3 build_tptp_martini.script >--- src-native/build/build_tptp_martini.script 14 Sep 2006 13:38:01 -0000 1.3 >+++ src-native/build/build_tptp_martini.script 26 Feb 2008 16:50:24 -0000 >@@ -50,6 +50,10 @@ > > echo "----------------------------------------------" > >+make -C ../src/Martini/Infrastructure/ThreadAdaptor -f Makefile $1 >+ >+echo "----------------------------------------------" >+ > make -C ../src/Martini/Infrastructure/JPI -f Makefile $1 > > echo "----------------------------------------------" >Index: src-native/build/BuildThreadProfEM64T.mak >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildThreadProfEM64T.mak,v >retrieving revision 1.5 >diff -u -r1.5 BuildThreadProfEM64T.mak >--- src-native/build/BuildThreadProfEM64T.mak 27 Aug 2007 16:39:51 -0000 1.5 >+++ src-native/build/BuildThreadProfEM64T.mak 26 Feb 2008 16:50:24 -0000 >@@ -1,4 +1,4 @@ >-# Microsoft Developer Studio Generated NMAKE File, Based on BuildCGProf32.dsp >+# Microsoft Developer Studio Generated NMAKE File, Based on BuildThreadProfEM64T.dsp > !IF "$(CFG)" == "" > CFG=BuildThreadProfEM64T - Win32 Debug > !MESSAGE No configuration specified. Defaulting to BuildThreadProfEM64T - Win32 Debug. >@@ -13,8 +13,8 @@ > !MESSAGE > !MESSAGE Possible choices for configuration are: > !MESSAGE >-!MESSAGE "BuildThreadProfEM64T - Win32 Release" (based on "Win32 (EM64T) Dynamic-Link Library") >-!MESSAGE "BuildThreadProfEM64T - Win32 Debug" (based on "Win32 (EM64T) Dynamic-Link Library") >+!MESSAGE "BuildThreadProfEM64T - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "BuildThreadProfEM64T - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") > !MESSAGE > !ERROR An invalid configuration is specified. > !ENDIF >@@ -25,8 +25,6 @@ > NULL=nul > !ENDIF > >-CPP=cl.exe >- > !IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" > > OUTDIR=.\..\bin\windows\release\EM64T >@@ -37,28 +35,30 @@ > > ALL : "$(OUTDIR)\ThreadProf.dll" > >+ > CLEAN : > -@erase "$(INTDIR)\AttachEvent.obj" >+ -@erase "$(INTDIR)\BaseProfiler.obj" >+ -@erase "$(INTDIR)\CallCAMethodEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >+ -@erase "$(INTDIR)\CustomCommandEvent.obj" > -@erase "$(INTDIR)\DetachEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitEvent.obj" >+ -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\ProfEnv.obj" > -@erase "$(INTDIR)\StartEvent.obj" > -@erase "$(INTDIR)\StopEvent.obj" >- -@erase "$(INTDIR)\VMInitEvent.obj" >- -@erase "$(INTDIR)\VMShutdownEvent.obj" >- -@erase "$(INTDIR)\Tickets.obj" >- -@erase "$(INTDIR)\ProfEnv.obj" >- -@erase "$(INTDIR)\BaseProfiler.obj" >- -@erase "$(INTDIR)\ThreadProfiler.obj" > -@erase "$(INTDIR)\ThreadEndEvent.obj" >- -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\ThreadProfiler.obj" > -@erase "$(INTDIR)\ThreadStartEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\Tickets.obj" > -@erase "$(INTDIR)\TIdSet.obj" >- -@erase "$(INTDIR)\vc*.idb" >- -@erase "$(INTDIR)\BuildThreadProf32.pch" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\VMInitEvent.obj" >+ -@erase "$(INTDIR)\VMShutdownEvent.obj" > -@erase "$(OUTDIR)\ThreadProf.dll" > -@erase "$(OUTDIR)\ThreadProf.exp" > -@erase "$(OUTDIR)\ThreadProf.lib" >@@ -69,30 +69,69 @@ > "$(INTDIR)" : > if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" > >-CPP_PROJ=/nologo /MT /W3 /EHsc /O2 /I "./../src/BaseProf" /I "./../include/Martini" /I "./../include/JPIAgent" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "EM64T_ARCH" /Fp"$(INTDIR)\BuildThreadProfEM64T.pch" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+CPP=cl.exe >+CPP_PROJ=/nologo /MT /W3 /GX /Zi /O2 /I "./../include/Martini" /I "./../include/JPIAgent" /I "./../src/BaseProf" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfEM64T.bsc" >+BSC32_SBRS= \ > > LINKEM64T=link.exe >-LINKEM64T_FLAGS=bufferoverflowu.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib MartiniOSA.lib /nologo /dll /pdb:none /machine:amd64 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\release\EM64T" >+LINKEM64T_FLAGS=kernel32.lib user32.lib winspool.lib comdlg32.lib MartiniOSA.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\release\EM64T" > LINKEM64T_OBJS= \ > "$(INTDIR)\AttachEvent.obj" \ >+ "$(INTDIR)\BaseProfiler.obj" \ >+ "$(INTDIR)\CallCAMethodEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >+ "$(INTDIR)\CustomCommandEvent.obj" \ > "$(INTDIR)\DetachEvent.obj" \ >+ "$(INTDIR)\MonitorWaitedEvent.obj" \ >+ "$(INTDIR)\MonitorWaitEvent.obj" \ >+ "$(INTDIR)\NewMethodEvent.obj" \ >+ "$(INTDIR)\ProfEnv.obj" \ > "$(INTDIR)\StartEvent.obj" \ > "$(INTDIR)\StopEvent.obj" \ >- "$(INTDIR)\VMInitEvent.obj" \ >- "$(INTDIR)\VMShutdownEvent.obj" \ >- "$(INTDIR)\Tickets.obj" \ >- "$(INTDIR)\ProfEnv.obj" \ >- "$(INTDIR)\TIdSet.obj" \ >- "$(INTDIR)\NewMethodEvent.obj" \ >- "$(INTDIR)\BaseProfiler.obj" \ >- "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadEndEvent.obj" \ >- "$(INTDIR)\CustomCommandEvent.obj" \ >+ "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadStartEvent.obj" \ >- "$(INTDIR)\MonitorWaitEvent.obj" \ >- "$(INTDIR)\MonitorWaitedEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ "$(INTDIR)\Tickets.obj" \ >+ "$(INTDIR)\TIdSet.obj" \ >+ "$(INTDIR)\VMInitEvent.obj" \ >+ "$(INTDIR)\VMShutdownEvent.obj" > > "$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS) > $(LINKEM64T) @<< >@@ -107,36 +146,58 @@ > OutDir=.\..\bin\windows\debug\EM64T > # End Custom Macros > >-ALL : "$(OUTDIR)\ThreadProf.dll" >+ALL : "$(OUTDIR)\ThreadProf.dll" "$(OUTDIR)\BuildThreadProfEM64T.bsc" > > > CLEAN : > -@erase "$(INTDIR)\AttachEvent.obj" >+ -@erase "$(INTDIR)\AttachEvent.sbr" >+ -@erase "$(INTDIR)\BaseProfiler.obj" >+ -@erase "$(INTDIR)\BaseProfiler.sbr" >+ -@erase "$(INTDIR)\CallCAMethodEvent.obj" >+ -@erase "$(INTDIR)\CallCAMethodEvent.sbr" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.sbr" >+ -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\CustomCommandEvent.sbr" > -@erase "$(INTDIR)\DetachEvent.obj" >+ -@erase "$(INTDIR)\DetachEvent.sbr" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.sbr" >+ -@erase "$(INTDIR)\MonitorWaitEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitEvent.sbr" >+ -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\NewMethodEvent.sbr" >+ -@erase "$(INTDIR)\ProfEnv.obj" >+ -@erase "$(INTDIR)\ProfEnv.sbr" > -@erase "$(INTDIR)\StartEvent.obj" >+ -@erase "$(INTDIR)\StartEvent.sbr" > -@erase "$(INTDIR)\StopEvent.obj" >- -@erase "$(INTDIR)\VMInitEvent.obj" >- -@erase "$(INTDIR)\VMShutdownEvent.obj" >- -@erase "$(INTDIR)\Tickets.obj" >- -@erase "$(INTDIR)\ProfEnv.obj" >- -@erase "$(INTDIR)\BaseProfiler.obj" >- -@erase "$(INTDIR)\ThreadProfiler.obj" >+ -@erase "$(INTDIR)\StopEvent.sbr" > -@erase "$(INTDIR)\ThreadEndEvent.obj" >- -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\ThreadEndEvent.sbr" >+ -@erase "$(INTDIR)\ThreadProfiler.obj" >+ -@erase "$(INTDIR)\ThreadProfiler.sbr" > -@erase "$(INTDIR)\ThreadStartEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\ThreadStartEvent.sbr" >+ -@erase "$(INTDIR)\Tickets.obj" >+ -@erase "$(INTDIR)\Tickets.sbr" > -@erase "$(INTDIR)\TIdSet.obj" >- -@erase "$(INTDIR)\vc*.idb" >- -@erase "$(INTDIR)\vc*.pdb" >- -@erase "$(INTDIR)\BuildThreadProf32.pch" >+ -@erase "$(INTDIR)\TIdSet.sbr" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\VMInitEvent.obj" >+ -@erase "$(INTDIR)\VMInitEvent.sbr" >+ -@erase "$(INTDIR)\VMShutdownEvent.obj" >+ -@erase "$(INTDIR)\VMShutdownEvent.sbr" >+ -@erase "$(OUTDIR)\BuildThreadProfEM64T.bsc" > -@erase "$(OUTDIR)\ThreadProf.dll" > -@erase "$(OUTDIR)\ThreadProf.exp" >- -@erase "$(OUTDIR)\ThreadProf.lib" > -@erase "$(OUTDIR)\ThreadProf.ilk" >+ -@erase "$(OUTDIR)\ThreadProf.lib" >+ -@erase "$(OUTDIR)\ThreadProf.pdb" > > "$(OUTDIR)" : > if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >@@ -144,37 +205,8 @@ > "$(INTDIR)" : > if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" > >-CPP_PROJ=/nologo /MTd /W3 /EHsc /Od /I "./../src/BaseProf" /I "./../include/JPIAgent" /I "./../include/Martini" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "EM64T_ARCH" /Fp"$(INTDIR)\BuildThreadProfEM64T.pch" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >- >-LINKEM64T=link.exe >-LINKEM64T_FLAGS=bufferoverflowu.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib MartiniOSA.lib /nologo /dll /pdb:none /debug /machine:amd64 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\debug\EM64T" >-LINKEM64T_OBJS= \ >- "$(INTDIR)\AttachEvent.obj" \ >- "$(INTDIR)\DetachEvent.obj" \ >- "$(INTDIR)\StartEvent.obj" \ >- "$(INTDIR)\StopEvent.obj" \ >- "$(INTDIR)\VMInitEvent.obj" \ >- "$(INTDIR)\VMShutdownEvent.obj" \ >- "$(INTDIR)\Tickets.obj" \ >- "$(INTDIR)\ProfEnv.obj" \ >- "$(INTDIR)\TIdSet.obj" \ >- "$(INTDIR)\NewMethodEvent.obj" \ >- "$(INTDIR)\BaseProfiler.obj" \ >- "$(INTDIR)\ThreadProfiler.obj" \ >- "$(INTDIR)\ThreadEndEvent.obj" \ >- "$(INTDIR)\CustomCommandEvent.obj" \ >- "$(INTDIR)\ThreadStartEvent.obj" \ >- "$(INTDIR)\MonitorWaitEvent.obj" \ >- "$(INTDIR)\MonitorWaitedEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- >-"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS) >- $(LINKEM64T) @<< >- $(LINKEM64T_FLAGS) $(LINKEM64T_OBJS) >-<< >- >-!ENDIF >+CPP=cl.exe >+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "./../include/JPIAgent" /I "./../include/Martini" /I "./../src/BaseProf" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\BuildThreadProfEM64T.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c > > .c{$(INTDIR)}.obj:: > $(CPP) @<< >@@ -206,6 +238,69 @@ > $(CPP_PROJ) $< > << > >+MTL=midl.exe >+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfEM64T.bsc" >+BSC32_SBRS= \ >+ "$(INTDIR)\AttachEvent.sbr" \ >+ "$(INTDIR)\BaseProfiler.sbr" \ >+ "$(INTDIR)\CallCAMethodEvent.sbr" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.sbr" \ >+ "$(INTDIR)\CustomCommandEvent.sbr" \ >+ "$(INTDIR)\DetachEvent.sbr" \ >+ "$(INTDIR)\MonitorWaitedEvent.sbr" \ >+ "$(INTDIR)\MonitorWaitEvent.sbr" \ >+ "$(INTDIR)\NewMethodEvent.sbr" \ >+ "$(INTDIR)\ProfEnv.sbr" \ >+ "$(INTDIR)\StartEvent.sbr" \ >+ "$(INTDIR)\StopEvent.sbr" \ >+ "$(INTDIR)\ThreadEndEvent.sbr" \ >+ "$(INTDIR)\ThreadProfiler.sbr" \ >+ "$(INTDIR)\ThreadStartEvent.sbr" \ >+ "$(INTDIR)\Tickets.sbr" \ >+ "$(INTDIR)\TIdSet.sbr" \ >+ "$(INTDIR)\VMInitEvent.sbr" \ >+ "$(INTDIR)\VMShutdownEvent.sbr" >+ >+"$(OUTDIR)\BuildThreadProfEM64T.bsc" : "$(OUTDIR)" $(BSC32_SBRS) >+ $(BSC32) @<< >+ $(BSC32_FLAGS) $(BSC32_SBRS) >+<< >+ >+LINKEM64T=link.exe >+LINKEM64T_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib MartiniOSA.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\ThreadProf.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /pdbtype:sept /libpath:"..\bin\windows\debug\EM64T" >+LINKEM64T_OBJS= \ >+ "$(INTDIR)\AttachEvent.obj" \ >+ "$(INTDIR)\BaseProfiler.obj" \ >+ "$(INTDIR)\CallCAMethodEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >+ "$(INTDIR)\CustomCommandEvent.obj" \ >+ "$(INTDIR)\DetachEvent.obj" \ >+ "$(INTDIR)\MonitorWaitedEvent.obj" \ >+ "$(INTDIR)\MonitorWaitEvent.obj" \ >+ "$(INTDIR)\NewMethodEvent.obj" \ >+ "$(INTDIR)\ProfEnv.obj" \ >+ "$(INTDIR)\StartEvent.obj" \ >+ "$(INTDIR)\StopEvent.obj" \ >+ "$(INTDIR)\ThreadEndEvent.obj" \ >+ "$(INTDIR)\ThreadProfiler.obj" \ >+ "$(INTDIR)\ThreadStartEvent.obj" \ >+ "$(INTDIR)\Tickets.obj" \ >+ "$(INTDIR)\TIdSet.obj" \ >+ "$(INTDIR)\VMInitEvent.obj" \ >+ "$(INTDIR)\VMShutdownEvent.obj" >+ >+"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS) >+ $(LINKEM64T) @<< >+ $(LINKEM64T_FLAGS) $(LINKEM64T_OBJS) >+<< >+ >+!ENDIF >+ > > !IF "$(NO_EXTERNAL_DEPS)" != "1" > !IF EXISTS("BuildThreadProfEM64T.dep") >@@ -217,101 +312,366 @@ > > > !IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" || "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >- > SOURCE=..\src\BaseProf\AttachEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ > "$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\AttachEvent.obj" "$(INTDIR)\AttachEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\BaseProfiler.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\BaseProfiler.obj" "$(INTDIR)\BaseProfiler.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\CallCAMethodEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\CallCAMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\CallCAMethodEvent.obj" "$(INTDIR)\CallCAMethodEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\ContendedMonitorEnteredEvent.obj" "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\ContendedMonitorEnterEvent.obj" "$(INTDIR)\ContendedMonitorEnterEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\CustomCommandEvent.obj" "$(INTDIR)\CustomCommandEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\DetachEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ > "$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\StartEvent.cpp > >-"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\DetachEvent.obj" "$(INTDIR)\DetachEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\StopEvent.cpp > >-"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\VMInitEvent.cpp > >-"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\MonitorWaitedEvent.obj" "$(INTDIR)\MonitorWaitedEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\VMShutdownEvent.cpp > >-"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\Tickets.cpp > >-"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\MonitorWaitEvent.obj" "$(INTDIR)\MonitorWaitEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\NewMethodEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\NewMethodEvent.obj" "$(INTDIR)\NewMethodEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\ProfEnv.cpp > >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ > "$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\BaseProfiler.cpp > >-"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\ProfEnv.obj" "$(INTDIR)\ProfEnv.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\NewMethodEvent.cpp > >-"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\StartEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ThreadProfiler.cpp > >-"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\StartEvent.obj" "$(INTDIR)\StartEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\StopEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\StopEvent.obj" "$(INTDIR)\StopEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ > "$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp > >-"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\ThreadEndEvent.obj" "$(INTDIR)\ThreadEndEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ThreadProfiler.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\ThreadProfiler.obj" "$(INTDIR)\ThreadProfiler.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ > "$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp > >-"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)" >- $(CPP) $(CPP_PROJ) $(SOURCE) >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" > >-SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp > >-"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)" >+"$(INTDIR)\ThreadStartEvent.obj" "$(INTDIR)\ThreadStartEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp > >-"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\Tickets.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp > >-"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\Tickets.obj" "$(INTDIR)\Tickets.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\TIdSet.cpp > >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ > "$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\TIdSet.obj" "$(INTDIR)\TIdSet.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\VMInitEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\VMInitEvent.obj" "$(INTDIR)\VMInitEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\VMShutdownEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" >+ >+ >+"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug" >+ >+ >+"$(INTDIR)\VMShutdownEvent.obj" "$(INTDIR)\VMShutdownEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+ > !ENDIF > >Index: src-native/build/BuildThreadProfIPF.mak >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/build/BuildThreadProfIPF.mak,v >retrieving revision 1.5 >diff -u -r1.5 BuildThreadProfIPF.mak >--- src-native/build/BuildThreadProfIPF.mak 27 Aug 2007 16:39:51 -0000 1.5 >+++ src-native/build/BuildThreadProfIPF.mak 26 Feb 2008 16:50:24 -0000 >@@ -1,4 +1,4 @@ >-# Microsoft Developer Studio Generated NMAKE File, Based on BuildThreadProf32.dsp >+# Microsoft Developer Studio Generated NMAKE File, Based on BuildThreadProfIPF.dsp > !IF "$(CFG)" == "" > CFG=BuildThreadProfIPF - Win32 Debug > !MESSAGE No configuration specified. Defaulting to BuildThreadProfIPF - Win32 Debug. >@@ -13,8 +13,8 @@ > !MESSAGE > !MESSAGE Possible choices for configuration are: > !MESSAGE >-!MESSAGE "BuildThreadProfIPF - Win32 Release" (based on "Win32 (IPF) Dynamic-Link Library") >-!MESSAGE "BuildThreadProfIPF - Win32 Debug" (based on "Win32 (IPF) Dynamic-Link Library") >+!MESSAGE "BuildThreadProfIPF - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "BuildThreadProfIPF - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") > !MESSAGE > !ERROR An invalid configuration is specified. > !ENDIF >@@ -25,8 +25,6 @@ > NULL=nul > !ENDIF > >-CPP=cl.exe >- > !IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" > > OUTDIR=.\..\bin\windows\release\IPF >@@ -37,28 +35,30 @@ > > ALL : "$(OUTDIR)\ThreadProf.dll" > >+ > CLEAN : > -@erase "$(INTDIR)\AttachEvent.obj" >+ -@erase "$(INTDIR)\BaseProfiler.obj" >+ -@erase "$(INTDIR)\CallCAMethodEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >+ -@erase "$(INTDIR)\CustomCommandEvent.obj" > -@erase "$(INTDIR)\DetachEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitEvent.obj" >+ -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\ProfEnv.obj" > -@erase "$(INTDIR)\StartEvent.obj" > -@erase "$(INTDIR)\StopEvent.obj" >- -@erase "$(INTDIR)\VMInitEvent.obj" >- -@erase "$(INTDIR)\VMShutdownEvent.obj" >- -@erase "$(INTDIR)\Tickets.obj" >- -@erase "$(INTDIR)\ProfEnv.obj" >- -@erase "$(INTDIR)\BaseProfiler.obj" >- -@erase "$(INTDIR)\ThreadProfiler.obj" >- -@erase "$(INTDIR)\CustomCommandEvent.obj" > -@erase "$(INTDIR)\ThreadEndEvent.obj" >+ -@erase "$(INTDIR)\ThreadProfiler.obj" > -@erase "$(INTDIR)\ThreadStartEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\Tickets.obj" > -@erase "$(INTDIR)\TIdSet.obj" >- -@erase "$(INTDIR)\vc*.idb" >- -@erase "$(INTDIR)\BuildThreadProf32.pch" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\VMInitEvent.obj" >+ -@erase "$(INTDIR)\VMShutdownEvent.obj" > -@erase "$(OUTDIR)\ThreadProf.dll" > -@erase "$(OUTDIR)\ThreadProf.exp" > -@erase "$(OUTDIR)\ThreadProf.lib" >@@ -69,30 +69,69 @@ > "$(INTDIR)" : > if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" > >-CPP_PROJ=/nologo /MT /W3 /EHsc /O2 /I "./../src/BaseProf" /I "./../include/Martini" /I "./../include/JPIAgent" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IPF_ARCH" /Fp"$(INTDIR)\BuildThreadProfIPF.pch" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+CPP=cl.exe >+CPP_PROJ=/nologo /MT /W3 /GX /Zi /O2 /I "./../include/Martini" /I "./../include/JPIAgent" /I "./../src/BaseProf" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfIPF.bsc" >+BSC32_SBRS= \ > > LINKIPF=link.exe >-LINKIPF_FLAGS=bufferoverflowu.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib MartiniOSA.lib /nologo /dll /pdb:none /machine:ia64 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\release\IPF" >+LINKIPF_FLAGS=kernel32.lib user32.lib winspool.lib comdlg32.lib MartiniOSA.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\release\IPF" > LINKIPF_OBJS= \ > "$(INTDIR)\AttachEvent.obj" \ >+ "$(INTDIR)\BaseProfiler.obj" \ >+ "$(INTDIR)\CallCAMethodEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >+ "$(INTDIR)\CustomCommandEvent.obj" \ > "$(INTDIR)\DetachEvent.obj" \ >+ "$(INTDIR)\MonitorWaitedEvent.obj" \ >+ "$(INTDIR)\MonitorWaitEvent.obj" \ >+ "$(INTDIR)\NewMethodEvent.obj" \ >+ "$(INTDIR)\ProfEnv.obj" \ > "$(INTDIR)\StartEvent.obj" \ > "$(INTDIR)\StopEvent.obj" \ >- "$(INTDIR)\VMInitEvent.obj" \ >- "$(INTDIR)\VMShutdownEvent.obj" \ >- "$(INTDIR)\Tickets.obj" \ >- "$(INTDIR)\ProfEnv.obj" \ >- "$(INTDIR)\TIdSet.obj" \ >- "$(INTDIR)\NewMethodEvent.obj" \ >- "$(INTDIR)\BaseProfiler.obj" \ >- "$(INTDIR)\ThreadProfiler.obj" \ >- "$(INTDIR)\CustomCommandEvent.obj" \ > "$(INTDIR)\ThreadEndEvent.obj" \ >+ "$(INTDIR)\ThreadProfiler.obj" \ > "$(INTDIR)\ThreadStartEvent.obj" \ >- "$(INTDIR)\MonitorWaitEvent.obj" \ >- "$(INTDIR)\MonitorWaitedEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ "$(INTDIR)\Tickets.obj" \ >+ "$(INTDIR)\TIdSet.obj" \ >+ "$(INTDIR)\VMInitEvent.obj" \ >+ "$(INTDIR)\VMShutdownEvent.obj" > > "$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS) > $(LINKIPF) @<< >@@ -107,36 +146,58 @@ > OutDir=.\..\bin\windows\debug\IPF > # End Custom Macros > >-ALL : "$(OUTDIR)\ThreadProf.dll" >+ALL : "$(OUTDIR)\ThreadProf.dll" "$(OUTDIR)\BuildThreadProfIPF.bsc" > > > CLEAN : > -@erase "$(INTDIR)\AttachEvent.obj" >+ -@erase "$(INTDIR)\AttachEvent.sbr" >+ -@erase "$(INTDIR)\BaseProfiler.obj" >+ -@erase "$(INTDIR)\BaseProfiler.sbr" >+ -@erase "$(INTDIR)\CallCAMethodEvent.obj" >+ -@erase "$(INTDIR)\CallCAMethodEvent.sbr" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >+ -@erase "$(INTDIR)\ContendedMonitorEnterEvent.sbr" >+ -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\CustomCommandEvent.sbr" > -@erase "$(INTDIR)\DetachEvent.obj" >+ -@erase "$(INTDIR)\DetachEvent.sbr" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitedEvent.sbr" >+ -@erase "$(INTDIR)\MonitorWaitEvent.obj" >+ -@erase "$(INTDIR)\MonitorWaitEvent.sbr" >+ -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\NewMethodEvent.sbr" >+ -@erase "$(INTDIR)\ProfEnv.obj" >+ -@erase "$(INTDIR)\ProfEnv.sbr" > -@erase "$(INTDIR)\StartEvent.obj" >+ -@erase "$(INTDIR)\StartEvent.sbr" > -@erase "$(INTDIR)\StopEvent.obj" >- -@erase "$(INTDIR)\VMInitEvent.obj" >- -@erase "$(INTDIR)\VMShutdownEvent.obj" >- -@erase "$(INTDIR)\Tickets.obj" >- -@erase "$(INTDIR)\ProfEnv.obj" >- -@erase "$(INTDIR)\BaseProfiler.obj" >- -@erase "$(INTDIR)\ThreadProfiler.obj" >- -@erase "$(INTDIR)\CustomCommandEvent.obj" >+ -@erase "$(INTDIR)\StopEvent.sbr" > -@erase "$(INTDIR)\ThreadEndEvent.obj" >+ -@erase "$(INTDIR)\ThreadEndEvent.sbr" >+ -@erase "$(INTDIR)\ThreadProfiler.obj" >+ -@erase "$(INTDIR)\ThreadProfiler.sbr" > -@erase "$(INTDIR)\ThreadStartEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitEvent.obj" >- -@erase "$(INTDIR)\MonitorWaitedEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj" >- -@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- -@erase "$(INTDIR)\NewMethodEvent.obj" >+ -@erase "$(INTDIR)\ThreadStartEvent.sbr" >+ -@erase "$(INTDIR)\Tickets.obj" >+ -@erase "$(INTDIR)\Tickets.sbr" > -@erase "$(INTDIR)\TIdSet.obj" >- -@erase "$(INTDIR)\vc*.idb" >- -@erase "$(INTDIR)\vc*.pdb" >- -@erase "$(INTDIR)\BuildThreadProf32.pch" >+ -@erase "$(INTDIR)\TIdSet.sbr" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\VMInitEvent.obj" >+ -@erase "$(INTDIR)\VMInitEvent.sbr" >+ -@erase "$(INTDIR)\VMShutdownEvent.obj" >+ -@erase "$(INTDIR)\VMShutdownEvent.sbr" >+ -@erase "$(OUTDIR)\BuildThreadProfIPF.bsc" > -@erase "$(OUTDIR)\ThreadProf.dll" > -@erase "$(OUTDIR)\ThreadProf.exp" >- -@erase "$(OUTDIR)\ThreadProf.lib" > -@erase "$(OUTDIR)\ThreadProf.ilk" >+ -@erase "$(OUTDIR)\ThreadProf.lib" >+ -@erase "$(OUTDIR)\ThreadProf.pdb" > > "$(OUTDIR)" : > if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >@@ -144,37 +205,8 @@ > "$(INTDIR)" : > if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" > >-CPP_PROJ=/nologo /MTd /W3 /EHsc /Od /I "./../src/BaseProf" /I "./../include/JPIAgent" /I "./../include/Martini" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IPF_ARCH" /Fp"$(INTDIR)\BuildThreadProfIPF.pch" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >- >-LINKIPF=link.exe >-LINKIPF_FLAGS=bufferoverflowu.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib uuid.lib MartiniOSA.lib /nologo /dll /pdb:none /debug /machine:ia64 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /libpath:"..\bin\windows\debug\IPF" >-LINKIPF_OBJS= \ >- "$(INTDIR)\AttachEvent.obj" \ >- "$(INTDIR)\DetachEvent.obj" \ >- "$(INTDIR)\StartEvent.obj" \ >- "$(INTDIR)\StopEvent.obj" \ >- "$(INTDIR)\VMInitEvent.obj" \ >- "$(INTDIR)\VMShutdownEvent.obj" \ >- "$(INTDIR)\Tickets.obj" \ >- "$(INTDIR)\ProfEnv.obj" \ >- "$(INTDIR)\TIdSet.obj" \ >- "$(INTDIR)\NewMethodEvent.obj" \ >- "$(INTDIR)\BaseProfiler.obj" \ >- "$(INTDIR)\ThreadProfiler.obj" \ >- "$(INTDIR)\CustomCommandEvent.obj" \ >- "$(INTDIR)\ThreadEndEvent.obj" \ >- "$(INTDIR)\ThreadStartEvent.obj" \ >- "$(INTDIR)\MonitorWaitEvent.obj" \ >- "$(INTDIR)\MonitorWaitedEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >- "$(INTDIR)\ContendedMonitorEnteredEvent.obj" >- >-"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS) >- $(LINKIPF) @<< >- $(LINKIPF_FLAGS) $(LINKIPF_OBJS) >-<< >- >-!ENDIF >+CPP=cl.exe >+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "./../include/JPIAgent" /I "./../include/Martini" /I "./../src/BaseProf" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "IA32_ARCH" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\BuildThreadProfIPF.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c > > .c{$(INTDIR)}.obj:: > $(CPP) @<< >@@ -206,6 +238,69 @@ > $(CPP_PROJ) $< > << > >+MTL=midl.exe >+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfIPF.bsc" >+BSC32_SBRS= \ >+ "$(INTDIR)\AttachEvent.sbr" \ >+ "$(INTDIR)\BaseProfiler.sbr" \ >+ "$(INTDIR)\CallCAMethodEvent.sbr" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.sbr" \ >+ "$(INTDIR)\CustomCommandEvent.sbr" \ >+ "$(INTDIR)\DetachEvent.sbr" \ >+ "$(INTDIR)\MonitorWaitedEvent.sbr" \ >+ "$(INTDIR)\MonitorWaitEvent.sbr" \ >+ "$(INTDIR)\NewMethodEvent.sbr" \ >+ "$(INTDIR)\ProfEnv.sbr" \ >+ "$(INTDIR)\StartEvent.sbr" \ >+ "$(INTDIR)\StopEvent.sbr" \ >+ "$(INTDIR)\ThreadEndEvent.sbr" \ >+ "$(INTDIR)\ThreadProfiler.sbr" \ >+ "$(INTDIR)\ThreadStartEvent.sbr" \ >+ "$(INTDIR)\Tickets.sbr" \ >+ "$(INTDIR)\TIdSet.sbr" \ >+ "$(INTDIR)\VMInitEvent.sbr" \ >+ "$(INTDIR)\VMShutdownEvent.sbr" >+ >+"$(OUTDIR)\BuildThreadProfIPF.bsc" : "$(OUTDIR)" $(BSC32_SBRS) >+ $(BSC32) @<< >+ $(BSC32_FLAGS) $(BSC32_SBRS) >+<< >+ >+LINKIPF=link.exe >+LINKIPF_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib MartiniOSA.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\ThreadProf.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ThreadProf.dll" /implib:"$(OUTDIR)\ThreadProf.lib" /pdbtype:sept /libpath:"..\bin\windows\debug\IPF" >+LINKIPF_OBJS= \ >+ "$(INTDIR)\AttachEvent.obj" \ >+ "$(INTDIR)\BaseProfiler.obj" \ >+ "$(INTDIR)\CallCAMethodEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnteredEvent.obj" \ >+ "$(INTDIR)\ContendedMonitorEnterEvent.obj" \ >+ "$(INTDIR)\CustomCommandEvent.obj" \ >+ "$(INTDIR)\DetachEvent.obj" \ >+ "$(INTDIR)\MonitorWaitedEvent.obj" \ >+ "$(INTDIR)\MonitorWaitEvent.obj" \ >+ "$(INTDIR)\NewMethodEvent.obj" \ >+ "$(INTDIR)\ProfEnv.obj" \ >+ "$(INTDIR)\StartEvent.obj" \ >+ "$(INTDIR)\StopEvent.obj" \ >+ "$(INTDIR)\ThreadEndEvent.obj" \ >+ "$(INTDIR)\ThreadProfiler.obj" \ >+ "$(INTDIR)\ThreadStartEvent.obj" \ >+ "$(INTDIR)\Tickets.obj" \ >+ "$(INTDIR)\TIdSet.obj" \ >+ "$(INTDIR)\VMInitEvent.obj" \ >+ "$(INTDIR)\VMShutdownEvent.obj" >+ >+"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS) >+ $(LINKIPF) @<< >+ $(LINKIPF_FLAGS) $(LINKIPF_OBJS) >+<< >+ >+!ENDIF >+ > > !IF "$(NO_EXTERNAL_DEPS)" != "1" > !IF EXISTS("BuildThreadProfIPF.dep") >@@ -217,101 +312,366 @@ > > > !IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" || "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >- > SOURCE=..\src\BaseProf\AttachEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ > "$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\AttachEvent.obj" "$(INTDIR)\AttachEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\BaseProfiler.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\BaseProfiler.obj" "$(INTDIR)\BaseProfiler.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\CallCAMethodEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\CallCAMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\CallCAMethodEvent.obj" "$(INTDIR)\CallCAMethodEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\ContendedMonitorEnteredEvent.obj" "$(INTDIR)\ContendedMonitorEnteredEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\ContendedMonitorEnterEvent.obj" "$(INTDIR)\ContendedMonitorEnterEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\CustomCommandEvent.obj" "$(INTDIR)\CustomCommandEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\DetachEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ > "$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\StartEvent.cpp > >-"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\DetachEvent.obj" "$(INTDIR)\DetachEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\StopEvent.cpp > >-"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\VMInitEvent.cpp > >-"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\MonitorWaitedEvent.obj" "$(INTDIR)\MonitorWaitedEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\VMShutdownEvent.cpp > >-"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\Tickets.cpp > >-"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\MonitorWaitEvent.obj" "$(INTDIR)\MonitorWaitEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\NewMethodEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\NewMethodEvent.obj" "$(INTDIR)\NewMethodEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\ProfEnv.cpp > >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ > "$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\BaseProf\BaseProfiler.cpp > >-"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\ProfEnv.obj" "$(INTDIR)\ProfEnv.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\NewMethodEvent.cpp > >-"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\StartEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ThreadProfiler.cpp > >-"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\StartEvent.obj" "$(INTDIR)\StartEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp > >-"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\StopEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\StopEvent.obj" "$(INTDIR)\StopEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ > "$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\ThreadEndEvent.obj" "$(INTDIR)\ThreadEndEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\ThreadProf\ThreadProfiler.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\ThreadProfiler.obj" "$(INTDIR)\ThreadProfiler.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ > SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp > >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ > "$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp > >-"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)" >- $(CPP) $(CPP_PROJ) $(SOURCE) >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" > >-SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp > >-"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)" >+"$(INTDIR)\ThreadStartEvent.obj" "$(INTDIR)\ThreadStartEvent.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp > >-"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ENDIF >+ >+SOURCE=..\src\BaseProf\Tickets.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >-SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp > >-"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)" >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\Tickets.obj" "$(INTDIR)\Tickets.sbr" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ENDIF >+ > SOURCE=..\src\BaseProf\TIdSet.cpp > >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ > "$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)" > $(CPP) $(CPP_PROJ) $(SOURCE) > >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\TIdSet.obj" "$(INTDIR)\TIdSet.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\VMInitEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\VMInitEvent.obj" "$(INTDIR)\VMInitEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=..\src\BaseProf\VMShutdownEvent.cpp >+ >+!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" >+ >+ >+"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "BuildThreadProfIPF - Win32 Debug" >+ >+ >+"$(INTDIR)\VMShutdownEvent.obj" "$(INTDIR)\VMShutdownEvent.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+ > !ENDIF > >Index: src-native/src/BaseProf/ProfEnv.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/BaseProf/ProfEnv.h,v >retrieving revision 1.18 >diff -u -r1.18 ProfEnv.h >--- src-native/src/BaseProf/ProfEnv.h 24 Aug 2007 17:29:23 -0000 1.18 >+++ src-native/src/BaseProf/ProfEnv.h 26 Feb 2008 16:50:27 -0000 >@@ -25,7 +25,8 @@ > namespace Martini { namespace BaseProf { > > enum EventType {CONTENDED_MONITOR_ENTERED_EVENT, CONTENDED_MONITOR_ENTER_EVENT, >- MONITOR_WAITED_EVENT, MONITOR_WAIT_EVENT, THREAD_START_EVENT, THREAD_END_EVENT}; >+ MONITOR_WAITED_EVENT, MONITOR_WAIT_EVENT, THREAD_START_EVENT, THREAD_END_EVENT, >+ THREAD_INTERACTION}; > > struct SThreadEventsData { > EventType type; >@@ -117,6 +118,13 @@ > void PrintMethodLeaveData(); > // > TResult GetThreadInfo(MPI::TId clientId, MPI::TId threadId, MPI::BitSet requestedDataTypes, MPI::SThreadInfo *pData); >+ >+ TResult AddSupportedEG(MPI::EEventGroup group); >+ TResult DelSupportedEG(MPI::EEventGroup group); >+ bool IsSupportedEG(MPI::EEventGroup group); >+ TResult EnableIsSupportedEG(); >+ TResult DisableSupportedEG(); >+ > // > JPIAgent::EC_Env* ec_env; > // >@@ -128,8 +136,9 @@ > CTickets m_Tickets; > // > bool m_bVMInitDone; >- // >- MPI::EEventGroup m_implementedEG; >+ // TODO: create list >+ MPI::EEventGroup m_implementedEG[4]; >+ int m_FreeEGCell; > // Pointer to the MPI implementation > MPI::IMpi *m_pMpiApi; > // Client id for MPI requests >Index: src-native/src/BaseProf/ProfEnv.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/BaseProf/ProfEnv.cpp,v >retrieving revision 1.23 >diff -u -r1.23 ProfEnv.cpp >--- src-native/src/BaseProf/ProfEnv.cpp 5 Sep 2007 17:30:17 -0000 1.23 >+++ src-native/src/BaseProf/ProfEnv.cpp 26 Feb 2008 16:50:27 -0000 >@@ -31,7 +31,8 @@ > m_objectInfoKey = 1; > m_bVMInitDone = false; > m_profilerIsActive = false; >- m_implementedEG = EG_NONE; >+// m_implementedEG = { 0 }; >+ m_FreeEGCell = 0; > m_pClassSDataLockObject = CreateThreadSync(); > m_pMethodSDataLockObject = CreateThreadSync(); > m_pObjectSDataLockObject = CreateThreadSync(); >@@ -713,3 +714,63 @@ > lockGetThreadInfoObject->Leave(); > return res; > } >+ >+TResult >+CProfEnv::AddSupportedEG(EEventGroup group) >+{ >+ if (!IsSupportedEG(group)) { >+ m_implementedEG[m_FreeEGCell++] = group; >+ } >+ return MRTE_RESULT_OK; >+} >+ >+TResult >+CProfEnv::DelSupportedEG(EEventGroup group) >+{ >+ int i; >+ if (IsSupportedEG(group)) { >+ for (i = 0; i < m_FreeEGCell; i++) { >+ if (m_implementedEG[i] == group) { >+ m_implementedEG[i] = m_implementedEG[--m_FreeEGCell]; >+ return MRTE_RESULT_OK; >+ } >+ } >+ } >+ return MRTE_RESULT_OK; >+} >+ >+bool >+CProfEnv::IsSupportedEG(EEventGroup group) >+{ >+ int i; >+ for (i = 0; i < m_FreeEGCell; i++) { >+ if (m_implementedEG[i] == group) { >+ return true; >+ } >+ } >+ return false; >+} >+ >+TResult CProfEnv::DisableSupportedEG() { >+ int i; >+ TResult retVal; >+ for (i = 0; i < m_FreeEGCell; i++) { >+ retVal = m_pMpiApi->DisableEventGroup(m_clientId, m_implementedEG[i]); >+ if (MRTE_FAILED(retVal)) { >+ return retVal; >+ } >+ } >+ return MRTE_RESULT_OK; >+} >+ >+TResult CProfEnv::EnableIsSupportedEG() { >+ int i; >+ TResult retVal; >+ for (i = 0; i < m_FreeEGCell; i++) { >+ retVal = m_pMpiApi->DisableEventGroup(m_clientId, m_implementedEG[i]); >+ if (MRTE_FAILED(retVal)) { >+ return retVal; >+ } >+ } >+ return MRTE_RESULT_OK; >+} >Index: src-native/src/BaseProf/DetachEvent.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/BaseProf/DetachEvent.cpp,v >retrieving revision 1.3 >diff -u -r1.3 DetachEvent.cpp >--- src-native/src/BaseProf/DetachEvent.cpp 18 Apr 2007 15:02:24 -0000 1.3 >+++ src-native/src/BaseProf/DetachEvent.cpp 26 Feb 2008 16:50:27 -0000 >@@ -41,10 +41,10 @@ > return; > } > m_pProfEnv->ec_env->SetProfileOption("EXECDETAILS", "false"); >- if ((m_pProfEnv->m_implementedEG != EG_CALL_GRAPH) && (m_pProfEnv->m_implementedEG != EG_HEAP)) { >+ if (!m_pProfEnv->IsSupportedEG(EG_CALL_GRAPH) && !m_pProfEnv->IsSupportedEG(EG_HEAP)) { > return; > } >- TResult res = m_pProfEnv->m_pMpiApi->DisableEventGroup(m_pProfEnv->m_clientId, m_pProfEnv->m_implementedEG); >+ TResult res = m_pProfEnv->DisableSupportedEG(); > if (MRTE_FAILED(res)) { > if (MRTE_ERROR_PHASE_FAILURE == res) { > LOG_DIE("Detach failed (too early)"); >Index: src-native/src/BaseProf/BaseProfiler.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/BaseProf/BaseProfiler.cpp,v >retrieving revision 1.7 >diff -u -r1.7 BaseProfiler.cpp >--- src-native/src/BaseProf/BaseProfiler.cpp 18 Apr 2007 15:02:24 -0000 1.7 >+++ src-native/src/BaseProf/BaseProfiler.cpp 26 Feb 2008 16:50:27 -0000 >@@ -110,7 +110,7 @@ > return retVal; > } > if (m_pProfEnv.ec_env->isEnabled()) { >- TResult res = m_pProfEnv.m_pMpiApi->DisableEventGroup(m_pProfEnv.m_clientId, m_pProfEnv.m_implementedEG); >+ TResult res = m_pProfEnv.DisableSupportedEG(); > LOG_ASSERT(res == MRTE_RESULT_OK); > } > >Index: src-native/src/BaseProf/AttachEvent.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/BaseProf/AttachEvent.cpp,v >retrieving revision 1.12 >diff -u -r1.12 AttachEvent.cpp >--- src-native/src/BaseProf/AttachEvent.cpp 24 Aug 2007 17:29:23 -0000 1.12 >+++ src-native/src/BaseProf/AttachEvent.cpp 26 Feb 2008 16:50:27 -0000 >@@ -52,7 +52,7 @@ > threadInfoArray.uiSize = MAX_THREADS; //TODO check it!!!! > threadInfoArray.pEntries = (SThreadInfoArrayEntry*)malloc(sizeof(SThreadInfoArrayEntry) * threadInfoArray.uiSize); > memset(threadInfoArray.pEntries, 0, sizeof(SThreadInfoArrayEntry) * threadInfoArray.uiSize); >- if (m_pProfEnv->m_implementedEG == EG_MONITOR) { >+ if (m_pProfEnv->IsSupportedEG(EG_MONITOR)) { > unsigned int i; > for (i = 0; i < MAX_THREADS; i++) { > threadInfoArray.pEntries[i].threadInfo.vmOffsetStack.uiSize = MAX_FRAMES; >@@ -177,10 +177,7 @@ > } > free(threadInfoArray.pEntries); > >- if ((m_pProfEnv->m_implementedEG != EG_MONITOR) && (m_pProfEnv->m_implementedEG != EG_CALL_GRAPH) && (m_pProfEnv->m_implementedEG != EG_HEAP)) { >- return; >- } >- res = m_pProfEnv->m_pMpiApi->EnableEventGroup(m_pProfEnv->m_clientId, m_pProfEnv->m_implementedEG); >+ res = m_pProfEnv->EnableIsSupportedEG(); > if (MRTE_FAILED(res)) { > if (MRTE_ERROR_PHASE_FAILURE == res) { > LOG_DIE("Attach failed (too early)"); >Index: src-native/src/CGProf/CallGraphProfiler.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/CGProf/CallGraphProfiler.cpp,v >retrieving revision 1.11 >diff -u -r1.11 CallGraphProfiler.cpp >--- src-native/src/CGProf/CallGraphProfiler.cpp 6 Jun 2007 19:01:43 -0000 1.11 >+++ src-native/src/CGProf/CallGraphProfiler.cpp 26 Feb 2008 16:50:27 -0000 >@@ -37,7 +37,7 @@ > { > m_profilerName = "Call Graph profiler"; > m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.execution"; // fixed for 190684 >- m_pProfEnv.m_implementedEG = EG_CALL_GRAPH; >+ m_pProfEnv.AddSupportedEG(EG_CALL_GRAPH); > } > > CCallGraphProfiler::~CCallGraphProfiler() >Index: src-native/src/ThreadProf/Makefile >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/ThreadProf/Makefile,v >retrieving revision 1.4 >diff -u -r1.4 Makefile >--- src-native/src/ThreadProf/Makefile 5 Sep 2007 04:12:27 -0000 1.4 >+++ src-native/src/ThreadProf/Makefile 26 Feb 2008 16:50:30 -0000 >@@ -25,6 +25,7 @@ > $(OBJDIR)/MonitorWaitedEvent.o \ > $(OBJDIR)/ContendedMonitorEnterEvent.o \ > $(OBJDIR)/ContendedMonitorEnteredEvent.o \ >+ $(OBJDIR)/CallCAMethodEvent.o \ > $(OBJDIR)/CustomCommandEvent.o > > LIB = libThreadProf.so >Index: src-native/src/ThreadProf/Makefile.dep >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/ThreadProf/Makefile.dep,v >retrieving revision 1.4 >diff -u -r1.4 Makefile.dep >--- src-native/src/ThreadProf/Makefile.dep 5 Sep 2007 04:12:48 -0000 1.4 >+++ src-native/src/ThreadProf/Makefile.dep 26 Feb 2008 16:50:30 -0000 >@@ -231,3 +231,14 @@ > ./../BaseProf/TIdSet.h > $(CPP_COMPILE) > >+$(OBJDIR)/CallCAMethodEvent.o: CallCAMethodEvent.cpp \ >+ ../../include/Martini/OSA.h \ >+ ../../include/Martini/MRTEResults.h \ >+ ../../include/Martini/MRTETypes.h \ >+ ../../include/Martini/MpiAPI.h \ >+ ../../include/JPIAgent/log.h \ >+ CallCAMethodEvent.h \ >+ ./../BaseProf/ProfEnv.h \ >+ ./../BaseProf/Tickets.h \ >+ ./../BaseProf/TIdSet.h >+ $(CPP_COMPILE) >Index: src-native/src/ThreadProf/ThreadProfiler.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/ThreadProf/ThreadProfiler.cpp,v >retrieving revision 1.9 >diff -u -r1.9 ThreadProfiler.cpp >--- src-native/src/ThreadProf/ThreadProfiler.cpp 24 Aug 2007 17:29:22 -0000 1.9 >+++ src-native/src/ThreadProf/ThreadProfiler.cpp 26 Feb 2008 16:50:30 -0000 >@@ -37,7 +37,7 @@ > { > m_profilerName = "Thread profiler"; > m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.thread"; // fixed for 190684 >- m_pProfEnv.m_implementedEG = EG_MONITOR; >+ m_pProfEnv.AddSupportedEG(EG_MONITOR); > } > > CThreadProfiler::~CThreadProfiler() >@@ -91,17 +91,70 @@ > LOG_ERROR("Initialization of NewMethod event failed: " << retVal); > return retVal; > } >+ >+ if (m_pProfEnv.ec_env->isContentionAnalysisSupported()) { >+ m_pProfEnv.AddSupportedEG(EG_THREAD_INTERACTION); >+ >+ retVal = m_threadInteractionHandler.Init(&m_pProfEnv); >+ if (MRTE_FAILED(retVal)) { >+ LOG_ERROR("Initialization of callNotify event failed: " << retVal); >+ return retVal; >+ } >+ } >+ > return MRTE_RESULT_OK; > } > > TResult > CThreadProfiler::InitFilter() > { >- return MRTE_RESULT_OK; >+ // register to filter >+ static CThreadInteractionFilter filter(&m_pProfEnv); >+ >+ TResult retVal = m_pProfEnv.m_pMpiApi->SetEventGroupFilter( >+ m_pProfEnv.m_clientId, >+ Martini::MPI::EG_THREAD_INTERACTION, >+ filter); >+ >+ if (MRTE_SUCCEEDED(retVal)) { >+ LOG_TRACE(m_profilerName << " filter: init success"); >+ } else { >+ LOG_ERROR(m_profilerName << " filter: init failed"); >+ } >+ return retVal; > } > > TResult > CThreadProfiler::ParceOptions(const char *szOptions) > { >+#ifndef _WIN32 >+#define stricmp strcasecmp >+#endif >+ if (stricmp("contanalysis=false", szOptions) == 0) { >+ m_pProfEnv.ec_env->SetProfileOption("CONTANALYSIS", "false"); >+ } else if (stricmp("contanalysis=true", szOptions) == 0) { >+ m_pProfEnv.ec_env->SetProfileOption("CONTANALYSIS", "true"); >+ } else if (stricmp("", szOptions) == 0) { >+ } else { >+ LOG_MESSAGE(m_profilerName << " invalid option: " << szOptions); //FIX >+ //TODO? Usage? >+ return MRTE_ERROR_ILLEGAL_ARGUMENT; >+ } > return MRTE_RESULT_OK; > } >+//======================================================================================= >+ >+CThreadInteractionFilter::CThreadInteractionFilter(CProfEnv* profEnv) >+{ >+ m_pProfEnv = profEnv; >+} >+ >+bool >+CThreadInteractionFilter::ShouldNotify(SThreadInteractionFilterData &data) >+{ >+ if (m_pProfEnv->ec_env->IsExcluded(data.szClassName, data.szMethodName)) { >+ return false; >+ } >+ return true; >+} >+ >Index: src-native/src/ThreadProf/ThreadProfiler.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/ThreadProf/ThreadProfiler.h,v >retrieving revision 1.6 >diff -u -r1.6 ThreadProfiler.h >--- src-native/src/ThreadProf/ThreadProfiler.h 24 Aug 2007 17:29:22 -0000 1.6 >+++ src-native/src/ThreadProf/ThreadProfiler.h 26 Feb 2008 16:50:30 -0000 >@@ -24,10 +24,23 @@ > #include "ContendedMonitorEnteredEvent.h" > #include "NewMethodEvent.h" > #include "CustomCommandEvent.h" >+#include "ThreadInteractionEvent.h" > > > namespace Martini { namespace ThreadProf { > >+ >+ class CThreadInteractionFilter : public MPI::IThreadInteractionFilter >+ { >+ public: >+ CThreadInteractionFilter(BaseProf::CProfEnv* profEnv); >+ bool ShouldNotify(MPI::SThreadInteractionFilterData &data); >+ private: >+ // profilrt env object >+ BaseProf::CProfEnv* m_pProfEnv; >+ }; >+ >+ > class CThreadProfiler : public BaseProf::CBaseProfiler > { > public: >@@ -58,6 +71,8 @@ > CNewMethodEvent m_newMethodHandler; > // CustomCommand event object > CCustomCommandEvent m_customCommandHandler; >+ // call CA method event object >+ CThreadInteractionEvent m_threadInteractionHandler; > }; > > } /*namespace Martini*/ } /*namespace ThreadProf*/ >Index: src-native/src/ThreadProf/MonitorWaitedEvent.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/ThreadProf/MonitorWaitedEvent.cpp,v >retrieving revision 1.8 >diff -u -r1.8 MonitorWaitedEvent.cpp >--- src-native/src/ThreadProf/MonitorWaitedEvent.cpp 23 Mar 2007 14:04:37 -0000 1.8 >+++ src-native/src/ThreadProf/MonitorWaitedEvent.cpp 26 Feb 2008 16:50:30 -0000 >@@ -41,6 +41,8 @@ > { > LOG_ASSERT((data.validData & DR_THREAD_ID) != 0); > LOG_ASSERT((data.validData & DR_OBJECT_ID) != 0); >+ LOG_ASSERT((data.validData & DR_MONITOR_TIMED_OUT) != 0); >+ > if (!m_pProfEnv->m_profilerIsActive) { > m_pProfEnv->StoreThreadEvent(data.threadId, MONITOR_WAITED_EVENT, &data, m_pProfEnv->ec_env->GetTime() - m_pProfEnv->GetTimeOut(data.threadId)); > return; >Index: src-native/src/JPIAgent/ECWrapper.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/ECWrapper.cpp,v >retrieving revision 1.29 >diff -u -r1.29 ECWrapper.cpp >--- src-native/src/JPIAgent/ECWrapper.cpp 7 Feb 2008 14:47:29 -0000 1.29 >+++ src-native/src/JPIAgent/ECWrapper.cpp 26 Feb 2008 16:50:28 -0000 >@@ -494,6 +494,14 @@ > } > > EC_EXPORT EC_ENV_Error ECCALL >+printThreadInteractionElements(EC_Env* env, SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace) >+{ >+ LOG_ASSERT(ECWrapper::m_pCPrint != 0); >+ ECWrapper::m_pCPrint->printThreadInteractionElements(threadInteractionData, stackTrace); >+ return EC_ENV_ERROR_NONE; >+} >+ >+EC_EXPORT EC_ENV_Error ECCALL > PrintCustomElement(EC_Env* env, const char* str) > { > LOG_ASSERT(ECWrapper::m_pCPrint != 0); >@@ -568,6 +576,12 @@ > return ECWrapper::m_pCOptions->isAllocSitesSupported(); > } > >+EC_EXPORT bool ECCALL >+isContentionAnalysisSupported(EC_Env* env) >+{ >+ return ECWrapper::m_pCOptions->isContentionAnalysisSupported(); >+} >+ > EC_EXPORT const char* ECCALL > getUnknownOptionByName(EC_Env* env, const char* name) > { >@@ -608,6 +622,7 @@ > ECWrapper::m_ECFunctions.PrintMonitorWaitedElement = &PrintMonitorWaitedElement; > ECWrapper::m_ECFunctions.PrintMonitorContendedEnterElement = &PrintMonitorContendedEnterElement; > ECWrapper::m_ECFunctions.PrintMonitorContendedEnteredElement = &PrintMonitorContendedEnteredElement; >+ ECWrapper::m_ECFunctions.printThreadInteractionElements = &printThreadInteractionElements; > ECWrapper::m_ECFunctions.PrintCustomElement = &PrintCustomElement; > ECWrapper::m_ECFunctions.IsExcluded = &IsExcluded; > ECWrapper::m_ECFunctions.GetTime = &GetTime_; >@@ -619,6 +634,7 @@ > ECWrapper::m_ECFunctions.isControlled = &isControlled; > ECWrapper::m_ECFunctions.isEnabled = &isEnabled; > ECWrapper::m_ECFunctions.isAllocSitesSupported = &isAllocSitesSupported; >+ ECWrapper::m_ECFunctions.isContentionAnalysisSupported = &isContentionAnalysisSupported; > ECWrapper::m_ECFunctions.getUnknownOptionByName = &getUnknownOptionByName; > ECWrapper::m_ECFunctions.VMInitDone = &VMInitDone; > ECWrapper::m_EC_Env.functions = &ECWrapper::m_ECFunctions; >Index: src-native/src/JPIAgent/Filters.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/Filters.cpp,v >retrieving revision 1.6 >diff -u -r1.6 Filters.cpp >--- src-native/src/JPIAgent/Filters.cpp 3 May 2007 13:04:40 -0000 1.6 >+++ src-native/src/JPIAgent/Filters.cpp 26 Feb 2008 16:50:28 -0000 >@@ -433,6 +433,7 @@ > > filterFile = fopen(fileName, "r"); > if (!filterFile) { >+ // TODO: Add error message what filter file can't be open > return -1; > } > >Index: src-native/src/JPIAgent/Options.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/Options.cpp,v >retrieving revision 1.21 >diff -u -r1.21 Options.cpp >--- src-native/src/JPIAgent/Options.cpp 7 Feb 2008 14:47:29 -0000 1.21 >+++ src-native/src/JPIAgent/Options.cpp 26 Feb 2008 16:50:28 -0000 >@@ -68,6 +68,7 @@ > ,0 /* Call graph profiler specific option.*/ > ,0 /* Call graph profiler specific option.*/ > ,0 >+ ,0 > ,StackInfoNormal /* Stack mode preference (default) */ > ,0 /* The invocation options from the command line */ > ,0 /* Filter File (to be initialized) */ >@@ -297,6 +298,8 @@ > m_jvmtiAgent_Options.cgAggStackMemoryFree = setBooleanOption(value, key, m_jvmtiAgent_Options.cgAggStackMemoryFree); > } else if (STRICOLL(key, "ALLOCSITES") == 0) { > m_jvmtiAgent_Options.allocSites = setBooleanOption(value, key, m_jvmtiAgent_Options.allocSites); >+ } else if (STRICOLL(key, "CONTANALYSIS") == 0) { >+ m_jvmtiAgent_Options.contAnalysis = setBooleanOption(value, key, m_jvmtiAgent_Options.contAnalysis); > } else { > /* 60879 add the unknown profiling option to the 'unknowns' list so that we > can echo it back to the UI */ >Index: src-native/src/JPIAgent/Print.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/Print.h,v >retrieving revision 1.19 >diff -u -r1.19 Print.h >--- src-native/src/JPIAgent/Print.h 25 Apr 2007 14:23:16 -0000 1.19 >+++ src-native/src/JPIAgent/Print.h 26 Feb 2008 16:50:28 -0000 >@@ -99,6 +99,7 @@ > virtual void printMonitorWaitedElement(SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace) = 0; > virtual void printMonitorContendedEnterElement(SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace) = 0; > virtual void printMonitorContendedEnteredElement(SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace) = 0; >+ virtual void printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace) = 0; > > virtual void printCustomElement(const char *str) = 0; > >Index: src-native/src/JPIAgent/PrintXML.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/PrintXML.cpp,v >retrieving revision 1.27 >diff -u -r1.27 PrintXML.cpp >--- src-native/src/JPIAgent/PrintXML.cpp 7 Feb 2008 14:47:29 -0000 1.27 >+++ src-native/src/JPIAgent/PrintXML.cpp 26 Feb 2008 16:50:28 -0000 >@@ -602,12 +602,14 @@ > if(m_pOptions->m_jvmtiAgent_Options.timestamp) { > AppendCurrentTimeStamp(&elb); > } >- /* Print the object identifier. Object identifier is -1 if in Thread.sleep() */ >+ /* Print the object identifier. Object identifier is -1 if in Thread.sleep() */ > AppendInteger64Attribute(&elb, STATIC_OBJ_IDREF_ATTRIBUTE, STRLEN_STATIC_OBJ_IDREF_ATTRIBUTE, > /*(isThreadSleep == 0 ?*/ monitorWaitedData->objectId /*: -1)*/); >-// AppendLabeledTimestamp(&elb, TIMEOUT_ATTRIBUTE, STRLEN_TIMEOUT_ATTRIBUTE, timeout, TRUE); >+ > AppendInteger64Attribute(&elb, TIMEOUT_ATTRIBUTE, STRLEN_TIMEOUT_ATTRIBUTE, timeout/1000000); >-// AppendTraceIdRefAttribute(&elb); >+ >+ AppendIntegerAttribute(&elb, MONITOR_IS_TIMED_OUT_ATTRIBUTE, STRLEN_MONITOR_IS_TIMED_OUT_ATTRIBUTE, monitorWaitedData->isTimedOut); >+ > if (m_pOptions->isStackInfoNormal()) { > AppendElementEnd2(&elb); > AppendAnnotations(&elb, stackTrace); >@@ -680,6 +682,60 @@ > jvmtiAgent_print(&elb); > } > >+/** Print Thread interaction elements ************************************************ >+ * >+ * Print all element originated by ThreadInteraction to the trace >+ * TODO: clarify sintaxis of the element >+ */ >+void >+CPrintXML::printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace) >+{ >+ CElementBuffer elb; >+ >+ static const char * const strThreadInteractionElements[] = { >+ NULL, >+ MONITOR_CALL_NOTIFY_ELEMENT, // CALL_ID_NOTIFY_ALL >+ MONITOR_CALL_NOTIFY_ELEMENT, // CALL_ID_NOTIFY >+ THREAD_CALL_INTERRUPT_ELEMENT, // CALL_ID_INTERRUPT >+ THREAD_CALL_START_ELEMENT // CALL_ID_START >+ }; >+ static const int strThreadInteractionElementsLen[] = { >+ 0, >+ STRLEN_MONITOR_CALL_NOTIFY_ELEMENT, // CALL_ID_NOTIFY_ALL >+ STRLEN_MONITOR_CALL_NOTIFY_ELEMENT, // CALL_ID_NOTIFY >+ STRLEN_THREAD_CALL_INTERRUPT_ELEMENT, // CALL_ID_INTERRUPT >+ STRLEN_THREAD_CALL_START_ELEMENT // CALL_ID_START >+ }; >+ >+ >+ const char* const elementName = strThreadInteractionElements[threadInteractionData->interactionType]; >+ const int elementNameLen = strThreadInteractionElementsLen[threadInteractionData->interactionType]; >+ >+ AppendEmptyEventHeader(&elb, threadInteractionData->threadId, elementName, elementNameLen); >+ if(m_pOptions->m_jvmtiAgent_Options.timestamp) { >+ AppendCurrentTimeStamp(&elb); >+ } >+ >+ AppendInteger64Attribute(&elb, STATIC_OBJ_IDREF_ATTRIBUTE, STRLEN_STATIC_OBJ_IDREF_ATTRIBUTE, threadInteractionData->objectId); >+ >+ if (threadInteractionData->interactionType == IT_NOTIFY_ALL) { >+ AppendIntegerAttribute(&elb, MONITOR_IS_NOTIFYALL_ATTRIBUTE, STRLEN_MONITOR_IS_NOTIFYALL_ATTRIBUTE, 1); >+ } >+ if (threadInteractionData->interactionType == IT_NOTIFY) { >+ AppendIntegerAttribute(&elb, MONITOR_IS_NOTIFYALL_ATTRIBUTE, STRLEN_MONITOR_IS_NOTIFYALL_ATTRIBUTE, 0); >+ } >+ //AppendTraceIdRefAttribute(&elb); >+ >+ if (m_pOptions->isStackInfoNormal()) { >+ AppendElementEnd2(&elb); >+ AppendAnnotations(&elb, stackTrace); >+ AppendClosingTag(&elb, elementName, elementNameLen); >+ } else { >+ AppendElementEnd(&elb, 0, 0); >+ } >+ jvmtiAgent_print(&elb); >+} >+ > void > CPrintXML::printCustomElement(const char *str) > { >Index: src-native/src/JPIAgent/strings.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/strings.h,v >retrieving revision 1.10 >diff -u -r1.10 strings.h >--- src-native/src/JPIAgent/strings.h 23 Mar 2007 14:04:44 -0000 1.10 >+++ src-native/src/JPIAgent/strings.h 26 Feb 2008 16:50:28 -0000 >@@ -113,6 +113,12 @@ > #define STRLEN_MONITOR_CONTENDED_ENTER_ELEMENT 17 > #define MONITOR_CONTENDED_ENTERED_ELEMENT "monContendedEntered" > #define STRLEN_MONITOR_CONTENDED_ENTERED_ELEMENT 19 >+#define MONITOR_CALL_NOTIFY_ELEMENT "monCallNotify" >+#define STRLEN_MONITOR_CALL_NOTIFY_ELEMENT 13 >+#define THREAD_CALL_INTERRUPT_ELEMENT "thrCallInterrupt" >+#define STRLEN_THREAD_CALL_INTERRUPT_ELEMENT 16 >+#define THREAD_CALL_START_ELEMENT "thrCallStart" >+#define STRLEN_THREAD_CALL_START_ELEMENT 12 > > // Aggregated CG > #define AG_METHOD_ENTRY_ELEMENT "agMethodEntry" >@@ -358,6 +364,14 @@ > #define ALLOC_LINE_NUMBER_ATTRIBUTE "aLineNr" > #define STRLEN_ALLOC_LINE_NUMBER_ATTRIBUTE 7 > >+#define MONITOR_IS_NOTIFYALL_ATTRIBUTE "isNotifyAll" >+#define STRLEN_MONITOR_IS_NOTIFYALL_ATTRIBUTE 11 >+ >+#define MONITOR_IS_TIMED_OUT_ATTRIBUTE "isTimedOut" >+#define STRLEN_MONITOR_IS_TIMED_OUT_ATTRIBUTE 10 >+ >+ >+ > /* XML Attribute Values */ > #define CLASS_VALUE "CLASS" > #define METHOD_VALUE "METHOD" >Index: src-native/src/JPIAgent/PrintXML.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/PrintXML.h,v >retrieving revision 1.16 >diff -u -r1.16 PrintXML.h >--- src-native/src/JPIAgent/PrintXML.h 4 May 2007 13:00:20 -0000 1.16 >+++ src-native/src/JPIAgent/PrintXML.h 26 Feb 2008 16:50:28 -0000 >@@ -64,6 +64,7 @@ > void printMonitorWaitedElement(SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace); > void printMonitorContendedEnterElement(SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace); > void printMonitorContendedEnteredElement(SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace); >+ void printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace); > > void printCustomElement(const char *str); > >Index: src-native/src/JPIAgent/Options.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/JPIAgent/Options.h,v >retrieving revision 1.17 >diff -u -r1.17 Options.h >--- src-native/src/JPIAgent/Options.h 7 Feb 2008 14:47:29 -0000 1.17 >+++ src-native/src/JPIAgent/Options.h 26 Feb 2008 16:50:28 -0000 >@@ -47,6 +47,7 @@ > unsigned int cgExecDetails:1; /* Call graph profiler specific option. Is sggregated? (FALSE) */ > unsigned int cgAggStackMemoryFree:1; /* Call graph profiler specific option. Memory free after flush (TRUE)*/ > unsigned int allocSites:1; /* Print allocsites information*/ >+ unsigned int contAnalysis:1; /* Provide information for contention analysis*/ > enum StackInfo stackInfo; /* Stack maintenance mode (StackInfoContiguous)*/ > char *invocationOptions; /* The invocation options from the command line */ > char *filterFileName; /* Name of the filters file (filters.txt)*/ >@@ -147,7 +148,12 @@ > bool isAllocSitesSupported() { > return m_jvmtiAgent_Options.allocSites == 1; > } >+ >+ bool isContentionAnalysisSupported() { >+ return m_jvmtiAgent_Options.contAnalysis == 1; >+ } > >+ > const char* getUnknownOptionByName( const char* name ); > > private: >Index: src-native/include/Martini/MpiAPI.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/include/Martini/MpiAPI.h,v >retrieving revision 1.20 >diff -u -r1.20 MpiAPI.h >--- src-native/include/Martini/MpiAPI.h 27 Nov 2007 14:05:43 -0000 1.20 >+++ src-native/include/Martini/MpiAPI.h 26 Feb 2008 16:50:27 -0000 >@@ -90,21 +90,24 @@ > */ > enum EEventGroup > { >- EG_NONE, //!< @brief No group >+ EG_NONE, //!< @brief No group > >- EG_CALL_GRAPH, //!< @brief Call Graph events: >- //! EV_METHOD_ENTER, >- //! EV_METHOD_LEAVE >- >- EG_HEAP, //!< @brief Heap events: >- //! EV_OBJECT_ALLOC, >- //! EV_OBJECT_FREE >- >- EG_MONITOR, //!< @brief Monitor events: >- //! EV_MONITOR_WAIT, >- //! EV_MONITOR_WAITED, >- //! EV_CONTENDED_MONITOR_ENTER, >- //! EV_CONTENDED_MONITOR_ENTERED >+ EG_CALL_GRAPH, //!< @brief Call Graph events: >+ //! EV_METHOD_ENTER, >+ //! EV_METHOD_LEAVE >+ >+ EG_HEAP, //!< @brief Heap events: >+ //! EV_OBJECT_ALLOC, >+ //! EV_OBJECT_FREE >+ >+ EG_MONITOR, //!< @brief Monitor events: >+ //! EV_MONITOR_WAIT, >+ //! EV_MONITOR_WAITED, >+ //! EV_CONTENDED_MONITOR_ENTER, >+ //! EV_CONTENDED_MONITOR_ENTERED >+ >+ EG_THREAD_INTERACTION, //!< @brief Thread interaction event: >+ //! EV_THREAD_INTERACTION > > EG_LAST //! End sentinel > }; >@@ -652,6 +655,14 @@ > //! @brief Monitor timeout for "wait" operations, in milliseconds > const TDataRequestType DR_MONITOR_TIMEOUT = 0x00040000; > >+ //! @brief Monitor boolean exit status for "wait" operations, >+ //! true - timeout expired >+ //! false - notified or interrupted >+ const TDataRequestType DR_MONITOR_TIMED_OUT = 0x00800000; >+ >+ //! @brief Type of interaction between threads, >+ const TDataRequestType DR_THREAD_INTERACTION_TYPE = 0x01000000; >+ > //! @brief List of threads waiting to own the monitor > const TDataRequestType DR_MONITOR_OWN_WAITERS = 0x00080000; > >@@ -1169,6 +1180,7 @@ > { > TId threadId; //!< Id of the waiting thread > TId objectId; //!< Id of the monitor object >+ bool isTimedOut; //!< Wait exit status, true if timed out > BitSet validData; //!< Bit-mask of the valid data in the struct > }; > >@@ -1188,7 +1200,10 @@ > public: > virtual TEventType Type() { return EV_MONITOR_WAITED; } > >- virtual BitSet EventDataTypes() { return DR_THREAD_ID | DR_OBJECT_ID; } >+ virtual BitSet EventDataTypes() >+ { >+ return DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMED_OUT; >+ } > > /** > * @brief Event Handler >@@ -1289,6 +1304,72 @@ > virtual void HandleEvent(SContendedMonitorEnteredEventData &data) = 0; > }; > >+ >+ >+ >+ >+ >+ /** >+ * @brief method id constants >+ */ >+ enum EThreadInteractionType >+ { >+ IT_NOTIFY_ALL = 1, >+ IT_NOTIFY = 2, >+ IT_INTERRUPT = 3, >+ IT_START = 4, >+ }; >+ >+ >+ /** >+ * @brief Defines Thread Interactions Event data >+ * >+ * Defines Thread Interaction event data for the >+ * IThreadInteractionEvent::HandleEvent callback function. >+ */ >+ struct SThreadInteractionEventData >+ { >+ TId threadId; //!< Id of the thread calling one of notify methods >+ TId objectId; //!< Id of the object for which method is called >+ EThreadInteractionType interactionType; //!< alled method ID >+ BitSet validData; //!< Bit-mask of the valid data in the struct >+ }; >+ >+ /** >+ * @interface IThreadInteractionEventObserver >+ * @brief Observer interface for receiving Call CA Method events. >+ * >+ * The Thread Interaction event is sent when a thread about to call one of the methods >+ * important for contention analysis (notify, notifyAll, interrupt, start) >+ * >+ * The event is currently supported only in Java 5.0 and later. >+ * >+ * The data items supported by this event are specified by the default implementation of >+ * the EventDataTypes method >+ */ >+ class IThreadInteractionEventObserver : public IEventObserver >+ { >+ public: >+ virtual TEventType Type() { return EV_THREAD_INTERACTION; } >+ >+ virtual BitSet EventDataTypes() >+ { >+ return DR_THREAD_ID | DR_OBJECT_ID | DR_THREAD_INTERACTION_TYPE; >+ } >+ >+ /** >+ * @brief Event Handler >+ * >+ * Call CA method event handler >+ * >+ * @param[in] data event data. >+ */ >+ virtual void HandleEvent(SThreadInteractionEventData &data) = 0; >+ }; >+ >+ >+ >+ > ////////////////////////////////////////////////////////////////////////// > // Heap Events and Data > ////////////////////////////////////////////////////////////////////////// >@@ -2083,6 +2164,62 @@ > virtual bool ShouldNotify(SHeapFilterData &objectInfo) = 0; > }; > >+ >+ ////////////////////////////////////////////////////////////////////////// >+ // Thread Events Filter >+ ////////////////////////////////////////////////////////////////////////// >+ >+ /** >+ * @brief Defines data for the Thread events filter. >+ * >+ * Defines data for the Thread events filter. >+ */ >+ struct SThreadInteractionFilterData >+ { >+ const char *szClassName; //!< Fully qualified class name >+ const char *szMethodName; //!< Method name >+ }; >+ >+ /** >+ * @interface IThreadInteractionFilter >+ * @brief Event Filter interface for defining selectivity for Thread events >+ * >+ * Event Filter interface for defining selectivity for the following >+ * events: Thread interactions >+ * >+ * To implement selectivity, the client defines a filter class which implements this >+ * interface, and then registers an instance of this class with MPI using the >+ * IMpi::SetEventGroupFilter method. >+ * >+ * The MPI implementation will call the ShouldNotify method of the filter class for each >+ * new class it encounters, in order to determine whether to generate (add BCI) Thread events >+ * for this class. >+ * >+ * @remark - currently it isn't implemented properly >+ */ >+ class IThreadInteractionFilter : public IEventFilter >+ { >+ public: >+ virtual EFilterType Type() { return FT_THREAD_INTERACTION; } >+ >+ /** >+ * @brief Invoked to determine event selectivity for a class >+ * >+ * This method is implemented by the filter class and called by the MPI implementation >+ * to determine whether to report (add BCI for event generation) thread events for a class >+ * >+ * @param[in] objectInfo class information >+ * >+ * @retval true an implementation returns true to indicate that events >+ * should be reported for this class >+ * >+ * @retval false an implementation returns false to indicate that events >+ * should not be reported for this class >+ * >+ */ >+ virtual bool ShouldNotify(SThreadInteractionFilterData &objectInfo) = 0; >+ }; >+ > ////////////////////////////////////////////////////////////////////////// > // Data Request Structure Definitions > ////////////////////////////////////////////////////////////////////////// >@@ -2438,9 +2575,10 @@ > * to each event group: > * > * <table> >- * <tr><td> <b>Event Group</b> </td> <td> <b>Supported Filter Types</b> </td></tr> >- * <tr><td> EG_CALLGRAPH </td> <td> ICallGraphFilter </td></tr> >- * <tr><td> EG_HEAP </td> <td> IHeapFilter </td></tr> >+ * <tr><td> <b>Event Group</b> </td> <td> <b>Supported Filter Types</b> </td></tr> >+ * <tr><td> EG_CALLGRAPH </td> <td> ICallGraphFilter </td></tr> >+ * <tr><td> EG_HEAP </td> <td> IHeapFilter </td></tr> >+ * <tr><td> EG_THREAD_INTERACTION</td> <td> IThreadInteractionFilter </td></tr> > * </table> > * > * @param[in] clientId The id of the client setting the filter >@@ -2462,6 +2600,7 @@ > * > * @see ICallGraphFilter > * @see IHeapFilter >+ * @see IThreadInteractionFilter > **/ > virtual TResult SetEventGroupFilter(TId clientId, > EEventGroup group, >@@ -2487,6 +2626,7 @@ > * - EEventGroup::EG_CALLGRAPH > * - EEventGroup::EG_HEAP > * - EEventGroup::EG_MONITOR >+ * - EEventGroup::EG_THREAD_INTERACTION > * > * @param[in] clientId The id of the client enabling the event group > * @param[in] group The event group to enable >@@ -2533,6 +2673,7 @@ > * - EEventGroup::EG_CALLGRAPH > * - EEventGroup::EG_HEAP > * - EEventGroup::EG_MONITOR >+ * - EEventGroup::EG_THREAD_INTERACTION > * > * @param[in] clientId The id of the client disabling the event group > * @param[in] group The event group to disable >Index: src-native/include/Martini/MpiBase.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/include/Martini/MpiBase.h,v >retrieving revision 1.7 >diff -u -r1.7 MpiBase.h >--- src-native/include/Martini/MpiBase.h 4 Apr 2007 06:19:32 -0000 1.7 >+++ src-native/include/Martini/MpiBase.h 26 Feb 2008 16:50:27 -0000 >@@ -133,6 +133,7 @@ > * - EG_HEAP: Object Alloc and Object Free > * - EG_MONITOR: Monitor Wait, Monitor Waited, Contended Monitor Enter and > * Contended Monitor Entered >+ * - EG_THREAD_INTERACTION: Thread notification, interuption and spawning > * > * To apply a filter to an MPI event group, the MPI client must define an Event Filter class > * for the specific event group it wants to restrict, and then register an instance of this >@@ -367,7 +368,8 @@ > const TEventType EV_CONTENDED_MONITOR_ENTER = 27; > const TEventType EV_CONTENDED_MONITOR_ENTERED = 28; > const TEventType EV_JAVA_CLASS_FILE_LOAD_HOOK = 29; >- const TEventType EV_LAST = 30; >+ const TEventType EV_THREAD_INTERACTION = 30; >+ const TEventType EV_LAST = 31; > //@} > > /** >@@ -393,8 +395,9 @@ > */ > enum EFilterType > { >- FT_CALLGRAPH, //!< Call-graph filter >- FT_HEAP //!< Heap filters >+ FT_CALLGRAPH, //!< Call-graph filter >+ FT_HEAP, //!< Heap filters >+ FT_THREAD_INTERACTION //!< Thread filters > }; > > /** >Index: src-native/src/Martini/Infrastructure/common/ParamChecker.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/common/ParamChecker.cpp,v >retrieving revision 1.10 >diff -u -r1.10 ParamChecker.cpp >--- src-native/src/Martini/Infrastructure/common/ParamChecker.cpp 20 Nov 2007 09:12:19 -0000 1.10 >+++ src-native/src/Martini/Infrastructure/common/ParamChecker.cpp 26 Feb 2008 16:50:30 -0000 >@@ -364,11 +364,12 @@ > m_EventDataItems[EV_OBJECT_FREE] = DR_THREAD_ID | DR_OBJECT_ID | DR_OBJECT_INFO | > DR_OBJECT_AGE; > m_EventDataItems[EV_EC_CUSTOM_COMMAND] = DR_COMMAND_ID | DR_COMMAND_DATA; >- m_EventDataItems[EV_MONITOR_WAIT] = DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMEOUT;; >- m_EventDataItems[EV_MONITOR_WAITED] = DR_THREAD_ID | DR_OBJECT_ID;; >+ m_EventDataItems[EV_MONITOR_WAIT] = DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMEOUT; >+ m_EventDataItems[EV_MONITOR_WAITED] = DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMED_OUT; > m_EventDataItems[EV_CONTENDED_MONITOR_ENTER] = DR_THREAD_ID | DR_OBJECT_ID | > DR_MONITOR_OWNER_THREAD_ID; >- m_EventDataItems[EV_CONTENDED_MONITOR_ENTERED] = DR_THREAD_ID | DR_OBJECT_ID;; >+ m_EventDataItems[EV_CONTENDED_MONITOR_ENTERED] = DR_THREAD_ID | DR_OBJECT_ID; >+ m_EventDataItems[EV_THREAD_INTERACTION] = DR_THREAD_ID | DR_OBJECT_ID | DR_THREAD_INTERACTION_TYPE; > m_EventDataItems[EV_JAVA_DYNAMIC_CODE_GENERATED] = DR_JAVA_DYNAMIC_CODE; > m_EventDataItems[EV_GC_MOVED_REFERENCES] = DR_DOTNET_GC_MOVED_REF_INFO; > m_EventDataItems[EV_GC_END] = DR_NONE; >Index: src-native/src/Martini/Infrastructure/CGAdaptor/Makefile.dep >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/CGAdaptor/Makefile.dep,v >retrieving revision 1.6 >diff -u -r1.6 Makefile.dep >--- src-native/src/Martini/Infrastructure/CGAdaptor/Makefile.dep 19 Feb 2007 09:22:54 -0000 1.6 >+++ src-native/src/Martini/Infrastructure/CGAdaptor/Makefile.dep 26 Feb 2008 16:50:28 -0000 >@@ -11,8 +11,9 @@ > ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \ > ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \ > ../../Include/MString.h ../Include/IdAllocator.h \ >- ../Include/WideStringUtils.h ../Include/CGProxy.h \ >- ../Include/HeapProxy.h ../Include/ValidityChecks.h >+ ../Include/WideStringUtils.h \ >+ ../Include/HeapProxy.h ../Include/CGProxy.h ../Include/ThreadProxy.h \ >+ ../Include/ValidityChecks.h > $(CPP_COMPILE) > > $(OBJDIR)/IdAllocator.o: ../common/IdAllocator.cpp ../Include/IdAllocator.h \ >Index: src-native/src/Martini/Infrastructure/CGAdaptor/CGAdaptor.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/CGAdaptor/CGAdaptor.cpp,v >retrieving revision 1.11 >diff -u -r1.11 CGAdaptor.cpp >--- src-native/src/Martini/Infrastructure/CGAdaptor/CGAdaptor.cpp 27 Jan 2008 20:56:54 -0000 1.11 >+++ src-native/src/Martini/Infrastructure/CGAdaptor/CGAdaptor.cpp 26 Feb 2008 16:50:28 -0000 >@@ -15,6 +15,7 @@ > #include "WideStringUtils.h" > #include "CGProxy.h" > #include "HeapProxy.h" >+#include "ThreadProxy.h" > #include "ValidityChecks.h" > > #include <assert.h> >@@ -407,6 +408,7 @@ > { > CGADAPTOR_CALLBACK_CLASS_NAME, > HEAPADAPTOR_CALLBACK_CLASS_NAME, >+ THREADADAPTOR_CALLBACK_CLASS_NAME, > "java/lang/Object", > "sun/reflect/Generated", > "jrockit/", //TODO: check why >Index: src-native/src/Martini/Infrastructure/HeapAdaptor/HeapAdaptor.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/HeapAdaptor/HeapAdaptor.cpp,v >retrieving revision 1.11 >diff -u -r1.11 HeapAdaptor.cpp >--- src-native/src/Martini/Infrastructure/HeapAdaptor/HeapAdaptor.cpp 7 Feb 2008 15:04:26 -0000 1.11 >+++ src-native/src/Martini/Infrastructure/HeapAdaptor/HeapAdaptor.cpp 26 Feb 2008 16:50:28 -0000 >@@ -15,6 +15,7 @@ > #include "WideStringUtils.h" > #include "HeapProxy.h" > #include "CGProxy.h" >+#include "ThreadProxy.h" > #include "ValidityChecks.h" > > #include <assert.h> >@@ -436,6 +437,7 @@ > { > CGADAPTOR_CALLBACK_CLASS_NAME, // CGAdaptor recorder class > HEAPADAPTOR_CALLBACK_CLASS_NAME, // HeapAdaptor recorder class >+ THREADADAPTOR_CALLBACK_CLASS_NAME, // ThreadAdaptor recorder class > "jrockit/", // Internal JRockit classes. > // Can't force-load some of them > // during attach/detach >Index: src-native/src/Martini/Infrastructure/HeapAdaptor/Makefile.dep >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/HeapAdaptor/Makefile.dep,v >retrieving revision 1.4 >diff -u -r1.4 Makefile.dep >--- src-native/src/Martini/Infrastructure/HeapAdaptor/Makefile.dep 19 Feb 2007 09:22:54 -0000 1.4 >+++ src-native/src/Martini/Infrastructure/HeapAdaptor/Makefile.dep 26 Feb 2008 16:50:28 -0000 >@@ -11,8 +11,9 @@ > ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \ > ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \ > ../../Include/MString.h ../Include/IdAllocator.h \ >- ../Include/WideStringUtils.h ../Include/HeapProxy.h \ >- ../Include/CGProxy.h ../Include/ValidityChecks.h >+ ../Include/WideStringUtils.h \ >+ ../Include/HeapProxy.h ../Include/CGProxy.h ../Include/ThreadProxy.h \ >+ ../Include/ValidityChecks.h > $(CPP_COMPILE) > > $(OBJDIR)/IdAllocator.o: ../common/IdAllocator.cpp ../Include/IdAllocator.h \ >Index: src-native/src/HeapProf/HeapProfiler.cpp >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/HeapProf/HeapProfiler.cpp,v >retrieving revision 1.8 >diff -u -r1.8 HeapProfiler.cpp >--- src-native/src/HeapProf/HeapProfiler.cpp 6 Jun 2007 19:01:43 -0000 1.8 >+++ src-native/src/HeapProf/HeapProfiler.cpp 26 Feb 2008 16:50:27 -0000 >@@ -37,7 +37,7 @@ > { > m_profilerName = "Heap profiler"; > m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.heap"; // fixed for 190684 >- m_pProfEnv.m_implementedEG = EG_HEAP; >+ m_pProfEnv.AddSupportedEG(EG_HEAP); > } > > CHeapProfiler::~CHeapProfiler() >Index: src-native/include/JPIAgent/EC_Env.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/include/JPIAgent/EC_Env.h,v >retrieving revision 1.21 >diff -u -r1.21 EC_Env.h >--- src-native/include/JPIAgent/EC_Env.h 24 Aug 2007 17:29:24 -0000 1.21 >+++ src-native/include/JPIAgent/EC_Env.h 26 Feb 2008 16:50:24 -0000 >@@ -81,6 +81,7 @@ > EC_ENV_Error (ECCALL *PrintMonitorWaitedElement)(EC_Env* env, SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace); > EC_ENV_Error (ECCALL *PrintMonitorContendedEnterElement)(EC_Env* env, SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace); > EC_ENV_Error (ECCALL *PrintMonitorContendedEnteredElement)(EC_Env* env, SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace); >+ EC_ENV_Error (ECCALL *printThreadInteractionElements)(EC_Env* env, SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace); > > EC_ENV_Error (ECCALL *PrintCustomElement)(EC_Env* env, const char *str); > >@@ -94,6 +95,8 @@ > bool (ECCALL *isControlled)(EC_Env* env); > bool (ECCALL *isEnabled)(EC_Env* env); > bool (ECCALL *isAllocSitesSupported)(EC_Env* env); >+ bool (ECCALL *isContentionAnalysisSupported)(EC_Env* env); >+ > const char*(ECCALL *getUnknownOptionByName)(EC_Env* env, const char* name); > > void (ECCALL *VMInitDone)(EC_Env* env); >@@ -186,6 +189,11 @@ > return functions->PrintMonitorContendedEnteredElement(this, conMonEnteredData, stackTrace); > } > >+ EC_ENV_Error printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace) { >+ return functions->printThreadInteractionElements(this, threadInteractionData, stackTrace); >+ } >+ >+ > EC_ENV_Error PrintCustomElement(const char *str) { > return functions->PrintCustomElement(this, str); > } >@@ -229,7 +237,11 @@ > bool isAllocSitesSupported() { > return functions->isAllocSitesSupported(this); > } >- >+ >+ bool isContentionAnalysisSupported() { >+ return functions->isContentionAnalysisSupported(this); >+ } >+ > const char* getUnknownOptionByName( const char* name ) { > return functions->getUnknownOptionByName(this, name); > } >Index: src-native/src/Martini/Infrastructure/Include/MRTEInfrastructureDefinitions.h >=================================================================== >RCS file: /cvsroot/tptp/platform/org.eclipse.tptp.platform.jvmti.runtime/src-native/src/Martini/Infrastructure/Include/MRTEInfrastructureDefinitions.h,v >retrieving revision 1.13 >diff -u -r1.13 MRTEInfrastructureDefinitions.h >--- src-native/src/Martini/Infrastructure/Include/MRTEInfrastructureDefinitions.h 17 Apr 2007 09:15:26 -0000 1.13 >+++ src-native/src/Martini/Infrastructure/Include/MRTEInfrastructureDefinitions.h 26 Feb 2008 16:50:28 -0000 >@@ -176,6 +176,8 @@ > #define DR_CONTAINS_METHOD_METADATA_ID(mask) \ > (((mask) & DR_DOTNET_METHOD_TOKEN) == DR_DOTNET_METHOD_TOKEN) > #define DR_CONTAINS_MONITOR_TIMEOUT(mask) (((mask) & DR_MONITOR_TIMEOUT) == DR_MONITOR_TIMEOUT) >+#define DR_CONTAINS_MONITOR_TIMED_OUT(mask) (((mask) & DR_MONITOR_TIMED_OUT) == DR_MONITOR_TIMED_OUT) >+#define DR_CONTAINS_THREAD_INTERACTION_TYPE(mask) (((mask) & DR_THREAD_INTERACTION_TYPE) == DR_THREAD_INTERACTION_TYPE) > #define DR_CONTAINS_MONITOR_OWNER_THREAD_ID(mask) (((mask) & DR_MONITOR_OWNER_THREAD_ID) == DR_MONITOR_OWNER_THREAD_ID) > #define DR_HAS_THREAD_DATA(mask) \ > ( ((mask) & DR_THREAD_ID) || ((mask) & DR_THREAD_ELAPSED_TIME) || ((mask) & DR_THREAD_CPU_TIME)\ >Index: src-native/src/Martini/Infrastructure/Include/ThreadProxy.h >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/Include/ThreadProxy.h >diff -N src-native/src/Martini/Infrastructure/Include/ThreadProxy.h >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/Include/ThreadProxy.h 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,33 @@ >+/***************************************************************************** >+ * Copyright (c) 1997-2008, Intel Corporation. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Intel Corporation - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+#ifndef _MRTE_THREADPROXY_H >+#define _MRTE_THREADPROXY_H >+ >+#define THREADADAPTOR_CALLBACK_CLASS_NAME "org/eclipse/tptp/martini/ThreadProxy" >+#define THREADADAPTOR_CALLBACK_CLASS_NAME_WITH_DOT_SEPERATOR "org.eclipse.tptp.martini.ThreadProxy" >+ >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_NAME "earlyCallNotify" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_SIG "(Ljava/lang/Object;)V" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_NAME "earlyCallNotifyAll" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_SIG "(Ljava/lang/Object;)V" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_NAME "earlyCallInterrupt" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_SIG "(Ljava/lang/Object;)V" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_START_NAME "earlyCallStart" >+#define THREADADAPTOR_CALLBACK_EARLY_CALL_START_SIG "(Ljava/lang/Object;)V" >+ >+#define THREADADAPTOR_NUM_EVENT_HANDLERS 1 >+#define THREADADAPTOR_CALLBACK_CALL_TI_NAME "callThreadInteraction" >+#define THREADADAPTOR_CALLBACK_CALL_TI_SIG "(Ljava/lang/Object;I)V" >+ >+#endif // _MRTE_THREADPROXY_H >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,32 @@ >+ROOTDIR = ../../../.. >+ >+include $(ROOTDIR)/src/makefile.inc >+INCLUDES = -I ../Include \ >+ -I ../../Include \ >+ -I ../../../../include/Martini \ >+ -I $(ROOTDIR)/src/Lin/unix >+ >+OBJS = $(OBJDIR)/ThreadAdaptor.o \ >+ $(OBJDIR)/InstrumentationAdaptorBase.o \ >+ $(OBJDIR)/WideStringUtils.o \ >+ >+ >+LIB = libThreadAdaptor.so >+ >+VER_FILE = ThreadAdaptor.ver >+ >+all: release >+ >+release: $(OBJDIR) $(OUTDIR)/$(LIB) >+ >+$(OBJDIR): >+ mkdir -p $(OBJDIR) ; mkdir -p $(OUTDIR) >+ >+clean: >+ rm -rf $(OBJS) $(OUTDIR)/$(LIB) >+ >+include ./Makefile.dep >+ >+$(OUTDIR)/$(LIB): $(OBJS) >+ $(CPP_LINK) $(OBJS) -o $@ -L../../../../bin/linux/release/IA-32 -L$(OUTDIR) -lMartiniOSA \ >+ $(OUTDIR)/LibraryLoader.a -lpthread -ldl $(STD_LIBS) $(VER_SCR) >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.class >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.class >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.class >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.class 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,24 @@ >+Êþº¾ 1 = >+ >+ * + , >+ - . >+ / 0 1 0 2 3 4 >+TI_NOTIFY_ALL I >+ConstantValue TI_NOTIFY TI_INTERRUPT TI_START >+m_bJVMInit m_bEventsEnabled <init> ()V Code LineNumberTable IsJVMInit ()I JVMInit SetEventsStatus (I)V earlyCallNotify (Ljava/lang/Object;)V earlyCallNotifyAll earlyCallInterrupt earlyCallStart callThreadInteraction (Ljava/lang/Object;I)V <clinit> >+SourceFile ThreadProxy.java % & java/lang/Thread 5 8 9 : ; < ; $org/eclipse/tptp/martini/ThreadProxy java/lang/Object getState State InnerClasses ()Ljava/lang/Thread$State; java/lang/Thread$State >+TIMED_WAITING Ljava/lang/Thread$State; WAITING ! >+ >+ >+ >+ >+ >+ >+ >+ *· ± ² ¬ ! ³ ± >+ # $ ! ³ ± >+ ( ) ! - >+² *¸ ± / 0 2 " ! - >+² *¸ ± 5 6 8 # ! V .² )*Á "*À ¶ ² ¥ *À ¶ ² ¦ *¸ ± < = > ( @ - D $ ! 8 ² *Á *¸ ± I J K N % & ' % ³ ³ ± >+ ( ) 7 >+ 0 6@ >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile.dep >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile.dep >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile.dep >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile.dep 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,45 @@ >+$(OBJDIR)/HeapAdaptor.o: ./HeapAdaptor.cpp ../Include/HeapAdaptor.h \ >+ ../Include/InstrumentationAdaptorBase.h \ >+ ../Include/InstrumentationAdaptor.h ../../../../include/Martini/OSA.h \ >+ ../../../../include/Martini/MRTEResults.h \ >+ ../../../../include/Martini/MRTETypes.h \ >+ ../../../../include/Martini/MpiAPI.h \ >+ ../../../../include/Martini/MieAPI.h \ >+ ../../../../include/Martini/MIterator.h \ >+ ../../../../include/Martini/PsuedoMnemonics \ >+ ../../../../include/Martini/MieSpecialMnemonics \ >+ ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \ >+ ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \ >+ ../../Include/MString.h \ >+ ../Include/WideStringUtils.h \ >+ ../Include/HeapProxy.h ../Include/CGProxy.h ../Include/ThreadProxy.h \ >+ ../Include/ValidityChecks.h >+ $(CPP_COMPILE) >+ >+$(OBJDIR)/InstrumentationAdaptorBase.o: ../common/InstrumentationAdaptorBase.cpp \ >+ ../Include/InstrumentationAdaptorBase.h \ >+ ../Include/InstrumentationAdaptor.h ../../../../include/Martini/OSA.h \ >+ ../../../../include/Martini/MRTEResults.h \ >+ ../../../../include/Martini/MRTETypes.h \ >+ ../../../../include/Martini/MpiAPI.h \ >+ ../../../../include/Martini/MieAPI.h \ >+ ../../../../include/Martini/MIterator.h \ >+ ../../../../include/Martini/PsuedoMnemonics \ >+ ../../../../include/Martini/MieSpecialMnemonics \ >+ ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \ >+ ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \ >+ ../../Include/MString.h ../Include/IdAllocator.h \ >+ ../../Include/LibraryLoader.h ../Include/WideStringUtils.h \ >+ ../Include/MRTEInfrastructureDefinitions.h ../Include/ValidityChecks.h >+ $(CPP_COMPILE) >+ >+$(OBJDIR)/WideStringUtils.o: ../common/WideStringUtils.cpp \ >+ ../Include/WideStringUtils.h ../../../../include/Martini/MieAPI.h \ >+ ../../../../include/Martini/MRTEResults.h \ >+ ../../../../include/Martini/MRTETypes.h \ >+ ../../../../include/Martini/MIterator.h \ >+ ../../../../include/Martini/PsuedoMnemonics \ >+ ../../../../include/Martini/MieSpecialMnemonics >+ $(CPP_COMPILE) >+ >+ >Index: src-native/src/Martini/Infrastructure/Include/ThreadAdaptor.h >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/Include/ThreadAdaptor.h >diff -N src-native/src/Martini/Infrastructure/Include/ThreadAdaptor.h >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/Include/ThreadAdaptor.h 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,138 @@ >+/***************************************************************************** >+ * Copyright (c) 1997-2008, Intel Corporation. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Intel Corporation - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+// >+#ifndef MRTE_THREADADAPTORIMPL >+#define MRTE_THREADADAPTORIMPL >+ >+#include "InstrumentationAdaptorBase.h" >+#include "MVector.h" >+#include "MHash.h" >+#include "MString.h" >+#include "IdAllocator.h" >+ >+#ifdef THREADADAPTOR_EXPORTS >+#define THREADADAPTOR_API API_EXPORT >+#else >+#define THREADADAPTOR_API API_IMPORT >+#endif >+ >+#define THREADADAPTOR_DLL_NAME "ThreadAdaptor" >+ >+namespace Martini { namespace ThreadAdaptor { >+ >+ /** >+ * @brief Function prototype for the callThreadInteraction native method of the Thread Proxy Java >+ * class >+ * >+ * This is a prototype for a function that provides an implementation of the >+ * CallNotify native method of ThreadProxy.java. >+ */ >+ typedef void (JNICALL *TThreadInteractionHandler)(JNIEnv *env, jclass self, >+ jobject obj, jint methodID); >+ >+ >+ struct SHookMethodCall { >+ const char *methodName; >+ JIE::TConstantPoolIndex cpCallback; >+ }; >+ >+ /** >+ * @brief ThreadAdaptor class >+ */ >+ class CThreadAdaptor : public Infrastructure::CInstrumentationAdaptorBase >+ { >+ public: >+ CThreadAdaptor(); >+ ~CThreadAdaptor(); >+ >+ // IInstrumentationAdaptor methods >+ >+ virtual TResult Init(Infrastructure::ILogAssert *pLogger = NULL, >+ MPI::IEventFilter *pFilter = NULL); >+ >+ virtual TResult ModifyClass(MPI::TId classId, >+ const Infrastructure::SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ Infrastructure::SClassFile *pInstrumentedClass, >+ Infrastructure::IInstrumentationContext *pContext = NULL); >+ >+ virtual TResult ModifyByteCodes(MPI::TId classId, >+ const Infrastructure::SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ Infrastructure::SClassFile *pInstrumentedClass, >+ Infrastructure::IInstrumentationContext *pContext = NULL); >+ >+ private: >+ >+ MPI::IThreadInteractionFilter *m_pFilter; // Callback function for Thread-selectivity >+ >+ // Check if the class can be instrumented >+ TResult CanInstrumentClass(const Infrastructure::SAdaptorClassInfo &info); >+ >+ // Check if the method can be instrumented >+ bool CanInstrumentMethod(const JIE::SJavaMethodInfo &methodInfo); >+ >+ // Add Thread instrumentation to the specified class file >+ TResult DoThreadInstrumentation(JIE::IJavaClass *pJavaClass, >+ const Infrastructure::SAdaptorClassInfo &classInfo, >+ bool bJVMInitDone); >+ >+ bool IsProblematicMethod(const char *szClassName, const char *szMethodName); >+ >+ // Copies a class file buffer >+ TResult CopyClassFile(Infrastructure::SClassFile *pDest, >+ const Infrastructure::SClassFile& src, >+ TMemoryAllocatorFunc funcAllocator); >+ >+ >+ >+ TResult InstrumentMethodCalls(JIE::IJavaClass *pClass, >+ const Infrastructure::SAdaptorClassInfo &classInfo, >+ SHookMethodCall *hooks, size_t hooks_num); >+ >+ bool CheckFilter(const Infrastructure::SAdaptorClassInfo &classInfo, >+ const JIE::SJavaMethodInfo &methodInfo); >+ >+ >+ TResult AddInstrumentationToMethod(JIE::IJavaClass *pClass, >+ JIE::IJavaMethod *pMethod, >+ SHookMethodCall *hooks, size_t hooks_num); >+ >+ TResult AddNotifyProbeBeforeInstr(MIE::IInstruction *pInst, >+ JIE::TConstantPoolIndex cpCallback); >+ >+ // Instrumentations names >+ MIE::SWideString m_wzThreadProxyCallbackClassName; >+ MIE::SWideString m_wzNotifyCallbackName; >+ MIE::SWideString m_wzNotifyCallbackSig; >+ MIE::SWideString m_wzNotifyAllCallbackName; >+ MIE::SWideString m_wzNotifyAllCallbackSig; >+ MIE::SWideString m_wzInterruptCallbackName; >+ MIE::SWideString m_wzInterruptCallbackSig; >+ MIE::SWideString m_wzStartCallbackName; >+ MIE::SWideString m_wzStartCallbackSig; >+ >+ >+ }; // class CThreadAdaptor >+ >+ /** >+ * @brief An API for getting the Instrumentation Adaptor interface >+ * >+ * @return IInstrumentationAdaptor* A pointer to the adaptor's singleton interface >+ */ >+ extern "C" THREADADAPTOR_API >+ Infrastructure::IInstrumentationAdaptor *GetInstrumentationAdaptor(); >+ >+}} // namespace Martini::ThreadAdaptor >+ >+#endif // #define MRTE_THREADADAPTORIMPL >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.ver >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.ver >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.ver >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.ver 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,8 @@ >+{ >+ global: >+ GetInstrumentationAdaptor; >+ local: >+ *; >+}; >+ >+ >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dsp >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dsp >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dsp >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dsp 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,245 @@ >+# Microsoft Developer Studio Project File - Name="ThreadAdaptor" - Package Owner=<4> >+# Microsoft Developer Studio Generated Build File, Format Version 6.00 >+# ** DO NOT EDIT ** >+ >+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 >+ >+CFG=ThreadAdaptor - Win32 IPF Debug >+!MESSAGE This is not a valid makefile. To build this project using NMAKE, >+!MESSAGE use the Export Makefile command and run >+!MESSAGE >+!MESSAGE NMAKE /f "ThreadAdaptor.mak". >+!MESSAGE >+!MESSAGE You can specify a configuration when running NMAKE >+!MESSAGE by defining the macro CFG on the command line. For example: >+!MESSAGE >+!MESSAGE NMAKE /f "ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug" >+!MESSAGE >+!MESSAGE Possible choices for configuration are: >+!MESSAGE >+!MESSAGE "ThreadAdaptor - Win32 IA32 Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 IA32 Debug" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 EM64T Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 EM64T Debug" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 IPF Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 IPF Debug" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE >+ >+# Begin Project >+# PROP AllowPerConfigDependencies 0 >+# PROP Scc_ProjName "" >+# PROP Scc_LocalPath "" >+CPP=cl.exe >+MTL=midl.exe >+RSC=rc.exe >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+# PROP BASE Use_MFC 0 >+# PROP BASE Use_Debug_Libraries 0 >+# PROP BASE Output_Dir "IA32 Release" >+# PROP BASE Intermediate_Dir "IA32 Release" >+# PROP BASE Target_Dir "" >+# PROP Use_MFC 0 >+# PROP Use_Debug_Libraries 0 >+# PROP Output_Dir "..\..\..\..\bin\windows\release\IA-32" >+# PROP Intermediate_Dir "release\IA-32" >+# PROP Ignore_Export_Lib 0 >+# PROP Target_Dir "" >+F90=df.exe >+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /YX /FD /c >+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32" /D "NDEBUG" /D "IA32_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /YX /FD /c >+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 >+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 >+# ADD BASE RSC /l 0x409 /d "NDEBUG" >+# ADD RSC /l 0x409 /d "NDEBUG" >+BSC32=bscmake.exe >+# ADD BASE BSC32 /nologo >+# ADD BSC32 /nologo >+LINK32=link.exe >+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 >+# ADD LINK32 kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /machine:I386 /libpath:"..\..\..\..\bin\windows\release\IA-32" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+# PROP BASE Use_MFC 0 >+# PROP BASE Use_Debug_Libraries 1 >+# PROP BASE Output_Dir "IA32 Debug" >+# PROP BASE Intermediate_Dir "IA32 Debug" >+# PROP BASE Target_Dir "" >+# PROP Use_MFC 0 >+# PROP Use_Debug_Libraries 1 >+# PROP Output_Dir "..\..\..\..\bin\windows\debug\IA-32" >+# PROP Intermediate_Dir "debug\IA-32" >+# PROP Ignore_Export_Lib 0 >+# PROP Target_Dir "" >+F90=df.exe >+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /YX /FD /GZ /c >+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32" /D "_DEBUG" /D "IA32_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /FR /YX /FD /GZ /c >+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 >+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 >+# ADD BASE RSC /l 0x409 /d "_DEBUG" >+# ADD RSC /l 0x409 /d "_DEBUG" >+BSC32=bscmake.exe >+# ADD BASE BSC32 /nologo >+# ADD BSC32 /nologo >+LINK32=link.exe >+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept >+# ADD LINK32 LibraryLoader.lib MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\IA-32" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+# PROP BASE Use_MFC 0 >+# PROP BASE Use_Debug_Libraries 0 >+# PROP BASE Output_Dir "ThreadAdaptor___Win32_EM64T_Release" >+# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_EM64T_Release" >+# PROP BASE Ignore_Export_Lib 0 >+# PROP BASE Target_Dir "" >+# PROP Use_MFC 0 >+# PROP Use_Debug_Libraries 0 >+# PROP Output_Dir "..\..\..\..\bin\windows\release\EM64T" >+# PROP Intermediate_Dir "release\EM64T" >+# PROP Ignore_Export_Lib 0 >+# PROP Target_Dir "" >+F90=df.exe >+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\JPI" /I "..\..\Include" /I "..\..\..\..\include" /I "..\Include\win" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /YX /FD /c >+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "NDEBUG" /D "EM64T_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /YX /FD /c >+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 >+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 >+# ADD BASE RSC /l 0x409 /d "NDEBUG" >+# ADD RSC /l 0x409 /d "NDEBUG" >+BSC32=bscmake.exe >+# ADD BASE BSC32 /nologo >+# ADD BSC32 /nologo >+LINK32=link.exe >+# ADD BASE LINK32 kernel32.lib MartiniOSA.lib /nologo /dll /machine:I386 >+# ADD LINK32 kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /machine:I386 /libpath:"..\..\..\..\bin\windows\release\EM64T" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+# PROP BASE Use_MFC 0 >+# PROP BASE Use_Debug_Libraries 1 >+# PROP BASE Output_Dir "ThreadAdaptor___Win32_EM64T_Debug" >+# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_EM64T_Debug" >+# PROP BASE Ignore_Export_Lib 0 >+# PROP BASE Target_Dir "" >+# PROP Use_MFC 0 >+# PROP Use_Debug_Libraries 1 >+# PROP Output_Dir "..\..\..\..\bin\windows\debug\EM64T" >+# PROP Intermediate_Dir "debug\EM64T" >+# PROP Ignore_Export_Lib 0 >+# PROP Target_Dir "" >+F90=df.exe >+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\JPI" /I "..\..\Include" /I "..\..\..\..\include" /I "..\Include\win" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /FR /YX /FD /GZ /c >+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "_DEBUG" /D "EM64T_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /FR /YX /FD /GZ /c >+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 >+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 >+# ADD BASE RSC /l 0x409 /d "_DEBUG" >+# ADD RSC /l 0x409 /d "_DEBUG" >+BSC32=bscmake.exe >+# ADD BASE BSC32 /nologo >+# ADD BSC32 /nologo >+LINK32=link.exe >+# ADD BASE LINK32 MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept >+# ADD LINK32 LibraryLoader.lib MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\EM64T" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+# PROP BASE Use_MFC 0 >+# PROP BASE Use_Debug_Libraries 0 >+# PROP BASE Output_Dir "ThreadAdaptor___Win32_IPF_Release" >+# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_IPF_Release" >+# PROP BASE Ignore_Export_Lib 0 >+# PROP BASE Target_Dir "" >+# PROP Use_MFC 0 >+# PROP Use_Debug_Libraries 0 >+# PROP Output_Dir "..\..\..\..\bin\windows\release\IPF" >+# PROP Intermediate_Dir "release\IPF" >+# PROP Ignore_Export_Lib 0 >+# PROP Target_Dir "" >+F90=df.exe >+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\JPI" /I "..\..\Include" /I "..\..\..\..\include" /I "..\Include\win" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /YX /FD /c >+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "NDEBUG" /D "IPF_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /YX /FD /c >+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 >+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 >+# ADD BASE RSC /l 0x409 /d "NDEBUG" >+# ADD RSC /l 0x409 /d "NDEBUG" >+BSC32=bscmake.exe >+# ADD BASE BSC32 /nologo >+# ADD BSC32 /nologo >+LINK32=link.exe >+# ADD BASE LINK32 kernel32.lib MartiniOSA.lib /nologo /dll /machine:I386 >+# ADD LINK32 kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /machine:I386 /libpath:"..\..\..\..\bin\windows\release\IPF" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+# PROP BASE Use_MFC 0 >+# PROP BASE Use_Debug_Libraries 1 >+# PROP BASE Output_Dir "ThreadAdaptor___Win32_IPF_Debug" >+# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_IPF_Debug" >+# PROP BASE Ignore_Export_Lib 0 >+# PROP BASE Target_Dir "" >+# PROP Use_MFC 0 >+# PROP Use_Debug_Libraries 1 >+# PROP Output_Dir "..\..\..\..\bin\windows\debug\IPF" >+# PROP Intermediate_Dir "debug\IPF" >+# PROP Ignore_Export_Lib 0 >+# PROP Target_Dir "" >+F90=df.exe >+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\JPI" /I "..\..\Include" /I "..\..\..\..\include" /I "..\Include\win" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /FR /YX /FD /GZ /c >+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "_DEBUG" /D "IPF_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /FR /YX /FD /GZ /c >+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 >+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 >+# ADD BASE RSC /l 0x409 /d "_DEBUG" >+# ADD RSC /l 0x409 /d "_DEBUG" >+BSC32=bscmake.exe >+# ADD BASE BSC32 /nologo >+# ADD BSC32 /nologo >+LINK32=link.exe >+# ADD BASE LINK32 MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept >+# ADD LINK32 LibraryLoader.lib MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\IPF" >+ >+!ENDIF >+ >+# Begin Target >+ >+# Name "ThreadAdaptor - Win32 IA32 Release" >+# Name "ThreadAdaptor - Win32 IA32 Debug" >+# Name "ThreadAdaptor - Win32 EM64T Release" >+# Name "ThreadAdaptor - Win32 EM64T Debug" >+# Name "ThreadAdaptor - Win32 IPF Release" >+# Name "ThreadAdaptor - Win32 IPF Debug" >+# Begin Group "Source Files" >+ >+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" >+# Begin Source File >+ >+SOURCE=..\common\InstrumentationAdaptorBase.cpp >+# End Source File >+# Begin Source File >+ >+SOURCE=.\ThreadAdaptor.cpp >+# End Source File >+# Begin Source File >+ >+SOURCE=..\common\WideStringUtils.cpp >+# End Source File >+# End Group >+# Begin Group "Header Files" >+ >+# PROP Default_Filter "h;hpp;hxx;hm;inl" >+# Begin Source File >+ >+SOURCE=..\Include\ThreadAdaptor.h >+# End Source File >+# Begin Source File >+ >+SOURCE=..\Include\ThreadProxy.h >+# End Source File >+# End Group >+# Begin Group "Resource Files" >+ >+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" >+# End Group >+# End Target >+# End Project >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dep >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dep >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dep >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dep 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,70 @@ >+# Microsoft Developer Studio Generated Dependency File, included by ThreadAdaptor.mak >+ >+.\ThreadAdaptor.cpp : \ >+ "..\..\..\..\include\martini\javamnemonics"\ >+ "..\..\..\..\include\martini\mieapi.h"\ >+ "..\..\..\..\include\martini\miespecialmnemonics"\ >+ "..\..\..\..\include\martini\miterator.h"\ >+ "..\..\..\..\include\Martini\MpiAPI.h"\ >+ "..\..\..\..\include\martini\mpibase.h"\ >+ "..\..\..\..\include\martini\mrteresults.h"\ >+ "..\..\..\..\include\martini\mrtetypes.h"\ >+ "..\..\..\..\include\Martini\OSA.h"\ >+ "..\..\..\..\include\martini\psuedomnemonics"\ >+ "..\..\Include\JIE.h"\ >+ "..\..\include\mhash.h"\ >+ "..\..\include\mstring.h"\ >+ "..\..\include\mvector.h"\ >+ "..\include\cgproxy.h"\ >+ "..\Include\ThreadAdaptor.h"\ >+ "..\include\Threadproxy.h"\ >+ "..\Include\IdAllocator.h"\ >+ "..\include\ilogassert.h"\ >+ "..\include\instrumentationadaptor.h"\ >+ "..\include\instrumentationadaptorbase.h"\ >+ "..\include\validitychecks.h"\ >+ "..\Include\WideStringUtils.h"\ >+ >+ >+..\common\IdAllocator.cpp : \ >+ "..\..\..\..\include\martini\mrteresults.h"\ >+ "..\..\..\..\include\martini\mrtetypes.h"\ >+ "..\..\..\..\include\Martini\OSA.h"\ >+ "..\Include\IdAllocator.h"\ >+ >+ >+..\common\InstrumentationAdaptorBase.cpp : \ >+ "..\..\..\..\include\martini\javamnemonics"\ >+ "..\..\..\..\include\martini\mieapi.h"\ >+ "..\..\..\..\include\martini\miespecialmnemonics"\ >+ "..\..\..\..\include\martini\miterator.h"\ >+ "..\..\..\..\include\Martini\MpiAPI.h"\ >+ "..\..\..\..\include\martini\mpibase.h"\ >+ "..\..\..\..\include\martini\mrteresults.h"\ >+ "..\..\..\..\include\martini\mrtetypes.h"\ >+ "..\..\..\..\include\Martini\OSA.h"\ >+ "..\..\..\..\include\martini\psuedomnemonics"\ >+ "..\..\Include\JIE.h"\ >+ "..\..\include\libraryloader.h"\ >+ "..\..\include\mhash.h"\ >+ "..\..\include\mstring.h"\ >+ "..\..\include\mvector.h"\ >+ "..\Include\IdAllocator.h"\ >+ "..\include\ilogassert.h"\ >+ "..\include\instrumentationadaptor.h"\ >+ "..\include\instrumentationadaptorbase.h"\ >+ "..\include\mrteinfrastructuredefinitions.h"\ >+ "..\include\validitychecks.h"\ >+ "..\Include\WideStringUtils.h"\ >+ >+ >+..\common\WideStringUtils.cpp : \ >+ "..\..\..\..\include\martini\javamnemonics"\ >+ "..\..\..\..\include\martini\mieapi.h"\ >+ "..\..\..\..\include\martini\miespecialmnemonics"\ >+ "..\..\..\..\include\martini\miterator.h"\ >+ "..\..\..\..\include\martini\mrteresults.h"\ >+ "..\..\..\..\include\martini\mrtetypes.h"\ >+ "..\..\..\..\include\martini\psuedomnemonics"\ >+ "..\Include\WideStringUtils.h"\ >+ >Index: src-native/src/ThreadProf/ThreadInteractionEvent.h >=================================================================== >RCS file: src-native/src/ThreadProf/ThreadInteractionEvent.h >diff -N src-native/src/ThreadProf/ThreadInteractionEvent.h >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/ThreadProf/ThreadInteractionEvent.h 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,44 @@ >+/************************************************************************ >+ * Copyright (c) 2006 - 2008 Intel Corporation. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Intel Corporation - Initial API and implementation >+ * Alexander Alexeev, Intel - Initial API and implementation >+ * >+ * $Id: MonitorWaitEvent.h,v 1.2 2007/03/23 14:04:40 vrybalov Exp $ >+ ************************************************************************/ >+ >+#ifndef _THREAD_INTERACTION_EVENT_H_ >+#define _THREAD_INTERACTION_EVENT_H_ >+ >+#include "MpiAPI.h" >+#include "ProfEnv.h" >+#include "log.h" >+ >+namespace Martini { namespace ThreadProf { >+ >+ // CCallInterruptEvent - represents a call for interrupt method event >+ class CThreadInteractionEvent : public MPI::IThreadInteractionEventObserver >+ { >+ public: >+ // Constructor >+ CThreadInteractionEvent(); >+ // Destructor >+ ~CThreadInteractionEvent(); >+ // Initializes internal data and registers monitor wait event >+ TResult Init(BaseProf::CProfEnv* profEnv); >+ // Inherited methods >+ void HandleEvent(MPI::SThreadInteractionEventData &data); >+ >+ private: >+ // profiler environment >+ BaseProf::CProfEnv* m_pProfEnv; >+ }; >+ >+} /*namespace Martini*/ } /*namespace ThreadProf*/ >+ >+#endif // _THREAD_INTERACTION_EVENT_H_ >Index: src-native/src/ThreadProf/ThreadInteractionEvent.cpp >=================================================================== >RCS file: src-native/src/ThreadProf/ThreadInteractionEvent.cpp >diff -N src-native/src/ThreadProf/ThreadInteractionEvent.cpp >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/ThreadProf/ThreadInteractionEvent.cpp 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,61 @@ >+/************************************************************************ >+ * Copyright (c) 2006 - 2008 Intel Corporation. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Intel Corporation - Initial API and implementation >+ * Alexander Alexeev, Intel - Initial API and implementation >+ * >+ * $Id: MonitorWaitEvent.cpp,v 1.9 2007/08/24 17:29:22 gnagarajan Exp $ >+ ************************************************************************/ >+ >+#include "ThreadInteractionEvent.h" >+ >+using namespace Martini::ThreadProf; >+using namespace Martini::BaseProf; >+using namespace Martini::MPI; >+using namespace Martini::JPIAgent; >+ >+CThreadInteractionEvent::CThreadInteractionEvent(){} >+CThreadInteractionEvent::~CThreadInteractionEvent(){} >+ >+/* >+ * Init - initializes internal data and registers for call interrupt event >+ */ >+TResult >+CThreadInteractionEvent::Init(CProfEnv* profEnv) >+{ >+ m_pProfEnv = profEnv; >+ TResult retVal = profEnv->m_pMpiApi->RegisterEvent(profEnv->m_clientId, *this); >+ return retVal; >+} >+ >+/* >+ * HandleEvent - callback function for call interrupt event >+ */ >+void >+CThreadInteractionEvent::HandleEvent(SThreadInteractionEventData &data) >+{ >+ LOG_ASSERT((data.validData & DR_THREAD_ID) != 0); >+ LOG_ASSERT((data.validData & DR_OBJECT_ID) != 0); >+ LOG_ASSERT((data.validData & DR_THREAD_INTERACTION_TYPE) != 0); >+ >+ m_pProfEnv->AddTimeOut(m_pProfEnv->ec_env->GetTime(), data.threadId); >+ if (!m_pProfEnv->m_profilerIsActive) { >+ m_pProfEnv->StoreThreadEvent(data.threadId, THREAD_INTERACTION, &data, 0); >+ return; >+ } >+ >+ m_pProfEnv->CheckObjectId(data.objectId, data.threadId); >+ if (m_pProfEnv->ec_env->isStackInfoNormal()) { >+ SStackTrace_ stackTrace; >+ m_pProfEnv->GetStackTrace(data.threadId, &stackTrace); >+ m_pProfEnv->ec_env->printThreadInteractionElements(&data, &stackTrace); >+ m_pProfEnv->FreeStackTrace(&stackTrace); >+ } else { >+ m_pProfEnv->ec_env->printThreadInteractionElements(&data, 0); >+ } >+} >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.java >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.java >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,83 @@ >+/***************************************************************************** >+ * Copyright (c) 1997-2008, Intel Corporation. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Intel Corporation - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+package org.eclipse.tptp.martini; >+ >+public class ThreadProxy { >+ >+ //--------------------------------------- >+ //take care to hold it synced with >+ //callIDs: >+ private static final int TI_NOTIFY_ALL = 1; >+ private static final int TI_NOTIFY = 2; >+ private static final int TI_INTERRUPT = 3; >+ private static final int TI_START = 4; >+ >+ private static int m_bJVMInit = 0; >+ private static int m_bEventsEnabled = 0; >+ >+ public static int IsJVMInit() >+ { >+ return m_bJVMInit; >+ } >+ >+ public static void JVMInit() >+ { >+ m_bJVMInit = 1; >+ } >+ >+ public static void SetEventsStatus(int status) >+ { >+ m_bEventsEnabled = status; >+ } >+ >+ //TODO: use javadoc >+ //----------------------------------------------------- >+ //Hook for notify and notifyAll methods of class Object >+ public static void earlyCallNotify(Object obj) { >+ if (m_bEventsEnabled == 1) { >+ callThreadInteraction(obj, TI_NOTIFY_ALL); >+ } >+ } >+ >+ public static void earlyCallNotifyAll(Object obj) { >+ if (m_bEventsEnabled == 1) { >+ callThreadInteraction(obj, TI_NOTIFY); >+ } >+ } >+ //----------------------------------------- >+ //Hook for interrupt method of class Thread >+ public static void earlyCallInterrupt(Object obj) { >+ if (m_bEventsEnabled == 1) { >+ if (obj instanceof Thread) { >+ if (((Thread)obj).getState() == Thread.State.TIMED_WAITING || >+ ((Thread)obj).getState() == Thread.State.WAITING) { >+ callThreadInteraction(obj, TI_INTERRUPT); >+ } >+ } >+ } >+ } >+ >+ //------------------------------------- >+ //Hook for start method of class Thread >+ public static void earlyCallStart(Object obj) { >+ if (m_bEventsEnabled == 1) { >+ if (obj instanceof Thread) { >+ callThreadInteraction(obj, TI_START); >+ } >+ } >+ } >+ >+ //----------------------------------- >+ //Native method pass notification to Martini >+ public static native void callThreadInteraction(Object obj, int callID); >+} >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.cpp >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.cpp >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.cpp >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.cpp 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,615 @@ >+/***************************************************************************** >+ * Copyright (c) 1997-2008, Intel Corporation. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * Intel Corporation - Initial API and implementation >+ * >+ * $Id$ >+ *****************************************************************************/ >+ >+#include "ThreadAdaptor.h" >+#include "WideStringUtils.h" >+#include "CGProxy.h" >+#include "HeapProxy.h" >+#include "ThreadProxy.h" >+#include "ValidityChecks.h" >+ >+#include <assert.h> >+#include <string.h> >+ >+#include <list> >+ >+#define JIE_FIRST_METHOD_ID 0x10000 // first ids are reserved for threads in the prf resolution >+ >+using namespace std; >+ >+using namespace Martini; >+using namespace ThreadAdaptor; >+using namespace JIE; >+using namespace MIE; >+using namespace Infrastructure; >+using namespace OSA; >+using namespace RTUtil; >+ >+struct TProblematicMethodInfo >+{ >+ const char *szClassName; >+ const char *szMethodName; >+ TProblematicMethodInfo(const char *i_szClassName, const char *i_szMethodName) >+ : szClassName(i_szClassName), szMethodName(i_szMethodName) {} >+}; >+ >+struct TNewObjectInfo >+{ >+ TNewObjectInfo(char *i_szClass, TVariableID i_varId) >+ : szClass(i_szClass), varId(i_varId) {} >+ >+ char *szClass; >+ TVariableID varId; >+}; >+ >+extern "C" THREADADAPTOR_API IInstrumentationAdaptor* GetInstrumentationAdaptor() >+{ >+ static CThreadAdaptor s_ThreadAdaptor; >+ return (IInstrumentationAdaptor*)&s_ThreadAdaptor; >+} >+ >+////////////////////////////////////////////////////////////////////////// >+// class CThreadAdaptor implementation >+ >+// >+// Default constructor >+// >+CThreadAdaptor::CThreadAdaptor() >+ : CInstrumentationAdaptorBase(), m_pFilter(NULL) >+{ >+ CWideStringUtils::InitWideString(m_wzThreadProxyCallbackClassName, THREADADAPTOR_CALLBACK_CLASS_NAME); >+ CWideStringUtils::InitWideString(m_wzNotifyCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_NAME); >+ CWideStringUtils::InitWideString(m_wzNotifyCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_SIG); >+ CWideStringUtils::InitWideString(m_wzNotifyAllCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_NAME); >+ CWideStringUtils::InitWideString(m_wzNotifyAllCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_SIG); >+ CWideStringUtils::InitWideString(m_wzInterruptCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_NAME); >+ CWideStringUtils::InitWideString(m_wzInterruptCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_SIG); >+ CWideStringUtils::InitWideString(m_wzStartCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_START_NAME); >+ CWideStringUtils::InitWideString(m_wzStartCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_START_SIG); >+ >+} >+ >+// >+// Destructor >+// >+CThreadAdaptor::~CThreadAdaptor() >+{ >+} >+ >+TResult CThreadAdaptor::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter) >+{ >+ // Call common initializer >+ TResult res = CInstrumentationAdaptorBase::Init(pLogger); >+ if (MRTE_FAILED(res)) >+ { >+ return MRTE_ERROR_FAIL; >+ } >+ >+ // Do ThreadAdaptor-specific initialization >+ m_pFilter = (MPI::IThreadInteractionFilter*)pFilter; >+ >+ return MRTE_RESULT_OK; >+} >+ >+TResult CThreadAdaptor::ModifyClass(MPI::TId classId, >+ const SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ SClassFile *pInstrumentedClass, >+ IInstrumentationContext *pInsContext) >+{ >+ // Validate arguments >+ if (NULL == m_pJIE) >+ { >+ return MRTE_ERROR_MODULE_NOT_INITIALIZED; >+ } >+ if (NULL == pInstrumentedClass || NULL == funcAllocator || NULL == pInsContext) >+ { >+ return MRTE_ERROR_ILLEGAL_ARGUMENT; >+ } >+ if (NULL == classToInstrument.pClassFile || 0 == classToInstrument.uiSize) >+ { >+ return MRTE_ERROR_ILLEGAL_ARGUMENT; >+ } >+ >+ InvalidateInstrumentedClassBuffer(pInstrumentedClass); >+ >+ // Parse the class file >+ IJavaClass *pJavaClass = m_pJIE->GetClassInterface(classToInstrument.pClassFile, >+ classToInstrument.uiSize); >+ if (NULL == pJavaClass) >+ { >+ // Unable to parse class file >+ return MRTE_ERROR_ILL_CLASS_FILE; >+ } >+ >+ SJavaClassInfo jci; >+ TResult res = GetJavaClassInfo(&jci, pJavaClass); >+ if (MRTE_RESULT_OK != res) >+ { >+ return MRTE_ERROR_FAIL; >+ } >+ >+ SAdaptorClassInfo classInfo; >+ SetClassInfo(&classInfo, jci, classId); >+ >+ res = CanInstrumentClass(classInfo); >+ if (MRTE_RESULT_OK == res) >+ { >+ // Apply basic instrumentation to the class if required at this stage >+ if (MRTE_RESULT_OK == res) >+ { >+ // Write the instrumented class file to pInstrumentedClass >+ SBuffer buffer; >+ res = pJavaClass->WriteBack(&buffer, funcAllocator); >+ if (MRTE_RESULT_OK == res) >+ { >+ pInstrumentedClass->pClassFile = buffer.pBuffer; >+ pInstrumentedClass->uiSize = buffer.uiActualSize; >+ } >+ } >+ } >+ >+ CContext *pContext = (CContext*)pInsContext; >+ TResult copyRes = CopyInstrumentedClassInfo(&(pContext->classInfo), classInfo, >+ funcAllocator); >+ if (MRTE_FAILED(copyRes)) >+ { >+ res = copyRes; >+ } >+ >+// Clean-up >+ pJavaClass->Free(); >+ DeallocateJavaClassInfo(&jci); >+ DeallocateAdaptorClassInfo(&classInfo); >+ >+ return res; >+} >+ >+ >+ >+TResult CThreadAdaptor::ModifyByteCodes(MPI::TId classId, >+ const SClassFile &classToInstrument, >+ TMemoryAllocatorFunc funcAllocator, >+ SClassFile *pInstrumentedClass, >+ IInstrumentationContext *pContext) >+{ >+ // Validate arguments >+ if (NULL == m_pJIE) >+ { >+ return MRTE_ERROR_MODULE_NOT_INITIALIZED; >+ } >+ if (NULL == pInstrumentedClass || NULL == funcAllocator) >+ { >+ return MRTE_ERROR_ILLEGAL_ARGUMENT; >+ } >+ if (NULL == classToInstrument.pClassFile || 0 == classToInstrument.uiSize) >+ { >+ return MRTE_ERROR_ILLEGAL_ARGUMENT; >+ } >+ >+ InvalidateInstrumentedClassBuffer(pInstrumentedClass); >+ >+ // Parse the class file >+ IJavaClass *pJavaClass = m_pJIE->GetClassInterface(classToInstrument.pClassFile, >+ classToInstrument.uiSize); >+ if (NULL == pJavaClass) >+ { >+ // unable to parse class file >+ return MRTE_ERROR_ILL_CLASS_FILE; >+ } >+ >+ CContext *pThreadContext = (CContext*)pContext; >+ TResult res = CanInstrumentClass(pThreadContext->classInfo); >+ if (MRTE_RESULT_OK == res) >+ { >+ // Apply thread instrumentation to the class >+ res = DoThreadInstrumentation(pJavaClass, pThreadContext->classInfo, m_bJVMInitDone); >+ if (MRTE_RESULT_OK == res) >+ { >+ // Write the instrumented class file to pInstrumentedClass >+ SBuffer buffer; >+ res = pJavaClass->WriteBack(&buffer, funcAllocator); >+ if (MRTE_RESULT_OK == res) >+ { >+ pInstrumentedClass->pClassFile = buffer.pBuffer; >+ pInstrumentedClass->uiSize = buffer.uiActualSize; >+ } >+ } >+ } >+ >+ // Clean-up >+ pJavaClass->Free(); >+ >+ return res; >+} >+ >+// >+// Copies a class file buffer >+// >+// Parameters: >+// pDest [out] : destination buffer >+// src [in] : source buffer >+// funcAllocator [in] : a function to use for allocating memory for pDest buffers >+// >+// Returns >+// MRTE_RESULT_OK : success >+// MRTE_ERROR_OUT_OF_MEMORY : not enough memory to complete the operation >+// >+TResult CThreadAdaptor::CopyClassFile(SClassFile *pDest, >+ const SClassFile& src, >+ TMemoryAllocatorFunc funcAllocator) >+{ >+ pDest->uiSize = src.uiSize; >+ pDest->pClassFile = (unsigned char *)funcAllocator(src.uiSize); >+ if (NULL == pDest->pClassFile) >+ { >+ return MRTE_ERROR_OUT_OF_MEMORY; >+ } >+ memcpy(pDest->pClassFile, src.pClassFile, src.uiSize); >+ return MRTE_RESULT_OK; >+} >+ >+ >+ >+// >+// Add Thread instrumentation to the class >+// >+// Parameters: >+// pJavaClass [in,out] : Java class to instrument >+// classInfo [in] : Java class information, including an array of methods >+// that should be instrumented. >+// bJVMInitDone [in] : Whether the JVM has finished initialization or not >+// >+// Returns: >+// MRTE_RESULT_OK : success >+// MRTE_ERROR_FAIL : instrumentation failure >+// >+TResult CThreadAdaptor::DoThreadInstrumentation(IJavaClass *pJavaClass, >+ const SAdaptorClassInfo &classInfo, >+ bool bJVMInitDone) >+{ >+ TResult res = MRTE_RESULT_OK; >+ >+ if (pJavaClass == NULL) >+ { >+ return (MRTE_ERROR_ILLEGAL_ARGUMENT); >+ } >+ >+ TConstantPoolIndex cpNotifyCallback = pJavaClass->RegisterRecorderCallback( >+ m_wzThreadProxyCallbackClassName, m_wzNotifyCallbackName, m_wzNotifyCallbackSig); >+ TConstantPoolIndex cpNotifyAllCallback = pJavaClass->RegisterRecorderCallback( >+ m_wzThreadProxyCallbackClassName, m_wzNotifyAllCallbackName, m_wzNotifyAllCallbackSig); >+ TConstantPoolIndex cpInterruptCallback = pJavaClass->RegisterRecorderCallback( >+ m_wzThreadProxyCallbackClassName, m_wzInterruptCallbackName, m_wzInterruptCallbackSig); >+ TConstantPoolIndex cpStartCallback = pJavaClass->RegisterRecorderCallback( >+ m_wzThreadProxyCallbackClassName, m_wzStartCallbackName, m_wzStartCallbackSig); >+ >+ if (cpNotifyCallback == ILLEGAL_CP_ENTRY || >+ cpNotifyAllCallback == ILLEGAL_CP_ENTRY || >+ cpInterruptCallback == ILLEGAL_CP_ENTRY || >+ cpStartCallback == ILLEGAL_CP_ENTRY) >+ { >+ return (MRTE_ERROR_ILLEGAL_ARGUMENT); >+ } >+ >+ SHookMethodCall MethodCallHooks [] = { >+ {"notify", cpNotifyCallback}, >+ {"notifyAll", cpNotifyAllCallback}, >+ {"interrupt", cpInterruptCallback}, >+ {"start", cpStartCallback}, >+ }; >+ >+ res = InstrumentMethodCalls(pJavaClass, classInfo, MethodCallHooks, >+ sizeof(MethodCallHooks)/sizeof(SHookMethodCall)); >+ >+ return res; >+} >+ >+ >+ >+TResult >+CThreadAdaptor::InstrumentMethodCalls(IJavaClass *pClass, >+ const SAdaptorClassInfo &classInfo, >+ SHookMethodCall *hooks, >+ size_t hooksNumber) >+{ >+ TResult res; >+ IJavaMethod *pMethod; >+ TJavaMethodIterator *pMethIter = pClass->GetMethodIterator(); >+ >+ SJavaMethodInfo methodInfo; >+ CWideStringUtils::AllocateWideString(methodInfo.className, 1000); >+ CWideStringUtils::AllocateWideString(methodInfo.methodName, 1000); >+ CWideStringUtils::AllocateWideString(methodInfo.methodSignature, 1000); >+ >+ bool isNotInstrumented = true; >+ while (pMethIter->HasNext()) >+ { >+ pMethod = pMethIter->GetNext(); >+ res = pMethod->GetMethodInfo(&methodInfo); >+ >+ if (MRTE_ERROR_BUFFER_TOO_SHORT == res) >+ { >+ // One of the buffers are too short. Fix sizes and try again >+ CWideStringUtils::ReallocateWideString(methodInfo.className); >+ CWideStringUtils::ReallocateWideString(methodInfo.methodName); >+ CWideStringUtils::ReallocateWideString(methodInfo.methodSignature); >+ res = pMethod->GetMethodInfo(&methodInfo); >+ } >+ >+ >+ if (CanInstrumentMethod(methodInfo) && >+ CheckFilter(classInfo, methodInfo)) >+ { >+ res = AddInstrumentationToMethod(pClass, pMethod, >+ hooks, hooksNumber); >+ if (MRTE_FAILED(res)) >+ { >+ CWideStringUtils::FreeWideString(methodInfo.className); >+ CWideStringUtils::FreeWideString(methodInfo.methodName); >+ CWideStringUtils::FreeWideString(methodInfo.methodSignature); >+ return res; >+ } >+ isNotInstrumented = false; >+ } >+ } >+ >+ CWideStringUtils::FreeWideString(methodInfo.className); >+ CWideStringUtils::FreeWideString(methodInfo.methodName); >+ CWideStringUtils::FreeWideString(methodInfo.methodSignature); >+ >+ if (isNotInstrumented) >+ { >+ return MRTE_ERROR_INSTRUMENTATION_NOT_NEEDED; >+ } >+ return MRTE_RESULT_OK; >+} >+ >+ >+ >+ >+ >+TResult >+CThreadAdaptor::AddInstrumentationToMethod(IJavaClass *pClass, >+ IJavaMethod *pMethod, >+ SHookMethodCall *hooks, size_t hooksNumber) >+{ >+ >+ if (pMethod == NULL) >+ { >+ return (MRTE_ERROR_ILLEGAL_ARGUMENT); >+ } >+ >+ TResult res; >+ >+ TInstructionListIterator *pInstIter = >+ pMethod->GetInstructionListIterator(IET_ALL_INSTRUCTIONS); >+ >+ SConstantPoolEntryValue cpMethodValue; >+ cpMethodValue.type = CPT_METHOD; >+ >+ // TODO: add constants >+ // TODO: free memory >+ CWideStringUtils::AllocateWideString(cpMethodValue.u.methodVal.className, 1000); >+ CWideStringUtils::AllocateWideString(cpMethodValue.u.methodVal.name, 1000); >+ CWideStringUtils::AllocateWideString(cpMethodValue.u.methodVal.signature, 1000); >+ >+ >+ while (pInstIter->HasNext()) >+ { >+ IInstruction *pInst = pInstIter->GetNext(); >+ IInstruction *pNewInst = NULL; >+ SOperand opInvokeOper; >+ >+ switch (pInst->GetMnemonic()) >+ { >+ case MNM_INVOKEVIRTUAL: { >+ pInst->GetOperand(&opInvokeOper); >+ if (opInvokeOper.type != OT_JAVA_CP_INDEX) >+ { >+ //TODO: INFORM ABOUT ERROR >+ } >+ >+ pClass->GetValueFromCPEntry(opInvokeOper.val.cpIndex, &cpMethodValue); >+ if (cpMethodValue.type != CPT_METHOD) >+ { >+ //TODO: INFORM ABOUT ERROR >+ } >+ >+ char *szInvokedMethod = CWideStringUtils::WideStringToCString(cpMethodValue.u.methodVal.name); >+ >+ for (int i = 0; i < hooksNumber; i++) >+ { >+ if (strcmp(szInvokedMethod, hooks[i].methodName) == 0) >+ { >+ AddNotifyProbeBeforeInstr(pInst, hooks[i].cpCallback); >+ } >+ } >+ >+ delete [] szInvokedMethod; >+ >+ break; } >+ case MNM_INVOKESTATIC: >+ case MNM_INVOKESPECIAL: >+ case MNM_INVOKEINTERFACE: { >+ >+ break; } >+ } >+ } >+ pInstIter->Free(); >+ res = pMethod->ApplyInstrumentation(); >+ >+ return (res); >+} >+ >+ >+TResult >+CThreadAdaptor::AddNotifyProbeBeforeInstr(IInstruction *pInst, >+ TConstantPoolIndex cpCallback) >+{ >+ TResult res; >+ IInstruction *pNewInst = pInst; >+ SOperand opInvokeOper; >+ >+ res = pNewInst->AddBefore(&pNewInst, MNM_DUP); >+ >+ if (MRTE_FAILED(res)) >+ { >+ return (res); >+ } >+ >+ opInvokeOper.type = OT_JAVA_CP_INDEX; >+ opInvokeOper.val.cpIndex = cpCallback; >+ res = pNewInst->AddAfter(&pNewInst, MNM_INVOKESTATIC, &opInvokeOper); >+ >+ return (MRTE_RESULT_OK); >+} >+ >+ >+ >+// >+// Checks if the class can be instrumented. >+// >+// Parameters: >+// info : class information >+// >+// Returns: >+// MRTE_RESULT_OK : class can be instrumented >+// MRTE_ERROR_INSTRUMENTATION_NOT_NEEDED : the class will not be instrumented >+// at all. This value is returned >+// for interface classes. >+// MRTE_ERROR_UNABLE_TO_INSTRUMENT : the class cannot be instrumented. >+// This value is returned for classes >+// the Thread Adaptor cannot >+// instrument. >+// >+TResult CThreadAdaptor::CanInstrumentClass(const SAdaptorClassInfo &info) >+{ >+ static char *ExcludedClassPatterns[] = >+ { >+ CGADAPTOR_CALLBACK_CLASS_NAME, // CGAdaptor recorder class >+ HEAPADAPTOR_CALLBACK_CLASS_NAME, // HeapAdaptor recorder class >+ THREADADAPTOR_CALLBACK_CLASS_NAME, // ThreadAdaptor recorder class >+ >+ "jrockit/", // Internal JRockit classes. >+ // Can't force-load some of them >+ // during attach/detach >+ "java/lang/J9VM", // IBM Internal classes (J9 VM) >+ "java/lang/Object", // Do not instrument j.l.Object >+ "com/ibm/crypto", // Cause verification errors. //TODO: fix >+ "sun/reflect/Generated", // Classes generated during runtime to >+ // support reflection >+ "com/Intel/VTune/VTuneAPI", // VTune API Proxy class >+ "org/eclipse/hyades/collection/profiler", // TPTP Profiler API Proxy class >+ "java/lang/", // Patch to IBM redefinition problem >+ "java/security/", >+ "java/awt/", >+ "javax/swing/" >+ "com/ibm/jvm/", >+ "com/ibm/misc/", >+ "com/ibm/oti/", >+ "sun/security/", >+ "sun/misc/", >+ "sun/awt/", >+ "sun/java2d/", >+ "org/eclipse/hyades/collection/profiler" // TPTP Profiler API Proxy class >+ }; >+ >+ // Can't instrument interface classes as they contain no code >+ if (CAF_INTERFACE & info.uiAttributeFlags) >+ { >+ return MRTE_ERROR_INSTRUMENTATION_NOT_NEEDED; >+ } >+ >+ // Check if the class appear in the excluded class patterns list >+ const char *szClassName = info.szClassName; >+ unsigned int i; >+ for (i = 0; i < SIZE_OF_ARRAY(ExcludedClassPatterns); ++i) >+ { >+ char *szExcludedPattern = ExcludedClassPatterns[i]; >+ if (strstr(szClassName, szExcludedPattern) != NULL) >+ { >+ LOG_INFORMATIVE1("CThreadAdaptor", 5, false, "Class '%s' will not be instrumented", >+ szClassName); >+ return MRTE_ERROR_UNABLE_TO_INSTRUMENT; >+ } >+ } >+ >+ // The class can be instrumented >+ return MRTE_RESULT_OK; >+} >+ >+// >+// Checks if the method can be instrumented >+// >+// Parameters: >+// methodInfo : method information >+// >+// Returns: >+// true : the method can be instrumented >+// false : the method cannot be instrumented >+// >+bool CThreadAdaptor::CanInstrumentMethod(const SJavaMethodInfo &methodInfo) >+{ >+ //TODO: log methods that are not instrumented >+ if (methodInfo.uiAttributeFlags & MAF_NATIVE || >+ methodInfo.uiAttributeFlags & MAF_ABSTRACT) >+ { >+ // can't instrument native and abstract methods as they have no code >+ return false; >+ } >+ >+ char *szClassName = CWideStringUtils::WideStringToCString(methodInfo.className); >+ char *szMethodName = CWideStringUtils::WideStringToCString(methodInfo.methodName); >+ bool bIsProblematic = IsProblematicMethod(szClassName, szMethodName); >+ delete [] szClassName; >+ delete [] szMethodName; >+ >+ return (!bIsProblematic); >+} >+ >+bool CThreadAdaptor::IsProblematicMethod(const char *szClassName, >+ const char *szMethodName) >+{ >+ if ( strcmp(szClassName, "java/lang/ref/Reference") == 0 >+ || strcmp(szClassName, "java/lang/ref/Finalizer") == 0 >+ ) >+ { >+ return true; >+ } >+ return false; >+} >+ >+ >+bool CThreadAdaptor::CheckFilter(const SAdaptorClassInfo &classInfo, >+ const SJavaMethodInfo &methodInfo) >+{ >+ bool notified; >+ char *szMethodName; >+ if (NULL == m_pFilter) >+ { >+ // No selectivity callback is defined. All methods should be instrumented >+ return true; >+ } >+ >+ szMethodName = CWideStringUtils::WideStringToCString(methodInfo.methodName); >+ // Invoke the selectivity callback >+ MPI::SThreadInteractionFilterData threadInteractionFilter; >+ threadInteractionFilter.szClassName = classInfo.szClassName; >+ threadInteractionFilter.szMethodName = szMethodName; >+ >+ notified = m_pFilter->ShouldNotify(threadInteractionFilter); >+ >+ delete [] szMethodName; >+ return notified; >+} >Index: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.mak >=================================================================== >RCS file: src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.mak >diff -N src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.mak >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.mak 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,924 @@ >+# Microsoft Developer Studio Generated NMAKE File, Based on ThreadAdaptor.dsp >+!IF "$(CFG)" == "" >+CFG=ThreadAdaptor - Win32 IPF Debug >+!MESSAGE No configuration specified. Defaulting to ThreadAdaptor - Win32 IPF Debug. >+!ENDIF >+ >+!IF "$(CFG)" != "ThreadAdaptor - Win32 IA32 Release" && "$(CFG)" != "ThreadAdaptor - Win32 IA32 Debug" && "$(CFG)" != "ThreadAdaptor - Win32 EM64T Release" && "$(CFG)" != "ThreadAdaptor - Win32 EM64T Debug" && "$(CFG)" != "ThreadAdaptor - Win32 IPF Release" && "$(CFG)" != "ThreadAdaptor - Win32 IPF Debug" >+!MESSAGE Invalid configuration "$(CFG)" specified. >+!MESSAGE You can specify a configuration when running NMAKE >+!MESSAGE by defining the macro CFG on the command line. For example: >+!MESSAGE >+!MESSAGE NMAKE /f "ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug" >+!MESSAGE >+!MESSAGE Possible choices for configuration are: >+!MESSAGE >+!MESSAGE "ThreadAdaptor - Win32 IA32 Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 IA32 Debug" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 EM64T Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 EM64T Debug" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 IPF Release" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE "ThreadAdaptor - Win32 IPF Debug" (based on "Win32 (x86) Dynamic-Link Library") >+!MESSAGE >+!ERROR An invalid configuration is specified. >+!ENDIF >+ >+!IF "$(OS)" == "Windows_NT" >+NULL= >+!ELSE >+NULL=nul >+!ENDIF >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+OUTDIR=.\..\..\..\..\bin\windows\release\IA-32 >+INTDIR=.\release\IA-32 >+# Begin Custom Macros >+OutDir=.\..\..\..\..\bin\windows\release\IA-32 >+# End Custom Macros >+ >+!IF "$(RECURSE)" == "0" >+ >+ALL : "$(OUTDIR)\ThreadAdaptor.dll" >+ >+!ELSE >+ >+ALL : "MartiniOSA - Win32 IA32 Release" "LibraryLoader - Win32 IA32 Release" "$(OUTDIR)\ThreadAdaptor.dll" >+ >+!ENDIF >+ >+!IF "$(RECURSE)" == "1" >+CLEAN :"LibraryLoader - Win32 IA32 ReleaseCLEAN" "MartiniOSA - Win32 IA32 ReleaseCLEAN" >+!ELSE >+CLEAN : >+!ENDIF >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.obj" >+ -@erase "$(INTDIR)\ThreadAdaptor.obj" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\WideStringUtils.obj" >+ -@erase "$(OUTDIR)\ThreadAdaptor.dll" >+ -@erase "$(OUTDIR)\ThreadAdaptor.exp" >+ -@erase "$(OUTDIR)\ThreadAdaptor.lib" >+ >+"$(OUTDIR)" : >+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >+ >+"$(INTDIR)" : >+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" >+ >+F90=df.exe >+CPP=cl.exe >+CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32" /D "NDEBUG" /D "IA32_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /Fp"$(INTDIR)\ThreadAdaptor.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" >+BSC32_SBRS= \ >+ >+LINK32=link.exe >+LINK32_FLAGS=kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\ThreadAdaptor.pdb" /machine:I386 /out:"$(OUTDIR)\ThreadAdaptor.dll" /implib:"$(OUTDIR)\ThreadAdaptor.lib" /libpath:"..\..\..\..\bin\windows\release\IA-32" >+LINK32_OBJS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.obj" \ >+ "$(INTDIR)\ThreadAdaptor.obj" \ >+ "$(INTDIR)\WideStringUtils.obj" \ >+ "$(OUTDIR)\LibraryLoader.lib" \ >+ "$(OUTDIR)\MartiniOSA.lib" >+ >+"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) >+ $(LINK32) @<< >+ $(LINK32_FLAGS) $(LINK32_OBJS) >+<< >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+OUTDIR=.\..\..\..\..\bin\windows\debug\IA-32 >+INTDIR=.\debug\IA-32 >+# Begin Custom Macros >+OutDir=.\..\..\..\..\bin\windows\debug\IA-32 >+# End Custom Macros >+ >+!IF "$(RECURSE)" == "0" >+ >+ALL : "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc" >+ >+!ELSE >+ >+ALL : "MartiniOSA - Win32 IA32 Debug" "LibraryLoader - Win32 IA32 Debug" "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc" >+ >+!ENDIF >+ >+!IF "$(RECURSE)" == "1" >+CLEAN :"LibraryLoader - Win32 IA32 DebugCLEAN" "MartiniOSA - Win32 IA32 DebugCLEAN" >+!ELSE >+CLEAN : >+!ENDIF >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.obj" >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.sbr" >+ -@erase "$(INTDIR)\ThreadAdaptor.obj" >+ -@erase "$(INTDIR)\ThreadAdaptor.sbr" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\WideStringUtils.obj" >+ -@erase "$(INTDIR)\WideStringUtils.sbr" >+ -@erase "$(OUTDIR)\ThreadAdaptor.bsc" >+ -@erase "$(OUTDIR)\ThreadAdaptor.dll" >+ -@erase "$(OUTDIR)\ThreadAdaptor.exp" >+ -@erase "$(OUTDIR)\ThreadAdaptor.ilk" >+ -@erase "$(OUTDIR)\ThreadAdaptor.lib" >+ -@erase "$(OUTDIR)\ThreadAdaptor.pdb" >+ >+"$(OUTDIR)" : >+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >+ >+"$(INTDIR)" : >+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" >+ >+F90=df.exe >+CPP=cl.exe >+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32" /D "_DEBUG" /D "IA32_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ThreadAdaptor.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" >+BSC32_SBRS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.sbr" \ >+ "$(INTDIR)\ThreadAdaptor.sbr" \ >+ "$(INTDIR)\WideStringUtils.sbr" >+ >+"$(OUTDIR)\ThreadAdaptor.bsc" : "$(OUTDIR)" $(BSC32_SBRS) >+ $(BSC32) @<< >+ $(BSC32_FLAGS) $(BSC32_SBRS) >+<< >+ >+LINK32=link.exe >+LINK32_FLAGS=LibraryLoader.lib MartiniOSA.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\ThreadAdaptor.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ThreadAdaptor.dll" /implib:"$(OUTDIR)\ThreadAdaptor.lib" /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\IA-32" >+LINK32_OBJS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.obj" \ >+ "$(INTDIR)\ThreadAdaptor.obj" \ >+ "$(INTDIR)\WideStringUtils.obj" \ >+ "$(OUTDIR)\LibraryLoader.lib" \ >+ "$(OUTDIR)\MartiniOSA.lib" >+ >+"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) >+ $(LINK32) @<< >+ $(LINK32_FLAGS) $(LINK32_OBJS) >+<< >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+OUTDIR=.\..\..\..\..\bin\windows\release\EM64T >+INTDIR=.\release\EM64T >+# Begin Custom Macros >+OutDir=.\..\..\..\..\bin\windows\release\EM64T >+# End Custom Macros >+ >+!IF "$(RECURSE)" == "0" >+ >+ALL : "$(OUTDIR)\ThreadAdaptor.dll" >+ >+!ELSE >+ >+ALL : "MartiniOSA - Win32 EM64T Release" "LibraryLoader - Win32 EM64T Release" "$(OUTDIR)\ThreadAdaptor.dll" >+ >+!ENDIF >+ >+!IF "$(RECURSE)" == "1" >+CLEAN :"LibraryLoader - Win32 EM64T ReleaseCLEAN" "MartiniOSA - Win32 EM64T ReleaseCLEAN" >+!ELSE >+CLEAN : >+!ENDIF >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.obj" >+ -@erase "$(INTDIR)\ThreadAdaptor.obj" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\WideStringUtils.obj" >+ -@erase "$(OUTDIR)\ThreadAdaptor.dll" >+ -@erase "$(OUTDIR)\ThreadAdaptor.exp" >+ -@erase "$(OUTDIR)\ThreadAdaptor.lib" >+ >+"$(OUTDIR)" : >+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >+ >+"$(INTDIR)" : >+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" >+ >+F90=df.exe >+CPP=cl.exe >+CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "NDEBUG" /D "EM64T_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /Fp"$(INTDIR)\ThreadAdaptor.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" >+BSC32_SBRS= \ >+ >+LINK32=link.exe >+LINK32_FLAGS=kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\ThreadAdaptor.pdb" /machine:I386 /out:"$(OUTDIR)\ThreadAdaptor.dll" /implib:"$(OUTDIR)\ThreadAdaptor.lib" /libpath:"..\..\..\..\bin\windows\release\EM64T" >+LINK32_OBJS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.obj" \ >+ "$(INTDIR)\ThreadAdaptor.obj" \ >+ "$(INTDIR)\WideStringUtils.obj" \ >+ "$(OUTDIR)\LibraryLoader.lib" \ >+ "$(OUTDIR)\MartiniOSA.lib" >+ >+"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) >+ $(LINK32) @<< >+ $(LINK32_FLAGS) $(LINK32_OBJS) >+<< >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+OUTDIR=.\..\..\..\..\bin\windows\debug\EM64T >+INTDIR=.\debug\EM64T >+# Begin Custom Macros >+OutDir=.\..\..\..\..\bin\windows\debug\EM64T >+# End Custom Macros >+ >+!IF "$(RECURSE)" == "0" >+ >+ALL : "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc" >+ >+!ELSE >+ >+ALL : "MartiniOSA - Win32 EM64T Debug" "LibraryLoader - Win32 EM64T Debug" "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc" >+ >+!ENDIF >+ >+!IF "$(RECURSE)" == "1" >+CLEAN :"LibraryLoader - Win32 EM64T DebugCLEAN" "MartiniOSA - Win32 EM64T DebugCLEAN" >+!ELSE >+CLEAN : >+!ENDIF >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.obj" >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.sbr" >+ -@erase "$(INTDIR)\ThreadAdaptor.obj" >+ -@erase "$(INTDIR)\ThreadAdaptor.sbr" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\WideStringUtils.obj" >+ -@erase "$(INTDIR)\WideStringUtils.sbr" >+ -@erase "$(OUTDIR)\ThreadAdaptor.bsc" >+ -@erase "$(OUTDIR)\ThreadAdaptor.dll" >+ -@erase "$(OUTDIR)\ThreadAdaptor.exp" >+ -@erase "$(OUTDIR)\ThreadAdaptor.ilk" >+ -@erase "$(OUTDIR)\ThreadAdaptor.lib" >+ -@erase "$(OUTDIR)\ThreadAdaptor.pdb" >+ >+"$(OUTDIR)" : >+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >+ >+"$(INTDIR)" : >+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" >+ >+F90=df.exe >+CPP=cl.exe >+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "_DEBUG" /D "EM64T_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ThreadAdaptor.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" >+BSC32_SBRS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.sbr" \ >+ "$(INTDIR)\ThreadAdaptor.sbr" \ >+ "$(INTDIR)\WideStringUtils.sbr" >+ >+"$(OUTDIR)\ThreadAdaptor.bsc" : "$(OUTDIR)" $(BSC32_SBRS) >+ $(BSC32) @<< >+ $(BSC32_FLAGS) $(BSC32_SBRS) >+<< >+ >+LINK32=link.exe >+LINK32_FLAGS=LibraryLoader.lib MartiniOSA.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\ThreadAdaptor.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ThreadAdaptor.dll" /implib:"$(OUTDIR)\ThreadAdaptor.lib" /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\EM64T" >+LINK32_OBJS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.obj" \ >+ "$(INTDIR)\ThreadAdaptor.obj" \ >+ "$(INTDIR)\WideStringUtils.obj" \ >+ "$(OUTDIR)\LibraryLoader.lib" \ >+ "$(OUTDIR)\MartiniOSA.lib" >+ >+"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) >+ $(LINK32) @<< >+ $(LINK32_FLAGS) $(LINK32_OBJS) >+<< >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+OUTDIR=.\..\..\..\..\bin\windows\release\IPF >+INTDIR=.\release\IPF >+# Begin Custom Macros >+OutDir=.\..\..\..\..\bin\windows\release\IPF >+# End Custom Macros >+ >+!IF "$(RECURSE)" == "0" >+ >+ALL : "$(OUTDIR)\ThreadAdaptor.dll" >+ >+!ELSE >+ >+ALL : "MartiniOSA - Win32 IPF Release" "LibraryLoader - Win32 IPF Release" "$(OUTDIR)\ThreadAdaptor.dll" >+ >+!ENDIF >+ >+!IF "$(RECURSE)" == "1" >+CLEAN :"LibraryLoader - Win32 IPF ReleaseCLEAN" "MartiniOSA - Win32 IPF ReleaseCLEAN" >+!ELSE >+CLEAN : >+!ENDIF >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.obj" >+ -@erase "$(INTDIR)\ThreadAdaptor.obj" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\WideStringUtils.obj" >+ -@erase "$(OUTDIR)\ThreadAdaptor.dll" >+ -@erase "$(OUTDIR)\ThreadAdaptor.exp" >+ -@erase "$(OUTDIR)\ThreadAdaptor.lib" >+ >+"$(OUTDIR)" : >+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >+ >+"$(INTDIR)" : >+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" >+ >+F90=df.exe >+CPP=cl.exe >+CPP_PROJ=/nologo /MT /W3 /GX /O2 /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "NDEBUG" /D "IPF_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /Fp"$(INTDIR)\ThreadAdaptor.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" >+BSC32_SBRS= \ >+ >+LINK32=link.exe >+LINK32_FLAGS=kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\ThreadAdaptor.pdb" /machine:I386 /out:"$(OUTDIR)\ThreadAdaptor.dll" /implib:"$(OUTDIR)\ThreadAdaptor.lib" /libpath:"..\..\..\..\bin\windows\release\IPF" >+LINK32_OBJS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.obj" \ >+ "$(INTDIR)\ThreadAdaptor.obj" \ >+ "$(INTDIR)\WideStringUtils.obj" \ >+ "$(OUTDIR)\LibraryLoader.lib" \ >+ "$(OUTDIR)\MartiniOSA.lib" >+ >+"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) >+ $(LINK32) @<< >+ $(LINK32_FLAGS) $(LINK32_OBJS) >+<< >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+OUTDIR=.\..\..\..\..\bin\windows\debug\IPF >+INTDIR=.\debug\IPF >+# Begin Custom Macros >+OutDir=.\..\..\..\..\bin\windows\debug\IPF >+# End Custom Macros >+ >+!IF "$(RECURSE)" == "0" >+ >+ALL : "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc" >+ >+!ELSE >+ >+ALL : "MartiniOSA - Win32 IPF Debug" "LibraryLoader - Win32 IPF Debug" "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc" >+ >+!ENDIF >+ >+!IF "$(RECURSE)" == "1" >+CLEAN :"LibraryLoader - Win32 IPF DebugCLEAN" "MartiniOSA - Win32 IPF DebugCLEAN" >+!ELSE >+CLEAN : >+!ENDIF >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.obj" >+ -@erase "$(INTDIR)\InstrumentationAdaptorBase.sbr" >+ -@erase "$(INTDIR)\ThreadAdaptor.obj" >+ -@erase "$(INTDIR)\ThreadAdaptor.sbr" >+ -@erase "$(INTDIR)\vc60.idb" >+ -@erase "$(INTDIR)\vc60.pdb" >+ -@erase "$(INTDIR)\WideStringUtils.obj" >+ -@erase "$(INTDIR)\WideStringUtils.sbr" >+ -@erase "$(OUTDIR)\ThreadAdaptor.bsc" >+ -@erase "$(OUTDIR)\ThreadAdaptor.dll" >+ -@erase "$(OUTDIR)\ThreadAdaptor.exp" >+ -@erase "$(OUTDIR)\ThreadAdaptor.ilk" >+ -@erase "$(OUTDIR)\ThreadAdaptor.lib" >+ -@erase "$(OUTDIR)\ThreadAdaptor.pdb" >+ >+"$(OUTDIR)" : >+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" >+ >+"$(INTDIR)" : >+ if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)" >+ >+F90=df.exe >+CPP=cl.exe >+CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\Include" /I "..\..\Include" /I "..\..\..\..\include\Martini" /D "WIN32" /D "_DEBUG" /D "IPF_ARCH" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "THREADADAPTOR_EXPORTS" /D "MARTINI_JIE" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\ThreadAdaptor.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c >+ >+.c{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.obj:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.c{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cpp{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+.cxx{$(INTDIR)}.sbr:: >+ $(CPP) @<< >+ $(CPP_PROJ) $< >+<< >+ >+MTL=midl.exe >+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 >+RSC=rc.exe >+BSC32=bscmake.exe >+BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" >+BSC32_SBRS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.sbr" \ >+ "$(INTDIR)\ThreadAdaptor.sbr" \ >+ "$(INTDIR)\WideStringUtils.sbr" >+ >+"$(OUTDIR)\ThreadAdaptor.bsc" : "$(OUTDIR)" $(BSC32_SBRS) >+ $(BSC32) @<< >+ $(BSC32_FLAGS) $(BSC32_SBRS) >+<< >+ >+LINK32=link.exe >+LINK32_FLAGS=LibraryLoader.lib MartiniOSA.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\ThreadAdaptor.pdb" /debug /machine:I386 /out:"$(OUTDIR)\ThreadAdaptor.dll" /implib:"$(OUTDIR)\ThreadAdaptor.lib" /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\IPF" >+LINK32_OBJS= \ >+ "$(INTDIR)\InstrumentationAdaptorBase.obj" \ >+ "$(INTDIR)\ThreadAdaptor.obj" \ >+ "$(INTDIR)\WideStringUtils.obj" \ >+ "$(OUTDIR)\LibraryLoader.lib" \ >+ "$(OUTDIR)\MartiniOSA.lib" >+ >+"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) >+ $(LINK32) @<< >+ $(LINK32_FLAGS) $(LINK32_OBJS) >+<< >+ >+!ENDIF >+ >+ >+!IF "$(NO_EXTERNAL_DEPS)" != "1" >+!IF EXISTS("ThreadAdaptor.dep") >+!INCLUDE "ThreadAdaptor.dep" >+!ELSE >+!MESSAGE Warning: cannot find "ThreadAdaptor.dep" >+!ENDIF >+!ENDIF >+ >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" || "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" || "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" || "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" || "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" || "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+SOURCE=..\common\InstrumentationAdaptorBase.cpp >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+ >+"$(INTDIR)\InstrumentationAdaptorBase.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+ >+"$(INTDIR)\InstrumentationAdaptorBase.obj" "$(INTDIR)\InstrumentationAdaptorBase.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+ >+"$(INTDIR)\InstrumentationAdaptorBase.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+ >+"$(INTDIR)\InstrumentationAdaptorBase.obj" "$(INTDIR)\InstrumentationAdaptorBase.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+ >+"$(INTDIR)\InstrumentationAdaptorBase.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+ >+"$(INTDIR)\InstrumentationAdaptorBase.obj" "$(INTDIR)\InstrumentationAdaptorBase.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+SOURCE=.\ThreadAdaptor.cpp >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+ >+"$(INTDIR)\ThreadAdaptor.obj" : $(SOURCE) "$(INTDIR)" >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+ >+"$(INTDIR)\ThreadAdaptor.obj" "$(INTDIR)\ThreadAdaptor.sbr" : $(SOURCE) "$(INTDIR)" >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+ >+"$(INTDIR)\ThreadAdaptor.obj" : $(SOURCE) "$(INTDIR)" >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+ >+"$(INTDIR)\ThreadAdaptor.obj" "$(INTDIR)\ThreadAdaptor.sbr" : $(SOURCE) "$(INTDIR)" >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+ >+"$(INTDIR)\ThreadAdaptor.obj" : $(SOURCE) "$(INTDIR)" >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+ >+"$(INTDIR)\ThreadAdaptor.obj" "$(INTDIR)\ThreadAdaptor.sbr" : $(SOURCE) "$(INTDIR)" >+ >+ >+!ENDIF >+ >+SOURCE=..\common\WideStringUtils.cpp >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+ >+"$(INTDIR)\WideStringUtils.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+ >+"$(INTDIR)\WideStringUtils.obj" "$(INTDIR)\WideStringUtils.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+ >+"$(INTDIR)\WideStringUtils.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+ >+"$(INTDIR)\WideStringUtils.obj" "$(INTDIR)\WideStringUtils.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+ >+"$(INTDIR)\WideStringUtils.obj" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+ >+"$(INTDIR)\WideStringUtils.obj" "$(INTDIR)\WideStringUtils.sbr" : $(SOURCE) "$(INTDIR)" >+ $(CPP) $(CPP_PROJ) $(SOURCE) >+ >+ >+!ENDIF >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+"LibraryLoader - Win32 IA32 Release" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Release" >+ cd "..\ThreadAdaptor" >+ >+"LibraryLoader - Win32 IA32 ReleaseCLEAN" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Release" RECURSE=1 CLEAN >+ cd "..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+"LibraryLoader - Win32 IA32 Debug" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Debug" >+ cd "..\ThreadAdaptor" >+ >+"LibraryLoader - Win32 IA32 DebugCLEAN" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Debug" RECURSE=1 CLEAN >+ cd "..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+"LibraryLoader - Win32 EM64T Release" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Release" >+ cd "..\ThreadAdaptor" >+ >+"LibraryLoader - Win32 EM64T ReleaseCLEAN" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Release" RECURSE=1 CLEAN >+ cd "..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+"LibraryLoader - Win32 EM64T Debug" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Debug" >+ cd "..\ThreadAdaptor" >+ >+"LibraryLoader - Win32 EM64T DebugCLEAN" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Debug" RECURSE=1 CLEAN >+ cd "..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+"LibraryLoader - Win32 IPF Release" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Release" >+ cd "..\ThreadAdaptor" >+ >+"LibraryLoader - Win32 IPF ReleaseCLEAN" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Release" RECURSE=1 CLEAN >+ cd "..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+"LibraryLoader - Win32 IPF Debug" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Debug" >+ cd "..\ThreadAdaptor" >+ >+"LibraryLoader - Win32 IPF DebugCLEAN" : >+ cd "..\LibraryLoader" >+ $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Debug" RECURSE=1 CLEAN >+ cd "..\ThreadAdaptor" >+ >+!ENDIF >+ >+!IF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release" >+ >+"MartiniOSA - Win32 IA32 Release" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Release" >+ cd "..\..\ThreadAdaptor" >+ >+"MartiniOSA - Win32 IA32 ReleaseCLEAN" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Release" RECURSE=1 CLEAN >+ cd "..\..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug" >+ >+"MartiniOSA - Win32 IA32 Debug" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Debug" >+ cd "..\..\ThreadAdaptor" >+ >+"MartiniOSA - Win32 IA32 DebugCLEAN" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Debug" RECURSE=1 CLEAN >+ cd "..\..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release" >+ >+"MartiniOSA - Win32 EM64T Release" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Release" >+ cd "..\..\ThreadAdaptor" >+ >+"MartiniOSA - Win32 EM64T ReleaseCLEAN" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Release" RECURSE=1 CLEAN >+ cd "..\..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug" >+ >+"MartiniOSA - Win32 EM64T Debug" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Debug" >+ cd "..\..\ThreadAdaptor" >+ >+"MartiniOSA - Win32 EM64T DebugCLEAN" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Debug" RECURSE=1 CLEAN >+ cd "..\..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Release" >+ >+"MartiniOSA - Win32 IPF Release" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Release" >+ cd "..\..\ThreadAdaptor" >+ >+"MartiniOSA - Win32 IPF ReleaseCLEAN" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Release" RECURSE=1 CLEAN >+ cd "..\..\ThreadAdaptor" >+ >+!ELSEIF "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug" >+ >+"MartiniOSA - Win32 IPF Debug" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Debug" >+ cd "..\..\ThreadAdaptor" >+ >+"MartiniOSA - Win32 IPF DebugCLEAN" : >+ cd "..\OSA\Windows" >+ $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Debug" RECURSE=1 CLEAN >+ cd "..\..\ThreadAdaptor" >+ >+!ENDIF >+ >+ >+!ENDIF >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 209724
:
89931
| 90766 |
91742