diff --git a/GhidraBuild/EclipsePlugins/SleighEditor/certification.manifest b/GhidraBuild/EclipsePlugins/SleighEditor/certification.manifest index 2a70edbb54..e40d9e3a38 100644 --- a/GhidraBuild/EclipsePlugins/SleighEditor/certification.manifest +++ b/GhidraBuild/EclipsePlugins/SleighEditor/certification.manifest @@ -34,9 +34,11 @@ ghidra.xtext.sleigh.ui/src/ghidra/xtext/sleigh/ui/outline/SleighOutlineTreeProvi ghidra.xtext.sleigh.ui/src/ghidra/xtext/sleigh/ui/quickfix/SleighQuickfixProvider.xtend||GHIDRA||||END| ghidra.xtext.sleigh/.launch/Generate Sleigh (sleigh) Language Infrastructure.launch||GHIDRA||||END| ghidra.xtext.sleigh/.launch/Launch Runtime Eclipse.launch||GHIDRA||||END| +ghidra.xtext.sleigh/GhidraSleighEditor_README.html||GHIDRA||||END| ghidra.xtext.sleigh/META-INF/MANIFEST.MF||GHIDRA||||END| ghidra.xtext.sleigh/build.gradle||GHIDRA||||END| ghidra.xtext.sleigh/build.properties||GHIDRA||||END| +ghidra.xtext.sleigh/build_README.txt||GHIDRA||||END| ghidra.xtext.sleigh/plugin.xml||GHIDRA||||END| ghidra.xtext.sleigh/src/ghidra/xtext/sleigh/GenerateSleigh.mwe2||GHIDRA||||END| ghidra.xtext.sleigh/src/ghidra/xtext/sleigh/Sleigh.xtext||GHIDRA||||END| diff --git a/GhidraBuild/EclipsePlugins/SleighEditor/ghidra.xtext.sleigh/GhidraSleighEditor_README.html b/GhidraBuild/EclipsePlugins/SleighEditor/ghidra.xtext.sleigh/GhidraSleighEditor_README.html new file mode 100644 index 0000000000..b8ba8ea9e5 --- /dev/null +++ b/GhidraBuild/EclipsePlugins/SleighEditor/ghidra.xtext.sleigh/GhidraSleighEditor_README.html @@ -0,0 +1,201 @@ + + +
+GhidraSleighEditor makes developing and modifying Ghidra Sleigh processor modules much more enjoyable by providing a modern +day context sensitive editor with syntax highlighting, navigation, context sensitive error notation, quick fixes, and more. The +editor is built with the excellent XTEXT DSL framework within Eclipse. +
+The information provided in this document is effective as of Ghidra Sleigh Editor 1.0.0 and is subject to +change with future releases.
+ +GhidraSleighEditor is installed manually into Eclipse and should be installed by anyone interested in working with +processor module sleigh specifications. The Sleigh Editor must be manually installed in Eclipse. In the future the extension +may be installed automatically along with the GhidraDev Eclipse plugin when setting up Eclipse for Ghidra scripting and plugin development.
+ +GhidraSleighEditor can be installed into an existing installation of Eclipse the same way most Eclipse +plugins are installed. From Eclipse:
+To build the Sleigh Editor, follow the instructions in ghidra/DevGuide.md to setup eclipse + for development. Then follow the directions in + ghidra/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.feature/build_README.txt.
+GhidraSleighEditor can be uninstalled as follows from +Eclipse:
+GhidraSleighEditor can be upgraded the same way it was initially installed.
+ + +The Ghidra Sleigh Editor provides a variety of features one would expect in any modern IDE to make viewing, modifying, debugging, +and creating Sleigh processor specifications as painless as possible. +Once installed, any .sinc or .slaspec file that is edited will be brought up in the sleigh editor.
+The editor provides the following capabilities:
+Keywords, Tokens, Sub-constructor names, Comments, Instruction Formats, Strings, Variables, and more can be colorized to make + the sliegh specification more readable. In the Window → Preferences → Sleigh preferences panel, the color and font style can be changed + for any sleigh file tokens.
+The structure of a sleigh file while fairly simple can lend itself to errors when using a straight text editor. The editor understands + the syntax and all constructs of a sleigh file. Instead of waiting for the sleigh compiler to produce an error, many but not all syntax + errors can be caught and displayed with a red error marker.
+The editor validates the definition of variables including locals. + Though legal in the sleigh compiler, it has been found that not declaring local variables leads to + errors that are not be caught by the sleigh compiler. For example, assigning to a variable 'ro' when the actual register name is 'r0' may go + unnoticed. All local variables must be defined with with the 'local' keyword or with an initial ':size'.
+Warnings on duplicate names of tokens is marked in yellow. Complex matching patterns such as '!='  '<'  '>' are warnings as well. Using + comparison matching operators can cause the generated .sla file to be much larger than necessary. Comparison matching should really never be used on any + tokens that are bigger than a few bits as the number of match cases generated will be large. Their use is unavoidable in some cases.
+
There are some artificial enforcements in the editor that, while valid sleigh syntax, cause the syntax to be unparsable. Because the sleigh + Domain Specific Language (DSL) is a context sensitive grammer, as well as using define-like pre-processing expansion, the editor only allows define + $() variables at certain locations where a single token would reside. The most common flagged error is embedding a connecting '&' in a define and then + using it an a match pattern: +
:MOV ax, bx is t1=1 $(BadDefine) {} is not allowed, and instead should be :MOV ax, bx is t1=1 & $(GoodDefine) {}.
+Some simple syntax errors can be fixed quickly with QuickFix suggestions. Pressing Crtl-1 on an error will bring up available quick-fixes.
+More quick-fixes may be added in the future. Please note quickfixes can be slow on large files such as the AARCH64.
+ +There are many constructs in a sleigh file that, when hovered over, will display additional information. This is especially useful for tokens to get their + size without having to navigate to the token field definition. More hovers will be added.
+
If you have edited a sleigh processor specification in a regular text editor, you will appreciate the forward and backward navigation supported on + various variable name use and their associated definition. Navigation is supported on sub-constructor names, field token names, registers, macros names, local variables, define names, and user + define pcodeop's.
+Navigate by pressing <F3> on a variable, using the forward/backward navigation arrows, or my favorite the <-* that will navigate + back to the last edit location.
+ +
Instead of keyword searching, the editor provides a find all uses of a variable. Each found use is listed in a search window with the text of the line where it is used displayed. + Each found location can also be navigated to by double clicking on the found reference.
+Use the editor popup menu Find References action.
+ +The name of variables can be very important, and instead of doing a search and replace on a string, the editor can refactor a name and change all other uses of that name. The name + is even changed in other .sinc and .slaspec files.
+
Use the editor popup menu Rename Element action.
+ +Sleigh files can get large and messy during development. Instead of paying much attention to format, or trying to format by hand you can use the Source Format action. + Common constructs are lined up, for example the token definitions will find the longest token and line up all other tokens and their definition. All sub-constructors of the + same name will be lined up on the 'is' keyword, the match pattern, and the semantic definitions. All constructors 'is' keywords will be generally lined up based on the longest + print peice for each constructor. Statements will also be indented consistently. Multi-line attach definitions will have each entry lined up. + Formatting can be restricted to a selection of lines to stop formatting from entirely re-formatting carefully formatted files. + Additional formatting may be added in the future, and the formatter may become more configurable in the future.
+
Use the editor popup menu Source → Format action.
+1.0.0: Initial release in Ghidra 9.1
+ + + +