2014-05-16 18:51:01 +08:00
|
|
|
========================================================================
|
2014-06-25 00:35:50 +08:00
|
|
|
The MI Driver - LLDB Machine Interface V2 (MI) Project Overview
|
2014-05-16 18:51:01 +08:00
|
|
|
28/01/2014
|
|
|
|
========================================================================
|
|
|
|
|
|
|
|
All the files in this directory are required to build the MI executable.
|
|
|
|
The executable is intended to compile and work on the following platforms:
|
|
|
|
|
2014-06-25 00:35:50 +08:00
|
|
|
Windows (Vista or newer) (Compiler: Visual C++ 12)
|
|
|
|
LINUX (Compiler: gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1)
|
|
|
|
OSX (Not tested)
|
2014-05-16 18:51:01 +08:00
|
|
|
|
2014-06-25 00:35:50 +08:00
|
|
|
The MI Driver (CMIDriver) is a driver in its own right to work alongside
|
2014-05-16 18:51:01 +08:00
|
|
|
the LLDB driver (driver .h/.cpp). Only one is operated at a time depending
|
|
|
|
on the options entered on the command line. The MI driver inputs and
|
|
|
|
outputs MI (GDB instruction) to be interpreted by a client i.e. Eclipse.
|
|
|
|
Should MI not understand an instruction it can be passed to the LLDB driver for
|
|
|
|
interpretation (the MI stub is on top of LLDB driver not GDB)(build
|
|
|
|
configuration dependant). Should the LLDB driver be chosen then it the
|
|
|
|
MI driver will behave as a normal LLDB driver code MI.
|
|
|
|
|
|
|
|
Type --help for instruction on using the MI driver. MI produces a MILog.txt file
|
|
|
|
which records the actions of the MI driver (only) found in the directory
|
|
|
|
of the lldbMI executable.
|
|
|
|
|
2014-06-25 00:35:50 +08:00
|
|
|
Note any command or text sent to the MI Driver that is not a command registered
|
|
|
|
in the MI Driver's Command Factory will be rejected given an error.
|
|
|
|
|
|
|
|
The MILogfile.txt keeps a history of the MI Driver's activity for one session
|
|
|
|
only. It is used to aid debugging the MI Driver. As well as recorded commands
|
|
|
|
that are recognised by the MI Driver it also gives warnings about command's which
|
|
|
|
do not support certain argument or options.
|
|
|
|
|
2014-05-16 18:51:01 +08:00
|
|
|
All the files prefix with MI are specifically for the MI driver code only.
|
|
|
|
Non prefixed code is the original LLDB driver which has been left untouched
|
|
|
|
as much as possible. This allows the LLDB driver code to develop
|
|
|
|
independently and make future integration more straight forward.
|
|
|
|
|
|
|
|
File MIDriverMain.cpp contains the executables main() function and some
|
|
|
|
common global functions common to the two drivers.
|
|
|
|
|
|
|
|
=========================================================================
|
|
|
|
Versions:
|
2014-06-25 00:35:50 +08:00
|
|
|
1.0.0.1 First version from scratch 28/1/2014 to 28/3/2014.
|
2014-05-16 18:51:01 +08:00
|
|
|
MI working alpha. MI framework not complete.
|
2014-06-25 00:35:50 +08:00
|
|
|
1.0.0.2 First deliverable to client 7/3/2014.
|
2014-05-16 18:51:01 +08:00
|
|
|
MI working beta. MI framework not complete.
|
|
|
|
1.0.0.3 Code refactor tidy. Release to community for evaluation
|
|
|
|
7/5/2014.
|
|
|
|
MI working beta - code refactored and tidied. MI framework
|
|
|
|
complete. Just missing commands (which may still require
|
|
|
|
changes).
|
2014-06-25 00:35:50 +08:00
|
|
|
1.0.0.4 Post release to community for evaluation 7/5/2014.
|
|
|
|
1. MI command token now optional
|
|
|
|
2. MI command token is now fixed length
|
|
|
|
3. New commands added see section "MI commands implemented are:"
|
|
|
|
4. Able to debug a local target as well as remote target
|
|
|
|
5. MI Driver now sends to the client "(gdb)" + '\n' on
|
|
|
|
initialising
|
|
|
|
6. Improve coverage of parsing and fix command argument parsing
|
|
|
|
7. Fix bug with stdin thinking there was no input when there was which
|
|
|
|
caused communication between the client and the MI Driver to halt
|
|
|
|
due to internal buffering, we now keep track of it ourself.
|
|
|
|
8. Code comment fixes and additions. Code style fixes.
|
|
|
|
9. MI Driver now on receiving Ctrl-C (SIGINT) when the client pauses
|
|
|
|
an inferior program does not quit but continues operating.
|
|
|
|
10.Fix commands "var-update", "var-evaluate-expression" to which did
|
|
|
|
not send back information to correctly update arrays and structures.
|
|
|
|
11.Commands "Not implemented" are now not registered to the command
|
|
|
|
factory except for GDB command "thread". Commands not registered
|
|
|
|
with the command factory produce MI error message "...not in
|
|
|
|
Command Factory". (Removed from command section in this readme.txt)
|
|
|
|
1.0.0.5 Second deliverable to client 16/6/2014.
|
|
|
|
1.0.0.6 Post release of second deliverable to client 16/6/2014.
|
|
|
|
1. The MI Driver has a new option --noLog. If present the MI Driver
|
|
|
|
does not output progress or status messages to it's log file.
|
|
|
|
2. Moved OS specific handling of the stdin stream to their own class
|
|
|
|
implementations so any changes to one handler will not affect
|
|
|
|
another OS's handler.
|
|
|
|
3. The session data/information map for sharing data between commands
|
|
|
|
now uses a variant object which enables objects of different types
|
|
|
|
to be stored instead of previously just text information.
|
|
|
|
4. Debug session var object create, update and retrieve efficiency
|
|
|
|
improved by using a map type container.
|
|
|
|
5. Re-enable the MI Driver's command line option --interpreter (see
|
|
|
|
--help). Up until now it was implementented but not enforced, it
|
|
|
|
was always the MI Driver interpreter.
|
|
|
|
6. Re-enable the compilation of the original LLDB driver code into
|
|
|
|
the MI Driver's code. See MICmnConfig.h for build configuration.
|
2014-05-16 18:51:01 +08:00
|
|
|
|
|
|
|
=========================================================================
|
2014-06-25 00:35:50 +08:00
|
|
|
Current limitations:
|
|
|
|
1. Commands implemented likely not to have all their arguments supported
|
|
|
|
2. The MI Driver has only been tested with Eclipse Juno with an in-house
|
|
|
|
plugin
|
|
|
|
3. Local target has been implemented but not tested
|
|
|
|
4. The MI Driver has been designed primarily to work in a 'remote-target'
|
|
|
|
mode only. The MI Driver does not currently except arguments beyond
|
|
|
|
those described above.
|
|
|
|
5. The MI Driver does not accept as arguments an executable to create a
|
|
|
|
target instance.
|
|
|
|
6. Not all MI commands have been implemented. See section MI Driver
|
|
|
|
commands for those that have been fully or partially implemented (not
|
|
|
|
indicated - see command class).
|
|
|
|
7. Not necessarily a limitation but the MI Driver is used with Codeplay's
|
|
|
|
own Eclipse plugin (not supplied) which has allowed more control over
|
|
|
|
the interaction with the MI Driver between Eclipse.
|
|
|
|
|
|
|
|
=========================================================================
|
|
|
|
MI Driver Commands
|
|
|
|
MI commands below are written to work for Eclipse Juno 7.4. If may be
|
|
|
|
one are more commands required by other IDEs are missing or do not
|
|
|
|
support all arguments or options. Additionally some commands may handle
|
|
|
|
additional arguments or options not documented here
|
|
|
|
https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Data-Manipulation.html#GDB_002fMI-Data-Manipulation.
|
|
|
|
The command implemented are:
|
|
|
|
CMICmdCmdBreakAfter
|
|
|
|
CMICmdCmdBreakCondition
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdBreakDelete
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdBreakDisable
|
|
|
|
CMICmdCmdBreakEnable
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdBreakInsert
|
|
|
|
CMICmdCmdDataEvaluateExpression
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdDataDisassemble
|
|
|
|
CMICmdCmdDataListRegisterChanged
|
|
|
|
CMICmdCmdDataListRegisterNames
|
|
|
|
CMICmdCmdDataListRegisterValues
|
|
|
|
CMICmdCmdDataReadMemory
|
|
|
|
CMICmdCmdDataReadMemoryBytes
|
|
|
|
CMICmdCmdDataWriteMemory
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdEnablePrettyPrinting
|
|
|
|
CMICmdCmdEnvironmentCd
|
|
|
|
CMICmdCmdExecContinue
|
|
|
|
CMICmdCmdExecFinish
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdExecInterrupt
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdExecNext
|
|
|
|
CMICmdCmdExecNextInstruction
|
|
|
|
CMICmdCmdExecRun
|
|
|
|
CMICmdCmdExecStep
|
|
|
|
CMICmdCmdExecStepInstruction
|
|
|
|
CMICmdCmdFileExecAndSymbols
|
|
|
|
CMICmdCmdGdbExit
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdGdbInfo
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdGdbSet
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdGdbSet - solib-search-path option
|
|
|
|
CMICmdCmdInterpreterExec
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdListThreadGroups
|
|
|
|
CMICmdCmdSource
|
|
|
|
CMICmdCmdStackInfoDepth
|
|
|
|
CMICmdCmdStackListArguments
|
|
|
|
CMICmdCmdStackListFrames
|
|
|
|
CMICmdCmdStackListLocals
|
|
|
|
CMICmdCmdSupportInfoMiCmdQuery
|
|
|
|
CMICmdCmdSupportListFeatures
|
|
|
|
CMICmdCmdTargetSelect
|
|
|
|
CMICmdCmdThread
|
|
|
|
CMICmdCmdThreadInfo
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdTraceStatus (not functionally implemented)
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdVarAssign
|
|
|
|
CMICmdCmdVarCreate
|
|
|
|
CMICmdCmdVarDelete
|
|
|
|
CMICmdCmdVarEvaluateExpression
|
|
|
|
CMICmdCmdVarInfoPathExpression
|
|
|
|
CMICmdCmdVarListChildren
|
|
|
|
CMICmdCmdVarSetFormat
|
2014-06-25 00:35:50 +08:00
|
|
|
CMICmdCmdVarShowAttributes
|
2014-05-16 18:51:01 +08:00
|
|
|
CMICmdCmdVarUpdate
|
|
|
|
|
|
|
|
=========================================================================
|
2014-06-25 00:35:50 +08:00
|
|
|
The MI Driver build configuration:
|
2014-05-16 18:51:01 +08:00
|
|
|
MICmnConfig.h defines various preprocessor build options i.e. enable
|
2014-06-25 00:35:50 +08:00
|
|
|
LLDB driver fall through (Driver.h/.cpp) should MI Driver not recognise a
|
|
|
|
command (option not fully implemented - may be removed in the future).
|
|
|
|
|
|
|
|
=========================================================================
|
|
|
|
Code standard, documentation and code style scope:
|
|
|
|
The coding style and coding documentation scope covers all MI prefixed
|
|
|
|
files and where MI code is implemented in the LLDB driver files. Should
|
|
|
|
you wish to make improvements or fixes to the MI code (which is encouraged)
|
|
|
|
please DO comment your code in the style already applied. The same applies
|
|
|
|
to the coding style. Class names should also follow this lead and ideally
|
|
|
|
should be one class per file (.h/.cpp). Class interface files (.h) should
|
|
|
|
not contain any implementation code unless there is a performance issue or
|
|
|
|
templated functions. You get the idea, look around the existing code and
|
|
|
|
follow by example :)
|
|
|
|
|
|
|
|
Where code comment or documentation is wrong or can be improved to help
|
|
|
|
others then it is strongly encouraged you DO improve the documentation.
|
|
|
|
|
|
|
|
=========================================================================
|
|
|
|
MI Driver license:
|
|
|
|
The MI Driver code is under the University of Illinois Open Source License
|
|
|
|
agreement. Submitted by Codeplay Ltd UK.
|
2014-05-16 18:51:01 +08:00
|
|
|
|
|
|
|
=========================================================================
|
2014-06-25 00:35:50 +08:00
|
|
|
The MI Driver uses the following libraries:
|
2014-05-16 18:51:01 +08:00
|
|
|
Standard Template library
|
|
|
|
Thread
|
|
|
|
Containers
|
|
|
|
String
|
|
|
|
File
|
|
|
|
Time
|
|
|
|
LLDB public API
|
|
|
|
OS specific
|
|
|
|
OS error reporting windows
|
|
|
|
OS error handling OSX (not implemented)
|
|
|
|
OS error handling LINUX (not implemented)
|
|
|
|
|
|
|
|
|