dsdp/tm/tcf_0_3_x/org.eclipse.tm.tcf.docs/TCF Agent Porting Guide.html
author timkelly
Thu, 27 Aug 2009 14:02:03 -0500
changeset 78 f17d142f8a47
parent 70 11a6943ebeb2
permissions -rw-r--r--
merge commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
70
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     2
<HTML>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     3
<head>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     4
    <title>TCF Agent Porting Guide</title>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     5
</head>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     6
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     7
<body lang='EN-US'>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     8
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
     9
    <h1>TCF Agent Porting Guide</h1>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    10
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    11
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    12
        Copyright (c) 2009 Wind River Systems, Inc. Made available under the EPL v1.0
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    13
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    14
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    15
        Direct comments, questions to the <a href="mailto:dsdp-tcf-dev@eclipse.org">dsdp-tcf-dev@eclipse.org</a> mailing list
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    16
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    17
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    18
    <h2>Table of Contents</h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    19
    <ul>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    20
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    21
            <a href='#Introduction'>Introduction</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    22
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    23
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    24
            <a href='#Customizing'>Customizing and Porting TCF Agent</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    25
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    26
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    27
            <a href='#NewOS'>Porting TCF Agent to a New OS Platform</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    28
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    29
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    30
            <a href='#NewCPU'>Porting TCF Agent to a New CPU Type</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    31
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    32
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    33
            <a href='#NewExeFile'>Adding Support For a New Executable File Format</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    34
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    35
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    36
            <a href='#NewDebugData'>Adding Support For a New Debug Data Format</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    37
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    38
        <li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    39
            <a href='#NewTransport'>Adding Support For a New Communication Trasport</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    40
        </li>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    41
    </ul>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    42
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    43
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    44
        <a name='Introduction'>Introduction</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    45
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    46
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    47
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    48
        TCF Agent is a lightweight reference implementation of TCF protocol that supports basic debugging and other TCF services.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    49
        It is written in C and can be used for remote debugging of software written for Linux, Windows XP or VxWorks.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    50
        See <a href='TCF Getting Started.html'>TCF Getting Started</a> for instructions on how to get the source code and build the agent.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    51
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    52
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    53
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    54
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    55
        <a name='Customizing'>Customizing and Porting TCF Agent</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    56
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    57
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    58
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    59
        It is important to know concurrency model used by the agent code before making any changes.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    60
        Most of the agent code is event driven: it has a main loop that retrieves events from an event queue and executes them sequentially by calling event handlers by a single thread.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    61
        Single threaded event driven design provides good level of concurrency (equivalent to cooperative multithreading), while greatly reduces need for synchronization -
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    62
        each event dispatch cycle can be viewed as fully synchronized atomic operation.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    63
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    64
    
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    65
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    66
        Event driven code should avoid long running or potentially blocking operations in event handlers since they can stop all event processing for indefinite time.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    67
        Such operations should use asynchronous APIs (like POSIX Asynchronous I/O), or should be performed by background threads.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    68
        Treat background threads with extreme caution - agent data structures are not intended for multithreaded access.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    69
        Background thread scope should be limited to a single module and it should not call agent public APIs.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    70
        Instead they should communicate with the rest of the code by posting events.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    71
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    72
    
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    73
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    74
        An event is essentially a function pointer (a call-back) that points to event handler, plus a data pointer.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    75
        Call-backs are also used throughout the agent code to subscribe listeners for various state change notifications.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    76
        Using events and call-backs, as a design principle, is also known as inversion of control.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    77
        Note that, in general, inversion of control is not compatible with traditional multithreaded programming model that used mutexes to protect shared data from racing conditions.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    78
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    79
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    80
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    81
        Most of TCF agent configuration is done at compile time.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    82
        Conditional compilation statements in the source code assume that both the agent and inferior code will run on same OS platform and
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    83
        on same CPU type that were used to build the agent.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    84
        Building an agent that can run on one machine while controlling execution of code on another machine might be possible, but not fully supported at this time.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    85
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    86
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    87
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    88
        Header file <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/config.h'>config.h</a> contains macro definitions that control agent configuration.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    89
        All C files in the agent code include <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/config.h'>config.h</a> before other header files.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    90
        Individual services or features can be enabled or disabled by changing definitions in the file.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    91
        Also, macro values can be overwritten by using -D option in C compiler command line.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    92
        Agent <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/Makefile'>Makefile</a> contains additional logic that makes it even more convenient to build different agent configurations.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    93
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    94
    
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    95
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    96
        It should be much easier to port the agent if you don't need all TCF services.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    97
        For example, for RSE integration you only need File System, System Monitor and Processes services,
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    98
        so you can disable all other services by editing <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/config.h'>config.h</a>.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
    99
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   100
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   101
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   102
        It is better to create a separate directory with alternative versions of
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   103
        <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/config.h'>config.h</a>,
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   104
        <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/context.h'>context.h,</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   105
        <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/context.c'>context.c,</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   106
        <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/Makefile'>Makefile,</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   107
        etc., instead of editing original files.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   108
        The idea is that Makefile will search that directory first, and if a file not found there, it will search original agent sources.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   109
        See <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/examples/org.eclipse.tm.tcf.examples.daytime.agent'>examples/org.eclipse.tm.tcf.examples.daytime.agent</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   110
        for an example of a custom TCF agent.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   111
        Of course, if changes are generic enough to be useful for other ports, then it is better to change code in the main directory.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   112
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   113
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   114
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   115
        Please, consider contributing your changes of the source code back to eclipse.org.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   116
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   117
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   118
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   119
        <a name='NewOS'>Porting TCF Agent to a New OS Platform</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   120
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   121
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   122
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   123
        In order to improve portability, instead of using non-portable native OS calls, agent code uses POSIX APIs whenever possible.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   124
        When a POSIX API is not available for particular platform, and it can be easily emulated, it is done in mdep.h/mdep.c files.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   125
        For example, mdep.h/mdep.c contains emulation of POSIX Threads for Win32, since the API is not available with Microsoft C compiler.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   126
        API emulation does not have to be complete, it only needs to implement functionality that is used by the agent.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   127
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   128
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   129
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   130
        When it is not possible or not feasible to use portable POSIX APIs, the agent code contains conditional compilation statements that
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   131
        use well known macros like WIN32, __CYGWIN__, __MINGW32__, etc. Such places might require editing when porting to a new OS.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   132
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   133
    
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   134
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   135
        <a name='NewCPU'>Porting TCF Agent to a New CPU Type</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   136
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   137
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   138
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   139
                Searching TCF agent source code for __i386__ is a good way to find all places where the source code depends on CPU type.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   140
        </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   141
    
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   142
        <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   143
                There are several files in the code that might need changes in order to support a new CPU type:
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   144
        </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   145
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   146
    <dl>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   147
        <dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   148
            <b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   149
                <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/context.c'>context.c</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   150
            </b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   151
        </dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   152
        <dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   153
            The module provides low level debugger functionality: attach/detach, suspend/resume, single step, memory read/write.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   154
            It uses OS debug APIs to do its job. Most of the code does not depend on CPU type, however, single stepping is not always directly
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   155
            supported by OS, and its implementation needs to be reviewed and changed to support new CPU type.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   156
        </dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   157
        <dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   158
            <b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   159
                <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/dwarfexpr.c'>dwarfexpr.c</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   160
            </b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   161
        </dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   162
        <dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   163
            The module implements evaluation of <a href='http://en.wikipedia.org/wiki/DWARF'>DWARF</a> expressions.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   164
            The module is used only if the agent is built to support
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   165
            <a href='http://en.wikipedia.org/wiki/Executable_and_Linkable_Format'>ELF</a> executable file format and
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   166
            <a href='http://en.wikipedia.org/wiki/DWARF'>DWARF</a> debugging data format.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   167
            No need to change the module if <a href='http://en.wikipedia.org/wiki/Executable_and_Linkable_Format'>ELF</a> or
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   168
            <a href='http://en.wikipedia.org/wiki/DWARF'>DWARF</a> support is not required.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   169
            <a href='http://en.wikipedia.org/wiki/DWARF'>DWARF</a> expressions can have references to CPU registers.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   170
            Register access code needs to be changed to support new CPU type.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   171
            Note that different compilers can use different numbers to identify same registers of same CPU.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   172
        </dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   173
        <dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   174
            <b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   175
                <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/registers.c'>registers.c</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   176
            </b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   177
        </dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   178
        <dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   179
            The module implements <a href='TCF Service - Registers.html'>Registers service</a>. The code has static variable "regs_index" that contains a table of CPU registers.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   180
            The table holds names, offsets and sizes of CPU registers. Offset and size define location of register data in REG_SET structure,
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   181
            which represents snapshot of register values of an execution context. Definition of the variable needs to be changed to support new CPU type.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   182
        </dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   183
        <dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   184
            <b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   185
                <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/stacktrace.c'>stacktrace.c</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   186
            </b>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   187
        </dt>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   188
        <dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   189
            The module implements <a href='TCF Service - Stack Trace.html'>Stack Trace service</a>.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   190
            The module contains "trace_stack" function that creates stack trace by walking a stack of an executable context.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   191
            Stack trace data format is defined by two struct declarations: StackTrace and StackFrame.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   192
            The data structure is generic, however the code that created the data structure is CPU dependand.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   193
            Alternative version of "trace_stack" function needs to be provided to support new CPU type.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   194
        </dd>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   195
    </dl>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   196
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   197
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   198
        <a name='NewExeFile'>Adding Support For a New Executable File Format</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   199
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   200
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   201
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   202
        For source level debugging TCF agent needs to understand executable file format.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   203
        Source level debugging is supported by providing two services: Symbols and Line Numbers.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   204
        The services are optional, and if they are disabled no support for executable file format is needed.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   205
        At this time the agent supports <a href='http://en.wikipedia.org/wiki/Executable_and_Linkable_Format'>ELF (Executable and Linking Format)</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   206
        and <a href='http://en.wikipedia.org/wiki/Portable_Executable'>PE (Portable Executable)</a> files.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   207
        ELF is very popular format in Unix-like and embedded systems, and PE is used in Windows operating systems.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   208
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   209
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   210
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   211
        ELF supported in the agent is developed from scratch, has no external dependences, and is available in source form as part of the agent source code.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   212
        The code might require changes to support a particular flavor of ELF.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   213
        Probably the most tricky part of the code is interface to the system loader.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   214
        The agent needs to know when an ELF file is loaded into or removed from target memory so it can update symbol tables and breakpoints.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   215
        For that it plants an internal (not visible to clients) breakpoint (aka eventpoint) inside system loader code.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   216
        The breakpoint allows agent to intercept control every time an ELF file is loaded or unloaded.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   217
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   218
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   219
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   220
        PE support in the agent is implemented by using DBGHELP.DLL. This DLL is included in Windows operating system.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   221
        However, older versions of the DLL might not provide all necessary functionality.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   222
        To obtain the latest version of DBGHELP.DLL, go to <a href='http://www.microsoft.com/whdc/devtools/debugging/default.mspx'>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   223
        http://www.microsoft.com/whdc/devtools/debugging/default.mspx</a> and download Debugging Tools for Windows.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   224
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   225
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   226
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   227
        Support for a completely new file format would require to develop alternative versions of symbols_xxx.c and linenumbers_xxx.c files.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   228
        See <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/symbols_elf.c'>symbols_elf.c</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   229
        and <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/linenumbers_elf.c'>linenumbers_elf.c</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   230
        as example implementation of the services.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   231
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   232
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   233
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   234
        <a name='NewDebugData'>Adding Support For a New Debug Data Format</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   235
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   236
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   237
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   238
        For source level debugging TCF agent needs to understand debug data format.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   239
                Debug data is usually reside in a section of an executable file, so the file format should be supported, see <a href='#NewExeFile'>Adding Support For a New Executable File Format</a>.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   240
                At this time the agent supports <a href='http://en.wikipedia.org/wiki/DWARF'>DWARF</a> and
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   241
                <a href='http://en.wikipedia.org/wiki/Portable_Executable'>PE (Portable Executable)</a> debug data formats.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   242
                <a href='http://en.wikipedia.org/wiki/DWARF'>DWARF</a> support is implemented as part of the agent source code,
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   243
                and <a href='http://en.wikipedia.org/wiki/Portable_Executable'>PE</a> data is accessed using DBGHELP.DLL, which is included in Windows operating system.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   244
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   245
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   246
    <h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   247
        <a name='NewTransport'>Adding Support For a New Communication Transport</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   248
    </h2>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   249
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   250
    <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   251
        Current agent code uses TCP/IP as the transport protocol to open communication channels.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   252
        The agent code can be easily modified to support other transport protocols, like UDP, USB, etc.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   253
    </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   254
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   255
        <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   256
            Files <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/channel_tcp.h'>channel_tcp.h</a>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   257
        and <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/channel_tcp.c'>channel_tcp.c</a> provide support for TCP/IP transport.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   258
        To support another protocol one would need to develop similar code using TCP support as an example.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   259
        </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   260
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   261
        <p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   262
        Adding new transport would also require to modify functions channel_server() and channel_connect() in
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   263
        <a href='http://dev.eclipse.org/svnroot/dsdp/org.eclipse.tm.tcf/trunk/agent/channel.c'>channel.c</a>.
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   264
        </p>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   265
</body>
11a6943ebeb2 add dsdp/tm/tcf_0_3_x
duane.cawthron@nokia.com
parents:
diff changeset
   266
</HTML>