Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 209724 | Differences between
and this patch

Collapse All | Expand All

(-)makefile.win_ipf (+2 lines)
Lines 24-29 Link Here
24
	copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config
24
	copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config
25
	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
25
	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
26
	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
26
	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
27
	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
27
	
28
	
28
	if exist javaprofiler.win_ipf.zip  rm -f javaprofiler.win_ipf.zip 
29
	if exist javaprofiler.win_ipf.zip  rm -f javaprofiler.win_ipf.zip 
29
	cd packaging
30
	cd packaging
Lines 51-56 Link Here
51
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
52
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
52
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
53
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
53
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
54
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
55
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\ThreadAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
54
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
56
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\IPF\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
55
57
56
	if exist javaprofiler.win_ipf.sdk.zip  rm -f javaprofiler.win_ipf.sdk.zip
58
	if exist javaprofiler.win_ipf.sdk.zip  rm -f javaprofiler.win_ipf.sdk.zip
(-)makefile.win_em64t (+2 lines)
Lines 24-29 Link Here
24
	copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config
24
	copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config
25
	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
25
	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
26
	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
26
	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
27
	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
27
28
28
	if exist javaprofiler.win_em64t.zip  rm -f javaprofiler.win_em64t.zip 
29
	if exist javaprofiler.win_em64t.zip  rm -f javaprofiler.win_em64t.zip 
29
	cd packaging
30
	cd packaging
Lines 51-56 Link Here
51
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
52
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\JIE.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
52
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
53
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\CGAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
53
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
54
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\HeapAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
55
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\ThreadAdaptor.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
54
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
56
	copy /y org.eclipse.tptp.platform.jvmti.runtime\src-native\bin\windows\release\EM64T\MartiniOSA.dll packaging\plugins\org.eclipse.tptp.javaprofiler.sdk\Lib
55
57
56
	if exist javaprofiler.win_em64t.sdk.zip  rm -f javaprofiler.win_em64t.sdk.zip
58
	if exist javaprofiler.win_em64t.sdk.zip  rm -f javaprofiler.win_em64t.sdk.zip
(-)makefile.win_ia32 (+2 lines)
Lines 24-29 Link Here
24
	copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config
24
	copy /y org.eclipse.tptp.platform.jvmti.runtime\static_config\win\pluginconfig.xml packaging\plugins\org.eclipse.tptp.javaprofiler\config
25
	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
25
	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
26
	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
26
	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
27
	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
27
	
28
	
28
	if exist javaprofiler.win_ia32.zip  rm -f javaprofiler.win_ia32.zip 
29
	if exist javaprofiler.win_ia32.zip  rm -f javaprofiler.win_ia32.zip 
29
	cd packaging
30
	cd packaging
Lines 51-56 Link Here
51
	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
52
	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
52
	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
53
	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
53
	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
54
	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
55
	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
54
	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
56
	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
55
57
56
	if exist javaprofiler.win_ia32.sdk.zip  rm -f javaprofiler.win_ia32.sdk.zip
58
	if exist javaprofiler.win_ia32.sdk.zip  rm -f javaprofiler.win_ia32.sdk.zip
(-)makefile (+2 lines)
Lines 55-60 Link Here
55
	cp -d org.eclipse.tptp.platform.jvmti.runtime/static_config/linux/pluginconfig.xml packaging/plugins/org.eclipse.tptp.javaprofiler/config
55
	cp -d org.eclipse.tptp.platform.jvmti.runtime/static_config/linux/pluginconfig.xml packaging/plugins/org.eclipse.tptp.javaprofiler/config
56
	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
56
	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
57
	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
57
	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
58
	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
58
	cd packaging; \
59
	cd packaging; \
59
	zip -r9y ../javaprofiler.$(BUILD_PLATFORM).zip *; \
60
	zip -r9y ../javaprofiler.$(BUILD_PLATFORM).zip *; \
60
	cd ..
61
	cd ..
Lines 82-87 Link Here
82
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libJIE.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
83
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libJIE.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
83
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libCGAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
84
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libCGAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
84
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libHeapAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
85
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libHeapAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
86
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libThreadAdaptor.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
85
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libMartiniOSA.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
87
	cp -d org.eclipse.tptp.platform.jvmti.runtime/src-native/bin/linux/release/${EXTENS}/libMartiniOSA.so packaging/plugins/org.eclipse.tptp.javaprofiler.sdk/Lib/
86
	
88
	
87
	if [ -e javaprofiler.$(BUILD_PLATFORM).sdk.zip ]; then rm -f javaprofiler.$(BUILD_PLATFORM).sdk.zip; \
89
	if [ -e javaprofiler.$(BUILD_PLATFORM).sdk.zip ]; then rm -f javaprofiler.$(BUILD_PLATFORM).sdk.zip; \
(-)src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.cpp (-4 / +215 lines)
Lines 21-26 Link Here
21
#include <string.h>
21
#include <string.h>
22
#include "CGProxy.h"
22
#include "CGProxy.h"
23
#include "HeapProxy.h"
23
#include "HeapProxy.h"
24
#include "ThreadProxy.h"
24
#include "MString.h"
25
#include "MString.h"
25
#include "MPIUtils.h"
26
#include "MPIUtils.h"
26
#include "JpiGlobals.h"
27
#include "JpiGlobals.h"
Lines 232-240 Link Here
232
    case MPI::EG_CALL_GRAPH:
233
    case MPI::EG_CALL_GRAPH:
233
        pAdaptor = new CCgAdaptorDelegate();
234
        pAdaptor = new CCgAdaptorDelegate();
234
        break;
235
        break;
235
    case MPI::EG_HEAP:
236
    case MPI::EG_HEAP:       
236
        pAdaptor = new CHeapAdaptorDelegate();
237
        pAdaptor = new CHeapAdaptorDelegate();
237
        break;
238
        break;
239
    case MPI::EG_THREAD_INTERACTION:       
240
        pAdaptor = new CThreadAdaptorDelegate();
241
        break;
238
    }
242
    }
239
    return pAdaptor;
243
    return pAdaptor;
240
}
244
}
Lines 286-292 Link Here
286
//////////////////////////////////////////////////////////////////////////
290
//////////////////////////////////////////////////////////////////////////
287
// CCgAdaptorDelegate
291
// CCgAdaptorDelegate
288
292
289
TResult CCgAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter* pFilter)
293
TResult CCgAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter)
290
{
294
{
291
    MPI::ICallGraphFilter *pCgFilter = (MPI::ICallGraphFilter*)pFilter;
295
    MPI::ICallGraphFilter *pCgFilter = (MPI::ICallGraphFilter*)pFilter;
292
    m_CGFilterProxy.Init(pCgFilter);
296
    m_CGFilterProxy.Init(pCgFilter);
Lines 462-467 Link Here
462
    return MRTE_RESULT_OK;
466
    return MRTE_RESULT_OK;
463
}
467
}
464
468
469
470
471
472
//////////////////////////////////////////////////////////////////////////
473
// CThreadAdaptorDelegate
474
475
476
477
TResult CThreadAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter)
478
{
479
    //Add filtering support
480
    MPI::IThreadInteractionFilter *pThreadInteractionFilter = (MPI::IThreadInteractionFilter*)pFilter;
481
    m_ThreadInteractionFilterProxy.Init(pThreadInteractionFilter);
482
483
    if (!m_pAdaptor)
484
    {
485
        // Load the Adaptor library
486
        ILibraryLoader *pLibrary = LoadBistroLibrary(THREADADAPTOR_DLL_NAME);
487
        if (NULL == pLibrary)
488
        {
489
            return MRTE_ERROR_FAIL;
490
        }
491
        
492
        TGetInstrumentationAdaptor pfnGetAdaptor = 
493
            (TGetInstrumentationAdaptor)pLibrary->GetEntry(GET_INSTRUMENTATION_ADAPTOR_NAME);
494
        if (pfnGetAdaptor)
495
        {
496
            // Obtain the Adaptor interface
497
            m_pAdaptor = pfnGetAdaptor();
498
        }
499
        
500
        pLibrary->Destroy();
501
    
502
        if (m_pAdaptor == NULL)
503
        {
504
            return MRTE_ERROR_FAIL;
505
        }
506
    }
507
508
    // Initialize the Adaptor
509
    TResult res = m_pAdaptor->Init(CLogAssert::GetInstance(), &m_ThreadInteractionFilterProxy); 
510
    return MRTE_RESULT_OK;
511
}
512
513
TResult CThreadAdaptorDelegate::ModifyClass(MPI::TId classId, 
514
                                        const SClassFile &classToInstrument,
515
                                        TMemoryAllocatorFunc funcAllocator,
516
                                        SClassFile *pInstrumentedClass,
517
                                        IInstrumentationContext *pContext)
518
{
519
    CContext context;
520
    TResult iRetVal = m_pAdaptor->ModifyClass(classId, classToInstrument, funcAllocator, 
521
        pInstrumentedClass, &context);
522
    DeallocateInstrClassInfo(&context.classInfo);
523
    return iRetVal;
524
}
525
526
TResult CThreadAdaptorDelegate::ModifyByteCodes(MPI::TId classId, 
527
                                            const SClassFile &classToInstrument,
528
                                            TMemoryAllocatorFunc funcAllocator,
529
                                            SClassFile *pInstrumentedClass,
530
                                            IInstrumentationContext *pContext)
531
{
532
533
    CContext context;
534
    CDataManager *pDM = CJpiGlobals::Instance()->pDataManager;
535
    TResult res = pDM->GetClassInstrContext(&context, classId);
536
    if (MRTE_SUCCEEDED(res))
537
    {
538
        res = m_pAdaptor->ModifyByteCodes(classId, classToInstrument, funcAllocator, 
539
            pInstrumentedClass, &context);
540
        if (MRTE_SUCCEEDED(res))
541
        {
542
            pDM->SetClassInstrumentationStatus(classId, true /* bEventsEnabled */);
543
        }
544
        delete [] context.classInfo.pMethods;
545
    }
546
    return res;
547
}
548
549
void CThreadAdaptorDelegate::JvmInitDone()
550
{
551
    // Register native callback methods in the wrapper class
552
    TResult iRetVal = RegisterNativeCallbacksInWrapper();
553
    if (MRTE_SUCCEEDED(iRetVal))
554
    {
555
        m_pAdaptor->JvmInitDone();
556
    }
557
    else
558
    {
559
        MARTINI_ERROR("CJavaInstrumentorManager", "failed to register native callbacks "
560
            "for the thread events recorder class");
561
        MARTINI_ASSERT("CJavaInstrumentorManager", MRTE_SUCCEEDED(iRetVal), "");
562
    }
563
}
564
565
TResult CThreadAdaptorDelegate::RegisterNativeCallbacksInWrapper()
566
{
567
    CJpiGlobals *pJpiGlobals = CJpiGlobals::Instance();
568
569
    if (NULL == pJpiGlobals->pfnThreadInteractionHandler)
570
    {
571
        return MRTE_ERROR_FAIL;
572
    }
573
574
    JNIEnv *pJNIEnv = NULL;
575
576
    TResult iRes = CJpiGlobals::Instance()->pJvmInterface->GetJNIEnv(&pJNIEnv);
577
    if (MRTE_FAILED(iRes))
578
    {
579
        return iRes;
580
    }
581
    
582
    jclass cls = pJNIEnv->FindClass(THREADADAPTOR_CALLBACK_CLASS_NAME);
583
    if (cls == 0)
584
    {
585
        MARTINI_INFORMATIVE1("CJavaInstrumentorManager", 0, false, 
586
            "failed to load class '%s'", THREADADAPTOR_CALLBACK_CLASS_NAME);
587
        return MRTE_ERROR_FAIL;
588
    }
589
    
590
    JNINativeMethod nativeMethods[THREADADAPTOR_NUM_EVENT_HANDLERS];
591
    nativeMethods[0].name =      THREADADAPTOR_CALLBACK_CALL_TI_NAME;
592
    nativeMethods[0].signature = THREADADAPTOR_CALLBACK_CALL_TI_SIG;
593
    nativeMethods[0].fnPtr =     (void*)pJpiGlobals->pfnThreadInteractionHandler;
594
595
    jint ret = pJNIEnv->RegisterNatives(cls, (JNINativeMethod *)nativeMethods, 
596
        THREADADAPTOR_NUM_EVENT_HANDLERS);
597
    if (ret != 0)
598
    {
599
        return MRTE_ERROR_FAIL;
600
    }
601
602
    // Inform the Wrapper class that the native methods were instrumented
603
    jmethodID methodId = pJNIEnv->GetStaticMethodID(cls, "JVMInit", "()V");
604
    if (methodId == 0)
605
    {
606
        MARTINI_ERROR("CJavaInstrumentorManager", 
607
            "Failed to get static method 'JVMInit' in ThreadProxy wrapper class");
608
        return MRTE_ERROR_FAIL;
609
    }
610
    pJNIEnv->CallStaticVoidMethod(cls, methodId);
611
    MARTINI_INFORMATIVE("CJavaInstrumentorManager", 0, false, 
612
        "Using Martini Thread Instrumentation Technology");
613
614
    // Store a handle to the SetEventsStatus method of the proxy class
615
    m_grProxyClass = (jclass)pJNIEnv->NewWeakGlobalRef(cls);
616
    if (NULL == m_grProxyClass)
617
    {
618
        MARTINI_ERROR("CJavaInstrumentorManager", 
619
            "Failed to create a weak global reference for the ThreadProxy wrapper class");
620
        return MRTE_ERROR_FAIL;
621
    }
622
    m_hSetEventsStatus = pJNIEnv->GetStaticMethodID(cls, "SetEventsStatus", "(I)V");
623
    if (0 == m_hSetEventsStatus)
624
    {
625
        MARTINI_ERROR("CJavaInstrumentorManager", 
626
            "Failed to get static method 'SetEventsStatus' in ThreadProxy wrapper class");
627
        return MRTE_ERROR_FAIL;
628
    }
629
630
    pJNIEnv->DeleteLocalRef(cls);
631
632
    return MRTE_RESULT_OK;
633
}
634
635
636
///////////////////////////////////////////////////////////////
637
// CJavaInstrumentorManager::CCGFilterProxy implementation
638
639
//TODO: Make one base class for FilterAdapters
640
bool 
641
CThreadAdaptorDelegate::CThreadInteractionFilterProxy::ShouldNotify(MPI::SThreadInteractionFilterData &filterData)
642
{
643
    if (NULL == m_pThreadInteractionFilter)
644
    {
645
        return true;
646
    }
647
648
    MCString strClassName;
649
    MCString strMethodName;
650
    
651
    // Translate class name from internal JVM representation to the Java syntax
652
    strClassName.Set(filterData.szClassName);
653
    strClassName.ReplaceAll("/", ".");
654
655
    // Translate special method names (such as <init>, <clinit>)
656
    CJpiGlobals::Instance()->pDataManager->GetUpdatedMethodName(strClassName.Get(), 
657
        filterData.szMethodName, &strMethodName);
658
    
659
    // Call the client's filter callback
660
    MPI::SThreadInteractionFilterData locFilterData;
661
    locFilterData.szClassName = strClassName.Get();
662
    locFilterData.szMethodName = strMethodName.Get();
663
    return m_pThreadInteractionFilter->ShouldNotify(locFilterData);
664
}
665
666
667
TResult CThreadAdaptorDelegate::CThreadInteractionFilterProxy::Init(MPI::IThreadInteractionFilter *pThreadInteractionFilter)
668
{
669
    m_pThreadInteractionFilter = pThreadInteractionFilter;
670
    return MRTE_RESULT_OK;
671
}
672
673
674
465
//
675
//
466
// Deallocates memory of pInstrClassInfo members
676
// Deallocates memory of pInstrClassInfo members
467
//
677
//
Lines 515-521 Link Here
515
//////////////////////////////////////////////////////////////////////////
725
//////////////////////////////////////////////////////////////////////////
516
// CHeapAdaptorDelegate
726
// CHeapAdaptorDelegate
517
727
518
TResult CHeapAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter* pFilter)
728
TResult CHeapAdaptorDelegate::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter)
519
{
729
{
520
    if (!m_pAdaptor)
730
    if (!m_pAdaptor)
521
    {
731
    {
Lines 941-946 Link Here
941
    m_pEventManager->SetEventImplementor(MPI::EV_METHOD_ENTER, MPI_INSTRUMENTATION);
1151
    m_pEventManager->SetEventImplementor(MPI::EV_METHOD_ENTER, MPI_INSTRUMENTATION);
942
    m_pEventManager->SetEventImplementor(MPI::EV_METHOD_LEAVE, MPI_INSTRUMENTATION);
1152
    m_pEventManager->SetEventImplementor(MPI::EV_METHOD_LEAVE, MPI_INSTRUMENTATION);
943
    m_pEventManager->SetEventImplementor(MPI::EV_OBJECT_ALLOC, MPI_INSTRUMENTATION);
1153
    m_pEventManager->SetEventImplementor(MPI::EV_OBJECT_ALLOC, MPI_INSTRUMENTATION);
1154
    m_pEventManager->SetEventImplementor(MPI::EV_THREAD_INTERACTION, MPI_INSTRUMENTATION);
944
1155
945
    if (!m_csInstrumentation)
1156
    if (!m_csInstrumentation)
946
    {
1157
    {
Lines 1527-1530 Link Here
1527
        pClassRedefQueue->Push(classDef);
1738
        pClassRedefQueue->Push(classDef);
1528
    }
1739
    }
1529
    return iRes;
1740
    return iRes;
1530
}
1741
}
(-)src-native/src/Martini/Infrastructure/JPI/JavaInstrumentorManager.h (+46 lines)
Lines 139-144 Link Here
139
        TResult RegisterNativeCallbacksInWrapper();
139
        TResult RegisterNativeCallbacksInWrapper();
140
    };
140
    };
141
141
142
143
    class CThreadAdaptorDelegate : public CBaseAdaptorDelegate
144
    {
145
    public:
146
        // IInstrumentationAdaptor methods
147
148
        virtual TResult Init(Infrastructure::ILogAssert *pLogger = NULL,
149
                             MPI::IEventFilter *pFilter = NULL);
150
        virtual TResult ModifyClass(MPI::TId classId, 
151
                                    const Infrastructure::SClassFile &classToInstrument,
152
                                    TMemoryAllocatorFunc funcAllocator,
153
                                    Infrastructure::SClassFile *pInstrumentedClass,
154
                                    Infrastructure::IInstrumentationContext *pContext = NULL);
155
        virtual TResult ModifyByteCodes(MPI::TId classId, 
156
                                        const Infrastructure::SClassFile &classToInstrument,
157
                                        TMemoryAllocatorFunc funcAllocator,
158
                                        Infrastructure::SClassFile *pInstrumentedClass,
159
                                        Infrastructure::IInstrumentationContext *pContext = NULL);
160
        virtual void JvmInitDone();
161
162
        /**
163
         * @brief Thread filter proxy for ThreadAdaptor
164
         *
165
         * A proxy for the thread filter of ThreadAdaptor. Used for translating method
166
         * and class names to friendly names, before sending them to the filter defined
167
         * by the MPI client
168
         */
169
        class CThreadInteractionFilterProxy : public MPI::IThreadInteractionFilter
170
        {
171
        public:
172
            CThreadInteractionFilterProxy() : m_pThreadInteractionFilter(NULL) {}
173
            TResult Init(MPI::IThreadInteractionFilter *pThreadFilter);
174
            virtual bool ShouldNotify(MPI::SThreadInteractionFilterData &filterData);
175
176
        private:
177
            MPI::IThreadInteractionFilter *m_pThreadInteractionFilter;
178
        };
179
180
181
    private:
182
        TResult RegisterNativeCallbacksInWrapper();
183
184
        CThreadInteractionFilterProxy m_ThreadInteractionFilterProxy;
185
    };
186
187
142
    /**
188
    /**
143
     * @brief Factory for Instrumentation Adaptors (Singleton)
189
     * @brief Factory for Instrumentation Adaptors (Singleton)
144
     */
190
     */
(-)src-native/src/Martini/Infrastructure/JPI/EventDispatcher.h (-6 / +29 lines)
Lines 25-36 Link Here
25
25
26
    struct SMpiInternalData
26
    struct SMpiInternalData
27
    {
27
    {
28
        MPI::TId methodId;              //!< Method id (EV_NEW_METHOD, EV_OBJECT_ALLOC)
28
        MPI::TId methodId;                       //!< Method id (EV_NEW_METHOD, EV_OBJECT_ALLOC)
29
        jobject objectJniLocalRef;      //!< Local reference of the object (EV_OBJECT_ALLOC)
29
        jobject objectJniLocalRef;               //!< Local reference of the object (EV_OBJECT_ALLOC)
30
                                        //!  Valid only in the context of the ObjectAlloc JNI
30
                                                 //!  Valid only in the context of the ObjectAlloc JNI
31
                                        //!  Callback (!!!)
31
                                                 //!  Callback (!!!)
32
        SJvmtiObjectTag *pObjectTag;    //!< JVMTI object tag (EV_OBJECT_ALLOC)
32
        SJvmtiObjectTag *pObjectTag;             //!< JVMTI object tag (EV_OBJECT_ALLOC and EV_THREAD_INTERACTION)
33
        U64 allocLocation;              //!< Object allocation byte-code index (EV_OBJECT_ALLOC)
33
        U64 allocLocation;                       //!< Object allocation byte-code index (EV_OBJECT_ALLOC)
34
35
        int interactionType;                     //!< type of interaction between threads (EV_THREAD_INTERACTION)
34
        MPI::BitSet validData;
36
        MPI::BitSet validData;
35
    };
37
    };
36
    
38
    
Lines 460-465 Link Here
460
        CEventManager *m_pEventManager;
462
        CEventManager *m_pEventManager;
461
    };
463
    };
462
464
465
466
    /**
467
     * @brief Dispatcher for the Call CA methoda event
468
     */
469
    class CThreadInteractionEventDispatcher : public CEventDispatcher
470
    {
471
    public:
472
        CThreadInteractionEventDispatcher(CEventManager *pEventManager) 
473
            : m_pEventManager(pEventManager) {}
474
475
        void NotifyThreadInteractionObservers(MPI::SThreadInteractionEventData *pData);
476
477
        virtual void Notify(SEmData *pData, 
478
                            MPI::IEventObserver *pObserver,
479
                            MPI::BitSet dataItems);        
480
481
    private:
482
        CEventManager *m_pEventManager;
483
    };
484
485
463
    /**
486
    /**
464
     * @brief Dispatcher for the Object Alloc event
487
     * @brief Dispatcher for the Object Alloc event
465
     */
488
     */
(-)src-native/src/Martini/Infrastructure/JPI/MPIUtils.cpp (+20 lines)
Lines 43-48 Link Here
43
        h = eventList->GetLast();
43
        h = eventList->GetLast();
44
        eventList->InsertAfter(h, EV_CONTENDED_MONITOR_ENTERED);
44
        eventList->InsertAfter(h, EV_CONTENDED_MONITOR_ENTERED);
45
        break;
45
        break;
46
    case EG_THREAD_INTERACTION:
47
        h = eventList->GetLast();
48
        eventList->InsertAfter(h,  EV_THREAD_INTERACTION);
49
        break;
46
    }
50
    }
47
}
51
}
48
52
Lines 77-82 Link Here
77
            bResult = true;
81
            bResult = true;
78
        }
82
        }
79
        break;
83
        break;
84
    case EG_THREAD_INTERACTION:
85
         if ( EV_THREAD_INTERACTION == event)
86
        {
87
            bResult = true;
88
        }
89
        break;
80
    }
90
    }
81
    return bResult;
91
    return bResult;
82
}
92
}
Lines 99-104 Link Here
99
            bResult = true;
109
            bResult = true;
100
        }
110
        }
101
        break;
111
        break;
112
    case EG_THREAD_INTERACTION:
113
        if (IEventFilter:: FT_THREAD_INTERACTION == filter.Type())
114
        {
115
            bResult = true;
116
        }
117
        break;
102
    }
118
    }
103
    return bResult;
119
    return bResult;
104
}
120
}
Lines 124-129 Link Here
124
    case EV_CONTENDED_MONITOR_ENTERED:
140
    case EV_CONTENDED_MONITOR_ENTERED:
125
        group = EG_MONITOR;
141
        group = EG_MONITOR;
126
        break;
142
        break;
143
144
    case EV_THREAD_INTERACTION:
145
        group = EG_THREAD_INTERACTION;
146
        break;
127
    }
147
    }
128
    return group;
148
    return group;
129
}
149
}
(-)src-native/src/Martini/Infrastructure/JPI/EventManager.cpp (+63 lines)
Lines 235-240 Link Here
235
        }
235
        }
236
*/
236
*/
237
        break;
237
        break;
238
    case EV_THREAD_INTERACTION:
239
        if (m_threadInteractionDataRequestType != DR_NONE && 
240
            m_threadInteractionDataRequestType != dataRequestType)
241
        {
242
            return MRTE_ERROR_CONFLICT;
243
        }
244
        m_threadInteractionDataRequestType = dataRequestType;
245
        break;
238
    default:
246
    default:
239
        ;
247
        ;
240
    }
248
    }
Lines 317-322 Link Here
317
    m_newMethodDataRequestType = DR_NONE;
325
    m_newMethodDataRequestType = DR_NONE;
318
    m_methodEnterDataRequestType = DR_NONE;
326
    m_methodEnterDataRequestType = DR_NONE;
319
    m_methodLeaveDataRequestType = DR_NONE;
327
    m_methodLeaveDataRequestType = DR_NONE;
328
    m_threadInteractionDataRequestType = DR_NONE;
320
329
321
    m_bIsInitialiazationCompleted = false;
330
    m_bIsInitialiazationCompleted = false;
322
    m_bVMShutdownReceived = false;
331
    m_bVMShutdownReceived = false;
Lines 404-409 Link Here
404
    case EV_CONTENDED_MONITOR_ENTERED:
413
    case EV_CONTENDED_MONITOR_ENTERED:
405
        pDispatcher = new CContendedMonitorEnteredEventDispatcher(this);
414
        pDispatcher = new CContendedMonitorEnteredEventDispatcher(this);
406
        break;
415
        break;
416
    case EV_THREAD_INTERACTION:
417
        pDispatcher = new CThreadInteractionEventDispatcher(this);
418
        break;
407
    case EV_JAVA_CLASS_FILE_LOAD_HOOK:
419
    case EV_JAVA_CLASS_FILE_LOAD_HOOK:
408
        pDispatcher = new CJavaClassFileLoadHookEventDispatcher();
420
        pDispatcher = new CJavaClassFileLoadHookEventDispatcher();
409
        break;
421
        break;
Lines 494-499 Link Here
494
    m_vEventInfo[EV_CONTENDED_MONITOR_ENTERED].pDescriptor =  
506
    m_vEventInfo[EV_CONTENDED_MONITOR_ENTERED].pDescriptor =  
495
        new CEventDescriptor(EV_CONTENDED_MONITOR_ENTERED, "Contended Monitor Entered", 
507
        new CEventDescriptor(EV_CONTENDED_MONITOR_ENTERED, "Contended Monitor Entered", 
496
        EG_MONITOR);
508
        EG_MONITOR);
509
    m_vEventInfo[EV_THREAD_INTERACTION].pDescriptor =  
510
        new CEventDescriptor(EV_THREAD_INTERACTION, "Thread interaction", EG_THREAD_INTERACTION);
497
    m_vEventInfo[EV_EC_START].pDescriptor = 
511
    m_vEventInfo[EV_EC_START].pDescriptor = 
498
        new CEventDescriptor(EV_EC_START, "External Control Start Notification"); 
512
        new CEventDescriptor(EV_EC_START, "External Control Start Notification"); 
499
    m_vEventInfo[EV_EC_STOP].pDescriptor = 
513
    m_vEventInfo[EV_EC_STOP].pDescriptor = 
Lines 745-750 Link Here
745
            || GetEventGlobalEnabledStatus(EV_MONITOR_WAITED)
759
            || GetEventGlobalEnabledStatus(EV_MONITOR_WAITED)
746
            || GetEventGlobalEnabledStatus(EV_CONTENDED_MONITOR_ENTER)
760
            || GetEventGlobalEnabledStatus(EV_CONTENDED_MONITOR_ENTER)
747
            || GetEventGlobalEnabledStatus(EV_CONTENDED_MONITOR_ENTERED);
761
            || GetEventGlobalEnabledStatus(EV_CONTENDED_MONITOR_ENTERED);
762
    case EG_THREAD_INTERACTION:
763
        bResult = GetEventGlobalEnabledStatus(EV_THREAD_INTERACTION);
748
        break;
764
        break;
749
    }
765
    }
750
    return bResult;
766
    return bResult;
Lines 813-818 Link Here
813
    pJpiGlobals->pfnMethodLeaveWithExcetionHandler = MethodLeaveWithException;
829
    pJpiGlobals->pfnMethodLeaveWithExcetionHandler = MethodLeaveWithException;
814
    pJpiGlobals->pfnObjectAllocHandler = ObjectAllocHandler;
830
    pJpiGlobals->pfnObjectAllocHandler = ObjectAllocHandler;
815
    pJpiGlobals->pfnArrayAllocHandler = ArrayAllocHandler;
831
    pJpiGlobals->pfnArrayAllocHandler = ArrayAllocHandler;
832
    pJpiGlobals->pfnThreadInteractionHandler = ThreadInteractionHandler;
816
833
817
    return MRTE_RESULT_OK;
834
    return MRTE_RESULT_OK;
818
}
835
}
Lines 1022-1027 Link Here
1022
    {
1039
    {
1023
    case EG_CALL_GRAPH:
1040
    case EG_CALL_GRAPH:
1024
    case EG_HEAP:
1041
    case EG_HEAP:
1042
    case EG_THREAD_INTERACTION:
1025
        if (!m_pJavaInterface->GetCapabilities()->Enabled(
1043
        if (!m_pJavaInterface->GetCapabilities()->Enabled(
1026
            CT_CAN_ENABLE_OR_DISABLE_BCI_GENERATED_EVENTS))
1044
            CT_CAN_ENABLE_OR_DISABLE_BCI_GENERATED_EVENTS))
1027
        {
1045
        {
Lines 1518-1520 Link Here
1518
{
1536
{
1519
    InternalObjectAllocHandler(env, self, obj, objClass, methodId, loc, true /* isArray */);
1537
    InternalObjectAllocHandler(env, self, obj, objClass, methodId, loc, true /* isArray */);
1520
}
1538
}
1539
1540
1541
// 
1542
// Callback function for handling thread interactions called by instrumentation (through the ThreadProxy Java
1543
// class)
1544
//
1545
extern "C" void JNICALL ThreadInteractionHandler(JNIEnv *pJniEnv, jclass self, jobject obj, jint methodID)
1546
{
1547
    if (s_pEM->IsVMShutdownReceived())
1548
    {
1549
        return;
1550
    }
1551
1552
    CEventManager::SEmEventInfo *pEventInfoList = s_pEM->GetEventInfoList();
1553
    static CDataManager *s_pDataManager = s_pEM->GetDM();
1554
	static CObjectInfoManager *s_pObjectInfoManager = s_pDataManager->GetObjectInfoManager();
1555
1556
    MARTINI_ASSERT("EventManager", pEventInfoList, "");
1557
    CEventManager::SEmEventInfo& pEventInfo = pEventInfoList[EV_THREAD_INTERACTION];
1558
1559
    // Tag the object
1560
    jlong tag;
1561
    TId objectId;
1562
    if (MRTE_FAILED(s_pObjectInfoManager->CreateTag(&objectId, &tag, obj, 
1563
        pJniEnv, true /* bSaveInDb */)))
1564
    {
1565
        // Cannot tag the object. Do not report the event
1566
        MARTINI_INFORMATIVE("InternalObjectAllocHandler", 0, false, 
1567
            "failed to allocate object id");
1568
        return;
1569
    }
1570
1571
    // Notify the event
1572
    SMpiInternalData mpiData;
1573
    mpiData.pObjectTag = s_pObjectInfoManager->GetTagInfo(tag);
1574
    mpiData.interactionType = methodID;
1575
1576
    SEmData eventData;
1577
    eventData.dataType = MPI_INTERNAL;
1578
    eventData.pJniEnv = pJniEnv;
1579
    eventData.u.pMpiData = &mpiData;
1580
    s_pEM->NotifyMpiEvent(Martini::MPI::EV_THREAD_INTERACTION, &eventData);
1581
}
1582
1583
(-)src-native/src/Martini/Infrastructure/JPI/JpiGlobals.h (+5 lines)
Lines 18-23 Link Here
18
18
19
#include "CGAdaptor.h"
19
#include "CGAdaptor.h"
20
#include "HeapAdaptor.h"
20
#include "HeapAdaptor.h"
21
#include "ThreadAdaptor.h"
21
#include "IJVM.h"
22
#include "IJVM.h"
22
#include "DataManager.h"
23
#include "DataManager.h"
23
#include "OSA.h"
24
#include "OSA.h"
Lines 115-120 Link Here
115
        HeapAdaptor::TObjectAllocHandler pfnObjectAllocHandler;
116
        HeapAdaptor::TObjectAllocHandler pfnObjectAllocHandler;
116
        HeapAdaptor::TArrayAllocHandler pfnArrayAllocHandler;
117
        HeapAdaptor::TArrayAllocHandler pfnArrayAllocHandler;
117
118
119
        // Call for thread interaction method callbacks
120
        ThreadAdaptor::TThreadInteractionHandler pfnThreadInteractionHandler;
121
122
118
        // JVM Interface
123
        // JVM Interface
119
        IJVM* pJvmInterface;
124
        IJVM* pJvmInterface;
120
125
(-)src-native/src/Martini/Infrastructure/JPI/EventDispatcher.cpp (+41 lines)
Lines 922-927 Link Here
922
        return;
922
        return;
923
    }
923
    }
924
924
925
    monWaitedData.isTimedOut  = pJvmData->u.monitorWaited.bTimedOut;
926
    monWaitedData.validData  |= DR_MONITOR_TIMED_OUT;
927
925
    IMonitorWaitedEventObserver *pConcreteObserver = (IMonitorWaitedEventObserver*)pObserver;
928
    IMonitorWaitedEventObserver *pConcreteObserver = (IMonitorWaitedEventObserver*)pObserver;
926
    pConcreteObserver->HandleEvent(monWaitedData);
929
    pConcreteObserver->HandleEvent(monWaitedData);
927
}
930
}
Lines 995-1000 Link Here
995
    pConcreteObserver->HandleEvent(monEnteredData);
998
    pConcreteObserver->HandleEvent(monEnteredData);
996
}
999
}
997
1000
1001
1002
1003
//////////////////////////////////////////////////////////////////////////
1004
// CCallNotifyEventDispatcher
1005
void CThreadInteractionEventDispatcher::Notify(SEmData *pData, 
1006
                                               IEventObserver *pObserver,
1007
                                               BitSet dataItems)
1008
{
1009
1010
    // Event triggered by instrumentation
1011
    MARTINI_ASSERT("EventDispatcher", MPI_INTERNAL == pData->dataType, "");
1012
1013
    SThreadInteractionEventData callThreadInteraction;
1014
    callThreadInteraction.validData = DR_NONE;
1015
    CDataManager *pDataManager = m_pEventManager->GetDM();
1016
1017
    if (DR_CONTAINS_OBJECT_ID(dataItems))
1018
    {
1019
        callThreadInteraction.objectId   = pData->u.pMpiData->pObjectTag->jobjectInfo.objectId;
1020
        callThreadInteraction.validData |= DR_OBJECT_ID;
1021
    }
1022
    if (DR_CONTAINS_THREAD_ID(dataItems)) 
1023
    {
1024
        callThreadInteraction.threadId = GetThreadIdFromTls(pData->pJniEnv, pDataManager, NULL);
1025
        callThreadInteraction.validData |= DR_THREAD_ID;
1026
    }
1027
    if (DR_CONTAINS_THREAD_INTERACTION_TYPE(dataItems))
1028
    {
1029
        callThreadInteraction.interactionType = (EThreadInteractionType)pData->u.pMpiData->interactionType;
1030
        callThreadInteraction.validData |= DR_THREAD_INTERACTION_TYPE;
1031
    }
1032
1033
1034
    IThreadInteractionEventObserver *pConcreteObserver = (IThreadInteractionEventObserver*)pObserver;
1035
    pConcreteObserver->HandleEvent(callThreadInteraction);
1036
}
1037
1038
998
//////////////////////////////////////////////////////////////////////////
1039
//////////////////////////////////////////////////////////////////////////
999
// CJavaClassFileLoadHookEventDispatcher
1040
// CJavaClassFileLoadHookEventDispatcher
1000
1041
(-)src-native/src/Martini/Infrastructure/JPI/EventManager.h (+5 lines)
Lines 163-168 Link Here
163
        SEmEventInfo *GetEventInfoList() {return m_vEventInfo;};
163
        SEmEventInfo *GetEventInfoList() {return m_vEventInfo;};
164
        unsigned int GetMethodEnterDataType() {return m_methodEnterDataRequestType;};
164
        unsigned int GetMethodEnterDataType() {return m_methodEnterDataRequestType;};
165
        unsigned int GetMethodLeaveDataType() {return m_methodLeaveDataRequestType;};
