OpenCSD: Patch set for v0.5.0 release.
External Decoder C-API plus examples and documentation. This allows custom decoders to be attached into the library infrastructure.
STM full decoder - outputs generic software trace packets.
Mike Leach (13): opencsd: Custom external decoder C-API (initial development). opencsd: Initial objects and types for STM packet decode. opencsd: Library Version defines moved to separate header file. opencsd: STM full decoder implementation opencsd: Custom External Decoder C-API (adds factory and wrappers) opencsd: A "test" decoder to prove the external decoder API opencsd: Custom Ext Decoder C-API (adds pkt monitor and sink CB) opencsd: Custom Ext Decoder C-API (adds test decoder) opencsd: adds VS2015 build files. opencsd: Modify C-API test program to use echo_test decoder. opencsd: Move custom packet string C-API to main header opencsd: Documentation and Doxygen comment updates. opencsd: Linux and windows build updates
.gitignore | 2 + README.md | 8 +- decoder/build/linux/makefile | 1 + decoder/build/linux/rctdl_c_api_lib/makefile | 3 +- decoder/build/linux/ref_trace_decode_lib/makefile | 3 +- decoder/build/win-vs2015/opencsd.props | 20 + .../rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 329 +++++++++++++++ .../rctdl_c_api_lib.vcxproj.filters | 54 +++ .../ref_trace_decode_lib/ref_trace_decode_lib.sln | 147 +++++++ .../ref_trace_decode_lib.vcxproj | 440 ++++++++++++++++++++ .../ref_trace_decode_lib.vcxproj.filters | 449 ++++++++++++++++++++ .../win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 3 + .../rctdl_c_api_lib.vcxproj.filters | 9 + .../ref_trace_decode_lib.vcxproj | 4 + .../ref_trace_decode_lib.vcxproj.filters | 12 + decoder/docs/doxygen_config.dox | 5 +- decoder/docs/external_custom.md | 148 +++++++ ...RM Trace and Debug Snapshot file format 0v2.pdf | Bin 0 -> 435644 bytes decoder/docs/test_progs.md | 21 +- decoder/include/c_api/ocsd_c_api_cust_fact.h | 54 +++ decoder/include/c_api/ocsd_c_api_cust_impl.h | 158 ++++++++ decoder/include/c_api/ocsd_c_api_custom.h | 253 ++++++++++++ decoder/include/c_api/opencsd_c_api.h | 45 ++ decoder/include/common/ocsd_lib_dcd_register.h | 9 + decoder/include/common/trc_component.h | 1 + decoder/include/common/trc_gen_elem.h | 29 +- decoder/include/ocsd_if_types.h | 75 +++- decoder/include/ocsd_if_version.h | 65 +++ decoder/include/stm/trc_dcd_mngr_stm.h | 8 +- decoder/include/stm/trc_pkt_decode_stm.h | 103 +++++ decoder/include/stm/trc_pkt_elem_stm.h | 4 +- decoder/include/stm/trc_pkt_types_stm.h | 2 +- decoder/include/trc_gen_elem_types.h | 32 +- decoder/source/c_api/ocsd_c_api.cpp | 38 +- decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 431 ++++++++++++++++++++ decoder/source/c_api/ocsd_c_api_custom_obj.h | 189 +++++++++ decoder/source/c_api/ocsd_c_api_obj.h | 51 +++ decoder/source/ocsd_error.cpp | 1 + decoder/source/ocsd_lib_dcd_register.cpp | 61 ++- decoder/source/ocsd_version.cpp | 2 +- decoder/source/stm/trc_pkt_decode_stm.cpp | 299 ++++++++++++++ decoder/source/stm/trc_pkt_proc_stm.cpp | 5 +- decoder/source/trc_component.cpp | 13 +- decoder/source/trc_gen_elem.cpp | 70 +++- decoder/source/trc_printable_elem.cpp | 4 +- .../build/linux/c_api_pkt_print_test/makefile | 4 +- .../tests/build/linux/echo_test_dcd_lib/makefile | 83 ++++ .../c_api_pkt_print_test.vcxproj | 333 +++++++++++++++ .../c_api_pkt_print_test.vcxproj.filters | 22 + .../ext_dcd_echo_test/ext_dcd_echo_test.vcxproj | 152 +++++++ .../ext_dcd_echo_test.vcxproj.filters | 33 ++ .../simple_pkt_print_c_api.vcxproj | 333 +++++++++++++++ .../simple_pkt_print_c_api.vcxproj.filters | 22 + .../snapshot_parser_lib.vcxproj | 318 +++++++++++++++ .../snapshot_parser_lib.vcxproj.filters | 72 ++++ .../trc_pkt_lister/trc_pkt_lister.vcxproj | 306 ++++++++++++++ .../trc_pkt_lister/trc_pkt_lister.vcxproj.filters | 39 ++ .../c_api_echo_test/ext_dcd_echo_test.c | 451 +++++++++++++++++++++ .../c_api_echo_test/ext_dcd_echo_test.h | 93 +++++ .../c_api_echo_test/ext_dcd_echo_test_fact.c | 104 +++++ .../c_api_echo_test/ext_dcd_echo_test_fact.h | 48 +++ decoder/tests/source/c_api_pkt_print_test.c | 89 +++- 62 files changed, 6063 insertions(+), 99 deletions(-) create mode 100644 decoder/build/win-vs2015/opencsd.props create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters create mode 100644 decoder/docs/external_custom.md create mode 100644 decoder/docs/specs/ARM Trace and Debug Snapshot file format 0v2.pdf create mode 100644 decoder/include/c_api/ocsd_c_api_cust_fact.h create mode 100644 decoder/include/c_api/ocsd_c_api_cust_impl.h create mode 100644 decoder/include/c_api/ocsd_c_api_custom.h create mode 100644 decoder/include/ocsd_if_version.h create mode 100644 decoder/include/stm/trc_pkt_decode_stm.h create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.cpp create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.h create mode 100644 decoder/source/stm/trc_pkt_decode_stm.cpp create mode 100644 decoder/tests/build/linux/echo_test_dcd_lib/makefile create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj create mode 100644 decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h
Creates C API interface for custom decoders. Creates C++ wrapper for custom decoder. Updates registration code to allow registration and deletion of custom decoders. Addition of doc file to explain use of custom decoder setAPIDcdFact
Signed-off-by: Mike Leach mike.leach@linaro.org --- .../win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 3 + .../rctdl_c_api_lib.vcxproj.filters | 9 + .../ref_trace_decode_lib.vcxproj | 1 + .../ref_trace_decode_lib.vcxproj.filters | 3 + decoder/docs/doxygen_config.dox | 3 +- decoder/docs/external_custom.md | 80 ++++++ decoder/include/c_api/ocsd_c_api_custom.h | 143 +++++++++++ decoder/include/c_api/opencsd_c_api.h | 7 + decoder/include/common/ocsd_lib_dcd_register.h | 4 + decoder/include/ocsd_if_types.h | 1 + decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 271 +++++++++++++++++++++ decoder/source/c_api/ocsd_c_api_custom_obj.h | 144 +++++++++++ decoder/source/ocsd_lib_dcd_register.cpp | 45 +++- 13 files changed, 708 insertions(+), 6 deletions(-) create mode 100644 decoder/docs/external_custom.md create mode 100644 decoder/include/c_api/ocsd_c_api_custom.h create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.cpp create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.h
diff --git a/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj b/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj index f1019c1..8e8a7a1 100644 --- a/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj +++ b/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj @@ -296,9 +296,11 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_custom.h" /> <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_deprc_fn.h" /> <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_types.h" /> <ClInclude Include="..\..\..\include\c_api\opencsd_c_api.h" /> + <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.h" /> <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_obj.h" /> </ItemGroup> <ItemGroup> @@ -308,6 +310,7 @@ </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\source\c_api\ocsd_c_api.cpp" /> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.cpp" /> <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_deprc_fn.cpp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> diff --git a/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters b/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters index 6b0484c..27d0f11 100644 --- a/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters +++ b/decoder/build/win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters @@ -27,6 +27,12 @@ <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_deprc_fn.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_custom.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.h"> + <Filter>Source Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\source\c_api\ocsd_c_api.cpp"> @@ -35,5 +41,8 @@ <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_deprc_fn.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> </Project> \ No newline at end of file diff --git a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj index 65e066c..1b68ed7 100644 --- a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj +++ b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj @@ -299,6 +299,7 @@ <None Include="..\..\..\..\README.md" /> <None Include="..\..\..\..\TODO" /> <None Include="..\..\..\docs\build_libs.md" /> + <None Include="..\..\..\docs\external_custom.md" /> <None Include="..\..\..\docs\test_progs.md" /> </ItemGroup> <ItemGroup> diff --git a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters index e95490f..bbd98f2 100644 --- a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters +++ b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters @@ -78,6 +78,9 @@ <None Include="..\..\..\..\HOWTO.md"> <Filter>docs-files</Filter> </None> + <None Include="..\..\..\docs\external_custom.md"> + <Filter>docs-files</Filter> + </None> </ItemGroup> <ItemGroup> <ClInclude Include="..\..\..\source\trc_frame_deformatter_impl.h"> diff --git a/decoder/docs/doxygen_config.dox b/decoder/docs/doxygen_config.dox index 72eeaa9..7054396 100644 --- a/decoder/docs/doxygen_config.dox +++ b/decoder/docs/doxygen_config.dox @@ -774,7 +774,8 @@ INPUT = ../include \ ../../README.md \ . \ ../../HOWTO.md \ - ../include/common + ../include/common \ + ../include
# This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/decoder/docs/external_custom.md b/decoder/docs/external_custom.md new file mode 100644 index 0000000..7efd65d --- /dev/null +++ b/decoder/docs/external_custom.md @@ -0,0 +1,80 @@ +Attaching External Custom Decoders {#custom_decoders} +================================== + +@brief A description of the C API external decoder interface. + +Introduction +------------ + +An external custom decoder is one which decodes a CoreSight trace byte stream from a source other +than an ARM core which cannot be decoded by the standard builtin decoders within the library. + +An example of this may be a trace stream from a DSP device. + +The external decoder API allows a suitable decoder to be attached to the library and used in the +same way as the built-in decoders. This means that the external decoder can be created and destroyed +using the decode tree API, and will integrate seamlessly with any ARM processor decoders that are part +of the same tree. + +An external decoder will be required to provide two standard structures:- + +- `ocsd_extern_dcd_fact_t` : this is a decoder "factory" that allows the creation of the custom decoders. +- `ocsd_extern_dcd_inst_t` : one of these structures exists for each instance of the custom decoder that is created. + +These structures consist of data and function pointers to allow integration with the library infrastructure. + +Registering A Decoder +--------------------- + +A single API function is provided to allow a decoder to be registered with the library by name. + + ocsd_err_t ocsd_register_custom_decoder(const char *name, ocsd_extern_dcd_fact_t *p_dcd_fact); + +This registers the custom decoder with the libary using the supplied name and factory structure. +Once registered, the standard API functions used with the built-in decoders will work with the custom decoder. + +The Factory Structure +--------------------- +This structure contains the interface that is registered with the library to allow the creation of custom decoder instances. + +The mandatory functions that must be provided include: +- `fnCreateCustomDecoder` : Creates a decoder. This function will fill in a `ocsd_extern_dcd_inst_t` structure for the decoder instance. +- `fnDestroyCustomDecoder` : Destroys the decoder. Takes the `decoder_handle` attribute of the instance structure. +- `fnGetCSIDFromConfig` : Extracts the CoreSight Trace ID from the decoder configuration structure. + May be called before the create function. The CSID is used as part of the creation process to + attach the decoder to the correct trace byte stream. + +`fnPacketToString` : This optional function will provide a human readable string from a protocol specific packet structure. + +`protocol_id` : This is filled in when the decoder type is registered with the library. Used in some API + calls to specify the decoder protocol type. + + + +The Decoder Instance Structure +------------------------------ + +This structure must be filled in by the `fnCreateCustomDecoder` function implmentation. + +There is a single mandatory function in this structure: + + `fnTraceDataIn` : the decoder must provide this as this is called by the library to provide the + raw trace data to the decoder. + +There are a number of optional callback functions. These allow the custom decoder to call into the library +and use the same infrastructure as the builting decoders. The callbacks are registed with the custom decoder +as the libary performs initialisation of connections. + +For example, the library will connect the error logging interface to all the decoders. The instance structure +contains the `fnRegisterErrLogCB` function pointer which will register two error logging callbacks with the custom +decoder, `fnLogErrorCB` and `fnLogMsgCB`. These can then be called by the custom decoder, and the errors and +messages will appear in the same place as for the built-in decoders. + +Where a custom decoder does not require or support the optional callbacks, then the registration function is set to +0 in the structure. + + + + + + diff --git a/decoder/include/c_api/ocsd_c_api_custom.h b/decoder/include/c_api/ocsd_c_api_custom.h new file mode 100644 index 0000000..607e023 --- /dev/null +++ b/decoder/include/c_api/ocsd_c_api_custom.h @@ -0,0 +1,143 @@ +/* + * \file ocsd_c_api_custom.h + * \brief Reference CoreSight Trace Decoder : + * + * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef ARM_OCSD_C_API_CUSTOM_H_INCLUDED +#define ARM_OCSD_C_API_CUSTOM_H_INCLUDED + +#include "ocsd_c_api_types.h" + +/* Custom decoder C-API interface types. */ + +/* Raw trace data input function - a decoder must have one of these */ +typedef ocsd_datapath_resp_t (* fnTraceDataIn)( const void *decoder_handle, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed); + + +/* callback and registration function to connect a generic element output point */ +typedef ocsd_datapath_resp_t (* fnGenElemOpCB)( const void *cb_context, + const ocsd_trc_index_t index_sop, + const uint8_t trc_chan_id, + const ocsd_generic_trace_elem *elem); +typedef ocsd_err_t (* fnRegisterGenElemOpCB)(const void *decoder_handle, const void *cb_context, const fnGenElemOpCB pFnGenElemOut); + +/* callback and registration function to connect into the library error logging mechanism */ +typedef void (* fnLogErrorCB)(const void *cb_context, const ocsd_err_severity_t filter_level, const ocsd_err_t code, const ocsd_trc_index_t idx, const uint8_t chan_id, const char *pMsg); +typedef void (* fnLogMsgCB)(const void *cb_context, const ocsd_err_severity_t filter_level, const char *msg); +typedef void (* fnRegisterErrLogCB)(const void *decoder_handle, const void *cb_context, const fnLogErrorCB pFnErrLog, const fnLogMsgCB pFnMsgLog); + +/* callback and registration function to connect an ARM instruction decoder */ +typedef ocsd_err_t (* fnDecodeArmInstCB)(const void *cb_context, ocsd_instr_info *instr_info); +typedef ocsd_err_t (* fnRegisterDecodeArmInstCB)(const void *decoder_handle, const void *cb_context, const fnDecodeArmInstCB pFnDecodeArmInstr); + +/* callback and registration function to connect the memory accessor interface */ +typedef ocsd_err_t (* fnMemAccessCB)(const void *cb_context, + const ocsd_vaddr_t address, + const uint8_t cs_trace_id, + const ocsd_mem_space_acc_t mem_space, + uint32_t *num_bytes, + uint8_t *p_buffer); +typedef ocsd_err_t (* fnRegisterMemAccessCB)(const void *decoder_handle, const void *cb_context, const fnMemAccessCB pFnmemAcc); + +/* callback and registration function to connect to the packet monitor interface of the packet processor */ +typedef void (* fnPktMonCB)( const void *cb_context, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt, + const uint32_t size, + const uint8_t *p_data); +typedef ocsd_err_t (* fnRegisterPktMonCB)(const void *decoder_handle, const void *cb_context, fnPktMonCB pFnPktMon); + +/* callback and registration function to connect to the packet sink interface, on the main decode + data path - use if decoder created as packet processor only */ +typedef ocsd_datapath_resp_t (* fnPktDataSinkCB)( const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *p_packet_in); +typedef ocsd_err_t (* fnRegisterPktDataSinkCB)(const void *decoder_handle, const void *cb_context, fnPktDataSinkCB pFnPktData); + +/** This structure is filled in by the ocsd_extern_dcd_fact_t creation function with the exception of the + library context value. */ +typedef struct _ocsd_extern_dcd_inst { + /* Mandatory decoder functions - library initialisation will fail without these. */ + fnTraceDataIn fn_data_in; /**< raw trace data input function to decoder */ + + /* Optional decoder functions - set to 0 if the decoder class does not require / support this functionality */ + fnRegisterGenElemOpCB fn_reg_gen_out_cb; /**< connect callback to get the generic element output of the decoder */ + fnRegisterErrLogCB fn_reg_error_log_cb; /**< connect callbacks for error logging */ + fnRegisterDecodeArmInstCB fn_reg_instr_dcd_cb; /**< connect callback to decode an arm instruction */ + fnRegisterMemAccessCB fn_reg_mem_acc_cb; /**< connect callback to access trace memory images */ + fnRegisterPktMonCB fn_reg_pkt_mon_cb; /**< connect to the packet monitor of the packet processing stage */ + fnRegisterPktDataSinkCB fn_reg_pkt_sink_cb; /**< connect to packet sink on main datapath if decoder in packe processing mode only */ + + /* Decoder instance data */ + void *decoder_handle; /**< Instance handle for the decoder */ + unsigned char cs_id; /**< CS ID of the trace stream this decoder should be attached to */ + char *p_decoder_name; /**< type name of the decoder - may be used in logging */ + + /* opaque library context value */ + void *library_context; /**< Context information for this decoder used by the library */ +} ocsd_extern_dcd_inst_t; + + +/** function to create a decoder instance - fills in the decoder struct supplied. */ +typedef ocsd_err_t (* fnCreateCustomDecoder)(const int create_flags, const void *decoder_cfg, ocsd_extern_dcd_inst_t *p_decoder_inst); +/** Function to destroy a decoder instance - indicated by decoder handle */ +typedef ocsd_err_t (* fnDestroyCustomDecoder)(const void *decoder_handle); +/** Function to extract the CoreSight Trace ID from the configuration structure */ +typedef ocsd_err_t (* fnGetCSIDFromConfig)(const void *decoder_cfg, unsigned char *p_csid); +/** Function to convert a protocol specific trace packet to human readable string */ +typedef ocsd_err_t (* fnPacketToString)(const void *trc_pkt, char *buffer, const int buflen); + + +/** set of functions and callbacks to create an extern custom decoder in the library + via the C API interface. This structure is registered with the library by name and + then decoders of the type can be created on the decode tree. +*/ +typedef struct _ocsd_extern_dcd_fact { + /* mandatory functions */ + fnCreateCustomDecoder createDecoder; /**< [required] Function pointer to create a decoder instance. */ + fnDestroyCustomDecoder destroyDecoder; /**< [required] Function pointer to destroy a decoder instance. */ + fnGetCSIDFromConfig csidFromConfig; /**< [required] Function pointer to extract the CSID from a config structure */ + + /* optional functions */ + fnPacketToString pktToString; /**< [optional] function pointer to print a trace packet in this decoder */ + + ocsd_trace_protocol_t protocol_id; /**< protocol ID assigned during registration. */ +} ocsd_extern_dcd_fact_t; + +#endif // ARM_OCSD_C_API_CUSTOM_H_INCLUDED + +/* End of File ocsd_c_api_custom.h */ diff --git a/decoder/include/c_api/opencsd_c_api.h b/decoder/include/c_api/opencsd_c_api.h index a6daef9..66927a7 100644 --- a/decoder/include/c_api/opencsd_c_api.h +++ b/decoder/include/c_api/opencsd_c_api.h @@ -79,6 +79,7 @@ #endif
#include "ocsd_c_api_types.h" +#include "ocsd_c_api_custom.h"
/** @name Library Version API
@@ -379,6 +380,12 @@ OCSD_C_API ocsd_err_t ocsd_gen_elem_str(const ocsd_generic_trace_elem *p_pkt, ch
/** @}*/
+/** register a custom decoder with the library */ +OCSD_C_API ocsd_err_t ocsd_register_custom_decoder(const char *name, ocsd_extern_dcd_fact_t *p_dcd_fact); +/** clear all registered decoders - library cleanup */ +OCSD_C_API ocsd_err_t ocsd_deregister_decoders(); + + /** @}*/
#ifdef OPENCSD_INC_DEPRECATED_API diff --git a/decoder/include/common/ocsd_lib_dcd_register.h b/decoder/include/common/ocsd_lib_dcd_register.h index c954adf..15dfc03 100644 --- a/decoder/include/common/ocsd_lib_dcd_register.h +++ b/decoder/include/common/ocsd_lib_dcd_register.h @@ -57,6 +57,8 @@ public: static OcsdLibDcdRegister *getDecoderRegister();
static void deregisterAllDecoders(); //!< library cleanup - deregisters decoder managers and destroys the register object. + static const ocsd_trace_protocol_t getNextCustomProtocolID(); + static void releaseLastCustomProtocolID();
const ocsd_err_t registerDecoderTypeByName(const std::string &name, IDecoderMngr *p_decoder_fact); //!< register a decoder manager interface const ocsd_err_t getDecoderMngrByName(const std::string &name, IDecoderMngr **p_decoder_mngr); @@ -70,6 +72,7 @@ public:
private: void registerBuiltInDecoders(); //!< register the list of build in decoder managers on first access of getDecoderMngrByName. + void deRegisterCustomDecoders(); //!< delete all custom decoders registered with the library.
std::map<const std::string, IDecoderMngr *> m_decoder_mngrs; //!< map linking names to decoder manager interfaces. std::map<const std::string, IDecoderMngr *>::const_iterator m_iter; //!< iterator for name search. @@ -84,6 +87,7 @@ private:
static OcsdLibDcdRegister *m_p_libMngr; static bool m_b_registeredBuiltins; + static ocsd_trace_protocol_t m_nextCustomProtocolID; };
/*! diff --git a/decoder/include/ocsd_if_types.h b/decoder/include/ocsd_if_types.h index 0cf65f5..b28382b 100644 --- a/decoder/include/ocsd_if_types.h +++ b/decoder/include/ocsd_if_types.h @@ -148,6 +148,7 @@ typedef enum _ocsd_err_t { /* decoder registration */ OCSD_ERR_DCDREG_NAME_REPEAT, /**< attempted to register a decoder with the same name as another one */ OCSD_ERR_DCDREG_NAME_UNKNOWN, /**< attempted to find a decoder with a name that is not known in the library */ + OCSD_ERR_DCDREG_TOOMANY, /**< attempted to register too many custom decoders */ /* decoder config */ OCSD_ERR_DCD_INTERFACE_UNUSED, /**< Attempt to connect or use and inteface not supported by this decoder. */ /* end marker*/ diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp new file mode 100644 index 0000000..36db747 --- /dev/null +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp @@ -0,0 +1,271 @@ +/* + * \file ocsd_c_api_custom_obj.cpp + * \brief OpenCSD : + * + * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* pull in the C++ decode library */ +#include "opencsd.h" + +#include "c_api/opencsd_c_api.h" +#include "ocsd_c_api_custom_obj.h" +#include "common/ocsd_lib_dcd_register.h" + +/***************** C-API functions ********************************/ + +/** register a custom decoder with the library */ +OCSD_C_API ocsd_err_t ocsd_register_custom_decoder(const char *name, ocsd_extern_dcd_fact_t *p_dcd_fact) +{ + ocsd_err_t err = OCSD_OK; + OcsdLibDcdRegister *pRegister = OcsdLibDcdRegister::getDecoderRegister(); + + // check not already registered + if(pRegister->isRegisteredDecoder(name)) + return OCSD_ERR_DCDREG_NAME_REPEAT; + + // validate the factory interface structure + if((p_dcd_fact->createDecoder == 0) || + (p_dcd_fact->destroyDecoder == 0) || + (p_dcd_fact->csidFromConfig == 0) + ) + return OCSD_ERR_INVALID_PARAM_VAL; + + // create a wrapper. + CustomDcdMngrWrapper *pWrapper = new (std::nothrow) CustomDcdMngrWrapper(); + if(pRegister == 0) + return OCSD_ERR_MEM; + + p_dcd_fact->protocol_id = OcsdLibDcdRegister::getNextCustomProtocolID(); + if(p_dcd_fact->protocol_id < OCSD_PROTOCOL_END) + { + // fill out the wrapper and register it + pWrapper->setAPIDcdFact(p_dcd_fact); + err = pRegister->registerDecoderTypeByName(name,pWrapper); + if(err != OCSD_OK) + OcsdLibDcdRegister::releaseLastCustomProtocolID(); + } + else + err = OCSD_ERR_DCDREG_TOOMANY; // too many decoders + + if(err != OCSD_OK) + delete pWrapper; + + return err; +} + +OCSD_C_API ocsd_err_t ocsd_deregister_decoders() +{ + // destroys all builtin and custom decoders & library registration object. + OcsdLibDcdRegister::deregisterAllDecoders(); + return OCSD_OK; +} + +/***************** Decode Manager Wrapper *****************************/ + +CustomDcdMngrWrapper::CustomDcdMngrWrapper() +{ + m_dcd_fact.protocol_id = OCSD_PROTOCOL_END; +} + + + // set the C-API decoder factory interface +void CustomDcdMngrWrapper::setAPIDcdFact(ocsd_extern_dcd_fact_t *p_dcd_fact) +{ + m_dcd_fact = *p_dcd_fact; +} + +// create and destroy decoders +ocsd_err_t CustomDcdMngrWrapper::createDecoder(const int create_flags, const int instID, const CSConfig *p_config, TraceComponent **ppComponent) +{ + ocsd_err_t err = OCSD_OK; + if(m_dcd_fact.protocol_id == OCSD_PROTOCOL_END) + return OCSD_ERR_NOT_INIT; + + ocsd_extern_dcd_inst_t dcd_inst; + err = m_dcd_fact.createDecoder( create_flags, + ((CustomConfigWrapper *)p_config)->getConfig(), + &dcd_inst); + if(err == OCSD_OK) + { + CustomDecoderWrapper *pComp = new (std::nothrow) CustomDecoderWrapper(dcd_inst,dcd_inst.p_decoder_name,dcd_inst.cs_id); + *ppComponent = pComp; + if(pComp == 0) + err = OCSD_ERR_MEM; + } + return err; +} + +ocsd_err_t CustomDcdMngrWrapper::destroyDecoder(TraceComponent *pComponent) +{ + CustomDecoderWrapper *pCustWrap = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(m_dcd_fact.protocol_id != OCSD_PROTOCOL_END) + m_dcd_fact.destroyDecoder(pCustWrap->getDecoderInstInfo()->decoder_handle); + return OCSD_OK; +} + +const ocsd_trace_protocol_t CustomDcdMngrWrapper::getProtocolType() const +{ + return m_dcd_fact.protocol_id; +} + +ocsd_err_t CustomDcdMngrWrapper::createConfigFromDataStruct(CSConfig **pConfigBase, const void *pDataStruct) +{ + ocsd_err_t err = OCSD_OK; + CustomConfigWrapper *pConfig = new (std::nothrow) CustomConfigWrapper(pDataStruct); + if(!pConfig) + return OCSD_ERR_MEM; + + if(m_dcd_fact.csidFromConfig == 0) + return OCSD_ERR_NOT_INIT; + + unsigned char csid; + err = m_dcd_fact.csidFromConfig(pDataStruct,&csid); + if(err == OCSD_OK) + { + pConfig->setCSID(csid); + *pConfigBase = pConfig; + } + return err; +} + +ocsd_err_t CustomDcdMngrWrapper::getDataInputI(TraceComponent *pComponent, ITrcDataIn **ppDataIn) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; + + *ppDataIn = pDecoder; + return OCSD_OK; +} + +// component connections +// all +ocsd_err_t CustomDcdMngrWrapper::attachErrorLogger(TraceComponent *pComponent, ITraceErrorLog *pIErrorLog) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; +} + +// full decoder +ocsd_err_t CustomDcdMngrWrapper::attachInstrDecoder(TraceComponent *pComponent, IInstrDecode *pIInstrDec) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; + + return OCSD_OK; +} + +ocsd_err_t CustomDcdMngrWrapper::attachMemAccessor(TraceComponent *pComponent, ITargetMemAccess *pMemAccessor) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; +} + +ocsd_err_t CustomDcdMngrWrapper::attachOutputSink(TraceComponent *pComponent, ITrcGenElemIn *pOutSink) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; +} + +// pkt processor only +ocsd_err_t CustomDcdMngrWrapper::attachPktMonitor(TraceComponent *pComponent, ITrcTypedBase *pPktRawDataMon) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; +} + +ocsd_err_t CustomDcdMngrWrapper::attachPktIndexer(TraceComponent *pComponent, ITrcTypedBase *pPktIndexer) +{ + // indexers for external custom will also be external and custom. + return OCSD_ERR_DCD_INTERFACE_UNUSED; +} + +ocsd_err_t CustomDcdMngrWrapper::attachPktSink(TraceComponent *pComponent, ITrcTypedBase *pPktDataInSink) +{ + CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); + if(pDecoder == 0) + return OCSD_ERR_INVALID_PARAM_TYPE; +} + +void CustomDcdMngrWrapper::pktToString(void *pkt, char *pStrBuffer, int bufSize) +{ + if(m_dcd_fact.pktToString) + m_dcd_fact.pktToString(pkt,pStrBuffer,bufSize); +} + + +/************************** Decoder instance wrapper **************************************/ + +ocsd_datapath_resp_t GenElemOpCB( const void *cb_context, + const ocsd_trc_index_t index_sop, + const uint8_t trc_chan_id, + const ocsd_generic_trace_elem *elem) +{ + if(cb_context && ((CustomDecoderWrapper *)cb_context)->m_pGenElemIn) + return ((CustomDecoderWrapper *)cb_context)->m_pGenElemIn->TraceElemIn(index_sop,trc_chan_id,*(OcsdTraceElement *)elem); + return OCSD_RESP_FATAL_NOT_INIT; +} + +CustomDecoderWrapper::CustomDecoderWrapper( const ocsd_extern_dcd_inst_t &dcd_inst, + const std::string &name, + const int instID) + : TraceComponent(name,instID) +{ + m_pGenElemIn = 0; + m_decoder_inst = dcd_inst; +} + +CustomDecoderWrapper::~CustomDecoderWrapper() +{ +} + +ocsd_datapath_resp_t CustomDecoderWrapper::TraceDataIn( const ocsd_datapath_op_t op, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed) +{ + if(m_decoder_inst.fn_data_in) + return m_decoder_inst.fn_data_in( m_decoder_inst.decoder_handle, + op, + index, + dataBlockSize, + pDataBlock, + numBytesProcessed); + return OCSD_RESP_FATAL_NOT_INIT; +} + +/* End of File ocsd_c_api_custom_obj.cpp */ diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.h b/decoder/source/c_api/ocsd_c_api_custom_obj.h new file mode 100644 index 0000000..ec8cc03 --- /dev/null +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.h @@ -0,0 +1,144 @@ +/* + * \file ocsd_c_api_custom_obj.h + * \brief OpenCSD : + * + * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#ifndef ARM_OCSD_C_API_CUSTOM_OBJ_H_INCLUDED +#define ARM_OCSD_C_API_CUSTOM_OBJ_H_INCLUDED + +#include "c_api/ocsd_c_api_custom.h" +#include "common/ocsd_dcd_mngr_i.h" + +/***** Decoder manager interface ******************************/ +class CustomDcdMngrWrapper : public IDecoderMngr +{ +public: + CustomDcdMngrWrapper(); + virtual ~CustomDcdMngrWrapper() {}; + + // set the C-API decoder factory interface. + void setAPIDcdFact(ocsd_extern_dcd_fact_t *p_dcd_fact); + +// create and destroy decoders + virtual ocsd_err_t createDecoder(const int create_flags, const int instID, const CSConfig *p_config, TraceComponent **ppComponent); + virtual ocsd_err_t destroyDecoder(TraceComponent *pComponent); + + //! Get the built in protocol type ID managed by this instance - extern for custom decoders + virtual const ocsd_trace_protocol_t getProtocolType() const; + +// connect decoders to other components - (replace current / 0 pointer value to detach ); +// compatible with all decoders + //!attach error logger to ptk-processor, or both of pkt processor and pkt decoder pair + virtual ocsd_err_t attachErrorLogger(TraceComponent *pComponent, ITraceErrorLog *pIErrorLog); + +// pkt decoder only + //! attach instruction decoder to pkt decoder + virtual ocsd_err_t attachInstrDecoder(TraceComponent *pComponent, IInstrDecode *pIInstrDec); + + //! attach memory accessor to pkt decoder + virtual ocsd_err_t attachMemAccessor(TraceComponent *pComponent, ITargetMemAccess *pMemAccessor); + + //! attach generic output interface to pkt decoder + virtual ocsd_err_t attachOutputSink(TraceComponent *pComponent, ITrcGenElemIn *pOutSink); + +// pkt processor only + //! attach a raw packet monitor to pkt processor (solo pkt processor, or pkt processor part of pair) + virtual ocsd_err_t attachPktMonitor(TraceComponent *pComponent, ITrcTypedBase *pPktRawDataMon); + + //! attach a packet indexer to pkt processor (solo pkt processor, or pkt processor part of pair) + virtual ocsd_err_t attachPktIndexer(TraceComponent *pComponent, ITrcTypedBase *pPktIndexer); + + //! attach a packet data sink to pkt processor output (solo pkt processor only - instead of decoder when pkt processor only created.) + virtual ocsd_err_t attachPktSink(TraceComponent *pComponent, ITrcTypedBase *pPktDataInSink); + +// data input connection interface + //! get raw data input interface from packet processor + virtual ocsd_err_t getDataInputI(TraceComponent *pComponent, ITrcDataIn **ppDataIn); + +// create configuration from data structure + virtual ocsd_err_t createConfigFromDataStruct(CSConfig **pConfigBase, const void *pDataStruct); + + void pktToString(void *pkt, char *pStrBuffer, int bufSize); + +private: + + ocsd_extern_dcd_fact_t m_dcd_fact; +}; + +/**** Decoder instance wrapper */ +class CustomDecoderWrapper : public TraceComponent, public ITrcDataIn +{ +public: + CustomDecoderWrapper(const ocsd_extern_dcd_inst_t &dcd_inst, const std::string &name, const int instID); + virtual ~CustomDecoderWrapper(); + const ocsd_extern_dcd_inst_t *getDecoderInstInfo() const { return &m_decoder_inst; } + + virtual ocsd_datapath_resp_t TraceDataIn( const ocsd_datapath_op_t op, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed); + + // declare the callback functions as friend functions. + friend ocsd_datapath_resp_t GenElemOpCB( const void *cb_context, + const ocsd_trc_index_t index_sop, + const uint8_t trc_chan_id, + const ocsd_generic_trace_elem *elem); + +private: + ITrcGenElemIn *m_pGenElemIn; //!< generic element sink interface - output from decdoer. + ITraceErrorLog *m_pErrorLog; //!< error log interface + IInstrDecode *m_pIInstrDec; //!< arm instruction decode interface. + ITargetMemAccess *m_pMemAccessor; + +private: + ocsd_extern_dcd_inst_t m_decoder_inst; +}; + +/**** Decoder configuration wrapper - implements CSConfig base class interface ***/ +class CustomConfigWrapper : public CSConfig +{ +public: + CustomConfigWrapper(const void *p_config) : m_p_config(p_config), m_CSID(0) {}; + virtual ~CustomConfigWrapper() {}; + virtual const uint8_t getTraceID() const { return m_CSID; }; + void setCSID(const uint8_t CSID) { m_CSID = CSID; }; + const void *getConfig() { return m_p_config; }; +private: + const void *m_p_config; + uint8_t m_CSID; +}; + +#endif // ARM_OCSD_C_API_CUSTOM_OBJ_H_INCLUDED + +/* End of File ocsd_c_api_custom_obj.h */ diff --git a/decoder/source/ocsd_lib_dcd_register.cpp b/decoder/source/ocsd_lib_dcd_register.cpp index 0fd11fa..bc562cc 100644 --- a/decoder/source/ocsd_lib_dcd_register.cpp +++ b/decoder/source/ocsd_lib_dcd_register.cpp @@ -54,6 +54,7 @@ static built_in_decoder_info_t sBuiltInArray[] = {
OcsdLibDcdRegister *OcsdLibDcdRegister::m_p_libMngr = 0; bool OcsdLibDcdRegister::m_b_registeredBuiltins = false; +ocsd_trace_protocol_t OcsdLibDcdRegister::m_nextCustomProtocolID = OCSD_PROTOCOL_CUSTOM_0;
OcsdLibDcdRegister *OcsdLibDcdRegister::getDecoderRegister() { @@ -62,6 +63,20 @@ OcsdLibDcdRegister *OcsdLibDcdRegister::getDecoderRegister() return m_p_libMngr; }
+const ocsd_trace_protocol_t OcsdLibDcdRegister::getNextCustomProtocolID() +{ + ocsd_trace_protocol_t ret = m_nextCustomProtocolID; + if(m_nextCustomProtocolID < OCSD_PROTOCOL_END) + m_nextCustomProtocolID = (ocsd_trace_protocol_t)(((int)m_nextCustomProtocolID)+1); + return ret; +} + +void OcsdLibDcdRegister::releaseLastCustomProtocolID() +{ + if(m_nextCustomProtocolID > OCSD_PROTOCOL_CUSTOM_0) + m_nextCustomProtocolID = (ocsd_trace_protocol_t)(((int)m_nextCustomProtocolID)-1); +} + OcsdLibDcdRegister::OcsdLibDcdRegister() { m_iter = m_decoder_mngrs.begin(); @@ -100,11 +115,31 @@ void OcsdLibDcdRegister::registerBuiltInDecoders()
void OcsdLibDcdRegister::deregisterAllDecoders() { - for(unsigned i = 0; i < NUM_BUILTINS; i++) - delete sBuiltInArray[i].pMngr; - m_b_registeredBuiltins = false; - delete m_p_libMngr; - m_p_libMngr = 0; + if(m_b_registeredBuiltins) + { + for(unsigned i = 0; i < NUM_BUILTINS; i++) + delete sBuiltInArray[i].pMngr; + m_b_registeredBuiltins = false; + } + + if(m_p_libMngr) + { + m_p_libMngr->deRegisterCustomDecoders(); + delete m_p_libMngr; + m_p_libMngr = 0; + } +} + +void OcsdLibDcdRegister::deRegisterCustomDecoders() +{ + std::map<const ocsd_trace_protocol_t, IDecoderMngr *>::const_iterator iter = m_typed_decoder_mngrs.begin(); + while(iter != m_typed_decoder_mngrs.end()) + { + IDecoderMngr *pMngr = iter->second; + if(pMngr->getProtocolType() >= OCSD_PROTOCOL_CUSTOM_0) + delete pMngr; + iter++; + } }
const ocsd_err_t OcsdLibDcdRegister::getDecoderMngrByName(const std::string &name, IDecoderMngr **p_decoder_mngr)
Adds in STM packet decoder initial types and decoder object. Decoder will output generic SW trace packets as Master + Chan + payload + timestamp.
Signed-off-by: Mike Leach mike.leach@linaro.org --- .../ref_trace_decode_lib.vcxproj | 2 + .../ref_trace_decode_lib.vcxproj.filters | 6 ++ decoder/include/common/trc_gen_elem.h | 4 +- decoder/include/ocsd_if_types.h | 41 +++++++- decoder/include/stm/trc_pkt_decode_stm.h | 95 ++++++++++++++++++ decoder/include/trc_gen_elem_types.h | 17 ++-- decoder/source/stm/trc_pkt_decode_stm.cpp | 111 +++++++++++++++++++++ 7 files changed, 266 insertions(+), 10 deletions(-) create mode 100644 decoder/include/stm/trc_pkt_decode_stm.h create mode 100644 decoder/source/stm/trc_pkt_decode_stm.cpp
diff --git a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj index 1b68ed7..09133ce 100644 --- a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj +++ b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj @@ -373,6 +373,7 @@ <ClInclude Include="..\..\..\include\stm\stm_decoder.h" /> <ClInclude Include="..\..\..\include\stm\trc_cmp_cfg_stm.h" /> <ClInclude Include="..\..\..\include\stm\trc_dcd_mngr_stm.h" /> + <ClInclude Include="..\..\..\include\stm\trc_pkt_decode_stm.h" /> <ClInclude Include="..\..\..\include\stm\trc_pkt_elem_stm.h" /> <ClInclude Include="..\..\..\include\stm\trc_pkt_proc_stm.h" /> <ClInclude Include="..\..\..\include\stm\trc_pkt_types_stm.h" /> @@ -415,6 +416,7 @@ <ClCompile Include="..\..\..\source\ptm\trc_pkt_decode_ptm.cpp" /> <ClCompile Include="..\..\..\source\ptm\trc_pkt_elem_ptm.cpp" /> <ClCompile Include="..\..\..\source\ptm\trc_pkt_proc_ptm.cpp" /> + <ClCompile Include="..\..\..\source\stm\trc_pkt_decode_stm.cpp" /> <ClCompile Include="..\..\..\source\stm\trc_pkt_elem_stm.cpp" /> <ClCompile Include="..\..\..\source\stm\trc_pkt_proc_stm.cpp" /> <ClCompile Include="..\..\..\source\trc_component.cpp" /> diff --git a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters index bbd98f2..11acc41 100644 --- a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters +++ b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters @@ -323,6 +323,9 @@ <ClInclude Include="..\..\..\include\common\trc_pkt_elem_base.h"> <Filter>Header Files\common</Filter> </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_pkt_decode_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\source\trc_component.cpp"> @@ -436,5 +439,8 @@ <ClCompile Include="..\..\..\source\ocsd_lib_dcd_register.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\..\..\source\stm\trc_pkt_decode_stm.cpp"> + <Filter>Source Files\stm</Filter> + </ClCompile> </ItemGroup> </Project> \ No newline at end of file diff --git a/decoder/include/common/trc_gen_elem.h b/decoder/include/common/trc_gen_elem.h index c9c5299..97c3a45 100644 --- a/decoder/include/common/trc_gen_elem.h +++ b/decoder/include/common/trc_gen_elem.h @@ -77,7 +77,9 @@ public: void setLastInstrInfo(const bool exec, const ocsd_instr_type last_i_type, const ocsd_instr_subtype last_i_subtype); void setAddrStart(const ocsd_vaddr_t st_addr) { this->st_addr = st_addr; };
- + void setSWTMaster(const uint16_t master_id) { sw_trace_info.swt_master_id = master_id; }; + void setSWTChannel(const uint16_t chan_id) { sw_trace_info.swt_channel_id = chan_id; }; + void setSWTErrPkt(const bool m_err = false);
// stringize the element
diff --git a/decoder/include/ocsd_if_types.h b/decoder/include/ocsd_if_types.h index b28382b..13fce2e 100644 --- a/decoder/include/ocsd_if_types.h +++ b/decoder/include/ocsd_if_types.h @@ -285,7 +285,8 @@ typedef enum _ocsd_dcd_tree_src_t { typedef enum _ocsd_arch_version { ARCH_UNKNOWN, /**< unknown architecture */ ARCH_V7, /**< V7 architecture */ - ARCH_V8 /**< V8 architecture */ + ARCH_V8, /**< V8 architecture */ + ARCH_CUSTOM, /**< None ARM, custom architecture */ } ocsd_arch_version_t;
/** Core Profile */ @@ -293,7 +294,8 @@ typedef enum _ocsd_core_profile { profile_Unknown, /**< Unknown profile */ profile_CortexM, /**< Cortex-M profile */ profile_CortexR, /**< Cortex-R profile */ - profile_CortexA /**< Cortex-A profile */ + profile_CortexA, /**< Cortex-A profile */ + profile_Custom, /**< None ARM, custom arch profile */ } ocsd_core_profile_t;
/** Combined architecture and profile descriptor for a core */ @@ -331,6 +333,7 @@ typedef enum _ocsd_isa ocsd_isa_aarch64, /**< V8 AArch64 */ ocsd_isa_tee, /**< Thumb EE - unsupported */ ocsd_isa_jazelle, /**< Jazelle - unsupported in trace */ + ocsd_isa_custom, /**< Instruction set - custom arch decoder */ ocsd_isa_unknown /**< ISA not yet known */ } ocsd_isa;
@@ -503,7 +506,7 @@ typedef struct _ocsd_file_mem_region {
Builtin decoder names.
- Protocol type enum + Protocol type enum. @{*/
#define OCSD_CREATE_FLG_PACKET_PROC 0x01 /**< Create packet processor only. */ @@ -554,6 +557,38 @@ typedef enum _ocsd_trace_protocol_t {
/** @}*/
+ +/** @name Software Trace Packets Info + + Contains the information for the generic software trace output packet. + + Software trace packet master and channel data. + Payload info: + size - packet payload size in bits; + marker - if this packet has a marker/flag + timestamp - if this packet has a timestamp associated + number of packets - packet processor can optionally correlate identically + sized packets on the same master / channel to be output as a single generic packet + + Payload output as separate LE buffer, of sufficient bytes to hold all the packets. +@{*/ + +typedef struct _ocsd_swt_info { + uint16_t swt_master_id; + uint16_t swt_channel_id; + struct { + uint32_t swt_payload_pkt_bitsize:8; /**< Packet size in bits of the payload packets */ + uint32_t swt_payload_num_packets:8; /**< number of consecutive packets of this type in the payload data */ + uint32_t swt_marker_packet:1; /**< packet is marker / flag packet */ + uint32_t swt_has_timestamp:1; /**< packet has timestamp. */ + uint32_t swt_marker_first:1; /**< for multiple packet payloads, this indicates if any marker is on first or last packet */ + uint32_t swt_master_err:1; /**< current master has error */ + uint32_t swt_global_err:1; /**< global error */ + }; +} ocsd_swt_info_t; + +/** @}*/ + /** @}*/ #endif // ARM_OCSD_IF_TYPES_H_INCLUDED
diff --git a/decoder/include/stm/trc_pkt_decode_stm.h b/decoder/include/stm/trc_pkt_decode_stm.h new file mode 100644 index 0000000..eb113ce --- /dev/null +++ b/decoder/include/stm/trc_pkt_decode_stm.h @@ -0,0 +1,95 @@ +/* + * \file trc_pkt_decode_stm.h + * \brief OpenCSD : STM packet decoder + * + * Convert the incoming indidvidual STM packets to + * + * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. + */ + + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#ifndef ARM_TRC_PKT_DECODE_STM_H_INCLUDED +#define ARM_TRC_PKT_DECODE_STM_H_INCLUDED + + +#include "common/trc_pkt_decode_base.h" +#include "stm/trc_pkt_elem_stm.h" +#include "stm/trc_cmp_cfg_stm.h" +#include "common/trc_gen_elem.h" + +class TrcPktDecodeStm : public TrcPktDecodeBase<StmTrcPacket, STMConfig> +{ +public: + TrcPktDecodeStm(); + TrcPktDecodeStm(int instIDNum); + virtual ~TrcPktDecodeStm(); + +protected: + /* implementation packet decoding interface */ + virtual ocsd_datapath_resp_t processPacket(); + virtual ocsd_datapath_resp_t onEOT(); + virtual ocsd_datapath_resp_t onReset(); + virtual ocsd_datapath_resp_t onFlush(); + virtual ocsd_err_t onProtocolConfig(); + virtual const uint8_t getCoreSightTraceID() { return m_CSID; }; + + /* local decode methods */ + +private: + void initDecoder(); + void resetDecoder(); + void initPayloadBuffer(); + + typedef enum { + NO_SYNC, //!< pre start trace - init state or after reset or overflow, loss of sync. + WAIT_SYNC, //!< waiting for sync packet. + DECODE_PKTS, //!< processing input packet + } processor_state_t; + + processor_state_t m_curr_state; + + uint8_t m_curr_master; //!< current active master ID + uint16_t m_curr_channel; //!< current active channel ID + + uint8_t *m_payload_buffer; //!< payload buffer - allocated for one of multiple packets according to config + int m_payload_used; //!< payload used in bytes + int m_payload_size; //!< payload size in bytes + bool m_payload_odd_nibble; //!< last used byte in payload contains a single 4 bit packet. + + uint8_t m_CSID; //!< Coresight trace ID for this decoder. + +//** output element + OcsdTraceElement m_output_elem; //!< output packet +}; + +#endif // ARM_TRC_PKT_DECODE_STM_H_INCLUDED + +/* End of File trc_pkt_decode_stm.h */ diff --git a/decoder/include/trc_gen_elem_types.h b/decoder/include/trc_gen_elem_types.h index 66d8d79..22ed7dc 100644 --- a/decoder/include/trc_gen_elem_types.h +++ b/decoder/include/trc_gen_elem_types.h @@ -58,7 +58,9 @@ typedef enum _ocsd_gen_trc_elem_t OCSD_GEN_TRC_ELEM_EXCEPTION_RET, /*!< expection return */ OCSD_GEN_TRC_ELEM_TIMESTAMP, /*!< Timestamp - preceding elements happeded before this time. */ OCSD_GEN_TRC_ELEM_CYCLE_COUNT, /*!< Cycle count - cycles since last cycle count value - associated with a preceding instruction range. */ - OCSD_GEN_TRC_ELEM_EVENT, /*!< Event - trigger, (TBC - perhaps have a set of event types - cut down additional processing?) */ + OCSD_GEN_TRC_ELEM_EVENT, /*!< Event - trigger, (TBC - perhaps have a set of event types - cut down additional processing?) */ + OCSD_GEN_TRC_ELEM_SWTRACE, /*!< Software trace packet - may contain data payload. */ + OCSD_GEN_TRC_ELEM_CUSTOM, /*!< Fully custom packet type - used by none-ARM architecture decoders */ } ocsd_gen_trc_elem_t;
@@ -73,15 +75,14 @@ typedef struct _trace_event_t { uint16_t ev_number; /**< event number if numbered event type */ } trace_event_t;
- typedef struct _ocsd_generic_trace_elem { ocsd_gen_trc_elem_t elem_type; /**< Element type - remaining data interpreted according to this value */ ocsd_isa isa; /**< instruction set for executed instructions */ ocsd_vaddr_t st_addr; /**< start address for instruction execution range / inaccessible code address / data address */ ocsd_vaddr_t en_addr; /**< end address (exclusive) for instruction execution range. */ ocsd_pe_context context; /**< PE Context */ - uint64_t timestamp; /**< timestamp value for TS element type */ - uint32_t cycle_count; /**< cycle count for explicit cycle count element, or count for element with associated cycle count */ + uint64_t timestamp; /**< timestamp value for TS element type */ + uint32_t cycle_count; /**< cycle count for explicit cycle count element, or count for element with associated cycle count */ ocsd_instr_type last_i_type; /**< Last instruction type if instruction execution range */ ocsd_instr_subtype last_i_subtype; /**< sub type for last instruction in range */
@@ -92,15 +93,19 @@ typedef struct _ocsd_generic_trace_elem { uint32_t cpu_freq_change:1; /**< 1 if this packet indicates a change in CPU frequency */ uint32_t excep_ret_addr:1; /**< 1 if en_addr is the preferred exception return address on exception packet type */ uint32_t excep_data_marker:1; /**< 1 if the exception entry packet is a data push marker only, with no address information (used typically in v7M trace for marking data pushed onto stack) */ + uint32_t extended_data:1; /**< 1 if the packet extended data pointer is valid. Allows packet extensions for custom decoders, or additional data payloads for data trace. */ + uint32_t has_ts:1; /**< 1 if the packet has an associated timestamp - e.g. SW/STM trace TS+Payload as a single packet */ };
//! packet specific payloads union { - uint32_t exception_number; /**< exception number for exception type packets */ - trace_event_t trace_event; /**< Trace event - trigger etc */ + uint32_t exception_number; /**< exception number for exception type packets */ + trace_event_t trace_event; /**< Trace event - trigger etc */ trace_on_reason_t trace_on_reason; /**< reason for the trace on packet */ + ocsd_swt_info_t sw_trace_info; /**< software trace packet info */ };
+ void *ptr_extended_data; /**< pointer to extended data buffer (data trace, sw trace payload) / custom structure */
} ocsd_generic_trace_elem;
diff --git a/decoder/source/stm/trc_pkt_decode_stm.cpp b/decoder/source/stm/trc_pkt_decode_stm.cpp new file mode 100644 index 0000000..9185b6c --- /dev/null +++ b/decoder/source/stm/trc_pkt_decode_stm.cpp @@ -0,0 +1,111 @@ +/* + * \file trc_pkt_decode_stm.cpp + * \brief OpenCSD : + * + * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "stm/trc_pkt_decode_stm.h" +#define DCD_NAME "DCD_STM" + +TrcPktDecodeStm::TrcPktDecodeStm() + : TrcPktDecodeBase(DCD_NAME) +{ + initDecoder(); +} + +TrcPktDecodeStm::TrcPktDecodeStm(int instIDNum) + : TrcPktDecodeBase(DCD_NAME, instIDNum) +{ + initDecoder(); +} + +TrcPktDecodeStm::~TrcPktDecodeStm() +{ + if(m_payload_buffer) + delete [] m_payload_buffer; + m_payload_buffer = 0; +} + +/* implementation packet decoding interface */ +ocsd_datapath_resp_t TrcPktDecodeStm::processPacket() +{ +} + +ocsd_datapath_resp_t TrcPktDecodeStm::onEOT() +{ +} + +ocsd_datapath_resp_t TrcPktDecodeStm::onReset() +{ +} + +ocsd_datapath_resp_t TrcPktDecodeStm::onFlush() +{ +} + +ocsd_err_t TrcPktDecodeStm::onProtocolConfig() +{ + if(m_config == 0) + return OCSD_ERR_NOT_INIT; + + // static config - copy of CSID for easy reference + m_CSID = m_config->getTraceID(); + return OCSD_OK; +} + +void TrcPktDecodeStm::initDecoder() +{ + m_payload_buffer = 0; + m_payload_used = 0; + resetDecoder(); +} + +void TrcPktDecodeStm::resetDecoder() +{ + m_curr_state = NO_SYNC; + m_curr_master = 0; + m_curr_channel = 0; + m_payload_size = 0; + m_payload_odd_nibble = false; + m_CSID = 0; + m_output_elem.init(); +} + +void TrcPktDecodeStm::initPayloadBuffer() +{ + // set up the payload buffer. If we are correlating indentical packets then + // need a buffer that is a multiple of 64bit packets. + // otherwise a single packet length will do. + + +} + +/* End of File trc_pkt_decode_stm.cpp */
Moved library version defines and strings to separate version header file, from the global types file to reduce the compile dependency impact when altering library patch version for minor update or documentation only changes.
Update the version number for 0.5 development.
Updated version API source code for new header.
Signed-off-by: Mike Leach mike.leach@linaro.org --- .../ref_trace_decode_lib.vcxproj | 1 + .../ref_trace_decode_lib.vcxproj.filters | 3 + decoder/include/ocsd_if_types.h | 17 +----- decoder/include/ocsd_if_version.h | 65 ++++++++++++++++++++++ decoder/source/ocsd_version.cpp | 2 +- 5 files changed, 71 insertions(+), 17 deletions(-) create mode 100644 decoder/include/ocsd_if_version.h
diff --git a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj index 09133ce..a08fd6c 100644 --- a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj +++ b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj @@ -362,6 +362,7 @@ <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_file.h" /> <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_mapper.h" /> <ClInclude Include="..\..\..\include\ocsd_if_types.h" /> + <ClInclude Include="..\..\..\include\ocsd_if_version.h" /> <ClInclude Include="..\..\..\include\opencsd.h" /> <ClInclude Include="..\..\..\include\ptm\ptm_decoder.h" /> <ClInclude Include="..\..\..\include\ptm\trc_cmp_cfg_ptm.h" /> diff --git a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters index 11acc41..87aa847 100644 --- a/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters +++ b/decoder/build/win/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters @@ -326,6 +326,9 @@ <ClInclude Include="..\..\..\include\stm\trc_pkt_decode_stm.h"> <Filter>Header Files\stm</Filter> </ClInclude> + <ClInclude Include="..\..\..\include\ocsd_if_version.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\..\..\source\trc_component.cpp"> diff --git a/decoder/include/ocsd_if_types.h b/decoder/include/ocsd_if_types.h index 13fce2e..0477903 100644 --- a/decoder/include/ocsd_if_types.h +++ b/decoder/include/ocsd_if_types.h @@ -47,6 +47,7 @@ #include <inttypes.h> #endif
+ /** @defgroup ocsd_interfaces OpenCSD Library : Interfaces @brief Set of types, structures and virtual interface classes making up the primary API
@@ -55,23 +56,7 @@
@{*/
-/** @name Library Versioning -@{*/ -#define OCSD_VER_MAJOR 0x0 /**< Library Major Version */ -#define OCSD_VER_MINOR 0x4 /**< Library Minor Version */ -#define OCSD_VER_PATCH 0x2 /**< Library Patch Version */ - -/** Library version number - MMMMnnpp format. - MMMM = major version, - nn = minor version, - pp = patch version -*/ -#define OCSD_VER_NUM (((uint32_t)OCSD_VER_MAJOR << 16) | ((uint32_t)OCSD_VER_MINOR << 8) | ((uint32_t)OCSD_VER_PATCH))
-#define OCSD_VER_STRING "0.4.2" /**< Library Version string */ -#define OCSD_LIB_NAME "OpenCSD Library" /**< Library name string */ -#define OCSD_LIB_SHORT_NAME "OCSD" /**< Library Short name string */ -/** @}*/
/** @name Trace Indexing and Channel IDs @{*/ diff --git a/decoder/include/ocsd_if_version.h b/decoder/include/ocsd_if_version.h new file mode 100644 index 0000000..4b8d3e2 --- /dev/null +++ b/decoder/include/ocsd_if_version.h @@ -0,0 +1,65 @@ +/* + * \file ocsd_if_version.h + * \brief OpenCSD : Library API versioning + * + * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. + */ + +/* + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARM_OCSD_IF_VERSION_H_INCLUDED +#define ARM_OCSD_IF_VERSION_H_INCLUDED + +#include <stdint.h> + +/** @addtogroup ocsd_interfaces +@{*/ + +/** @name Library Versioning +@{*/ +#define OCSD_VER_MAJOR 0x0 /**< Library Major Version */ +#define OCSD_VER_MINOR 0x5 /**< Library Minor Version */ +#define OCSD_VER_PATCH 0x0 /**< Library Patch Version */ + +/** Library version number - MMMMnnpp format. + MMMM = major version, + nn = minor version, + pp = patch version +*/ +#define OCSD_VER_NUM (((uint32_t)OCSD_VER_MAJOR << 16) | ((uint32_t)OCSD_VER_MINOR << 8) | ((uint32_t)OCSD_VER_PATCH)) + +#define OCSD_VER_STRING "0.5.0" /**< Library Version string */ +#define OCSD_LIB_NAME "OpenCSD Library" /**< Library name string */ +#define OCSD_LIB_SHORT_NAME "OCSD" /**< Library Short name string */ +/** @}*/ + +/** @}*/ + +#endif // ARM_OCSD_IF_VERSION_H_INCLUDED + +/* End of File ocsd_if_version.h */ diff --git a/decoder/source/ocsd_version.cpp b/decoder/source/ocsd_version.cpp index 15a9912..33990a0 100644 --- a/decoder/source/ocsd_version.cpp +++ b/decoder/source/ocsd_version.cpp @@ -32,7 +32,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
-#include "ocsd_if_types.h" +#include "ocsd_if_version.h" #include "common/ocsd_version.h"
const uint32_t ocsdVersion::vers_num()
STM full decoder outputs generic trace elements of the SWT type. These consist of the current master + channel, along with payload and optional markers and timestamps if present.
Generic trace output type added to cover software trace along with packet printer.
Adds decoder into the linux makefiles.
Signed-off-by: Mike Leach mike.leach@linaro.org --- .gitignore | 2 + decoder/build/linux/ref_trace_decode_lib/makefile | 3 +- decoder/include/common/trc_gen_elem.h | 31 ++-- decoder/include/ocsd_if_types.h | 29 ++-- decoder/include/stm/trc_dcd_mngr_stm.h | 8 +- decoder/include/stm/trc_pkt_decode_stm.h | 24 ++- decoder/include/stm/trc_pkt_elem_stm.h | 4 +- decoder/include/stm/trc_pkt_types_stm.h | 2 +- decoder/include/trc_gen_elem_types.h | 21 ++- decoder/source/stm/trc_pkt_decode_stm.cpp | 198 +++++++++++++++++++++- decoder/source/stm/trc_pkt_proc_stm.cpp | 5 +- decoder/source/trc_gen_elem.cpp | 70 +++++++- decoder/source/trc_printable_elem.cpp | 4 +- 13 files changed, 348 insertions(+), 53 deletions(-)
diff --git a/.gitignore b/.gitignore index c98b5a6..ebaf552 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,5 @@ ref_trace_decoder/tests/build/win/trc_pkt_lister/x64/Release-dll/* *.orig decoder/docs/html/* *.orig +*.VC.db +*.VC.VC.opendb diff --git a/decoder/build/linux/ref_trace_decode_lib/makefile b/decoder/build/linux/ref_trace_decode_lib/makefile index b650331..5d89999 100644 --- a/decoder/build/linux/ref_trace_decode_lib/makefile +++ b/decoder/build/linux/ref_trace_decode_lib/makefile @@ -83,7 +83,8 @@ MEMACCOBJ= $(BUILD_DIR)/trc_mem_acc_mapper.o \ $(BUILD_DIR)/trc_mem_acc_cb.o
STMOBJ= $(BUILD_DIR)/trc_pkt_elem_stm.o \ - $(BUILD_DIR)/trc_pkt_proc_stm.o + $(BUILD_DIR)/trc_pkt_proc_stm.o \ + $(BUILD_DIR)/trc_pkt_decode_stm.o
OBJECTS=$(BUILD_DIR)/ocsd_code_follower.o \ $(BUILD_DIR)/ocsd_dcd_tree.o \ diff --git a/decoder/include/common/trc_gen_elem.h b/decoder/include/common/trc_gen_elem.h index 97c3a45..2f4182b 100644 --- a/decoder/include/common/trc_gen_elem.h +++ b/decoder/include/common/trc_gen_elem.h @@ -65,7 +65,7 @@ public:
void setCycleCount(const uint32_t cycleCount); void setEvent(const event_t ev_type, const uint16_t number); - void setTS(const uint64_t ts, const bool freqChange = false) { timestamp = ts; cpu_freq_change = freqChange ? 1 : 0; }; + void setTS(const uint64_t ts, const bool freqChange = false);
void setExcepMarker() { excep_data_marker = 1; }; void setExceptionNum(uint32_t excepNum) { exception_number = excepNum; }; @@ -77,9 +77,8 @@ public: void setLastInstrInfo(const bool exec, const ocsd_instr_type last_i_type, const ocsd_instr_subtype last_i_subtype); void setAddrStart(const ocsd_vaddr_t st_addr) { this->st_addr = st_addr; };
- void setSWTMaster(const uint16_t master_id) { sw_trace_info.swt_master_id = master_id; }; - void setSWTChannel(const uint16_t chan_id) { sw_trace_info.swt_channel_id = chan_id; }; - void setSWTErrPkt(const bool m_err = false); + void setSWTInfo(const ocsd_swt_info_t swt_info) { sw_trace_info = swt_info; }; + void setExtendedDataPtr(const void *data_ptr);
// stringize the element
@@ -96,6 +95,7 @@ public:
private: + void printSWInfoPkt(std::ostringstream &oss) const; void clearPerPktData(); //!< clear flags that indicate validity / have values on a per packet basis
}; @@ -168,12 +168,9 @@ inline void OcsdTraceElement::init()
inline void OcsdTraceElement::clearPerPktData() { - cpu_freq_change = 0; - has_cc = 0; - last_instr_exec = 0; - excep_ret_addr = 0; - exception_number = 0; // union with trace_on_reason / trace_event - excep_data_marker = 0; + flag_bits = 0; // union with trace_on_reason / trace_event + + ptr_extended_data = 0; // extended data pointer }
inline void OcsdTraceElement::setTraceOnReason(const trace_on_reason_t reason) @@ -188,6 +185,20 @@ inline void OcsdTraceElement::setISA(const ocsd_isa isa_update) isa = ocsd_isa_unknown; }
+inline void OcsdTraceElement::setTS(const uint64_t ts, const bool freqChange /*= false*/) +{ + timestamp = ts; + cpu_freq_change = freqChange ? 1 : 0; + has_ts = 1; +} + +inline void OcsdTraceElement::setExtendedDataPtr(const void *data_ptr) +{ + extended_data = 1; + ptr_extended_data = data_ptr; +} + + /** @}*/
#endif // ARM_TRC_GEN_ELEM_H_INCLUDED diff --git a/decoder/include/ocsd_if_types.h b/decoder/include/ocsd_if_types.h index 0477903..776487a 100644 --- a/decoder/include/ocsd_if_types.h +++ b/decoder/include/ocsd_if_types.h @@ -37,8 +37,8 @@
#include <stdint.h> #include <stddef.h> -#ifdef _MSC_VER -/** VS2010 does not support inttypes - temp fix till we update the compiler support */ +#if defined(_MSC_VER) && (_MSC_VER < 1900) +/** VS2010 does not support inttypes - remove when VS2010 support is dropped */ #define __PRI64_PREFIX "ll" #define PRIX64 __PRI64_PREFIX "X" #define PRIu64 __PRI64_PREFIX "u" @@ -561,17 +561,26 @@ typedef enum _ocsd_trace_protocol_t { typedef struct _ocsd_swt_info { uint16_t swt_master_id; uint16_t swt_channel_id; - struct { - uint32_t swt_payload_pkt_bitsize:8; /**< Packet size in bits of the payload packets */ - uint32_t swt_payload_num_packets:8; /**< number of consecutive packets of this type in the payload data */ - uint32_t swt_marker_packet:1; /**< packet is marker / flag packet */ - uint32_t swt_has_timestamp:1; /**< packet has timestamp. */ - uint32_t swt_marker_first:1; /**< for multiple packet payloads, this indicates if any marker is on first or last packet */ - uint32_t swt_master_err:1; /**< current master has error */ - uint32_t swt_global_err:1; /**< global error */ + union { + struct { + uint32_t swt_payload_pkt_bitsize:8; /**< [bits 0:7 ] Packet size in bits of the payload packets */ + uint32_t swt_payload_num_packets:8; /**< [bits 8:15 ] number of consecutive packets of this type in the payload data */ + uint32_t swt_marker_packet:1; /**< [bit 16 ] packet is marker / flag packet */ + uint32_t swt_has_timestamp:1; /**< [bit 17 ] packet has timestamp. */ + uint32_t swt_marker_first:1; /**< [bit 18 ] for multiple packet payloads, this indicates if any marker is on first or last packet */ + uint32_t swt_master_err:1; /**< [bit 19 ] current master has error - payload is error code */ + uint32_t swt_global_err:1; /**< [bit 20 ] global error - payload is error code - master and channel ID not valid */ + uint32_t swt_trigger_event:1; /**< [bit 21 ] trigger event packet - payload is event number */ + uint32_t swt_frequency:1; /**< [bit 22 ] frequency packet - payload is frequency */ + uint32_t swt_id_valid:1; /**< [bit 23 ] master & channel ID has been set by input stream */ + }; + uint32_t swt_flag_bits; }; } ocsd_swt_info_t;
+/** mask for the swt_id_valid flag - need to retain between packets */ +#define SWT_ID_VALID_MASK (0x1 << 23) + /** @}*/
/** @}*/ diff --git a/decoder/include/stm/trc_dcd_mngr_stm.h b/decoder/include/stm/trc_dcd_mngr_stm.h index 740925d..33632c6 100644 --- a/decoder/include/stm/trc_dcd_mngr_stm.h +++ b/decoder/include/stm/trc_dcd_mngr_stm.h @@ -35,18 +35,20 @@ #define ARM_TRC_DCD_MNGR_STM_H_INCLUDED
#include "common/ocsd_dcd_mngr.h" +#include "trc_pkt_decode_stm.h" #include "trc_pkt_proc_stm.h" #include "trc_cmp_cfg_stm.h" #include "trc_pkt_types_stm.h"
-class DecoderMngrStm : public DecodeMngrPktProc< StmTrcPacket, +class DecoderMngrStm : public DecodeMngrFullDcd< StmTrcPacket, ocsd_stm_pkt_type, STMConfig, ocsd_stm_cfg, - TrcPktProcStm> + TrcPktProcStm, + TrcPktDecodeStm> { public: - DecoderMngrStm(const std::string &name) : DecodeMngrPktProc(name,OCSD_PROTOCOL_STM) {}; + DecoderMngrStm(const std::string &name) : DecodeMngrFullDcd(name,OCSD_PROTOCOL_STM) {}; virtual ~DecoderMngrStm() {}; };
diff --git a/decoder/include/stm/trc_pkt_decode_stm.h b/decoder/include/stm/trc_pkt_decode_stm.h index eb113ce..dc295f4 100644 --- a/decoder/include/stm/trc_pkt_decode_stm.h +++ b/decoder/include/stm/trc_pkt_decode_stm.h @@ -51,7 +51,7 @@ public: TrcPktDecodeStm(); TrcPktDecodeStm(int instIDNum); virtual ~TrcPktDecodeStm(); - + protected: /* implementation packet decoding interface */ virtual ocsd_datapath_resp_t processPacket(); @@ -67,25 +67,33 @@ private: void initDecoder(); void resetDecoder(); void initPayloadBuffer(); + bool isInit() { return (bool)((m_config != 0) && (m_payload_buffer != 0)); }; + ocsd_datapath_resp_t decodePacket(bool &bPktDone); //!< decode the current incoming packet + void clearSWTPerPcktInfo(); + void updatePayload(bool &bSendPacket);
typedef enum { NO_SYNC, //!< pre start trace - init state or after reset or overflow, loss of sync. WAIT_SYNC, //!< waiting for sync packet. - DECODE_PKTS, //!< processing input packet + DECODE_PKTS //!< processing input packet. } processor_state_t;
processor_state_t m_curr_state; - - uint8_t m_curr_master; //!< current active master ID - uint16_t m_curr_channel; //!< current active channel ID
- uint8_t *m_payload_buffer; //!< payload buffer - allocated for one of multiple packets according to config - int m_payload_used; //!< payload used in bytes - int m_payload_size; //!< payload size in bytes + ocsd_swt_info_t m_swt_packet_info; + + uint8_t *m_payload_buffer; //!< payload buffer - allocated for one or multiple packets according to config + int m_payload_size; //!< payload buffer total size in bytes. + int m_payload_used; //!< payload buffer used in bytes - current payload size. bool m_payload_odd_nibble; //!< last used byte in payload contains a single 4 bit packet. + int m_num_pkt_correlation; //!< number of identical payload packets to buffer up before output. - fixed at 1 till later update
uint8_t m_CSID; //!< Coresight trace ID for this decoder.
+ bool m_decode_pass1; //!< flag to indicate 1st pass of packet decode. + + + //** output element OcsdTraceElement m_output_elem; //!< output packet }; diff --git a/decoder/include/stm/trc_pkt_elem_stm.h b/decoder/include/stm/trc_pkt_elem_stm.h index 79c9595..738e452 100644 --- a/decoder/include/stm/trc_pkt_elem_stm.h +++ b/decoder/include/stm/trc_pkt_elem_stm.h @@ -84,7 +84,7 @@ public: const uint8_t getMaster() const; const uint16_t getChannel() const; const ocsd_stm_ts_type getTSType() const; - const uint64_t getCurrentTSVal() const; + const uint64_t getTSVal() const;
const uint8_t getD4Val() const; const uint8_t getD8Val() const; @@ -197,7 +197,7 @@ inline const ocsd_stm_ts_type StmTrcPacket::getTSType() const return ts_type; }
-inline const uint64_t StmTrcPacket::getCurrentTSVal() const +inline const uint64_t StmTrcPacket::getTSVal() const { return timestamp; } diff --git a/decoder/include/stm/trc_pkt_types_stm.h b/decoder/include/stm/trc_pkt_types_stm.h index bc2035f..0192b5c 100644 --- a/decoder/include/stm/trc_pkt_types_stm.h +++ b/decoder/include/stm/trc_pkt_types_stm.h @@ -104,7 +104,7 @@ typedef struct _ocsd_stm_pkt uint8_t master; /**< current master */ uint16_t channel; /**< current channel */
- uint64_t timestamp; /**< latest timestamp value */ + uint64_t timestamp; /**< latest timestamp value -> as binary - packet processor does grey decoding */ uint8_t pkt_ts_bits; /**< timestamp bits updated this packet */ uint8_t pkt_has_ts; /**< current packet has associated timestamp (ts bits can be 0 if same value as last time) */
diff --git a/decoder/include/trc_gen_elem_types.h b/decoder/include/trc_gen_elem_types.h index 22ed7dc..440bc19 100644 --- a/decoder/include/trc_gen_elem_types.h +++ b/decoder/include/trc_gen_elem_types.h @@ -87,14 +87,17 @@ typedef struct _ocsd_generic_trace_elem { ocsd_instr_subtype last_i_subtype; /**< sub type for last instruction in range */
//! per element flags - struct { - uint32_t last_instr_exec:1; /**< 1 if last instruction in range was executed; */ - uint32_t has_cc:1; /**< 1 if this packet has a valid cycle count included (e.g. cycle count included as part of instruction range packet, always 1 for pure cycle count packet.*/ - uint32_t cpu_freq_change:1; /**< 1 if this packet indicates a change in CPU frequency */ - uint32_t excep_ret_addr:1; /**< 1 if en_addr is the preferred exception return address on exception packet type */ - uint32_t excep_data_marker:1; /**< 1 if the exception entry packet is a data push marker only, with no address information (used typically in v7M trace for marking data pushed onto stack) */ - uint32_t extended_data:1; /**< 1 if the packet extended data pointer is valid. Allows packet extensions for custom decoders, or additional data payloads for data trace. */ - uint32_t has_ts:1; /**< 1 if the packet has an associated timestamp - e.g. SW/STM trace TS+Payload as a single packet */ + union { + struct { + uint32_t last_instr_exec:1; /**< 1 if last instruction in range was executed; */ + uint32_t has_cc:1; /**< 1 if this packet has a valid cycle count included (e.g. cycle count included as part of instruction range packet, always 1 for pure cycle count packet.*/ + uint32_t cpu_freq_change:1; /**< 1 if this packet indicates a change in CPU frequency */ + uint32_t excep_ret_addr:1; /**< 1 if en_addr is the preferred exception return address on exception packet type */ + uint32_t excep_data_marker:1; /**< 1 if the exception entry packet is a data push marker only, with no address information (used typically in v7M trace for marking data pushed onto stack) */ + uint32_t extended_data:1; /**< 1 if the packet extended data pointer is valid. Allows packet extensions for custom decoders, or additional data payloads for data trace. */ + uint32_t has_ts:1; /**< 1 if the packet has an associated timestamp - e.g. SW/STM trace TS+Payload as a single packet */ + }; + uint32_t flag_bits; };
//! packet specific payloads @@ -105,7 +108,7 @@ typedef struct _ocsd_generic_trace_elem { ocsd_swt_info_t sw_trace_info; /**< software trace packet info */ };
- void *ptr_extended_data; /**< pointer to extended data buffer (data trace, sw trace payload) / custom structure */ + const void *ptr_extended_data; /**< pointer to extended data buffer (data trace, sw trace payload) / custom structure */
} ocsd_generic_trace_elem;
diff --git a/decoder/source/stm/trc_pkt_decode_stm.cpp b/decoder/source/stm/trc_pkt_decode_stm.cpp index 9185b6c..e0ddc3e 100644 --- a/decoder/source/stm/trc_pkt_decode_stm.cpp +++ b/decoder/source/stm/trc_pkt_decode_stm.cpp @@ -1,6 +1,6 @@ /* * \file trc_pkt_decode_stm.cpp - * \brief OpenCSD : + * \brief OpenCSD : STM packet decoder - output generic SW trace packets. * * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. */ @@ -57,18 +57,55 @@ TrcPktDecodeStm::~TrcPktDecodeStm() /* implementation packet decoding interface */ ocsd_datapath_resp_t TrcPktDecodeStm::processPacket() { + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + bool bPktDone = false; + + m_decode_pass1 = true; + + while(!bPktDone) + { + switch(m_curr_state) + { + case NO_SYNC: + m_output_elem.setType(OCSD_GEN_TRC_ELEM_NO_SYNC); + resp = outputTraceElement(m_output_elem); + m_curr_state = WAIT_SYNC; + break; + + case WAIT_SYNC: + if(m_curr_packet_in->getPktType() == STM_PKT_ASYNC) + m_curr_state = DECODE_PKTS; + bPktDone = true; + break; + + case DECODE_PKTS: + resp = decodePacket(bPktDone); + break; + } + } + return resp; }
ocsd_datapath_resp_t TrcPktDecodeStm::onEOT() { + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + m_output_elem.setType(OCSD_GEN_TRC_ELEM_EO_TRACE); + resp = outputTraceElement(m_output_elem); + return resp; }
ocsd_datapath_resp_t TrcPktDecodeStm::onReset() { + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + resetDecoder(); + return resp; }
ocsd_datapath_resp_t TrcPktDecodeStm::onFlush() { + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + // don't currently save unsent packets so nothing to flush + return resp; }
ocsd_err_t TrcPktDecodeStm::onProtocolConfig() @@ -84,19 +121,25 @@ ocsd_err_t TrcPktDecodeStm::onProtocolConfig() void TrcPktDecodeStm::initDecoder() { m_payload_buffer = 0; - m_payload_used = 0; + m_num_pkt_correlation = 1; // fixed at single packet payload correlation - add feature later + m_CSID = 0; + + // base decoder state - STM requires no memory and instruction decode. + setUsesMemAccess(false); + setUsesIDecode(false); + resetDecoder(); }
void TrcPktDecodeStm::resetDecoder() { m_curr_state = NO_SYNC; - m_curr_master = 0; - m_curr_channel = 0; m_payload_size = 0; + m_payload_used = 0; m_payload_odd_nibble = false; - m_CSID = 0; m_output_elem.init(); + m_swt_packet_info.swt_flag_bits = 0; // zero out everything + initPayloadBuffer(); }
void TrcPktDecodeStm::initPayloadBuffer() @@ -104,7 +147,152 @@ void TrcPktDecodeStm::initPayloadBuffer() // set up the payload buffer. If we are correlating indentical packets then // need a buffer that is a multiple of 64bit packets. // otherwise a single packet length will do. + if(m_payload_buffer) + delete [] m_payload_buffer; + m_payload_buffer = new (std::nothrow) uint8_t[m_num_pkt_correlation * sizeof(uint64_t)]; +} + +ocsd_datapath_resp_t TrcPktDecodeStm::decodePacket(bool &bPktDone) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + bool bSendPacket = false; // flag to indicate output required. + + bPktDone = true; // assume complete unless 2nd pass required. + m_output_elem.setType(OCSD_GEN_TRC_ELEM_SWTRACE); + clearSWTPerPcktInfo(); + + switch (m_curr_packet_in->getPktType()) + { + case STM_PKT_BAD_SEQUENCE: /**< Incorrect protocol sequence */ + case STM_PKT_RESERVED: + resp = OCSD_RESP_FATAL_INVALID_DATA; + case STM_PKT_NOTSYNC: + resetDecoder(); + break; + + case STM_PKT_VERSION: /**< Version packet - not relevant to generic (versionless) o/p */ + case STM_PKT_ASYNC: /**< Alignment synchronisation packet */ + case STM_PKT_INCOMPLETE_EOT: /**< Incomplete packet flushed at end of trace. */ + // no action required. + break; + +/* markers for valid packets*/ + case STM_PKT_NULL: /**< Null packet */ + if(m_curr_packet_in->isTSPkt()) + bSendPacket = true; // forward NULL packet if associated timestamp. + break; + + case STM_PKT_FREQ: /**< Frequency packet */ + m_swt_packet_info.swt_frequency = 1; + updatePayload(bSendPacket); + break; + + case STM_PKT_TRIG: /**< Trigger event packet. */ + m_swt_packet_info.swt_trigger_event = 1; + updatePayload(bSendPacket); + break; + + case STM_PKT_GERR: /**< Global error packet - protocol error but unknown which master had error */ + m_swt_packet_info.swt_master_id = m_curr_packet_in->getMaster(); + m_swt_packet_info.swt_channel_id = m_curr_packet_in->getChannel(); + m_swt_packet_info.swt_global_err = 1; + m_swt_packet_info.swt_id_valid = 0; + updatePayload(bSendPacket); + break; + + case STM_PKT_MERR: /**< Master error packet - current master detected an error (e.g. dropped trace) */ + m_swt_packet_info.swt_channel_id = m_curr_packet_in->getChannel(); + m_swt_packet_info.swt_master_err = 1; + updatePayload(bSendPacket); + break; + + case STM_PKT_M8: /**< Set current master */ + m_swt_packet_info.swt_master_id = m_curr_packet_in->getMaster(); + m_swt_packet_info.swt_channel_id = m_curr_packet_in->getChannel(); // forced to 0 + m_swt_packet_info.swt_id_valid = 1; + break; + + case STM_PKT_C8: /**< Set lower 8 bits of current channel - packet proc hadnles this */ + case STM_PKT_C16: /**< Set current channel */ + m_swt_packet_info.swt_channel_id = m_curr_packet_in->getChannel(); + break; + + case STM_PKT_FLAG: /**< Flag packet */ + m_swt_packet_info.swt_marker_packet = 1; + bSendPacket = true; // send 0 payload marker packet./ + break; + + + case STM_PKT_D4: /**< 4 bit data payload packet */ + case STM_PKT_D8: /**< 8 bit data payload packet */ + case STM_PKT_D16: /**< 16 bit data payload packet */ + case STM_PKT_D32: /**< 32 bit data payload packet */ + case STM_PKT_D64: /**< 64 bit data payload packet */ + updatePayload(bSendPacket); + break; + + } + + if(bSendPacket) + { + if(m_curr_packet_in->isTSPkt()) + { + m_output_elem.setTS(m_curr_packet_in->getTSVal()); + m_swt_packet_info.swt_has_timestamp = 1; + } + m_output_elem.setSWTInfo(m_swt_packet_info); + resp = outputTraceElement(m_output_elem); + } + + return resp; +} + +void TrcPktDecodeStm::clearSWTPerPcktInfo() +{ + m_swt_packet_info.swt_flag_bits &= (uint32_t)(0x0 | SWT_ID_VALID_MASK); // clear flags and current payload size (save id valid flag). +} + +void TrcPktDecodeStm::updatePayload(bool &bSendPacket) +{ + // without buffering similar packets - this function is quite simple + bSendPacket = true; + m_swt_packet_info.swt_payload_num_packets = 1; + + switch(m_curr_packet_in->getPktType()) + { + case STM_PKT_D4: /**< 4 bit data payload packet */ + m_swt_packet_info.swt_payload_pkt_bitsize = 4; + *(uint8_t *)m_payload_buffer = m_curr_packet_in->getD4Val(); + break; + + case STM_PKT_D8: /**< 8 bit data payload packet */ + case STM_PKT_TRIG: /**< Trigger event packet - 8 bits. */ + case STM_PKT_GERR: /**< error packet - 8 bits. */ + case STM_PKT_MERR: /**< error packet - 8 bits. */ + m_swt_packet_info.swt_payload_pkt_bitsize = 8; + *(uint8_t *)m_payload_buffer = m_curr_packet_in->getD8Val(); + break; + + case STM_PKT_D16: /**< 16 bit data payload packet */ + m_swt_packet_info.swt_payload_pkt_bitsize = 16; + *(uint16_t *)m_payload_buffer = m_curr_packet_in->getD16Val(); + break; + + case STM_PKT_D32: /**< 32 bit data payload packet */ + case STM_PKT_FREQ: /**< Frequency packet */ + m_swt_packet_info.swt_payload_pkt_bitsize = 32; + *(uint32_t *)m_payload_buffer = m_curr_packet_in->getD32Val(); + break; +
+ case STM_PKT_D64: /**< 64 bit data payload packet */ + m_swt_packet_info.swt_payload_pkt_bitsize = 64; + *(uint64_t *)m_payload_buffer = m_curr_packet_in->getD64Val(); + break; + } + m_output_elem.setExtendedDataPtr(m_payload_buffer); + if (m_curr_packet_in->isMarkerPkt()) + m_swt_packet_info.swt_marker_packet = 1;
}
diff --git a/decoder/source/stm/trc_pkt_proc_stm.cpp b/decoder/source/stm/trc_pkt_proc_stm.cpp index f16acb8..242ee1c 100644 --- a/decoder/source/stm/trc_pkt_proc_stm.cpp +++ b/decoder/source/stm/trc_pkt_proc_stm.cpp @@ -752,7 +752,10 @@ void TrcPktProcStm::stmPktTriggerTS() void TrcPktProcStm::stmPktFreq() { if(m_num_nibbles == 3) + { m_curr_packet.setPacketType(STM_PKT_FREQ,false); + m_val32 = 0; + } stmExtractVal32(11); if(m_num_nibbles == 11) { @@ -868,7 +871,7 @@ void TrcPktProcStm::stmExtractTS() uint8_t new_bits = m_req_ts_nibbles * 4; if(m_curr_packet.getTSType() == STM_TS_GREY) { - uint64_t gray_val = bin_to_gray(m_curr_packet.getCurrentTSVal()); + uint64_t gray_val = bin_to_gray(m_curr_packet.getTSVal()); if(new_bits == 64) { gray_val = m_ts_update_value; diff --git a/decoder/source/trc_gen_elem.cpp b/decoder/source/trc_gen_elem.cpp index 92cc721..33f8dcb 100644 --- a/decoder/source/trc_gen_elem.cpp +++ b/decoder/source/trc_gen_elem.cpp @@ -52,7 +52,9 @@ static const char *s_elem_descs[][2] = {"OCSD_GEN_TRC_ELEM_EXCEPTION_RET","Expection return"}, {"OCSD_GEN_TRC_ELEM_TIMESTAMP","Timestamp - preceding elements happeded before this time."}, {"OCSD_GEN_TRC_ELEM_CYCLE_COUNT","Cycle count - cycles since last cycle count value - associated with a preceding instruction range."}, - {"OCSD_GEN_TRC_ELEM_EVENT","Event - numbered event or trigger"} + {"OCSD_GEN_TRC_ELEM_EVENT","Event - numbered event or trigger"}, + {"OCSD_GEN_TRC_ELEM_SWTRACE","Software trace packet - may contain data payload."}, + {"OCSD_GEN_TRC_ELEM_CUSTOM","Fully custom packet type."} };
static const char *instr_type[] = { @@ -143,6 +145,10 @@ void OcsdTraceElement::toString(std::string &str) const oss << " [ TS=0x" << std::setfill('0') << std::setw(12) << std::hex << timestamp << "]; "; break;
+ case OCSD_GEN_TRC_ELEM_SWTRACE: + printSWInfoPkt(oss); + break; + default: break; } if(has_cc) @@ -162,6 +168,68 @@ OcsdTraceElement &OcsdTraceElement::operator =(const ocsd_generic_trace_elem* p_ return *this; }
+ +void OcsdTraceElement::printSWInfoPkt(std::ostringstream & oss) const +{ + if (!sw_trace_info.swt_global_err) + { + if (sw_trace_info.swt_id_valid) + { + oss << " (Ma:0x" << std::setfill('0') << std::setw(2) << std::hex << sw_trace_info.swt_master_id << "; "; + oss << "Ch:0x" << std::setfill('0') << std::setw(2) << std::hex << sw_trace_info.swt_channel_id << ") "; + } + else + oss << "(Ma:0x??; Ch:0x??" << ") "; + + if (sw_trace_info.swt_payload_pkt_bitsize > 0) + { + oss << "0x" << std::setfill('0') << std::hex; + if (sw_trace_info.swt_payload_pkt_bitsize == 4) + { + oss << std::setw(1); + oss << (uint16_t)(((uint8_t *)ptr_extended_data)[0] & 0xF); + } + else + { + switch (sw_trace_info.swt_payload_pkt_bitsize) + { + case 8: + // force uint8 to uint16 so oss 'sees' them as something to be stringised, rather than absolute char values + oss << std::setw(2) << (uint16_t)((uint8_t *)ptr_extended_data)[0]; + break; + case 16: + oss << std::setw(4) << ((uint16_t *)ptr_extended_data)[0]; + break; + case 32: + oss << std::setw(8) << ((uint32_t *)ptr_extended_data)[0]; + break; + case 64: + oss << std::setw(16) << ((uint64_t *)ptr_extended_data)[0]; + break; + default: + oss << "{Data Error : unsupported bit width.}"; + break; + } + } + oss << "; "; + } + if (sw_trace_info.swt_marker_packet) + oss << "+Mrk "; + if (sw_trace_info.swt_trigger_event) + oss << "Trig "; + if (sw_trace_info.swt_has_timestamp) + oss << " [ TS=0x" << std::setfill('0') << std::setw(12) << std::hex << timestamp << "]; "; + if (sw_trace_info.swt_frequency) + oss << "Freq"; + if (sw_trace_info.swt_master_err) + oss << "{Master Error.}"; + } + else + { + oss << "{Global Error.}"; + } +} + /* void OcsdTraceElement::toString(const ocsd_generic_trace_elem *p_elem, std::string &str) { diff --git a/decoder/source/trc_printable_elem.cpp b/decoder/source/trc_printable_elem.cpp index 8d270e1..2fd49d9 100644 --- a/decoder/source/trc_printable_elem.cpp +++ b/decoder/source/trc_printable_elem.cpp @@ -35,8 +35,8 @@ #include "common/trc_printable_elem.h" #include <cassert> #include <cstring> -#ifdef _MSC_VER -/** VS2010 does not support inttypes - temp fix till we update the compiler support */ +#if defined(_MSC_VER) && (_MSC_VER < 1900) + /** VS2010 does not support inttypes - remove when VS2010 support is dropped */ #define __PRI64_PREFIX "ll" #define PRIX64 __PRI64_PREFIX "X" #define PRIu64 __PRI64_PREFIX "u"
Adds a custom factory API for registering named decoders with the library and creating new instances of the decoder types.
Updates to the decoder manager and decoder instance wrapper C++ objects that interface with the C-API
Added in LogMessage to TraceComponent base class to allow derived classes to easily call logging interface without deref pointers etc.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/include/c_api/ocsd_c_api_cust_fact.h | 54 ++++++++++ decoder/include/c_api/ocsd_c_api_cust_impl.h | 133 +++++++++++++++++++++++++ decoder/include/c_api/ocsd_c_api_custom.h | 84 ++++++++-------- decoder/include/common/trc_component.h | 1 + decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 131 ++++++++++++++++++++---- decoder/source/c_api/ocsd_c_api_custom_obj.h | 46 +++++++-- decoder/source/trc_component.cpp | 13 ++- 7 files changed, 392 insertions(+), 70 deletions(-) create mode 100644 decoder/include/c_api/ocsd_c_api_cust_fact.h create mode 100644 decoder/include/c_api/ocsd_c_api_cust_impl.h
diff --git a/decoder/include/c_api/ocsd_c_api_cust_fact.h b/decoder/include/c_api/ocsd_c_api_cust_fact.h new file mode 100644 index 0000000..f9e6a95 --- /dev/null +++ b/decoder/include/c_api/ocsd_c_api_cust_fact.h @@ -0,0 +1,54 @@ +/* +* \file ocsd_c_api_cust_fact.h +* \brief OpenCSD : Custom decoder factory API functions +* +* \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. +*/ + +/* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef ARM_OCSD_C_API_CUST_FACT_H_INCLUDED +#define ARM_OCSD_C_API_CUST_FACT_H_INCLUDED + +#include "ocsd_c_api_types.h" +#include "ocsd_c_api_custom.h" + +/* Declarations for the functions implemented in the custom decoder factory. */ + +/** Required function to create a decoder instance - fills in the decoder struct supplied. */ +ocsd_err_t CreateCustomDecoder(const int create_flags, const void *decoder_cfg, ocsd_extern_dcd_inst_t *p_decoder_inst); + +/** Required Function to destroy a decoder instance - indicated by decoder handle */ +ocsd_err_t DestroyCustomDecoder(const void *decoder_handle); + +/** Required Function to extract the CoreSight Trace ID from the configuration structure */ +ocsd_err_t GetCSIDFromConfig(const void *decoder_cfg, unsigned char *p_csid); + +/** Optional Function to convert a protocol specific trace packet to human readable string */ +ocsd_err_t PacketToString(const void *trc_pkt, char *buffer, const int buflen); + +#endif /* ARM_OCSD_C_API_CUST_FACT_H_INCLUDED */ diff --git a/decoder/include/c_api/ocsd_c_api_cust_impl.h b/decoder/include/c_api/ocsd_c_api_cust_impl.h new file mode 100644 index 0000000..084610f --- /dev/null +++ b/decoder/include/c_api/ocsd_c_api_cust_impl.h @@ -0,0 +1,133 @@ +/* +* \file ocsd_c_api_cust_impl.h +* \brief OpenCSD : Custom decoder implementation common API definitions +* +* \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. +*/ + +/* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef ARM_OCSD_C_API_CUST_IMPL_H_INCLUDED +#define ARM_OCSD_C_API_CUST_IMPL_H_INCLUDED + +#include "c_api/ocsd_c_api_types.h" +#include "c_api/ocsd_c_api_custom.h" + +/* inline functions to call the various CB functionality */ + +inline ocsd_datapath_resp_t lib_cb_GenElemOp(const ocsd_extern_dcd_cb_fns *callbacks, + const ocsd_trc_index_t index_sop, + const uint8_t trc_chan_id, + const ocsd_generic_trace_elem *elem) +{ + if (callbacks->fn_gen_elem_out) + return callbacks->fn_gen_elem_out(callbacks->lib_context, index_sop, trc_chan_id, elem); + return OCSD_RESP_FATAL_NOT_INIT; +} + +inline void lib_cb_LogError(const ocsd_extern_dcd_cb_fns *callbacks, + const ocsd_err_severity_t filter_level, + const ocsd_err_t code, + const ocsd_trc_index_t idx, + const uint8_t chan_id, + const char *pMsg) +{ + if (callbacks->fn_log_error) + callbacks->fn_log_error(callbacks->lib_context, filter_level, code, idx, chan_id, pMsg); +} + +inline void lib_cb_LogMsg(const ocsd_extern_dcd_cb_fns *callbacks, + const ocsd_err_severity_t filter_level, + const char *pMsg) +{ + if (callbacks->fn_log_msg) + callbacks->fn_log_msg(callbacks->lib_context, filter_level, pMsg); +} + +inline ocsd_err_t lib_cb_DecodeArmInst(const ocsd_extern_dcd_cb_fns *callbacks, + ocsd_instr_info *instr_info) +{ + if (callbacks->fn_arm_instruction_decode) + return callbacks->fn_arm_instruction_decode(callbacks->lib_context, instr_info); + return OCSD_ERR_NOT_INIT; +} + +inline ocsd_err_t lib_cb_MemAccess(const ocsd_extern_dcd_cb_fns *callbacks, + const ocsd_vaddr_t address, + const uint8_t cs_trace_id, + const ocsd_mem_space_acc_t mem_space, + uint32_t *num_bytes, + uint8_t *p_buffer) +{ + if (callbacks->fn_memory_access) + return callbacks->fn_memory_access(callbacks->lib_context, address, cs_trace_id, mem_space, num_bytes, p_buffer); + return OCSD_ERR_NOT_INIT; +} + +inline void lib_cb_PktMon(const ocsd_extern_dcd_cb_fns *callbacks, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt, + const uint32_t size, + const uint8_t *p_data) +{ + if (callbacks->packetCBFlags & OCSD_CUST_DCD_PKT_CB_USE_MON) + { + if (callbacks->fn_packet_mon) + callbacks->fn_packet_mon(callbacks->lib_context, op, index_sop, pkt, size, p_data); + } +} + +inline int lib_cb_usePktMon(const ocsd_extern_dcd_cb_fns *callbacks) +{ + return (callbacks->packetCBFlags & OCSD_CUST_DCD_PKT_CB_USE_MON); +} + + +/* callback function to connect to the packet sink interface, on the main decode +data path - used if decoder created as packet processor only */ +inline ocsd_datapath_resp_t lib_cb_PktDataSink(const ocsd_extern_dcd_cb_fns *callbacks, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt) +{ + if (callbacks->packetCBFlags & OCSD_CUST_DCD_PKT_CB_USE_SINK) + { + if (callbacks->fn_packet_data_sink) + return callbacks->fn_packet_data_sink(callbacks->lib_context, op, index_sop, pkt); + else + return OCSD_RESP_FATAL_NOT_INIT; + } + return OCSD_RESP_CONT; +} + +inline int lib_cb_usePktSink(const ocsd_extern_dcd_cb_fns *callbacks) +{ + return (callbacks->packetCBFlags & OCSD_CUST_DCD_PKT_CB_USE_SINK); +} + +#endif /* ARM_OCSD_C_API_CUST_IMPL_H_INCLUDED */ diff --git a/decoder/include/c_api/ocsd_c_api_custom.h b/decoder/include/c_api/ocsd_c_api_custom.h index 607e023..0594acd 100644 --- a/decoder/include/c_api/ocsd_c_api_custom.h +++ b/decoder/include/c_api/ocsd_c_api_custom.h @@ -1,6 +1,6 @@ /* * \file ocsd_c_api_custom.h - * \brief Reference CoreSight Trace Decoder : + * \brief OpenCSD : Custom decoder interface types and structures * * \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. */ @@ -46,74 +46,77 @@ typedef ocsd_datapath_resp_t (* fnTraceDataIn)( const void *decoder_handle, const uint8_t *pDataBlock, uint32_t *numBytesProcessed);
+/* function to update the in-use flags for the packet sinks - must be implemented in the decoder */ +typedef void (* fnUpdatePktMonFlags)(const void *decoder_handle, const int flags);
-/* callback and registration function to connect a generic element output point */ -typedef ocsd_datapath_resp_t (* fnGenElemOpCB)( const void *cb_context, + +/* callback function to connect into the generic element output point */ +typedef ocsd_datapath_resp_t (* fnGenElemOpCB)( const void *lib_context, const ocsd_trc_index_t index_sop, const uint8_t trc_chan_id, const ocsd_generic_trace_elem *elem); -typedef ocsd_err_t (* fnRegisterGenElemOpCB)(const void *decoder_handle, const void *cb_context, const fnGenElemOpCB pFnGenElemOut);
-/* callback and registration function to connect into the library error logging mechanism */ -typedef void (* fnLogErrorCB)(const void *cb_context, const ocsd_err_severity_t filter_level, const ocsd_err_t code, const ocsd_trc_index_t idx, const uint8_t chan_id, const char *pMsg); -typedef void (* fnLogMsgCB)(const void *cb_context, const ocsd_err_severity_t filter_level, const char *msg); -typedef void (* fnRegisterErrLogCB)(const void *decoder_handle, const void *cb_context, const fnLogErrorCB pFnErrLog, const fnLogMsgCB pFnMsgLog); +/* callback functions to connect into the library error logging mechanism */ +typedef void (* fnLogErrorCB)(const void *lib_context, const ocsd_err_severity_t filter_level, const ocsd_err_t code, const ocsd_trc_index_t idx, const uint8_t chan_id, const char *pMsg); +typedef void (* fnLogMsgCB)(const void *lib_context, const ocsd_err_severity_t filter_level, const char *msg);
-/* callback and registration function to connect an ARM instruction decoder */ -typedef ocsd_err_t (* fnDecodeArmInstCB)(const void *cb_context, ocsd_instr_info *instr_info); -typedef ocsd_err_t (* fnRegisterDecodeArmInstCB)(const void *decoder_handle, const void *cb_context, const fnDecodeArmInstCB pFnDecodeArmInstr); +/* callback function to connect an ARM instruction decoder */ +typedef ocsd_err_t (* fnDecodeArmInstCB)(const void *lib_context, ocsd_instr_info *instr_info);
-/* callback and registration function to connect the memory accessor interface */ -typedef ocsd_err_t (* fnMemAccessCB)(const void *cb_context, +/* callback function to connect the memory accessor interface */ +typedef ocsd_err_t (* fnMemAccessCB)(const void *lib_context, const ocsd_vaddr_t address, const uint8_t cs_trace_id, const ocsd_mem_space_acc_t mem_space, uint32_t *num_bytes, uint8_t *p_buffer); -typedef ocsd_err_t (* fnRegisterMemAccessCB)(const void *decoder_handle, const void *cb_context, const fnMemAccessCB pFnmemAcc);
-/* callback and registration function to connect to the packet monitor interface of the packet processor */ -typedef void (* fnPktMonCB)( const void *cb_context, +/* callback function to connect to the packet monitor interface of the packet processor */ +typedef void (* fnPktMonCB)( const void *lib_context, const ocsd_datapath_op_t op, const ocsd_trc_index_t index_sop, const void *pkt, const uint32_t size, const uint8_t *p_data); -typedef ocsd_err_t (* fnRegisterPktMonCB)(const void *decoder_handle, const void *cb_context, fnPktMonCB pFnPktMon);
-/* callback and registration function to connect to the packet sink interface, on the main decode +/* callback function to connect to the packet sink interface, on the main decode data path - use if decoder created as packet processor only */ -typedef ocsd_datapath_resp_t (* fnPktDataSinkCB)( const ocsd_datapath_op_t op, +typedef ocsd_datapath_resp_t (* fnPktDataSinkCB)( const void *lib_context, + const ocsd_datapath_op_t op, const ocsd_trc_index_t index_sop, - const void *p_packet_in); -typedef ocsd_err_t (* fnRegisterPktDataSinkCB)(const void *decoder_handle, const void *cb_context, fnPktDataSinkCB pFnPktData); - -/** This structure is filled in by the ocsd_extern_dcd_fact_t creation function with the exception of the - library context value. */ + const void *pkt); + +/** an instance of this is owned by the decoder, filled in by the library - allows the CB fns in the library decode tree to be called. */ +typedef struct _ocsd_extern_dcd_cb_fns { + fnGenElemOpCB fn_gen_elem_out; + fnLogErrorCB fn_log_error; + fnLogMsgCB fn_log_msg; + fnDecodeArmInstCB fn_arm_instruction_decode; + fnMemAccessCB fn_memory_access; + fnPktMonCB fn_packet_mon; + fnPktDataSinkCB fn_packet_data_sink; + const void *lib_context; + int packetCBFlags; /**< Flags to indicate if the packet sink / packet monitor callbacks are in use. */ +} ocsd_extern_dcd_cb_fns; + +#define OCSD_CUST_DCD_PKT_CB_USE_MON 0x1 +#define OCSD_CUST_DCD_PKT_CB_USE_SINK 0x2 + +/** Owned by the library instance object, this structure is filled in by the ocsd_extern_dcd_fact_t createDecoder() function. */ typedef struct _ocsd_extern_dcd_inst { - /* Mandatory decoder functions - library initialisation will fail without these. */ - fnTraceDataIn fn_data_in; /**< raw trace data input function to decoder */ - - /* Optional decoder functions - set to 0 if the decoder class does not require / support this functionality */ - fnRegisterGenElemOpCB fn_reg_gen_out_cb; /**< connect callback to get the generic element output of the decoder */ - fnRegisterErrLogCB fn_reg_error_log_cb; /**< connect callbacks for error logging */ - fnRegisterDecodeArmInstCB fn_reg_instr_dcd_cb; /**< connect callback to decode an arm instruction */ - fnRegisterMemAccessCB fn_reg_mem_acc_cb; /**< connect callback to access trace memory images */ - fnRegisterPktMonCB fn_reg_pkt_mon_cb; /**< connect to the packet monitor of the packet processing stage */ - fnRegisterPktDataSinkCB fn_reg_pkt_sink_cb; /**< connect to packet sink on main datapath if decoder in packe processing mode only */ + /* Mandatory decoder call back functions - library initialisation will fail without these. */ + fnTraceDataIn fn_data_in; /**< raw trace data input function to decoder */ + fnUpdatePktMonFlags fn_update_pkt_mon; /**< update the packet monitor / sink usage flags */
/* Decoder instance data */ - void *decoder_handle; /**< Instance handle for the decoder */ - unsigned char cs_id; /**< CS ID of the trace stream this decoder should be attached to */ + void *decoder_handle; /**< Instance handle for the decoder - used by library to call the decoder CB functions */ char *p_decoder_name; /**< type name of the decoder - may be used in logging */ + uint8_t cs_id; /**< Coresight ID for the instance - extracted from the config on creation. */
- /* opaque library context value */ - void *library_context; /**< Context information for this decoder used by the library */ } ocsd_extern_dcd_inst_t;
- /** function to create a decoder instance - fills in the decoder struct supplied. */ -typedef ocsd_err_t (* fnCreateCustomDecoder)(const int create_flags, const void *decoder_cfg, ocsd_extern_dcd_inst_t *p_decoder_inst); +typedef ocsd_err_t (* fnCreateCustomDecoder)(const int create_flags, const void *decoder_cfg, const ocsd_extern_dcd_cb_fns *p_lib_callbacks, ocsd_extern_dcd_inst_t *p_decoder_inst); /** Function to destroy a decoder instance - indicated by decoder handle */ typedef ocsd_err_t (* fnDestroyCustomDecoder)(const void *decoder_handle); /** Function to extract the CoreSight Trace ID from the configuration structure */ @@ -121,7 +124,6 @@ typedef ocsd_err_t (* fnGetCSIDFromConfig)(const void *decoder_cfg, unsigned cha /** Function to convert a protocol specific trace packet to human readable string */ typedef ocsd_err_t (* fnPacketToString)(const void *trc_pkt, char *buffer, const int buflen);
- /** set of functions and callbacks to create an extern custom decoder in the library via the C API interface. This structure is registered with the library by name and then decoders of the type can be created on the decode tree. diff --git a/decoder/include/common/trc_component.h b/decoder/include/common/trc_component.h index 49ad265..b786e96 100644 --- a/decoder/include/common/trc_component.h +++ b/decoder/include/common/trc_component.h @@ -114,6 +114,7 @@ protected: friend class errLogAttachMonitor;
void LogError(const ocsdError &Error); + void LogMessage(const ocsd_err_severity_t filter_level, const std::string &msg); const ocsd_err_severity_t getErrorLogLevel() const { return m_errVerbosity; }; const bool isLoggingErrorLevel(const ocsd_err_severity_t level) const { return level <= m_errVerbosity; }; void updateErrorLogLevel(); diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp index 36db747..283fad2 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp @@ -109,17 +109,41 @@ ocsd_err_t CustomDcdMngrWrapper::createDecoder(const int create_flags, const int if(m_dcd_fact.protocol_id == OCSD_PROTOCOL_END) return OCSD_ERR_NOT_INIT;
- ocsd_extern_dcd_inst_t dcd_inst; + CustomDecoderWrapper *pComp = new (std::nothrow) CustomDecoderWrapper(); + *ppComponent = pComp; + if (pComp == 0) + return OCSD_ERR_MEM; + + ocsd_extern_dcd_cb_fns lib_callbacks; + CustomDecoderWrapper::SetCallbacks(lib_callbacks); + lib_callbacks.lib_context = pComp; + + + ocsd_extern_dcd_inst_t *pDecodeInst = pComp->getDecoderInstInfo(); + err = m_dcd_fact.createDecoder( create_flags, - ((CustomConfigWrapper *)p_config)->getConfig(), - &dcd_inst); - if(err == OCSD_OK) + ((CustomConfigWrapper *)p_config)->getConfig(), + &lib_callbacks, + pDecodeInst); + + if (err == OCSD_OK) { - CustomDecoderWrapper *pComp = new (std::nothrow) CustomDecoderWrapper(dcd_inst,dcd_inst.p_decoder_name,dcd_inst.cs_id); - *ppComponent = pComp; - if(pComp == 0) - err = OCSD_ERR_MEM; + // validate the decoder + if ((pDecodeInst->fn_data_in == 0) || + (pDecodeInst->fn_update_pkt_mon == 0) || + (pDecodeInst->cs_id == 0) || + (pDecodeInst->decoder_handle == 0) || + (pDecodeInst->p_decoder_name == 0) + ) + { + err = OCSD_ERR_INVALID_PARAM_VAL; + } } + + if (err != OCSD_OK) + delete pComp; + else + pComp->updateNameFromDcdInst(); return err; }
@@ -128,6 +152,7 @@ ocsd_err_t CustomDcdMngrWrapper::destroyDecoder(TraceComponent *pComponent) CustomDecoderWrapper *pCustWrap = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(m_dcd_fact.protocol_id != OCSD_PROTOCOL_END) m_dcd_fact.destroyDecoder(pCustWrap->getDecoderInstInfo()->decoder_handle); + delete pCustWrap; return OCSD_OK; }
@@ -171,8 +196,10 @@ ocsd_err_t CustomDcdMngrWrapper::getDataInputI(TraceComponent *pComponent, ITrcD ocsd_err_t CustomDcdMngrWrapper::attachErrorLogger(TraceComponent *pComponent, ITraceErrorLog *pIErrorLog) { CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); - if(pDecoder == 0) + if (pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; + pDecoder->getErrorLogAttachPt()->replace_first(pIErrorLog); + return OCSD_OK; }
// full decoder @@ -181,7 +208,7 @@ ocsd_err_t CustomDcdMngrWrapper::attachInstrDecoder(TraceComponent *pComponent, CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; - + pDecoder->attachInstrDecI(pIInstrDec); return OCSD_OK; }
@@ -190,6 +217,8 @@ ocsd_err_t CustomDcdMngrWrapper::attachMemAccessor(TraceComponent *pComponent, I CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; + pDecoder->attchMemAccI(pMemAccessor); + return OCSD_OK; }
ocsd_err_t CustomDcdMngrWrapper::attachOutputSink(TraceComponent *pComponent, ITrcGenElemIn *pOutSink) @@ -197,6 +226,8 @@ ocsd_err_t CustomDcdMngrWrapper::attachOutputSink(TraceComponent *pComponent, IT CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; + pDecoder->attachGenElemI(pOutSink); + return OCSD_OK; }
// pkt processor only @@ -205,6 +236,8 @@ ocsd_err_t CustomDcdMngrWrapper::attachPktMonitor(TraceComponent *pComponent, IT CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; + // TBD: + return OCSD_OK; }
ocsd_err_t CustomDcdMngrWrapper::attachPktIndexer(TraceComponent *pComponent, ITrcTypedBase *pPktIndexer) @@ -218,6 +251,8 @@ ocsd_err_t CustomDcdMngrWrapper::attachPktSink(TraceComponent *pComponent, ITrcT CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; + // TBD: + return OCSD_OK; }
void CustomDcdMngrWrapper::pktToString(void *pkt, char *pStrBuffer, int bufSize) @@ -229,23 +264,59 @@ void CustomDcdMngrWrapper::pktToString(void *pkt, char *pStrBuffer, int bufSize)
/************************** Decoder instance wrapper **************************************/
-ocsd_datapath_resp_t GenElemOpCB( const void *cb_context, +/* callback functions */ +ocsd_datapath_resp_t GenElemOpCB( const void *lib_context, const ocsd_trc_index_t index_sop, const uint8_t trc_chan_id, const ocsd_generic_trace_elem *elem) { - if(cb_context && ((CustomDecoderWrapper *)cb_context)->m_pGenElemIn) - return ((CustomDecoderWrapper *)cb_context)->m_pGenElemIn->TraceElemIn(index_sop,trc_chan_id,*(OcsdTraceElement *)elem); + if (lib_context && ((CustomDecoderWrapper *)lib_context)->m_pGenElemIn) + return ((CustomDecoderWrapper *)lib_context)->m_pGenElemIn->TraceElemIn(index_sop,trc_chan_id,*(OcsdTraceElement *)elem); return OCSD_RESP_FATAL_NOT_INIT; }
-CustomDecoderWrapper::CustomDecoderWrapper( const ocsd_extern_dcd_inst_t &dcd_inst, - const std::string &name, - const int instID) - : TraceComponent(name,instID) +void LogErrorCB(const void *lib_context, const ocsd_err_severity_t filter_level, const ocsd_err_t code, const ocsd_trc_index_t idx, const uint8_t chan_id, const char *pMsg) +{ + if (lib_context) + { + if(pMsg) + ((CustomDecoderWrapper *)lib_context)->LogError(&ocsdError(filter_level, code, idx, chan_id, std::string(pMsg))); + else + ((CustomDecoderWrapper *)lib_context)->LogError(&ocsdError(filter_level, code, idx, chan_id)); + } +} + +void LogMsgCB(const void *lib_context, const ocsd_err_severity_t filter_level, const char *msg) +{ + if (lib_context && msg) + ((CustomDecoderWrapper *)lib_context)->LogMessage(filter_level, std::string(msg)); +} + +ocsd_err_t DecodeArmInstCB(const void *lib_context, ocsd_instr_info *instr_info) +{ + if (lib_context && ((CustomDecoderWrapper *)lib_context)->m_pIInstrDec) + return ((CustomDecoderWrapper *)lib_context)->m_pIInstrDec->DecodeInstruction(instr_info); + return OCSD_ERR_ATTACH_INVALID_PARAM; +} + +ocsd_err_t MemAccessCB(const void *lib_context, + const ocsd_vaddr_t address, + const uint8_t cs_trace_id, + const ocsd_mem_space_acc_t mem_space, + uint32_t *num_bytes, + uint8_t *p_buffer) +{ + if (lib_context && ((CustomDecoderWrapper *)lib_context)->m_pMemAccessor) + return ((CustomDecoderWrapper *)lib_context)->m_pMemAccessor->ReadTargetMemory(address, cs_trace_id, mem_space, num_bytes, p_buffer); + return OCSD_ERR_INVALID_PARAM_VAL; +} + +/** decoder instance object */ +CustomDecoderWrapper::CustomDecoderWrapper() : TraceComponent("extern_wrapper"), + m_pGenElemIn(0), + m_pIInstrDec(0), + m_pMemAccessor(0) { - m_pGenElemIn = 0; - m_decoder_inst = dcd_inst; }
CustomDecoderWrapper::~CustomDecoderWrapper() @@ -268,4 +339,26 @@ ocsd_datapath_resp_t CustomDecoderWrapper::TraceDataIn( const ocsd_datapath_op_t return OCSD_RESP_FATAL_NOT_INIT; }
+void CustomDecoderWrapper::updateNameFromDcdInst() +{ + // create a unique component name from the decoder name + cs-id. + std::string name_combined = m_decoder_inst.p_decoder_name; + char num_buffer[32]; + sprintf(num_buffer, "_%04d", m_decoder_inst.cs_id); + name_combined += (std::string)num_buffer; + setComponentName(name_combined); +} + +void CustomDecoderWrapper::SetCallbacks(ocsd_extern_dcd_cb_fns & callbacks) +{ + callbacks.fn_arm_instruction_decode = DecodeArmInstCB; + callbacks.fn_gen_elem_out = GenElemOpCB; + callbacks.fn_log_error = LogErrorCB; + callbacks.fn_log_msg = LogMsgCB; + callbacks.fn_memory_access = MemAccessCB; + callbacks.fn_packet_data_sink = 0; + callbacks.fn_packet_mon = 0; +} + + /* End of File ocsd_c_api_custom_obj.cpp */ diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.h b/decoder/source/c_api/ocsd_c_api_custom_obj.h index ec8cc03..27b19f7 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.h +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.h @@ -99,9 +99,9 @@ private: class CustomDecoderWrapper : public TraceComponent, public ITrcDataIn { public: - CustomDecoderWrapper(const ocsd_extern_dcd_inst_t &dcd_inst, const std::string &name, const int instID); + CustomDecoderWrapper(); virtual ~CustomDecoderWrapper(); - const ocsd_extern_dcd_inst_t *getDecoderInstInfo() const { return &m_decoder_inst; } + ocsd_extern_dcd_inst_t *getDecoderInstInfo() { return &m_decoder_inst; }
virtual ocsd_datapath_resp_t TraceDataIn( const ocsd_datapath_op_t op, const ocsd_trc_index_t index, @@ -109,20 +109,48 @@ public: const uint8_t *pDataBlock, uint32_t *numBytesProcessed);
+ void attachGenElemI(ITrcGenElemIn *pIF) { m_pGenElemIn = pIF; }; + void attachInstrDecI(IInstrDecode *pIF) { m_pIInstrDec = pIF; }; + void attchMemAccI(ITargetMemAccess *pIF) { m_pMemAccessor = pIF; }; + + void updateNameFromDcdInst(); + + static void SetCallbacks(ocsd_extern_dcd_cb_fns &callbacks); + +private: // declare the callback functions as friend functions. - friend ocsd_datapath_resp_t GenElemOpCB( const void *cb_context, + friend ocsd_datapath_resp_t GenElemOpCB( const void *lib_context, const ocsd_trc_index_t index_sop, const uint8_t trc_chan_id, const ocsd_generic_trace_elem *elem);
-private: - ITrcGenElemIn *m_pGenElemIn; //!< generic element sink interface - output from decdoer. - ITraceErrorLog *m_pErrorLog; //!< error log interface - IInstrDecode *m_pIInstrDec; //!< arm instruction decode interface. - ITargetMemAccess *m_pMemAccessor; + friend void LogErrorCB( const void *lib_context, + const ocsd_err_severity_t filter_level, + const ocsd_err_t code, + const ocsd_trc_index_t idx, + const uint8_t chan_id, + const char *pMsg); + + friend void LogMsgCB(const void *lib_context, + const ocsd_err_severity_t filter_level, + const char *msg); + + friend ocsd_err_t DecodeArmInstCB(const void *lib_context, ocsd_instr_info *instr_info); + + friend ocsd_err_t MemAccessCB(const void *lib_context, + const ocsd_vaddr_t address, + const uint8_t cs_trace_id, + const ocsd_mem_space_acc_t mem_space, + uint32_t *num_bytes, + uint8_t *p_buffer);
private: - ocsd_extern_dcd_inst_t m_decoder_inst; + ITrcGenElemIn *m_pGenElemIn; //!< generic element sink interface - output from decoder fed to common sink. + IInstrDecode *m_pIInstrDec; //!< arm instruction decode interface - decoder may want to use this. + ITargetMemAccess *m_pMemAccessor; //!< system memory accessor insterface - decoder may want to use this. + + ocsd_extern_dcd_inst_t m_decoder_inst; + };
/**** Decoder configuration wrapper - implements CSConfig base class interface ***/ diff --git a/decoder/source/trc_component.cpp b/decoder/source/trc_component.cpp index 3c201f8..47200a1 100644 --- a/decoder/source/trc_component.cpp +++ b/decoder/source/trc_component.cpp @@ -101,6 +101,18 @@ void TraceComponent::LogError(const ocsdError &Error) } }
+void TraceComponent::LogMessage(const ocsd_err_severity_t filter_level, const std::string &msg) +{ + if ((m_errLogHandle != OCSD_INVALID_HANDLE) && + isLoggingErrorLevel(filter_level)) + { + // ensure we have not disabled the attachPt + if (m_error_logger.first()) + m_error_logger.first()->LogMessage(this->m_errLogHandle, filter_level, msg); + } + +} + void TraceComponent::do_attach_notify(const int num_attached) { if(num_attached) @@ -134,5 +146,4 @@ ocsd_err_t TraceComponent::setComponentOpMode(uint32_t op_flags) return OCSD_OK; }
- /* End of File trc_component.cpp */
Adds in a "fake" decoder - a simple made up byte processor that will exercise the external C-API decoder infrastructure.
Attaches to any CS byte stream from the snapshot tests and will split into a simple made up protocol, generating protocol packets and generic packets per a real decoder. --- .../c_api_echo_test/ext_dcd_echo_test.c | 103 ++++++++++++++++++++ .../c_api_echo_test/ext_dcd_echo_test.h | 78 ++++++++++++++++ .../c_api_echo_test/ext_dcd_echo_test_fact.c | 104 +++++++++++++++++++++ .../c_api_echo_test/ext_dcd_echo_test_fact.h | 48 ++++++++++ 4 files changed, 333 insertions(+) create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h
diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c new file mode 100644 index 0000000..e05e7d2 --- /dev/null +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c @@ -0,0 +1,103 @@ +/* +* \file ext_dcd_echo_test_fact.c +* \brief OpenCSD : Echo test custom decoder factory +* +* \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. +*/ + +/* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "c_api/ocsd_c_api_types.h" +#include "ext_dcd_echo_test_fact.h" +#include "ext_dcd_echo_test.h" + +/** The name of the decoder */ +#define DECODER_NAME "ECHO_TEST" + +/** Declare the trace data input function for the decoder - passed to library as call-back. */ +static ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed); + +/** Allow library to update the packet monitor / sink in use flags to allow decoder to call CB as appropriate.*/ +static void echo_dcd_update_mon_flags(const void *decoder_handle, const int flags); + +/** init decoder on creation, along with library instance structure */ +void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_inst, const echo_dcd_cfg_t *p_config, const ocsd_extern_dcd_cb_fns *p_lib_callbacks) +{ + // initialise the decoder instance. + + // zero out the structure + memset(decoder, 0, sizeof(echo_decoder_t)); + + memcpy(&(decoder->reg_config), p_config, sizeof(echo_dcd_cfg_t)); // copy in the config structure. + memcpy(&(decoder->lib_fns), p_lib_callbacks, sizeof(p_lib_callbacks)); // copy in the the library callbacks. + + + // fill out the info to pass back to the library. + + // set up the decoder handle, name and CS Trace ID + p_decoder_inst->decoder_handle = decoder; + p_decoder_inst->p_decoder_name = DECODER_NAME; + p_decoder_inst->cs_id = p_config->cs_id; + + // set up the data input callback + p_decoder_inst->fn_data_in = echo_dcd_trace_data_in; + p_decoder_inst->fn_update_pkt_mon = echo_dcd_update_mon_flags; +} + +void echo_dcd_pkt_tostr(echo_dcd_pkt_t *pkt, char *buffer, const int buflen) +{ + snprintf(buffer, buflen, "ECHOTP[0x%02X] (0x%08X) \n", pkt->header, pkt->data); +} + +void echo_dcd_update_mon_flags(const void *decoder_handle, const int flags) +{ + ((echo_decoder_t *)decoder_handle)->lib_fns.packetCBFlags = flags; +} + +/**** Main decoder implementation ****/ + +ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + + return resp; +} diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h new file mode 100644 index 0000000..20453b5 --- /dev/null +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h @@ -0,0 +1,78 @@ +/* +* \file ext_dcd_echo_test_fact.h +* \brief OpenCSD : Echo test custom decoder +* +* \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. +*/ + +/* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef ARM_EXT_DCD_ECHO_TEST_H_INCLUDED +#define ARM_EXT_DCD_ECHO_TEST_H_INCLUDED + +#include <inttypes.h> +#include "c_api/ocsd_c_api_custom.h" + +/* + Echo test decoder designed to test the external decoder C - API infrastructure. + Echo decoders can be attached to any CS byte stream and will mainly echo the data + back with a simple "protocol" decoded - not based on real protocol. + + Will test callback infrastructure and provide an implemntation example for a real external decoder. + +*/ + +/*** decoder types ***/ + +typedef struct _echo_dcd_cfg { + unsigned char cs_id; +} echo_dcd_cfg_t; + +typedef struct _echo_dcd_pkt { + uint8_t header; + uint32_t data; +} echo_dcd_pkt_t; + +typedef struct _echo_decoder { + uint8_t data_in[5]; /** input buffer for current packet */ + int data_in_count; /** 5 bytes per packet*/ + echo_dcd_pkt_t curr_pkt; /** current packet */ + echo_dcd_cfg_t reg_config; /** Decoder config "registers" - in this case just the CSID value */ + ocsd_extern_dcd_cb_fns lib_fns; /** Library Callback functions */ + int createFlags; /** creation / operational options -> packet only / full decode */ +} echo_decoder_t; + +/*** internal decoder API ***/ + +/** decoder will contain packet printing logic */ +void echo_dcd_pkt_tostr(echo_dcd_pkt_t *pkt, char *buffer, const int buflen); + +/** init decoder on creation, along with library instance structure */ +void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_inst, const echo_dcd_cfg_t *p_config, const ocsd_extern_dcd_cb_fns *p_lib_callbacks); + +#endif /* ARM_EXT_DCD_ECHO_TEST_H_INCLUDED */ + diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c new file mode 100644 index 0000000..ecf4583 --- /dev/null +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c @@ -0,0 +1,104 @@ +/* +* \file ext_dcd_echo_test_fact.c +* \brief OpenCSD : Echo test custom decoder factory +* +* \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. +*/ + +/* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "ext_dcd_echo_test_fact.h" +#include "ext_dcd_echo_test.h" + +/** Decoder factory implementation. + Permits registration of the decoder with the library. + + Provides creation and deletion functionality for decoder instances. +*/ + +/*-- functions meeting the ext decode factory structure requirements */ + +/** Required function to create a decoder instance - fills in the decoder struct supplied. */ +static ocsd_err_t ext_echo_create(const int create_flags, const void *decoder_cfg, const ocsd_extern_dcd_cb_fns *p_lib_callbacks, ocsd_extern_dcd_inst_t *p_decoder_inst); + +/** Required Function to destroy a decoder instance - indicated by decoder handle */ +static ocsd_err_t ext_echo_destroy(const void *decoder_handle); + +/** Required Function to extract the CoreSight Trace ID from the configuration structure */ +static ocsd_err_t ext_echo_csid_from_cfg(const void *decoder_cfg, unsigned char *p_csid); + +/** Optional Function to convert a protocol specific trace packet to human readable string */ +static ocsd_err_t ext_echo_pkt_to_str(const void *trc_pkt, char *buffer, const int buflen); + +static ocsd_extern_dcd_fact_t echo_test_decoder_fact; + +ocsd_extern_dcd_fact_t *ext_echo_get_dcd_fact() +{ + echo_test_decoder_fact.createDecoder = ext_echo_create; + echo_test_decoder_fact.destroyDecoder = ext_echo_destroy; + echo_test_decoder_fact.csidFromConfig = ext_echo_csid_from_cfg; + echo_test_decoder_fact.pktToString = ext_echo_pkt_to_str; + echo_test_decoder_fact.protocol_id = OCSD_PROTOCOL_END; + return &echo_test_decoder_fact; +} + +ocsd_err_t ext_echo_create(const int create_flags, const void *decoder_cfg, const ocsd_extern_dcd_cb_fns *p_lib_callbacks, ocsd_extern_dcd_inst_t *p_decoder_inst) +{ + echo_decoder_t *decoder = NULL; + + if ((decoder = (echo_decoder_t *)malloc(sizeof(echo_decoder_t))) == NULL) + return OCSD_ERR_MEM; + + echo_dcd_init(decoder,p_decoder_inst,(echo_dcd_cfg_t *)decoder_cfg, p_lib_callbacks); + + decoder->createFlags = create_flags; + + return OCSD_OK; +} + +ocsd_err_t ext_echo_destroy(const void *decoder_handle) +{ + free((echo_decoder_t *)decoder_handle); + return OCSD_OK; +} + +ocsd_err_t ext_echo_csid_from_cfg(const void *decoder_cfg, unsigned char *p_csid) +{ + *p_csid = ((echo_dcd_cfg_t *)decoder_cfg)->cs_id; + return OCSD_OK; +} + +ocsd_err_t ext_echo_pkt_to_str(const void *trc_pkt, char *buffer, const int buflen) +{ + echo_dcd_pkt_tostr((echo_dcd_pkt_t*)trc_pkt, buffer, buflen); + return OCSD_OK; +} diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h new file mode 100644 index 0000000..b287c0c --- /dev/null +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h @@ -0,0 +1,48 @@ +/* +* \file ext_dcd_echo_test_fact.h +* \brief OpenCSD : Echo test custom decoder factory +* +* \copyright Copyright (c) 2016, ARM Limited. All Rights Reserved. +*/ + +/* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* 3. Neither the name of the copyright holder nor the names of its contributors +* may be used to endorse or promote products derived from this software without +* specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef ARM_EXT_DCD_ECHO_TEST_FACT_H_INCLUDED +#define ARM_EXT_DCD_ECHO_TEST_FACT_H_INCLUDED + +/* Creates echo test decoders to test the external decoder C-API infrastructure. + Echo decoders can be attached to any CS byte stream and will mainly echo the data + back with a simple "protocol" decoded - not based on real protocol. + */ + +#include "c_api/ocsd_c_api_custom.h" + +/* return an initialised structure with the factory functions */ +ocsd_extern_dcd_fact_t *ext_echo_get_dcd_fact(); + + +#endif /*ARM_EXT_DCD_ECHO_TEST_FACT_H_INCLUDED */
Adds callback handling for the packet monitor and packet processor sink interfaces for the custom decoder objects.
Adds "custom packet to string" function.
Adds C-API generic trace element initialisation function.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/include/c_api/ocsd_c_api_custom.h | 3 + decoder/include/c_api/opencsd_c_api.h | 6 ++ decoder/include/common/ocsd_lib_dcd_register.h | 5 ++ decoder/source/c_api/ocsd_c_api.cpp | 27 +++++++-- decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 82 ++++++++++++++++++++++---- decoder/source/c_api/ocsd_c_api_custom_obj.h | 25 ++++++-- decoder/source/c_api/ocsd_c_api_obj.h | 51 ++++++++++++++++ decoder/source/ocsd_lib_dcd_register.cpp | 16 +++-- 8 files changed, 193 insertions(+), 22 deletions(-)
diff --git a/decoder/include/c_api/ocsd_c_api_custom.h b/decoder/include/c_api/ocsd_c_api_custom.h index 0594acd..7d396ca 100644 --- a/decoder/include/c_api/ocsd_c_api_custom.h +++ b/decoder/include/c_api/ocsd_c_api_custom.h @@ -140,6 +140,9 @@ typedef struct _ocsd_extern_dcd_fact { ocsd_trace_protocol_t protocol_id; /**< protocol ID assigned during registration. */ } ocsd_extern_dcd_fact_t;
+ +ocsd_err_t ocsd_cust_protocol_to_str(const ocsd_trace_protocol_t pkt_protocol, const void *trc_pkt, char *buffer, const int buflen); + #endif // ARM_OCSD_C_API_CUSTOM_H_INCLUDED
/* End of File ocsd_c_api_custom.h */ diff --git a/decoder/include/c_api/opencsd_c_api.h b/decoder/include/c_api/opencsd_c_api.h index 66927a7..adb3609 100644 --- a/decoder/include/c_api/opencsd_c_api.h +++ b/decoder/include/c_api/opencsd_c_api.h @@ -378,6 +378,12 @@ OCSD_C_API ocsd_err_t ocsd_pkt_str(const ocsd_trace_protocol_t pkt_protocol, con */ OCSD_C_API ocsd_err_t ocsd_gen_elem_str(const ocsd_generic_trace_elem *p_pkt, char *buffer, const int buffer_size);
+ +/*! + * Init a generic element with type, clearing any flags etc. + */ +OCSD_C_API void ocsd_gen_elem_init(ocsd_generic_trace_elem *p_pkt, const ocsd_gen_trc_elem_t elem_type); + /** @}*/
/** register a custom decoder with the library */ diff --git a/decoder/include/common/ocsd_lib_dcd_register.h b/decoder/include/common/ocsd_lib_dcd_register.h index 15dfc03..efb2d21 100644 --- a/decoder/include/common/ocsd_lib_dcd_register.h +++ b/decoder/include/common/ocsd_lib_dcd_register.h @@ -79,6 +79,11 @@ private:
std::map<const ocsd_trace_protocol_t, IDecoderMngr *> m_typed_decoder_mngrs; //!< map linking decoder managers to protocol type ID
+ // cache last found by type to speed up repeated quries on same object. + IDecoderMngr *m_pLastTypedDecoderMngr; //!< last manager we found by type + + + // singleton pattern - need just one of these in the library - ensure all default constructors are private. OcsdLibDcdRegister(); OcsdLibDcdRegister(OcsdLibDcdRegister const &) {}; diff --git a/decoder/source/c_api/ocsd_c_api.cpp b/decoder/source/c_api/ocsd_c_api.cpp index dbb7049..da3e557 100644 --- a/decoder/source/c_api/ocsd_c_api.cpp +++ b/decoder/source/c_api/ocsd_c_api.cpp @@ -304,7 +304,10 @@ OCSD_C_API ocsd_err_t ocsd_pkt_str(const ocsd_trace_protocol_t pkt_protocol, con break;
default: - err = OCSD_ERR_NO_PROTOCOL; + if ((pkt_protocol >= OCSD_PROTOCOL_CUSTOM_0) && (pkt_protocol < OCSD_PROTOCOL_END)) + err = ocsd_cust_protocol_to_str(pkt_protocol, p_pkt, buffer, buffer_size); + else + err = OCSD_ERR_NO_PROTOCOL; break; }
@@ -331,7 +334,6 @@ OCSD_C_API ocsd_err_t ocsd_gen_elem_str(const ocsd_generic_trace_elem *p_pkt, ch return err; }
- /*** Decode tree -- memory accessor control */
OCSD_C_API ocsd_err_t ocsd_dt_add_binfile_mem_acc(const dcd_tree_handle_t handle, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const char *filepath) @@ -397,6 +399,13 @@ OCSD_C_API void ocsd_tl_log_mapped_mem_ranges(const dcd_tree_handle_t handle) } }
+OCSD_C_API void ocsd_gen_elem_init(ocsd_generic_trace_elem *p_pkt, const ocsd_gen_trc_elem_t elem_type) +{ + p_pkt->elem_type = elem_type; + p_pkt->flag_bits = 0; + p_pkt->ptr_extended_data = 0; +} + /*******************************************************************************/ /* C API local fns */ /*******************************************************************************/ @@ -424,7 +433,12 @@ static ocsd_err_t ocsd_create_pkt_sink_cb(ocsd_trace_protocol_t protocol, FnDef break;
default: - err = OCSD_ERR_NO_PROTOCOL; + if ((protocol >= OCSD_PROTOCOL_CUSTOM_0) && (protocol < OCSD_PROTOCOL_END)) + { + *ppCBObj = new (std::nothrow) PktCBObj<void>(pPktInFn, p_context); + } + else + err = OCSD_ERR_NO_PROTOCOL; break; }
@@ -458,7 +472,12 @@ static ocsd_err_t ocsd_create_pkt_mon_cb(ocsd_trace_protocol_t protocol, FnDefPk break;
default: - err = OCSD_ERR_NO_PROTOCOL; + if ((protocol >= OCSD_PROTOCOL_CUSTOM_0) && (protocol < OCSD_PROTOCOL_END)) + { + *ppCBObj = new (std::nothrow) PktMonCBObj<void>(pPktInFn, p_context); + } + else + err = OCSD_ERR_NO_PROTOCOL; break; }
diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp index 283fad2..a8d5aea 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp @@ -88,6 +88,21 @@ OCSD_C_API ocsd_err_t ocsd_deregister_decoders() return OCSD_OK; }
+ + +ocsd_err_t ocsd_cust_protocol_to_str(const ocsd_trace_protocol_t pkt_protocol, const void *trc_pkt, char *buffer, const int buflen) +{ + OcsdLibDcdRegister *pRegister = OcsdLibDcdRegister::getDecoderRegister(); + IDecoderMngr *p_mngr = 0; + if (pRegister->getDecoderMngrByType(pkt_protocol, &p_mngr) == OCSD_OK) + { + CustomDcdMngrWrapper *pWrapper = static_cast<CustomDcdMngrWrapper *>(p_mngr); + pWrapper->pktToString(trc_pkt, buffer, buflen); + return OCSD_OK; + } + return OCSD_ERR_NO_PROTOCOL; +} + /***************** Decode Manager Wrapper *****************************/
CustomDcdMngrWrapper::CustomDcdMngrWrapper() @@ -217,7 +232,7 @@ ocsd_err_t CustomDcdMngrWrapper::attachMemAccessor(TraceComponent *pComponent, I CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; - pDecoder->attchMemAccI(pMemAccessor); + pDecoder->attachMemAccI(pMemAccessor); return OCSD_OK; }
@@ -236,7 +251,14 @@ ocsd_err_t CustomDcdMngrWrapper::attachPktMonitor(TraceComponent *pComponent, IT CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; - // TBD: + IPktRawDataMon<void> *pIF = 0; + if (pPktRawDataMon) + { + pIF = dynamic_cast<IPktRawDataMon<void> *>(pPktRawDataMon); + if (!pIF) + return OCSD_ERR_INVALID_PARAM_TYPE; + } + pDecoder->attachPtkMonI(pIF); return OCSD_OK; }
@@ -255,13 +277,14 @@ ocsd_err_t CustomDcdMngrWrapper::attachPktSink(TraceComponent *pComponent, ITrcT return OCSD_OK; }
-void CustomDcdMngrWrapper::pktToString(void *pkt, char *pStrBuffer, int bufSize) +void CustomDcdMngrWrapper::pktToString(const void *pkt, char *pStrBuffer, int bufSize) { - if(m_dcd_fact.pktToString) - m_dcd_fact.pktToString(pkt,pStrBuffer,bufSize); + if (m_dcd_fact.pktToString) + m_dcd_fact.pktToString(pkt, pStrBuffer, bufSize); + else + snprintf(pStrBuffer, bufSize, "CUSTOM_PKT[]: print unsupported; protocol(%d).",m_dcd_fact.protocol_id); }
- /************************** Decoder instance wrapper **************************************/
/* callback functions */ @@ -311,11 +334,37 @@ ocsd_err_t MemAccessCB(const void *lib_context, return OCSD_ERR_INVALID_PARAM_VAL; }
+void PktMonCB(const void *lib_context, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt, + const uint32_t size, + const uint8_t *p_data) +{ + if (lib_context && ((CustomDecoderWrapper *)lib_context)->m_pPktMon) + ((CustomDecoderWrapper *)lib_context)->m_pPktMon->RawPacketDataMon(op, index_sop, pkt, size, p_data); +} + +ocsd_datapath_resp_t PktDataSinkCB(const void *lib_context, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + if (lib_context && ((CustomDecoderWrapper *)lib_context)->m_pPktIn) + resp = ((CustomDecoderWrapper *)lib_context)->m_pPktIn->PacketDataIn(op, index_sop, pkt); + return resp; +} + + + /** decoder instance object */ CustomDecoderWrapper::CustomDecoderWrapper() : TraceComponent("extern_wrapper"), m_pGenElemIn(0), m_pIInstrDec(0), - m_pMemAccessor(0) + m_pMemAccessor(0), + m_pPktMon(0), + m_pPktIn(0) { }
@@ -339,6 +388,20 @@ ocsd_datapath_resp_t CustomDecoderWrapper::TraceDataIn( const ocsd_datapath_op_t return OCSD_RESP_FATAL_NOT_INIT; }
+void CustomDecoderWrapper::attachPtkMonI(IPktRawDataMon<void>* pIF) +{ + m_pPktMon = pIF; + int flags = (m_pPktMon ? OCSD_CUST_DCD_PKT_CB_USE_MON : 0) | (m_pPktIn ? OCSD_CUST_DCD_PKT_CB_USE_SINK : 0); + m_decoder_inst.fn_update_pkt_mon(m_decoder_inst.decoder_handle, flags); +} + +void CustomDecoderWrapper::attachPtkSinkI(IPktDataIn<void>* pIF) +{ + m_pPktIn = pIF; + int flags = (m_pPktMon ? OCSD_CUST_DCD_PKT_CB_USE_MON : 0) | (m_pPktIn ? OCSD_CUST_DCD_PKT_CB_USE_SINK : 0); + m_decoder_inst.fn_update_pkt_mon(m_decoder_inst.decoder_handle, flags); +} + void CustomDecoderWrapper::updateNameFromDcdInst() { // create a unique component name from the decoder name + cs-id. @@ -356,9 +419,8 @@ void CustomDecoderWrapper::SetCallbacks(ocsd_extern_dcd_cb_fns & callbacks) callbacks.fn_log_error = LogErrorCB; callbacks.fn_log_msg = LogMsgCB; callbacks.fn_memory_access = MemAccessCB; - callbacks.fn_packet_data_sink = 0; - callbacks.fn_packet_mon = 0; + callbacks.fn_packet_data_sink = PktDataSinkCB; + callbacks.fn_packet_mon = PktMonCB; }
- /* End of File ocsd_c_api_custom_obj.cpp */ diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.h b/decoder/source/c_api/ocsd_c_api_custom_obj.h index 27b19f7..25b212c 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.h +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.h @@ -88,7 +88,8 @@ public: // create configuration from data structure virtual ocsd_err_t createConfigFromDataStruct(CSConfig **pConfigBase, const void *pDataStruct);
- void pktToString(void *pkt, char *pStrBuffer, int bufSize); +// custom packet to string interface. + void pktToString(const void *pkt, char *pStrBuffer, int bufSize);
private:
@@ -111,7 +112,10 @@ public:
void attachGenElemI(ITrcGenElemIn *pIF) { m_pGenElemIn = pIF; }; void attachInstrDecI(IInstrDecode *pIF) { m_pIInstrDec = pIF; }; - void attchMemAccI(ITargetMemAccess *pIF) { m_pMemAccessor = pIF; }; + void attachMemAccI(ITargetMemAccess *pIF) { m_pMemAccessor = pIF; }; + + void attachPtkMonI(IPktRawDataMon<void> *pIF); + void attachPtkSinkI(IPktDataIn<void> *pIF);
void updateNameFromDcdInst();
@@ -144,13 +148,26 @@ private: uint32_t *num_bytes, uint8_t *p_buffer);
+ friend void PktMonCB(const void *lib_context, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt, + const uint32_t size, + const uint8_t *p_data); + + friend ocsd_datapath_resp_t PktDataSinkCB(const void *lib_context, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *pkt); + private: ITrcGenElemIn *m_pGenElemIn; //!< generic element sink interface - output from decoder fed to common sink. IInstrDecode *m_pIInstrDec; //!< arm instruction decode interface - decoder may want to use this. ITargetMemAccess *m_pMemAccessor; //!< system memory accessor insterface - decoder may want to use this. + IPktRawDataMon<void> *m_pPktMon; //!< interface to packet monitor (full or packet only decode). + IPktDataIn<void> *m_pPktIn; //!< interface to packet sink (decode packets only).
- ocsd_extern_dcd_inst_t m_decoder_inst; - + ocsd_extern_dcd_inst_t m_decoder_inst; };
/**** Decoder configuration wrapper - implements CSConfig base class interface ***/ diff --git a/decoder/source/c_api/ocsd_c_api_obj.h b/decoder/source/c_api/ocsd_c_api_obj.h index e375784..617aa5c 100644 --- a/decoder/source/c_api/ocsd_c_api_obj.h +++ b/decoder/source/c_api/ocsd_c_api_obj.h @@ -63,6 +63,31 @@ private: const void *m_p_context; };
+// void specialisation for custom decoders that pass packets as const void * pointers +template<> +class PktCBObj<void> : public IPktDataIn<void> +{ +public: + PktCBObj(FnDefPktDataIn pCBFunc, const void *p_context) + { + m_c_api_cb_fn = pCBFunc; + m_p_context = p_context; + }; + + virtual ~PktCBObj() {}; + + virtual ocsd_datapath_resp_t PacketDataIn(const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *p_packet_in) + { + return m_c_api_cb_fn(m_p_context, op, index_sop, p_packet_in); + }; + +private: + FnDefPktDataIn m_c_api_cb_fn; + const void *m_p_context; +}; +
template<class TrcPkt> class PktMonCBObj : public IPktRawDataMon<TrcPkt> @@ -93,6 +118,32 @@ private: const void *m_p_context; };
+// void specialisation for custom decoders that pass packets as const void * pointers +template<> +class PktMonCBObj<void> : public IPktRawDataMon<void> +{ +public: + PktMonCBObj(FnDefPktDataMon pCBFunc, const void *p_context) + { + m_c_api_cb_fn = pCBFunc; + m_p_context = p_context; + }; + + virtual ~PktMonCBObj() {}; + virtual void RawPacketDataMon(const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *p_packet_in, + const uint32_t size, + const uint8_t *p_data) + { + m_c_api_cb_fn(m_p_context, op, index_sop, p_packet_in, size, p_data); + }; + +private: + FnDefPktDataMon m_c_api_cb_fn; + const void *m_p_context; +}; + #endif // ARM_OCSD_C_API_OBJ_H_INCLUDED
/* End of File ocsd_c_api_obj.h */ diff --git a/decoder/source/ocsd_lib_dcd_register.cpp b/decoder/source/ocsd_lib_dcd_register.cpp index bc562cc..650b532 100644 --- a/decoder/source/ocsd_lib_dcd_register.cpp +++ b/decoder/source/ocsd_lib_dcd_register.cpp @@ -80,12 +80,14 @@ void OcsdLibDcdRegister::releaseLastCustomProtocolID() OcsdLibDcdRegister::OcsdLibDcdRegister() { m_iter = m_decoder_mngrs.begin(); + m_pLastTypedDecoderMngr = 0; }
OcsdLibDcdRegister::~OcsdLibDcdRegister() { m_decoder_mngrs.clear(); m_typed_decoder_mngrs.clear(); + m_pLastTypedDecoderMngr = 0; }
@@ -166,10 +168,16 @@ const ocsd_err_t OcsdLibDcdRegister::getDecoderMngrByType(const ocsd_trace_proto if(!m_b_registeredBuiltins) return OCSD_ERR_MEM; } - std::map<const ocsd_trace_protocol_t, IDecoderMngr *>::const_iterator iter = m_typed_decoder_mngrs.find(decoderType); - if(iter != m_typed_decoder_mngrs.end()) - return OCSD_ERR_DCDREG_NAME_UNKNOWN; - *p_decoder_mngr = iter->second; + + if (m_pLastTypedDecoderMngr && (m_pLastTypedDecoderMngr->getProtocolType() == decoderType)) + *p_decoder_mngr = m_pLastTypedDecoderMngr; + else + { + std::map<const ocsd_trace_protocol_t, IDecoderMngr *>::const_iterator iter = m_typed_decoder_mngrs.find(decoderType); + if (iter != m_typed_decoder_mngrs.end()) + return OCSD_ERR_DCDREG_NAME_UNKNOWN; + *p_decoder_mngr = m_pLastTypedDecoderMngr = iter->second; + } return OCSD_OK; }
Implementation of echo_test decoder functionality.
Update to add error message if cannot find decoder by protocol type.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/include/ocsd_if_types.h | 1 + decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 13 +- decoder/source/ocsd_error.cpp | 1 + decoder/source/ocsd_lib_dcd_register.cpp | 4 +- .../c_api_echo_test/ext_dcd_echo_test.c | 230 ++++++++++++++++++++- .../c_api_echo_test/ext_dcd_echo_test.h | 27 ++- .../c_api_echo_test/ext_dcd_echo_test_fact.h | 2 +- 7 files changed, 262 insertions(+), 16 deletions(-)
diff --git a/decoder/include/ocsd_if_types.h b/decoder/include/ocsd_if_types.h index 776487a..15425e1 100644 --- a/decoder/include/ocsd_if_types.h +++ b/decoder/include/ocsd_if_types.h @@ -133,6 +133,7 @@ typedef enum _ocsd_err_t { /* decoder registration */ OCSD_ERR_DCDREG_NAME_REPEAT, /**< attempted to register a decoder with the same name as another one */ OCSD_ERR_DCDREG_NAME_UNKNOWN, /**< attempted to find a decoder with a name that is not known in the library */ + OCSD_ERR_DCDREG_TYPE_UNKNOWN, /**< attempted to find a decoder with a type that is not known in the library */ OCSD_ERR_DCDREG_TOOMANY, /**< attempted to register too many custom decoders */ /* decoder config */ OCSD_ERR_DCD_INTERFACE_UNUSED, /**< Attempt to connect or use and inteface not supported by this decoder. */ diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp index a8d5aea..64f1f24 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp @@ -132,8 +132,8 @@ ocsd_err_t CustomDcdMngrWrapper::createDecoder(const int create_flags, const int ocsd_extern_dcd_cb_fns lib_callbacks; CustomDecoderWrapper::SetCallbacks(lib_callbacks); lib_callbacks.lib_context = pComp; - - + lib_callbacks.packetCBFlags = 0; + ocsd_extern_dcd_inst_t *pDecodeInst = pComp->getDecoderInstInfo();
err = m_dcd_fact.createDecoder( create_flags, @@ -273,7 +273,14 @@ ocsd_err_t CustomDcdMngrWrapper::attachPktSink(TraceComponent *pComponent, ITrcT CustomDecoderWrapper *pDecoder = dynamic_cast<CustomDecoderWrapper *>(pComponent); if(pDecoder == 0) return OCSD_ERR_INVALID_PARAM_TYPE; - // TBD: + IPktDataIn<void> *pIF = 0; + if (pPktDataInSink) + { + pIF = dynamic_cast<IPktDataIn<void> *>(pPktDataInSink); + if(!pIF) + return OCSD_ERR_INVALID_PARAM_TYPE; + } + pDecoder->attachPtkSinkI(pIF); return OCSD_OK; }
diff --git a/decoder/source/ocsd_error.cpp b/decoder/source/ocsd_error.cpp index ca55c20..a731ae1 100644 --- a/decoder/source/ocsd_error.cpp +++ b/decoder/source/ocsd_error.cpp @@ -87,6 +87,7 @@ static const char *s_errorCodeDescs[][2] = { /* decoder registration */ {"OCSD_ERR_DCDREG_NAME_REPEAT","Attempted to register a decoder with the same name as another one."}, {"OCSD_ERR_DCDREG_NAME_UNKNOWN","Attempted to find a decoder with a name that is not known in the library."}, + {"OCSD_ERR_DCDREG_TYPE_UNKNOWN","Attempted to find a decoder with a type that is not known in the library."}, /* decoder config */ {"OCSD_ERR_DCD_INTERFACE_UNUSED","Attempt to connect or use and inteface not supported by this decoder."}, /* end marker*/ diff --git a/decoder/source/ocsd_lib_dcd_register.cpp b/decoder/source/ocsd_lib_dcd_register.cpp index 650b532..f52b8d0 100644 --- a/decoder/source/ocsd_lib_dcd_register.cpp +++ b/decoder/source/ocsd_lib_dcd_register.cpp @@ -174,8 +174,8 @@ const ocsd_err_t OcsdLibDcdRegister::getDecoderMngrByType(const ocsd_trace_proto else { std::map<const ocsd_trace_protocol_t, IDecoderMngr *>::const_iterator iter = m_typed_decoder_mngrs.find(decoderType); - if (iter != m_typed_decoder_mngrs.end()) - return OCSD_ERR_DCDREG_NAME_UNKNOWN; + if (iter == m_typed_decoder_mngrs.end()) + return OCSD_ERR_DCDREG_TYPE_UNKNOWN; *p_decoder_mngr = m_pLastTypedDecoderMngr = iter->second; } return OCSD_OK; diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c index e05e7d2..bcd41cd 100644 --- a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c @@ -36,13 +36,18 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> + +#include "c_api/opencsd_c_api.h" #include "c_api/ocsd_c_api_types.h" +#include "c_api/ocsd_c_api_cust_impl.h" + #include "ext_dcd_echo_test_fact.h" #include "ext_dcd_echo_test.h"
/** The name of the decoder */ #define DECODER_NAME "ECHO_TEST"
+/********* External callback fns passed to library *****/ /** Declare the trace data input function for the decoder - passed to library as call-back. */ static ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, const ocsd_datapath_op_t op, @@ -54,6 +59,25 @@ static ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, /** Allow library to update the packet monitor / sink in use flags to allow decoder to call CB as appropriate.*/ static void echo_dcd_update_mon_flags(const void *decoder_handle, const int flags);
+/********* Fns called by decoder creation factory *****/ +void echo_dcd_init(echo_decoder_t *decoder, + ocsd_extern_dcd_inst_t *p_decoder_inst, + const echo_dcd_cfg_t *p_config, + const ocsd_extern_dcd_cb_fns *p_lib_callbacks); + +void echo_dcd_pkt_tostr(echo_dcd_pkt_t *pkt, char *buffer, const int buflen); + +/********* Internal decoder functions *****/ +static void echo_dcd_reset(echo_decoder_t *decoder); +static ocsd_datapath_resp_t echo_dcd_process_data(echo_decoder_t *decoder, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed); + +static ocsd_datapath_resp_t send_gen_packet(echo_decoder_t *decoder); +static ocsd_datapath_resp_t analyse_packet(echo_decoder_t *decoder); + /** init decoder on creation, along with library instance structure */ void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_inst, const echo_dcd_cfg_t *p_config, const ocsd_extern_dcd_cb_fns *p_lib_callbacks) { @@ -63,8 +87,9 @@ void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_in memset(decoder, 0, sizeof(echo_decoder_t));
memcpy(&(decoder->reg_config), p_config, sizeof(echo_dcd_cfg_t)); // copy in the config structure. - memcpy(&(decoder->lib_fns), p_lib_callbacks, sizeof(p_lib_callbacks)); // copy in the the library callbacks. + memcpy(&(decoder->lib_fns), p_lib_callbacks, sizeof(ocsd_extern_dcd_cb_fns)); // copy in the the library callbacks.
+ echo_dcd_reset(decoder);
// fill out the info to pass back to the library.
@@ -76,6 +101,7 @@ void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_in // set up the data input callback p_decoder_inst->fn_data_in = echo_dcd_trace_data_in; p_decoder_inst->fn_update_pkt_mon = echo_dcd_update_mon_flags; + }
void echo_dcd_pkt_tostr(echo_dcd_pkt_t *pkt, char *buffer, const int buflen) @@ -83,21 +109,217 @@ void echo_dcd_pkt_tostr(echo_dcd_pkt_t *pkt, char *buffer, const int buflen) snprintf(buffer, buflen, "ECHOTP[0x%02X] (0x%08X) \n", pkt->header, pkt->data); }
+ +/**** Main decoder implementation ****/ + +ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index, + const uint32_t dataBlockSize, + const uint8_t *pDataBlock, + uint32_t *numBytesProcessed) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + echo_decoder_t *decoder = (echo_decoder_t *)decoder_handle; + + switch (op) + { + case OCSD_OP_DATA: + resp = echo_dcd_process_data(decoder, index, dataBlockSize, pDataBlock, numBytesProcessed); + break; + + case OCSD_OP_EOT: + if (decoder->data_in_count > 0) + lib_cb_LogError(&(decoder->lib_fns), OCSD_ERR_SEV_WARN, OCSD_ERR_PKT_INTERP_FAIL,index,decoder->reg_config.cs_id,"Incomplete packet at end of trace"); + ocsd_gen_elem_init(&(decoder->out_pkt), OCSD_GEN_TRC_ELEM_EO_TRACE); + resp = send_gen_packet(decoder); + break; + + case OCSD_OP_FLUSH: + /* This decoder never saves a list of incoming packets (which some real decoders may have to according to protocol). + Therefore there is nothing to flush */ + break; + + case OCSD_OP_RESET: + echo_dcd_reset(decoder); + break; + } + return resp; +} + void echo_dcd_update_mon_flags(const void *decoder_handle, const int flags) { ((echo_decoder_t *)decoder_handle)->lib_fns.packetCBFlags = flags; }
-/**** Main decoder implementation ****/ +void echo_dcd_reset(echo_decoder_t *decoder) +{ + decoder->curr_pkt.header = 0; + decoder->data_in_count = 0; + decoder->state = DCD_INIT; +}
-ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, - const ocsd_datapath_op_t op, +ocsd_datapath_resp_t echo_dcd_process_data(echo_decoder_t *decoder, const ocsd_trc_index_t index, const uint32_t dataBlockSize, const uint8_t *pDataBlock, uint32_t *numBytesProcessed) { ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + uint32_t bytesUsed = 0; + + while (OCSD_DATA_RESP_IS_CONT(resp) && (bytesUsed < dataBlockSize)) + { + switch (decoder->state) + { + + case DCD_INIT: + /* on initialisation / after reset output a not-synced indicator */ + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_NO_SYNC); + resp = send_gen_packet(decoder); + decoder->state = DCD_WAIT_SYNC; /* wait for the first sync point */ + break; + + case DCD_WAIT_SYNC: + /* In this 'protocol' sync will be a single 0x00 byte. + Some decoders may output "unsynced packets" if in packet processing only mode, or on the + packet monitor output if in use. We are not bothering here. */ + if (pDataBlock[bytesUsed] == 0x00) + decoder->state = DCD_PROC_PACKETS; + bytesUsed++; + break; + + case DCD_PROC_PACKETS: + /* collect our ECHO_DCD_PKT_SIZE byte packets into the data in buffer */ + if (decoder->data_in_count < ECHO_DCD_PKT_SIZE) + { + if (decoder->data_in_count == 0) + decoder->curr_pkt_idx = index + bytesUsed; /* record the correct start of packet index in the buffer. */ + decoder->data_in[decoder->data_in_count++] = pDataBlock[bytesUsed++]; + } + + /* if we have ECHO_DCD_PKT_SIZE bytes we have a packet */ + if (decoder->data_in_count == ECHO_DCD_PKT_SIZE) + { + resp = analyse_packet(decoder); + decoder->data_in_count = 0; /* done with the current packet */ + } + break; + } + } + *numBytesProcessed = bytesUsed; + return resp; +} + +ocsd_datapath_resp_t send_gen_packet(echo_decoder_t *decoder) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + /* Only output generic decode packets if we are in full decode mode. */ + if(decoder->createFlags & OCSD_CREATE_FLG_FULL_DECODER) + resp = lib_cb_GenElemOp(&decoder->lib_fns, decoder->curr_pkt_idx, decoder->reg_config.cs_id, &decoder->out_pkt); + return resp; +} + +ocsd_datapath_resp_t analyse_packet(echo_decoder_t * decoder) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + ocsd_extern_dcd_cb_fns *p_fns = &(decoder->lib_fns); + uint32_t num_mem_bytes = 4; + uint8_t mem_buffer[4]; + ocsd_instr_info instr_info; + ocsd_err_t err; + + /* create a packet from the data */ + decoder->curr_pkt.header = decoder->data_in[0]; + decoder->curr_pkt.data = *((uint32_t *)&decoder->data_in[1]); + + /* if the packet monitor callback is in use - output the newly created packet. */ + if (lib_cb_usePktMon(p_fns)) + lib_cb_PktMon(p_fns, OCSD_OP_DATA, decoder->curr_pkt_idx, (const void *)(&decoder->curr_pkt), ECHO_DCD_PKT_SIZE, decoder->data_in); + + /* if the packet sink is in use then we shouldn't be in full decoder mode.*/ + if (lib_cb_usePktSink(p_fns)) + lib_cb_PktDataSink(p_fns, OCSD_OP_DATA, decoder->curr_pkt_idx, (const void *)(&decoder->curr_pkt)); + else if (decoder->createFlags & OCSD_CREATE_FLG_FULL_DECODER) /* no packet sink so are we full decoder? */ + { + /* Full decode - generate generic output packets. + + A real decoder will sometimes require multiple input packets per output packet, or may generate multiple output + packets per single input packet. Here we stick at 1:1 for test simplicity. + + This code will also test the infrastructure callbacks to ensure that everything holds together correctly. + */ + + /* nominally 4 types of packet */ + switch (decoder->curr_pkt.header & 0x3) + { + case 0: + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_CUSTOM); /* full custom packet */ + decoder->out_pkt.extended_data = 1;/* mark the extended ptr in use */ + decoder->out_pkt.ptr_extended_data = decoder->data_in; /* the custom packet data in this protocol just the packet itself (hence 'echo')*/ + break; + + case 1: + /* custom decoders can re-use existing packet types if they follow the rules for those types. */ + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_INSTR_RANGE); + /* fake up an address range using the input data */ + decoder->out_pkt.st_addr = decoder->curr_pkt.data & 0xFFFFFFF0; + decoder->out_pkt.en_addr = decoder->curr_pkt.data + 0x10 + (((uint32_t)decoder->curr_pkt.header) << 2); + decoder->out_pkt.isa = ocsd_isa_custom; + decoder->out_pkt.last_instr_exec = (decoder->curr_pkt.header & 0x4) ? 1 : 0; + break; + + case 2: + /* test the memory access callback. */ + err = lib_cb_MemAccess(p_fns, decoder->curr_pkt.data & 0xFFFFFFF0, decoder->reg_config.cs_id, OCSD_MEM_SPACE_ANY, &num_mem_bytes, mem_buffer); + if (err != OCSD_OK) + lib_cb_LogError(p_fns, OCSD_ERR_SEV_ERROR, err, decoder->curr_pkt_idx, decoder->reg_config.cs_id, "Error accessing memory area\n."); + if (num_mem_bytes == 0) + { + /* unable to read the address... */ + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_ADDR_NACC); + decoder->out_pkt.st_addr = decoder->curr_pkt.data & 0xFFFFFFF0; + } + else + { + /* try something different */ + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_CYCLE_COUNT); + decoder->out_pkt.cycle_count = *((uint32_t *)mem_buffer); + decoder->out_pkt.has_cc = 1; + } + break;
+ case 3: + /* test the ARM instruction decode callback */ + instr_info.pe_type.arch = ARCH_V8; + instr_info.pe_type.profile = profile_CortexA; + instr_info.isa = ocsd_isa_aarch64; + instr_info.opcode = decoder->curr_pkt.data; + instr_info.instr_addr = decoder->curr_pkt.data & 0xFFFFF000; + instr_info.dsb_dmb_waypoints = 0; + + err = lib_cb_DecodeArmInst(p_fns, &instr_info); + if (err != OCSD_OK) + { + lib_cb_LogError(p_fns, OCSD_ERR_SEV_ERROR, err, decoder->curr_pkt_idx, decoder->reg_config.cs_id, "Error decoding instruction\n."); + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_CUSTOM); + decoder->out_pkt.has_ts = 1; + decoder->out_pkt.timestamp = decoder->curr_pkt.data; + } + else + { + ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_INSTR_RANGE); + /* fake up an address range using the input data */ + decoder->out_pkt.st_addr = decoder->curr_pkt.data & 0xFFFFFFF0; + decoder->out_pkt.en_addr = decoder->curr_pkt.data + 0x10 + (((uint32_t)decoder->curr_pkt.header) << 2); + decoder->out_pkt.isa = ocsd_isa_aarch64; + decoder->out_pkt.last_instr_exec = (decoder->curr_pkt.header & 0x4) ? 1 : 0; + decoder->out_pkt.last_i_type = instr_info.type; + decoder->out_pkt.last_i_subtype = instr_info.sub_type; + } + break; + } + resp = send_gen_packet(decoder); + } return resp; } diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h index 20453b5..974b1cf 100644 --- a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h @@ -57,15 +57,30 @@ typedef struct _echo_dcd_pkt { uint32_t data; } echo_dcd_pkt_t;
+typedef enum _echo_dcd_state { + DCD_INIT, + DCD_WAIT_SYNC, + DCD_PROC_PACKETS +} echo_dcd_stat_t; + +/** 'packet' size is 5 bytes - 1 header + 4 data. */ +#define ECHO_DCD_PKT_SIZE 5 + +/** main decoder structure */ typedef struct _echo_decoder { - uint8_t data_in[5]; /** input buffer for current packet */ - int data_in_count; /** 5 bytes per packet*/ - echo_dcd_pkt_t curr_pkt; /** current packet */ - echo_dcd_cfg_t reg_config; /** Decoder config "registers" - in this case just the CSID value */ - ocsd_extern_dcd_cb_fns lib_fns; /** Library Callback functions */ - int createFlags; /** creation / operational options -> packet only / full decode */ + uint8_t data_in[ECHO_DCD_PKT_SIZE]; /** input buffer for current incoming packet data bytes */ + int data_in_count; /** count up to the 5 bytes per packet to know when complete packet RX */ + echo_dcd_pkt_t curr_pkt; /** current packet */ + ocsd_trc_index_t curr_pkt_idx; /** buffer index for the current packet */ + echo_dcd_cfg_t reg_config; /** Decoder config "registers" - in this case just the CSID value */ + ocsd_extern_dcd_cb_fns lib_fns; /** Library Callback functions */ + int createFlags; /** creation / operational options -> packet only / full decode */ + echo_dcd_stat_t state; /** current state of the decoder. */ + ocsd_generic_trace_elem out_pkt; /** generic output packet */ } echo_decoder_t;
+ + /*** internal decoder API ***/
/** decoder will contain packet printing logic */ diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h index b287c0c..c4cc698 100644 --- a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h @@ -42,7 +42,7 @@ #include "c_api/ocsd_c_api_custom.h"
/* return an initialised structure with the factory functions */ -ocsd_extern_dcd_fact_t *ext_echo_get_dcd_fact(); +extern ocsd_extern_dcd_fact_t *ext_echo_get_dcd_fact();
#endif /*ARM_EXT_DCD_ECHO_TEST_FACT_H_INCLUDED */
Adds in new build files for VS2015 - compiler has C++11 support comparable to later GCC.
VS2010 deprecated - remove later.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/build/win-vs2015/opencsd.props | 20 + .../rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 329 +++++++++++++++ .../rctdl_c_api_lib.vcxproj.filters | 54 +++ .../ref_trace_decode_lib/ref_trace_decode_lib.sln | 147 +++++++ .../ref_trace_decode_lib.vcxproj | 440 ++++++++++++++++++++ .../ref_trace_decode_lib.vcxproj.filters | 449 +++++++++++++++++++++ .../c_api_pkt_print_test.vcxproj | 333 +++++++++++++++ .../c_api_pkt_print_test.vcxproj.filters | 22 + .../ext_dcd_echo_test/ext_dcd_echo_test.vcxproj | 148 +++++++ .../ext_dcd_echo_test.vcxproj.filters | 33 ++ .../simple_pkt_print_c_api.vcxproj | 333 +++++++++++++++ .../simple_pkt_print_c_api.vcxproj.filters | 22 + .../snapshot_parser_lib.vcxproj | 318 +++++++++++++++ .../snapshot_parser_lib.vcxproj.filters | 72 ++++ .../trc_pkt_lister/trc_pkt_lister.vcxproj | 306 ++++++++++++++ .../trc_pkt_lister/trc_pkt_lister.vcxproj.filters | 39 ++ .../c_api_echo_test/ext_dcd_echo_test.c | 148 ++++++- 17 files changed, 3202 insertions(+), 11 deletions(-) create mode 100644 decoder/build/win-vs2015/opencsd.props create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj create mode 100644 decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters
diff --git a/decoder/build/win-vs2015/opencsd.props b/decoder/build/win-vs2015/opencsd.props new file mode 100644 index 0000000..3b33ee9 --- /dev/null +++ b/decoder/build/win-vs2015/opencsd.props @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ImportGroup Label="PropertySheets" /> + <PropertyGroup Label="UserMacros"> + <LIB_BASE_NAME>cstraced</LIB_BASE_NAME> + <LIB_CAPI_NAME>cstraced_c_api</LIB_CAPI_NAME> + </PropertyGroup> + <PropertyGroup /> + <ItemDefinitionGroup /> + <ItemGroup> + <BuildMacro Include="LIB_BASE_NAME"> + <Value>$(LIB_BASE_NAME)</Value> + <EnvironmentVariable>true</EnvironmentVariable> + </BuildMacro> + <BuildMacro Include="LIB_CAPI_NAME"> + <Value>$(LIB_CAPI_NAME)</Value> + <EnvironmentVariable>true</EnvironmentVariable> + </BuildMacro> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj new file mode 100644 index 0000000..4956315 --- /dev/null +++ b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj @@ -0,0 +1,329 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug-dll|Win32"> + <Configuration>Debug-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug-dll|x64"> + <Configuration>Debug-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|Win32"> + <Configuration>Release-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|x64"> + <Configuration>Release-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{533F929A-A73B-46B6-9D5F-FFCD62F734E3}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>rctdl_c_api_lib</RootNamespace> + <ProjectName>ocsd_c_api_lib</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>lib$(LIB_CAPI_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + <TargetName>$(LIB_CAPI_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>lib$(LIB_CAPI_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>$(LIB_CAPI_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>lib$(LIB_CAPI_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>$(LIB_CAPI_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>lib$(LIB_CAPI_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + <TargetName>$(LIB_CAPI_NAME)</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;_RCTDL_C_API_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;_RCTDL_C_API_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_USRDLL;_RCTDL_C_API_DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;_RCTDL_C_API_DLL_EXPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_custom.h" /> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_cust_fact.h" /> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_cust_impl.h" /> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_deprc_fn.h" /> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_types.h" /> + <ClInclude Include="..\..\..\include\c_api\opencsd_c_api.h" /> + <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.h" /> + <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_obj.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\ref_trace_decode_lib\ref_trace_decode_lib.vcxproj"> + <Project>{7f500891-cc76-405f-933f-f682bc39f923}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api.cpp" /> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.cpp" /> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_deprc_fn.cpp" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters new file mode 100644 index 0000000..b905bab --- /dev/null +++ b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_types.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\c_api\opencsd_c_api.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_obj.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_deprc_fn.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_custom.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_cust_fact.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\c_api\ocsd_c_api_cust_impl.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_deprc_fn.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\c_api\ocsd_c_api_custom_obj.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln new file mode 100644 index 0000000..0a321a6 --- /dev/null +++ b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln @@ -0,0 +1,147 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opencsd_lib", "ref_trace_decode_lib.vcxproj", "{7F500891-CC76-405F-933F-F682BC39F923}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ocsd_c_api_lib", "..\rctdl_c_api_lib\rctdl_c_api_lib.vcxproj", "{533F929A-A73B-46B6-9D5F-FFCD62F734E3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "snapshot_parser_lib", "......\tests\build\win-vs2015\snapshot_parser_lib\snapshot_parser_lib.vcxproj", "{DE1F395D-4F53-42FB-8AEF-993A4BF7E411}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "trc_pkt_lister", "......\tests\build\win-vs2015\trc_pkt_lister\trc_pkt_lister.vcxproj", "{18ABC652-AB11-4993-9491-1A7FB7117339}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_pkt_print_c_api", "......\tests\build\win-vs2015\simple_pkt_print_c_api\simple_pkt_print_c_api.vcxproj", "{D18112ED-E2D7-4D49-B1F0-15E98967AC0A}" + ProjectSection(ProjectDependencies) = postProject + {533F929A-A73B-46B6-9D5F-FFCD62F734E3} = {533F929A-A73B-46B6-9D5F-FFCD62F734E3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c_api_pkt_print_test", "......\tests\build\win-vs2015\c_api_pkt_print_test\c_api_pkt_print_test.vcxproj", "{3AC169DA-E156-4D16-95DF-73D7302A5606}" + ProjectSection(ProjectDependencies) = postProject + {46219A32-8178-41C1-B3B1-B5A6E547515F} = {46219A32-8178-41C1-B3B1-B5A6E547515F} + {533F929A-A73B-46B6-9D5F-FFCD62F734E3} = {533F929A-A73B-46B6-9D5F-FFCD62F734E3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_dcd_echo_test", "......\tests\build\win-vs2015\ext_dcd_echo_test\ext_dcd_echo_test.vcxproj", "{46219A32-8178-41C1-B3B1-B5A6E547515F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Debug-dll|Win32 = Debug-dll|Win32 + Debug-dll|x64 = Debug-dll|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Release-dll|Win32 = Release-dll|Win32 + Release-dll|x64 = Release-dll|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|Win32.ActiveCfg = Debug|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|Win32.Build.0 = Debug|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|x64.ActiveCfg = Debug|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|x64.Build.0 = Debug|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|Win32.ActiveCfg = Release|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|Win32.Build.0 = Release|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|x64.ActiveCfg = Release|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|x64.Build.0 = Release|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|x64.Build.0 = Release-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|Win32.Build.0 = Debug|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|x64.ActiveCfg = Debug|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|x64.Build.0 = Debug|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|Win32.ActiveCfg = Release|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|Win32.Build.0 = Release|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|x64.ActiveCfg = Release|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|x64.Build.0 = Release|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|x64.Build.0 = Release-dll|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|Win32.ActiveCfg = Debug|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|Win32.Build.0 = Debug|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|x64.ActiveCfg = Debug|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|x64.Build.0 = Debug|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|Win32.ActiveCfg = Release|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|Win32.Build.0 = Release|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|x64.ActiveCfg = Release|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|x64.Build.0 = Release|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|Win32.ActiveCfg = Debug|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|Win32.Build.0 = Debug|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|x64.ActiveCfg = Debug|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|x64.Build.0 = Debug|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|Win32.ActiveCfg = Release|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|Win32.Build.0 = Release|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|x64.ActiveCfg = Release|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|x64.Build.0 = Release|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug|Win32.Build.0 = Debug|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug|x64.ActiveCfg = Debug|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug|x64.Build.0 = Debug|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release|Win32.ActiveCfg = Release|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release|Win32.Build.0 = Release|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release|x64.ActiveCfg = Release|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release|x64.Build.0 = Release|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {D18112ED-E2D7-4D49-B1F0-15E98967AC0A}.Release-dll|x64.Build.0 = Release-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|Win32.Build.0 = Debug|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|x64.ActiveCfg = Debug|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|x64.Build.0 = Debug|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|Win32.ActiveCfg = Release|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|Win32.Build.0 = Release|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|x64.ActiveCfg = Release|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|x64.Build.0 = Release|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|x64.Build.0 = Release-dll|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|Win32.ActiveCfg = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|Win32.Build.0 = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|x64.ActiveCfg = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|x64.Build.0 = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|Win32.ActiveCfg = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|Win32.Build.0 = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|x64.ActiveCfg = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|x64.Build.0 = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|Win32.ActiveCfg = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|Win32.Build.0 = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|x64.ActiveCfg = Release|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|x64.Build.0 = Release|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|Win32.ActiveCfg = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|Win32.Build.0 = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|x64.ActiveCfg = Release|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj new file mode 100644 index 0000000..05e5857 --- /dev/null +++ b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj @@ -0,0 +1,440 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug-dll|Win32"> + <Configuration>Debug-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug-dll|x64"> + <Configuration>Debug-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|Win32"> + <Configuration>Release-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|x64"> + <Configuration>Release-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{7F500891-CC76-405F-933F-F682BC39F923}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>ref_trace_decode_lib</RootNamespace> + <ProjectName>opencsd_lib</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\opencsd.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>lib$(LIB_BASE_NAME)</TargetName> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>......\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <None Include="..\..\..\..\HOWTO.md" /> + <None Include="..\..\..\..\LICENSE" /> + <None Include="..\..\..\..\README.md" /> + <None Include="..\..\..\..\TODO" /> + <None Include="..\..\..\docs\build_libs.md" /> + <None Include="..\..\..\docs\external_custom.md" /> + <None Include="..\..\..\docs\test_progs.md" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\include\common\comp_attach_notifier_i.h" /> + <ClInclude Include="..\..\..\include\common\comp_attach_pt_t.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_code_follower.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_mngr.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_mngr_i.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_tree.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_tree_elem.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_error.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_error_logger.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_gen_elem_list.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_lib_dcd_register.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_msg_logger.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_pe_context.h" /> + <ClInclude Include="..\..\..\include\common\ocsd_version.h" /> + <ClInclude Include="..\..\..\include\common\trc_component.h" /> + <ClInclude Include="..\..\..\include\common\trc_core_arch_map.h" /> + <ClInclude Include="..\..\..\include\common\trc_cs_config.h" /> + <ClInclude Include="..\..\..\include\common\trc_frame_deformatter.h" /> + <ClInclude Include="..\..\..\include\common\trc_gen_elem.h" /> + <ClInclude Include="..\..\..\include\common\trc_pkt_decode_base.h" /> + <ClInclude Include="..\..\..\include\common\trc_pkt_elem_base.h" /> + <ClInclude Include="..\..\..\include\common\trc_pkt_proc_base.h" /> + <ClInclude Include="..\..\..\include\common\trc_printable_elem.h" /> + <ClInclude Include="..\..\..\include\etmv3\etmv3_decoder.h" /> + <ClInclude Include="..\..\..\include\etmv3\trc_cmp_cfg_etmv3.h" /> + <ClInclude Include="..\..\..\include\etmv3\trc_dcd_mngr_etmv3.h" /> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_decode_etmv3.h" /> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_elem_etmv3.h" /> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_proc_etmv3.h" /> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_types_etmv3.h" /> + <ClInclude Include="..\..\..\include\etmv4\etmv4_decoder.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_cmp_cfg_etmv4.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_dcd_mngr_etmv4i.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_decode_etmv4i.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_elem_etmv4d.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_elem_etmv4i.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_proc_etmv4.h" /> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_types_etmv4.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_abs_typed_base_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_data_rawframe_in_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_data_raw_in_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_error_log_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_gen_elem_in_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_indexer_pkt_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_indexer_src_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_instr_decode_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_pkt_in_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_pkt_raw_in_i.h" /> + <ClInclude Include="..\..\..\include\interfaces\trc_tgt_mem_access_i.h" /> + <ClInclude Include="..\..\..\include\i_dec\trc_idec_arminst.h" /> + <ClInclude Include="..\..\..\include\i_dec\trc_i_decode.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_base.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_bufptr.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_cb.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_cb_if.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_file.h" /> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_mapper.h" /> + <ClInclude Include="..\..\..\include\ocsd_if_types.h" /> + <ClInclude Include="..\..\..\include\ocsd_if_version.h" /> + <ClInclude Include="..\..\..\include\opencsd.h" /> + <ClInclude Include="..\..\..\include\ptm\ptm_decoder.h" /> + <ClInclude Include="..\..\..\include\ptm\trc_cmp_cfg_ptm.h" /> + <ClInclude Include="..\..\..\include\ptm\trc_dcd_mngr_ptm.h" /> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_decode_ptm.h" /> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_elem_ptm.h" /> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_proc_ptm.h" /> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_types_ptm.h" /> + <ClInclude Include="..\..\..\include\stm\stm_decoder.h" /> + <ClInclude Include="..\..\..\include\stm\trc_cmp_cfg_stm.h" /> + <ClInclude Include="..\..\..\include\stm\trc_dcd_mngr_stm.h" /> + <ClInclude Include="..\..\..\include\stm\trc_pkt_decode_stm.h" /> + <ClInclude Include="..\..\..\include\stm\trc_pkt_elem_stm.h" /> + <ClInclude Include="..\..\..\include\stm\trc_pkt_proc_stm.h" /> + <ClInclude Include="..\..\..\include\stm\trc_pkt_types_stm.h" /> + <ClInclude Include="..\..\..\include\trc_gen_elem_types.h" /> + <ClInclude Include="..\..\..\include\trc_pkt_types.h" /> + <ClInclude Include="..\..\..\source\etmv3\trc_pkt_proc_etmv3_impl.h" /> + <ClInclude Include="..\..\..\source\etmv4\trc_etmv4_stack_elem.h" /> + <ClInclude Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4d_impl.h" /> + <ClInclude Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4i_impl.h" /> + <ClInclude Include="..\..\..\source\trc_frame_deformatter_impl.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\etmv3\trc_cmp_cfg_etmv3.cpp" /> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_decode_etmv3.cpp" /> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_elem_etmv3.cpp" /> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_proc_etmv3.cpp" /> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_proc_etmv3_impl.cpp" /> + <ClCompile Include="..\..\..\source\etmv4\trc_cmp_cfg_etmv4.cpp" /> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_decode_etmv4i.cpp" /> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_elem_etmv4d.cpp" /> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_elem_etmv4i.cpp" /> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4.cpp" /> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4i_impl.cpp" /> + <ClCompile Include="..\..\..\source\i_dec\trc_idec_arminst.cpp" /> + <ClCompile Include="..\..\..\source\i_dec\trc_i_decode.cpp" /> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_base.cpp" /> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_bufptr.cpp" /> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_cb.cpp" /> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_file.cpp" /> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_mapper.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_code_follower.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_dcd_tree.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_error.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_error_logger.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_gen_elem_list.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_lib_dcd_register.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_msg_logger.cpp" /> + <ClCompile Include="..\..\..\source\ocsd_version.cpp" /> + <ClCompile Include="..\..\..\source\ptm\trc_cmp_cfg_ptm.cpp" /> + <ClCompile Include="..\..\..\source\ptm\trc_pkt_decode_ptm.cpp" /> + <ClCompile Include="..\..\..\source\ptm\trc_pkt_elem_ptm.cpp" /> + <ClCompile Include="..\..\..\source\ptm\trc_pkt_proc_ptm.cpp" /> + <ClCompile Include="..\..\..\source\stm\trc_pkt_decode_stm.cpp" /> + <ClCompile Include="..\..\..\source\stm\trc_pkt_elem_stm.cpp" /> + <ClCompile Include="..\..\..\source\stm\trc_pkt_proc_stm.cpp" /> + <ClCompile Include="..\..\..\source\trc_component.cpp" /> + <ClCompile Include="..\..\..\source\trc_core_arch_map.cpp" /> + <ClCompile Include="..\..\..\source\trc_frame_deformatter.cpp" /> + <ClCompile Include="..\..\..\source\trc_gen_elem.cpp" /> + <ClCompile Include="..\..\..\source\trc_printable_elem.cpp" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters new file mode 100644 index 0000000..87aa847 --- /dev/null +++ b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters @@ -0,0 +1,449 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + <Filter Include="interfaces"> + <UniqueIdentifier>{80012968-9f0d-4623-901a-c2fa5f1c0890}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\etmv3"> + <UniqueIdentifier>{98cd2a71-b44f-4884-bb8a-56c851cc8321}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\etmv4"> + <UniqueIdentifier>{dd155712-7990-4cdd-b9b0-299d97f625e4}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\ptm"> + <UniqueIdentifier>{9ec501e2-9ba4-4bad-a3d3-cdb604cc38b4}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\mem_acc"> + <UniqueIdentifier>{23a35c62-e38f-43f6-a03b-6f1287478a69}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\i_dec"> + <UniqueIdentifier>{f550018a-8974-4f8b-975a-bd8b86ae418f}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\stm"> + <UniqueIdentifier>{2c796b59-81f6-49c9-88cf-e90ed2e741a3}</UniqueIdentifier> + </Filter> + <Filter Include="docs-files"> + <UniqueIdentifier>{5ea7e02d-0667-4d2d-8c3d-039daf112edc}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\ptm"> + <UniqueIdentifier>{2aa8a97b-13da-4bd1-bdb5-02f3e1cf030b}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\etmv4"> + <UniqueIdentifier>{ff9157b6-ef07-41e4-8ff4-322c50ea6665}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\etmv3"> + <UniqueIdentifier>{0c2ba881-cc82-4567-ab59-d2363b4c3d1b}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\stm"> + <UniqueIdentifier>{73a56760-b7ff-4d56-88f0-13249201081c}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\i_dec"> + <UniqueIdentifier>{cb3682ee-abbd-44c3-a175-4522d76e2d68}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\mem_acc"> + <UniqueIdentifier>{eb9beab1-99c6-4eaa-88c0-893b05b2e673}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files\common"> + <UniqueIdentifier>{58d2398e-efdd-45d9-b7be-fc6096f3bec2}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <None Include="..\..\..\..\LICENSE"> + <Filter>docs-files</Filter> + </None> + <None Include="..\..\..\..\README.md"> + <Filter>docs-files</Filter> + </None> + <None Include="..\..\..\..\TODO"> + <Filter>docs-files</Filter> + </None> + <None Include="..\..\..\docs\build_libs.md"> + <Filter>docs-files</Filter> + </None> + <None Include="..\..\..\docs\test_progs.md"> + <Filter>docs-files</Filter> + </None> + <None Include="..\..\..\..\HOWTO.md"> + <Filter>docs-files</Filter> + </None> + <None Include="..\..\..\docs\external_custom.md"> + <Filter>docs-files</Filter> + </None> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\source\trc_frame_deformatter_impl.h"> + <Filter>Source Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_tgt_mem_access_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_pkt_raw_in_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_pkt_in_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_instr_decode_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_indexer_src_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_indexer_pkt_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_gen_elem_in_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_error_log_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_data_raw_in_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_data_rawframe_in_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\etmv3_decoder.h"> + <Filter>Header Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_elem_etmv3.h"> + <Filter>Header Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\trc_cmp_cfg_etmv3.h"> + <Filter>Header Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_proc_etmv3.h"> + <Filter>Header Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_types_etmv3.h"> + <Filter>Header Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_proc_etmv4.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_types_etmv4.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_elem_etmv4d.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_elem_etmv4i.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_cmp_cfg_etmv4.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\etmv4_decoder.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_elem_ptm.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\trc_cmp_cfg_ptm.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_types_ptm.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_proc_ptm.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\ptm_decoder.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_base.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_file.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_bufptr.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_mapper.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\i_dec\trc_idec_arminst.h"> + <Filter>Header Files\i_dec</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\i_dec\trc_i_decode.h"> + <Filter>Header Files\i_dec</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_pkt_decode_etmv4i.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\etmv4\trc_etmv4_stack_elem.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\stm_decoder.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_pkt_elem_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_cmp_cfg_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_pkt_proc_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_pkt_types_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\trc_pkt_decode_etmv3.h"> + <Filter>Header Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_cb_if.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\mem_acc\trc_mem_acc_cb.h"> + <Filter>Header Files\mem_acc</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\trc_pkt_decode_ptm.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4d_impl.h"> + <Filter>Source Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4i_impl.h"> + <Filter>Source Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\etmv3\trc_pkt_proc_etmv3_impl.h"> + <Filter>Source Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\comp_attach_notifier_i.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\comp_attach_pt_t.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_tree.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_tree_elem.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_error.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_error_logger.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_msg_logger.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_version.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_component.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_core_arch_map.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_frame_deformatter.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_gen_elem.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_pkt_decode_base.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_pkt_proc_base.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_printable_elem.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ocsd_if_types.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\opencsd.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\trc_gen_elem_types.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\trc_pkt_types.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_pe_context.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_code_follower.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_gen_elem_list.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_cs_config.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_mngr.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_dcd_mngr_i.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\ocsd_lib_dcd_register.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\interfaces\trc_abs_typed_base_i.h"> + <Filter>interfaces</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv4\trc_dcd_mngr_etmv4i.h"> + <Filter>Header Files\etmv4</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\etmv3\trc_dcd_mngr_etmv3.h"> + <Filter>Source Files\etmv3</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ptm\trc_dcd_mngr_ptm.h"> + <Filter>Header Files\ptm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_dcd_mngr_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\common\trc_pkt_elem_base.h"> + <Filter>Header Files\common</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\stm\trc_pkt_decode_stm.h"> + <Filter>Header Files\stm</Filter> + </ClInclude> + <ClInclude Include="..\..\..\include\ocsd_if_version.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\trc_component.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\trc_frame_deformatter.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\trc_core_arch_map.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\trc_printable_elem.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\trc_gen_elem.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ptm\trc_pkt_decode_ptm.cpp"> + <Filter>Source Files\ptm</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ptm\trc_pkt_elem_ptm.cpp"> + <Filter>Source Files\ptm</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ptm\trc_pkt_proc_ptm.cpp"> + <Filter>Source Files\ptm</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_elem_etmv4d.cpp"> + <Filter>Source Files\etmv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_elem_etmv4i.cpp"> + <Filter>Source Files\etmv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4.cpp"> + <Filter>Source Files\etmv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_proc_etmv4i_impl.cpp"> + <Filter>Source Files\etmv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv4\trc_pkt_decode_etmv4i.cpp"> + <Filter>Source Files\etmv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_elem_etmv3.cpp"> + <Filter>Source Files\etmv3</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_decode_etmv3.cpp"> + <Filter>Source Files\etmv3</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv3\trc_cmp_cfg_etmv3.cpp"> + <Filter>Source Files\etmv3</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_proc_etmv3.cpp"> + <Filter>Source Files\etmv3</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv3\trc_pkt_proc_etmv3_impl.cpp"> + <Filter>Source Files\etmv3</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\etmv4\trc_cmp_cfg_etmv4.cpp"> + <Filter>Source Files\etmv4</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ptm\trc_cmp_cfg_ptm.cpp"> + <Filter>Source Files\ptm</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\stm\trc_pkt_proc_stm.cpp"> + <Filter>Source Files\stm</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\stm\trc_pkt_elem_stm.cpp"> + <Filter>Source Files\stm</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\i_dec\trc_i_decode.cpp"> + <Filter>Source Files\i_dec</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\i_dec\trc_idec_arminst.cpp"> + <Filter>Source Files\i_dec</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_base.cpp"> + <Filter>Source Files\mem_acc</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_mapper.cpp"> + <Filter>Source Files\mem_acc</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_bufptr.cpp"> + <Filter>Source Files\mem_acc</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_cb.cpp"> + <Filter>Source Files\mem_acc</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\mem_acc\trc_mem_acc_file.cpp"> + <Filter>Source Files\mem_acc</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_dcd_tree.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_error.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_error_logger.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_msg_logger.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_version.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_code_follower.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_gen_elem_list.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\ocsd_lib_dcd_register.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\stm\trc_pkt_decode_stm.cpp"> + <Filter>Source Files\stm</Filter> + </ClCompile> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj b/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj new file mode 100644 index 0000000..beb583b --- /dev/null +++ b/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj @@ -0,0 +1,333 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug-dll|Win32"> + <Configuration>Debug-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug-dll|x64"> + <Configuration>Debug-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|Win32"> + <Configuration>Release-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|x64"> + <Configuration>Release-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\c_api_pkt_print_test.c" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{3AC169DA-E156-4D16-95DF-73D7302A5606}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>c_api_pkt_print_test</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;........\tests\ext_dcd_test_eg\c_api_echo_test</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg;........\tests\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;ext_dcd_echo_test.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + <AdditionalDependencies>$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win32\dbg*.dll ......\bin\win32\dbg.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + <AdditionalDependencies>$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win64\dbg*.dll ......\bin\win64\dbg.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win32\rel*.dll ......\bin\win32\rel.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win64\rel*.dll ......\bin\win64\rel.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters b/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters new file mode 100644 index 0000000..e8fc90b --- /dev/null +++ b/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\c_api_pkt_print_test.c"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj b/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj new file mode 100644 index 0000000..7d1aaa7 --- /dev/null +++ b/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj @@ -0,0 +1,148 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{46219A32-8178-41C1-B3B1-B5A6E547515F}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>ext_dcd_echo_test</RootNamespace> + <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v140</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <ExceptionHandling>false</ExceptionHandling> + <AdditionalIncludeDirectories>........\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test.h" /> + <ClInclude Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test_fact.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test.c" /> + <ClCompile Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test_fact.c" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters b/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters new file mode 100644 index 0000000..10fc54c --- /dev/null +++ b/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test_fact.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test_fact.c"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\ext_dcd_test_eg\c_api_echo_test\ext_dcd_echo_test.c"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj b/decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj new file mode 100644 index 0000000..50e5683 --- /dev/null +++ b/decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj @@ -0,0 +1,333 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug-dll|Win32"> + <Configuration>Debug-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug-dll|x64"> + <Configuration>Debug-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|Win32"> + <Configuration>Release-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|x64"> + <Configuration>Release-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\simple_pkt_c_api.c" /> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{D18112ED-E2D7-4D49-B1F0-15E98967AC0A}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>simple_pkt_print_c_api</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="..\..\..\..\build\win\opencsd.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + <TargetName>$(ProjectName)-dl</TargetName> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command> + </Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + <AdditionalDependencies>$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win32\dbg*.dll ......\bin\win32\dbg.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\dbg</AdditionalLibraryDirectories> + <AdditionalDependencies>$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win64\dbg*.dll ......\bin\win64\dbg.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win32\rel*.dll ......\bin\win32\rel.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>$(LIB_CAPI_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>copy ........\lib\win64\rel*.dll ......\bin\win64\rel.</Command> + </PostBuildEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj.filters b/decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj.filters new file mode 100644 index 0000000..8d50471 --- /dev/null +++ b/decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\simple_pkt_c_api.c"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj b/decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj new file mode 100644 index 0000000..08c9cc9 --- /dev/null +++ b/decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj @@ -0,0 +1,318 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug-dll|Win32"> + <Configuration>Debug-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug-dll|x64"> + <Configuration>Debug-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|Win32"> + <Configuration>Release-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|x64"> + <Configuration>Release-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{DE1F395D-4F53-42FB-8AEF-993A4BF7E411}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>snapshot_parser_lib</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ShowIncludes>false</ShowIncludes> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ShowIncludes>false</ShowIncludes> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>../../../snapshot_parser_lib/include;../../../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <ProgramDataBaseFileName>$(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <SubSystem>Windows</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <None Include="ReadMe.txt" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\device_info.cpp" /> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\device_parser.cpp" /> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\snapshot_parser.cpp" /> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\snapshot_parser_util.cpp" /> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\snapshot_reader.cpp" /> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\ss_to_dcdtree.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\device_info.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\device_parser.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\ini_section_names.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_info.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_parser.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_parser_util.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_reader.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\ss_key_value_names.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\ss_to_dcdtree.h" /> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\trace_snapshots.h" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\..\..\build\win\ref_trace_decode_lib\ref_trace_decode_lib.vcxproj"> + <Project>{7f500891-cc76-405f-933f-f682bc39f923}</Project> + </ProjectReference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters b/decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters new file mode 100644 index 0000000..86d4067 --- /dev/null +++ b/decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <None Include="ReadMe.txt" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\device_info.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\device_parser.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\snapshot_parser.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\snapshot_parser_util.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\snapshot_reader.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\snapshot_parser_lib\source\ss_to_dcdtree.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\device_info.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\device_parser.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\ini_section_names.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_info.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_parser.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_parser_util.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\snapshot_reader.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\trace_snapshots.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\ss_to_dcdtree.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\snapshot_parser_lib\include\ss_key_value_names.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj b/decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj new file mode 100644 index 0000000..a4a036d --- /dev/null +++ b/decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj @@ -0,0 +1,306 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug-dll|Win32"> + <Configuration>Debug-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug-dll|x64"> + <Configuration>Debug-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|Win32"> + <Configuration>Release-dll</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release-dll|x64"> + <Configuration>Release-dll</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{18ABC652-AB11-4993-9491-1A7FB7117339}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + <RootNamespace>trc_pkt_lister</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + <PlatformToolset>v140</PlatformToolset> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\dbg</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + <IntDir>$(Platform)$(Configuration)</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>......\bin\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|Win32'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-dll|x64'"> + <ClCompile> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PrecompiledHeader> + </PrecompiledHeader> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;......\snapshot_parser_lib\include</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <GenerateDebugInformation>true</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\raw_frame_printer.cpp" /> + <ClCompile Include="..\..\..\source\trc_pkt_lister.cpp" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\..\..\build\win\ref_trace_decode_lib\ref_trace_decode_lib.vcxproj"> + <Project>{7f500891-cc76-405f-933f-f682bc39f923}</Project> + </ProjectReference> + <ProjectReference Include="..\snapshot_parser_lib\snapshot_parser_lib.vcxproj"> + <Project>{de1f395d-4f53-42fb-8aef-993a4bf7e411}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\source\gen_elem_printer.h" /> + <ClInclude Include="..\..\..\source\item_printer.h" /> + <ClInclude Include="..\..\..\source\pkt_printer_t.h" /> + <ClInclude Include="..\..\..\source\raw_frame_printer.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters b/decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters new file mode 100644 index 0000000..daab04a --- /dev/null +++ b/decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\..\source\trc_pkt_lister.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\..\..\source\raw_frame_printer.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\..\source\pkt_printer_t.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\item_printer.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\raw_frame_printer.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\..\..\source\gen_elem_printer.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c index bcd41cd..3eac0e8 100644 --- a/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c +++ b/decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c @@ -32,7 +32,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
- #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -77,6 +76,41 @@ static ocsd_datapath_resp_t echo_dcd_process_data(echo_decoder_t *decoder,
static ocsd_datapath_resp_t send_gen_packet(echo_decoder_t *decoder); static ocsd_datapath_resp_t analyse_packet(echo_decoder_t *decoder); +static ocsd_datapath_resp_t send_none_data_op(echo_decoder_t *decoder, const ocsd_datapath_op_t op); +static void print_init_test_message(echo_decoder_t *decoder); + +/******Infrastructure testing functionality *********************/ +/* As this is a test decoder we want to check which of the callbacks or call-ins are covered for a given test run + (by definition they can't all be - so will need a couple of runs to test all) +*/ +enum { + TEST_COV_ERRORLOG_CB = 0, + TEST_COV_MSGLOG_CB, + TEST_COV_GEN_ELEM_CB, + TEST_COV_IDEC_CB, + TEST_COV_MEM_ACC_CB, + TEST_COV_PKTMON_CB, + TEST_COV_PKTSINK_CB, + TEST_COV_INDATA, + TEST_COV_INCBFLAGS, + /**/ + TEST_COV_END +}; + +typedef enum { + TEST_RES_NA, /* not tested */ + TEST_RES_OK, /* test OK */ + TEST_RES_FAIL /* test fail */ +} test_result_t; + +static test_result_t coverage[TEST_COV_END] = { TEST_RES_NA }; + +#define UPDATE_COVERAGE(i,r) { if(coverage[i] != TEST_RES_FAIL) coverage[i] = r; } + +static void print_test_cov_results(echo_decoder_t *decoder); + +/*************************/ +
/** init decoder on creation, along with library instance structure */ void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_inst, const echo_dcd_cfg_t *p_config, const ocsd_extern_dcd_cb_fns *p_lib_callbacks) @@ -106,12 +140,10 @@ void echo_dcd_init(echo_decoder_t *decoder, ocsd_extern_dcd_inst_t *p_decoder_in
void echo_dcd_pkt_tostr(echo_dcd_pkt_t *pkt, char *buffer, const int buflen) { - snprintf(buffer, buflen, "ECHOTP[0x%02X] (0x%08X) \n", pkt->header, pkt->data); + snprintf(buffer, buflen, "ECHOTP{%d} [0x%02X] (0x%08X)", pkt->header & 0x3, pkt->header, pkt->data); }
- /**** Main decoder implementation ****/ - ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, const ocsd_datapath_op_t op, const ocsd_trc_index_t index, @@ -121,7 +153,10 @@ ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle, { ocsd_datapath_resp_t resp = OCSD_RESP_CONT; echo_decoder_t *decoder = (echo_decoder_t *)decoder_handle; + UPDATE_COVERAGE(TEST_COV_INDATA,TEST_RES_OK)
+ /* Deal with each possible datapath operation. + */ switch (op) { case OCSD_OP_DATA: @@ -130,13 +165,23 @@ ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle,
case OCSD_OP_EOT: if (decoder->data_in_count > 0) - lib_cb_LogError(&(decoder->lib_fns), OCSD_ERR_SEV_WARN, OCSD_ERR_PKT_INTERP_FAIL,index,decoder->reg_config.cs_id,"Incomplete packet at end of trace"); - ocsd_gen_elem_init(&(decoder->out_pkt), OCSD_GEN_TRC_ELEM_EO_TRACE); - resp = send_gen_packet(decoder); + lib_cb_LogError(&(decoder->lib_fns), OCSD_ERR_SEV_WARN, OCSD_ERR_PKT_INTERP_FAIL,decoder->curr_pkt_idx,decoder->reg_config.cs_id,"Incomplete packet at end of trace.\n"); + + /* if we are in full decoder mode then generate a generic EOT packet. */ + if (decoder->createFlags & OCSD_CREATE_FLG_FULL_DECODER) + { + ocsd_gen_elem_init(&(decoder->out_pkt), OCSD_GEN_TRC_ELEM_EO_TRACE); + resp = send_gen_packet(decoder); + send_none_data_op(decoder, OCSD_OP_EOT); /* send EOT to any packet monitor in use */ + } + else + resp = send_none_data_op(decoder, OCSD_OP_EOT); /*send EOT to packet sink and any packet monitor in use */ + print_test_cov_results(decoder); /* end of test run - need to print out the coverage data */ break;
case OCSD_OP_FLUSH: /* This decoder never saves a list of incoming packets (which some real decoders may have to according to protocol). + Additionally this decoder both processes packets and analyses them so there is no second stage to pass the flush request on to. Therefore there is nothing to flush */ break;
@@ -149,7 +194,8 @@ ocsd_datapath_resp_t echo_dcd_trace_data_in(const void *decoder_handle,
void echo_dcd_update_mon_flags(const void *decoder_handle, const int flags) { - ((echo_decoder_t *)decoder_handle)->lib_fns.packetCBFlags = flags; + lib_cb_updatePktCBFlags(&((echo_decoder_t *)decoder_handle)->lib_fns, flags); + UPDATE_COVERAGE(TEST_COV_INCBFLAGS,TEST_RES_OK) }
void echo_dcd_reset(echo_decoder_t *decoder) @@ -178,11 +224,12 @@ ocsd_datapath_resp_t echo_dcd_process_data(echo_decoder_t *decoder, ocsd_gen_elem_init(&decoder->out_pkt, OCSD_GEN_TRC_ELEM_NO_SYNC); resp = send_gen_packet(decoder); decoder->state = DCD_WAIT_SYNC; /* wait for the first sync point */ + print_init_test_message(decoder); /* because this is in fact a test decoder - print verification messages */ break;
case DCD_WAIT_SYNC: /* In this 'protocol' sync will be a single 0x00 byte. - Some decoders may output "unsynced packets" if in packet processing only mode, or on the + Some decoders may output "unsynced packets" markers if in packet processing only mode, or on the packet monitor output if in use. We are not bothering here. */ if (pDataBlock[bytesUsed] == 0x00) decoder->state = DCD_PROC_PACKETS; @@ -215,11 +262,82 @@ ocsd_datapath_resp_t send_gen_packet(echo_decoder_t *decoder) { ocsd_datapath_resp_t resp = OCSD_RESP_CONT; /* Only output generic decode packets if we are in full decode mode. */ - if(decoder->createFlags & OCSD_CREATE_FLG_FULL_DECODER) + if (decoder->createFlags & OCSD_CREATE_FLG_FULL_DECODER) + { resp = lib_cb_GenElemOp(&decoder->lib_fns, decoder->curr_pkt_idx, decoder->reg_config.cs_id, &decoder->out_pkt); + UPDATE_COVERAGE(TEST_COV_GEN_ELEM_CB, (OCSD_DATA_RESP_IS_FATAL(resp) ? TEST_RES_FAIL : TEST_RES_OK)) + } return resp; }
+ocsd_datapath_resp_t send_none_data_op(echo_decoder_t *decoder, const ocsd_datapath_op_t op) +{ + ocsd_datapath_resp_t resp = OCSD_RESP_CONT; + ocsd_extern_dcd_cb_fns *p_fns = &(decoder->lib_fns); + + /* send a none data op to the packet monitor or packet sink if in packet processing only mode + None data ops have the data parameters all set to 0. + */ + + /* if the packet monitor callback is in use. */ + if (lib_cb_usePktMon(p_fns)) + lib_cb_PktMon(p_fns, op, 0, 0, 0, 0); + + /* if the packet sink is in use then we shouldn't be in full decoder mode.*/ + if (lib_cb_usePktSink(p_fns)) + resp = lib_cb_PktDataSink(p_fns, op, 0, 0); + + return resp; +} + +void print_init_test_message(echo_decoder_t * decoder) +{ + ocsd_extern_dcd_cb_fns *p_fns = &(decoder->lib_fns); + if (lib_cb_LogMsg(p_fns, OCSD_ERR_SEV_ERROR, "Echo_Test_Decoder: Init - LogMsgCB test.\n") == OCSD_OK) + UPDATE_COVERAGE(TEST_COV_MSGLOG_CB, TEST_RES_OK) + else + UPDATE_COVERAGE(TEST_COV_MSGLOG_CB, TEST_RES_FAIL) + + if(lib_cb_LogError(p_fns, OCSD_ERR_SEV_ERROR, OCSD_OK, 0, decoder->reg_config.cs_id, "Echo_Test_Decoder - Init - LogErrorCB test.\n") == OCSD_OK) + UPDATE_COVERAGE(TEST_COV_ERRORLOG_CB, TEST_RES_OK) + else + UPDATE_COVERAGE(TEST_COV_ERRORLOG_CB, TEST_RES_FAIL) +} + +void print_test_cov_results(echo_decoder_t *decoder) +{ + int i; + ocsd_extern_dcd_cb_fns *p_fns = &(decoder->lib_fns); + static char *results[] = { + "Not Tested", "Passed", "Failed" + }; + static char *cov_elem_names[] = { + "ERRORLOG_CB", + "MSGLOG_CB", + "GEN_ELEM_CB", + "IDEC_CB", + "MEM_ACC_CB", + "PKTMON_CB", + "PKTSINK_CB", + "INDATA", + "INCBFLAGS" + }; + char coverage_message[256]; + + for (i = 0; i < TEST_COV_END; i++) + { + sprintf(coverage_message, "Element %s : %s\n",cov_elem_names[i],results[coverage[i]]); + if (coverage[TEST_COV_MSGLOG_CB] == TEST_RES_OK) /* check we can use the msg logger for outputting the results */ + lib_cb_LogMsg(p_fns, OCSD_ERR_SEV_ERROR, coverage_message); + else + printf(coverage_message); + } +} + + +/* This is the packet decode portion of the decoder. +* incoming protocol packets are analysed to create generic output packets. +*/ ocsd_datapath_resp_t analyse_packet(echo_decoder_t * decoder) { ocsd_datapath_resp_t resp = OCSD_RESP_CONT; @@ -235,11 +353,17 @@ ocsd_datapath_resp_t analyse_packet(echo_decoder_t * decoder)
/* if the packet monitor callback is in use - output the newly created packet. */ if (lib_cb_usePktMon(p_fns)) + { lib_cb_PktMon(p_fns, OCSD_OP_DATA, decoder->curr_pkt_idx, (const void *)(&decoder->curr_pkt), ECHO_DCD_PKT_SIZE, decoder->data_in); + UPDATE_COVERAGE(TEST_COV_PKTMON_CB, TEST_RES_OK) + }
/* if the packet sink is in use then we shouldn't be in full decoder mode.*/ if (lib_cb_usePktSink(p_fns)) - lib_cb_PktDataSink(p_fns, OCSD_OP_DATA, decoder->curr_pkt_idx, (const void *)(&decoder->curr_pkt)); + { + resp = lib_cb_PktDataSink(p_fns, OCSD_OP_DATA, decoder->curr_pkt_idx, (const void *)(&decoder->curr_pkt)); + UPDATE_COVERAGE(TEST_COV_PKTSINK_CB, (OCSD_DATA_RESP_IS_FATAL(resp) ? TEST_RES_FAIL : TEST_RES_OK)) + } else if (decoder->createFlags & OCSD_CREATE_FLG_FULL_DECODER) /* no packet sink so are we full decoder? */ { /* Full decode - generate generic output packets. @@ -274,6 +398,7 @@ ocsd_datapath_resp_t analyse_packet(echo_decoder_t * decoder) err = lib_cb_MemAccess(p_fns, decoder->curr_pkt.data & 0xFFFFFFF0, decoder->reg_config.cs_id, OCSD_MEM_SPACE_ANY, &num_mem_bytes, mem_buffer); if (err != OCSD_OK) lib_cb_LogError(p_fns, OCSD_ERR_SEV_ERROR, err, decoder->curr_pkt_idx, decoder->reg_config.cs_id, "Error accessing memory area\n."); + UPDATE_COVERAGE(TEST_COV_MEM_ACC_CB,(err == OCSD_OK ? TEST_RES_OK : TEST_RES_FAIL)) if (num_mem_bytes == 0) { /* unable to read the address... */ @@ -299,6 +424,7 @@ ocsd_datapath_resp_t analyse_packet(echo_decoder_t * decoder) instr_info.dsb_dmb_waypoints = 0;
err = lib_cb_DecodeArmInst(p_fns, &instr_info); + UPDATE_COVERAGE(TEST_COV_IDEC_CB, (err == OCSD_OK ? TEST_RES_OK : TEST_RES_FAIL)) if (err != OCSD_OK) { lib_cb_LogError(p_fns, OCSD_ERR_SEV_ERROR, err, decoder->curr_pkt_idx, decoder->reg_config.cs_id, "Error decoding instruction\n.");
Modifited the C-API test program to enable an option to create and use the echo_test external decoder. Validates the external decoder infrastucture.
Addition of error return on packet monitor and packet sink callback wrappers to indicate if has been correctly initialised.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/include/c_api/ocsd_c_api_cust_impl.h | 18 +++++- decoder/include/c_api/ocsd_c_api_custom.h | 31 +++++++---- decoder/source/c_api/ocsd_c_api.cpp | 11 +++- decoder/tests/source/c_api_pkt_print_test.c | 83 ++++++++++++++++++++++------ 4 files changed, 111 insertions(+), 32 deletions(-)
diff --git a/decoder/include/c_api/ocsd_c_api_cust_impl.h b/decoder/include/c_api/ocsd_c_api_cust_impl.h index 084610f..dfecc78 100644 --- a/decoder/include/c_api/ocsd_c_api_cust_impl.h +++ b/decoder/include/c_api/ocsd_c_api_cust_impl.h @@ -49,7 +49,7 @@ inline ocsd_datapath_resp_t lib_cb_GenElemOp(const ocsd_extern_dcd_cb_fns *callb return OCSD_RESP_FATAL_NOT_INIT; }
-inline void lib_cb_LogError(const ocsd_extern_dcd_cb_fns *callbacks, +inline ocsd_err_t lib_cb_LogError(const ocsd_extern_dcd_cb_fns *callbacks, const ocsd_err_severity_t filter_level, const ocsd_err_t code, const ocsd_trc_index_t idx, @@ -57,15 +57,23 @@ inline void lib_cb_LogError(const ocsd_extern_dcd_cb_fns *callbacks, const char *pMsg) { if (callbacks->fn_log_error) + { callbacks->fn_log_error(callbacks->lib_context, filter_level, code, idx, chan_id, pMsg); + return OCSD_OK; + } + return OCSD_ERR_NOT_INIT; }
-inline void lib_cb_LogMsg(const ocsd_extern_dcd_cb_fns *callbacks, +inline ocsd_err_t lib_cb_LogMsg(const ocsd_extern_dcd_cb_fns *callbacks, const ocsd_err_severity_t filter_level, const char *pMsg) { if (callbacks->fn_log_msg) + { callbacks->fn_log_msg(callbacks->lib_context, filter_level, pMsg); + return OCSD_OK; + } + return OCSD_ERR_NOT_INIT; }
inline ocsd_err_t lib_cb_DecodeArmInst(const ocsd_extern_dcd_cb_fns *callbacks, @@ -107,7 +115,6 @@ inline int lib_cb_usePktMon(const ocsd_extern_dcd_cb_fns *callbacks) return (callbacks->packetCBFlags & OCSD_CUST_DCD_PKT_CB_USE_MON); }
- /* callback function to connect to the packet sink interface, on the main decode data path - used if decoder created as packet processor only */ inline ocsd_datapath_resp_t lib_cb_PktDataSink(const ocsd_extern_dcd_cb_fns *callbacks, @@ -130,4 +137,9 @@ inline int lib_cb_usePktSink(const ocsd_extern_dcd_cb_fns *callbacks) return (callbacks->packetCBFlags & OCSD_CUST_DCD_PKT_CB_USE_SINK); }
+inline void lib_cb_updatePktCBFlags(ocsd_extern_dcd_cb_fns *callbacks, const int newFlags) +{ + callbacks->packetCBFlags = newFlags; +} + #endif /* ARM_OCSD_C_API_CUST_IMPL_H_INCLUDED */ diff --git a/decoder/include/c_api/ocsd_c_api_custom.h b/decoder/include/c_api/ocsd_c_api_custom.h index 7d396ca..ea65fd3 100644 --- a/decoder/include/c_api/ocsd_c_api_custom.h +++ b/decoder/include/c_api/ocsd_c_api_custom.h @@ -57,7 +57,13 @@ typedef ocsd_datapath_resp_t (* fnGenElemOpCB)( const void *lib_context, const ocsd_generic_trace_elem *elem);
/* callback functions to connect into the library error logging mechanism */ -typedef void (* fnLogErrorCB)(const void *lib_context, const ocsd_err_severity_t filter_level, const ocsd_err_t code, const ocsd_trc_index_t idx, const uint8_t chan_id, const char *pMsg); +typedef void (* fnLogErrorCB)( const void *lib_context, + const ocsd_err_severity_t filter_level, + const ocsd_err_t code, + const ocsd_trc_index_t idx, + const uint8_t chan_id, + const char *pMsg); + typedef void (* fnLogMsgCB)(const void *lib_context, const ocsd_err_severity_t filter_level, const char *msg);
/* callback function to connect an ARM instruction decoder */ @@ -88,18 +94,23 @@ typedef ocsd_datapath_resp_t (* fnPktDataSinkCB)( const void *lib_context,
/** an instance of this is owned by the decoder, filled in by the library - allows the CB fns in the library decode tree to be called. */ typedef struct _ocsd_extern_dcd_cb_fns { - fnGenElemOpCB fn_gen_elem_out; - fnLogErrorCB fn_log_error; - fnLogMsgCB fn_log_msg; - fnDecodeArmInstCB fn_arm_instruction_decode; - fnMemAccessCB fn_memory_access; - fnPktMonCB fn_packet_mon; - fnPktDataSinkCB fn_packet_data_sink; - const void *lib_context; - int packetCBFlags; /**< Flags to indicate if the packet sink / packet monitor callbacks are in use. */ +/* Callback functions */ + fnGenElemOpCB fn_gen_elem_out; /**< Callback to output a generic element. */ + fnLogErrorCB fn_log_error; /**< Callback to output an error. */ + fnLogMsgCB fn_log_msg; /**< Callback to output a message. */ + fnDecodeArmInstCB fn_arm_instruction_decode; /**< Callback to decode an ARM instruction. */ + fnMemAccessCB fn_memory_access; /**< Callback to access memory images related to the trace capture. */ + fnPktMonCB fn_packet_mon; /**< Callback to output trace packet to packet monitor. */ + fnPktDataSinkCB fn_packet_data_sink; /**< Callback to output trace packet to packet sink - if in pack processing only mode. */ +/* CB in use flags. */ + int packetCBFlags; /**< Flags to indicate if the packet sink / packet monitor callbacks are in use. ( OCSD_CUST_DCD_PKT_CB_USE_MON / OCSD_CUST_DCD_PKT_CB_USE_SINK) */ +/* library context */ + const void *lib_context; /** library context pointer - use in callbacks to allow the library to load the correct context data. */ } ocsd_extern_dcd_cb_fns;
+/** Flag to indicate the the packet monitor is in use in the library */ #define OCSD_CUST_DCD_PKT_CB_USE_MON 0x1 +/** Flag to indicate the the packet sink is in use in the library */ #define OCSD_CUST_DCD_PKT_CB_USE_SINK 0x2
/** Owned by the library instance object, this structure is filled in by the ocsd_extern_dcd_fact_t createDecoder() function. */ diff --git a/decoder/source/c_api/ocsd_c_api.cpp b/decoder/source/c_api/ocsd_c_api.cpp index da3e557..e38167f 100644 --- a/decoder/source/c_api/ocsd_c_api.cpp +++ b/decoder/source/c_api/ocsd_c_api.cpp @@ -203,10 +203,14 @@ OCSD_C_API ocsd_err_t ocsd_dt_attach_packet_callback( const dcd_tree_handle_t h { case OCSD_C_API_CB_PKT_SINK: err = ocsd_create_pkt_sink_cb(pElem->getProtocol(),(FnDefPktDataIn)p_fn_callback_data,p_context,&pDataInSink); + if(err == OCSD_OK) + err = pElem->getDecoderMngr()->attachPktSink(pElem->getDecoderHandle(), pDataInSink); break;
case OCSD_C_API_CB_PKT_MON: err = ocsd_create_pkt_mon_cb(pElem->getProtocol(),(FnDefPktDataMon)p_fn_callback_data,p_context,&pDataInSink); + if (err == OCSD_OK) + err = pElem->getDecoderMngr()->attachPktMonitor(pElem->getDecoderHandle(), pDataInSink); break;
default: @@ -215,15 +219,16 @@ OCSD_C_API ocsd_err_t ocsd_dt_attach_packet_callback( const dcd_tree_handle_t h
if(err == OCSD_OK) { - err = pElem->getDecoderMngr()->attachPktSink(pElem->getDecoderHandle(),pDataInSink); - if(err == OCSD_OK) + if (err == OCSD_OK) { // save object pointer for destruction later. std::map<dcd_tree_handle_t, lib_dt_data_list *>::iterator it; it = s_data_map.find(handle); - if(it != s_data_map.end()) + if (it != s_data_map.end()) it->second->cb_objs.push_back(pDataInSink); } + else + delete pDataInSink; } return err; } diff --git a/decoder/tests/source/c_api_pkt_print_test.c b/decoder/tests/source/c_api_pkt_print_test.c index bc1c870..a468556 100644 --- a/decoder/tests/source/c_api_pkt_print_test.c +++ b/decoder/tests/source/c_api_pkt_print_test.c @@ -55,6 +55,12 @@ /* include the C-API library header */ #include "c_api/opencsd_c_api.h"
+/* include the test external decoder factory and decoder types headers + - separate from the main library includes by definition as external decoder. +*/ +#include "ext_dcd_echo_test_fact.h" +#include "ext_dcd_echo_test.h" + /* path to test snapshots, relative to tests/bin/<plat>/<dbg|rel> build output dir */ #ifdef _WIN32 const char *default_path_to_snapshot = "..\..\..\snapshots\juno_r1_1\"; @@ -91,6 +97,10 @@ static test_op_t op = TEST_PKT_PRINT; // default operation is to packet print static ocsd_trace_protocol_t test_protocol = OCSD_PROTOCOL_ETMV4I; // ETMV4 protocl static uint8_t test_trc_id_override = 0x00; // no trace ID override.
+/* external decoder testing */ +static int test_extern_decoder = 0; /* test the external decoder infrastructure. */ +static ocsd_extern_dcd_fact_t *p_ext_fact; /* external decoder factory */ +#define EXT_DCD_NAME "ext_echo"
/* Process command line options - choose the operation to use for the test. */ static int process_cmd_line(int argc, char *argv[]) @@ -143,6 +153,10 @@ static int process_cmd_line(int argc, char *argv[]) use_region_file = 1; using_mem_acc_cb = 0; } + else if (strcmp(argv[idx], "-extern") == 0) + { + test_extern_decoder = 1; + } else if(strcmp(argv[idx],"-help") == 0) { return -1; @@ -396,11 +410,12 @@ static int print_data_array(const uint8_t *p_array, const int array_size, char * * Callback function to process packets and packet data from the monitor output of the * packet processor. Again print them to the library error logger. */ -void packet_monitor(const ocsd_datapath_op_t op, - const ocsd_trc_index_t index_sop, - const void *p_packet_in, - const uint32_t size, - const uint8_t *p_data) +void packet_monitor( void *context, + const ocsd_datapath_op_t op, + const ocsd_trc_index_t index_sop, + const void *p_packet_in, + const uint32_t size, + const uint8_t *p_data) { int offset = 0;
@@ -630,27 +645,57 @@ static ocsd_err_t create_decoder_stm(dcd_tree_handle_t dcd_tree_h) trace_config_stm.reg_feat1r = 0; trace_config_stm.hw_event = HwEvent_Unknown_Disabled;
- /* STM only has packet processor at present */ - if(op == TEST_PKT_PRINT) /* packet printing only */ - { - ret = create_generic_decoder(dcd_tree_h,OCSD_BUILTIN_DCD_STM,(void *)&trace_config_stm,0); - } - else + /* create a STM decoder - no context needed as we have a single stream to a single handler. */ + return create_generic_decoder(dcd_tree_h, OCSD_BUILTIN_DCD_STM, (void *)&trace_config_stm, 0); +} + +static ocsd_err_t create_decoder_extern(dcd_tree_handle_t dcd_tree_h) +{ + echo_dcd_cfg_t trace_cfg_ext; + + /* setup the custom configuration */ + trace_cfg_ext.cs_id = 0x010; + if (test_trc_id_override != 0) { - /* Full decode */ - /* not supported in library at present */ - printf("STM Full decode not supported in library at present. Packet print only\n"); - ret = OCSD_ERR_RDR_NO_DECODER; + trace_cfg_ext.cs_id = (uint32_t)test_trc_id_override; } - return ret; + + /* create an external decoder - no context needed as we have a single stream to a single handler. */ + return create_generic_decoder(dcd_tree_h, EXT_DCD_NAME, (void *)&trace_cfg_ext, 0); }
/************************************************************************/
+ocsd_err_t register_extern_decoder() +{ + ocsd_err_t err = OCSD_ERR_NO_PROTOCOL; + + p_ext_fact = ext_echo_get_dcd_fact(); + if (p_ext_fact) + { + err = ocsd_register_custom_decoder(EXT_DCD_NAME, p_ext_fact); + if (err == OCSD_OK) + test_protocol = p_ext_fact->protocol_id; + else + printf("External Decoder Registration: Failed to register decoder."); + } + else + printf("External Decoder Registration: Failed to get decoder factory."); + + return err; +} + /* create a decoder according to options */ static ocsd_err_t create_decoder(dcd_tree_handle_t dcd_tree_h) { ocsd_err_t err = OCSD_OK; + + /* extended for the external decoder testing*/ + if (test_extern_decoder) + err = register_extern_decoder(); + if (err != OCSD_OK) + return err; + switch(test_protocol) { case OCSD_PROTOCOL_ETMV4I: @@ -669,6 +714,12 @@ static ocsd_err_t create_decoder(dcd_tree_handle_t dcd_tree_h) err = create_decoder_ptm(dcd_tree_h); break;
+ /* we only register a single external decoder in this test, + so it will always be assigned the first custom protocol ID */ + case OCSD_PROTOCOL_CUSTOM_0: + err = create_decoder_extern(dcd_tree_h); + break; + default: err = OCSD_ERR_NO_PROTOCOL; break;
Move the custom packet to string function declaration to main C-API header were all the other custom decoder API functions are declared.
Updates to external_custom.md to match latest API types.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/docs/doxygen_config.dox | 2 +- decoder/docs/external_custom.md | 104 +++++++++++++--- decoder/include/c_api/ocsd_c_api_custom.h | 166 +++++++++++++++++++------ decoder/include/c_api/opencsd_c_api.h | 36 +++++- decoder/include/ocsd_if_types.h | 2 +- decoder/source/c_api/ocsd_c_api.cpp | 2 +- decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 6 +- 7 files changed, 255 insertions(+), 63 deletions(-)
diff --git a/decoder/docs/doxygen_config.dox b/decoder/docs/doxygen_config.dox index 7054396..acc6137 100644 --- a/decoder/docs/doxygen_config.dox +++ b/decoder/docs/doxygen_config.dox @@ -38,7 +38,7 @@ PROJECT_NAME = "OpenCSD - CoreSight Trace Decode Library" # could be handy for archiving the generated documentation or if some version # control system is used.
-PROJECT_NUMBER = 0.4 +PROJECT_NUMBER = 0.5
# Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/decoder/docs/external_custom.md b/decoder/docs/external_custom.md index 7efd65d..64e5191 100644 --- a/decoder/docs/external_custom.md +++ b/decoder/docs/external_custom.md @@ -7,7 +7,7 @@ Introduction ------------
An external custom decoder is one which decodes a CoreSight trace byte stream from a source other -than an ARM core which cannot be decoded by the standard builtin decoders within the library. +than an ARM core which cannot be decoded by the standard built-in decoders within the library.
An example of this may be a trace stream from a DSP device.
@@ -16,10 +16,11 @@ same way as the built-in decoders. This means that the external decoder can be c using the decode tree API, and will integrate seamlessly with any ARM processor decoders that are part of the same tree.
-An external decoder will be required to provide two standard structures:- +An external decoder will be required to use three standard structures:-
-- `ocsd_extern_dcd_fact_t` : this is a decoder "factory" that allows the creation of the custom decoders. -- `ocsd_extern_dcd_inst_t` : one of these structures exists for each instance of the custom decoder that is created. +- `ocsd_extern_dcd_fact_t` : This is a decoder "factory" that allows the creation of the custom decoders. +- `ocsd_extern_dcd_inst_t` : This structure provides decoder data to the library for a single decoder instance. +- `ocsd_extern_dcd_cb_fns` : This structure provides a set of callback functions allowing the decoder to use library functionality in the same way as built-in decoders.
These structures consist of data and function pointers to allow integration with the library infrastructure.
@@ -30,7 +31,10 @@ A single API function is provided to allow a decoder to be registered with the l
ocsd_err_t ocsd_register_custom_decoder(const char *name, ocsd_extern_dcd_fact_t *p_dcd_fact);
-This registers the custom decoder with the libary using the supplied name and factory structure. +This registers the custom decoder with the library using the supplied name and factory structure. +As part of the registration function the custom decoder will be assigned a protocol ID which may be used in +API functions requiring this parameter. + Once registered, the standard API functions used with the built-in decoders will work with the custom decoder.
The Factory Structure @@ -51,30 +55,94 @@ The mandatory functions that must be provided include:
-The Decoder Instance Structure ------------------------------- +Creating a Custom Decoder Instance +---------------------------------- + +Once the custom decoder factory has been registered with the library then using the decoder uses the standard creation API:- + +`ocsd_dt_create_decoder(const dcd_tree_handle_t handle, const char *decoder_name, const int create_flags, + const void *decoder_cfg, unsigned char *pCSID)` + + +This creates a decoder by type name in the current decode tree and attaches it to the trace data stream associated with a CoreSight trace ID extracted from +the trace configuration.
-This structure must be filled in by the `fnCreateCustomDecoder` function implmentation. +To create a custom decoder instance simply use the custom name and a pointer to the custom configuration structure.
-There is a single mandatory function in this structure: +Calling this on a custom decoder name will result in a call to the factor function `fnCreateCustomDecoder` function:- +`ocsd_err_t CreateCustomDecoder(const int create_flags, const void *decoder_cfg, const ocsd_extern_dcd_cb_fns *p_lib_callbacks, ocsd_extern_dcd_inst_t *p_decoder_inst)` + +This will first require that the `ocsd_extern_dcd_inst_t` structure is populated. + +There is are two mandatory function calls in this structure that may be called by the library
`fnTraceDataIn` : the decoder must provide this as this is called by the library to provide the raw trace data to the decoder. + + `fn_update_pkt_mon` : Allows the library to communicate when packet sink / packet monitor interfaces are attached to the decoder and in use. + +The decoder creation process will also fill in the additional information to allow the library to correctly call back into the custom decoder using the `decoder_handle` parameter. + +Secondly the library will provide a structure of callback functions - `ocsd_extern_dcd_cb_fns` - that the decoder can use to access standard library functionality. +This includes the standard error and message logging functions, the memory access and ARM instruction decode functions, plus the current output sink for generic +trace elements generated by the decoder. The decoder is not required to use these functions - indeed the ARM instruction decode will not be useful to none ARM +architecture decoders, but should where possible use these functions if being used as part of a combined ARM / custom decoder tree. This will simplify client +use of the external decoders. + +The `create_flags` parameter will describe the expected operational mode for the decoder. The flags are:- +- `OCSD_CREATE_FLG_PACKET_PROC` : Packet processing only - the decoder will split the incoming stream into protocol trace packets and output these. +- `OCSD_CREATE_FLG_FULL_DECODER` : Full decode - the decoder will split the incoming stream into protocol trace packets and further decode and analyse these to produce generic trace output which may describe the program flow. + +Finally the decoder creation function will interpret the custom configuration (`decoder_cfg`) and fill in the CoreSight Trace ID parameter `pCSID` +for this decoder instance. Decoder configuration structures describe registers and parameters used in programming up the trace source. The only +minimum requirement is that it is possible to extract a CoreSight trace ID from the configuration to allow the library to attach the correct byte +stream to the decoder. + + +Example : The echo_test decoder +-------------------------------- + +The echo_test decoder is provided to both test the C-API interfaces provided for using custom decoders and as a worked example for using these interfaces. + +This decoder is initialised and created by the `c_api_pkt_print_test` program when the `-extern` command line option is used. + +In order to use a custom decoder, the header files for that decoder must be included by the client as they are not part of the built-in provided by the standard library includes. + + #include "ext_dcd_echo_test_fact.h" // provides the ext_echo_get_dcd_fact() fn + #include "ext_dcd_echo_test.h" // provides the echo_dcd_cfg_t config structure. + +The `register_extern_decoder()` function in the test shows how simple the API is to use.
-There are a number of optional callback functions. These allow the custom decoder to call into the library -and use the same infrastructure as the builting decoders. The callbacks are registed with the custom decoder -as the libary performs initialisation of connections. +The implementation of the decoder provides an external function to get a factory structure.
-For example, the library will connect the error logging interface to all the decoders. The instance structure -contains the `fnRegisterErrLogCB` function pointer which will register two error logging callbacks with the custom -decoder, `fnLogErrorCB` and `fnLogMsgCB`. These can then be called by the custom decoder, and the errors and -messages will appear in the same place as for the built-in decoders. + p_ext_fact = ext_echo_get_dcd_fact(); + +Assuming this returns a structure then the decoder is registered by name.
-Where a custom decoder does not require or support the optional callbacks, then the registration function is set to -0 in the structure. + if (p_ext_fact) + { + err = ocsd_register_custom_decoder(EXT_DCD_NAME, p_ext_fact); + }
+After this the test uses the same code path as the built in decoders when testing the custom decoder. +The test function `ocsd_err_t create_decoder_extern(dcd_tree_handle_t dcd_tree_h)` is called if the test parameters indicate a custom decoder is needed. +This populates the custom configuration structure specific to the echo_test decoder (`echo_dcd_cfg_t`), then passes this plus the decoder name to the same `create_generic_decoder()` function used when testing the built in decoders.
+ static ocsd_err_t create_decoder_extern(dcd_tree_handle_t dcd_tree_h) + { + echo_dcd_cfg_t trace_cfg_ext;
+ /* setup the custom configuration */ + trace_cfg_ext.cs_id = 0x010; + if (test_trc_id_override != 0) + { + trace_cfg_ext.cs_id = (uint32_t)test_trc_id_override; + }
+ /* create an external decoder - no context needed as we have a single stream to a single handler. */ + return create_generic_decoder(dcd_tree_h, EXT_DCD_NAME, (void *)&trace_cfg_ext, 0); + }
+From the test program perspective, these are the only changes made to the test program to test this decoder. +The `create_generic_decoder()` then uses the normal C-API calls such as `ocsd_dt_create_decoder()` and `ocsd_dt_attach_packet_callback()` to hook the decoder into the decode tree infrastructure. diff --git a/decoder/include/c_api/ocsd_c_api_custom.h b/decoder/include/c_api/ocsd_c_api_custom.h index ea65fd3..ada0a68 100644 --- a/decoder/include/c_api/ocsd_c_api_custom.h +++ b/decoder/include/c_api/ocsd_c_api_custom.h @@ -36,9 +36,29 @@
#include "ocsd_c_api_types.h"
+ + /** @defgroup ocsd_ext_dcd OpenCSD Library : Custom External Decoder C-API + @brief Set of types, structures and interfaces for attaching custom decoders via the C-API + + These types, functions and structures define the required API between a custom external decoder + and the library, which will allow the decoder to interact with the library and use library + resources in the same way as the built-in decoders. + + The external decoder must implement:- + - A set of factory functions that allow the creation and destruction of decoder instances. + - A set of call-in and call-back functions plus data structures allowing interaction with the library. + + @{*/ + + +/**@name External decoder - Input Interfaces +@{*/ + /* Custom decoder C-API interface types. */
-/* Raw trace data input function - a decoder must have one of these */ +/** Raw trace data input function - a decoder must have one of these + Implements ITrcDataIn with the addition of a decoder handle to provide context in the decoder. + */ typedef ocsd_datapath_resp_t (* fnTraceDataIn)( const void *decoder_handle, const ocsd_datapath_op_t op, const ocsd_trc_index_t index, @@ -46,17 +66,57 @@ typedef ocsd_datapath_resp_t (* fnTraceDataIn)( const void *decoder_handle, const uint8_t *pDataBlock, uint32_t *numBytesProcessed);
-/* function to update the in-use flags for the packet sinks - must be implemented in the decoder */ +/** Function to update the in-use flags for the packet sinks + + Defines if the fnPktMonCB or fnPktDataSinkCB callbacks are in use by the library. + If so then it is expected that the decoder should call them when trace protocol packets are generated. + + This function must be implemented in the decoder. + + @param decoder_handle : handle for decoder accessed by this call. + @param flags: Values indicating interfaces in use / not in use. [ OCSD_CUST_DCD_PKT_CB_USE_MON or OCSD_CUST_DCD_PKT_CB_USE_SINK] +*/ typedef void (* fnUpdatePktMonFlags)(const void *decoder_handle, const int flags);
-/* callback function to connect into the generic element output point */ + +/** Flag to indicate the the packet monitor (fnPktMonCB) is in use in the library */ +#define OCSD_CUST_DCD_PKT_CB_USE_MON 0x1 + +/** Flag to indicate the the packet sink (fnPktDataSinkCB) is in use in the library - only if trace packet processing only mode. */ +#define OCSD_CUST_DCD_PKT_CB_USE_SINK 0x2 + +/** Owned by the library instance object, this structure is filled in by the ocsd_extern_dcd_fact_t createDecoder() function. */ +typedef struct _ocsd_extern_dcd_inst { + /* Mandatory decoder call back functions - library initialisation will fail without these. */ + fnTraceDataIn fn_data_in; /**< raw trace data input function to decoder */ + fnUpdatePktMonFlags fn_update_pkt_mon; /**< update the packet monitor / sink usage flags */ + + /* Decoder instance data */ + void *decoder_handle; /**< Instance handle for the decoder - used by library to call the decoder call in functions */ + char *p_decoder_name; /**< type name of the decoder - may be used in logging */ + uint8_t cs_id; /**< Coresight ID for the instance - extracted from the config on creation. */ + +} ocsd_extern_dcd_inst_t; + +/** @}*/ + + +/**@name External decoder - Callback Interfaces +@{*/ + + +/** callback function to connect into the generic element output point + Implements ITrcGenElemIn::TraceElemIn with addition of library context pointer. + */ typedef ocsd_datapath_resp_t (* fnGenElemOpCB)( const void *lib_context, const ocsd_trc_index_t index_sop, const uint8_t trc_chan_id, const ocsd_generic_trace_elem *elem);
-/* callback functions to connect into the library error logging mechanism */ +/** callback functions to connect into the library error logging mechanism + Implements ITraceErrorLog::LogError with addition of library context pointer. +*/ typedef void (* fnLogErrorCB)( const void *lib_context, const ocsd_err_severity_t filter_level, const ocsd_err_t code, @@ -64,12 +124,19 @@ typedef void (* fnLogErrorCB)( const void *lib_context, const uint8_t chan_id, const char *pMsg);
+/** callback functions to connect into the library error logging mechanism + Implements ITraceErrorLog::LogMessage with addition of library context pointer. +*/ typedef void (* fnLogMsgCB)(const void *lib_context, const ocsd_err_severity_t filter_level, const char *msg);
-/* callback function to connect an ARM instruction decoder */ +/** callback function to connect an ARM instruction decoder + Implements IInstrDecode::DecodeInstruction with addition of library context pointer. +*/ typedef ocsd_err_t (* fnDecodeArmInstCB)(const void *lib_context, ocsd_instr_info *instr_info);
-/* callback function to connect the memory accessor interface */ +/** callback function to connect the memory accessor interface + Implements ITargetMemAccess::ReadTargetMemory with addition of library context pointer. +*/ typedef ocsd_err_t (* fnMemAccessCB)(const void *lib_context, const ocsd_vaddr_t address, const uint8_t cs_trace_id, @@ -77,7 +144,9 @@ typedef ocsd_err_t (* fnMemAccessCB)(const void *lib_context, uint32_t *num_bytes, uint8_t *p_buffer);
-/* callback function to connect to the packet monitor interface of the packet processor */ +/** callback function to connect to the packet monitor interface of the packet processor + Implements IPktRawDataMon::RawPacketDataMon <void> with addition of library context pointer. +*/ typedef void (* fnPktMonCB)( const void *lib_context, const ocsd_datapath_op_t op, const ocsd_trc_index_t index_sop, @@ -85,8 +154,11 @@ typedef void (* fnPktMonCB)( const void *lib_context, const uint32_t size, const uint8_t *p_data);
-/* callback function to connect to the packet sink interface, on the main decode - data path - use if decoder created as packet processor only */ +/** callback function to connect to the packet sink interface, on the main decode + data path - use if decoder created as packet processor only + + Implements IPktDataIn::PacketDataIn <void> with addition of library context pointer. +*/ typedef ocsd_datapath_resp_t (* fnPktDataSinkCB)( const void *lib_context, const ocsd_datapath_op_t op, const ocsd_trc_index_t index_sop, @@ -105,34 +177,57 @@ typedef struct _ocsd_extern_dcd_cb_fns { /* CB in use flags. */ int packetCBFlags; /**< Flags to indicate if the packet sink / packet monitor callbacks are in use. ( OCSD_CUST_DCD_PKT_CB_USE_MON / OCSD_CUST_DCD_PKT_CB_USE_SINK) */ /* library context */ - const void *lib_context; /** library context pointer - use in callbacks to allow the library to load the correct context data. */ + const void *lib_context; /**< library context pointer - use in callbacks to allow the library to load the correct context data. */ } ocsd_extern_dcd_cb_fns;
-/** Flag to indicate the the packet monitor is in use in the library */ -#define OCSD_CUST_DCD_PKT_CB_USE_MON 0x1 -/** Flag to indicate the the packet sink is in use in the library */ -#define OCSD_CUST_DCD_PKT_CB_USE_SINK 0x2 +/** @}*/
-/** Owned by the library instance object, this structure is filled in by the ocsd_extern_dcd_fact_t createDecoder() function. */ -typedef struct _ocsd_extern_dcd_inst { - /* Mandatory decoder call back functions - library initialisation will fail without these. */ - fnTraceDataIn fn_data_in; /**< raw trace data input function to decoder */ - fnUpdatePktMonFlags fn_update_pkt_mon; /**< update the packet monitor / sink usage flags */ +/**@name External decoder - Decoder Factory +@{*/
- /* Decoder instance data */ - void *decoder_handle; /**< Instance handle for the decoder - used by library to call the decoder CB functions */ - char *p_decoder_name; /**< type name of the decoder - may be used in logging */ - uint8_t cs_id; /**< Coresight ID for the instance - extracted from the config on creation. */ +/** Function to create a decoder instance
-} ocsd_extern_dcd_inst_t; + Create a decoder instance according to the create_flags parameter and the supplied decoder_cfg structure. + Fill in the p_decoder_inst structure, copy the p_lib_callbacks information for use in the decoder instance. + + Create flags can be: + - OCSD_CREATE_FLG_PACKET_PROC: decoder will split the incoming trace into trace protocol packets and not further decode them. fnPktDataSinkCB likely to be in use. + - OCSD_CREATE_FLG_FULL_DECODER: decoder will split the incoming trace into trace protocol packets and further decode them to recreate program flow or other generic trace output.
-/** function to create a decoder instance - fills in the decoder struct supplied. */ + @param create_flags : Sets the decoder operating mode. + @param *decoder_cfg : Hardware specific configuration for this trace element. + @param *p_lib_callbacks : Library callbacks plus context pointer. + @param *p_decoder_inst : Structure representing the new decoder instance being created. Filled in by create function to contain handle and call-in functions for the library. + + @return ocsd_err_t : Library error code - RCDTL_OK if successful +*/ typedef ocsd_err_t (* fnCreateCustomDecoder)(const int create_flags, const void *decoder_cfg, const ocsd_extern_dcd_cb_fns *p_lib_callbacks, ocsd_extern_dcd_inst_t *p_decoder_inst); -/** Function to destroy a decoder instance - indicated by decoder handle */ + +/** Function to destroy a decoder instance indicated by decoder handle. + + @param decoder_handle : Instance handle for decoder. + + @return ocsd_err_t : Library error code - RCDTL_OK if successful +*/ typedef ocsd_err_t (* fnDestroyCustomDecoder)(const void *decoder_handle); -/** Function to extract the CoreSight Trace ID from the configuration structure */ + +/** Function to extract the CoreSight Trace ID from the configuration structure. + + @param *decoder_cfg : Hardware specific configuration for this trace element. + @parma *p_csid : location to write CoreSight Trace ID value. + + @return ocsd_err_t : Library error code - RCDTL_OK if successful +*/ typedef ocsd_err_t (* fnGetCSIDFromConfig)(const void *decoder_cfg, unsigned char *p_csid); -/** Function to convert a protocol specific trace packet to human readable string */ + +/** Function to convert a protocol specific trace packet to human readable string + + @param *trc_pkt : protocol specific packet structure. + @param *buffer : buffer to fill with string. + @param buflen : length of string buffer. + + @return ocsd_err_t : Library error code - RCDTL_OK if successful +*/ typedef ocsd_err_t (* fnPacketToString)(const void *trc_pkt, char *buffer, const int buflen);
/** set of functions and callbacks to create an extern custom decoder in the library @@ -140,19 +235,18 @@ typedef ocsd_err_t (* fnPacketToString)(const void *trc_pkt, char *buffer, const then decoders of the type can be created on the decode tree. */ typedef struct _ocsd_extern_dcd_fact { - /* mandatory functions */ - fnCreateCustomDecoder createDecoder; /**< [required] Function pointer to create a decoder instance. */ - fnDestroyCustomDecoder destroyDecoder; /**< [required] Function pointer to destroy a decoder instance. */ - fnGetCSIDFromConfig csidFromConfig; /**< [required] Function pointer to extract the CSID from a config structure */ - - /* optional functions */ - fnPacketToString pktToString; /**< [optional] function pointer to print a trace packet in this decoder */ + fnCreateCustomDecoder createDecoder; /**< Function pointer to create a decoder instance. */ + fnDestroyCustomDecoder destroyDecoder; /**< Function pointer to destroy a decoder instance. */ + fnGetCSIDFromConfig csidFromConfig; /**< Function pointer to extract the CSID from a config structure */ + fnPacketToString pktToString; /**< Function pointer to print a trace protocol packet in this decoder */
ocsd_trace_protocol_t protocol_id; /**< protocol ID assigned during registration. */ } ocsd_extern_dcd_fact_t;
+/** @}*/ + +/** @}*/
-ocsd_err_t ocsd_cust_protocol_to_str(const ocsd_trace_protocol_t pkt_protocol, const void *trc_pkt, char *buffer, const int buflen);
#endif // ARM_OCSD_C_API_CUSTOM_H_INCLUDED
diff --git a/decoder/include/c_api/opencsd_c_api.h b/decoder/include/c_api/opencsd_c_api.h index adb3609..798551b 100644 --- a/decoder/include/c_api/opencsd_c_api.h +++ b/decoder/include/c_api/opencsd_c_api.h @@ -386,11 +386,43 @@ OCSD_C_API void ocsd_gen_elem_init(ocsd_generic_trace_elem *p_pkt, const ocsd_ge
/** @}*/
-/** register a custom decoder with the library */ +/** @name Custom Decoder API functions + +@{*/ + +/** Register a custom decoder with the library + + @param *name : Name under which to register the decoder. + @param *p_dcd_fact : Custom decoder factory structure. + + @return ocsd_err_t : Library error code - RCDTL_OK if successful. +*/ OCSD_C_API ocsd_err_t ocsd_register_custom_decoder(const char *name, ocsd_extern_dcd_fact_t *p_dcd_fact); -/** clear all registered decoders - library cleanup */ + +/** Clear all registered decoders - library cleanup + + @return ocsd_err_t : Library error code - RCDTL_OK if successful. +*/ OCSD_C_API ocsd_err_t ocsd_deregister_decoders();
+/** Get a string representation of a custom protocol packet. + + Specific function to extract the packet string for a custom protocol ID only. Custom IDs are allocated to decoder factories + during the ocsd_register_custom_decoder() process. + + This function is called by ocsd_pkt_str() when the incoming protocol is a custom ID. + + @param pkt_protocol : Packet protocol type - must be in the custom ID range ( >= OCSD_PROTOCOL_CUSTOM_0, < OCSD_PROTOCOL_END) + @param *p_pkt : pointer to a valid packet structure of protocol type. cast to void *. + @param *buffer : character buffer for string. + @param buffer_size : size of character buffer. + + @return ocsd_err_t : Library error code - RCDTL_OK if successful, OCSD_ERR_NO_PROTOCOL if input ID not in custom range or not in use. +*/ +OCSD_C_API ocsd_err_t ocsd_cust_protocol_to_str(const ocsd_trace_protocol_t pkt_protocol, const void *trc_pkt, char *buffer, const int buflen); + +/** @}*/ +
/** @}*/
diff --git a/decoder/include/ocsd_if_types.h b/decoder/include/ocsd_if_types.h index 15425e1..14056e6 100644 --- a/decoder/include/ocsd_if_types.h +++ b/decoder/include/ocsd_if_types.h @@ -539,7 +539,7 @@ typedef enum _ocsd_trace_protocol_t { #define OCSD_PROTOCOL_IS_BUILTIN(P) ((P > OCSD_PROTOCOL_UNKNOWN) && (P < OCSD_PROTOCOL_BUILTIN_END))
/** Test if protocol type is a custom external registered decoder */ -#define OCSD_PROTOCOL_IS_CUSTOM(P) ((P > OCSD_PROTOCOL_CUSTOM_0) && (P < OCSD_PROTOCOL_END )) +#define OCSD_PROTOCOL_IS_CUSTOM(P) ((P >= OCSD_PROTOCOL_CUSTOM_0) && (P < OCSD_PROTOCOL_END ))
/** @}*/
diff --git a/decoder/source/c_api/ocsd_c_api.cpp b/decoder/source/c_api/ocsd_c_api.cpp index e38167f..5738798 100644 --- a/decoder/source/c_api/ocsd_c_api.cpp +++ b/decoder/source/c_api/ocsd_c_api.cpp @@ -309,7 +309,7 @@ OCSD_C_API ocsd_err_t ocsd_pkt_str(const ocsd_trace_protocol_t pkt_protocol, con break;
default: - if ((pkt_protocol >= OCSD_PROTOCOL_CUSTOM_0) && (pkt_protocol < OCSD_PROTOCOL_END)) + if (OCSD_PROTOCOL_IS_CUSTOM(pkt_protocol)) err = ocsd_cust_protocol_to_str(pkt_protocol, p_pkt, buffer, buffer_size); else err = OCSD_ERR_NO_PROTOCOL; diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp index 64f1f24..f06e1c0 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp @@ -88,13 +88,11 @@ OCSD_C_API ocsd_err_t ocsd_deregister_decoders() return OCSD_OK; }
- - -ocsd_err_t ocsd_cust_protocol_to_str(const ocsd_trace_protocol_t pkt_protocol, const void *trc_pkt, char *buffer, const int buflen) +OCSD_C_API ocsd_err_t ocsd_cust_protocol_to_str(const ocsd_trace_protocol_t pkt_protocol, const void *trc_pkt, char *buffer, const int buflen) { OcsdLibDcdRegister *pRegister = OcsdLibDcdRegister::getDecoderRegister(); IDecoderMngr *p_mngr = 0; - if (pRegister->getDecoderMngrByType(pkt_protocol, &p_mngr) == OCSD_OK) + if (OCSD_PROTOCOL_IS_CUSTOM(pkt_protocol) && (pRegister->getDecoderMngrByType(pkt_protocol, &p_mngr) == OCSD_OK)) { CustomDcdMngrWrapper *pWrapper = static_cast<CustomDcdMngrWrapper *>(p_mngr); pWrapper->pktToString(trc_pkt, buffer, buflen);
Document describing the trace and debug snapshot file formats used in the tests/snapshots directory.
Doxygen comment updates.
README.md and test_progs.md documentation updates.
Signed-off-by: Mike Leach mike.leach@linaro.org --- README.md | 8 +++++--- ...RM Trace and Debug Snapshot file format 0v2.pdf | Bin 0 -> 435644 bytes decoder/docs/test_progs.md | 21 ++++++++++++++++++++- decoder/include/c_api/ocsd_c_api_cust_impl.h | 15 ++++++++++++++- decoder/tests/source/c_api_pkt_print_test.c | 6 ++---- 5 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 decoder/docs/specs/ARM Trace and Debug Snapshot file format 0v2.pdf
diff --git a/README.md b/README.md index 5b2bc9d..2e53d48 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Releases will appear on the master branch in the git repository with an appropri CoreSight Trace Component Support. ----------------------------------
-_Current Version 0.4.2_ +_Current Version 0.5.0_
### Current support:
@@ -34,11 +34,12 @@ _Current Version 0.4.2_ - PTM instruction trace - packet processing and packet decode. - ETMv3 instruction trace - packet processing and packet decode. - ETMv3 data trace - packet processing. -- STM software trace - packet processing. +- STM software trace - packet processing and packet decode. + +- External Decoders - support for addition of external / custom decoders into the library.
### Support to be added:
-- STM software trace - packet decode. - ITM software trace - packet processing and decode. - ETMv3 data trace - packet decode. - ETMv4 data trace - packet processing and decode. @@ -100,6 +101,7 @@ Version and Modification Information - _Version 0.4_ : Library development - updated decode tree and C-API for generic decoder handling. Switch to semantic versioning. - _Version 0.4.1_: Minor Update & Bugfixes - fix to PTM decoder, ID checking on test program, adds NULL_TS support in STM packet processor. - _Version 0.4.2_: Minor Update - Update to documentation for perf usage in 4.8 kernel branch. +- _Version 0.5.0_: Library Development - external decoder support. STM full decode.
Licence Information =================== diff --git a/decoder/docs/specs/ARM Trace and Debug Snapshot file format 0v2.pdf b/decoder/docs/specs/ARM Trace and Debug Snapshot file format 0v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7a9b16f8291bc55b46a1516009d7f73c090e64b2 GIT binary patch literal 435644 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%0Diq={x8puH)U0T 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%0DZk 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%0D_s=3t}Jv`+)}p*b`D95&J?0 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%0A1MMe+Oe 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%0D}P=nbI!FE2l() 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%0DH(3%%<8pjSa^(h4?aTXUo4j<z}?x*>6X*z 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%0DE7nSx!T52_T**8$ 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
literal 0 HcmV?d00001
diff --git a/decoder/docs/test_progs.md b/decoder/docs/test_progs.md index 64cb5d5..51cb526 100644 --- a/decoder/docs/test_progs.md +++ b/decoder/docs/test_progs.md @@ -12,8 +12,10 @@ There are currently two test programs built alongside the library. and decodes all or a chosen set of trace sources from within the trace data buffers in the library. Command line parameters allow the test program to be controlled.
-2. `simple_pkt_print_c_api` : This program tests the "C" API functions, using hardcoded tests +2. `c_api_pkt_print_test` : This program tests the "C" API functions, using hardcoded tests based on the same "snapshots" used for the C++ library. Limited user control for this program. +This can also run tests using the external test decoder to validate the external decoder API. +See [external_custom.md](@ref custom_decoders) for details.
These programs are both built at the same time as the library for the same set of platforms. See [build_libs.md](@ref build_lib) for build details. @@ -177,4 +179,21 @@ Idx:17300; ID:10; RCTDL_GEN_TRC_ELEM_ADDR_NACC( 0xffffffc000117cf0 )
~~~~~~~~~~~~~~~~
+The `c_api_pkt_print_test` program. +-----------------------------------
+Program tests the C-API infrastructure, including as an option the external decoder support. + +Limited to decoding trace from a single CoreSight ID. Uses the same "snapshots" as the C++ test program, but using hardcoded path values. + +__Command Line Options__ + +By default the program will run the single CoreSight ID of 0x10 in packet processing output mode using the ETMv4 decoder on the Juno snapshot. + +- `-id <n>` : Change the ID used for the test. +- `-etmv3` : Test the ETMv3 decoder - uses the TC2 snapshot. +- `-ptm` : Test the PTM decoder - uses the TC2 snapshot. +- `-stm` : Test the STM decoder - uses juno STM only snapshot. +- `-extern` : Use the 'echo_test' external decoder to test the custom decoder API. +- `-decode` : Output trace protocol packets and full decode generic packets. +- `-decode_only` : Output full decode generic packets only. diff --git a/decoder/include/c_api/ocsd_c_api_cust_impl.h b/decoder/include/c_api/ocsd_c_api_cust_impl.h index dfecc78..719fe72 100644 --- a/decoder/include/c_api/ocsd_c_api_cust_impl.h +++ b/decoder/include/c_api/ocsd_c_api_cust_impl.h @@ -37,7 +37,16 @@ #include "c_api/ocsd_c_api_types.h" #include "c_api/ocsd_c_api_custom.h"
-/* inline functions to call the various CB functionality */ +/** @addtogroup ocsd_ext_dcd +@{*/ + +/**@name External decoder - Inline utility functions. + @brief inline functions used in decoders to call the various library callback functionality. + + Functions manipulate and use the ocsd_extern_dcd_cb_fns structure to call into the library, + with appropriate checking for initialisation and usage flags. + +@{*/
inline ocsd_datapath_resp_t lib_cb_GenElemOp(const ocsd_extern_dcd_cb_fns *callbacks, const ocsd_trc_index_t index_sop, @@ -142,4 +151,8 @@ inline void lib_cb_updatePktCBFlags(ocsd_extern_dcd_cb_fns *callbacks, const int callbacks->packetCBFlags = newFlags; }
+/** @}*/ + +/** @}*/ + #endif /* ARM_OCSD_C_API_CUST_IMPL_H_INCLUDED */ diff --git a/decoder/tests/source/c_api_pkt_print_test.c b/decoder/tests/source/c_api_pkt_print_test.c index a468556..ad84bdf 100644 --- a/decoder/tests/source/c_api_pkt_print_test.c +++ b/decoder/tests/source/c_api_pkt_print_test.c @@ -170,14 +170,12 @@ static int process_cmd_line(int argc, char *argv[])
static void print_cmd_line_help() { - printf("Usage:\n-etmv3|-stm|-ptm : choose protocol (one only, default etmv4)\n"); + printf("Usage:\n-etmv3|-stm|-ptm|-extern : choose protocol (one only, default etmv4)\n"); printf("-id <ID> : decode source for id <ID> (default 0x10)\n"); printf("-decode | -decode_only : full decode + trace packets / full decode packets only (default trace packets only)\n"); - printf("-test_region_file | -test_cb : mem accessor - test multi region file API | test callback API (default single memroy file)\n\n"); + printf("-test_region_file | -test_cb : mem accessor - test multi region file API | test callback API (default single memory file)\n\n"); }
- - /************************************************************************/ /* Memory accessor functionality */ /************************************************************************/
Fixup for windows release builds.
Adds in Linux build for the echo_test decoder and necessary updates to test makefile and master makefiles.
Signed-off-by: Mike Leach mike.leach@linaro.org --- decoder/build/linux/makefile | 1 + decoder/build/linux/rctdl_c_api_lib/makefile | 3 +- decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 4 +- .../build/linux/c_api_pkt_print_test/makefile | 4 +- .../tests/build/linux/echo_test_dcd_lib/makefile | 83 ++++++++++++++++++++++ .../c_api_pkt_print_test.vcxproj | 6 +- .../ext_dcd_echo_test/ext_dcd_echo_test.vcxproj | 4 ++ 7 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 decoder/tests/build/linux/echo_test_dcd_lib/makefile
diff --git a/decoder/build/linux/makefile b/decoder/build/linux/makefile index b86fafe..23c6911 100644 --- a/decoder/build/linux/makefile +++ b/decoder/build/linux/makefile @@ -155,6 +155,7 @@ $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so: $(LIB_BASE_NAME)_lib
.PHONY: tests tests: libs + cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && make cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && make cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && make cd $(OCSD_ROOT)/tests/build/linux/simple_pkt_print_c_api && make diff --git a/decoder/build/linux/rctdl_c_api_lib/makefile b/decoder/build/linux/rctdl_c_api_lib/makefile index dfebe09..6f4c0e7 100644 --- a/decoder/build/linux/rctdl_c_api_lib/makefile +++ b/decoder/build/linux/rctdl_c_api_lib/makefile @@ -50,7 +50,8 @@ CPP_INCLUDES= \ -I$(OCSD_SOURCE)/c_api
OBJECTS=$(BUILD_DIR)/ocsd_c_api.o \ - $(BUILD_DIR)/ocsd_c_api_deprc_fn.o + $(BUILD_DIR)/ocsd_c_api_deprc_fn.o \ + $(BUILD_DIR)/ocsd_c_api_custom_obj.o
all: build_dir $(OBJECTS) diff --git a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp index f06e1c0..70330e2 100644 --- a/decoder/source/c_api/ocsd_c_api_custom_obj.cpp +++ b/decoder/source/c_api/ocsd_c_api_custom_obj.cpp @@ -308,9 +308,9 @@ void LogErrorCB(const void *lib_context, const ocsd_err_severity_t filter_level, if (lib_context) { if(pMsg) - ((CustomDecoderWrapper *)lib_context)->LogError(&ocsdError(filter_level, code, idx, chan_id, std::string(pMsg))); + ((CustomDecoderWrapper *)lib_context)->LogError(ocsdError(filter_level, code, idx, chan_id, std::string(pMsg))); else - ((CustomDecoderWrapper *)lib_context)->LogError(&ocsdError(filter_level, code, idx, chan_id)); + ((CustomDecoderWrapper *)lib_context)->LogError(ocsdError(filter_level, code, idx, chan_id)); } }
diff --git a/decoder/tests/build/linux/c_api_pkt_print_test/makefile b/decoder/tests/build/linux/c_api_pkt_print_test/makefile index 01d4660..1139af6 100644 --- a/decoder/tests/build/linux/c_api_pkt_print_test/makefile +++ b/decoder/tests/build/linux/c_api_pkt_print_test/makefile @@ -45,11 +45,13 @@ VPATH = $(OCSD_TESTS)/source
CC_INCLUDES = \ -I$(OCSD_TESTS)/source \ + -I$(OCSD_TESTS)/ext_dcd_test_eg/c_api_echo_test \ -I$(OCSD_INCLUDE)
OBJECTS = $(BUILD_DIR)/c_api_pkt_print_test.o
-LIBS = -L$(LIB_TARGET_DIR) -l$(LIB_BASE_NAME) -l$(LIB_CAPI_NAME) +LIBS = -L$(LIB_TARGET_DIR) -l$(LIB_BASE_NAME) -l$(LIB_CAPI_NAME) \ + -L$(LIB_TEST_TARGET_DIR) -l_echo_test_dcd
all: build_dir test_app copy_libs
diff --git a/decoder/tests/build/linux/echo_test_dcd_lib/makefile b/decoder/tests/build/linux/echo_test_dcd_lib/makefile new file mode 100644 index 0000000..54d7353 --- /dev/null +++ b/decoder/tests/build/linux/echo_test_dcd_lib/makefile @@ -0,0 +1,83 @@ +######################################################## +# Copyright 2016 ARM Limited. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################# +# OpenCSD - makefile for external echo_test decoder. +# + +CC := $(MASTER_CC) +LINKER := $(MASTER_LINKER) +LIB := $(MASTER_LIB) + +CC_FLAGS := $(MASTER_CC_FLAGS) -fpic -Wno-switch +LIB_FLAGS := $(MASTER_LIB_FLAGS) +LINKER_FLAGS := $(MASTER_LINKER_FLAGS) -shared + +LIB_NAME = lib_echo_test_dcd + +BUILD_DIR=./$(PLAT_DIR) + +ECHO_TEST_PATH=$(OCSD_TESTS)/ext_dcd_test_eg/c_api_echo_test + +VPATH = $(ECHO_TEST_PATH) + +CC_INCLUDES = \ + -I$(ECHO_TEST_PATH) \ + -I$(OCSD_INCLUDE) + +OBJECTS = $(BUILD_DIR)/ext_dcd_echo_test.o \ + $(BUILD_DIR)/ext_dcd_echo_test_fact.o + +all: build_dir $(OBJECTS) $(LIB_TEST_TARGET_DIR)/$(LIB_NAME).a + +test_app: $(OBJECTS) $(BIN_TEST_TARGET_DIR)/$(PROG) + +$(LIB_TEST_TARGET_DIR)/$(LIB_NAME).a: + mkdir -p $(LIB_TEST_TARGET_DIR) + $(LIB) $(LIB_FLAGS) $(LIB_TEST_TARGET_DIR)/$(LIB_NAME).a $(OBJECTS) + +build_dir: + mkdir -p $(BUILD_DIR) + +.PHONY: copy_libs + +copy_libs: + cp $(LIB_TARGET_DIR)/*.so $(BIN_TEST_TARGET_DIR)/. + + +#### build rules +$(BUILD_DIR)/%.o : %.c + $(CC) $(CC_FLAGS) $(CC_INCLUDES) $< -o $@ + +#### clean +.PHONY: clean +clean: + rm -f $(OBJECTS) + rm -f $(LIB_TEST_TARGET_DIR)/$(LIB_NAME).a + +# end of file makefile diff --git a/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj b/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj index beb583b..2de00d4 100644 --- a/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj +++ b/decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj @@ -250,15 +250,15 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;OCSD_USE_STATIC_C_API;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>........\include</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>........\include;........\tests\ext_dcd_test_eg\c_api_echo_test</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> - <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>........\lib\win$(PlatformArchitecture)\rel;........\tests\lib\win$(PlatformArchitecture)\rel</AdditionalLibraryDirectories> + <AdditionalDependencies>lib$(LIB_CAPI_NAME).lib;lib$(LIB_BASE_NAME).lib;ext_dcd_echo_test.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-dll|Win32'"> diff --git a/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj b/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj index 7d1aaa7..faf8aaa 100644 --- a/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj +++ b/decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj @@ -72,6 +72,9 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <OutDir>......\lib\win$(PlatformArchitecture)\dbg</OutDir> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>......\lib\win$(PlatformArchitecture)\rel</OutDir> + </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <PrecompiledHeader> @@ -109,6 +112,7 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>........\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem>
On Tue, Nov 22, 2016 at 09:27:59AM +0000, Mike Leach wrote:
OpenCSD: Patch set for v0.5.0 release.
External Decoder C-API plus examples and documentation. This allows custom decoders to be attached into the library infrastructure.
STM full decoder - outputs generic software trace packets.
Mike Leach (13): opencsd: Custom external decoder C-API (initial development). opencsd: Initial objects and types for STM packet decode. opencsd: Library Version defines moved to separate header file. opencsd: STM full decoder implementation opencsd: Custom External Decoder C-API (adds factory and wrappers) opencsd: A "test" decoder to prove the external decoder API opencsd: Custom Ext Decoder C-API (adds pkt monitor and sink CB) opencsd: Custom Ext Decoder C-API (adds test decoder) opencsd: adds VS2015 build files. opencsd: Modify C-API test program to use echo_test decoder. opencsd: Move custom packet string C-API to main header opencsd: Documentation and Doxygen comment updates. opencsd: Linux and windows build updates
.gitignore | 2 + README.md | 8 +- decoder/build/linux/makefile | 1 + decoder/build/linux/rctdl_c_api_lib/makefile | 3 +- decoder/build/linux/ref_trace_decode_lib/makefile | 3 +- decoder/build/win-vs2015/opencsd.props | 20 + .../rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 329 +++++++++++++++ .../rctdl_c_api_lib.vcxproj.filters | 54 +++ .../ref_trace_decode_lib/ref_trace_decode_lib.sln | 147 +++++++ .../ref_trace_decode_lib.vcxproj | 440 ++++++++++++++++++++ .../ref_trace_decode_lib.vcxproj.filters | 449 ++++++++++++++++++++ .../win/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 3 + .../rctdl_c_api_lib.vcxproj.filters | 9 + .../ref_trace_decode_lib.vcxproj | 4 + .../ref_trace_decode_lib.vcxproj.filters | 12 + decoder/docs/doxygen_config.dox | 5 +- decoder/docs/external_custom.md | 148 +++++++ ...RM Trace and Debug Snapshot file format 0v2.pdf | Bin 0 -> 435644 bytes decoder/docs/test_progs.md | 21 +- decoder/include/c_api/ocsd_c_api_cust_fact.h | 54 +++ decoder/include/c_api/ocsd_c_api_cust_impl.h | 158 ++++++++ decoder/include/c_api/ocsd_c_api_custom.h | 253 ++++++++++++ decoder/include/c_api/opencsd_c_api.h | 45 ++ decoder/include/common/ocsd_lib_dcd_register.h | 9 + decoder/include/common/trc_component.h | 1 + decoder/include/common/trc_gen_elem.h | 29 +- decoder/include/ocsd_if_types.h | 75 +++- decoder/include/ocsd_if_version.h | 65 +++ decoder/include/stm/trc_dcd_mngr_stm.h | 8 +- decoder/include/stm/trc_pkt_decode_stm.h | 103 +++++ decoder/include/stm/trc_pkt_elem_stm.h | 4 +- decoder/include/stm/trc_pkt_types_stm.h | 2 +- decoder/include/trc_gen_elem_types.h | 32 +- decoder/source/c_api/ocsd_c_api.cpp | 38 +- decoder/source/c_api/ocsd_c_api_custom_obj.cpp | 431 ++++++++++++++++++++ decoder/source/c_api/ocsd_c_api_custom_obj.h | 189 +++++++++ decoder/source/c_api/ocsd_c_api_obj.h | 51 +++ decoder/source/ocsd_error.cpp | 1 + decoder/source/ocsd_lib_dcd_register.cpp | 61 ++- decoder/source/ocsd_version.cpp | 2 +- decoder/source/stm/trc_pkt_decode_stm.cpp | 299 ++++++++++++++ decoder/source/stm/trc_pkt_proc_stm.cpp | 5 +- decoder/source/trc_component.cpp | 13 +- decoder/source/trc_gen_elem.cpp | 70 +++- decoder/source/trc_printable_elem.cpp | 4 +- .../build/linux/c_api_pkt_print_test/makefile | 4 +- .../tests/build/linux/echo_test_dcd_lib/makefile | 83 ++++ .../c_api_pkt_print_test.vcxproj | 333 +++++++++++++++ .../c_api_pkt_print_test.vcxproj.filters | 22 + .../ext_dcd_echo_test/ext_dcd_echo_test.vcxproj | 152 +++++++ .../ext_dcd_echo_test.vcxproj.filters | 33 ++ .../simple_pkt_print_c_api.vcxproj | 333 +++++++++++++++ .../simple_pkt_print_c_api.vcxproj.filters | 22 + .../snapshot_parser_lib.vcxproj | 318 +++++++++++++++ .../snapshot_parser_lib.vcxproj.filters | 72 ++++ .../trc_pkt_lister/trc_pkt_lister.vcxproj | 306 ++++++++++++++ .../trc_pkt_lister/trc_pkt_lister.vcxproj.filters | 39 ++ .../c_api_echo_test/ext_dcd_echo_test.c | 451 +++++++++++++++++++++ .../c_api_echo_test/ext_dcd_echo_test.h | 93 +++++ .../c_api_echo_test/ext_dcd_echo_test_fact.c | 104 +++++ .../c_api_echo_test/ext_dcd_echo_test_fact.h | 48 +++ decoder/tests/source/c_api_pkt_print_test.c | 89 +++- 62 files changed, 6063 insertions(+), 99 deletions(-) create mode 100644 decoder/build/win-vs2015/opencsd.props create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters create mode 100644 decoder/docs/external_custom.md create mode 100644 decoder/docs/specs/ARM Trace and Debug Snapshot file format 0v2.pdf create mode 100644 decoder/include/c_api/ocsd_c_api_cust_fact.h create mode 100644 decoder/include/c_api/ocsd_c_api_cust_impl.h create mode 100644 decoder/include/c_api/ocsd_c_api_custom.h create mode 100644 decoder/include/ocsd_if_version.h create mode 100644 decoder/include/stm/trc_pkt_decode_stm.h create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.cpp create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.h create mode 100644 decoder/source/stm/trc_pkt_decode_stm.cpp create mode 100644 decoder/tests/build/linux/echo_test_dcd_lib/makefile create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj create mode 100644 decoder/tests/build/win-vs2015/simple_pkt_print_c_api/simple_pkt_print_c_api.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h
This is a huge patchset and I certainly won't claim to understand what it does. On the flip side I have looked at every patch without finding any glaring error/problems. On the syntactical front many things could be modified but this isn't the kernel so those rules don't apply.
I'd say go ahead and push it in.
Thanks, Mathieu
-- 2.7.4
CoreSight mailing list CoreSight@lists.linaro.org https://lists.linaro.org/mailman/listinfo/coresight