diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.feature/feature.xml b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.feature/feature.xml index 16ffc71a33..c2ae820dce 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.feature/feature.xml +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.feature/feature.xml @@ -2,7 +2,7 @@ diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/META-INF/MANIFEST.MF b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/META-INF/MANIFEST.MF index bae83947c1..4b10e23afc 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/META-INF/MANIFEST.MF +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/META-INF/MANIFEST.MF @@ -5,9 +5,7 @@ Bundle-Name: ghidra.xtext.sleigh.tests Bundle-Vendor: Ghidra Bundle-Version: 1.0.0.qualifier Bundle-SymbolicName: ghidra.xtext.sleigh.tests; singleton:=true -Bundle-ActivationPolicy: lazy Require-Bundle: ghidra.xtext.sleigh, - org.junit.jupiter.api;bundle-version="[5.0.0,6.0.0)", org.eclipse.xtext.testing, org.eclipse.xtext.xbase.testing, org.eclipse.xtext.xbase.lib;bundle-version="2.14.0" diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/src/ghidra/xtext/sleigh/tests/SleighParsingTest.xtend b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/src/ghidra/xtext/sleigh/tests/SleighParsingTest.xtend index 78fe1f8c26..19703fb01a 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/src/ghidra/xtext/sleigh/tests/SleighParsingTest.xtend +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.tests/src/ghidra/xtext/sleigh/tests/SleighParsingTest.xtend @@ -16,11 +16,13 @@ package ghidra.xtext.sleigh.tests import com.google.inject.Inject +import ghidra.xtext.sleigh.sleigh.Model +import ghidra.xtext.sleigh.sleigh.SleighPackage +import org.eclipse.xtext.diagnostics.Diagnostic import org.eclipse.xtext.testing.InjectWith import org.eclipse.xtext.testing.extensions.InjectionExtension import org.eclipse.xtext.testing.util.ParseHelper import org.eclipse.xtext.testing.validation.ValidationTestHelper -import ghidra.xtext.sleigh.sleigh.Model import org.junit.jupiter.api.Test import org.junit.jupiter.api.^extension.ExtendWith @@ -194,5 +196,52 @@ class SleighParsingTest { ''') model.assertNoErrors } + + @Test def void testCpool() { + var model = parseHelper.parse(''' + define space register size=2 type=register_space wordsize=1 default; + define register offset=0 size=1 [ Z C N V ]; + + define token instr(16) + op = (0,15) + reg = (0,1) + cc = (2,3) + ; + + attach variables [ reg ] [ Z C N V ]; + + :mov reg,N,op is op=0 & N & reg & op & op=1 { + tmp:1 = cpool(0:1, 0:2); + tmp1:2 = cpool(0:1, 1:2, 2:2, 3:4); + + tmp2:2 = cpool(0:1, 1:2, 2:2, 3:4, 3:4, 4:4, 5:4, 6:4); + } + ''') + model.assertNoErrors + + model = parseHelper.parse(''' + define space register size=2 type=register_space wordsize=1 default; + define register offset=0 size=1 [ Z C N V ]; + + define token instr(16) + op = (0,15) + reg = (0,1) + cc = (2,3) + ; + + attach variables [ reg ] [ Z C N V ]; + + :mov reg,N,op is op=0 & N & reg & op & op=1 { + tmp:1 = cpool(0:1, 0:2); + tmp:2 = cpool(0:1); # too few args + } + ''') + + assertError(model, + SleighPackage::eINSTANCE.expression, + Diagnostic.SYNTAX_DIAGNOSTIC, 314,1, + "mismatched input ')' expecting ','" + ) + } } diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui.tests/META-INF/MANIFEST.MF b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui.tests/META-INF/MANIFEST.MF index d050e0d5b7..f5f9090524 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui.tests/META-INF/MANIFEST.MF +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui.tests/META-INF/MANIFEST.MF @@ -7,13 +7,13 @@ Bundle-Version: 1.0.0.qualifier Bundle-SymbolicName: ghidra.xtext.sleigh.ui.tests; singleton:=true Bundle-ActivationPolicy: lazy Require-Bundle: ghidra.xtext.sleigh.ui, - org.junit.jupiter.api;bundle-version="[5.0.0,6.0.0)", org.eclipse.xtext.testing, org.eclipse.xtext.xbase.testing, org.eclipse.xtext.junit4, org.eclipse.xtext.xbase.junit, org.eclipse.core.runtime, org.eclipse.ui.workbench;resolution:=optional, - org.eclipse.xtext.ui.testing + org.eclipse.xtext.ui.testing, + org.eclipse.xtext.xbase.ui.testing Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: ghidra.xtext.sleigh.ui.tests;x-internal=true diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui/META-INF/MANIFEST.MF b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui/META-INF/MANIFEST.MF index 7d5b41fd0d..d605910ae2 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui/META-INF/MANIFEST.MF +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Automatic-Module-Name: ghidra.xtext.sleigh.ui Bundle-ManifestVersion: 2 Bundle-Name: ghidra.xtext.sleigh.ui Bundle-Vendor: Ghidra -Bundle-Version: 1.0.1.qualifier +Bundle-Version: 1.0.2.qualifier Bundle-SymbolicName: ghidra.xtext.sleigh.ui; singleton:=true Bundle-ActivationPolicy: lazy Require-Bundle: ghidra.xtext.sleigh, diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/META-INF/MANIFEST.MF b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/META-INF/MANIFEST.MF index 4fa4632222..93cdda74e2 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/META-INF/MANIFEST.MF +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/META-INF/MANIFEST.MF @@ -3,9 +3,8 @@ Automatic-Module-Name: ghidra.xtext.sleigh Bundle-ManifestVersion: 2 Bundle-Name: ghidra.xtext.sleigh Bundle-Vendor: Ghidra -Bundle-Version: 1.0.1.qualifier +Bundle-Version: 1.0.2.qualifier Bundle-SymbolicName: ghidra.xtext.sleigh; singleton:=true -Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.xtext, org.eclipse.xtext.xbase, org.eclipse.equinox.common;bundle-version="3.5.0", @@ -16,16 +15,17 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.xtend.lib;bundle-version="2.14.0", org.antlr.runtime;bundle-version="[3.2.0,3.2.1)" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Export-Package: ghidra.xtext.sleigh.formatting2, - ghidra.xtext.sleigh, - ghidra.xtext.sleigh.sleigh.impl, - ghidra.xtext.sleigh.validation, - ghidra.xtext.sleigh.scoping, - ghidra.xtext.sleigh.sleigh, - ghidra.xtext.sleigh.serializer, - ghidra.xtext.sleigh.parser.antlr.internal, - ghidra.xtext.sleigh.services, - ghidra.xtext.sleigh.sleigh.util, +Export-Package: ghidra.xtext.sleigh, + ghidra.xtext.sleigh.converter, + ghidra.xtext.sleigh.formatting2, ghidra.xtext.sleigh.generator, - ghidra.xtext.sleigh.parser.antlr + ghidra.xtext.sleigh.parser.antlr, + ghidra.xtext.sleigh.parser.antlr.internal;x-internal:=true, + ghidra.xtext.sleigh.scoping, + ghidra.xtext.sleigh.serializer, + ghidra.xtext.sleigh.services, + ghidra.xtext.sleigh.sleigh, + ghidra.xtext.sleigh.sleigh.impl, + ghidra.xtext.sleigh.sleigh.util, + ghidra.xtext.sleigh.validation Import-Package: org.apache.log4j diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/build_README.txt b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/build_README.txt index 5497a9a2b6..ee73a8b39a 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/build_README.txt +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/build_README.txt @@ -77,7 +77,7 @@ Creating an installation zip file to install in Eclipse: - Export source: UNCHECKED - Package as individual JAR archives: CHECKED - Generate p2 repository: CHECKED - - Categorize repository: CHECKED. + - Categorize repository: CHECKED - Qualifier replacement: CHECKED + clear field so default is used - Save as Ant script: UNCHECKED - Allow for binary cycles in target platform: CHECKED diff --git a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/src/ghidra/xtext/sleigh/Sleigh.xtext b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/src/ghidra/xtext/sleigh/Sleigh.xtext index ec107edb0b..3e56332956 100644 --- a/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/src/ghidra/xtext/sleigh/Sleigh.xtext +++ b/GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh/src/ghidra/xtext/sleigh/Sleigh.xtext @@ -662,15 +662,21 @@ exprSingle returns Expression: | pcodeop='round' '(' op1=expr ')' | pcodeop='popcount' '(' op1=expr ')' | pcodeop='lzcount' '(' op1=expr ')' - | pcodeop='cpool' '(' op1=expr ',' op2=expr ',' op3=expr ')' + | pcodeop='cpool' '(' op1=cpoolParams ')' | pcodeop='newobject' '(' op1=newObjParams ')' | op=[macroOrPcode] op1=paramlist ; newObjParams: + // must have at least 1 parameter ((parameters+=expr) (',' parameters+=expr)*) ; +cpoolParams: + // must have at least 2 parameters + ((parameters+=expr) ',' (parameters+=expr) (',' parameters+=expr)*) +; + exprSym: vnode=[vnoderef] | vnode=[specificsymbol] sizeOpColon size=integerValue