165
        unsigned int GetMethodLeaveDataType() {return m_methodLeaveDataRequestType;};
166
        unsigned int GetThreadInteractionDataType() {return m_threadInteractionDataRequestType;};
166
        CDataManager *GetDM() {return m_pDataManager;};
167
        CDataManager *GetDM() {return m_pDataManager;};
167
        IJVM* GetJVMInterface() { return m_pJavaInterface; }
168
        IJVM* GetJVMInterface() { return m_pJavaInterface; }
168
        void InitializationPhaseCompleted(){m_bIsInitialiazationCompleted = true;};
169
        void InitializationPhaseCompleted(){m_bIsInitialiazationCompleted = true;};
Lines 258-263 Link Here
258
        unsigned int m_newMethodDataRequestType;
259
        unsigned int m_newMethodDataRequestType;
259
        unsigned int m_methodEnterDataRequestType;
260
        unsigned int m_methodEnterDataRequestType;
260
        unsigned int m_methodLeaveDataRequestType;
261
        unsigned int m_methodLeaveDataRequestType;
262
        unsigned int m_threadInteractionDataRequestType;
261
263
262
        // flag indicating if profilers intialization phase is complete
264
        // flag indicating if profilers intialization phase is complete
263
        bool m_bIsInitialiazationCompleted;
265
        bool m_bIsInitialiazationCompleted;
Lines 300-303 Link Here
300
                                          jint methodId, 
302
                                          jint methodId, 
301
                                          jlong loc);
303
                                          jlong loc);
302
304
305
extern "C" void JNICALL ThreadInteractionHandler(JNIEnv *env, jclass self,
306
                                                 jobject obj, jint methodID);
307
303
#endif
308
#endif
(-)src-native/build/BuildMartiniEM64T.mak (-4 / +42 lines)
Lines 36-47 Link Here
36
36
37
!ELSE 
37
!ELSE 
38
38
39
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" 
39
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" 
40
40
41
!ENDIF 
41
!ENDIF 
42
42
43
!IF "$(RECURSE)" == "1" 
43
!IF "$(RECURSE)" == "1" 
44
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" 
44
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" 
45
!ELSE 
45
!ELSE 
46
CLEAN :
46
CLEAN :
47
!ENDIF 
47
!ENDIF 
Lines 66-77 Link Here
66
66
67
!ELSE 
67
!ELSE 
68
68
69
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" 
69
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"
70
70
71
!ENDIF 
71
!ENDIF 
72
72
73
!IF "$(RECURSE)" == "1" 
73
!IF "$(RECURSE)" == "1" 
74
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" 
74
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" 
75
!ELSE 
75
!ELSE 
76
CLEAN :
76
CLEAN :
77
!ENDIF 
77
!ENDIF 
Lines 366-371 Link Here
366
366
367
!ENDIF 
367
!ENDIF 
368
368
369
!IF  "$(CFG)" == "BuildMartiniEM64T - Win32 EM64T Debug"
370
371
"ThreadAdaptor - Win32 EM64T Debug" : 
372
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
373
	echo MAKE PROJECT ThreadAdaptor
374
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Debug" 
375
	echo DONE PROJECT ThreadAdaptor
376
	echo .
377
   cd "..\..\..\..\build"
378
379
"ThreadAdaptor - Win32 EM64T DebugCLEAN" : 
380
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
381
	echo MAKE PROJECT ThreadAdaptor
382
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Debug" RECURSE=1 CLEAN 
383
	echo DONE PROJECT ThreadAdaptor
384
	echo .
385
   cd "..\..\..\..\build"
386
387
!ELSEIF  "$(CFG)" == "BuildMartiniEM64T - Win32 EM64T Release"
388
389
"ThreadAdaptor - Win32 EM64T Release" : 
390
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
391
	echo MAKE PROJECT ThreadAdaptor
392
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Release" 
393
	echo DONE PROJECT ThreadAdaptor
394
	echo .
395
   cd "..\..\..\..\build"
396
397
"ThreadAdaptor - Win32 EM64T ReleaseCLEAN" : 
398
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
399
	echo MAKE PROJECT ThreadAdaptor
400
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 EM64T Release" RECURSE=1 CLEAN 
401
	echo DONE PROJECT ThreadAdaptor
402
	echo .
403
   cd "..\..\..\..\build"
404
405
!ENDIF 
406
369
407
370
!ENDIF 
408
!ENDIF 
371
409
(-)src-native/build/BuildMartini32.mak (-4 / +30 lines)
Lines 36-47 Link Here
36
36
37
!ELSE 
37
!ELSE 
38
38
39
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" 
39
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"
40
40
41
!ENDIF 
41
!ENDIF 
42
42
43
!IF "$(RECURSE)" == "1" 
43
!IF "$(RECURSE)" == "1" 
44
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" 
44
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"
45
!ELSE 
45
!ELSE 
46
CLEAN :
46
CLEAN :
47
!ENDIF 
47
!ENDIF 
Lines 66-77 Link Here
66
66
67
!ELSE 
67
!ELSE 
68
68
69
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" 
69
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"
70
70
71
!ENDIF 
71
!ENDIF 
72
72
73
!IF "$(RECURSE)" == "1" 
73
!IF "$(RECURSE)" == "1" 
74
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" 
74
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" 
75
!ELSE 
75
!ELSE 
76
CLEAN :
76
CLEAN :
77
!ENDIF 
77
!ENDIF 
Lines 282-287 Link Here
282
282
283
!ENDIF 
283
!ENDIF 
284
284
285
!IF  "$(CFG)" == "BuildMartini32 - Win32 IA32 Debug"
286
287
"ThreadAdaptor - Win32 IA32 Debug" : 
288
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
289
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Debug" 
290
   cd "..\..\..\..\build"
291
292
"HeapAdaptor - Win32 IA32 DebugCLEAN" : 
293
   cd "..\src\Martini\Infrastructure\HeapAdaptor"
294
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Debug" RECURSE=1 CLEAN 
295
   cd "..\..\..\..\build"
296
297
!ELSEIF  "$(CFG)" == "BuildMartini32 - Win32 IA32 Release"
298
299
"ThreadAdaptor - Win32 IA32 Release" : 
300
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
301
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Release" 
302
   cd "..\..\..\..\build"
303
304
"ThreadAdaptor - Win32 IA32 ReleaseCLEAN" : 
305
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
306
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IA32 Release" RECURSE=1 CLEAN 
307
   cd "..\..\..\..\build"
308
309
!ENDIF 
310
285
311
286
!ENDIF 
312
!ENDIF 
287
313
(-)src-native/build/build_tptp_all.script (+1 lines)
Lines 25-27 Link Here
25
bash build_tptp_martini.script $1
25
bash build_tptp_martini.script $1
26
26
27
bash build_tptp_profiler.script $1
27
bash build_tptp_profiler.script $1
28
(-)src-native/build/tptp_martini.dsw (+21 lines)
Lines 32-37 Link Here
32
    Begin Project Dependency
32
    Begin Project Dependency
33
    Project_Dep_Name HeapAdaptor
33
    Project_Dep_Name HeapAdaptor
34
    End Project Dependency
34
    End Project Dependency
35
    Begin Project Dependency
36
    Project_Dep_Name ThreadAdaptor
37
    End Project Dependency
35
}}}
38
}}}
36
39
37
###############################################################################
40
###############################################################################
Lines 153-158 Link Here
153
156
154
###############################################################################
157
###############################################################################
155
158
159
Project: "ThreadAdaptor"="..\src\Martini\Infrastructure\ThreadAdaptor\ThreadAdaptor.dsp" - Package Owner=<4>
160
161
Package=<5>
162
{{{
163
}}}
164
165
Package=<4>
166
{{{
167
    Begin Project Dependency
168
    Project_Dep_Name LibraryLoader
169
    End Project Dependency
170
    Begin Project Dependency
171
    Project_Dep_Name MartiniOSA
172
    End Project Dependency
173
}}}
174
175
###############################################################################
176
156
Global:
177
Global:
157
178
158
Package=<5>
179
Package=<5>
(-)src-native/build/BuildThreadProf32.dsp (+8 lines)
Lines 146-151 Link Here
146
# End Source File
146
# End Source File
147
# Begin Source File
147
# Begin Source File
148
148
149
SOURCE=..\src\ThreadProf\ThreadInteractionEvent.cpp
150
# End Source File
151
# Begin Source File
152
149
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
153
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
150
# End Source File
154
# End Source File
151
# Begin Source File
155
# Begin Source File
Lines 234-239 Link Here
234
# End Source File
238
# End Source File
235
# Begin Source File
239
# Begin Source File
236
240
241
SOURCE=..\src\ThreadProf\ThreadInteractionEvent.h
242
# End Source File
243
# Begin Source File
244
237
SOURCE=..\src\ThreadProf\ThreadProfiler.h
245
SOURCE=..\src\ThreadProf\ThreadProfiler.h
238
# End Source File
246
# End Source File
239
# Begin Source File
247
# Begin Source File
(-)src-native/build/BuildMartiniIPF.mak (-4 / +30 lines)
Lines 36-47 Link Here
36
36
37
!ELSE 
37
!ELSE 
38
38
39
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" 
39
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" 
40
40
41
!ENDIF 
41
!ENDIF 
42
42
43
!IF "$(RECURSE)" == "1" 
43
!IF "$(RECURSE)" == "1" 
44
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" 
44
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" 
45
!ELSE 
45
!ELSE 
46
CLEAN :
46
CLEAN :
47
!ENDIF 
47
!ENDIF 
Lines 66-77 Link Here
66
66
67
!ELSE 
67
!ELSE 
68
68
69
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" 
69
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" 
70
70
71
!ENDIF 
71
!ENDIF 
72
72
73
!IF "$(RECURSE)" == "1" 
73
!IF "$(RECURSE)" == "1" 
74
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" 
74
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" 
75
!ELSE 
75
!ELSE 
76
CLEAN :
76
CLEAN :
77
!ENDIF 
77
!ENDIF 
Lines 282-287 Link Here
282
282
283
!ENDIF 
283
!ENDIF 
284
284
285
!IF  "$(CFG)" == "BuildMartiniIPF - Win32 IPF Debug"
286
287
"ThreadAdaptor - Win32 IPF Debug" : 
288
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
289
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug" 
290
   cd "..\..\..\..\build"
291
292
"ThreadAdaptor - Win32 IPF DebugCLEAN" : 
293
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
294
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug" RECURSE=1 CLEAN 
295
   cd "..\..\..\..\build"
296
297
!ELSEIF  "$(CFG)" == "BuildMartiniIPF - Win32 IPF Release"
298
299
"ThreadAdaptor - Win32 IPF Release" : 
300
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
301
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Release" 
302
   cd "..\..\..\..\build"
303
304
"ThreadAdaptor - Win32 IPF ReleaseCLEAN" : 
305
   cd "..\src\Martini\Infrastructure\ThreadAdaptor"
306
   $(MAKE) /$(MAKEFLAGS) /F ".\ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Release" RECURSE=1 CLEAN 
307
   cd "..\..\..\..\build"
308
309
!ENDIF 
310
285
311
286
!ENDIF 
312
!ENDIF 
287
313
(-)src-native/build/BuildThreadProf32.mak (-90 / +406 lines)
Lines 35-62 Link Here
35
35
36
ALL : "$(OUTDIR)\ThreadProf.dll"
36
ALL : "$(OUTDIR)\ThreadProf.dll"
37
37
38
38
CLEAN :
39
CLEAN :
39
	-@erase "$(INTDIR)\AttachEvent.obj"
40
	-@erase "$(INTDIR)\AttachEvent.obj"
41
	-@erase "$(INTDIR)\BaseProfiler.obj"
42
	-@erase "$(INTDIR)\CallCAMethodEvent.obj"
43
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
44
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
45
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
40
	-@erase "$(INTDIR)\DetachEvent.obj"
46
	-@erase "$(INTDIR)\DetachEvent.obj"
47
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
48
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
49
	-@erase "$(INTDIR)\NewMethodEvent.obj"
50
	-@erase "$(INTDIR)\ProfEnv.obj"
41
	-@erase "$(INTDIR)\StartEvent.obj"
51
	-@erase "$(INTDIR)\StartEvent.obj"
42
	-@erase "$(INTDIR)\StopEvent.obj"
52
	-@erase "$(INTDIR)\StopEvent.obj"
43
	-@erase "$(INTDIR)\VMInitEvent.obj"
44
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
45
	-@erase "$(INTDIR)\Tickets.obj"
46
	-@erase "$(INTDIR)\ProfEnv.obj"
47
	-@erase "$(INTDIR)\BaseProfiler.obj"
48
	-@erase "$(INTDIR)\ThreadProfiler.obj"
49
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
50
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
53
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
54
	-@erase "$(INTDIR)\ThreadProfiler.obj"
51
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
55
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
52
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
56
	-@erase "$(INTDIR)\Tickets.obj"
53
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
54
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
55
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
56
	-@erase "$(INTDIR)\NewMethodEvent.obj"
57
	-@erase "$(INTDIR)\TIdSet.obj"
57
	-@erase "$(INTDIR)\TIdSet.obj"
58
	-@erase "$(INTDIR)\vc*.idb"
58
	-@erase "$(INTDIR)\vc60.idb"
59
	-@erase "$(INTDIR)\BuildThreadProf32.pch"
59
	-@erase "$(INTDIR)\vc60.pdb"
60
	-@erase "$(INTDIR)\VMInitEvent.obj"
61
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
60
	-@erase "$(OUTDIR)\ThreadProf.dll"
62
	-@erase "$(OUTDIR)\ThreadProf.dll"
61
	-@erase "$(OUTDIR)\ThreadProf.exp"
63
	-@erase "$(OUTDIR)\ThreadProf.exp"
62
	-@erase "$(OUTDIR)\ThreadProf.lib"
64
	-@erase "$(OUTDIR)\ThreadProf.lib"
Lines 68-74 Link Here
68
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
70
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
69
71
70
CPP=cl.exe
72
CPP=cl.exe
71
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 
73
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 
72
74
73
.c{$(INTDIR)}.obj::
75
.c{$(INTDIR)}.obj::
74
   $(CPP) @<<
76
   $(CPP) @<<
Lines 108-134 Link Here
108
BSC32_SBRS= \
110
BSC32_SBRS= \
109
	
111
	
110
LINK32=link.exe
112
LINK32=link.exe
111
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" 
113
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" 
112
LINK32_OBJS= \
114
LINK32_OBJS= \
113
	"$(INTDIR)\AttachEvent.obj" \
115
	"$(INTDIR)\AttachEvent.obj" \
116
	"$(INTDIR)\BaseProfiler.obj" \
117
	"$(INTDIR)\CallCAMethodEvent.obj" \
118
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" \
119
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
120
	"$(INTDIR)\CustomCommandEvent.obj" \
114
	"$(INTDIR)\DetachEvent.obj" \
121
	"$(INTDIR)\DetachEvent.obj" \
122
	"$(INTDIR)\MonitorWaitedEvent.obj" \
123
	"$(INTDIR)\MonitorWaitEvent.obj" \
124
	"$(INTDIR)\NewMethodEvent.obj" \
125
	"$(INTDIR)\ProfEnv.obj" \
115
	"$(INTDIR)\StartEvent.obj" \
126
	"$(INTDIR)\StartEvent.obj" \
116
	"$(INTDIR)\StopEvent.obj" \
127
	"$(INTDIR)\StopEvent.obj" \
117
	"$(INTDIR)\VMInitEvent.obj" \
118
	"$(INTDIR)\VMShutdownEvent.obj" \
119
	"$(INTDIR)\Tickets.obj" \
120
	"$(INTDIR)\ProfEnv.obj" \
121
	"$(INTDIR)\TIdSet.obj" \
122
	"$(INTDIR)\BaseProfiler.obj" \
123
	"$(INTDIR)\NewMethodEvent.obj" \
124
	"$(INTDIR)\ThreadProfiler.obj" \
125
	"$(INTDIR)\ThreadEndEvent.obj" \
128
	"$(INTDIR)\ThreadEndEvent.obj" \
126
	"$(INTDIR)\CustomCommandEvent.obj" \
129
	"$(INTDIR)\ThreadProfiler.obj" \
127
	"$(INTDIR)\ThreadStartEvent.obj" \
130
	"$(INTDIR)\ThreadStartEvent.obj" \
128
	"$(INTDIR)\MonitorWaitEvent.obj" \
131
	"$(INTDIR)\Tickets.obj" \
129
	"$(INTDIR)\MonitorWaitedEvent.obj" \
132
	"$(INTDIR)\TIdSet.obj" \
130
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
133
	"$(INTDIR)\VMInitEvent.obj" \
131
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" 
134
	"$(INTDIR)\VMShutdownEvent.obj"
132
135
133
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
136
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
134
    $(LINK32) @<<
137
    $(LINK32) @<<
Lines 143-178 Link Here
143
OutDir=.\..\bin\windows\debug\IA-32
146
OutDir=.\..\bin\windows\debug\IA-32
144
# End Custom Macros
147
# End Custom Macros
145
148
146
ALL : "$(OUTDIR)\ThreadProf.dll"
149
ALL : "$(OUTDIR)\ThreadProf.dll" "$(OUTDIR)\BuildThreadProf32.bsc"
147
150
148
151
149
CLEAN :
152
CLEAN :
150
	-@erase "$(INTDIR)\AttachEvent.obj"
153
	-@erase "$(INTDIR)\AttachEvent.obj"
154
	-@erase "$(INTDIR)\AttachEvent.sbr"
155
	-@erase "$(INTDIR)\BaseProfiler.obj"
156
	-@erase "$(INTDIR)\BaseProfiler.sbr"
157
	-@erase "$(INTDIR)\CallCAMethodEvent.obj"
158
	-@erase "$(INTDIR)\CallCAMethodEvent.sbr"
159
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
160
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.sbr"
161
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
162
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.sbr"
163
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
164
	-@erase "$(INTDIR)\CustomCommandEvent.sbr"
151
	-@erase "$(INTDIR)\DetachEvent.obj"
165
	-@erase "$(INTDIR)\DetachEvent.obj"
166
	-@erase "$(INTDIR)\DetachEvent.sbr"
167
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
168
	-@erase "$(INTDIR)\MonitorWaitedEvent.sbr"
169
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
170
	-@erase "$(INTDIR)\MonitorWaitEvent.sbr"
171
	-@erase "$(INTDIR)\NewMethodEvent.obj"
172
	-@erase "$(INTDIR)\NewMethodEvent.sbr"
173
	-@erase "$(INTDIR)\ProfEnv.obj"
174
	-@erase "$(INTDIR)\ProfEnv.sbr"
152
	-@erase "$(INTDIR)\StartEvent.obj"
175
	-@erase "$(INTDIR)\StartEvent.obj"
176
	-@erase "$(INTDIR)\StartEvent.sbr"
153
	-@erase "$(INTDIR)\StopEvent.obj"
177
	-@erase "$(INTDIR)\StopEvent.obj"
154
	-@erase "$(INTDIR)\VMInitEvent.obj"
178
	-@erase "$(INTDIR)\StopEvent.sbr"
155
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
156
	-@erase "$(INTDIR)\Tickets.obj"
157
	-@erase "$(INTDIR)\ProfEnv.obj"
158
	-@erase "$(INTDIR)\BaseProfiler.obj"
159
	-@erase "$(INTDIR)\ThreadProfiler.obj"
160
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
179
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
161
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
180
	-@erase "$(INTDIR)\ThreadEndEvent.sbr"
181
	-@erase "$(INTDIR)\ThreadProfiler.obj"
182
	-@erase "$(INTDIR)\ThreadProfiler.sbr"
162
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
183
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
163
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
184
	-@erase "$(INTDIR)\ThreadStartEvent.sbr"
164
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
185
	-@erase "$(INTDIR)\Tickets.obj"
165
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
186
	-@erase "$(INTDIR)\Tickets.sbr"
166
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
167
	-@erase "$(INTDIR)\NewMethodEvent.obj"
168
	-@erase "$(INTDIR)\TIdSet.obj"
187
	-@erase "$(INTDIR)\TIdSet.obj"
169
	-@erase "$(INTDIR)\vc*.idb"
188
	-@erase "$(INTDIR)\TIdSet.sbr"
170
	-@erase "$(INTDIR)\vc*.pdb"
189
	-@erase "$(INTDIR)\vc60.idb"
171
	-@erase "$(INTDIR)\BuildThreadProf32.pch"
190
	-@erase "$(INTDIR)\vc60.pdb"
191
	-@erase "$(INTDIR)\VMInitEvent.obj"
192
	-@erase "$(INTDIR)\VMInitEvent.sbr"
193
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
194
	-@erase "$(INTDIR)\VMShutdownEvent.sbr"
195
	-@erase "$(OUTDIR)\BuildThreadProf32.bsc"
172
	-@erase "$(OUTDIR)\ThreadProf.dll"
196
	-@erase "$(OUTDIR)\ThreadProf.dll"
173
	-@erase "$(OUTDIR)\ThreadProf.exp"
197
	-@erase "$(OUTDIR)\ThreadProf.exp"
174
	-@erase "$(OUTDIR)\ThreadProf.lib"
175
	-@erase "$(OUTDIR)\ThreadProf.ilk"
198
	-@erase "$(OUTDIR)\ThreadProf.ilk"
199
	-@erase "$(OUTDIR)\ThreadProf.lib"
200
	-@erase "$(OUTDIR)\ThreadProf.pdb"
176
201
177
"$(OUTDIR)" :
202
"$(OUTDIR)" :
178
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
203
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
Lines 181-187 Link Here
181
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
206
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
182
207
183
CPP=cl.exe
208
CPP=cl.exe
184
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 
209
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 
185
210
186
.c{$(INTDIR)}.obj::
211
.c{$(INTDIR)}.obj::
187
   $(CPP) @<<
212
   $(CPP) @<<
Lines 219-247 Link Here
219
BSC32=bscmake.exe
244
BSC32=bscmake.exe
220
BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProf32.bsc" 
245
BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProf32.bsc" 
221
BSC32_SBRS= \
246
BSC32_SBRS= \
222
	
247
	"$(INTDIR)\AttachEvent.sbr" \
248
	"$(INTDIR)\BaseProfiler.sbr" \
249
	"$(INTDIR)\CallCAMethodEvent.sbr" \
250
	"$(INTDIR)\ContendedMonitorEnteredEvent.sbr" \
251
	"$(INTDIR)\ContendedMonitorEnterEvent.sbr" \
252
	"$(INTDIR)\CustomCommandEvent.sbr" \
253
	"$(INTDIR)\DetachEvent.sbr" \
254
	"$(INTDIR)\MonitorWaitedEvent.sbr" \
255
	"$(INTDIR)\MonitorWaitEvent.sbr" \
256
	"$(INTDIR)\NewMethodEvent.sbr" \
257
	"$(INTDIR)\ProfEnv.sbr" \
258
	"$(INTDIR)\StartEvent.sbr" \
259
	"$(INTDIR)\StopEvent.sbr" \
260
	"$(INTDIR)\ThreadEndEvent.sbr" \
261
	"$(INTDIR)\ThreadProfiler.sbr" \
262
	"$(INTDIR)\ThreadStartEvent.sbr" \
263
	"$(INTDIR)\Tickets.sbr" \
264
	"$(INTDIR)\TIdSet.sbr" \
265
	"$(INTDIR)\VMInitEvent.sbr" \
266
	"$(INTDIR)\VMShutdownEvent.sbr"
267
268
"$(OUTDIR)\BuildThreadProf32.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
269
    $(BSC32) @<<
270
  $(BSC32_FLAGS) $(BSC32_SBRS)
271
<<
272
223
LINK32=link.exe
273
LINK32=link.exe
224
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" 
274
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" 
225
LINK32_OBJS= \
275
LINK32_OBJS= \
226
	"$(INTDIR)\AttachEvent.obj" \
276
	"$(INTDIR)\AttachEvent.obj" \
277
	"$(INTDIR)\BaseProfiler.obj" \
278
	"$(INTDIR)\CallCAMethodEvent.obj" \
279
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" \
280
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
281
	"$(INTDIR)\CustomCommandEvent.obj" \
227
	"$(INTDIR)\DetachEvent.obj" \
282
	"$(INTDIR)\DetachEvent.obj" \
283
	"$(INTDIR)\MonitorWaitedEvent.obj" \
284
	"$(INTDIR)\MonitorWaitEvent.obj" \
285
	"$(INTDIR)\NewMethodEvent.obj" \
286
	"$(INTDIR)\ProfEnv.obj" \
228
	"$(INTDIR)\StartEvent.obj" \
287
	"$(INTDIR)\StartEvent.obj" \
229
	"$(INTDIR)\StopEvent.obj" \
288
	"$(INTDIR)\StopEvent.obj" \
230
	"$(INTDIR)\VMInitEvent.obj" \
231
	"$(INTDIR)\VMShutdownEvent.obj" \
232
	"$(INTDIR)\Tickets.obj" \
233
	"$(INTDIR)\ProfEnv.obj" \
234
	"$(INTDIR)\TIdSet.obj" \
235
	"$(INTDIR)\BaseProfiler.obj" \
236
	"$(INTDIR)\NewMethodEvent.obj" \
237
	"$(INTDIR)\ThreadProfiler.obj" \
238
	"$(INTDIR)\ThreadEndEvent.obj" \
289
	"$(INTDIR)\ThreadEndEvent.obj" \
239
	"$(INTDIR)\CustomCommandEvent.obj" \
290
	"$(INTDIR)\ThreadProfiler.obj" \
240
	"$(INTDIR)\ThreadStartEvent.obj" \
291
	"$(INTDIR)\ThreadStartEvent.obj" \
241
	"$(INTDIR)\MonitorWaitEvent.obj" \
292
	"$(INTDIR)\Tickets.obj" \
242
	"$(INTDIR)\MonitorWaitedEvent.obj" \
293
	"$(INTDIR)\TIdSet.obj" \
243
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
294
	"$(INTDIR)\VMInitEvent.obj" \
244
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" 
295
	"$(INTDIR)\VMShutdownEvent.obj"
245
296
246
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
297
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
247
    $(LINK32) @<<
298
    $(LINK32) @<<
Lines 261-361 Link Here
261
312
262
313
263
!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" || "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
314
!IF "$(CFG)" == "BuildThreadProf32 - Win32 Release" || "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
264
265
SOURCE=..\src\BaseProf\AttachEvent.cpp
315
SOURCE=..\src\BaseProf\AttachEvent.cpp
266
316
317
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
318
319
267
"$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)"
320
"$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)"
268
	$(CPP) $(CPP_PROJ) $(SOURCE)
321
	$(CPP) $(CPP_PROJ) $(SOURCE)
269
322
323
324
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
325
326
327
"$(INTDIR)\AttachEvent.obj"	"$(INTDIR)\AttachEvent.sbr" : $(SOURCE) "$(INTDIR)"
328
	$(CPP) $(CPP_PROJ) $(SOURCE)
329
330
331
!ENDIF 
332
333
SOURCE=..\src\BaseProf\BaseProfiler.cpp
334
335
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
336
337
338
"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)"
339
	$(CPP) $(CPP_PROJ) $(SOURCE)
340
341
342
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
343
344
345
"$(INTDIR)\BaseProfiler.obj"	"$(INTDIR)\BaseProfiler.sbr" : $(SOURCE) "$(INTDIR)"
346
	$(CPP) $(CPP_PROJ) $(SOURCE)
347
348
349
!ENDIF 
350
351
SOURCE=..\src\ThreadProf\CallCAMethodEvent.cpp
352
353
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
354
355
356
"$(INTDIR)\CallCAMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
357
	$(CPP) $(CPP_PROJ) $(SOURCE)
358
359
360
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
361
362
363
"$(INTDIR)\CallCAMethodEvent.obj"	"$(INTDIR)\CallCAMethodEvent.sbr" : $(SOURCE) "$(INTDIR)"
364
	$(CPP) $(CPP_PROJ) $(SOURCE)
365
366
367
!ENDIF 
368
369
SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp
370
371
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
372
373
374
"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)"
375
	$(CPP) $(CPP_PROJ) $(SOURCE)
376
377
378
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
379
380
381
"$(INTDIR)\ContendedMonitorEnteredEvent.obj"	"$(INTDIR)\ContendedMonitorEnteredEvent.sbr" : $(SOURCE) "$(INTDIR)"
382
	$(CPP) $(CPP_PROJ) $(SOURCE)
383
384
385
!ENDIF 
386
387
SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp
388
389
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
390
391
392
"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)"
393
	$(CPP) $(CPP_PROJ) $(SOURCE)
394
395
396
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
397
398
399
"$(INTDIR)\ContendedMonitorEnterEvent.obj"	"$(INTDIR)\ContendedMonitorEnterEvent.sbr" : $(SOURCE) "$(INTDIR)"
400
	$(CPP) $(CPP_PROJ) $(SOURCE)
401
402
403
!ENDIF 
404
405
SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp
406
407
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
408
409
410
"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)"
411
	$(CPP) $(CPP_PROJ) $(SOURCE)
412
413
414
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
415
416
417
"$(INTDIR)\CustomCommandEvent.obj"	"$(INTDIR)\CustomCommandEvent.sbr" : $(SOURCE) "$(INTDIR)"
418
	$(CPP) $(CPP_PROJ) $(SOURCE)
419
420
421
!ENDIF 
422
270
SOURCE=..\src\BaseProf\DetachEvent.cpp
423
SOURCE=..\src\BaseProf\DetachEvent.cpp
271
424
425
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
426
427
272
"$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)"
428
"$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)"
273
	$(CPP) $(CPP_PROJ) $(SOURCE)
429
	$(CPP) $(CPP_PROJ) $(SOURCE)
274
430
275
SOURCE=..\src\BaseProf\StartEvent.cpp
276
431
277
"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)"
432
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
433
434
435
"$(INTDIR)\DetachEvent.obj"	"$(INTDIR)\DetachEvent.sbr" : $(SOURCE) "$(INTDIR)"
278
	$(CPP) $(CPP_PROJ) $(SOURCE)
436
	$(CPP) $(CPP_PROJ) $(SOURCE)
279
437
280
SOURCE=..\src\BaseProf\StopEvent.cpp
281
438
282
"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)"
439
!ENDIF 
440
441
SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp
442
443
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
444
445
446
"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)"
283
	$(CPP) $(CPP_PROJ) $(SOURCE)
447
	$(CPP) $(CPP_PROJ) $(SOURCE)
284
448
285
SOURCE=..\src\BaseProf\VMInitEvent.cpp
286
449
287
"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)"
450
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
451
452
453
"$(INTDIR)\MonitorWaitedEvent.obj"	"$(INTDIR)\MonitorWaitedEvent.sbr" : $(SOURCE) "$(INTDIR)"
288
	$(CPP) $(CPP_PROJ) $(SOURCE)
454
	$(CPP) $(CPP_PROJ) $(SOURCE)
289
455
290
SOURCE=..\src\BaseProf\VMShutdownEvent.cpp
291
456
292
"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)"
457
!ENDIF 
458
459
SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp
460
461
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
462
463
464
"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)"
293
	$(CPP) $(CPP_PROJ) $(SOURCE)
465
	$(CPP) $(CPP_PROJ) $(SOURCE)
294
466
295
SOURCE=..\src\BaseProf\Tickets.cpp
296
467
297
"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)"
468
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
469
470
471
"$(INTDIR)\MonitorWaitEvent.obj"	"$(INTDIR)\MonitorWaitEvent.sbr" : $(SOURCE) "$(INTDIR)"
472
	$(CPP) $(CPP_PROJ) $(SOURCE)
473
474
475
!ENDIF 
476
477
SOURCE=..\src\ThreadProf\NewMethodEvent.cpp
478
479
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
480
481
482
"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
483
	$(CPP) $(CPP_PROJ) $(SOURCE)
484
485
486
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
487
488
489
"$(INTDIR)\NewMethodEvent.obj"	"$(INTDIR)\NewMethodEvent.sbr" : $(SOURCE) "$(INTDIR)"
298
	$(CPP) $(CPP_PROJ) $(SOURCE)
490
	$(CPP) $(CPP_PROJ) $(SOURCE)
299
491
492
493
!ENDIF 
494
300
SOURCE=..\src\BaseProf\ProfEnv.cpp
495
SOURCE=..\src\BaseProf\ProfEnv.cpp
301
496
497
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
498
499
302
"$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)"
500
"$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)"
303
	$(CPP) $(CPP_PROJ) $(SOURCE)
501
	$(CPP) $(CPP_PROJ) $(SOURCE)
304
502
305
SOURCE=..\src\BaseProf\BaseProfiler.cpp
306
503
307
"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)"
504
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
505
506
507
"$(INTDIR)\ProfEnv.obj"	"$(INTDIR)\ProfEnv.sbr" : $(SOURCE) "$(INTDIR)"
308
	$(CPP) $(CPP_PROJ) $(SOURCE)
508
	$(CPP) $(CPP_PROJ) $(SOURCE)
309
509
310
SOURCE=..\src\ThreadProf\NewMethodEvent.cpp
311
510
312
"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
511
!ENDIF 
512
513
SOURCE=..\src\BaseProf\StartEvent.cpp
514
515
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
516
517
518
"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)"
313
	$(CPP) $(CPP_PROJ) $(SOURCE)
519
	$(CPP) $(CPP_PROJ) $(SOURCE)
314
520
315
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
316
521
317
"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)"
522
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
523
524
525
"$(INTDIR)\StartEvent.obj"	"$(INTDIR)\StartEvent.sbr" : $(SOURCE) "$(INTDIR)"
318
	$(CPP) $(CPP_PROJ) $(SOURCE)
526
	$(CPP) $(CPP_PROJ) $(SOURCE)
319
527
528
529
!ENDIF 
530
531
SOURCE=..\src\BaseProf\StopEvent.cpp
532
533
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
534
535
536
"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)"
537
	$(CPP) $(CPP_PROJ) $(SOURCE)
538
539
540
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
541
542
543
"$(INTDIR)\StopEvent.obj"	"$(INTDIR)\StopEvent.sbr" : $(SOURCE) "$(INTDIR)"
544
	$(CPP) $(CPP_PROJ) $(SOURCE)
545
546
547
!ENDIF 
548
320
SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp
549
SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp
321
550
551
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
552
553
322
"$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)"
554
"$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)"
323
	$(CPP) $(CPP_PROJ) $(SOURCE)
555
	$(CPP) $(CPP_PROJ) $(SOURCE)
324
556
325
SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp
326
557
327
"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)"
558
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
559
560
561
"$(INTDIR)\ThreadEndEvent.obj"	"$(INTDIR)\ThreadEndEvent.sbr" : $(SOURCE) "$(INTDIR)"
562
	$(CPP) $(CPP_PROJ) $(SOURCE)
563
564
565
!ENDIF 
566
567
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
568
569
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
570
571
572
"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)"
573
	$(CPP) $(CPP_PROJ) $(SOURCE)
574
575
576
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
577
578
579
"$(INTDIR)\ThreadProfiler.obj"	"$(INTDIR)\ThreadProfiler.sbr" : $(SOURCE) "$(INTDIR)"
328
	$(CPP) $(CPP_PROJ) $(SOURCE)
580
	$(CPP) $(CPP_PROJ) $(SOURCE)
329
581
582
583
!ENDIF 
584
330
SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp
585
SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp
331
586
587
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
588
589
332
"$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)"
590
"$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)"
333
	$(CPP) $(CPP_PROJ) $(SOURCE)
591
	$(CPP) $(CPP_PROJ) $(SOURCE)
334
592
335
SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp
336
593
337
"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)"
594
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
338
	$(CPP) $(CPP_PROJ) $(SOURCE)
339
595
340
SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp
341
596
342
"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)"
597
"$(INTDIR)\ThreadStartEvent.obj"	"$(INTDIR)\ThreadStartEvent.sbr" : $(SOURCE) "$(INTDIR)"
343
	$(CPP) $(CPP_PROJ) $(SOURCE)
598
	$(CPP) $(CPP_PROJ) $(SOURCE)
344
599
345
SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp
346
600
347
"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)"
601
!ENDIF 
602
603
SOURCE=..\src\BaseProf\Tickets.cpp
604
605
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
606
607
608
"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)"
348
	$(CPP) $(CPP_PROJ) $(SOURCE)
609
	$(CPP) $(CPP_PROJ) $(SOURCE)
349
610
350
SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp
351
611
352
"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)"
612
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
613
614
615
"$(INTDIR)\Tickets.obj"	"$(INTDIR)\Tickets.sbr" : $(SOURCE) "$(INTDIR)"
353
	$(CPP) $(CPP_PROJ) $(SOURCE)
616
	$(CPP) $(CPP_PROJ) $(SOURCE)
354
617
618
619
!ENDIF 
620
355
SOURCE=..\src\BaseProf\TIdSet.cpp
621
SOURCE=..\src\BaseProf\TIdSet.cpp
356
622
623
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
624
625
357
"$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)"
626
"$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)"
358
	$(CPP) $(CPP_PROJ) $(SOURCE)
627
	$(CPP) $(CPP_PROJ) $(SOURCE)
359
628
629
630
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
631
632
633
"$(INTDIR)\TIdSet.obj"	"$(INTDIR)\TIdSet.sbr" : $(SOURCE) "$(INTDIR)"
634
	$(CPP) $(CPP_PROJ) $(SOURCE)
635
636
637
!ENDIF 
638
639
SOURCE=..\src\BaseProf\VMInitEvent.cpp
640
641
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
642
643
644
"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)"
645
	$(CPP) $(CPP_PROJ) $(SOURCE)
646
647
648
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
649
650
651
"$(INTDIR)\VMInitEvent.obj"	"$(INTDIR)\VMInitEvent.sbr" : $(SOURCE) "$(INTDIR)"
652
	$(CPP) $(CPP_PROJ) $(SOURCE)
653
654
655
!ENDIF 
656
657
SOURCE=..\src\BaseProf\VMShutdownEvent.cpp
658
659
!IF  "$(CFG)" == "BuildThreadProf32 - Win32 Release"
660
661
662
"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)"
663
	$(CPP) $(CPP_PROJ) $(SOURCE)
664
665
666
!ELSEIF  "$(CFG)" == "BuildThreadProf32 - Win32 Debug"
667
668
669
"$(INTDIR)\VMShutdownEvent.obj"	"$(INTDIR)\VMShutdownEvent.sbr" : $(SOURCE) "$(INTDIR)"
670
	$(CPP) $(CPP_PROJ) $(SOURCE)
671
672
673
!ENDIF 
674
675
360
!ENDIF 
676
!ENDIF 
361
677
(-)src-native/build/build_tptp_martini.script (+4 lines)
Lines 50-55 Link Here
50
50
51
echo "----------------------------------------------"
51
echo "----------------------------------------------"
52
52
53
make -C ../src/Martini/Infrastructure/ThreadAdaptor -f Makefile $1
54
55
echo "----------------------------------------------"
56
53
make -C ../src/Martini/Infrastructure/JPI -f Makefile $1
57
make -C ../src/Martini/Infrastructure/JPI -f Makefile $1
54
58
55
echo "----------------------------------------------"
59
echo "----------------------------------------------"
(-)src-native/build/BuildThreadProfEM64T.mak (-110 / +470 lines)
Lines 1-4 Link Here
1
# Microsoft Developer Studio Generated NMAKE File, Based on BuildCGProf32.dsp
1
# Microsoft Developer Studio Generated NMAKE File, Based on BuildThreadProfEM64T.dsp
2
!IF "$(CFG)" == ""
2
!IF "$(CFG)" == ""
3
CFG=BuildThreadProfEM64T - Win32 Debug
3
CFG=BuildThreadProfEM64T - Win32 Debug
4
!MESSAGE No configuration specified. Defaulting to BuildThreadProfEM64T - Win32 Debug.
4
!MESSAGE No configuration specified. Defaulting to BuildThreadProfEM64T - Win32 Debug.
Lines 13-20 Link Here
13
!MESSAGE 
13
!MESSAGE 
14
!MESSAGE Possible choices for configuration are:
14
!MESSAGE Possible choices for configuration are:
15
!MESSAGE 
15
!MESSAGE 
16
!MESSAGE "BuildThreadProfEM64T - Win32 Release" (based on "Win32 (EM64T) Dynamic-Link Library")
16
!MESSAGE "BuildThreadProfEM64T - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
17
!MESSAGE "BuildThreadProfEM64T - Win32 Debug" (based on "Win32 (EM64T) Dynamic-Link Library")
17
!MESSAGE "BuildThreadProfEM64T - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
18
!MESSAGE 
18
!MESSAGE 
19
!ERROR An invalid configuration is specified.
19
!ERROR An invalid configuration is specified.
20
!ENDIF 
20
!ENDIF 
Lines 25-32 Link Here
25
NULL=nul
25
NULL=nul
26
!ENDIF 
26
!ENDIF 
27
27
28
CPP=cl.exe
29
30
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
28
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
31
29
32
OUTDIR=.\..\bin\windows\release\EM64T
30
OUTDIR=.\..\bin\windows\release\EM64T
Lines 37-64 Link Here
37
35
38
ALL : "$(OUTDIR)\ThreadProf.dll"
36
ALL : "$(OUTDIR)\ThreadProf.dll"
39
37
38
40
CLEAN :
39
CLEAN :
41
	-@erase "$(INTDIR)\AttachEvent.obj"
40
	-@erase "$(INTDIR)\AttachEvent.obj"
41
	-@erase "$(INTDIR)\BaseProfiler.obj"
42
	-@erase "$(INTDIR)\CallCAMethodEvent.obj"
43
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
44
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
45
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
42
	-@erase "$(INTDIR)\DetachEvent.obj"
46
	-@erase "$(INTDIR)\DetachEvent.obj"
47
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
48
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
49
	-@erase "$(INTDIR)\NewMethodEvent.obj"
50
	-@erase "$(INTDIR)\ProfEnv.obj"
43
	-@erase "$(INTDIR)\StartEvent.obj"
51
	-@erase "$(INTDIR)\StartEvent.obj"
44
	-@erase "$(INTDIR)\StopEvent.obj"
52
	-@erase "$(INTDIR)\StopEvent.obj"
45
	-@erase "$(INTDIR)\VMInitEvent.obj"
46
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
47
	-@erase "$(INTDIR)\Tickets.obj"
48
	-@erase "$(INTDIR)\ProfEnv.obj"
49
	-@erase "$(INTDIR)\BaseProfiler.obj"
50
	-@erase "$(INTDIR)\ThreadProfiler.obj"
51
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
53
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
52
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
54
	-@erase "$(INTDIR)\ThreadProfiler.obj"
53
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
55
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
54
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
56
	-@erase "$(INTDIR)\Tickets.obj"
55
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
56
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
57
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
58
	-@erase "$(INTDIR)\NewMethodEvent.obj"
59
	-@erase "$(INTDIR)\TIdSet.obj"
57
	-@erase "$(INTDIR)\TIdSet.obj"
60
	-@erase "$(INTDIR)\vc*.idb"
58
	-@erase "$(INTDIR)\vc60.idb"
61
	-@erase "$(INTDIR)\BuildThreadProf32.pch"
59
	-@erase "$(INTDIR)\vc60.pdb"
60
	-@erase "$(INTDIR)\VMInitEvent.obj"
61
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
62
	-@erase "$(OUTDIR)\ThreadProf.dll"
62
	-@erase "$(OUTDIR)\ThreadProf.dll"
63
	-@erase "$(OUTDIR)\ThreadProf.exp"
63
	-@erase "$(OUTDIR)\ThreadProf.exp"
64
	-@erase "$(OUTDIR)\ThreadProf.lib"
64
	-@erase "$(OUTDIR)\ThreadProf.lib"
Lines 69-98 Link Here
69
"$(INTDIR)" :
69
"$(INTDIR)" :
70
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
70
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
71
71
72
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 
72
CPP=cl.exe
73
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 
74
75
.c{$(INTDIR)}.obj::
76
   $(CPP) @<<
77
   $(CPP_PROJ) $< 
78
<<
79
80
.cpp{$(INTDIR)}.obj::
81
   $(CPP) @<<
82
   $(CPP_PROJ) $< 
83
<<
84
85
.cxx{$(INTDIR)}.obj::
86
   $(CPP) @<<
87
   $(CPP_PROJ) $< 
88
<<
89
90
.c{$(INTDIR)}.sbr::
91
   $(CPP) @<<
92
   $(CPP_PROJ) $< 
93
<<
94
95
.cpp{$(INTDIR)}.sbr::
96
   $(CPP) @<<
97
   $(CPP_PROJ) $< 
98
<<
99
100
.cxx{$(INTDIR)}.sbr::
101
   $(CPP) @<<
102
   $(CPP_PROJ) $< 
103
<<
104
105
MTL=midl.exe
106
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
107
RSC=rc.exe
108
BSC32=bscmake.exe
109
BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfEM64T.bsc" 
110
BSC32_SBRS= \
73
	
111
	
74
LINKEM64T=link.exe
112
LINKEM64T=link.exe
75
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" 
113
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" 
76
LINKEM64T_OBJS= \
114
LINKEM64T_OBJS= \
77
	"$(INTDIR)\AttachEvent.obj" \
115
	"$(INTDIR)\AttachEvent.obj" \
116
	"$(INTDIR)\BaseProfiler.obj" \
117
	"$(INTDIR)\CallCAMethodEvent.obj" \
118
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" \
119
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
120
	"$(INTDIR)\CustomCommandEvent.obj" \
78
	"$(INTDIR)\DetachEvent.obj" \
121
	"$(INTDIR)\DetachEvent.obj" \
122
	"$(INTDIR)\MonitorWaitedEvent.obj" \
123
	"$(INTDIR)\MonitorWaitEvent.obj" \
124
	"$(INTDIR)\NewMethodEvent.obj" \
125
	"$(INTDIR)\ProfEnv.obj" \
79
	"$(INTDIR)\StartEvent.obj" \
126
	"$(INTDIR)\StartEvent.obj" \
80
	"$(INTDIR)\StopEvent.obj" \
127
	"$(INTDIR)\StopEvent.obj" \
81
	"$(INTDIR)\VMInitEvent.obj" \
82
	"$(INTDIR)\VMShutdownEvent.obj" \
83
	"$(INTDIR)\Tickets.obj" \
84
	"$(INTDIR)\ProfEnv.obj" \
85
	"$(INTDIR)\TIdSet.obj" \
86
	"$(INTDIR)\NewMethodEvent.obj" \
87
	"$(INTDIR)\BaseProfiler.obj" \
88
	"$(INTDIR)\ThreadProfiler.obj" \
89
	"$(INTDIR)\ThreadEndEvent.obj" \
128
	"$(INTDIR)\ThreadEndEvent.obj" \
90
	"$(INTDIR)\CustomCommandEvent.obj" \
129
	"$(INTDIR)\ThreadProfiler.obj" \
91
	"$(INTDIR)\ThreadStartEvent.obj" \
130
	"$(INTDIR)\ThreadStartEvent.obj" \
92
	"$(INTDIR)\MonitorWaitEvent.obj" \
131
	"$(INTDIR)\Tickets.obj" \
93
	"$(INTDIR)\MonitorWaitedEvent.obj" \
132
	"$(INTDIR)\TIdSet.obj" \
94
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
133
	"$(INTDIR)\VMInitEvent.obj" \
95
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" 
134
	"$(INTDIR)\VMShutdownEvent.obj"
96
135
97
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS)
136
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS)
98
    $(LINKEM64T) @<<
137
    $(LINKEM64T) @<<
Lines 107-142 Link Here
107
OutDir=.\..\bin\windows\debug\EM64T
146
OutDir=.\..\bin\windows\debug\EM64T
108
# End Custom Macros
147
# End Custom Macros
109
148
110
ALL : "$(OUTDIR)\ThreadProf.dll"
149
ALL : "$(OUTDIR)\ThreadProf.dll" "$(OUTDIR)\BuildThreadProfEM64T.bsc"
111
150
112
151
113
CLEAN :
152
CLEAN :
114
	-@erase "$(INTDIR)\AttachEvent.obj"
153
	-@erase "$(INTDIR)\AttachEvent.obj"
154
	-@erase "$(INTDIR)\AttachEvent.sbr"
155
	-@erase "$(INTDIR)\BaseProfiler.obj"
156
	-@erase "$(INTDIR)\BaseProfiler.sbr"
157
	-@erase "$(INTDIR)\CallCAMethodEvent.obj"
158
	-@erase "$(INTDIR)\CallCAMethodEvent.sbr"
159
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
160
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.sbr"
161
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
162
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.sbr"
163
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
164
	-@erase "$(INTDIR)\CustomCommandEvent.sbr"
115
	-@erase "$(INTDIR)\DetachEvent.obj"
165
	-@erase "$(INTDIR)\DetachEvent.obj"
166
	-@erase "$(INTDIR)\DetachEvent.sbr"
167
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
168
	-@erase "$(INTDIR)\MonitorWaitedEvent.sbr"
169
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
170
	-@erase "$(INTDIR)\MonitorWaitEvent.sbr"
171
	-@erase "$(INTDIR)\NewMethodEvent.obj"
172
	-@erase "$(INTDIR)\NewMethodEvent.sbr"
173
	-@erase "$(INTDIR)\ProfEnv.obj"
174
	-@erase "$(INTDIR)\ProfEnv.sbr"
116
	-@erase "$(INTDIR)\StartEvent.obj"
175
	-@erase "$(INTDIR)\StartEvent.obj"
176
	-@erase "$(INTDIR)\StartEvent.sbr"
117
	-@erase "$(INTDIR)\StopEvent.obj"
177
	-@erase "$(INTDIR)\StopEvent.obj"
118
	-@erase "$(INTDIR)\VMInitEvent.obj"
178
	-@erase "$(INTDIR)\StopEvent.sbr"
119
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
120
	-@erase "$(INTDIR)\Tickets.obj"
121
	-@erase "$(INTDIR)\ProfEnv.obj"
122
	-@erase "$(INTDIR)\BaseProfiler.obj"
123
	-@erase "$(INTDIR)\ThreadProfiler.obj"
124
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
179
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
125
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
180
	-@erase "$(INTDIR)\ThreadEndEvent.sbr"
181
	-@erase "$(INTDIR)\ThreadProfiler.obj"
182
	-@erase "$(INTDIR)\ThreadProfiler.sbr"
126
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
183
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
127
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
184
	-@erase "$(INTDIR)\ThreadStartEvent.sbr"
128
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
185
	-@erase "$(INTDIR)\Tickets.obj"
129
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
186
	-@erase "$(INTDIR)\Tickets.sbr"
130
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
131
	-@erase "$(INTDIR)\NewMethodEvent.obj"
132
	-@erase "$(INTDIR)\TIdSet.obj"
187
	-@erase "$(INTDIR)\TIdSet.obj"
133
	-@erase "$(INTDIR)\vc*.idb"
188
	-@erase "$(INTDIR)\TIdSet.sbr"
134
	-@erase "$(INTDIR)\vc*.pdb"
189
	-@erase "$(INTDIR)\vc60.idb"
135
	-@erase "$(INTDIR)\BuildThreadProf32.pch"
190
	-@erase "$(INTDIR)\vc60.pdb"
191
	-@erase "$(INTDIR)\VMInitEvent.obj"
192
	-@erase "$(INTDIR)\VMInitEvent.sbr"
193
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
194
	-@erase "$(INTDIR)\VMShutdownEvent.sbr"
195
	-@erase "$(OUTDIR)\BuildThreadProfEM64T.bsc"
136
	-@erase "$(OUTDIR)\ThreadProf.dll"
196
	-@erase "$(OUTDIR)\ThreadProf.dll"
137
	-@erase "$(OUTDIR)\ThreadProf.exp"
197
	-@erase "$(OUTDIR)\ThreadProf.exp"
138
	-@erase "$(OUTDIR)\ThreadProf.lib"
139
	-@erase "$(OUTDIR)\ThreadProf.ilk"
198
	-@erase "$(OUTDIR)\ThreadProf.ilk"
199
	-@erase "$(OUTDIR)\ThreadProf.lib"
200
	-@erase "$(OUTDIR)\ThreadProf.pdb"
140
201
141
"$(OUTDIR)" :
202
"$(OUTDIR)" :
142
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
203
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
Lines 144-180 Link Here
144
"$(INTDIR)" :
205
"$(INTDIR)" :
145
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
206
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
146
207
147
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 
208
CPP=cl.exe
148
	
209
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 
149
LINKEM64T=link.exe
150
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" 
151
LINKEM64T_OBJS= \
152
	"$(INTDIR)\AttachEvent.obj" \
153
	"$(INTDIR)\DetachEvent.obj" \
154
	"$(INTDIR)\StartEvent.obj" \
155
	"$(INTDIR)\StopEvent.obj" \
156
	"$(INTDIR)\VMInitEvent.obj" \
157
	"$(INTDIR)\VMShutdownEvent.obj" \
158
	"$(INTDIR)\Tickets.obj" \
159
	"$(INTDIR)\ProfEnv.obj" \
160
	"$(INTDIR)\TIdSet.obj" \
161
	"$(INTDIR)\NewMethodEvent.obj" \
162
	"$(INTDIR)\BaseProfiler.obj" \
163
	"$(INTDIR)\ThreadProfiler.obj" \
164
	"$(INTDIR)\ThreadEndEvent.obj" \
165
	"$(INTDIR)\CustomCommandEvent.obj" \
166
	"$(INTDIR)\ThreadStartEvent.obj" \
167
	"$(INTDIR)\MonitorWaitEvent.obj" \
168
	"$(INTDIR)\MonitorWaitedEvent.obj" \
169
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
170
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" 
171
172
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS)
173
    $(LINKEM64T) @<<
174
  $(LINKEM64T_FLAGS) $(LINKEM64T_OBJS)
175
<<
176
177
!ENDIF 
178
210
179
.c{$(INTDIR)}.obj::
211
.c{$(INTDIR)}.obj::
180
   $(CPP) @<<
212
   $(CPP) @<<
Lines 206-211 Link Here
206
   $(CPP_PROJ) $< 
238
   $(CPP_PROJ) $< 
207
<<
239
<<
208
240
241
MTL=midl.exe
242
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
243
RSC=rc.exe
244
BSC32=bscmake.exe
245
BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfEM64T.bsc" 
246
BSC32_SBRS= \
247
	"$(INTDIR)\AttachEvent.sbr" \
248
	"$(INTDIR)\BaseProfiler.sbr" \
249
	"$(INTDIR)\CallCAMethodEvent.sbr" \
250
	"$(INTDIR)\ContendedMonitorEnteredEvent.sbr" \
251
	"$(INTDIR)\ContendedMonitorEnterEvent.sbr" \
252
	"$(INTDIR)\CustomCommandEvent.sbr" \
253
	"$(INTDIR)\DetachEvent.sbr" \
254
	"$(INTDIR)\MonitorWaitedEvent.sbr" \
255
	"$(INTDIR)\MonitorWaitEvent.sbr" \
256
	"$(INTDIR)\NewMethodEvent.sbr" \
257
	"$(INTDIR)\ProfEnv.sbr" \
258
	"$(INTDIR)\StartEvent.sbr" \
259
	"$(INTDIR)\StopEvent.sbr" \
260
	"$(INTDIR)\ThreadEndEvent.sbr" \
261
	"$(INTDIR)\ThreadProfiler.sbr" \
262
	"$(INTDIR)\ThreadStartEvent.sbr" \
263
	"$(INTDIR)\Tickets.sbr" \
264
	"$(INTDIR)\TIdSet.sbr" \
265
	"$(INTDIR)\VMInitEvent.sbr" \
266
	"$(INTDIR)\VMShutdownEvent.sbr"
267
268
"$(OUTDIR)\BuildThreadProfEM64T.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
269
    $(BSC32) @<<
270
  $(BSC32_FLAGS) $(BSC32_SBRS)
271
<<
272
273
LINKEM64T=link.exe
274
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" 
275
LINKEM64T_OBJS= \
276
	"$(INTDIR)\AttachEvent.obj" \
277
	"$(INTDIR)\BaseProfiler.obj" \
278
	"$(INTDIR)\CallCAMethodEvent.obj" \
279
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" \
280
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
281
	"$(INTDIR)\CustomCommandEvent.obj" \
282
	"$(INTDIR)\DetachEvent.obj" \
283
	"$(INTDIR)\MonitorWaitedEvent.obj" \
284
	"$(INTDIR)\MonitorWaitEvent.obj" \
285
	"$(INTDIR)\NewMethodEvent.obj" \
286
	"$(INTDIR)\ProfEnv.obj" \
287
	"$(INTDIR)\StartEvent.obj" \
288
	"$(INTDIR)\StopEvent.obj" \
289
	"$(INTDIR)\ThreadEndEvent.obj" \
290
	"$(INTDIR)\ThreadProfiler.obj" \
291
	"$(INTDIR)\ThreadStartEvent.obj" \
292
	"$(INTDIR)\Tickets.obj" \
293
	"$(INTDIR)\TIdSet.obj" \
294
	"$(INTDIR)\VMInitEvent.obj" \
295
	"$(INTDIR)\VMShutdownEvent.obj"
296
297
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKEM64T_OBJS)
298
    $(LINKEM64T) @<<
299
  $(LINKEM64T_FLAGS) $(LINKEM64T_OBJS)
300
<<
301
302
!ENDIF 
303
209
304
210
!IF "$(NO_EXTERNAL_DEPS)" != "1"
305
!IF "$(NO_EXTERNAL_DEPS)" != "1"
211
!IF EXISTS("BuildThreadProfEM64T.dep")
306
!IF EXISTS("BuildThreadProfEM64T.dep")
Lines 217-317 Link Here
217
312
218
313
219
!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" || "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
314
!IF "$(CFG)" == "BuildThreadProfEM64T - Win32 Release" || "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
220
221
SOURCE=..\src\BaseProf\AttachEvent.cpp
315
SOURCE=..\src\BaseProf\AttachEvent.cpp
222
316
317
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
318
319
223
"$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)"
320
"$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)"
224
	$(CPP) $(CPP_PROJ) $(SOURCE)
321
	$(CPP) $(CPP_PROJ) $(SOURCE)
225
322
323
324
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
325
326
327
"$(INTDIR)\AttachEvent.obj"	"$(INTDIR)\AttachEvent.sbr" : $(SOURCE) "$(INTDIR)"
328
	$(CPP) $(CPP_PROJ) $(SOURCE)
329
330
331
!ENDIF 
332
333
SOURCE=..\src\BaseProf\BaseProfiler.cpp
334
335
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
336
337
338
"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)"
339
	$(CPP) $(CPP_PROJ) $(SOURCE)
340
341
342
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
343
344
345
"$(INTDIR)\BaseProfiler.obj"	"$(INTDIR)\BaseProfiler.sbr" : $(SOURCE) "$(INTDIR)"
346
	$(CPP) $(CPP_PROJ) $(SOURCE)
347
348
349
!ENDIF 
350
351
SOURCE=..\src\ThreadProf\CallCAMethodEvent.cpp
352
353
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
354
355
356
"$(INTDIR)\CallCAMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
357
	$(CPP) $(CPP_PROJ) $(SOURCE)
358
359
360
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
361
362
363
"$(INTDIR)\CallCAMethodEvent.obj"	"$(INTDIR)\CallCAMethodEvent.sbr" : $(SOURCE) "$(INTDIR)"
364
	$(CPP) $(CPP_PROJ) $(SOURCE)
365
366
367
!ENDIF 
368
369
SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp
370
371
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
372
373
374
"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)"
375
	$(CPP) $(CPP_PROJ) $(SOURCE)
376
377
378
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
379
380
381
"$(INTDIR)\ContendedMonitorEnteredEvent.obj"	"$(INTDIR)\ContendedMonitorEnteredEvent.sbr" : $(SOURCE) "$(INTDIR)"
382
	$(CPP) $(CPP_PROJ) $(SOURCE)
383
384
385
!ENDIF 
386
387
SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp
388
389
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
390
391
392
"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)"
393
	$(CPP) $(CPP_PROJ) $(SOURCE)
394
395
396
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
397
398
399
"$(INTDIR)\ContendedMonitorEnterEvent.obj"	"$(INTDIR)\ContendedMonitorEnterEvent.sbr" : $(SOURCE) "$(INTDIR)"
400
	$(CPP) $(CPP_PROJ) $(SOURCE)
401
402
403
!ENDIF 
404
405
SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp
406
407
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
408
409
410
"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)"
411
	$(CPP) $(CPP_PROJ) $(SOURCE)
412
413
414
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
415
416
417
"$(INTDIR)\CustomCommandEvent.obj"	"$(INTDIR)\CustomCommandEvent.sbr" : $(SOURCE) "$(INTDIR)"
418
	$(CPP) $(CPP_PROJ) $(SOURCE)
419
420
421
!ENDIF 
422
226
SOURCE=..\src\BaseProf\DetachEvent.cpp
423
SOURCE=..\src\BaseProf\DetachEvent.cpp
227
424
425
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
426
427
228
"$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)"
428
"$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)"
229
	$(CPP) $(CPP_PROJ) $(SOURCE)
429
	$(CPP) $(CPP_PROJ) $(SOURCE)
230
430
231
SOURCE=..\src\BaseProf\StartEvent.cpp
232
431
233
"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)"
432
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
433
434
435
"$(INTDIR)\DetachEvent.obj"	"$(INTDIR)\DetachEvent.sbr" : $(SOURCE) "$(INTDIR)"
234
	$(CPP) $(CPP_PROJ) $(SOURCE)
436
	$(CPP) $(CPP_PROJ) $(SOURCE)
235
437
236
SOURCE=..\src\BaseProf\StopEvent.cpp
237
438
238
"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)"
439
!ENDIF 
440
441
SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp
442
443
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
444
445
446
"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)"
239
	$(CPP) $(CPP_PROJ) $(SOURCE)
447
	$(CPP) $(CPP_PROJ) $(SOURCE)
240
448
241
SOURCE=..\src\BaseProf\VMInitEvent.cpp
242
449
243
"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)"
450
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
451
452
453
"$(INTDIR)\MonitorWaitedEvent.obj"	"$(INTDIR)\MonitorWaitedEvent.sbr" : $(SOURCE) "$(INTDIR)"
244
	$(CPP) $(CPP_PROJ) $(SOURCE)
454
	$(CPP) $(CPP_PROJ) $(SOURCE)
245
455
246
SOURCE=..\src\BaseProf\VMShutdownEvent.cpp
247
456
248
"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)"
457
!ENDIF 
458
459
SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp
460
461
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
462
463
464
"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)"
249
	$(CPP) $(CPP_PROJ) $(SOURCE)
465
	$(CPP) $(CPP_PROJ) $(SOURCE)
250
466
251
SOURCE=..\src\BaseProf\Tickets.cpp
252
467
253
"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)"
468
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
469
470
471
"$(INTDIR)\MonitorWaitEvent.obj"	"$(INTDIR)\MonitorWaitEvent.sbr" : $(SOURCE) "$(INTDIR)"
254
	$(CPP) $(CPP_PROJ) $(SOURCE)
472
	$(CPP) $(CPP_PROJ) $(SOURCE)
255
473
474
475
!ENDIF 
476
477
SOURCE=..\src\ThreadProf\NewMethodEvent.cpp
478
479
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
480
481
482
"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
483
	$(CPP) $(CPP_PROJ) $(SOURCE)
484
485
486
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
487
488
489
"$(INTDIR)\NewMethodEvent.obj"	"$(INTDIR)\NewMethodEvent.sbr" : $(SOURCE) "$(INTDIR)"
490
	$(CPP) $(CPP_PROJ) $(SOURCE)
491
492
493
!ENDIF 
494
256
SOURCE=..\src\BaseProf\ProfEnv.cpp
495
SOURCE=..\src\BaseProf\ProfEnv.cpp
257
496
497
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
498
499
258
"$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)"
500
"$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)"
259
	$(CPP) $(CPP_PROJ) $(SOURCE)
501
	$(CPP) $(CPP_PROJ) $(SOURCE)
260
502
261
SOURCE=..\src\BaseProf\BaseProfiler.cpp
262
503
263
"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)"
504
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
505
506
507
"$(INTDIR)\ProfEnv.obj"	"$(INTDIR)\ProfEnv.sbr" : $(SOURCE) "$(INTDIR)"
264
	$(CPP) $(CPP_PROJ) $(SOURCE)
508
	$(CPP) $(CPP_PROJ) $(SOURCE)
265
509
266
SOURCE=..\src\ThreadProf\NewMethodEvent.cpp
267
510
268
"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
511
!ENDIF 
512
513
SOURCE=..\src\BaseProf\StartEvent.cpp
514
515
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
516
517
518
"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)"
269
	$(CPP) $(CPP_PROJ) $(SOURCE)
519
	$(CPP) $(CPP_PROJ) $(SOURCE)
270
520
271
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
272
521
273
"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)"
522
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
523
524
525
"$(INTDIR)\StartEvent.obj"	"$(INTDIR)\StartEvent.sbr" : $(SOURCE) "$(INTDIR)"
526
	$(CPP) $(CPP_PROJ) $(SOURCE)
527
528
529
!ENDIF 
530
531
SOURCE=..\src\BaseProf\StopEvent.cpp
532
533
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
534
535
536
"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)"
274
	$(CPP) $(CPP_PROJ) $(SOURCE)
537
	$(CPP) $(CPP_PROJ) $(SOURCE)
275
538
539
540
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
541
542
543
"$(INTDIR)\StopEvent.obj"	"$(INTDIR)\StopEvent.sbr" : $(SOURCE) "$(INTDIR)"
544
	$(CPP) $(CPP_PROJ) $(SOURCE)
545
546
547
!ENDIF 
548
276
SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp
549
SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp
277
550
551
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
552
553
278
"$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)"
554
"$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)"
279
	$(CPP) $(CPP_PROJ) $(SOURCE)
555
	$(CPP) $(CPP_PROJ) $(SOURCE)
280
556
281
SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp
282
557
283
"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)"
558
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
559
560
561
"$(INTDIR)\ThreadEndEvent.obj"	"$(INTDIR)\ThreadEndEvent.sbr" : $(SOURCE) "$(INTDIR)"
562
	$(CPP) $(CPP_PROJ) $(SOURCE)
563
564
565
!ENDIF 
566
567
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
568
569
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
570
571
572
"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)"
284
	$(CPP) $(CPP_PROJ) $(SOURCE)
573
	$(CPP) $(CPP_PROJ) $(SOURCE)
285
574
575
576
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
577
578
579
"$(INTDIR)\ThreadProfiler.obj"	"$(INTDIR)\ThreadProfiler.sbr" : $(SOURCE) "$(INTDIR)"
580
	$(CPP) $(CPP_PROJ) $(SOURCE)
581
582
583
!ENDIF 
584
286
SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp
585
SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp
287
586
587
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
588
589
288
"$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)"
590
"$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)"
289
	$(CPP) $(CPP_PROJ) $(SOURCE)
591
	$(CPP) $(CPP_PROJ) $(SOURCE)
290
592
291
SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp
292
593
293
"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)"
594
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
294
	$(CPP) $(CPP_PROJ) $(SOURCE)
295
595
296
SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp
297
596
298
"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)"
597
"$(INTDIR)\ThreadStartEvent.obj"	"$(INTDIR)\ThreadStartEvent.sbr" : $(SOURCE) "$(INTDIR)"
299
	$(CPP) $(CPP_PROJ) $(SOURCE)
598
	$(CPP) $(CPP_PROJ) $(SOURCE)
300
599
301
SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp
302
600
303
"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)"
601
!ENDIF 
602
603
SOURCE=..\src\BaseProf\Tickets.cpp
604
605
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
606
607
608
"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)"
304
	$(CPP) $(CPP_PROJ) $(SOURCE)
609
	$(CPP) $(CPP_PROJ) $(SOURCE)
305
610
306
SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp
307
611
308
"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)"
612
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
613
614
615
"$(INTDIR)\Tickets.obj"	"$(INTDIR)\Tickets.sbr" : $(SOURCE) "$(INTDIR)"
309
	$(CPP) $(CPP_PROJ) $(SOURCE)
616
	$(CPP) $(CPP_PROJ) $(SOURCE)
310
617
618
619
!ENDIF 
620
311
SOURCE=..\src\BaseProf\TIdSet.cpp
621
SOURCE=..\src\BaseProf\TIdSet.cpp
312
622
623
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
624
625
313
"$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)"
626
"$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)"
314
	$(CPP) $(CPP_PROJ) $(SOURCE)
627
	$(CPP) $(CPP_PROJ) $(SOURCE)
315
628
629
630
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
631
632
633
"$(INTDIR)\TIdSet.obj"	"$(INTDIR)\TIdSet.sbr" : $(SOURCE) "$(INTDIR)"
634
	$(CPP) $(CPP_PROJ) $(SOURCE)
635
636
637
!ENDIF 
638
639
SOURCE=..\src\BaseProf\VMInitEvent.cpp
640
641
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
642
643
644
"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)"
645
	$(CPP) $(CPP_PROJ) $(SOURCE)
646
647
648
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
649
650
651
"$(INTDIR)\VMInitEvent.obj"	"$(INTDIR)\VMInitEvent.sbr" : $(SOURCE) "$(INTDIR)"
652
	$(CPP) $(CPP_PROJ) $(SOURCE)
653
654
655
!ENDIF 
656
657
SOURCE=..\src\BaseProf\VMShutdownEvent.cpp
658
659
!IF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Release"
660
661
662
"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)"
663
	$(CPP) $(CPP_PROJ) $(SOURCE)
664
665
666
!ELSEIF  "$(CFG)" == "BuildThreadProfEM64T - Win32 Debug"
667
668
669
"$(INTDIR)\VMShutdownEvent.obj"	"$(INTDIR)\VMShutdownEvent.sbr" : $(SOURCE) "$(INTDIR)"
670
	$(CPP) $(CPP_PROJ) $(SOURCE)
671
672
673
!ENDIF 
674
675
316
!ENDIF 
676
!ENDIF 
317
677
(-)src-native/build/BuildThreadProfIPF.mak (-110 / +470 lines)
Lines 1-4 Link Here
1
# Microsoft Developer Studio Generated NMAKE File, Based on BuildThreadProf32.dsp
1
# Microsoft Developer Studio Generated NMAKE File, Based on BuildThreadProfIPF.dsp
2
!IF "$(CFG)" == ""
2
!IF "$(CFG)" == ""
3
CFG=BuildThreadProfIPF - Win32 Debug
3
CFG=BuildThreadProfIPF - Win32 Debug
4
!MESSAGE No configuration specified. Defaulting to BuildThreadProfIPF - Win32 Debug.
4
!MESSAGE No configuration specified. Defaulting to BuildThreadProfIPF - Win32 Debug.
Lines 13-20 Link Here
13
!MESSAGE 
13
!MESSAGE 
14
!MESSAGE Possible choices for configuration are:
14
!MESSAGE Possible choices for configuration are:
15
!MESSAGE 
15
!MESSAGE 
16
!MESSAGE "BuildThreadProfIPF - Win32 Release" (based on "Win32 (IPF) Dynamic-Link Library")
16
!MESSAGE "BuildThreadProfIPF - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
17
!MESSAGE "BuildThreadProfIPF - Win32 Debug" (based on "Win32 (IPF) Dynamic-Link Library")
17
!MESSAGE "BuildThreadProfIPF - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
18
!MESSAGE 
18
!MESSAGE 
19
!ERROR An invalid configuration is specified.
19
!ERROR An invalid configuration is specified.
20
!ENDIF 
20
!ENDIF 
Lines 25-32 Link Here
25
NULL=nul
25
NULL=nul
26
!ENDIF 
26
!ENDIF 
27
27
28
CPP=cl.exe
29
30
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
28
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
31
29
32
OUTDIR=.\..\bin\windows\release\IPF
30
OUTDIR=.\..\bin\windows\release\IPF
Lines 37-64 Link Here
37
35
38
ALL : "$(OUTDIR)\ThreadProf.dll"
36
ALL : "$(OUTDIR)\ThreadProf.dll"
39
37
38
40
CLEAN :
39
CLEAN :
41
	-@erase "$(INTDIR)\AttachEvent.obj"
40
	-@erase "$(INTDIR)\AttachEvent.obj"
41
	-@erase "$(INTDIR)\BaseProfiler.obj"
42
	-@erase "$(INTDIR)\CallCAMethodEvent.obj"
43
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
44
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
45
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
42
	-@erase "$(INTDIR)\DetachEvent.obj"
46
	-@erase "$(INTDIR)\DetachEvent.obj"
47
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
48
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
49
	-@erase "$(INTDIR)\NewMethodEvent.obj"
50
	-@erase "$(INTDIR)\ProfEnv.obj"
43
	-@erase "$(INTDIR)\StartEvent.obj"
51
	-@erase "$(INTDIR)\StartEvent.obj"
44
	-@erase "$(INTDIR)\StopEvent.obj"
52
	-@erase "$(INTDIR)\StopEvent.obj"
45
	-@erase "$(INTDIR)\VMInitEvent.obj"
46
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
47
	-@erase "$(INTDIR)\Tickets.obj"
48
	-@erase "$(INTDIR)\ProfEnv.obj"
49
	-@erase "$(INTDIR)\BaseProfiler.obj"
50
	-@erase "$(INTDIR)\ThreadProfiler.obj"
51
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
52
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
53
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
54
	-@erase "$(INTDIR)\ThreadProfiler.obj"
53
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
55
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
54
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
56
	-@erase "$(INTDIR)\Tickets.obj"
55
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
56
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
57
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
58
	-@erase "$(INTDIR)\NewMethodEvent.obj"
59
	-@erase "$(INTDIR)\TIdSet.obj"
57
	-@erase "$(INTDIR)\TIdSet.obj"
60
	-@erase "$(INTDIR)\vc*.idb"
58
	-@erase "$(INTDIR)\vc60.idb"
61
	-@erase "$(INTDIR)\BuildThreadProf32.pch"
59
	-@erase "$(INTDIR)\vc60.pdb"
60
	-@erase "$(INTDIR)\VMInitEvent.obj"
61
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
62
	-@erase "$(OUTDIR)\ThreadProf.dll"
62
	-@erase "$(OUTDIR)\ThreadProf.dll"
63
	-@erase "$(OUTDIR)\ThreadProf.exp"
63
	-@erase "$(OUTDIR)\ThreadProf.exp"
64
	-@erase "$(OUTDIR)\ThreadProf.lib"
64
	-@erase "$(OUTDIR)\ThreadProf.lib"
Lines 69-98 Link Here
69
"$(INTDIR)" :
69
"$(INTDIR)" :
70
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
70
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
71
71
72
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 
72
CPP=cl.exe
73
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 
74
75
.c{$(INTDIR)}.obj::
76
   $(CPP) @<<
77
   $(CPP_PROJ) $< 
78
<<
79
80
.cpp{$(INTDIR)}.obj::
81
   $(CPP) @<<
82
   $(CPP_PROJ) $< 
83
<<
84
85
.cxx{$(INTDIR)}.obj::
86
   $(CPP) @<<
87
   $(CPP_PROJ) $< 
88
<<
89
90
.c{$(INTDIR)}.sbr::
91
   $(CPP) @<<
92
   $(CPP_PROJ) $< 
93
<<
94
95
.cpp{$(INTDIR)}.sbr::
96
   $(CPP) @<<
97
   $(CPP_PROJ) $< 
98
<<
99
100
.cxx{$(INTDIR)}.sbr::
101
   $(CPP) @<<
102
   $(CPP_PROJ) $< 
103
<<
104
105
MTL=midl.exe
106
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
107
RSC=rc.exe
108
BSC32=bscmake.exe
109
BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfIPF.bsc" 
110
BSC32_SBRS= \
73
	
111
	
74
LINKIPF=link.exe
112
LINKIPF=link.exe
75
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" 
113
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" 
76
LINKIPF_OBJS= \
114
LINKIPF_OBJS= \
77
	"$(INTDIR)\AttachEvent.obj" \
115
	"$(INTDIR)\AttachEvent.obj" \
116
	"$(INTDIR)\BaseProfiler.obj" \
117
	"$(INTDIR)\CallCAMethodEvent.obj" \
118
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" \
119
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
120
	"$(INTDIR)\CustomCommandEvent.obj" \
78
	"$(INTDIR)\DetachEvent.obj" \
121
	"$(INTDIR)\DetachEvent.obj" \
122
	"$(INTDIR)\MonitorWaitedEvent.obj" \
123
	"$(INTDIR)\MonitorWaitEvent.obj" \
124
	"$(INTDIR)\NewMethodEvent.obj" \
125
	"$(INTDIR)\ProfEnv.obj" \
79
	"$(INTDIR)\StartEvent.obj" \
126
	"$(INTDIR)\StartEvent.obj" \
80
	"$(INTDIR)\StopEvent.obj" \
127
	"$(INTDIR)\StopEvent.obj" \
81
	"$(INTDIR)\VMInitEvent.obj" \
82
	"$(INTDIR)\VMShutdownEvent.obj" \
83
	"$(INTDIR)\Tickets.obj" \
84
	"$(INTDIR)\ProfEnv.obj" \
85
	"$(INTDIR)\TIdSet.obj" \
86
	"$(INTDIR)\NewMethodEvent.obj" \
87
	"$(INTDIR)\BaseProfiler.obj" \
88
	"$(INTDIR)\ThreadProfiler.obj" \
89
	"$(INTDIR)\CustomCommandEvent.obj" \
90
	"$(INTDIR)\ThreadEndEvent.obj" \
128
	"$(INTDIR)\ThreadEndEvent.obj" \
129
	"$(INTDIR)\ThreadProfiler.obj" \
91
	"$(INTDIR)\ThreadStartEvent.obj" \
130
	"$(INTDIR)\ThreadStartEvent.obj" \
92
	"$(INTDIR)\MonitorWaitEvent.obj" \
131
	"$(INTDIR)\Tickets.obj" \
93
	"$(INTDIR)\MonitorWaitedEvent.obj" \
132
	"$(INTDIR)\TIdSet.obj" \
94
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
133
	"$(INTDIR)\VMInitEvent.obj" \
95
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" 
134
	"$(INTDIR)\VMShutdownEvent.obj"
96
135
97
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS)
136
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS)
98
    $(LINKIPF) @<<
137
    $(LINKIPF) @<<
Lines 107-142 Link Here
107
OutDir=.\..\bin\windows\debug\IPF
146
OutDir=.\..\bin\windows\debug\IPF
108
# End Custom Macros
147
# End Custom Macros
109
148
110
ALL : "$(OUTDIR)\ThreadProf.dll"
149
ALL : "$(OUTDIR)\ThreadProf.dll" "$(OUTDIR)\BuildThreadProfIPF.bsc"
111
150
112
151
113
CLEAN :
152
CLEAN :
114
	-@erase "$(INTDIR)\AttachEvent.obj"
153
	-@erase "$(INTDIR)\AttachEvent.obj"
154
	-@erase "$(INTDIR)\AttachEvent.sbr"
155
	-@erase "$(INTDIR)\BaseProfiler.obj"
156
	-@erase "$(INTDIR)\BaseProfiler.sbr"
157
	-@erase "$(INTDIR)\CallCAMethodEvent.obj"
158
	-@erase "$(INTDIR)\CallCAMethodEvent.sbr"
159
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
160
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.sbr"
161
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
162
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.sbr"
163
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
164
	-@erase "$(INTDIR)\CustomCommandEvent.sbr"
115
	-@erase "$(INTDIR)\DetachEvent.obj"
165
	-@erase "$(INTDIR)\DetachEvent.obj"
166
	-@erase "$(INTDIR)\DetachEvent.sbr"
167
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
168
	-@erase "$(INTDIR)\MonitorWaitedEvent.sbr"
169
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
170
	-@erase "$(INTDIR)\MonitorWaitEvent.sbr"
171
	-@erase "$(INTDIR)\NewMethodEvent.obj"
172
	-@erase "$(INTDIR)\NewMethodEvent.sbr"
173
	-@erase "$(INTDIR)\ProfEnv.obj"
174
	-@erase "$(INTDIR)\ProfEnv.sbr"
116
	-@erase "$(INTDIR)\StartEvent.obj"
175
	-@erase "$(INTDIR)\StartEvent.obj"
176
	-@erase "$(INTDIR)\StartEvent.sbr"
117
	-@erase "$(INTDIR)\StopEvent.obj"
177
	-@erase "$(INTDIR)\StopEvent.obj"
118
	-@erase "$(INTDIR)\VMInitEvent.obj"
178
	-@erase "$(INTDIR)\StopEvent.sbr"
119
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
120
	-@erase "$(INTDIR)\Tickets.obj"
121
	-@erase "$(INTDIR)\ProfEnv.obj"
122
	-@erase "$(INTDIR)\BaseProfiler.obj"
123
	-@erase "$(INTDIR)\ThreadProfiler.obj"
124
	-@erase "$(INTDIR)\CustomCommandEvent.obj"
125
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
179
	-@erase "$(INTDIR)\ThreadEndEvent.obj"
180
	-@erase "$(INTDIR)\ThreadEndEvent.sbr"
181
	-@erase "$(INTDIR)\ThreadProfiler.obj"
182
	-@erase "$(INTDIR)\ThreadProfiler.sbr"
126
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
183
	-@erase "$(INTDIR)\ThreadStartEvent.obj"
127
	-@erase "$(INTDIR)\MonitorWaitEvent.obj"
184
	-@erase "$(INTDIR)\ThreadStartEvent.sbr"
128
	-@erase "$(INTDIR)\MonitorWaitedEvent.obj"
185
	-@erase "$(INTDIR)\Tickets.obj"
129
	-@erase "$(INTDIR)\ContendedMonitorEnterEvent.obj"
186
	-@erase "$(INTDIR)\Tickets.sbr"
130
	-@erase "$(INTDIR)\ContendedMonitorEnteredEvent.obj"
131
	-@erase "$(INTDIR)\NewMethodEvent.obj"
132
	-@erase "$(INTDIR)\TIdSet.obj"
187
	-@erase "$(INTDIR)\TIdSet.obj"
133
	-@erase "$(INTDIR)\vc*.idb"
188
	-@erase "$(INTDIR)\TIdSet.sbr"
134
	-@erase "$(INTDIR)\vc*.pdb"
189
	-@erase "$(INTDIR)\vc60.idb"
135
	-@erase "$(INTDIR)\BuildThreadProf32.pch"
190
	-@erase "$(INTDIR)\vc60.pdb"
191
	-@erase "$(INTDIR)\VMInitEvent.obj"
192
	-@erase "$(INTDIR)\VMInitEvent.sbr"
193
	-@erase "$(INTDIR)\VMShutdownEvent.obj"
194
	-@erase "$(INTDIR)\VMShutdownEvent.sbr"
195
	-@erase "$(OUTDIR)\BuildThreadProfIPF.bsc"
136
	-@erase "$(OUTDIR)\ThreadProf.dll"
196
	-@erase "$(OUTDIR)\ThreadProf.dll"
137
	-@erase "$(OUTDIR)\ThreadProf.exp"
197
	-@erase "$(OUTDIR)\ThreadProf.exp"
138
	-@erase "$(OUTDIR)\ThreadProf.lib"
139
	-@erase "$(OUTDIR)\ThreadProf.ilk"
198
	-@erase "$(OUTDIR)\ThreadProf.ilk"
199
	-@erase "$(OUTDIR)\ThreadProf.lib"
200
	-@erase "$(OUTDIR)\ThreadProf.pdb"
140
201
141
"$(OUTDIR)" :
202
"$(OUTDIR)" :
142
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
203
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
Lines 144-180 Link Here
144
"$(INTDIR)" :
205
"$(INTDIR)" :
145
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
206
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
146
207
147
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 
208
CPP=cl.exe
148
	
209
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 
149
LINKIPF=link.exe
150
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" 
151
LINKIPF_OBJS= \
152
	"$(INTDIR)\AttachEvent.obj" \
153
	"$(INTDIR)\DetachEvent.obj" \
154
	"$(INTDIR)\StartEvent.obj" \
155
	"$(INTDIR)\StopEvent.obj" \
156
	"$(INTDIR)\VMInitEvent.obj" \
157
	"$(INTDIR)\VMShutdownEvent.obj" \
158
	"$(INTDIR)\Tickets.obj" \
159
	"$(INTDIR)\ProfEnv.obj" \
160
	"$(INTDIR)\TIdSet.obj" \
161
	"$(INTDIR)\NewMethodEvent.obj" \
162
	"$(INTDIR)\BaseProfiler.obj" \
163
	"$(INTDIR)\ThreadProfiler.obj" \
164
	"$(INTDIR)\CustomCommandEvent.obj" \
165
	"$(INTDIR)\ThreadEndEvent.obj" \
166
	"$(INTDIR)\ThreadStartEvent.obj" \
167
	"$(INTDIR)\MonitorWaitEvent.obj" \
168
	"$(INTDIR)\MonitorWaitedEvent.obj" \
169
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
170
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" 
171
172
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS)
173
    $(LINKIPF) @<<
174
  $(LINKIPF_FLAGS) $(LINKIPF_OBJS)
175
<<
176
177
!ENDIF 
178
210
179
.c{$(INTDIR)}.obj::
211
.c{$(INTDIR)}.obj::
180
   $(CPP) @<<
212
   $(CPP) @<<
Lines 206-211 Link Here
206
   $(CPP_PROJ) $< 
238
   $(CPP_PROJ) $< 
207
<<
239
<<
208
240
241
MTL=midl.exe
242
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
243
RSC=rc.exe
244
BSC32=bscmake.exe
245
BSC32_FLAGS=/nologo /o"$(OUTDIR)\BuildThreadProfIPF.bsc" 
246
BSC32_SBRS= \
247
	"$(INTDIR)\AttachEvent.sbr" \
248
	"$(INTDIR)\BaseProfiler.sbr" \
249
	"$(INTDIR)\CallCAMethodEvent.sbr" \
250
	"$(INTDIR)\ContendedMonitorEnteredEvent.sbr" \
251
	"$(INTDIR)\ContendedMonitorEnterEvent.sbr" \
252
	"$(INTDIR)\CustomCommandEvent.sbr" \
253
	"$(INTDIR)\DetachEvent.sbr" \
254
	"$(INTDIR)\MonitorWaitedEvent.sbr" \
255
	"$(INTDIR)\MonitorWaitEvent.sbr" \
256
	"$(INTDIR)\NewMethodEvent.sbr" \
257
	"$(INTDIR)\ProfEnv.sbr" \
258
	"$(INTDIR)\StartEvent.sbr" \
259
	"$(INTDIR)\StopEvent.sbr" \
260
	"$(INTDIR)\ThreadEndEvent.sbr" \
261
	"$(INTDIR)\ThreadProfiler.sbr" \
262
	"$(INTDIR)\ThreadStartEvent.sbr" \
263
	"$(INTDIR)\Tickets.sbr" \
264
	"$(INTDIR)\TIdSet.sbr" \
265
	"$(INTDIR)\VMInitEvent.sbr" \
266
	"$(INTDIR)\VMShutdownEvent.sbr"
267
268
"$(OUTDIR)\BuildThreadProfIPF.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
269
    $(BSC32) @<<
270
  $(BSC32_FLAGS) $(BSC32_SBRS)
271
<<
272
273
LINKIPF=link.exe
274
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" 
275
LINKIPF_OBJS= \
276
	"$(INTDIR)\AttachEvent.obj" \
277
	"$(INTDIR)\BaseProfiler.obj" \
278
	"$(INTDIR)\CallCAMethodEvent.obj" \
279
	"$(INTDIR)\ContendedMonitorEnteredEvent.obj" \
280
	"$(INTDIR)\ContendedMonitorEnterEvent.obj" \
281
	"$(INTDIR)\CustomCommandEvent.obj" \
282
	"$(INTDIR)\DetachEvent.obj" \
283
	"$(INTDIR)\MonitorWaitedEvent.obj" \
284
	"$(INTDIR)\MonitorWaitEvent.obj" \
285
	"$(INTDIR)\NewMethodEvent.obj" \
286
	"$(INTDIR)\ProfEnv.obj" \
287
	"$(INTDIR)\StartEvent.obj" \
288
	"$(INTDIR)\StopEvent.obj" \
289
	"$(INTDIR)\ThreadEndEvent.obj" \
290
	"$(INTDIR)\ThreadProfiler.obj" \
291
	"$(INTDIR)\ThreadStartEvent.obj" \
292
	"$(INTDIR)\Tickets.obj" \
293
	"$(INTDIR)\TIdSet.obj" \
294
	"$(INTDIR)\VMInitEvent.obj" \
295
	"$(INTDIR)\VMShutdownEvent.obj"
296
297
"$(OUTDIR)\ThreadProf.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINKIPF_OBJS)
298
    $(LINKIPF) @<<
299
  $(LINKIPF_FLAGS) $(LINKIPF_OBJS)
300
<<
301
302
!ENDIF 
303
209
304
210
!IF "$(NO_EXTERNAL_DEPS)" != "1"
305
!IF "$(NO_EXTERNAL_DEPS)" != "1"
211
!IF EXISTS("BuildThreadProfIPF.dep")
306
!IF EXISTS("BuildThreadProfIPF.dep")
Lines 217-317 Link Here
217
312
218
313
219
!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" || "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
314
!IF "$(CFG)" == "BuildThreadProfIPF - Win32 Release" || "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
220
221
SOURCE=..\src\BaseProf\AttachEvent.cpp
315
SOURCE=..\src\BaseProf\AttachEvent.cpp
222
316
317
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
318
319
223
"$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)"
320
"$(INTDIR)\AttachEvent.obj" : $(SOURCE) "$(INTDIR)"
224
	$(CPP) $(CPP_PROJ) $(SOURCE)
321
	$(CPP) $(CPP_PROJ) $(SOURCE)
225
322
323
324
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
325
326
327
"$(INTDIR)\AttachEvent.obj"	"$(INTDIR)\AttachEvent.sbr" : $(SOURCE) "$(INTDIR)"
328
	$(CPP) $(CPP_PROJ) $(SOURCE)
329
330
331
!ENDIF 
332
333
SOURCE=..\src\BaseProf\BaseProfiler.cpp
334
335
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
336
337
338
"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)"
339
	$(CPP) $(CPP_PROJ) $(SOURCE)
340
341
342
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
343
344
345
"$(INTDIR)\BaseProfiler.obj"	"$(INTDIR)\BaseProfiler.sbr" : $(SOURCE) "$(INTDIR)"
346
	$(CPP) $(CPP_PROJ) $(SOURCE)
347
348
349
!ENDIF 
350
351
SOURCE=..\src\ThreadProf\CallCAMethodEvent.cpp
352
353
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
354
355
356
"$(INTDIR)\CallCAMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
357
	$(CPP) $(CPP_PROJ) $(SOURCE)
358
359
360
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
361
362
363
"$(INTDIR)\CallCAMethodEvent.obj"	"$(INTDIR)\CallCAMethodEvent.sbr" : $(SOURCE) "$(INTDIR)"
364
	$(CPP) $(CPP_PROJ) $(SOURCE)
365
366
367
!ENDIF 
368
369
SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp
370
371
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
372
373
374
"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)"
375
	$(CPP) $(CPP_PROJ) $(SOURCE)
376
377
378
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
379
380
381
"$(INTDIR)\ContendedMonitorEnteredEvent.obj"	"$(INTDIR)\ContendedMonitorEnteredEvent.sbr" : $(SOURCE) "$(INTDIR)"
382
	$(CPP) $(CPP_PROJ) $(SOURCE)
383
384
385
!ENDIF 
386
387
SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp
388
389
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
390
391
392
"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)"
393
	$(CPP) $(CPP_PROJ) $(SOURCE)
394
395
396
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
397
398
399
"$(INTDIR)\ContendedMonitorEnterEvent.obj"	"$(INTDIR)\ContendedMonitorEnterEvent.sbr" : $(SOURCE) "$(INTDIR)"
400
	$(CPP) $(CPP_PROJ) $(SOURCE)
401
402
403
!ENDIF 
404
405
SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp
406
407
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
408
409
410
"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)"
411
	$(CPP) $(CPP_PROJ) $(SOURCE)
412
413
414
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
415
416
417
"$(INTDIR)\CustomCommandEvent.obj"	"$(INTDIR)\CustomCommandEvent.sbr" : $(SOURCE) "$(INTDIR)"
418
	$(CPP) $(CPP_PROJ) $(SOURCE)
419
420
421
!ENDIF 
422
226
SOURCE=..\src\BaseProf\DetachEvent.cpp
423
SOURCE=..\src\BaseProf\DetachEvent.cpp
227
424
425
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
426
427
228
"$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)"
428
"$(INTDIR)\DetachEvent.obj" : $(SOURCE) "$(INTDIR)"
229
	$(CPP) $(CPP_PROJ) $(SOURCE)
429
	$(CPP) $(CPP_PROJ) $(SOURCE)
230
430
231
SOURCE=..\src\BaseProf\StartEvent.cpp
232
431
233
"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)"
432
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
433
434
435
"$(INTDIR)\DetachEvent.obj"	"$(INTDIR)\DetachEvent.sbr" : $(SOURCE) "$(INTDIR)"
234
	$(CPP) $(CPP_PROJ) $(SOURCE)
436
	$(CPP) $(CPP_PROJ) $(SOURCE)
235
437
236
SOURCE=..\src\BaseProf\StopEvent.cpp
237
438
238
"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)"
439
!ENDIF 
440
441
SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp
442
443
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
444
445
446
"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)"
239
	$(CPP) $(CPP_PROJ) $(SOURCE)
447
	$(CPP) $(CPP_PROJ) $(SOURCE)
240
448
241
SOURCE=..\src\BaseProf\VMInitEvent.cpp
242
449
243
"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)"
450
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
451
452
453
"$(INTDIR)\MonitorWaitedEvent.obj"	"$(INTDIR)\MonitorWaitedEvent.sbr" : $(SOURCE) "$(INTDIR)"
244
	$(CPP) $(CPP_PROJ) $(SOURCE)
454
	$(CPP) $(CPP_PROJ) $(SOURCE)
245
455
246
SOURCE=..\src\BaseProf\VMShutdownEvent.cpp
247
456
248
"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)"
457
!ENDIF 
458
459
SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp
460
461
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
462
463
464
"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)"
249
	$(CPP) $(CPP_PROJ) $(SOURCE)
465
	$(CPP) $(CPP_PROJ) $(SOURCE)
250
466
251
SOURCE=..\src\BaseProf\Tickets.cpp
252
467
253
"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)"
468
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
469
470
471
"$(INTDIR)\MonitorWaitEvent.obj"	"$(INTDIR)\MonitorWaitEvent.sbr" : $(SOURCE) "$(INTDIR)"
254
	$(CPP) $(CPP_PROJ) $(SOURCE)
472
	$(CPP) $(CPP_PROJ) $(SOURCE)
255
473
474
475
!ENDIF 
476
477
SOURCE=..\src\ThreadProf\NewMethodEvent.cpp
478
479
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
480
481
482
"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
483
	$(CPP) $(CPP_PROJ) $(SOURCE)
484
485
486
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
487
488
489
"$(INTDIR)\NewMethodEvent.obj"	"$(INTDIR)\NewMethodEvent.sbr" : $(SOURCE) "$(INTDIR)"
490
	$(CPP) $(CPP_PROJ) $(SOURCE)
491
492
493
!ENDIF 
494
256
SOURCE=..\src\BaseProf\ProfEnv.cpp
495
SOURCE=..\src\BaseProf\ProfEnv.cpp
257
496
497
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
498
499
258
"$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)"
500
"$(INTDIR)\ProfEnv.obj" : $(SOURCE) "$(INTDIR)"
259
	$(CPP) $(CPP_PROJ) $(SOURCE)
501
	$(CPP) $(CPP_PROJ) $(SOURCE)
260
502
261
SOURCE=..\src\BaseProf\BaseProfiler.cpp
262
503
263
"$(INTDIR)\BaseProfiler.obj" : $(SOURCE) "$(INTDIR)"
504
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
505
506
507
"$(INTDIR)\ProfEnv.obj"	"$(INTDIR)\ProfEnv.sbr" : $(SOURCE) "$(INTDIR)"
264
	$(CPP) $(CPP_PROJ) $(SOURCE)
508
	$(CPP) $(CPP_PROJ) $(SOURCE)
265
509
266
SOURCE=..\src\ThreadProf\NewMethodEvent.cpp
267
510
268
"$(INTDIR)\NewMethodEvent.obj" : $(SOURCE) "$(INTDIR)"
511
!ENDIF 
512
513
SOURCE=..\src\BaseProf\StartEvent.cpp
514
515
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
516
517
518
"$(INTDIR)\StartEvent.obj" : $(SOURCE) "$(INTDIR)"
269
	$(CPP) $(CPP_PROJ) $(SOURCE)
519
	$(CPP) $(CPP_PROJ) $(SOURCE)
270
520
271
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
272
521
273
"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)"
522
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
523
524
525
"$(INTDIR)\StartEvent.obj"	"$(INTDIR)\StartEvent.sbr" : $(SOURCE) "$(INTDIR)"
274
	$(CPP) $(CPP_PROJ) $(SOURCE)
526
	$(CPP) $(CPP_PROJ) $(SOURCE)
275
527
276
SOURCE=..\src\ThreadProf\CustomCommandEvent.cpp
277
528
278
"$(INTDIR)\CustomCommandEvent.obj" : $(SOURCE) "$(INTDIR)"
529
!ENDIF 
530
531
SOURCE=..\src\BaseProf\StopEvent.cpp
532
533
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
534
535
536
"$(INTDIR)\StopEvent.obj" : $(SOURCE) "$(INTDIR)"
279
	$(CPP) $(CPP_PROJ) $(SOURCE)
537
	$(CPP) $(CPP_PROJ) $(SOURCE)
280
538
539
540
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
541
542
543
"$(INTDIR)\StopEvent.obj"	"$(INTDIR)\StopEvent.sbr" : $(SOURCE) "$(INTDIR)"
544
	$(CPP) $(CPP_PROJ) $(SOURCE)
545
546
547
!ENDIF 
548
281
SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp
549
SOURCE=..\src\ThreadProf\ThreadEndEvent.cpp
282
550
551
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
552
553
283
"$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)"
554
"$(INTDIR)\ThreadEndEvent.obj" : $(SOURCE) "$(INTDIR)"
284
	$(CPP) $(CPP_PROJ) $(SOURCE)
555
	$(CPP) $(CPP_PROJ) $(SOURCE)
285
556
557
558
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
559
560
561
"$(INTDIR)\ThreadEndEvent.obj"	"$(INTDIR)\ThreadEndEvent.sbr" : $(SOURCE) "$(INTDIR)"
562
	$(CPP) $(CPP_PROJ) $(SOURCE)
563
564
565
!ENDIF 
566
567
SOURCE=..\src\ThreadProf\ThreadProfiler.cpp
568
569
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
570
571
572
"$(INTDIR)\ThreadProfiler.obj" : $(SOURCE) "$(INTDIR)"
573
	$(CPP) $(CPP_PROJ) $(SOURCE)
574
575
576
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
577
578
579
"$(INTDIR)\ThreadProfiler.obj"	"$(INTDIR)\ThreadProfiler.sbr" : $(SOURCE) "$(INTDIR)"
580
	$(CPP) $(CPP_PROJ) $(SOURCE)
581
582
583
!ENDIF 
584
286
SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp
585
SOURCE=..\src\ThreadProf\ThreadStartEvent.cpp
287
586
587
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
588
589
288
"$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)"
590
"$(INTDIR)\ThreadStartEvent.obj" : $(SOURCE) "$(INTDIR)"
289
	$(CPP) $(CPP_PROJ) $(SOURCE)
591
	$(CPP) $(CPP_PROJ) $(SOURCE)
290
592
291
SOURCE=..\src\ThreadProf\MonitorWaitEvent.cpp
292
593
293
"$(INTDIR)\MonitorWaitEvent.obj" : $(SOURCE) "$(INTDIR)"
594
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
294
	$(CPP) $(CPP_PROJ) $(SOURCE)
295
595
296
SOURCE=..\src\ThreadProf\MonitorWaitedEvent.cpp
297
596
298
"$(INTDIR)\MonitorWaitedEvent.obj" : $(SOURCE) "$(INTDIR)"
597
"$(INTDIR)\ThreadStartEvent.obj"	"$(INTDIR)\ThreadStartEvent.sbr" : $(SOURCE) "$(INTDIR)"
299
	$(CPP) $(CPP_PROJ) $(SOURCE)
598
	$(CPP) $(CPP_PROJ) $(SOURCE)
300
599
301
SOURCE=..\src\ThreadProf\ContendedMonitorEnterEvent.cpp
302
600
303
"$(INTDIR)\ContendedMonitorEnterEvent.obj" : $(SOURCE) "$(INTDIR)"
601
!ENDIF 
602
603
SOURCE=..\src\BaseProf\Tickets.cpp
604
605
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
606
607
608
"$(INTDIR)\Tickets.obj" : $(SOURCE) "$(INTDIR)"
304
	$(CPP) $(CPP_PROJ) $(SOURCE)
609
	$(CPP) $(CPP_PROJ) $(SOURCE)
305
610
306
SOURCE=..\src\ThreadProf\ContendedMonitorEnteredEvent.cpp
307
611
308
"$(INTDIR)\ContendedMonitorEnteredEvent.obj" : $(SOURCE) "$(INTDIR)"
612
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
613
614
615
"$(INTDIR)\Tickets.obj"	"$(INTDIR)\Tickets.sbr" : $(SOURCE) "$(INTDIR)"
309
	$(CPP) $(CPP_PROJ) $(SOURCE)
616
	$(CPP) $(CPP_PROJ) $(SOURCE)
310
617
618
619
!ENDIF 
620
311
SOURCE=..\src\BaseProf\TIdSet.cpp
621
SOURCE=..\src\BaseProf\TIdSet.cpp
312
622
623
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
624
625
313
"$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)"
626
"$(INTDIR)\TIdSet.obj" : $(SOURCE) "$(INTDIR)"
314
	$(CPP) $(CPP_PROJ) $(SOURCE)
627
	$(CPP) $(CPP_PROJ) $(SOURCE)
315
628
629
630
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
631
632
633
"$(INTDIR)\TIdSet.obj"	"$(INTDIR)\TIdSet.sbr" : $(SOURCE) "$(INTDIR)"
634
	$(CPP) $(CPP_PROJ) $(SOURCE)
635
636
637
!ENDIF 
638
639
SOURCE=..\src\BaseProf\VMInitEvent.cpp
640
641
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
642
643
644
"$(INTDIR)\VMInitEvent.obj" : $(SOURCE) "$(INTDIR)"
645
	$(CPP) $(CPP_PROJ) $(SOURCE)
646
647
648
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
649
650
651
"$(INTDIR)\VMInitEvent.obj"	"$(INTDIR)\VMInitEvent.sbr" : $(SOURCE) "$(INTDIR)"
652
	$(CPP) $(CPP_PROJ) $(SOURCE)
653
654
655
!ENDIF 
656
657
SOURCE=..\src\BaseProf\VMShutdownEvent.cpp
658
659
!IF  "$(CFG)" == "BuildThreadProfIPF - Win32 Release"
660
661
662
"$(INTDIR)\VMShutdownEvent.obj" : $(SOURCE) "$(INTDIR)"
663
	$(CPP) $(CPP_PROJ) $(SOURCE)
664
665
666
!ELSEIF  "$(CFG)" == "BuildThreadProfIPF - Win32 Debug"
667
668
669
"$(INTDIR)\VMShutdownEvent.obj"	"$(INTDIR)\VMShutdownEvent.sbr" : $(SOURCE) "$(INTDIR)"
670
	$(CPP) $(CPP_PROJ) $(SOURCE)
671
672
673
!ENDIF 
674
675
316
!ENDIF 
676
!ENDIF 
317
677
(-)src-native/src/BaseProf/ProfEnv.h (-3 / +12 lines)
Lines 25-31 Link Here
25
namespace Martini { namespace BaseProf {
25
namespace Martini { namespace BaseProf {
26
26
27
    enum EventType {CONTENDED_MONITOR_ENTERED_EVENT, CONTENDED_MONITOR_ENTER_EVENT, 
27
    enum EventType {CONTENDED_MONITOR_ENTERED_EVENT, CONTENDED_MONITOR_ENTER_EVENT, 
28
        MONITOR_WAITED_EVENT, MONITOR_WAIT_EVENT, THREAD_START_EVENT, THREAD_END_EVENT};
28
        MONITOR_WAITED_EVENT, MONITOR_WAIT_EVENT, THREAD_START_EVENT, THREAD_END_EVENT,
29
        THREAD_INTERACTION};
29
30
30
    struct SThreadEventsData {
31
    struct SThreadEventsData {
31
        EventType type;
32
        EventType type;
Lines 117-122 Link Here
117
        void PrintMethodLeaveData();
118
        void PrintMethodLeaveData();
118
        //
119
        //
119
        TResult GetThreadInfo(MPI::TId clientId, MPI::TId threadId, MPI::BitSet requestedDataTypes, MPI::SThreadInfo *pData);
120
        TResult GetThreadInfo(MPI::TId clientId, MPI::TId threadId, MPI::BitSet requestedDataTypes, MPI::SThreadInfo *pData);
121
122
        TResult AddSupportedEG(MPI::EEventGroup group);
123
        TResult DelSupportedEG(MPI::EEventGroup group);
124
        bool IsSupportedEG(MPI::EEventGroup group);
125
        TResult EnableIsSupportedEG();
126
        TResult DisableSupportedEG();
127
120
        //
128
        //
121
        JPIAgent::EC_Env* ec_env;
129
        JPIAgent::EC_Env* ec_env;
122
        //
130
        //
Lines 128-135 Link Here
128
        CTickets m_Tickets;
136
        CTickets m_Tickets;
129
        //
137
        //
130
        bool m_bVMInitDone;
138
        bool m_bVMInitDone;
131
        //
139
        // TODO: create list
132
        MPI::EEventGroup m_implementedEG;
140
        MPI::EEventGroup m_implementedEG[4]; 
141
        int m_FreeEGCell;
133
        // Pointer to the MPI implementation
142
        // Pointer to the MPI implementation
134
        MPI::IMpi *m_pMpiApi;
143
        MPI::IMpi *m_pMpiApi;
135
        // Client id for MPI requests
144
        // Client id for MPI requests
(-)src-native/src/BaseProf/ProfEnv.cpp (-1 / +62 lines)
Lines 31-37 Link Here
31
    m_objectInfoKey = 1;
31
    m_objectInfoKey = 1;
32
    m_bVMInitDone = false;
32
    m_bVMInitDone = false;
33
    m_profilerIsActive = false;
33
    m_profilerIsActive = false;
34
    m_implementedEG = EG_NONE;
34
//    m_implementedEG = { 0 };
35
    m_FreeEGCell = 0;
35
    m_pClassSDataLockObject = CreateThreadSync();
36
    m_pClassSDataLockObject = CreateThreadSync();
36
    m_pMethodSDataLockObject = CreateThreadSync();
37
    m_pMethodSDataLockObject = CreateThreadSync();
37
    m_pObjectSDataLockObject = CreateThreadSync();
38
    m_pObjectSDataLockObject = CreateThreadSync();
Lines 713-715 Link Here
713
    lockGetThreadInfoObject->Leave();
714
    lockGetThreadInfoObject->Leave();
714
    return res;
715
    return res;
715
}
716
}
717
718
TResult
719
CProfEnv::AddSupportedEG(EEventGroup group) 
720
{
721
    if (!IsSupportedEG(group)) {
722
        m_implementedEG[m_FreeEGCell++] = group;
723
    }
724
    return MRTE_RESULT_OK;
725
}
726
727
TResult 
728
CProfEnv::DelSupportedEG(EEventGroup group) 
729
{
730
    int i;
731
    if (IsSupportedEG(group)) {
732
        for (i = 0; i < m_FreeEGCell; i++) {
733
            if (m_implementedEG[i] == group) {
734
                m_implementedEG[i] = m_implementedEG[--m_FreeEGCell];
735
                return MRTE_RESULT_OK;
736
            }
737
        }
738
    }
739
    return MRTE_RESULT_OK;
740
}
741
742
bool
743
CProfEnv::IsSupportedEG(EEventGroup group) 
744
{
745
    int i;
746
    for (i = 0; i < m_FreeEGCell; i++) {
747
        if (m_implementedEG[i] == group) {
748
            return true;
749
        }
750
    }
751
    return false;
752
}
753
754
TResult CProfEnv::DisableSupportedEG() {
755
    int i;
756
    TResult retVal;
757
    for (i = 0; i < m_FreeEGCell; i++) {
758
        retVal = m_pMpiApi->DisableEventGroup(m_clientId, m_implementedEG[i]);
759
        if (MRTE_FAILED(retVal)) {
760
            return retVal;
761
        }
762
    }
763
    return MRTE_RESULT_OK;
764
}
765
766
TResult CProfEnv::EnableIsSupportedEG() {
767
    int i;
768
    TResult retVal;
769
    for (i = 0; i < m_FreeEGCell; i++) {
770
        retVal = m_pMpiApi->DisableEventGroup(m_clientId, m_implementedEG[i]);
771
        if (MRTE_FAILED(retVal)) {
772
            return retVal;
773
        }
774
    }
775
    return MRTE_RESULT_OK;
776
}
(-)src-native/src/BaseProf/DetachEvent.cpp (-2 / +2 lines)
Lines 41-50 Link Here
41
        return;
41
        return;
42
    }
42
    }
43
    m_pProfEnv->ec_env->SetProfileOption("EXECDETAILS", "false");
43
    m_pProfEnv->ec_env->SetProfileOption("EXECDETAILS", "false");
44
    if ((m_pProfEnv->m_implementedEG != EG_CALL_GRAPH) && (m_pProfEnv->m_implementedEG != EG_HEAP)) {
44
    if (!m_pProfEnv->IsSupportedEG(EG_CALL_GRAPH) && !m_pProfEnv->IsSupportedEG(EG_HEAP)) {
45
        return;
45
        return;
46
    }
46
    }
47
    TResult res = m_pProfEnv->m_pMpiApi->DisableEventGroup(m_pProfEnv->m_clientId, m_pProfEnv->m_implementedEG);
47
    TResult res = m_pProfEnv->DisableSupportedEG();
48
    if (MRTE_FAILED(res)) {
48
    if (MRTE_FAILED(res)) {
49
        if (MRTE_ERROR_PHASE_FAILURE == res) {
49
        if (MRTE_ERROR_PHASE_FAILURE == res) {
50
            LOG_DIE("Detach failed (too early)");
50
            LOG_DIE("Detach failed (too early)");
(-)src-native/src/BaseProf/BaseProfiler.cpp (-1 / +1 lines)
Lines 110-116 Link Here
110
        return retVal;
110
        return retVal;
111
    }
111
    }
112
    if (m_pProfEnv.ec_env->isEnabled()) {
112
    if (m_pProfEnv.ec_env->isEnabled()) {
113
        TResult res = m_pProfEnv.m_pMpiApi->DisableEventGroup(m_pProfEnv.m_clientId, m_pProfEnv.m_implementedEG);
113
        TResult res = m_pProfEnv.DisableSupportedEG();
114
        LOG_ASSERT(res == MRTE_RESULT_OK);
114
        LOG_ASSERT(res == MRTE_RESULT_OK);
115
    }
115
    }
116
116
(-)src-native/src/BaseProf/AttachEvent.cpp (-5 / +2 lines)
Lines 52-58 Link Here
52
    threadInfoArray.uiSize = MAX_THREADS; //TODO check it!!!!
52
    threadInfoArray.uiSize = MAX_THREADS; //TODO check it!!!!
53
    threadInfoArray.pEntries = (SThreadInfoArrayEntry*)malloc(sizeof(SThreadInfoArrayEntry) * threadInfoArray.uiSize);
53
    threadInfoArray.pEntries = (SThreadInfoArrayEntry*)malloc(sizeof(SThreadInfoArrayEntry) * threadInfoArray.uiSize);
54
    memset(threadInfoArray.pEntries, 0, sizeof(SThreadInfoArrayEntry) * threadInfoArray.uiSize);
54
    memset(threadInfoArray.pEntries, 0, sizeof(SThreadInfoArrayEntry) * threadInfoArray.uiSize);
55
    if (m_pProfEnv->m_implementedEG == EG_MONITOR) {
55
    if (m_pProfEnv->IsSupportedEG(EG_MONITOR)) {
56
        unsigned int i;
56
        unsigned int i;
57
        for (i = 0; i < MAX_THREADS; i++) {
57
        for (i = 0; i < MAX_THREADS; i++) {
58
            threadInfoArray.pEntries[i].threadInfo.vmOffsetStack.uiSize = MAX_FRAMES;
58
            threadInfoArray.pEntries[i].threadInfo.vmOffsetStack.uiSize = MAX_FRAMES;
Lines 177-186 Link Here
177
    }
177
    }
178
    free(threadInfoArray.pEntries);
178
    free(threadInfoArray.pEntries);
179
179
180
    if ((m_pProfEnv->m_implementedEG != EG_MONITOR) && (m_pProfEnv->m_implementedEG != EG_CALL_GRAPH) && (m_pProfEnv->m_implementedEG != EG_HEAP)) {
180
    res = m_pProfEnv->EnableIsSupportedEG();
181
        return;
182
    }
183
    res = m_pProfEnv->m_pMpiApi->EnableEventGroup(m_pProfEnv->m_clientId, m_pProfEnv->m_implementedEG);
184
    if (MRTE_FAILED(res)) {
181
    if (MRTE_FAILED(res)) {
185
        if (MRTE_ERROR_PHASE_FAILURE == res) {
182
        if (MRTE_ERROR_PHASE_FAILURE == res) {
186
            LOG_DIE("Attach failed (too early)");
183
            LOG_DIE("Attach failed (too early)");
(-)src-native/src/CGProf/CallGraphProfiler.cpp (-1 / +1 lines)
Lines 37-43 Link Here
37
{
37
{
38
    m_profilerName = "Call Graph profiler";
38
    m_profilerName = "Call Graph profiler";
39
    m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.execution"; // fixed for 190684
39
    m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.execution"; // fixed for 190684
40
    m_pProfEnv.m_implementedEG = EG_CALL_GRAPH;
40
    m_pProfEnv.AddSupportedEG(EG_CALL_GRAPH);
41
}
41
}
42
42
43
CCallGraphProfiler::~CCallGraphProfiler()
43
CCallGraphProfiler::~CCallGraphProfiler()
(-)src-native/src/ThreadProf/Makefile (+1 lines)
Lines 25-30 Link Here
25
	$(OBJDIR)/MonitorWaitedEvent.o \
25
	$(OBJDIR)/MonitorWaitedEvent.o \
26
	$(OBJDIR)/ContendedMonitorEnterEvent.o \
26
	$(OBJDIR)/ContendedMonitorEnterEvent.o \
27
	$(OBJDIR)/ContendedMonitorEnteredEvent.o \
27
	$(OBJDIR)/ContendedMonitorEnteredEvent.o \
28
	$(OBJDIR)/CallCAMethodEvent.o \
28
	$(OBJDIR)/CustomCommandEvent.o
29
	$(OBJDIR)/CustomCommandEvent.o
29
30
30
LIB = libThreadProf.so
31
LIB = libThreadProf.so
(-)src-native/src/ThreadProf/Makefile.dep (+11 lines)
Lines 231-233 Link Here
231
        ./../BaseProf/TIdSet.h
231
        ./../BaseProf/TIdSet.h
232
	$(CPP_COMPILE)
232
	$(CPP_COMPILE)
233
233
234
$(OBJDIR)/CallCAMethodEvent.o: CallCAMethodEvent.cpp \
235
        ../../include/Martini/OSA.h \
236
        ../../include/Martini/MRTEResults.h \
237
        ../../include/Martini/MRTETypes.h \
238
        ../../include/Martini/MpiAPI.h \
239
        ../../include/JPIAgent/log.h \
240
        CallCAMethodEvent.h \
241
        ./../BaseProf/ProfEnv.h \
242
        ./../BaseProf/Tickets.h \
243
        ./../BaseProf/TIdSet.h
244
	$(CPP_COMPILE)
(-)src-native/src/ThreadProf/ThreadProfiler.cpp (-2 / +55 lines)
Lines 37-43 Link Here
37
{
37
{
38
    m_profilerName = "Thread profiler";
38
    m_profilerName = "Thread profiler";
39
    m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.thread";  // fixed for 190684
39
    m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.thread";  // fixed for 190684
40
    m_pProfEnv.m_implementedEG = EG_MONITOR;
40
    m_pProfEnv.AddSupportedEG(EG_MONITOR);
41
}
41
}
42
42
43
CThreadProfiler::~CThreadProfiler()
43
CThreadProfiler::~CThreadProfiler()
Lines 91-107 Link Here
91
        LOG_ERROR("Initialization of NewMethod event failed: " << retVal);
91
        LOG_ERROR("Initialization of NewMethod event failed: " << retVal);
92
        return retVal;
92
        return retVal;
93
    }
93
    }
94
95
    if (m_pProfEnv.ec_env->isContentionAnalysisSupported()) {
96
        m_pProfEnv.AddSupportedEG(EG_THREAD_INTERACTION);
97
98
        retVal = m_threadInteractionHandler.Init(&m_pProfEnv);
99
        if (MRTE_FAILED(retVal)) {
100
            LOG_ERROR("Initialization of callNotify event failed: " << retVal);
101
            return retVal;
102
        }
103
    }
104
94
    return MRTE_RESULT_OK;
105
    return MRTE_RESULT_OK;
95
}
106
}
96
107
97
TResult 
108
TResult 
98
CThreadProfiler::InitFilter()
109
CThreadProfiler::InitFilter()
99
{
110
{
100
    return MRTE_RESULT_OK;
111
    // register to filter
112
    static CThreadInteractionFilter filter(&m_pProfEnv);
113
114
    TResult retVal = m_pProfEnv.m_pMpiApi->SetEventGroupFilter(
115
        m_pProfEnv.m_clientId,
116
        Martini::MPI::EG_THREAD_INTERACTION,
117
        filter);
118
119
    if (MRTE_SUCCEEDED(retVal)) {
120
        LOG_TRACE(m_profilerName << " filter: init success");
121
    } else {
122
        LOG_ERROR(m_profilerName << " filter: init failed");
123
    }
124
    return retVal;
101
}
125
}
102
126
103
TResult 
127
TResult 
104
CThreadProfiler::ParceOptions(const char *szOptions)
128
CThreadProfiler::ParceOptions(const char *szOptions)
105
{
129
{
130
#ifndef _WIN32
131
#define stricmp strcasecmp 
132
#endif
133
    if (stricmp("contanalysis=false", szOptions) == 0) {
134
        m_pProfEnv.ec_env->SetProfileOption("CONTANALYSIS", "false");
135
    } else if (stricmp("contanalysis=true", szOptions) == 0) {
136
        m_pProfEnv.ec_env->SetProfileOption("CONTANALYSIS", "true");
137
    } else if (stricmp("", szOptions) == 0) {
138
    } else {
139
        LOG_MESSAGE(m_profilerName << " invalid option: " << szOptions); //FIX
140
        //TODO? Usage?
141
        return MRTE_ERROR_ILLEGAL_ARGUMENT;
142
    }
106
    return MRTE_RESULT_OK;
143
    return MRTE_RESULT_OK;
107
}
144
}
145
//=======================================================================================
146
147
CThreadInteractionFilter::CThreadInteractionFilter(CProfEnv* profEnv)
148
{
149
    m_pProfEnv = profEnv;
150
}
151
152
bool 
153
CThreadInteractionFilter::ShouldNotify(SThreadInteractionFilterData &data)
154
{
155
    if (m_pProfEnv->ec_env->IsExcluded(data.szClassName, data.szMethodName)) {
156
        return false;
157
    }
158
    return true;
159
}
160
(-)src-native/src/ThreadProf/ThreadProfiler.h (+15 lines)
Lines 24-33 Link Here
24
#include "ContendedMonitorEnteredEvent.h"
24
#include "ContendedMonitorEnteredEvent.h"
25
#include "NewMethodEvent.h"
25
#include "NewMethodEvent.h"
26
#include "CustomCommandEvent.h"
26
#include "CustomCommandEvent.h"
27
#include "ThreadInteractionEvent.h"
27
28
28
29
29
namespace Martini { namespace ThreadProf {
30
namespace Martini { namespace ThreadProf {
30
31
32
33
    class CThreadInteractionFilter : public MPI::IThreadInteractionFilter
34
    {
35
    public:
36
        CThreadInteractionFilter(BaseProf::CProfEnv* profEnv);
37
        bool ShouldNotify(MPI::SThreadInteractionFilterData &data);
38
    private:
39
        // profilrt env object
40
        BaseProf::CProfEnv* m_pProfEnv;
41
    };
42
43
31
    class CThreadProfiler : public BaseProf::CBaseProfiler
44
    class CThreadProfiler : public BaseProf::CBaseProfiler
32
    {
45
    {
33
    public:
46
    public:
Lines 58-63 Link Here
58
        CNewMethodEvent     m_newMethodHandler;
71
        CNewMethodEvent     m_newMethodHandler;
59
        // CustomCommand event object
72
        // CustomCommand event object
60
        CCustomCommandEvent m_customCommandHandler;
73
        CCustomCommandEvent m_customCommandHandler;
74
        // call CA method event object
75
        CThreadInteractionEvent m_threadInteractionHandler;
61
    };
76
    };
62
77
63
} /*namespace Martini*/  } /*namespace ThreadProf*/
78
} /*namespace Martini*/  } /*namespace ThreadProf*/
(-)src-native/src/ThreadProf/MonitorWaitedEvent.cpp (+2 lines)
Lines 41-46 Link Here
41
{
41
{
42
    LOG_ASSERT((data.validData & DR_THREAD_ID) != 0);
42
    LOG_ASSERT((data.validData & DR_THREAD_ID) != 0);
43
    LOG_ASSERT((data.validData & DR_OBJECT_ID) != 0);
43
    LOG_ASSERT((data.validData & DR_OBJECT_ID) != 0);
44
    LOG_ASSERT((data.validData & DR_MONITOR_TIMED_OUT) != 0);
45
44
    if (!m_pProfEnv->m_profilerIsActive) {
46
    if (!m_pProfEnv->m_profilerIsActive) {
45
        m_pProfEnv->StoreThreadEvent(data.threadId, MONITOR_WAITED_EVENT, &data, m_pProfEnv->ec_env->GetTime() - m_pProfEnv->GetTimeOut(data.threadId));
47
        m_pProfEnv->StoreThreadEvent(data.threadId, MONITOR_WAITED_EVENT, &data, m_pProfEnv->ec_env->GetTime() - m_pProfEnv->GetTimeOut(data.threadId));
46
        return;
48
        return;
(-)src-native/src/JPIAgent/ECWrapper.cpp (+16 lines)
Lines 494-499 Link Here
494
}
494
}
495
495
496
EC_EXPORT EC_ENV_Error ECCALL 
496
EC_EXPORT EC_ENV_Error ECCALL 
497
printThreadInteractionElements(EC_Env* env, SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace)
498
{
499
    LOG_ASSERT(ECWrapper::m_pCPrint != 0);
500
    ECWrapper::m_pCPrint->printThreadInteractionElements(threadInteractionData, stackTrace);
501
    return EC_ENV_ERROR_NONE;
502
}
503
504
EC_EXPORT EC_ENV_Error ECCALL 
497
PrintCustomElement(EC_Env* env, const char* str)
505
PrintCustomElement(EC_Env* env, const char* str)
498
{
506
{
499
    LOG_ASSERT(ECWrapper::m_pCPrint != 0);
507
    LOG_ASSERT(ECWrapper::m_pCPrint != 0);
Lines 568-573 Link Here
568
    return ECWrapper::m_pCOptions->isAllocSitesSupported();
576
    return ECWrapper::m_pCOptions->isAllocSitesSupported();
569
}
577
}
570
578
579
EC_EXPORT bool ECCALL
580
isContentionAnalysisSupported(EC_Env* env)
581
{
582
    return ECWrapper::m_pCOptions->isContentionAnalysisSupported();
583
}
584
571
EC_EXPORT const char* ECCALL
585
EC_EXPORT const char* ECCALL
572
getUnknownOptionByName(EC_Env* env, const char* name)
586
getUnknownOptionByName(EC_Env* env, const char* name)
573
{
587
{
Lines 608-613 Link Here
608
    ECWrapper::m_ECFunctions.PrintMonitorWaitedElement = &PrintMonitorWaitedElement;
622
    ECWrapper::m_ECFunctions.PrintMonitorWaitedElement = &PrintMonitorWaitedElement;
609
    ECWrapper::m_ECFunctions.PrintMonitorContendedEnterElement = &PrintMonitorContendedEnterElement;
623
    ECWrapper::m_ECFunctions.PrintMonitorContendedEnterElement = &PrintMonitorContendedEnterElement;
610
    ECWrapper::m_ECFunctions.PrintMonitorContendedEnteredElement = &PrintMonitorContendedEnteredElement;
624
    ECWrapper::m_ECFunctions.PrintMonitorContendedEnteredElement = &PrintMonitorContendedEnteredElement;
625
    ECWrapper::m_ECFunctions.printThreadInteractionElements = &printThreadInteractionElements;
611
    ECWrapper::m_ECFunctions.PrintCustomElement = &PrintCustomElement;
626
    ECWrapper::m_ECFunctions.PrintCustomElement = &PrintCustomElement;
612
    ECWrapper::m_ECFunctions.IsExcluded = &IsExcluded;
627
    ECWrapper::m_ECFunctions.IsExcluded = &IsExcluded;
613
    ECWrapper::m_ECFunctions.GetTime = &GetTime_;
628
    ECWrapper::m_ECFunctions.GetTime = &GetTime_;
Lines 619-624 Link Here
619
    ECWrapper::m_ECFunctions.isControlled = &isControlled;
634
    ECWrapper::m_ECFunctions.isControlled = &isControlled;
620
    ECWrapper::m_ECFunctions.isEnabled = &isEnabled;
635
    ECWrapper::m_ECFunctions.isEnabled = &isEnabled;
621
    ECWrapper::m_ECFunctions.isAllocSitesSupported = &isAllocSitesSupported;
636
    ECWrapper::m_ECFunctions.isAllocSitesSupported = &isAllocSitesSupported;
637
    ECWrapper::m_ECFunctions.isContentionAnalysisSupported = &isContentionAnalysisSupported;
622
    ECWrapper::m_ECFunctions.getUnknownOptionByName = &getUnknownOptionByName;
638
    ECWrapper::m_ECFunctions.getUnknownOptionByName = &getUnknownOptionByName;
623
    ECWrapper::m_ECFunctions.VMInitDone = &VMInitDone;
639
    ECWrapper::m_ECFunctions.VMInitDone = &VMInitDone;
624
    ECWrapper::m_EC_Env.functions = &ECWrapper::m_ECFunctions;
640
    ECWrapper::m_EC_Env.functions = &ECWrapper::m_ECFunctions;
(-)src-native/src/JPIAgent/Filters.cpp (+1 lines)
Lines 433-438 Link Here
433
433
434
    filterFile = fopen(fileName, "r");
434
    filterFile = fopen(fileName, "r");
435
    if (!filterFile) {
435
    if (!filterFile) {
436
        // TODO: Add error message what filter file can't be open
436
        return -1;
437
        return -1;
437
    }
438
    }
438
439
(-)src-native/src/JPIAgent/Options.cpp (+3 lines)
Lines 68-73 Link Here
68
        ,0                         /* Call graph profiler specific option.*/
68
        ,0                         /* Call graph profiler specific option.*/
69
        ,0                         /* Call graph profiler specific option.*/
69
        ,0                         /* Call graph profiler specific option.*/
70
        ,0
70
        ,0
71
        ,0
71
        ,StackInfoNormal           /* Stack mode preference (default) */
72
        ,StackInfoNormal           /* Stack mode preference (default) */
72
        ,0                         /* The invocation options from the command line */
73
        ,0                         /* The invocation options from the command line */
73
        ,0                         /* Filter File  (to be initialized) */
74
        ,0                         /* Filter File  (to be initialized) */
Lines 297-302 Link Here
297
        m_jvmtiAgent_Options.cgAggStackMemoryFree = setBooleanOption(value, key, m_jvmtiAgent_Options.cgAggStackMemoryFree);
298
        m_jvmtiAgent_Options.cgAggStackMemoryFree = setBooleanOption(value, key, m_jvmtiAgent_Options.cgAggStackMemoryFree);
298
    } else if (STRICOLL(key, "ALLOCSITES") == 0) {
299
    } else if (STRICOLL(key, "ALLOCSITES") == 0) {
299
        m_jvmtiAgent_Options.allocSites = setBooleanOption(value, key, m_jvmtiAgent_Options.allocSites);
300
        m_jvmtiAgent_Options.allocSites = setBooleanOption(value, key, m_jvmtiAgent_Options.allocSites);
301
    } else if (STRICOLL(key, "CONTANALYSIS") == 0) {
302
        m_jvmtiAgent_Options.contAnalysis = setBooleanOption(value, key, m_jvmtiAgent_Options.contAnalysis);
300
    } else {
303
    } else {
301
        /* 60879 add the unknown profiling option to the 'unknowns' list so that we 
304
        /* 60879 add the unknown profiling option to the 'unknowns' list so that we 
302
        can echo it back to the UI */ 
305
        can echo it back to the UI */ 
(-)src-native/src/JPIAgent/Print.h (+1 lines)
Lines 99-104 Link Here
99
        virtual void printMonitorWaitedElement(SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace) = 0;
99
        virtual void printMonitorWaitedElement(SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace) = 0;
100
        virtual void printMonitorContendedEnterElement(SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace) = 0;
100
        virtual void printMonitorContendedEnterElement(SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace) = 0;
101
        virtual void printMonitorContendedEnteredElement(SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace) = 0;
101
        virtual void printMonitorContendedEnteredElement(SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace) = 0;
102
        virtual void printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace) = 0;
102
103
103
        virtual void printCustomElement(const char *str) = 0;
104
        virtual void printCustomElement(const char *str) = 0;
104
105
(-)src-native/src/JPIAgent/PrintXML.cpp (-3 / +59 lines)
Lines 602-613 Link Here
602
    if(m_pOptions->m_jvmtiAgent_Options.timestamp) {
602
    if(m_pOptions->m_jvmtiAgent_Options.timestamp) {
603
        AppendCurrentTimeStamp(&elb);
603
        AppendCurrentTimeStamp(&elb);
604
    }
604
    }
605
		/* Print the object identifier. Object identifier is -1 if in Thread.sleep() */
605
    /* Print the object identifier. Object identifier is -1 if in Thread.sleep() */
606
    AppendInteger64Attribute(&elb, STATIC_OBJ_IDREF_ATTRIBUTE, STRLEN_STATIC_OBJ_IDREF_ATTRIBUTE,
606
    AppendInteger64Attribute(&elb, STATIC_OBJ_IDREF_ATTRIBUTE, STRLEN_STATIC_OBJ_IDREF_ATTRIBUTE,
607
        /*(isThreadSleep == 0 ?*/ monitorWaitedData->objectId /*: -1)*/);
607
        /*(isThreadSleep == 0 ?*/ monitorWaitedData->objectId /*: -1)*/);
608
//    AppendLabeledTimestamp(&elb, TIMEOUT_ATTRIBUTE, STRLEN_TIMEOUT_ATTRIBUTE, timeout, TRUE);
608
609
    AppendInteger64Attribute(&elb, TIMEOUT_ATTRIBUTE, STRLEN_TIMEOUT_ATTRIBUTE, timeout/1000000);
609
    AppendInteger64Attribute(&elb, TIMEOUT_ATTRIBUTE, STRLEN_TIMEOUT_ATTRIBUTE, timeout/1000000);
610
//    AppendTraceIdRefAttribute(&elb);
610
611
    AppendIntegerAttribute(&elb, MONITOR_IS_TIMED_OUT_ATTRIBUTE, STRLEN_MONITOR_IS_TIMED_OUT_ATTRIBUTE, monitorWaitedData->isTimedOut);
612
611
    if (m_pOptions->isStackInfoNormal()) {
613
    if (m_pOptions->isStackInfoNormal()) {
612
        AppendElementEnd2(&elb);
614
        AppendElementEnd2(&elb);
613
        AppendAnnotations(&elb, stackTrace);
615
        AppendAnnotations(&elb, stackTrace);
Lines 680-685 Link Here
680
    jvmtiAgent_print(&elb);
682
    jvmtiAgent_print(&elb);
681
}
683
}
682
684
685
/** Print Thread interaction elements   ************************************************
686
  *
687
  * Print all element originated by ThreadInteraction to the trace 
688
  * TODO: clarify sintaxis of the element
689
  */
690
void
691
CPrintXML::printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace)
692
{
693
    CElementBuffer elb;
694
695
    static const char * const strThreadInteractionElements[] = {
696
        NULL,
697
        MONITOR_CALL_NOTIFY_ELEMENT,   // CALL_ID_NOTIFY_ALL
698
        MONITOR_CALL_NOTIFY_ELEMENT,   // CALL_ID_NOTIFY
699
        THREAD_CALL_INTERRUPT_ELEMENT, // CALL_ID_INTERRUPT
700
        THREAD_CALL_START_ELEMENT      // CALL_ID_START
701
    };
702
    static const int strThreadInteractionElementsLen[] = {
703
        0,
704
        STRLEN_MONITOR_CALL_NOTIFY_ELEMENT,   // CALL_ID_NOTIFY_ALL
705
        STRLEN_MONITOR_CALL_NOTIFY_ELEMENT,   // CALL_ID_NOTIFY
706
        STRLEN_THREAD_CALL_INTERRUPT_ELEMENT, // CALL_ID_INTERRUPT
707
        STRLEN_THREAD_CALL_START_ELEMENT      // CALL_ID_START
708
    };
709
710
711
    const char* const elementName = strThreadInteractionElements[threadInteractionData->interactionType];
712
    const int elementNameLen = strThreadInteractionElementsLen[threadInteractionData->interactionType];
713
714
    AppendEmptyEventHeader(&elb, threadInteractionData->threadId, elementName, elementNameLen);
715
    if(m_pOptions->m_jvmtiAgent_Options.timestamp) {
716
        AppendCurrentTimeStamp(&elb);
717
    }
718
719
    AppendInteger64Attribute(&elb, STATIC_OBJ_IDREF_ATTRIBUTE, STRLEN_STATIC_OBJ_IDREF_ATTRIBUTE, threadInteractionData->objectId);
720
721
    if (threadInteractionData->interactionType == IT_NOTIFY_ALL) {
722
        AppendIntegerAttribute(&elb, MONITOR_IS_NOTIFYALL_ATTRIBUTE, STRLEN_MONITOR_IS_NOTIFYALL_ATTRIBUTE, 1);
723
    }
724
    if (threadInteractionData->interactionType == IT_NOTIFY) {
725
        AppendIntegerAttribute(&elb, MONITOR_IS_NOTIFYALL_ATTRIBUTE, STRLEN_MONITOR_IS_NOTIFYALL_ATTRIBUTE, 0);
726
    }
727
    //AppendTraceIdRefAttribute(&elb);
728
729
    if (m_pOptions->isStackInfoNormal()) {
730
        AppendElementEnd2(&elb);
731
        AppendAnnotations(&elb, stackTrace);
732
        AppendClosingTag(&elb, elementName, elementNameLen);
733
    } else {
734
        AppendElementEnd(&elb, 0, 0);
735
    }
736
    jvmtiAgent_print(&elb);
737
}
738
683
void
739
void
684
CPrintXML::printCustomElement(const char *str)
740
CPrintXML::printCustomElement(const char *str)
685
{
741
{
(-)src-native/src/JPIAgent/strings.h (+14 lines)
Lines 113-118 Link Here
113
#define STRLEN_MONITOR_CONTENDED_ENTER_ELEMENT   17
113
#define STRLEN_MONITOR_CONTENDED_ENTER_ELEMENT   17
114
#define MONITOR_CONTENDED_ENTERED_ELEMENT        "monContendedEntered"
114
#define MONITOR_CONTENDED_ENTERED_ELEMENT        "monContendedEntered"
115
#define STRLEN_MONITOR_CONTENDED_ENTERED_ELEMENT 19
115
#define STRLEN_MONITOR_CONTENDED_ENTERED_ELEMENT 19
116
#define MONITOR_CALL_NOTIFY_ELEMENT              "monCallNotify"
117
#define STRLEN_MONITOR_CALL_NOTIFY_ELEMENT       13
118
#define THREAD_CALL_INTERRUPT_ELEMENT            "thrCallInterrupt"
119
#define STRLEN_THREAD_CALL_INTERRUPT_ELEMENT     16
120
#define THREAD_CALL_START_ELEMENT                "thrCallStart"
121
#define STRLEN_THREAD_CALL_START_ELEMENT         12
116
122
117
// Aggregated CG
123
// Aggregated CG
118
#define AG_METHOD_ENTRY_ELEMENT                  "agMethodEntry"
124
#define AG_METHOD_ENTRY_ELEMENT                  "agMethodEntry"
Lines 358-363 Link Here
358
#define ALLOC_LINE_NUMBER_ATTRIBUTE             "aLineNr"
364
#define ALLOC_LINE_NUMBER_ATTRIBUTE             "aLineNr"
359
#define STRLEN_ALLOC_LINE_NUMBER_ATTRIBUTE      7
365
#define STRLEN_ALLOC_LINE_NUMBER_ATTRIBUTE      7
360
366
367
#define MONITOR_IS_NOTIFYALL_ATTRIBUTE          "isNotifyAll"
368
#define STRLEN_MONITOR_IS_NOTIFYALL_ATTRIBUTE   11
369
370
#define MONITOR_IS_TIMED_OUT_ATTRIBUTE          "isTimedOut"
371
#define STRLEN_MONITOR_IS_TIMED_OUT_ATTRIBUTE   10
372
373
374
361
/* XML Attribute Values */
375
/* XML Attribute Values */
362
#define CLASS_VALUE                              "CLASS"
376
#define CLASS_VALUE                              "CLASS"
363
#define METHOD_VALUE                             "METHOD"
377
#define METHOD_VALUE                             "METHOD"
(-)src-native/src/JPIAgent/PrintXML.h (+1 lines)
Lines 64-69 Link Here
64
        void printMonitorWaitedElement(SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace);
64
        void printMonitorWaitedElement(SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace);
65
        void printMonitorContendedEnterElement(SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace);
65
        void printMonitorContendedEnterElement(SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace);
66
        void printMonitorContendedEnteredElement(SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace);
66
        void printMonitorContendedEnteredElement(SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace);
67
        void printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace);
67
68
68
        void printCustomElement(const char *str);
69
        void printCustomElement(const char *str);
69
70
(-)src-native/src/JPIAgent/Options.h (+6 lines)
Lines 47-52 Link Here
47
        unsigned int cgExecDetails:1;              /* Call graph profiler specific option. Is sggregated? (FALSE) */ 
47
        unsigned int cgExecDetails:1;              /* Call graph profiler specific option. Is sggregated? (FALSE) */ 
48
        unsigned int cgAggStackMemoryFree:1;       /* Call graph profiler specific option. Memory free after flush (TRUE)*/ 
48
        unsigned int cgAggStackMemoryFree:1;       /* Call graph profiler specific option. Memory free after flush (TRUE)*/ 
49
        unsigned int allocSites:1;                 /* Print allocsites information*/
49
        unsigned int allocSites:1;                 /* Print allocsites information*/
50
        unsigned int contAnalysis:1;               /* Provide information for contention analysis*/
50
        enum StackInfo stackInfo;                  /* Stack maintenance mode  (StackInfoContiguous)*/
51
        enum StackInfo stackInfo;                  /* Stack maintenance mode  (StackInfoContiguous)*/
51
        char *invocationOptions;                   /* The invocation options from the command line */
52
        char *invocationOptions;                   /* The invocation options from the command line */
52
        char *filterFileName;                      /* Name of the filters file (filters.txt)*/
53
        char *filterFileName;                      /* Name of the filters file (filters.txt)*/
Lines 147-153 Link Here
147
        bool isAllocSitesSupported() {
148
        bool isAllocSitesSupported() {
148
            return m_jvmtiAgent_Options.allocSites == 1;
149
            return m_jvmtiAgent_Options.allocSites == 1;
149
        }
150
        }
151
152
        bool isContentionAnalysisSupported() {
153
            return m_jvmtiAgent_Options.contAnalysis == 1;
154
        }
150
        
155
        
156
151
        const char* getUnknownOptionByName( const char* name );
157
        const char* getUnknownOptionByName( const char* name );
152
158
153
    private:
159
    private:
(-)src-native/include/Martini/MpiAPI.h (-18 / +159 lines)
Lines 90-110 Link Here
90
     */
90
     */
91
    enum EEventGroup
91
    enum EEventGroup
92
    {
92
    {
93
        EG_NONE,            //!< @brief No group
93
        EG_NONE,                   //!< @brief No group
94
            
94
            
95
        EG_CALL_GRAPH,      //!< @brief Call Graph events:
95
        EG_CALL_GRAPH,             //!< @brief Call Graph events:
96
                            //!  EV_METHOD_ENTER,
96
                                   //!  EV_METHOD_ENTER,
97
                            //!  EV_METHOD_LEAVE
97
                                   //!  EV_METHOD_LEAVE
98
98
99
        EG_HEAP,            //!< @brief Heap events:
99
        EG_HEAP,                   //!< @brief Heap events:
100
                            //!  EV_OBJECT_ALLOC,
100
                                   //!  EV_OBJECT_ALLOC,
101
                            //!  EV_OBJECT_FREE
101
                                   //!  EV_OBJECT_FREE
102
102
103
        EG_MONITOR,         //!< @brief Monitor events:
103
        EG_MONITOR,                //!< @brief Monitor events:
104
                            //!  EV_MONITOR_WAIT,
104
                                   //!  EV_MONITOR_WAIT,
105
                            //!  EV_MONITOR_WAITED,
105
                                   //!  EV_MONITOR_WAITED,
106
                            //!  EV_CONTENDED_MONITOR_ENTER,
106
                                   //!  EV_CONTENDED_MONITOR_ENTER,
107
                            //!  EV_CONTENDED_MONITOR_ENTERED
107
                                   //!  EV_CONTENDED_MONITOR_ENTERED
108
109
        EG_THREAD_INTERACTION,     //!< @brief Thread interaction event:
110
                                   //!  EV_THREAD_INTERACTION
108
111
109
        EG_LAST             //! End sentinel
112
        EG_LAST             //! End sentinel
110
    };
113
    };
Lines 652-657 Link Here
652
    //! @brief Monitor timeout for "wait" operations, in milliseconds
655
    //! @brief Monitor timeout for "wait" operations, in milliseconds
653
    const TDataRequestType DR_MONITOR_TIMEOUT                   = 0x00040000;
656
    const TDataRequestType DR_MONITOR_TIMEOUT                   = 0x00040000;
654
657
658
    //! @brief Monitor boolean exit status for "wait" operations,
659
    //! true - timeout expired
660
    //! false - notified or interrupted
661
    const TDataRequestType DR_MONITOR_TIMED_OUT                 = 0x00800000;
662
663
    //! @brief Type of interaction between threads,
664
    const TDataRequestType DR_THREAD_INTERACTION_TYPE           = 0x01000000; 
665
655
    //! @brief List of threads waiting to own the monitor
666
    //! @brief List of threads waiting to own the monitor
656
    const TDataRequestType DR_MONITOR_OWN_WAITERS               = 0x00080000;
667
    const TDataRequestType DR_MONITOR_OWN_WAITERS               = 0x00080000;
657
668
Lines 1169-1174 Link Here
1169
    {
1180
    {
1170
        TId threadId;       //!< Id of the waiting thread
1181
        TId threadId;       //!< Id of the waiting thread
1171
        TId objectId;       //!< Id of the monitor object
1182
        TId objectId;       //!< Id of the monitor object
1183
        bool isTimedOut;    //!< Wait exit status, true if timed out
1172
        BitSet validData;   //!< Bit-mask of the valid data in the struct
1184
        BitSet validData;   //!< Bit-mask of the valid data in the struct
1173
    };
1185
    };
1174
    
1186
    
Lines 1188-1194 Link Here
1188
    public:
1200
    public:
1189
        virtual TEventType Type() { return EV_MONITOR_WAITED; }
1201
        virtual TEventType Type() { return EV_MONITOR_WAITED; }
1190
1202
1191
        virtual BitSet EventDataTypes() { return DR_THREAD_ID | DR_OBJECT_ID; }
1203
        virtual BitSet EventDataTypes()
1204
        {
1205
            return DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMED_OUT;
1206
        }
1192
1207
1193
        /**
1208
        /**
1194
         * @brief Event Handler
1209
         * @brief Event Handler
Lines 1289-1294 Link Here
1289
        virtual void HandleEvent(SContendedMonitorEnteredEventData &data) = 0;
1304
        virtual void HandleEvent(SContendedMonitorEnteredEventData &data) = 0;
1290
    };
1305
    };
1291
1306
1307
1308
1309
1310
1311
    
1312
    /**
1313
    * @brief method id constants
1314
    */
1315
    enum EThreadInteractionType
1316
    {
1317
        IT_NOTIFY_ALL     = 1,
1318
        IT_NOTIFY         = 2,
1319
        IT_INTERRUPT      = 3,
1320
        IT_START          = 4,
1321
    };
1322
1323
1324
    /**
1325
     * @brief Defines Thread Interactions Event data
1326
     *
1327
     * Defines Thread Interaction event data for the 
1328
     * IThreadInteractionEvent::HandleEvent callback function.
1329
     */
1330
    struct SThreadInteractionEventData
1331
    {
1332
        TId threadId;                              //!< Id of the thread calling one of notify methods 
1333
        TId objectId;                              //!< Id of the object for which method is called
1334
        EThreadInteractionType interactionType;    //!< alled method ID
1335
        BitSet validData;                          //!< Bit-mask of the valid data in the struct
1336
    };
1337
    
1338
    /**
1339
     * @interface IThreadInteractionEventObserver
1340
     * @brief Observer interface for receiving Call CA Method events.
1341
     *
1342
     * The Thread Interaction event is sent when a thread about to call one of the methods 
1343
     * important for contention analysis (notify, notifyAll, interrupt, start)
1344
     *
1345
     * The event is currently supported only in Java 5.0 and later.
1346
     *
1347
     * The data items supported by this event are specified by the default implementation of 
1348
     * the EventDataTypes method
1349
     */
1350
    class IThreadInteractionEventObserver : public IEventObserver
1351
    {
1352
    public:
1353
        virtual TEventType Type() { return EV_THREAD_INTERACTION; }
1354
1355
        virtual BitSet EventDataTypes()
1356
        {
1357
            return DR_THREAD_ID | DR_OBJECT_ID | DR_THREAD_INTERACTION_TYPE;
1358
        }
1359
1360
        /**
1361
         * @brief Event Handler
1362
         *
1363
         * Call CA method event handler
1364
         *
1365
         * @param[in]   data event data.
1366
         */
1367
        virtual void HandleEvent(SThreadInteractionEventData &data) = 0;
1368
    };
1369
1370
1371
1372
1292
    //////////////////////////////////////////////////////////////////////////
1373
    //////////////////////////////////////////////////////////////////////////
1293
    // Heap Events and Data
1374
    // Heap Events and Data
1294
    //////////////////////////////////////////////////////////////////////////
1375
    //////////////////////////////////////////////////////////////////////////
Lines 2083-2088 Link Here
2083
        virtual bool ShouldNotify(SHeapFilterData &objectInfo) = 0;
2164
        virtual bool ShouldNotify(SHeapFilterData &objectInfo) = 0;
2084
    };
2165
    };
2085
2166
2167
2168
    //////////////////////////////////////////////////////////////////////////
2169
    // Thread Events Filter
2170
    //////////////////////////////////////////////////////////////////////////
2171
2172
    /**
2173
     * @brief Defines data for the Thread events filter.
2174
     *
2175
     * Defines data for the Thread events filter.
2176
     */
2177
    struct SThreadInteractionFilterData
2178
    {
2179
        const char *szClassName;            //!< Fully qualified class name
2180
        const char *szMethodName;           //!< Method name
2181
    };
2182
2183
    /**
2184
     * @interface IThreadInteractionFilter 
2185
     * @brief Event Filter interface for defining selectivity for Thread events
2186
     *
2187
     * Event Filter interface for defining selectivity for the following
2188
     * events: Thread interactions
2189
     *
2190
     * To implement selectivity, the client defines a filter class which implements this 
2191
     * interface, and then registers an instance of this class with MPI using the 
2192
     * IMpi::SetEventGroupFilter method.
2193
     *
2194
     * The MPI implementation will call the ShouldNotify method of the filter class for each
2195
     * new class it encounters, in order to determine whether to generate (add BCI) Thread events
2196
     * for this class.
2197
     *
2198
     * @remark - currently it isn't implemented properly
2199
     */
2200
    class IThreadInteractionFilter : public IEventFilter
2201
    {
2202
    public:
2203
        virtual EFilterType Type() { return FT_THREAD_INTERACTION; }
2204
2205
        /**
2206
         * @brief Invoked to determine event selectivity for a class
2207
         *
2208
         * This method is implemented by the filter class and called by the MPI implementation
2209
         * to determine whether to report (add BCI for event generation) thread events for a class
2210
         *
2211
         * @param[in]   objectInfo  class information
2212
         *
2213
         * @retval      true        an implementation returns true to indicate that events
2214
         *                          should be reported for this class
2215
         *
2216
         * @retval      false       an implementation returns false to indicate that events
2217
         *                          should not be reported for this class
2218
         *
2219
         */
2220
        virtual bool ShouldNotify(SThreadInteractionFilterData &objectInfo) = 0;
2221
    };
2222
2086
    //////////////////////////////////////////////////////////////////////////
2223
    //////////////////////////////////////////////////////////////////////////
2087
    // Data Request Structure Definitions
2224
    // Data Request Structure Definitions
2088
    //////////////////////////////////////////////////////////////////////////
2225
    //////////////////////////////////////////////////////////////////////////
Lines 2438-2446 Link Here
2438
         * to each event group:
2575
         * to each event group:
2439
         * 
2576
         * 
2440
         * <table>
2577
         * <table>
2441
         * <tr><td> <b>Event Group</b>  </td>   <td> <b>Supported Filter Types</b> </td></tr>
2578
         * <tr><td> <b>Event Group</b>   </td>   <td> <b>Supported Filter Types</b> </td></tr>
2442
         * <tr><td> EG_CALLGRAPH        </td>   <td> ICallGraphFilter              </td></tr>
2579
         * <tr><td> EG_CALLGRAPH         </td>   <td> ICallGraphFilter              </td></tr>
2443
         * <tr><td> EG_HEAP             </td>   <td> IHeapFilter                   </td></tr>
2580
         * <tr><td> EG_HEAP              </td>   <td> IHeapFilter                   </td></tr>
2581
         * <tr><td> EG_THREAD_INTERACTION</td>   <td> IThreadInteractionFilter      </td></tr>
2444
         * </table>  
2582
         * </table>  
2445
         *
2583
         *
2446
         * @param[in] clientId      The id of the client setting the filter
2584
         * @param[in] clientId      The id of the client setting the filter
Lines 2462-2467 Link Here
2462
         *
2600
         *
2463
         * @see ICallGraphFilter
2601
         * @see ICallGraphFilter
2464
         * @see IHeapFilter
2602
         * @see IHeapFilter
2603
         * @see IThreadInteractionFilter
2465
         **/
2604
         **/
2466
        virtual TResult SetEventGroupFilter(TId clientId, 
2605
        virtual TResult SetEventGroupFilter(TId clientId, 
2467
                                            EEventGroup group,
2606
                                            EEventGroup group,
Lines 2487-2492 Link Here
2487
         * - EEventGroup::EG_CALLGRAPH
2626
         * - EEventGroup::EG_CALLGRAPH
2488
         * - EEventGroup::EG_HEAP
2627
         * - EEventGroup::EG_HEAP
2489
         * - EEventGroup::EG_MONITOR
2628
         * - EEventGroup::EG_MONITOR
2629
         * - EEventGroup::EG_THREAD_INTERACTION
2490
         *
2630
         *
2491
         * @param[in] clientId      The id of the client enabling the event group
2631
         * @param[in] clientId      The id of the client enabling the event group
2492
         * @param[in] group         The event group to enable
2632
         * @param[in] group         The event group to enable
Lines 2533-2538 Link Here
2533
         * - EEventGroup::EG_CALLGRAPH
2673
         * - EEventGroup::EG_CALLGRAPH
2534
         * - EEventGroup::EG_HEAP
2674
         * - EEventGroup::EG_HEAP
2535
         * - EEventGroup::EG_MONITOR
2675
         * - EEventGroup::EG_MONITOR
2676
         * - EEventGroup::EG_THREAD_INTERACTION
2536
         *
2677
         *
2537
         * @param[in] clientId      The id of the client disabling the event group
2678
         * @param[in] clientId      The id of the client disabling the event group
2538
         * @param[in] group         The event group to disable
2679
         * @param[in] group         The event group to disable
(-)src-native/include/Martini/MpiBase.h (-3 / +6 lines)
Lines 133-138 Link Here
133
 * - EG_HEAP: Object Alloc and Object Free
133
 * - EG_HEAP: Object Alloc and Object Free
134
 * - EG_MONITOR: Monitor Wait, Monitor Waited, Contended Monitor Enter and 
134
 * - EG_MONITOR: Monitor Wait, Monitor Waited, Contended Monitor Enter and 
135
 *               Contended Monitor Entered
135
 *               Contended Monitor Entered
136
 * - EG_THREAD_INTERACTION: Thread notification, interuption and spawning
136
 * 
137
 * 
137
 * To apply a filter to an MPI event group, the MPI client must define an Event Filter class
138
 * To apply a filter to an MPI event group, the MPI client must define an Event Filter class
138
 * for the specific event group it wants to restrict, and then register an instance of this 
139
 * for the specific event group it wants to restrict, and then register an instance of this 
Lines 367-373 Link Here
367
    const TEventType EV_CONTENDED_MONITOR_ENTER = 27;
368
    const TEventType EV_CONTENDED_MONITOR_ENTER = 27;
368
    const TEventType EV_CONTENDED_MONITOR_ENTERED = 28;
369
    const TEventType EV_CONTENDED_MONITOR_ENTERED = 28;
369
    const TEventType EV_JAVA_CLASS_FILE_LOAD_HOOK = 29;
370
    const TEventType EV_JAVA_CLASS_FILE_LOAD_HOOK = 29;
370
    const TEventType EV_LAST = 30;
371
    const TEventType EV_THREAD_INTERACTION = 30;
372
    const TEventType EV_LAST = 31;
371
    //@}
373
    //@}
372
        
374
        
373
    /**
375
    /**
Lines 393-400 Link Here
393
         */
395
         */
394
        enum EFilterType
396
        enum EFilterType
395
        {
397
        {
396
            FT_CALLGRAPH,   //!< Call-graph filter
398
            FT_CALLGRAPH,          //!< Call-graph filter
397
            FT_HEAP         //!< Heap filters
399
            FT_HEAP,               //!< Heap filters
400
            FT_THREAD_INTERACTION  //!< Thread filters
398
        };
401
        };
399
402
400
        /**
403
        /**
(-)src-native/src/Martini/Infrastructure/common/ParamChecker.cpp (-3 / +4 lines)
Lines 364-374 Link Here
364
    m_EventDataItems[EV_OBJECT_FREE] = DR_THREAD_ID | DR_OBJECT_ID | DR_OBJECT_INFO |
364
    m_EventDataItems[EV_OBJECT_FREE] = DR_THREAD_ID | DR_OBJECT_ID | DR_OBJECT_INFO |
365
        DR_OBJECT_AGE;
365
        DR_OBJECT_AGE;
366
    m_EventDataItems[EV_EC_CUSTOM_COMMAND] = DR_COMMAND_ID | DR_COMMAND_DATA;
366
    m_EventDataItems[EV_EC_CUSTOM_COMMAND] = DR_COMMAND_ID | DR_COMMAND_DATA;
367
    m_EventDataItems[EV_MONITOR_WAIT] = DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMEOUT;;
367
    m_EventDataItems[EV_MONITOR_WAIT] = DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMEOUT;
368
    m_EventDataItems[EV_MONITOR_WAITED] = DR_THREAD_ID | DR_OBJECT_ID;;
368
    m_EventDataItems[EV_MONITOR_WAITED] = DR_THREAD_ID | DR_OBJECT_ID | DR_MONITOR_TIMED_OUT;
369
    m_EventDataItems[EV_CONTENDED_MONITOR_ENTER] = DR_THREAD_ID | DR_OBJECT_ID | 
369
    m_EventDataItems[EV_CONTENDED_MONITOR_ENTER] = DR_THREAD_ID | DR_OBJECT_ID | 
370
        DR_MONITOR_OWNER_THREAD_ID;
370
        DR_MONITOR_OWNER_THREAD_ID;
371
    m_EventDataItems[EV_CONTENDED_MONITOR_ENTERED] = DR_THREAD_ID | DR_OBJECT_ID;;
371
    m_EventDataItems[EV_CONTENDED_MONITOR_ENTERED] = DR_THREAD_ID | DR_OBJECT_ID;
372
    m_EventDataItems[EV_THREAD_INTERACTION] = DR_THREAD_ID | DR_OBJECT_ID | DR_THREAD_INTERACTION_TYPE;
372
    m_EventDataItems[EV_JAVA_DYNAMIC_CODE_GENERATED] = DR_JAVA_DYNAMIC_CODE;
373
    m_EventDataItems[EV_JAVA_DYNAMIC_CODE_GENERATED] = DR_JAVA_DYNAMIC_CODE;
373
	m_EventDataItems[EV_GC_MOVED_REFERENCES] = DR_DOTNET_GC_MOVED_REF_INFO;
374
	m_EventDataItems[EV_GC_MOVED_REFERENCES] = DR_DOTNET_GC_MOVED_REF_INFO;
374
	m_EventDataItems[EV_GC_END] = DR_NONE;
375
	m_EventDataItems[EV_GC_END] = DR_NONE;
(-)src-native/src/Martini/Infrastructure/CGAdaptor/Makefile.dep (-2 / +3 lines)
Lines 11-18 Link Here
11
  ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \
11
  ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \
12
  ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \
12
  ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \
13
  ../../Include/MString.h ../Include/IdAllocator.h \
13
  ../../Include/MString.h ../Include/IdAllocator.h \
14
  ../Include/WideStringUtils.h ../Include/CGProxy.h \
14
  ../Include/WideStringUtils.h \
15
  ../Include/HeapProxy.h ../Include/ValidityChecks.h
15
  ../Include/HeapProxy.h ../Include/CGProxy.h ../Include/ThreadProxy.h \
16
  ../Include/ValidityChecks.h
16
	$(CPP_COMPILE)
17
	$(CPP_COMPILE)
17
18
18
$(OBJDIR)/IdAllocator.o: ../common/IdAllocator.cpp ../Include/IdAllocator.h \
19
$(OBJDIR)/IdAllocator.o: ../common/IdAllocator.cpp ../Include/IdAllocator.h \
(-)src-native/src/Martini/Infrastructure/CGAdaptor/CGAdaptor.cpp (+2 lines)
Lines 15-20 Link Here
15
#include "WideStringUtils.h"
15
#include "WideStringUtils.h"
16
#include "CGProxy.h"
16
#include "CGProxy.h"
17
#include "HeapProxy.h"
17
#include "HeapProxy.h"
18
#include "ThreadProxy.h"
18
#include "ValidityChecks.h"
19
#include "ValidityChecks.h"
19
20
20
#include <assert.h>
21
#include <assert.h>
Lines 407-412 Link Here
407
    {
408
    {
408
        CGADAPTOR_CALLBACK_CLASS_NAME,
409
        CGADAPTOR_CALLBACK_CLASS_NAME,
409
        HEAPADAPTOR_CALLBACK_CLASS_NAME,
410
        HEAPADAPTOR_CALLBACK_CLASS_NAME,
411
        THREADADAPTOR_CALLBACK_CLASS_NAME,
410
        "java/lang/Object",
412
        "java/lang/Object",
411
        "sun/reflect/Generated",
413
        "sun/reflect/Generated",
412
        "jrockit/", //TODO: check why
414
        "jrockit/", //TODO: check why
(-)src-native/src/Martini/Infrastructure/HeapAdaptor/HeapAdaptor.cpp (+2 lines)
Lines 15-20 Link Here
15
#include "WideStringUtils.h"
15
#include "WideStringUtils.h"
16
#include "HeapProxy.h"
16
#include "HeapProxy.h"
17
#include "CGProxy.h"
17
#include "CGProxy.h"
18
#include "ThreadProxy.h"
18
#include "ValidityChecks.h"
19
#include "ValidityChecks.h"
19
20
20
#include <assert.h>
21
#include <assert.h>
Lines 436-441 Link Here
436
    {
437
    {
437
        CGADAPTOR_CALLBACK_CLASS_NAME,              // CGAdaptor recorder class
438
        CGADAPTOR_CALLBACK_CLASS_NAME,              // CGAdaptor recorder class
438
        HEAPADAPTOR_CALLBACK_CLASS_NAME,            // HeapAdaptor recorder class
439
        HEAPADAPTOR_CALLBACK_CLASS_NAME,            // HeapAdaptor recorder class
440
        THREADADAPTOR_CALLBACK_CLASS_NAME,          // ThreadAdaptor recorder class
439
        "jrockit/",                                 // Internal JRockit classes. 
441
        "jrockit/",                                 // Internal JRockit classes. 
440
                                                    // Can't force-load some of them
442
                                                    // Can't force-load some of them
441
                                                    // during attach/detach
443
                                                    // during attach/detach
(-)src-native/src/Martini/Infrastructure/HeapAdaptor/Makefile.dep (-2 / +3 lines)
Lines 11-18 Link Here
11
  ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \
11
  ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \
12
  ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \
12
  ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \
13
  ../../Include/MString.h ../Include/IdAllocator.h \
13
  ../../Include/MString.h ../Include/IdAllocator.h \
14
  ../Include/WideStringUtils.h ../Include/HeapProxy.h \
14
  ../Include/WideStringUtils.h \
15
  ../Include/CGProxy.h ../Include/ValidityChecks.h
15
  ../Include/HeapProxy.h ../Include/CGProxy.h ../Include/ThreadProxy.h \
16
  ../Include/ValidityChecks.h
16
	$(CPP_COMPILE)
17
	$(CPP_COMPILE)
17
18
18
$(OBJDIR)/IdAllocator.o: ../common/IdAllocator.cpp ../Include/IdAllocator.h \
19
$(OBJDIR)/IdAllocator.o: ../common/IdAllocator.cpp ../Include/IdAllocator.h \
(-)src-native/src/HeapProf/HeapProfiler.cpp (-1 / +1 lines)
Lines 37-43 Link Here
37
{
37
{
38
    m_profilerName = "Heap profiler";
38
    m_profilerName = "Heap profiler";
39
    m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.heap";  // fixed for 190684
39
    m_pProfEnv.profName = "org.eclipse.tptp.analysisType.jvmti.heap";  // fixed for 190684
40
    m_pProfEnv.m_implementedEG = EG_HEAP;
40
    m_pProfEnv.AddSupportedEG(EG_HEAP);
41
}
41
}
42
42
43
CHeapProfiler::~CHeapProfiler()
43
CHeapProfiler::~CHeapProfiler()
(-)src-native/include/JPIAgent/EC_Env.h (-1 / +13 lines)
Lines 81-86 Link Here
81
    EC_ENV_Error (ECCALL *PrintMonitorWaitedElement)(EC_Env* env, SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace);
81
    EC_ENV_Error (ECCALL *PrintMonitorWaitedElement)(EC_Env* env, SMonitorWaitedEventData* monitorWaitedData, U64 timeout, SStackTrace_* stackTrace);
82
    EC_ENV_Error (ECCALL *PrintMonitorContendedEnterElement)(EC_Env* env, SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace);
82
    EC_ENV_Error (ECCALL *PrintMonitorContendedEnterElement)(EC_Env* env, SContendedMonitorEnterEventData* conMonEnterData, SStackTrace_* stackTrace);
83
    EC_ENV_Error (ECCALL *PrintMonitorContendedEnteredElement)(EC_Env* env, SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace);
83
    EC_ENV_Error (ECCALL *PrintMonitorContendedEnteredElement)(EC_Env* env, SContendedMonitorEnteredEventData* conMonEnteredData, SStackTrace_* stackTrace);
84
    EC_ENV_Error (ECCALL *printThreadInteractionElements)(EC_Env* env, SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace);
84
85
85
    EC_ENV_Error (ECCALL *PrintCustomElement)(EC_Env* env, const char *str);
86
    EC_ENV_Error (ECCALL *PrintCustomElement)(EC_Env* env, const char *str);
86
87
Lines 94-99 Link Here
94
    bool (ECCALL *isControlled)(EC_Env* env);
95
    bool (ECCALL *isControlled)(EC_Env* env);
95
    bool (ECCALL *isEnabled)(EC_Env* env);
96
    bool (ECCALL *isEnabled)(EC_Env* env);
96
    bool (ECCALL *isAllocSitesSupported)(EC_Env* env);
97
    bool (ECCALL *isAllocSitesSupported)(EC_Env* env);
98
    bool (ECCALL *isContentionAnalysisSupported)(EC_Env* env);
99
97
	const char*(ECCALL *getUnknownOptionByName)(EC_Env* env, const char* name);
100
	const char*(ECCALL *getUnknownOptionByName)(EC_Env* env, const char* name);
98
101
99
    void (ECCALL *VMInitDone)(EC_Env* env);
102
    void (ECCALL *VMInitDone)(EC_Env* env);
Lines 186-191 Link Here
186
        return functions->PrintMonitorContendedEnteredElement(this, conMonEnteredData, stackTrace);
189
        return functions->PrintMonitorContendedEnteredElement(this, conMonEnteredData, stackTrace);
187
    }
190
    }
188
191
192
    EC_ENV_Error printThreadInteractionElements(SThreadInteractionEventData* threadInteractionData, SStackTrace_* stackTrace) {
193
        return functions->printThreadInteractionElements(this, threadInteractionData, stackTrace);
194
    }
195
196
189
    EC_ENV_Error PrintCustomElement(const char *str) {
197
    EC_ENV_Error PrintCustomElement(const char *str) {
190
        return functions->PrintCustomElement(this, str);
198
        return functions->PrintCustomElement(this, str);
191
    }
199
    }
Lines 229-235 Link Here
229
    bool isAllocSitesSupported() {
237
    bool isAllocSitesSupported() {
230
        return functions->isAllocSitesSupported(this);
238
        return functions->isAllocSitesSupported(this);
231
    }
239
    }
232
	
240
241
    bool isContentionAnalysisSupported() {
242
        return functions->isContentionAnalysisSupported(this);
243
    }
244
233
	const char* getUnknownOptionByName( const char* name ) {
245
	const char* getUnknownOptionByName( const char* name ) {
234
		return functions->getUnknownOptionByName(this, name);
246
		return functions->getUnknownOptionByName(this, name);
235
	}
247
	}
(-)src-native/src/Martini/Infrastructure/Include/MRTEInfrastructureDefinitions.h (+2 lines)
Lines 176-181 Link Here
176
#define DR_CONTAINS_METHOD_METADATA_ID(mask) \
176
#define DR_CONTAINS_METHOD_METADATA_ID(mask) \
177
    (((mask) & DR_DOTNET_METHOD_TOKEN) == DR_DOTNET_METHOD_TOKEN)
177
    (((mask) & DR_DOTNET_METHOD_TOKEN) == DR_DOTNET_METHOD_TOKEN)
178
#define DR_CONTAINS_MONITOR_TIMEOUT(mask) (((mask) & DR_MONITOR_TIMEOUT) == DR_MONITOR_TIMEOUT)
178
#define DR_CONTAINS_MONITOR_TIMEOUT(mask) (((mask) & DR_MONITOR_TIMEOUT) == DR_MONITOR_TIMEOUT)
179
#define DR_CONTAINS_MONITOR_TIMED_OUT(mask) (((mask) & DR_MONITOR_TIMED_OUT) == DR_MONITOR_TIMED_OUT)
180
#define DR_CONTAINS_THREAD_INTERACTION_TYPE(mask) (((mask) & DR_THREAD_INTERACTION_TYPE) == DR_THREAD_INTERACTION_TYPE)
179
#define DR_CONTAINS_MONITOR_OWNER_THREAD_ID(mask) (((mask) & DR_MONITOR_OWNER_THREAD_ID) == DR_MONITOR_OWNER_THREAD_ID)
181
#define DR_CONTAINS_MONITOR_OWNER_THREAD_ID(mask) (((mask) & DR_MONITOR_OWNER_THREAD_ID) == DR_MONITOR_OWNER_THREAD_ID)
180
#define DR_HAS_THREAD_DATA(mask) \
182
#define DR_HAS_THREAD_DATA(mask) \
181
    ( ((mask) & DR_THREAD_ID) || ((mask) & DR_THREAD_ELAPSED_TIME) || ((mask) & DR_THREAD_CPU_TIME)\
183
    ( ((mask) & DR_THREAD_ID) || ((mask) & DR_THREAD_ELAPSED_TIME) || ((mask) & DR_THREAD_CPU_TIME)\
(-)src-native/src/Martini/Infrastructure/Include/ThreadProxy.h (+33 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 1997-2008, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *
11
 * $Id$ 
12
 *****************************************************************************/
13
14
#ifndef _MRTE_THREADPROXY_H
15
#define _MRTE_THREADPROXY_H
16
17
#define THREADADAPTOR_CALLBACK_CLASS_NAME                      "org/eclipse/tptp/martini/ThreadProxy"
18
#define THREADADAPTOR_CALLBACK_CLASS_NAME_WITH_DOT_SEPERATOR   "org.eclipse.tptp.martini.ThreadProxy"
19
20
#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_NAME          "earlyCallNotify"  
21
#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_SIG           "(Ljava/lang/Object;)V"
22
#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_NAME       "earlyCallNotifyAll"  
23
#define THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_SIG        "(Ljava/lang/Object;)V"
24
#define THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_NAME       "earlyCallInterrupt"  
25
#define THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_SIG        "(Ljava/lang/Object;)V"
26
#define THREADADAPTOR_CALLBACK_EARLY_CALL_START_NAME           "earlyCallStart"  
27
#define THREADADAPTOR_CALLBACK_EARLY_CALL_START_SIG            "(Ljava/lang/Object;)V"
28
29
#define THREADADAPTOR_NUM_EVENT_HANDLERS                       1
30
#define THREADADAPTOR_CALLBACK_CALL_TI_NAME                    "callThreadInteraction"
31
#define THREADADAPTOR_CALLBACK_CALL_TI_SIG                     "(Ljava/lang/Object;I)V"
32
33
#endif // _MRTE_THREADPROXY_H
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile (+32 lines)
Added Link Here
1
ROOTDIR = ../../../..
2
3
include $(ROOTDIR)/src/makefile.inc
4
INCLUDES = -I ../Include \
5
	-I ../../Include \
6
	-I ../../../../include/Martini \
7
	 -I $(ROOTDIR)/src/Lin/unix
8
9
OBJS = $(OBJDIR)/ThreadAdaptor.o \
10
	$(OBJDIR)/InstrumentationAdaptorBase.o \
11
	$(OBJDIR)/WideStringUtils.o \
12
	
13
14
LIB = libThreadAdaptor.so
15
16
VER_FILE = ThreadAdaptor.ver
17
18
all: release
19
20
release: $(OBJDIR) $(OUTDIR)/$(LIB)
21
22
$(OBJDIR): 
23
	mkdir -p $(OBJDIR) ; mkdir -p $(OUTDIR)
24
25
clean: 
26
	rm -rf $(OBJS) $(OUTDIR)/$(LIB)
27
28
include ./Makefile.dep
29
30
$(OUTDIR)/$(LIB): $(OBJS)
31
	$(CPP_LINK) $(OBJS) -o $@ -L../../../../bin/linux/release/IA-32 -L$(OUTDIR) -lMartiniOSA \
32
	 $(OUTDIR)/LibraryLoader.a -lpthread -ldl $(STD_LIBS) $(VER_SCR)
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.class (+24 lines)
Added Link Here
1
Êþº¾   1 =
2
 
3
 *	 	 +	 	 ,
4
 	 - .
5
  /	 0 1	 0 2 3 4 
6
TI_NOTIFY_ALL I 
7
ConstantValue    	TI_NOTIFY    TI_INTERRUPT    TI_START    
8
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> 
9
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 
10
TIMED_WAITING Ljava/lang/Thread$State; WAITING ! 	 
11
        
12
         
13
         
14
         
15
     
16
     
17
     
18
             *· ±            	             ² ¬            	       !      ³ ±       
19
    #  $ 	       !     ³ ±       
20
    (  ) 	   !     -     
21
²   *¸ ±           /  0  2 	 " !     -     
22
²   *¸ ±           5  6  8 	 # !     V     .²   )*Á ™ "*À ¶ ² ¥ *À ¶ ² ¦ *¸ ±           <  =  > ( @ - D 	 $ !     8     ²   *Á ™ *¸ ±           I  J  K  N	 % &    '      %      	³ ³ ±       
23
        (    ) 7   
24
  0  6@
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/Makefile.dep (+45 lines)
Added Link Here
1
$(OBJDIR)/HeapAdaptor.o: ./HeapAdaptor.cpp ../Include/HeapAdaptor.h \
2
  ../Include/InstrumentationAdaptorBase.h \
3
  ../Include/InstrumentationAdaptor.h ../../../../include/Martini/OSA.h \
4
  ../../../../include/Martini/MRTEResults.h \
5
  ../../../../include/Martini/MRTETypes.h \
6
  ../../../../include/Martini/MpiAPI.h \
7
  ../../../../include/Martini/MieAPI.h \
8
  ../../../../include/Martini/MIterator.h \
9
  ../../../../include/Martini/PsuedoMnemonics \
10
  ../../../../include/Martini/MieSpecialMnemonics \
11
  ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \
12
  ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \
13
  ../../Include/MString.h \
14
  ../Include/WideStringUtils.h \
15
  ../Include/HeapProxy.h ../Include/CGProxy.h ../Include/ThreadProxy.h \
16
  ../Include/ValidityChecks.h
17
	$(CPP_COMPILE)
18
19
$(OBJDIR)/InstrumentationAdaptorBase.o: ../common/InstrumentationAdaptorBase.cpp \
20
  ../Include/InstrumentationAdaptorBase.h \
21
  ../Include/InstrumentationAdaptor.h ../../../../include/Martini/OSA.h \
22
  ../../../../include/Martini/MRTEResults.h \
23
  ../../../../include/Martini/MRTETypes.h \
24
  ../../../../include/Martini/MpiAPI.h \
25
  ../../../../include/Martini/MieAPI.h \
26
  ../../../../include/Martini/MIterator.h \
27
  ../../../../include/Martini/PsuedoMnemonics \
28
  ../../../../include/Martini/MieSpecialMnemonics \
29
  ../../../../include/Martini/MpiBase.h ../Include/ILogAssert.h \
30
  ../../Include/JIE.h ../../Include/MVector.h ../../Include/MHash.h \
31
  ../../Include/MString.h ../Include/IdAllocator.h \
32
  ../../Include/LibraryLoader.h ../Include/WideStringUtils.h \
33
  ../Include/MRTEInfrastructureDefinitions.h ../Include/ValidityChecks.h
34
	$(CPP_COMPILE)
35
36
$(OBJDIR)/WideStringUtils.o: ../common/WideStringUtils.cpp \
37
  ../Include/WideStringUtils.h ../../../../include/Martini/MieAPI.h \
38
  ../../../../include/Martini/MRTEResults.h \
39
  ../../../../include/Martini/MRTETypes.h \
40
  ../../../../include/Martini/MIterator.h \
41
  ../../../../include/Martini/PsuedoMnemonics \
42
  ../../../../include/Martini/MieSpecialMnemonics
43
	$(CPP_COMPILE)
44
45
(-)src-native/src/Martini/Infrastructure/Include/ThreadAdaptor.h (+138 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 1997-2008, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *
11
 * $Id$ 
12
 *****************************************************************************/
13
//
14
#ifndef MRTE_THREADADAPTORIMPL
15
#define MRTE_THREADADAPTORIMPL
16
17
#include "InstrumentationAdaptorBase.h"
18
#include "MVector.h"
19
#include "MHash.h"
20
#include "MString.h"
21
#include "IdAllocator.h"
22
23
#ifdef THREADADAPTOR_EXPORTS
24
#define THREADADAPTOR_API API_EXPORT
25
#else
26
#define THREADADAPTOR_API API_IMPORT
27
#endif
28
29
#define THREADADAPTOR_DLL_NAME "ThreadAdaptor"
30
31
namespace Martini { namespace ThreadAdaptor {
32
    
33
    /**
34
     * @brief Function prototype for the callThreadInteraction native method of the Thread Proxy Java 
35
     *        class
36
     *
37
     * This is a prototype for a function that provides an implementation of the 
38
     * CallNotify native method of ThreadProxy.java.
39
     */
40
    typedef void (JNICALL *TThreadInteractionHandler)(JNIEnv *env, jclass self, 
41
                                                jobject obj, jint methodID);
42
43
44
    struct SHookMethodCall {
45
        const char *methodName;
46
        JIE::TConstantPoolIndex cpCallback;
47
    };
48
49
    /**
50
     * @brief ThreadAdaptor class
51
     */
52
    class CThreadAdaptor : public Infrastructure::CInstrumentationAdaptorBase
53
    {
54
    public:
55
        CThreadAdaptor();
56
        ~CThreadAdaptor();
57
        
58
        // IInstrumentationAdaptor methods
59
60
        virtual TResult Init(Infrastructure::ILogAssert *pLogger = NULL,
61
                             MPI::IEventFilter *pFilter = NULL);
62
63
        virtual TResult ModifyClass(MPI::TId classId, 
64
                                    const Infrastructure::SClassFile &classToInstrument,
65
                                    TMemoryAllocatorFunc funcAllocator,
66
                                    Infrastructure::SClassFile *pInstrumentedClass,
67
                                    Infrastructure::IInstrumentationContext *pContext = NULL);
68
69
        virtual TResult ModifyByteCodes(MPI::TId classId, 
70
                                        const Infrastructure::SClassFile &classToInstrument,
71
                                        TMemoryAllocatorFunc funcAllocator,
72
                                        Infrastructure::SClassFile *pInstrumentedClass,
73
                                        Infrastructure::IInstrumentationContext *pContext = NULL);
74
75
    private:
76
77
        MPI::IThreadInteractionFilter *m_pFilter; // Callback function for Thread-selectivity
78
79
        // Check if the class can be instrumented
80
        TResult CanInstrumentClass(const Infrastructure::SAdaptorClassInfo &info);
81
82
        // Check if the method can be instrumented
83
        bool CanInstrumentMethod(const JIE::SJavaMethodInfo &methodInfo);
84
85
        // Add Thread instrumentation to the specified class file
86
        TResult DoThreadInstrumentation(JIE::IJavaClass *pJavaClass,
87
                                      const Infrastructure::SAdaptorClassInfo &classInfo,
88
                                      bool bJVMInitDone);
89
    
90
        bool IsProblematicMethod(const char *szClassName, const char *szMethodName);
91
92
        // Copies a class file buffer
93
        TResult CopyClassFile(Infrastructure::SClassFile *pDest, 
94
                              const Infrastructure::SClassFile& src,
95
                              TMemoryAllocatorFunc funcAllocator);
96
97
98
99
        TResult InstrumentMethodCalls(JIE::IJavaClass *pClass,
100
                                      const Infrastructure::SAdaptorClassInfo &classInfo,
101
                                      SHookMethodCall *hooks, size_t hooks_num);
102
103
        bool CheckFilter(const Infrastructure::SAdaptorClassInfo &classInfo,
104
                         const JIE::SJavaMethodInfo &methodInfo);
105
106
107
        TResult AddInstrumentationToMethod(JIE::IJavaClass *pClass,
108
                                           JIE::IJavaMethod *pMethod,
109
                                           SHookMethodCall *hooks, size_t hooks_num);
110
111
        TResult AddNotifyProbeBeforeInstr(MIE::IInstruction *pInst,
112
                                          JIE::TConstantPoolIndex cpCallback);
113
114
        // Instrumentations names
115
        MIE::SWideString m_wzThreadProxyCallbackClassName;
116
        MIE::SWideString m_wzNotifyCallbackName;
117
        MIE::SWideString m_wzNotifyCallbackSig;
118
        MIE::SWideString m_wzNotifyAllCallbackName;
119
        MIE::SWideString m_wzNotifyAllCallbackSig;
120
        MIE::SWideString m_wzInterruptCallbackName;
121
        MIE::SWideString m_wzInterruptCallbackSig;
122
        MIE::SWideString m_wzStartCallbackName;
123
        MIE::SWideString m_wzStartCallbackSig;
124
125
126
    }; // class CThreadAdaptor
127
128
    /**
129
     * @brief An API for getting the Instrumentation Adaptor interface
130
     *
131
     * @return IInstrumentationAdaptor*     A pointer to the adaptor's singleton interface
132
     */ 
133
     extern "C" THREADADAPTOR_API 
134
     Infrastructure::IInstrumentationAdaptor *GetInstrumentationAdaptor();
135
136
}} // namespace Martini::ThreadAdaptor
137
138
#endif // #define MRTE_THREADADAPTORIMPL
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.ver (+8 lines)
Added Link Here
1
{
2
    global:
3
        GetInstrumentationAdaptor;
4
    local:
5
        *;
6
};
7
8
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dsp (+245 lines)
Added Link Here
1
# Microsoft Developer Studio Project File - Name="ThreadAdaptor" - Package Owner=<4>
2
# Microsoft Developer Studio Generated Build File, Format Version 6.00
3
# ** DO NOT EDIT **
4
5
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
6
7
CFG=ThreadAdaptor - Win32 IPF Debug
8
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
9
!MESSAGE use the Export Makefile command and run
10
!MESSAGE 
11
!MESSAGE NMAKE /f "ThreadAdaptor.mak".
12
!MESSAGE 
13
!MESSAGE You can specify a configuration when running NMAKE
14
!MESSAGE by defining the macro CFG on the command line. For example:
15
!MESSAGE 
16
!MESSAGE NMAKE /f "ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug"
17
!MESSAGE 
18
!MESSAGE Possible choices for configuration are:
19
!MESSAGE 
20
!MESSAGE "ThreadAdaptor - Win32 IA32 Release" (based on "Win32 (x86) Dynamic-Link Library")
21
!MESSAGE "ThreadAdaptor - Win32 IA32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
22
!MESSAGE "ThreadAdaptor - Win32 EM64T Release" (based on "Win32 (x86) Dynamic-Link Library")
23
!MESSAGE "ThreadAdaptor - Win32 EM64T Debug" (based on "Win32 (x86) Dynamic-Link Library")
24
!MESSAGE "ThreadAdaptor - Win32 IPF Release" (based on "Win32 (x86) Dynamic-Link Library")
25
!MESSAGE "ThreadAdaptor - Win32 IPF Debug" (based on "Win32 (x86) Dynamic-Link Library")
26
!MESSAGE 
27
28
# Begin Project
29
# PROP AllowPerConfigDependencies 0
30
# PROP Scc_ProjName ""
31
# PROP Scc_LocalPath ""
32
CPP=cl.exe
33
MTL=midl.exe
34
RSC=rc.exe
35
36
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
37
38
# PROP BASE Use_MFC 0
39
# PROP BASE Use_Debug_Libraries 0
40
# PROP BASE Output_Dir "IA32 Release"
41
# PROP BASE Intermediate_Dir "IA32 Release"
42
# PROP BASE Target_Dir ""
43
# PROP Use_MFC 0
44
# PROP Use_Debug_Libraries 0
45
# PROP Output_Dir "..\..\..\..\bin\windows\release\IA-32"
46
# PROP Intermediate_Dir "release\IA-32"
47
# PROP Ignore_Export_Lib 0
48
# PROP Target_Dir ""
49
F90=df.exe
50
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CGADAPTOR_EXPORTS" /YX /FD /c
51
# 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
52
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
53
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
54
# ADD BASE RSC /l 0x409 /d "NDEBUG"
55
# ADD RSC /l 0x409 /d "NDEBUG"
56
BSC32=bscmake.exe
57
# ADD BASE BSC32 /nologo
58
# ADD BSC32 /nologo
59
LINK32=link.exe
60
# 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
61
# ADD LINK32 kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /machine:I386 /libpath:"..\..\..\..\bin\windows\release\IA-32"
62
63
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
64
65
# PROP BASE Use_MFC 0
66
# PROP BASE Use_Debug_Libraries 1
67
# PROP BASE Output_Dir "IA32 Debug"
68
# PROP BASE Intermediate_Dir "IA32 Debug"
69
# PROP BASE Target_Dir ""
70
# PROP Use_MFC 0
71
# PROP Use_Debug_Libraries 1
72
# PROP Output_Dir "..\..\..\..\bin\windows\debug\IA-32"
73
# PROP Intermediate_Dir "debug\IA-32"
74
# PROP Ignore_Export_Lib 0
75
# PROP Target_Dir ""
76
F90=df.exe
77
# 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
78
# 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
79
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
80
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
81
# ADD BASE RSC /l 0x409 /d "_DEBUG"
82
# ADD RSC /l 0x409 /d "_DEBUG"
83
BSC32=bscmake.exe
84
# ADD BASE BSC32 /nologo
85
# ADD BSC32 /nologo
86
LINK32=link.exe
87
# 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
88
# ADD LINK32 LibraryLoader.lib MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\IA-32"
89
90
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
91
92
# PROP BASE Use_MFC 0
93
# PROP BASE Use_Debug_Libraries 0
94
# PROP BASE Output_Dir "ThreadAdaptor___Win32_EM64T_Release"
95
# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_EM64T_Release"
96
# PROP BASE Ignore_Export_Lib 0
97
# PROP BASE Target_Dir ""
98
# PROP Use_MFC 0
99
# PROP Use_Debug_Libraries 0
100
# PROP Output_Dir "..\..\..\..\bin\windows\release\EM64T"
101
# PROP Intermediate_Dir "release\EM64T"
102
# PROP Ignore_Export_Lib 0
103
# PROP Target_Dir ""
104
F90=df.exe
105
# 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
106
# 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
107
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
108
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
109
# ADD BASE RSC /l 0x409 /d "NDEBUG"
110
# ADD RSC /l 0x409 /d "NDEBUG"
111
BSC32=bscmake.exe
112
# ADD BASE BSC32 /nologo
113
# ADD BSC32 /nologo
114
LINK32=link.exe
115
# ADD BASE LINK32 kernel32.lib MartiniOSA.lib /nologo /dll /machine:I386
116
# ADD LINK32 kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /machine:I386 /libpath:"..\..\..\..\bin\windows\release\EM64T"
117
118
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
119
120
# PROP BASE Use_MFC 0
121
# PROP BASE Use_Debug_Libraries 1
122
# PROP BASE Output_Dir "ThreadAdaptor___Win32_EM64T_Debug"
123
# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_EM64T_Debug"
124
# PROP BASE Ignore_Export_Lib 0
125
# PROP BASE Target_Dir ""
126
# PROP Use_MFC 0
127
# PROP Use_Debug_Libraries 1
128
# PROP Output_Dir "..\..\..\..\bin\windows\debug\EM64T"
129
# PROP Intermediate_Dir "debug\EM64T"
130
# PROP Ignore_Export_Lib 0
131
# PROP Target_Dir ""
132
F90=df.exe
133
# 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
134
# 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
135
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
136
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
137
# ADD BASE RSC /l 0x409 /d "_DEBUG"
138
# ADD RSC /l 0x409 /d "_DEBUG"
139
BSC32=bscmake.exe
140
# ADD BASE BSC32 /nologo
141
# ADD BSC32 /nologo
142
LINK32=link.exe
143
# ADD BASE LINK32 MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
144
# ADD LINK32 LibraryLoader.lib MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\EM64T"
145
146
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
147
148
# PROP BASE Use_MFC 0
149
# PROP BASE Use_Debug_Libraries 0
150
# PROP BASE Output_Dir "ThreadAdaptor___Win32_IPF_Release"
151
# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_IPF_Release"
152
# PROP BASE Ignore_Export_Lib 0
153
# PROP BASE Target_Dir ""
154
# PROP Use_MFC 0
155
# PROP Use_Debug_Libraries 0
156
# PROP Output_Dir "..\..\..\..\bin\windows\release\IPF"
157
# PROP Intermediate_Dir "release\IPF"
158
# PROP Ignore_Export_Lib 0
159
# PROP Target_Dir ""
160
F90=df.exe
161
# 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
162
# 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
163
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
164
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
165
# ADD BASE RSC /l 0x409 /d "NDEBUG"
166
# ADD RSC /l 0x409 /d "NDEBUG"
167
BSC32=bscmake.exe
168
# ADD BASE BSC32 /nologo
169
# ADD BSC32 /nologo
170
LINK32=link.exe
171
# ADD BASE LINK32 kernel32.lib MartiniOSA.lib /nologo /dll /machine:I386
172
# ADD LINK32 kernel32.lib LibraryLoader.lib MartiniOSA.lib /nologo /dll /machine:I386 /libpath:"..\..\..\..\bin\windows\release\IPF"
173
174
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
175
176
# PROP BASE Use_MFC 0
177
# PROP BASE Use_Debug_Libraries 1
178
# PROP BASE Output_Dir "ThreadAdaptor___Win32_IPF_Debug"
179
# PROP BASE Intermediate_Dir "ThreadAdaptor___Win32_IPF_Debug"
180
# PROP BASE Ignore_Export_Lib 0
181
# PROP BASE Target_Dir ""
182
# PROP Use_MFC 0
183
# PROP Use_Debug_Libraries 1
184
# PROP Output_Dir "..\..\..\..\bin\windows\debug\IPF"
185
# PROP Intermediate_Dir "debug\IPF"
186
# PROP Ignore_Export_Lib 0
187
# PROP Target_Dir ""
188
F90=df.exe
189
# 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
190
# 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
191
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
192
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
193
# ADD BASE RSC /l 0x409 /d "_DEBUG"
194
# ADD RSC /l 0x409 /d "_DEBUG"
195
BSC32=bscmake.exe
196
# ADD BASE BSC32 /nologo
197
# ADD BSC32 /nologo
198
LINK32=link.exe
199
# ADD BASE LINK32 MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
200
# ADD LINK32 LibraryLoader.lib MartiniOSA.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\bin\windows\debug\IPF"
201
202
!ENDIF 
203
204
# Begin Target
205
206
# Name "ThreadAdaptor - Win32 IA32 Release"
207
# Name "ThreadAdaptor - Win32 IA32 Debug"
208
# Name "ThreadAdaptor - Win32 EM64T Release"
209
# Name "ThreadAdaptor - Win32 EM64T Debug"
210
# Name "ThreadAdaptor - Win32 IPF Release"
211
# Name "ThreadAdaptor - Win32 IPF Debug"
212
# Begin Group "Source Files"
213
214
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
215
# Begin Source File
216
217
SOURCE=..\common\InstrumentationAdaptorBase.cpp
218
# End Source File
219
# Begin Source File
220
221
SOURCE=.\ThreadAdaptor.cpp
222
# End Source File
223
# Begin Source File
224
225
SOURCE=..\common\WideStringUtils.cpp
226
# End Source File
227
# End Group
228
# Begin Group "Header Files"
229
230
# PROP Default_Filter "h;hpp;hxx;hm;inl"
231
# Begin Source File
232
233
SOURCE=..\Include\ThreadAdaptor.h
234
# End Source File
235
# Begin Source File
236
237
SOURCE=..\Include\ThreadProxy.h
238
# End Source File
239
# End Group
240
# Begin Group "Resource Files"
241
242
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
243
# End Group
244
# End Target
245
# End Project
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.dep (+70 lines)
Added Link Here
1
# Microsoft Developer Studio Generated Dependency File, included by ThreadAdaptor.mak
2
3
.\ThreadAdaptor.cpp : \
4
	"..\..\..\..\include\martini\javamnemonics"\
5
	"..\..\..\..\include\martini\mieapi.h"\
6
	"..\..\..\..\include\martini\miespecialmnemonics"\
7
	"..\..\..\..\include\martini\miterator.h"\
8
	"..\..\..\..\include\Martini\MpiAPI.h"\
9
	"..\..\..\..\include\martini\mpibase.h"\
10
	"..\..\..\..\include\martini\mrteresults.h"\
11
	"..\..\..\..\include\martini\mrtetypes.h"\
12
	"..\..\..\..\include\Martini\OSA.h"\
13
	"..\..\..\..\include\martini\psuedomnemonics"\
14
	"..\..\Include\JIE.h"\
15
	"..\..\include\mhash.h"\
16
	"..\..\include\mstring.h"\
17
	"..\..\include\mvector.h"\
18
	"..\include\cgproxy.h"\
19
	"..\Include\ThreadAdaptor.h"\
20
	"..\include\Threadproxy.h"\
21
	"..\Include\IdAllocator.h"\
22
	"..\include\ilogassert.h"\
23
	"..\include\instrumentationadaptor.h"\
24
	"..\include\instrumentationadaptorbase.h"\
25
	"..\include\validitychecks.h"\
26
	"..\Include\WideStringUtils.h"\
27
	
28
29
..\common\IdAllocator.cpp : \
30
	"..\..\..\..\include\martini\mrteresults.h"\
31
	"..\..\..\..\include\martini\mrtetypes.h"\
32
	"..\..\..\..\include\Martini\OSA.h"\
33
	"..\Include\IdAllocator.h"\
34
	
35
36
..\common\InstrumentationAdaptorBase.cpp : \
37
	"..\..\..\..\include\martini\javamnemonics"\
38
	"..\..\..\..\include\martini\mieapi.h"\
39
	"..\..\..\..\include\martini\miespecialmnemonics"\
40
	"..\..\..\..\include\martini\miterator.h"\
41
	"..\..\..\..\include\Martini\MpiAPI.h"\
42
	"..\..\..\..\include\martini\mpibase.h"\
43
	"..\..\..\..\include\martini\mrteresults.h"\
44
	"..\..\..\..\include\martini\mrtetypes.h"\
45
	"..\..\..\..\include\Martini\OSA.h"\
46
	"..\..\..\..\include\martini\psuedomnemonics"\
47
	"..\..\Include\JIE.h"\
48
	"..\..\include\libraryloader.h"\
49
	"..\..\include\mhash.h"\
50
	"..\..\include\mstring.h"\
51
	"..\..\include\mvector.h"\
52
	"..\Include\IdAllocator.h"\
53
	"..\include\ilogassert.h"\
54
	"..\include\instrumentationadaptor.h"\
55
	"..\include\instrumentationadaptorbase.h"\
56
	"..\include\mrteinfrastructuredefinitions.h"\
57
	"..\include\validitychecks.h"\
58
	"..\Include\WideStringUtils.h"\
59
	
60
61
..\common\WideStringUtils.cpp : \
62
	"..\..\..\..\include\martini\javamnemonics"\
63
	"..\..\..\..\include\martini\mieapi.h"\
64
	"..\..\..\..\include\martini\miespecialmnemonics"\
65
	"..\..\..\..\include\martini\miterator.h"\
66
	"..\..\..\..\include\martini\mrteresults.h"\
67
	"..\..\..\..\include\martini\mrtetypes.h"\
68
	"..\..\..\..\include\martini\psuedomnemonics"\
69
	"..\Include\WideStringUtils.h"\
70
	
(-)src-native/src/ThreadProf/ThreadInteractionEvent.h (+44 lines)
Added Link Here
1
/************************************************************************
2
 * Copyright (c) 2006 - 2008 Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Alexander Alexeev, Intel - Initial API and implementation
11
 *
12
 * $Id: MonitorWaitEvent.h,v 1.2 2007/03/23 14:04:40 vrybalov Exp $ 
13
 ************************************************************************/
14
15
#ifndef _THREAD_INTERACTION_EVENT_H_
16
#define _THREAD_INTERACTION_EVENT_H_
17
18
#include "MpiAPI.h"
19
#include "ProfEnv.h"
20
#include "log.h"
21
22
namespace Martini { namespace ThreadProf {
23
24
    // CCallInterruptEvent - represents a call for interrupt method event 
25
    class CThreadInteractionEvent : public MPI::IThreadInteractionEventObserver
26
    {
27
    public:
28
        // Constructor
29
        CThreadInteractionEvent();
30
        // Destructor
31
        ~CThreadInteractionEvent();
32
        // Initializes internal data and registers monitor wait event
33
        TResult Init(BaseProf::CProfEnv* profEnv);
34
        // Inherited methods
35
        void HandleEvent(MPI::SThreadInteractionEventData &data);
36
37
    private:
38
        // profiler environment
39
        BaseProf::CProfEnv* m_pProfEnv;
40
    };
41
42
} /*namespace Martini*/ } /*namespace ThreadProf*/
43
44
#endif // _THREAD_INTERACTION_EVENT_H_
(-)src-native/src/ThreadProf/ThreadInteractionEvent.cpp (+61 lines)
Added Link Here
1
/************************************************************************
2
 * Copyright (c) 2006 - 2008 Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *    Alexander Alexeev, Intel - Initial API and implementation
11
 *
12
 * $Id: MonitorWaitEvent.cpp,v 1.9 2007/08/24 17:29:22 gnagarajan Exp $ 
13
 ************************************************************************/
14
15
#include "ThreadInteractionEvent.h"
16
17
using namespace Martini::ThreadProf;
18
using namespace Martini::BaseProf;
19
using namespace Martini::MPI;
20
using namespace Martini::JPIAgent;
21
22
CThreadInteractionEvent::CThreadInteractionEvent(){}
23
CThreadInteractionEvent::~CThreadInteractionEvent(){}
24
25
/*
26
 * Init - initializes internal data and registers for call interrupt event    
27
 */
28
TResult 
29
CThreadInteractionEvent::Init(CProfEnv* profEnv)
30
{
31
    m_pProfEnv = profEnv;
32
    TResult retVal = profEnv->m_pMpiApi->RegisterEvent(profEnv->m_clientId, *this);
33
    return retVal;
34
}
35
36
/*
37
 * HandleEvent - callback function for call interrupt event    
38
 */
39
void 
40
CThreadInteractionEvent::HandleEvent(SThreadInteractionEventData &data)
41
{
42
    LOG_ASSERT((data.validData & DR_THREAD_ID) != 0);
43
    LOG_ASSERT((data.validData & DR_OBJECT_ID) != 0);
44
    LOG_ASSERT((data.validData & DR_THREAD_INTERACTION_TYPE) != 0);
45
46
    m_pProfEnv->AddTimeOut(m_pProfEnv->ec_env->GetTime(), data.threadId);
47
    if (!m_pProfEnv->m_profilerIsActive) {
48
        m_pProfEnv->StoreThreadEvent(data.threadId, THREAD_INTERACTION, &data, 0);
49
        return;
50
    }
51
52
    m_pProfEnv->CheckObjectId(data.objectId, data.threadId);
53
    if (m_pProfEnv->ec_env->isStackInfoNormal()) {
54
        SStackTrace_ stackTrace;
55
        m_pProfEnv->GetStackTrace(data.threadId, &stackTrace);
56
        m_pProfEnv->ec_env->printThreadInteractionElements(&data, &stackTrace);
57
        m_pProfEnv->FreeStackTrace(&stackTrace);
58
    } else {
59
        m_pProfEnv->ec_env->printThreadInteractionElements(&data, 0);
60
    }
61
}
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/org/eclipse/tptp/martini/ThreadProxy.java (+83 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 1997-2008, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *
11
 * $Id$ 
12
 *****************************************************************************/
13
package org.eclipse.tptp.martini;
14
15
public class ThreadProxy {
16
	
17
	//---------------------------------------
18
	//take care to hold it synced with 
19
	//callIDs:
20
	private static final int TI_NOTIFY_ALL = 1; 
21
	private static final int TI_NOTIFY = 2; 
22
	private static final int TI_INTERRUPT = 3; 
23
	private static final int TI_START = 4; 
24
	
25
	private static int m_bJVMInit = 0;
26
	private static int m_bEventsEnabled = 0;
27
28
	public static int IsJVMInit()
29
	{
30
		return m_bJVMInit;
31
	}
32
	
33
	public static void JVMInit()
34
	{
35
		m_bJVMInit = 1;
36
	}
37
	
38
	public static void SetEventsStatus(int status)
39
	{
40
		m_bEventsEnabled = status;
41
	}
42
43
	//TODO: use javadoc 
44
	//----------------------------------------------------- 
45
	//Hook for notify and notifyAll methods of class Object
46
	public static void earlyCallNotify(Object obj) {
47
		if (m_bEventsEnabled == 1) {
48
			callThreadInteraction(obj, TI_NOTIFY_ALL);
49
		}
50
	}
51
	
52
	public static void earlyCallNotifyAll(Object obj) {
53
		if (m_bEventsEnabled == 1) {
54
			callThreadInteraction(obj, TI_NOTIFY);
55
		}
56
	}
57
	//-----------------------------------------
58
	//Hook for interrupt method of class Thread
59
	public static void earlyCallInterrupt(Object obj) {
60
		if (m_bEventsEnabled == 1) {
61
			if (obj instanceof Thread) {
62
				if (((Thread)obj).getState() == Thread.State.TIMED_WAITING ||
63
					((Thread)obj).getState() == Thread.State.WAITING) {
64
					callThreadInteraction(obj, TI_INTERRUPT);
65
				}
66
			}
67
		}
68
	}
69
	
70
	//------------------------------------- 
71
	//Hook for start method of class Thread
72
	public static void earlyCallStart(Object obj) {
73
		if (m_bEventsEnabled == 1) {
74
			if (obj instanceof Thread) {
75
				callThreadInteraction(obj, TI_START);
76
			}
77
		}
78
	}	
79
80
	//-----------------------------------
81
	//Native method pass notification to Martini
82
	public static native void callThreadInteraction(Object obj, int callID);
83
}
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.cpp (+615 lines)
Added Link Here
1
/*****************************************************************************
2
 * Copyright (c) 1997-2008, Intel Corporation.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Intel Corporation - Initial API and implementation
10
 *
11
 * $Id$ 
12
 *****************************************************************************/
13
14
#include "ThreadAdaptor.h"
15
#include "WideStringUtils.h"
16
#include "CGProxy.h"
17
#include "HeapProxy.h"
18
#include "ThreadProxy.h"
19
#include "ValidityChecks.h"
20
21
#include <assert.h>
22
#include <string.h>
23
24
#include <list>
25
26
#define JIE_FIRST_METHOD_ID 0x10000 // first ids are reserved for threads in the prf resolution
27
28
using namespace std;
29
30
using namespace Martini;
31
using namespace ThreadAdaptor;
32
using namespace JIE;
33
using namespace MIE;
34
using namespace Infrastructure;
35
using namespace OSA;
36
using namespace RTUtil;
37
38
struct TProblematicMethodInfo
39
{
40
    const char *szClassName;
41
    const char *szMethodName;
42
    TProblematicMethodInfo(const char *i_szClassName, const char *i_szMethodName)
43
        : szClassName(i_szClassName), szMethodName(i_szMethodName) {}
44
};
45
46
struct TNewObjectInfo
47
{
48
    TNewObjectInfo(char *i_szClass, TVariableID i_varId)
49
        : szClass(i_szClass), varId(i_varId) {}
50
51
    char *szClass;
52
    TVariableID varId;
53
};
54
55
extern "C" THREADADAPTOR_API IInstrumentationAdaptor* GetInstrumentationAdaptor()
56
{
57
    static CThreadAdaptor s_ThreadAdaptor;
58
    return (IInstrumentationAdaptor*)&s_ThreadAdaptor;
59
}
60
61
//////////////////////////////////////////////////////////////////////////
62
// class CThreadAdaptor implementation
63
64
//
65
// Default constructor
66
//
67
CThreadAdaptor::CThreadAdaptor()
68
    : CInstrumentationAdaptorBase(), m_pFilter(NULL)
69
{
70
    CWideStringUtils::InitWideString(m_wzThreadProxyCallbackClassName, THREADADAPTOR_CALLBACK_CLASS_NAME);
71
    CWideStringUtils::InitWideString(m_wzNotifyCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_NAME);
72
    CWideStringUtils::InitWideString(m_wzNotifyCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFY_SIG);
73
    CWideStringUtils::InitWideString(m_wzNotifyAllCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_NAME);
74
    CWideStringUtils::InitWideString(m_wzNotifyAllCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_NOTIFYALL_SIG);
75
    CWideStringUtils::InitWideString(m_wzInterruptCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_NAME);
76
    CWideStringUtils::InitWideString(m_wzInterruptCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_INTERRUPT_SIG);
77
    CWideStringUtils::InitWideString(m_wzStartCallbackName, THREADADAPTOR_CALLBACK_EARLY_CALL_START_NAME);
78
    CWideStringUtils::InitWideString(m_wzStartCallbackSig, THREADADAPTOR_CALLBACK_EARLY_CALL_START_SIG);
79
80
}
81
82
//
83
// Destructor
84
//
85
CThreadAdaptor::~CThreadAdaptor()
86
{
87
}
88
89
TResult CThreadAdaptor::Init(ILogAssert *pLogger, MPI::IEventFilter *pFilter)
90
{
91
    // Call common initializer
92
    TResult res = CInstrumentationAdaptorBase::Init(pLogger);
93
    if (MRTE_FAILED(res))
94
    {
95
        return MRTE_ERROR_FAIL;
96
    }
97
98
    // Do ThreadAdaptor-specific initialization
99
    m_pFilter = (MPI::IThreadInteractionFilter*)pFilter;
100
101
    return MRTE_RESULT_OK;
102
}
103
104
TResult CThreadAdaptor::ModifyClass(MPI::TId classId, 
105
                                  const SClassFile &classToInstrument,
106
                                  TMemoryAllocatorFunc funcAllocator,
107
                                  SClassFile *pInstrumentedClass,
108
                                  IInstrumentationContext *pInsContext)
109
{
110
    // Validate arguments
111
    if (NULL == m_pJIE)
112
    {
113
        return MRTE_ERROR_MODULE_NOT_INITIALIZED;
114
    }
115
    if (NULL == pInstrumentedClass || NULL == funcAllocator || NULL == pInsContext)
116
    {
117
        return MRTE_ERROR_ILLEGAL_ARGUMENT;
118
    }
119
    if (NULL == classToInstrument.pClassFile || 0 == classToInstrument.uiSize)
120
    {
121
        return MRTE_ERROR_ILLEGAL_ARGUMENT;
122
    }
123
124
    InvalidateInstrumentedClassBuffer(pInstrumentedClass);
125
126
    // Parse the class file
127
    IJavaClass *pJavaClass = m_pJIE->GetClassInterface(classToInstrument.pClassFile,
128
        classToInstrument.uiSize);
129
    if (NULL == pJavaClass)
130
    {
131
        // Unable to parse class file
132
        return MRTE_ERROR_ILL_CLASS_FILE;
133
    }
134
135
    SJavaClassInfo jci;
136
    TResult res = GetJavaClassInfo(&jci, pJavaClass);
137
    if (MRTE_RESULT_OK != res)
138
    {
139
        return MRTE_ERROR_FAIL;
140
    }
141
142
    SAdaptorClassInfo classInfo;
143
    SetClassInfo(&classInfo, jci, classId);
144
145
    res = CanInstrumentClass(classInfo);
146
    if (MRTE_RESULT_OK == res)
147
    {
148
        // Apply basic instrumentation to the class if required at this stage
149
        if (MRTE_RESULT_OK == res)
150
        {
151
            // Write the instrumented class file to pInstrumentedClass
152
            SBuffer buffer;
153
            res = pJavaClass->WriteBack(&buffer, funcAllocator);
154
            if (MRTE_RESULT_OK == res)
155
            {
156
                pInstrumentedClass->pClassFile = buffer.pBuffer;
157
                pInstrumentedClass->uiSize = buffer.uiActualSize;
158
            }
159
        }
160
    }
161
162
    CContext *pContext = (CContext*)pInsContext;
163
    TResult copyRes = CopyInstrumentedClassInfo(&(pContext->classInfo), classInfo, 
164
        funcAllocator);
165
    if (MRTE_FAILED(copyRes))
166
    {
167
        res = copyRes;
168
    }
169
170
//     Clean-up
171
    pJavaClass->Free();
172
    DeallocateJavaClassInfo(&jci);
173
    DeallocateAdaptorClassInfo(&classInfo);
174
175
    return res; 
176
}
177
178
179
180
TResult CThreadAdaptor::ModifyByteCodes(MPI::TId classId, 
181
                                      const SClassFile &classToInstrument,
182
                                      TMemoryAllocatorFunc funcAllocator,
183
                                      SClassFile *pInstrumentedClass,
184
                                      IInstrumentationContext *pContext)
185
{
186
    // Validate arguments
187
    if (NULL == m_pJIE)
188
    {
189
        return MRTE_ERROR_MODULE_NOT_INITIALIZED;
190
    }
191
    if (NULL == pInstrumentedClass || NULL == funcAllocator)
192
    {
193
        return MRTE_ERROR_ILLEGAL_ARGUMENT;
194
    }
195
    if (NULL == classToInstrument.pClassFile || 0 == classToInstrument.uiSize)
196
    {
197
        return MRTE_ERROR_ILLEGAL_ARGUMENT;
198
    }
199
200
    InvalidateInstrumentedClassBuffer(pInstrumentedClass);
201
202
    // Parse the class file
203
    IJavaClass *pJavaClass = m_pJIE->GetClassInterface(classToInstrument.pClassFile,
204
        classToInstrument.uiSize);
205
    if (NULL == pJavaClass)
206
    {
207
        // unable to parse class file
208
        return MRTE_ERROR_ILL_CLASS_FILE;
209
    }
210
211
    CContext *pThreadContext = (CContext*)pContext;
212
    TResult res = CanInstrumentClass(pThreadContext->classInfo);
213
    if (MRTE_RESULT_OK == res)
214
    {
215
        // Apply thread instrumentation to the class
216
        res = DoThreadInstrumentation(pJavaClass, pThreadContext->classInfo, m_bJVMInitDone);
217
        if (MRTE_RESULT_OK == res)
218
        {
219
            // Write the instrumented class file to pInstrumentedClass
220
            SBuffer buffer;
221
            res = pJavaClass->WriteBack(&buffer, funcAllocator);
222
            if (MRTE_RESULT_OK == res)
223
            {
224
                pInstrumentedClass->pClassFile = buffer.pBuffer;
225
                pInstrumentedClass->uiSize = buffer.uiActualSize;
226
            }
227
        }
228
    }
229
230
    // Clean-up
231
    pJavaClass->Free();
232
233
    return res; 
234
}
235
236
//
237
// Copies a class file buffer
238
//
239
// Parameters:
240
//      pDest           [out]   : destination buffer
241
//      src             [in]    : source buffer
242
//      funcAllocator   [in]    : a function to use for allocating memory for pDest buffers
243
//
244
// Returns
245
//      MRTE_RESULT_OK              : success
246
//      MRTE_ERROR_OUT_OF_MEMORY    : not enough memory to complete the operation
247
//
248
TResult CThreadAdaptor::CopyClassFile(SClassFile *pDest, 
249
                                    const SClassFile& src,
250
                                    TMemoryAllocatorFunc funcAllocator)
251
{
252
    pDest->uiSize = src.uiSize;
253
    pDest->pClassFile = (unsigned char *)funcAllocator(src.uiSize);
254
    if (NULL == pDest->pClassFile)
255
    {
256
        return MRTE_ERROR_OUT_OF_MEMORY;
257
    }
258
    memcpy(pDest->pClassFile, src.pClassFile, src.uiSize);
259
    return MRTE_RESULT_OK;
260
}
261
262
263
264
//
265
// Add Thread instrumentation to the class
266
//
267
// Parameters:
268
//      pJavaClass      [in,out]    : Java class to instrument
269
//      classInfo       [in]        : Java class information, including an array of methods
270
//                                    that should be instrumented.
271
//      bJVMInitDone    [in]        : Whether the JVM has finished initialization or not
272
//
273
// Returns:
274
//      MRTE_RESULT_OK              : success
275
//      MRTE_ERROR_FAIL             : instrumentation failure
276
//
277
TResult CThreadAdaptor::DoThreadInstrumentation(IJavaClass *pJavaClass,
278
                                            const SAdaptorClassInfo &classInfo,
279
                                            bool bJVMInitDone)
280
{
281
    TResult res = MRTE_RESULT_OK;
282
283
    if (pJavaClass == NULL)
284
    {
285
        return (MRTE_ERROR_ILLEGAL_ARGUMENT);
286
    }
287
288
    TConstantPoolIndex cpNotifyCallback = pJavaClass->RegisterRecorderCallback(
289
        m_wzThreadProxyCallbackClassName, m_wzNotifyCallbackName, m_wzNotifyCallbackSig);
290
    TConstantPoolIndex cpNotifyAllCallback = pJavaClass->RegisterRecorderCallback(
291
        m_wzThreadProxyCallbackClassName, m_wzNotifyAllCallbackName, m_wzNotifyAllCallbackSig);
292
    TConstantPoolIndex cpInterruptCallback = pJavaClass->RegisterRecorderCallback(
293
        m_wzThreadProxyCallbackClassName, m_wzInterruptCallbackName, m_wzInterruptCallbackSig);
294
    TConstantPoolIndex cpStartCallback = pJavaClass->RegisterRecorderCallback(
295
        m_wzThreadProxyCallbackClassName, m_wzStartCallbackName, m_wzStartCallbackSig);
296
297
    if (cpNotifyCallback    == ILLEGAL_CP_ENTRY ||
298
        cpNotifyAllCallback == ILLEGAL_CP_ENTRY ||
299
        cpInterruptCallback == ILLEGAL_CP_ENTRY ||
300
        cpStartCallback     == ILLEGAL_CP_ENTRY)
301
    {
302
        return (MRTE_ERROR_ILLEGAL_ARGUMENT);
303
    }
304
305
    SHookMethodCall MethodCallHooks [] = {
306
        {"notify", cpNotifyCallback},
307
        {"notifyAll", cpNotifyAllCallback},
308
        {"interrupt", cpInterruptCallback},
309
        {"start", cpStartCallback},
310
    };
311
312
    res = InstrumentMethodCalls(pJavaClass, classInfo, MethodCallHooks,
313
        sizeof(MethodCallHooks)/sizeof(SHookMethodCall));
314
315
    return res;
316
}
317
318
319
320
TResult
321
CThreadAdaptor::InstrumentMethodCalls(IJavaClass *pClass,
322
                                      const SAdaptorClassInfo &classInfo,
323
                                      SHookMethodCall *hooks,
324
                                      size_t hooksNumber)
325
{
326
    TResult res;
327
    IJavaMethod *pMethod;
328
    TJavaMethodIterator *pMethIter = pClass->GetMethodIterator();
329
330
    SJavaMethodInfo methodInfo;
331
    CWideStringUtils::AllocateWideString(methodInfo.className, 1000);
332
    CWideStringUtils::AllocateWideString(methodInfo.methodName, 1000);
333
    CWideStringUtils::AllocateWideString(methodInfo.methodSignature, 1000);
334
335
    bool isNotInstrumented = true;
336
    while (pMethIter->HasNext())
337
    {
338
        pMethod = pMethIter->GetNext();
339
        res = pMethod->GetMethodInfo(&methodInfo);
340
341
        if (MRTE_ERROR_BUFFER_TOO_SHORT == res)
342
        {
343
            // One of the buffers are too short. Fix sizes and try again
344
            CWideStringUtils::ReallocateWideString(methodInfo.className);
345
            CWideStringUtils::ReallocateWideString(methodInfo.methodName);
346
            CWideStringUtils::ReallocateWideString(methodInfo.methodSignature);
347
            res = pMethod->GetMethodInfo(&methodInfo);
348
        }
349
350
        
351
        if (CanInstrumentMethod(methodInfo) &&
352
            CheckFilter(classInfo, methodInfo))
353
        {
354
                res = AddInstrumentationToMethod(pClass, pMethod,
355
                hooks, hooksNumber);
356
                if (MRTE_FAILED(res))
357
                {
358
                    CWideStringUtils::FreeWideString(methodInfo.className);
359
                    CWideStringUtils::FreeWideString(methodInfo.methodName);
360
                    CWideStringUtils::FreeWideString(methodInfo.methodSignature);
361
                    return res;
362
                }
363
                isNotInstrumented = false;
364
        }
365
    }
366
367
    CWideStringUtils::FreeWideString(methodInfo.className);
368
    CWideStringUtils::FreeWideString(methodInfo.methodName);
369
    CWideStringUtils::FreeWideString(methodInfo.methodSignature);
370
371
    if (isNotInstrumented)
372
    {
373
        return MRTE_ERROR_INSTRUMENTATION_NOT_NEEDED;
374
    }
375
    return MRTE_RESULT_OK;
376
}
377
378
379
380
381
382
TResult
383
CThreadAdaptor::AddInstrumentationToMethod(IJavaClass *pClass,
384
                        IJavaMethod *pMethod,
385
                        SHookMethodCall *hooks, size_t hooksNumber)
386
{
387
388
    if (pMethod == NULL)
389
    {
390
        return (MRTE_ERROR_ILLEGAL_ARGUMENT);
391
    }
392
393
    TResult res;
394
395
    TInstructionListIterator *pInstIter =
396
        pMethod->GetInstructionListIterator(IET_ALL_INSTRUCTIONS);
397
398
    SConstantPoolEntryValue cpMethodValue;
399
    cpMethodValue.type = CPT_METHOD;
400
401
    // TODO: add constants
402
    // TODO: free memory
403
    CWideStringUtils::AllocateWideString(cpMethodValue.u.methodVal.className, 1000);
404
    CWideStringUtils::AllocateWideString(cpMethodValue.u.methodVal.name, 1000);
405
    CWideStringUtils::AllocateWideString(cpMethodValue.u.methodVal.signature, 1000);
406
407
408
    while (pInstIter->HasNext())
409
    {
410
        IInstruction *pInst = pInstIter->GetNext();
411
        IInstruction *pNewInst = NULL;
412
        SOperand opInvokeOper;
413
414
        switch (pInst->GetMnemonic())
415
        {
416
        case MNM_INVOKEVIRTUAL: {
417
            pInst->GetOperand(&opInvokeOper);
418
            if (opInvokeOper.type != OT_JAVA_CP_INDEX)
419
            {
420
                //TODO: INFORM ABOUT ERROR
421
            }
422
423
            pClass->GetValueFromCPEntry(opInvokeOper.val.cpIndex, &cpMethodValue);
424
            if (cpMethodValue.type != CPT_METHOD)
425
            {
426
                //TODO: INFORM ABOUT ERROR
427
            }
428
                
429
            char *szInvokedMethod = CWideStringUtils::WideStringToCString(cpMethodValue.u.methodVal.name);
430
431
            for (int i = 0; i < hooksNumber; i++)
432
            {
433
                if (strcmp(szInvokedMethod, hooks[i].methodName) == 0)
434
                {
435
                    AddNotifyProbeBeforeInstr(pInst, hooks[i].cpCallback);
436
                }
437
            }
438
439
            delete [] szInvokedMethod;
440
            
441
            break; }
442
        case MNM_INVOKESTATIC:
443
        case MNM_INVOKESPECIAL:
444
        case MNM_INVOKEINTERFACE: {
445
446
            break; }
447
        }
448
    }
449
    pInstIter->Free();
450
    res = pMethod->ApplyInstrumentation();
451
452
    return (res);
453
}
454
455
456
TResult
457
CThreadAdaptor::AddNotifyProbeBeforeInstr(IInstruction *pInst,
458
                                            TConstantPoolIndex cpCallback)
459
{
460
    TResult res;
461
    IInstruction *pNewInst = pInst;
462
    SOperand opInvokeOper;
463
464
    res = pNewInst->AddBefore(&pNewInst, MNM_DUP);
465
466
    if (MRTE_FAILED(res))
467
    {
468
        return (res);
469
    }
470
471
    opInvokeOper.type = OT_JAVA_CP_INDEX;
472
    opInvokeOper.val.cpIndex = cpCallback;
473
    res = pNewInst->AddAfter(&pNewInst, MNM_INVOKESTATIC, &opInvokeOper);
474
475
    return (MRTE_RESULT_OK);
476
}
477
478
479
480
//
481
// Checks if the class can be instrumented.
482
//
483
// Parameters:
484
//      info    : class information
485
//
486
// Returns:
487
//      MRTE_RESULT_OK                          : class can be instrumented
488
//      MRTE_ERROR_INSTRUMENTATION_NOT_NEEDED   : the class will not be instrumented
489
//                                                at all. This value is returned
490
//                                                for interface classes.
491
//      MRTE_ERROR_UNABLE_TO_INSTRUMENT         : the class cannot be instrumented.
492
//                                                This value is returned for classes
493
//                                                the Thread Adaptor cannot
494
//                                                instrument.
495
//
496
TResult CThreadAdaptor::CanInstrumentClass(const SAdaptorClassInfo &info)
497
{
498
    static char *ExcludedClassPatterns[] = 
499
    {
500
        CGADAPTOR_CALLBACK_CLASS_NAME,              // CGAdaptor recorder class
501
        HEAPADAPTOR_CALLBACK_CLASS_NAME,            // HeapAdaptor recorder class
502
        THREADADAPTOR_CALLBACK_CLASS_NAME,          // ThreadAdaptor recorder class
503
504
        "jrockit/",                                 // Internal JRockit classes. 
505
                                                    // Can't force-load some of them
506
                                                    // during attach/detach
507
        "java/lang/J9VM",                           // IBM Internal classes (J9 VM)
508
        "java/lang/Object",                         // Do not instrument j.l.Object
509
        "com/ibm/crypto",                           // Cause verification errors. //TODO: fix
510
        "sun/reflect/Generated",                    // Classes generated during runtime to 
511
                                                    // support reflection
512
        "com/Intel/VTune/VTuneAPI",                 // VTune API Proxy class
513
        "org/eclipse/hyades/collection/profiler",    // TPTP Profiler API Proxy class
514
        "java/lang/",                               // Patch to IBM redefinition problem
515
        "java/security/",
516
        "java/awt/",
517
        "javax/swing/"
518
        "com/ibm/jvm/",
519
        "com/ibm/misc/",
520
        "com/ibm/oti/",
521
        "sun/security/",
522
        "sun/misc/",
523
        "sun/awt/",
524
        "sun/java2d/",
525
        "org/eclipse/hyades/collection/profiler"    // TPTP Profiler API Proxy class
526
    };
527
528
    // Can't instrument interface classes as they contain no code
529
    if (CAF_INTERFACE & info.uiAttributeFlags)
530
    {
531
        return MRTE_ERROR_INSTRUMENTATION_NOT_NEEDED;
532
    }
533
534
    // Check if the class appear in the excluded class patterns list
535
    const char *szClassName = info.szClassName;
536
    unsigned int i;
537
    for (i = 0; i < SIZE_OF_ARRAY(ExcludedClassPatterns); ++i)
538
    {
539
        char *szExcludedPattern = ExcludedClassPatterns[i];
540
        if (strstr(szClassName, szExcludedPattern) != NULL)
541
        {
542
            LOG_INFORMATIVE1("CThreadAdaptor", 5, false, "Class '%s' will not be instrumented",
543
                szClassName);
544
            return MRTE_ERROR_UNABLE_TO_INSTRUMENT;
545
        }
546
    }
547
548
    // The class can be instrumented
549
    return MRTE_RESULT_OK;
550
}
551
552
//
553
// Checks if the method can be instrumented
554
//
555
// Parameters:
556
//      methodInfo  : method information
557
//
558
// Returns:
559
//      true    : the method can be instrumented
560
//      false   : the method cannot be instrumented
561
//
562
bool CThreadAdaptor::CanInstrumentMethod(const SJavaMethodInfo &methodInfo)
563
{
564
    //TODO: log methods that are not instrumented
565
    if (methodInfo.uiAttributeFlags & MAF_NATIVE ||
566
        methodInfo.uiAttributeFlags & MAF_ABSTRACT)
567
    {
568
        // can't instrument native and abstract methods as they have no code
569
        return false;
570
    }
571
572
    char *szClassName = CWideStringUtils::WideStringToCString(methodInfo.className);
573
    char *szMethodName = CWideStringUtils::WideStringToCString(methodInfo.methodName);
574
    bool bIsProblematic = IsProblematicMethod(szClassName, szMethodName);
575
    delete [] szClassName;
576
    delete [] szMethodName;
577
578
    return (!bIsProblematic);
579
}
580
581
bool CThreadAdaptor::IsProblematicMethod(const char *szClassName, 
582
                                       const char *szMethodName)
583
{
584
    if (   strcmp(szClassName, "java/lang/ref/Reference") == 0
585
        || strcmp(szClassName, "java/lang/ref/Finalizer") == 0
586
        )
587
    {
588
        return true;
589
    }
590
    return false;
591
}
592
593
594
bool CThreadAdaptor::CheckFilter(const SAdaptorClassInfo &classInfo,
595
                                 const SJavaMethodInfo &methodInfo)
596
{
597
    bool notified;
598
    char *szMethodName;
599
    if (NULL == m_pFilter)
600
    {
601
        // No selectivity callback is defined. All methods should be instrumented
602
        return true;
603
    }
604
605
    szMethodName = CWideStringUtils::WideStringToCString(methodInfo.methodName);
606
    // Invoke the selectivity callback
607
    MPI::SThreadInteractionFilterData threadInteractionFilter;
608
    threadInteractionFilter.szClassName = classInfo.szClassName;
609
    threadInteractionFilter.szMethodName = szMethodName;
610
611
    notified = m_pFilter->ShouldNotify(threadInteractionFilter);
612
613
    delete [] szMethodName;
614
    return notified;
615
}
(-)src-native/src/Martini/Infrastructure/ThreadAdaptor/ThreadAdaptor.mak (+924 lines)
Added Link Here
1
# Microsoft Developer Studio Generated NMAKE File, Based on ThreadAdaptor.dsp
2
!IF "$(CFG)" == ""
3
CFG=ThreadAdaptor - Win32 IPF Debug
4
!MESSAGE No configuration specified. Defaulting to ThreadAdaptor - Win32 IPF Debug.
5
!ENDIF 
6
7
!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"
8
!MESSAGE Invalid configuration "$(CFG)" specified.
9
!MESSAGE You can specify a configuration when running NMAKE
10
!MESSAGE by defining the macro CFG on the command line. For example:
11
!MESSAGE 
12
!MESSAGE NMAKE /f "ThreadAdaptor.mak" CFG="ThreadAdaptor - Win32 IPF Debug"
13
!MESSAGE 
14
!MESSAGE Possible choices for configuration are:
15
!MESSAGE 
16
!MESSAGE "ThreadAdaptor - Win32 IA32 Release" (based on "Win32 (x86) Dynamic-Link Library")
17
!MESSAGE "ThreadAdaptor - Win32 IA32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
18
!MESSAGE "ThreadAdaptor - Win32 EM64T Release" (based on "Win32 (x86) Dynamic-Link Library")
19
!MESSAGE "ThreadAdaptor - Win32 EM64T Debug" (based on "Win32 (x86) Dynamic-Link Library")
20
!MESSAGE "ThreadAdaptor - Win32 IPF Release" (based on "Win32 (x86) Dynamic-Link Library")
21
!MESSAGE "ThreadAdaptor - Win32 IPF Debug" (based on "Win32 (x86) Dynamic-Link Library")
22
!MESSAGE 
23
!ERROR An invalid configuration is specified.
24
!ENDIF 
25
26
!IF "$(OS)" == "Windows_NT"
27
NULL=
28
!ELSE 
29
NULL=nul
30
!ENDIF 
31
32
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
33
34
OUTDIR=.\..\..\..\..\bin\windows\release\IA-32
35
INTDIR=.\release\IA-32
36
# Begin Custom Macros
37
OutDir=.\..\..\..\..\bin\windows\release\IA-32
38
# End Custom Macros
39
40
!IF "$(RECURSE)" == "0" 
41
42
ALL : "$(OUTDIR)\ThreadAdaptor.dll"
43
44
!ELSE 
45
46
ALL : "MartiniOSA - Win32 IA32 Release" "LibraryLoader - Win32 IA32 Release" "$(OUTDIR)\ThreadAdaptor.dll"
47
48
!ENDIF 
49
50
!IF "$(RECURSE)" == "1" 
51
CLEAN :"LibraryLoader - Win32 IA32 ReleaseCLEAN" "MartiniOSA - Win32 IA32 ReleaseCLEAN" 
52
!ELSE 
53
CLEAN :
54
!ENDIF 
55
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.obj"
56
	-@erase "$(INTDIR)\ThreadAdaptor.obj"
57
	-@erase "$(INTDIR)\vc60.idb"
58
	-@erase "$(INTDIR)\WideStringUtils.obj"
59
	-@erase "$(OUTDIR)\ThreadAdaptor.dll"
60
	-@erase "$(OUTDIR)\ThreadAdaptor.exp"
61
	-@erase "$(OUTDIR)\ThreadAdaptor.lib"
62
63
"$(OUTDIR)" :
64
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
65
66
"$(INTDIR)" :
67
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
68
69
F90=df.exe
70
CPP=cl.exe
71
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 
72
73
.c{$(INTDIR)}.obj::
74
   $(CPP) @<<
75
   $(CPP_PROJ) $< 
76
<<
77
78
.cpp{$(INTDIR)}.obj::
79
   $(CPP) @<<
80
   $(CPP_PROJ) $< 
81
<<
82
83
.cxx{$(INTDIR)}.obj::
84
   $(CPP) @<<
85
   $(CPP_PROJ) $< 
86
<<
87
88
.c{$(INTDIR)}.sbr::
89
   $(CPP) @<<
90
   $(CPP_PROJ) $< 
91
<<
92
93
.cpp{$(INTDIR)}.sbr::
94
   $(CPP) @<<
95
   $(CPP_PROJ) $< 
96
<<
97
98
.cxx{$(INTDIR)}.sbr::
99
   $(CPP) @<<
100
   $(CPP_PROJ) $< 
101
<<
102
103
MTL=midl.exe
104
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
105
RSC=rc.exe
106
BSC32=bscmake.exe
107
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" 
108
BSC32_SBRS= \
109
	
110
LINK32=link.exe
111
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" 
112
LINK32_OBJS= \
113
	"$(INTDIR)\InstrumentationAdaptorBase.obj" \
114
	"$(INTDIR)\ThreadAdaptor.obj" \
115
	"$(INTDIR)\WideStringUtils.obj" \
116
	"$(OUTDIR)\LibraryLoader.lib" \
117
	"$(OUTDIR)\MartiniOSA.lib"
118
119
"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
120
    $(LINK32) @<<
121
  $(LINK32_FLAGS) $(LINK32_OBJS)
122
<<
123
124
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
125
126
OUTDIR=.\..\..\..\..\bin\windows\debug\IA-32
127
INTDIR=.\debug\IA-32
128
# Begin Custom Macros
129
OutDir=.\..\..\..\..\bin\windows\debug\IA-32
130
# End Custom Macros
131
132
!IF "$(RECURSE)" == "0" 
133
134
ALL : "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc"
135
136
!ELSE 
137
138
ALL : "MartiniOSA - Win32 IA32 Debug" "LibraryLoader - Win32 IA32 Debug" "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc"
139
140
!ENDIF 
141
142
!IF "$(RECURSE)" == "1" 
143
CLEAN :"LibraryLoader - Win32 IA32 DebugCLEAN" "MartiniOSA - Win32 IA32 DebugCLEAN" 
144
!ELSE 
145
CLEAN :
146
!ENDIF 
147
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.obj"
148
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.sbr"
149
	-@erase "$(INTDIR)\ThreadAdaptor.obj"
150
	-@erase "$(INTDIR)\ThreadAdaptor.sbr"
151
	-@erase "$(INTDIR)\vc60.idb"
152
	-@erase "$(INTDIR)\vc60.pdb"
153
	-@erase "$(INTDIR)\WideStringUtils.obj"
154
	-@erase "$(INTDIR)\WideStringUtils.sbr"
155
	-@erase "$(OUTDIR)\ThreadAdaptor.bsc"
156
	-@erase "$(OUTDIR)\ThreadAdaptor.dll"
157
	-@erase "$(OUTDIR)\ThreadAdaptor.exp"
158
	-@erase "$(OUTDIR)\ThreadAdaptor.ilk"
159
	-@erase "$(OUTDIR)\ThreadAdaptor.lib"
160
	-@erase "$(OUTDIR)\ThreadAdaptor.pdb"
161
162
"$(OUTDIR)" :
163
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
164
165
"$(INTDIR)" :
166
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
167
168
F90=df.exe
169
CPP=cl.exe
170
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 
171
172
.c{$(INTDIR)}.obj::
173
   $(CPP) @<<
174
   $(CPP_PROJ) $< 
175
<<
176
177
.cpp{$(INTDIR)}.obj::
178
   $(CPP) @<<
179
   $(CPP_PROJ) $< 
180
<<
181
182
.cxx{$(INTDIR)}.obj::
183
   $(CPP) @<<
184
   $(CPP_PROJ) $< 
185
<<
186
187
.c{$(INTDIR)}.sbr::
188
   $(CPP) @<<
189
   $(CPP_PROJ) $< 
190
<<
191
192
.cpp{$(INTDIR)}.sbr::
193
   $(CPP) @<<
194
   $(CPP_PROJ) $< 
195
<<
196
197
.cxx{$(INTDIR)}.sbr::
198
   $(CPP) @<<
199
   $(CPP_PROJ) $< 
200
<<
201
202
MTL=midl.exe
203
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
204
RSC=rc.exe
205
BSC32=bscmake.exe
206
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" 
207
BSC32_SBRS= \
208
	"$(INTDIR)\InstrumentationAdaptorBase.sbr" \
209
	"$(INTDIR)\ThreadAdaptor.sbr" \
210
	"$(INTDIR)\WideStringUtils.sbr"
211
212
"$(OUTDIR)\ThreadAdaptor.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
213
    $(BSC32) @<<
214
  $(BSC32_FLAGS) $(BSC32_SBRS)
215
<<
216
217
LINK32=link.exe
218
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" 
219
LINK32_OBJS= \
220
	"$(INTDIR)\InstrumentationAdaptorBase.obj" \
221
	"$(INTDIR)\ThreadAdaptor.obj" \
222
	"$(INTDIR)\WideStringUtils.obj" \
223
	"$(OUTDIR)\LibraryLoader.lib" \
224
	"$(OUTDIR)\MartiniOSA.lib"
225
226
"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
227
    $(LINK32) @<<
228
  $(LINK32_FLAGS) $(LINK32_OBJS)
229
<<
230
231
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
232
233
OUTDIR=.\..\..\..\..\bin\windows\release\EM64T
234
INTDIR=.\release\EM64T
235
# Begin Custom Macros
236
OutDir=.\..\..\..\..\bin\windows\release\EM64T
237
# End Custom Macros
238
239
!IF "$(RECURSE)" == "0" 
240
241
ALL : "$(OUTDIR)\ThreadAdaptor.dll"
242
243
!ELSE 
244
245
ALL : "MartiniOSA - Win32 EM64T Release" "LibraryLoader - Win32 EM64T Release" "$(OUTDIR)\ThreadAdaptor.dll"
246
247
!ENDIF 
248
249
!IF "$(RECURSE)" == "1" 
250
CLEAN :"LibraryLoader - Win32 EM64T ReleaseCLEAN" "MartiniOSA - Win32 EM64T ReleaseCLEAN" 
251
!ELSE 
252
CLEAN :
253
!ENDIF 
254
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.obj"
255
	-@erase "$(INTDIR)\ThreadAdaptor.obj"
256
	-@erase "$(INTDIR)\vc60.idb"
257
	-@erase "$(INTDIR)\WideStringUtils.obj"
258
	-@erase "$(OUTDIR)\ThreadAdaptor.dll"
259
	-@erase "$(OUTDIR)\ThreadAdaptor.exp"
260
	-@erase "$(OUTDIR)\ThreadAdaptor.lib"
261
262
"$(OUTDIR)" :
263
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
264
265
"$(INTDIR)" :
266
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
267
268
F90=df.exe
269
CPP=cl.exe
270
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 
271
272
.c{$(INTDIR)}.obj::
273
   $(CPP) @<<
274
   $(CPP_PROJ) $< 
275
<<
276
277
.cpp{$(INTDIR)}.obj::
278
   $(CPP) @<<
279
   $(CPP_PROJ) $< 
280
<<
281
282
.cxx{$(INTDIR)}.obj::
283
   $(CPP) @<<
284
   $(CPP_PROJ) $< 
285
<<
286
287
.c{$(INTDIR)}.sbr::
288
   $(CPP) @<<
289
   $(CPP_PROJ) $< 
290
<<
291
292
.cpp{$(INTDIR)}.sbr::
293
   $(CPP) @<<
294
   $(CPP_PROJ) $< 
295
<<
296
297
.cxx{$(INTDIR)}.sbr::
298
   $(CPP) @<<
299
   $(CPP_PROJ) $< 
300
<<
301
302
MTL=midl.exe
303
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
304
RSC=rc.exe
305
BSC32=bscmake.exe
306
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" 
307
BSC32_SBRS= \
308
	
309
LINK32=link.exe
310
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" 
311
LINK32_OBJS= \
312
	"$(INTDIR)\InstrumentationAdaptorBase.obj" \
313
	"$(INTDIR)\ThreadAdaptor.obj" \
314
	"$(INTDIR)\WideStringUtils.obj" \
315
	"$(OUTDIR)\LibraryLoader.lib" \
316
	"$(OUTDIR)\MartiniOSA.lib"
317
318
"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
319
    $(LINK32) @<<
320
  $(LINK32_FLAGS) $(LINK32_OBJS)
321
<<
322
323
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
324
325
OUTDIR=.\..\..\..\..\bin\windows\debug\EM64T
326
INTDIR=.\debug\EM64T
327
# Begin Custom Macros
328
OutDir=.\..\..\..\..\bin\windows\debug\EM64T
329
# End Custom Macros
330
331
!IF "$(RECURSE)" == "0" 
332
333
ALL : "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc"
334
335
!ELSE 
336
337
ALL : "MartiniOSA - Win32 EM64T Debug" "LibraryLoader - Win32 EM64T Debug" "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc"
338
339
!ENDIF 
340
341
!IF "$(RECURSE)" == "1" 
342
CLEAN :"LibraryLoader - Win32 EM64T DebugCLEAN" "MartiniOSA - Win32 EM64T DebugCLEAN" 
343
!ELSE 
344
CLEAN :
345
!ENDIF 
346
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.obj"
347
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.sbr"
348
	-@erase "$(INTDIR)\ThreadAdaptor.obj"
349
	-@erase "$(INTDIR)\ThreadAdaptor.sbr"
350
	-@erase "$(INTDIR)\vc60.idb"
351
	-@erase "$(INTDIR)\vc60.pdb"
352
	-@erase "$(INTDIR)\WideStringUtils.obj"
353
	-@erase "$(INTDIR)\WideStringUtils.sbr"
354
	-@erase "$(OUTDIR)\ThreadAdaptor.bsc"
355
	-@erase "$(OUTDIR)\ThreadAdaptor.dll"
356
	-@erase "$(OUTDIR)\ThreadAdaptor.exp"
357
	-@erase "$(OUTDIR)\ThreadAdaptor.ilk"
358
	-@erase "$(OUTDIR)\ThreadAdaptor.lib"
359
	-@erase "$(OUTDIR)\ThreadAdaptor.pdb"
360
361
"$(OUTDIR)" :
362
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
363
364
"$(INTDIR)" :
365
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
366
367
F90=df.exe
368
CPP=cl.exe
369
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 
370
371
.c{$(INTDIR)}.obj::
372
   $(CPP) @<<
373
   $(CPP_PROJ) $< 
374
<<
375
376
.cpp{$(INTDIR)}.obj::
377
   $(CPP) @<<
378
   $(CPP_PROJ) $< 
379
<<
380
381
.cxx{$(INTDIR)}.obj::
382
   $(CPP) @<<
383
   $(CPP_PROJ) $< 
384
<<
385
386
.c{$(INTDIR)}.sbr::
387
   $(CPP) @<<
388
   $(CPP_PROJ) $< 
389
<<
390
391
.cpp{$(INTDIR)}.sbr::
392
   $(CPP) @<<
393
   $(CPP_PROJ) $< 
394
<<
395
396
.cxx{$(INTDIR)}.sbr::
397
   $(CPP) @<<
398
   $(CPP_PROJ) $< 
399
<<
400
401
MTL=midl.exe
402
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
403
RSC=rc.exe
404
BSC32=bscmake.exe
405
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" 
406
BSC32_SBRS= \
407
	"$(INTDIR)\InstrumentationAdaptorBase.sbr" \
408
	"$(INTDIR)\ThreadAdaptor.sbr" \
409
	"$(INTDIR)\WideStringUtils.sbr"
410
411
"$(OUTDIR)\ThreadAdaptor.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
412
    $(BSC32) @<<
413
  $(BSC32_FLAGS) $(BSC32_SBRS)
414
<<
415
416
LINK32=link.exe
417
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" 
418
LINK32_OBJS= \
419
	"$(INTDIR)\InstrumentationAdaptorBase.obj" \
420
	"$(INTDIR)\ThreadAdaptor.obj" \
421
	"$(INTDIR)\WideStringUtils.obj" \
422
	"$(OUTDIR)\LibraryLoader.lib" \
423
	"$(OUTDIR)\MartiniOSA.lib"
424
425
"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
426
    $(LINK32) @<<
427
  $(LINK32_FLAGS) $(LINK32_OBJS)
428
<<
429
430
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
431
432
OUTDIR=.\..\..\..\..\bin\windows\release\IPF
433
INTDIR=.\release\IPF
434
# Begin Custom Macros
435
OutDir=.\..\..\..\..\bin\windows\release\IPF
436
# End Custom Macros
437
438
!IF "$(RECURSE)" == "0" 
439
440
ALL : "$(OUTDIR)\ThreadAdaptor.dll"
441
442
!ELSE 
443
444
ALL : "MartiniOSA - Win32 IPF Release" "LibraryLoader - Win32 IPF Release" "$(OUTDIR)\ThreadAdaptor.dll"
445
446
!ENDIF 
447
448
!IF "$(RECURSE)" == "1" 
449
CLEAN :"LibraryLoader - Win32 IPF ReleaseCLEAN" "MartiniOSA - Win32 IPF ReleaseCLEAN" 
450
!ELSE 
451
CLEAN :
452
!ENDIF 
453
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.obj"
454
	-@erase "$(INTDIR)\ThreadAdaptor.obj"
455
	-@erase "$(INTDIR)\vc60.idb"
456
	-@erase "$(INTDIR)\WideStringUtils.obj"
457
	-@erase "$(OUTDIR)\ThreadAdaptor.dll"
458
	-@erase "$(OUTDIR)\ThreadAdaptor.exp"
459
	-@erase "$(OUTDIR)\ThreadAdaptor.lib"
460
461
"$(OUTDIR)" :
462
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
463
464
"$(INTDIR)" :
465
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
466
467
F90=df.exe
468
CPP=cl.exe
469
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 
470
471
.c{$(INTDIR)}.obj::
472
   $(CPP) @<<
473
   $(CPP_PROJ) $< 
474
<<
475
476
.cpp{$(INTDIR)}.obj::
477
   $(CPP) @<<
478
   $(CPP_PROJ) $< 
479
<<
480
481
.cxx{$(INTDIR)}.obj::
482
   $(CPP) @<<
483
   $(CPP_PROJ) $< 
484
<<
485
486
.c{$(INTDIR)}.sbr::
487
   $(CPP) @<<
488
   $(CPP_PROJ) $< 
489
<<
490
491
.cpp{$(INTDIR)}.sbr::
492
   $(CPP) @<<
493
   $(CPP_PROJ) $< 
494
<<
495
496
.cxx{$(INTDIR)}.sbr::
497
   $(CPP) @<<
498
   $(CPP_PROJ) $< 
499
<<
500
501
MTL=midl.exe
502
MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
503
RSC=rc.exe
504
BSC32=bscmake.exe
505
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" 
506
BSC32_SBRS= \
507
	
508
LINK32=link.exe
509
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" 
510
LINK32_OBJS= \
511
	"$(INTDIR)\InstrumentationAdaptorBase.obj" \
512
	"$(INTDIR)\ThreadAdaptor.obj" \
513
	"$(INTDIR)\WideStringUtils.obj" \
514
	"$(OUTDIR)\LibraryLoader.lib" \
515
	"$(OUTDIR)\MartiniOSA.lib"
516
517
"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
518
    $(LINK32) @<<
519
  $(LINK32_FLAGS) $(LINK32_OBJS)
520
<<
521
522
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
523
524
OUTDIR=.\..\..\..\..\bin\windows\debug\IPF
525
INTDIR=.\debug\IPF
526
# Begin Custom Macros
527
OutDir=.\..\..\..\..\bin\windows\debug\IPF
528
# End Custom Macros
529
530
!IF "$(RECURSE)" == "0" 
531
532
ALL : "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc"
533
534
!ELSE 
535
536
ALL : "MartiniOSA - Win32 IPF Debug" "LibraryLoader - Win32 IPF Debug" "$(OUTDIR)\ThreadAdaptor.dll" "$(OUTDIR)\ThreadAdaptor.bsc"
537
538
!ENDIF 
539
540
!IF "$(RECURSE)" == "1" 
541
CLEAN :"LibraryLoader - Win32 IPF DebugCLEAN" "MartiniOSA - Win32 IPF DebugCLEAN" 
542
!ELSE 
543
CLEAN :
544
!ENDIF 
545
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.obj"
546
	-@erase "$(INTDIR)\InstrumentationAdaptorBase.sbr"
547
	-@erase "$(INTDIR)\ThreadAdaptor.obj"
548
	-@erase "$(INTDIR)\ThreadAdaptor.sbr"
549
	-@erase "$(INTDIR)\vc60.idb"
550
	-@erase "$(INTDIR)\vc60.pdb"
551
	-@erase "$(INTDIR)\WideStringUtils.obj"
552
	-@erase "$(INTDIR)\WideStringUtils.sbr"
553
	-@erase "$(OUTDIR)\ThreadAdaptor.bsc"
554
	-@erase "$(OUTDIR)\ThreadAdaptor.dll"
555
	-@erase "$(OUTDIR)\ThreadAdaptor.exp"
556
	-@erase "$(OUTDIR)\ThreadAdaptor.ilk"
557
	-@erase "$(OUTDIR)\ThreadAdaptor.lib"
558
	-@erase "$(OUTDIR)\ThreadAdaptor.pdb"
559
560
"$(OUTDIR)" :
561
    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
562
563
"$(INTDIR)" :
564
    if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
565
566
F90=df.exe
567
CPP=cl.exe
568
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 
569
570
.c{$(INTDIR)}.obj::
571
   $(CPP) @<<
572
   $(CPP_PROJ) $< 
573
<<
574
575
.cpp{$(INTDIR)}.obj::
576
   $(CPP) @<<
577
   $(CPP_PROJ) $< 
578
<<
579
580
.cxx{$(INTDIR)}.obj::
581
   $(CPP) @<<
582
   $(CPP_PROJ) $< 
583
<<
584
585
.c{$(INTDIR)}.sbr::
586
   $(CPP) @<<
587
   $(CPP_PROJ) $< 
588
<<
589
590
.cpp{$(INTDIR)}.sbr::
591
   $(CPP) @<<
592
   $(CPP_PROJ) $< 
593
<<
594
595
.cxx{$(INTDIR)}.sbr::
596
   $(CPP) @<<
597
   $(CPP_PROJ) $< 
598
<<
599
600
MTL=midl.exe
601
MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
602
RSC=rc.exe
603
BSC32=bscmake.exe
604
BSC32_FLAGS=/nologo /o"$(OUTDIR)\ThreadAdaptor.bsc" 
605
BSC32_SBRS= \
606
	"$(INTDIR)\InstrumentationAdaptorBase.sbr" \
607
	"$(INTDIR)\ThreadAdaptor.sbr" \
608
	"$(INTDIR)\WideStringUtils.sbr"
609
610
"$(OUTDIR)\ThreadAdaptor.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
611
    $(BSC32) @<<
612
  $(BSC32_FLAGS) $(BSC32_SBRS)
613
<<
614
615
LINK32=link.exe
616
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" 
617
LINK32_OBJS= \
618
	"$(INTDIR)\InstrumentationAdaptorBase.obj" \
619
	"$(INTDIR)\ThreadAdaptor.obj" \
620
	"$(INTDIR)\WideStringUtils.obj" \
621
	"$(OUTDIR)\LibraryLoader.lib" \
622
	"$(OUTDIR)\MartiniOSA.lib"
623
624
"$(OUTDIR)\ThreadAdaptor.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
625
    $(LINK32) @<<
626
  $(LINK32_FLAGS) $(LINK32_OBJS)
627
<<
628
629
!ENDIF 
630
631
632
!IF "$(NO_EXTERNAL_DEPS)" != "1"
633
!IF EXISTS("ThreadAdaptor.dep")
634
!INCLUDE "ThreadAdaptor.dep"
635
!ELSE 
636
!MESSAGE Warning: cannot find "ThreadAdaptor.dep"
637
!ENDIF 
638
!ENDIF 
639
640
641
!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"
642
SOURCE=..\common\InstrumentationAdaptorBase.cpp
643
644
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
645
646
647
"$(INTDIR)\InstrumentationAdaptorBase.obj" : $(SOURCE) "$(INTDIR)"
648
	$(CPP) $(CPP_PROJ) $(SOURCE)
649
650
651
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
652
653
654
"$(INTDIR)\InstrumentationAdaptorBase.obj"	"$(INTDIR)\InstrumentationAdaptorBase.sbr" : $(SOURCE) "$(INTDIR)"
655
	$(CPP) $(CPP_PROJ) $(SOURCE)
656
657
658
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
659
660
661
"$(INTDIR)\InstrumentationAdaptorBase.obj" : $(SOURCE) "$(INTDIR)"
662
	$(CPP) $(CPP_PROJ) $(SOURCE)
663
664
665
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
666
667
668
"$(INTDIR)\InstrumentationAdaptorBase.obj"	"$(INTDIR)\InstrumentationAdaptorBase.sbr" : $(SOURCE) "$(INTDIR)"
669
	$(CPP) $(CPP_PROJ) $(SOURCE)
670
671
672
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
673
674
675
"$(INTDIR)\InstrumentationAdaptorBase.obj" : $(SOURCE) "$(INTDIR)"
676
	$(CPP) $(CPP_PROJ) $(SOURCE)
677
678
679
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
680
681
682
"$(INTDIR)\InstrumentationAdaptorBase.obj"	"$(INTDIR)\InstrumentationAdaptorBase.sbr" : $(SOURCE) "$(INTDIR)"
683
	$(CPP) $(CPP_PROJ) $(SOURCE)
684
685
686
!ENDIF 
687
688
SOURCE=.\ThreadAdaptor.cpp
689
690
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
691
692
693
"$(INTDIR)\ThreadAdaptor.obj" : $(SOURCE) "$(INTDIR)"
694
695
696
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
697
698
699
"$(INTDIR)\ThreadAdaptor.obj"	"$(INTDIR)\ThreadAdaptor.sbr" : $(SOURCE) "$(INTDIR)"
700
701
702
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
703
704
705
"$(INTDIR)\ThreadAdaptor.obj" : $(SOURCE) "$(INTDIR)"
706
707
708
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
709
710
711
"$(INTDIR)\ThreadAdaptor.obj"	"$(INTDIR)\ThreadAdaptor.sbr" : $(SOURCE) "$(INTDIR)"
712
713
714
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
715
716
717
"$(INTDIR)\ThreadAdaptor.obj" : $(SOURCE) "$(INTDIR)"
718
719
720
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
721
722
723
"$(INTDIR)\ThreadAdaptor.obj"	"$(INTDIR)\ThreadAdaptor.sbr" : $(SOURCE) "$(INTDIR)"
724
725
726
!ENDIF 
727
728
SOURCE=..\common\WideStringUtils.cpp
729
730
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
731
732
733
"$(INTDIR)\WideStringUtils.obj" : $(SOURCE) "$(INTDIR)"
734
	$(CPP) $(CPP_PROJ) $(SOURCE)
735
736
737
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
738
739
740
"$(INTDIR)\WideStringUtils.obj"	"$(INTDIR)\WideStringUtils.sbr" : $(SOURCE) "$(INTDIR)"
741
	$(CPP) $(CPP_PROJ) $(SOURCE)
742
743
744
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
745
746
747
"$(INTDIR)\WideStringUtils.obj" : $(SOURCE) "$(INTDIR)"
748
	$(CPP) $(CPP_PROJ) $(SOURCE)
749
750
751
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
752
753
754
"$(INTDIR)\WideStringUtils.obj"	"$(INTDIR)\WideStringUtils.sbr" : $(SOURCE) "$(INTDIR)"
755
	$(CPP) $(CPP_PROJ) $(SOURCE)
756
757
758
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
759
760
761
"$(INTDIR)\WideStringUtils.obj" : $(SOURCE) "$(INTDIR)"
762
	$(CPP) $(CPP_PROJ) $(SOURCE)
763
764
765
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
766
767
768
"$(INTDIR)\WideStringUtils.obj"	"$(INTDIR)\WideStringUtils.sbr" : $(SOURCE) "$(INTDIR)"
769
	$(CPP) $(CPP_PROJ) $(SOURCE)
770
771
772
!ENDIF 
773
774
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
775
776
"LibraryLoader - Win32 IA32 Release" : 
777
   cd "..\LibraryLoader"
778
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Release" 
779
   cd "..\ThreadAdaptor"
780
781
"LibraryLoader - Win32 IA32 ReleaseCLEAN" : 
782
   cd "..\LibraryLoader"
783
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Release" RECURSE=1 CLEAN 
784
   cd "..\ThreadAdaptor"
785
786
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
787
788
"LibraryLoader - Win32 IA32 Debug" : 
789
   cd "..\LibraryLoader"
790
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Debug" 
791
   cd "..\ThreadAdaptor"
792
793
"LibraryLoader - Win32 IA32 DebugCLEAN" : 
794
   cd "..\LibraryLoader"
795
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IA32 Debug" RECURSE=1 CLEAN 
796
   cd "..\ThreadAdaptor"
797
798
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
799
800
"LibraryLoader - Win32 EM64T Release" : 
801
   cd "..\LibraryLoader"
802
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Release" 
803
   cd "..\ThreadAdaptor"
804
805
"LibraryLoader - Win32 EM64T ReleaseCLEAN" : 
806
   cd "..\LibraryLoader"
807
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Release" RECURSE=1 CLEAN 
808
   cd "..\ThreadAdaptor"
809
810
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
811
812
"LibraryLoader - Win32 EM64T Debug" : 
813
   cd "..\LibraryLoader"
814
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Debug" 
815
   cd "..\ThreadAdaptor"
816
817
"LibraryLoader - Win32 EM64T DebugCLEAN" : 
818
   cd "..\LibraryLoader"
819
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 EM64T Debug" RECURSE=1 CLEAN 
820
   cd "..\ThreadAdaptor"
821
822
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
823
824
"LibraryLoader - Win32 IPF Release" : 
825
   cd "..\LibraryLoader"
826
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Release" 
827
   cd "..\ThreadAdaptor"
828
829
"LibraryLoader - Win32 IPF ReleaseCLEAN" : 
830
   cd "..\LibraryLoader"
831
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Release" RECURSE=1 CLEAN 
832
   cd "..\ThreadAdaptor"
833
834
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
835
836
"LibraryLoader - Win32 IPF Debug" : 
837
   cd "..\LibraryLoader"
838
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Debug" 
839
   cd "..\ThreadAdaptor"
840
841
"LibraryLoader - Win32 IPF DebugCLEAN" : 
842
   cd "..\LibraryLoader"
843
   $(MAKE) /$(MAKEFLAGS) /F ".\LibraryLoader.mak" CFG="LibraryLoader - Win32 IPF Debug" RECURSE=1 CLEAN 
844
   cd "..\ThreadAdaptor"
845
846
!ENDIF 
847
848
!IF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Release"
849
850
"MartiniOSA - Win32 IA32 Release" : 
851
   cd "..\OSA\Windows"
852
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Release" 
853
   cd "..\..\ThreadAdaptor"
854
855
"MartiniOSA - Win32 IA32 ReleaseCLEAN" : 
856
   cd "..\OSA\Windows"
857
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Release" RECURSE=1 CLEAN 
858
   cd "..\..\ThreadAdaptor"
859
860
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IA32 Debug"
861
862
"MartiniOSA - Win32 IA32 Debug" : 
863
   cd "..\OSA\Windows"
864
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Debug" 
865
   cd "..\..\ThreadAdaptor"
866
867
"MartiniOSA - Win32 IA32 DebugCLEAN" : 
868
   cd "..\OSA\Windows"
869
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IA32 Debug" RECURSE=1 CLEAN 
870
   cd "..\..\ThreadAdaptor"
871
872
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Release"
873
874
"MartiniOSA - Win32 EM64T Release" : 
875
   cd "..\OSA\Windows"
876
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Release" 
877
   cd "..\..\ThreadAdaptor"
878
879
"MartiniOSA - Win32 EM64T ReleaseCLEAN" : 
880
   cd "..\OSA\Windows"
881
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Release" RECURSE=1 CLEAN 
882
   cd "..\..\ThreadAdaptor"
883
884
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 EM64T Debug"
885
886
"MartiniOSA - Win32 EM64T Debug" : 
887
   cd "..\OSA\Windows"
888
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Debug" 
889
   cd "..\..\ThreadAdaptor"
890
891
"MartiniOSA - Win32 EM64T DebugCLEAN" : 
892
   cd "..\OSA\Windows"
893
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 EM64T Debug" RECURSE=1 CLEAN 
894
   cd "..\..\ThreadAdaptor"
895
896
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Release"
897
898
"MartiniOSA - Win32 IPF Release" : 
899
   cd "..\OSA\Windows"
900
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Release" 
901
   cd "..\..\ThreadAdaptor"
902
903
"MartiniOSA - Win32 IPF ReleaseCLEAN" : 
904
   cd "..\OSA\Windows"
905
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Release" RECURSE=1 CLEAN 
906
   cd "..\..\ThreadAdaptor"
907
908
!ELSEIF  "$(CFG)" == "ThreadAdaptor - Win32 IPF Debug"
909
910
"MartiniOSA - Win32 IPF Debug" : 
911
   cd "..\OSA\Windows"
912
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Debug" 
913
   cd "..\..\ThreadAdaptor"
914
915
"MartiniOSA - Win32 IPF DebugCLEAN" : 
916
   cd "..\OSA\Windows"
917
   $(MAKE) /$(MAKEFLAGS) /F ".\MartiniOSA.mak" CFG="MartiniOSA - Win32 IPF Debug" RECURSE=1 CLEAN 
918
   cd "..\..\ThreadAdaptor"
919
920
!ENDIF 
921
922
923
!ENDIF 
924

Return to bug 209724