mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
Move segmentop tag into the pspec
This commit is contained in:
parent
8240d3c8db
commit
d9ad00e9ca
8 changed files with 91 additions and 67 deletions
|
@ -962,32 +962,35 @@ void Architecture::parseProcessorConfig(DocumentStorage &store)
|
|||
List::const_iterator iter;
|
||||
|
||||
for(iter=list.begin();iter!=list.end();++iter) {
|
||||
if ((*iter)->getName() == "programcounter") {
|
||||
const string &elname( (*iter)->getName() );
|
||||
if (elname == "programcounter") {
|
||||
}
|
||||
else if ((*iter)->getName() == "volatile")
|
||||
else if (elname == "volatile")
|
||||
parseVolatile(*iter);
|
||||
else if ((*iter)->getName() == "incidentalcopy")
|
||||
else if (elname == "incidentalcopy")
|
||||
parseIncidentalCopy(*iter);
|
||||
else if ((*iter)->getName() == "context_data")
|
||||
else if (elname == "context_data")
|
||||
context->restoreFromSpec(*iter,this);
|
||||
else if ((*iter)->getName() == "jumpassist")
|
||||
else if (elname == "jumpassist")
|
||||
userops.parseJumpAssist(*iter, this);
|
||||
else if ((*iter)->getName() == "register_data") {
|
||||
else if (elname == "segmentop")
|
||||
userops.parseSegmentOp(*iter,this);
|
||||
else if (elname == "register_data") {
|
||||
}
|
||||
else if ((*iter)->getName() == "segmented_address") {
|
||||
else if (elname == "segmented_address") {
|
||||
}
|
||||
else if ((*iter)->getName() == "default_symbols") {
|
||||
else if (elname == "default_symbols") {
|
||||
}
|
||||
else if ((*iter)->getName() == "default_memory_blocks") {
|
||||
else if (elname == "default_memory_blocks") {
|
||||
}
|
||||
else if ((*iter)->getName() == "address_shift_amount") {
|
||||
else if (elname == "address_shift_amount") {
|
||||
}
|
||||
else if ((*iter)->getName() == "properties") {
|
||||
else if (elname == "properties") {
|
||||
}
|
||||
else if ((*iter)->getName() == "data_space") {
|
||||
else if (elname == "data_space") {
|
||||
}
|
||||
else
|
||||
throw LowlevelError("Unknown element in <processor_spec>: "+(*iter)->getName());
|
||||
throw LowlevelError("Unknown element in <processor_spec>: "+elname);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -229,35 +229,7 @@
|
|||
</zeroOrMore>
|
||||
|
||||
<zeroOrMore>
|
||||
<element name="segmentop">
|
||||
<attribute name="space"/>
|
||||
<optional> <attribute name="userop"/> </optional>
|
||||
<optional> <attribute name="baseinsize"/> </optional>
|
||||
<optional> <attribute name="innerinsize"/> </optional>
|
||||
<optional> <attribute name="farpointer"/> </optional>
|
||||
<optional>
|
||||
<attribute name="force">
|
||||
<ref name="boolean_type"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<interleave>
|
||||
<zeroOrMore>
|
||||
<element name="baseop">
|
||||
<ref name="segment_op_type"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="innerop">
|
||||
<ref name="segment_op_type"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<element name="constresolve">
|
||||
<ref name="varnode_tags_type"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
<ref name="segmentop_type"/>
|
||||
</zeroOrMore>
|
||||
|
||||
<element name="default_proto">
|
||||
|
@ -299,22 +271,6 @@
|
|||
</element>
|
||||
</start>
|
||||
|
||||
<define name="segment_op_type">
|
||||
<attribute name="code">
|
||||
<choice>
|
||||
<value type="string">INT_ZEXT</value>
|
||||
<value type="string">INT_LEFT</value>
|
||||
<value type="string">INT_AND</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="value"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="slot"/>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="pentry_type">
|
||||
<optional> <attribute name="maxsize"/> </optional>
|
||||
<optional> <attribute name="minsize"/> </optional>
|
||||
|
|
|
@ -227,6 +227,54 @@
|
|||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="segment_op_type">
|
||||
<attribute name="code">
|
||||
<choice>
|
||||
<value type="string">INT_ZEXT</value>
|
||||
<value type="string">INT_LEFT</value>
|
||||
<value type="string">INT_AND</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="value"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="slot"/>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="segmentop_type">
|
||||
<element name="segmentop">
|
||||
<attribute name="space"/>
|
||||
<optional> <attribute name="userop"/> </optional>
|
||||
<optional> <attribute name="baseinsize"/> </optional>
|
||||
<optional> <attribute name="innerinsize"/> </optional>
|
||||
<optional> <attribute name="farpointer"/> </optional>
|
||||
<optional>
|
||||
<attribute name="force">
|
||||
<ref name="boolean_type"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<interleave>
|
||||
<zeroOrMore>
|
||||
<element name="baseop">
|
||||
<ref name="segment_op_type"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="innerop">
|
||||
<ref name="segment_op_type"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<element name="constresolve">
|
||||
<ref name="varnode_tags_type"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="jumpassist_type">
|
||||
<attribute name="name"/>
|
||||
<interleave>
|
||||
|
|
|
@ -49,6 +49,10 @@
|
|||
</element>
|
||||
</optional>
|
||||
|
||||
<zeroOrMore>
|
||||
<ref name="segmentop_type"/>
|
||||
</zeroOrMore>
|
||||
|
||||
<!-- see language_common.rxg -->
|
||||
<optional>
|
||||
<element name="context_data">
|
||||
|
|
|
@ -604,7 +604,7 @@ public class SleighLanguage implements Language {
|
|||
|
||||
XmlElement element = parser.start("processor_spec");
|
||||
while (!parser.peek().isEnd()) {
|
||||
element = parser.start("properties", "segmented_address", "programcounter",
|
||||
element = parser.start("properties", "segmented_address", "segmentop", "programcounter",
|
||||
"data_space", "context_data", "volatile", "jumpassist", "incidentalcopy",
|
||||
"register_data", "default_symbols", "default_memory_blocks");
|
||||
if (element.getName().equals("properties")) {
|
||||
|
@ -774,6 +774,11 @@ public class SleighLanguage implements Language {
|
|||
parser.discardSubTree();
|
||||
}
|
||||
}
|
||||
else if (element.getName().equals("segmentop")) {
|
||||
while (parser.peek().isStart()) {
|
||||
parser.discardSubTree();
|
||||
}
|
||||
}
|
||||
// get rid of the end tag of whatever we started with at the top of the while
|
||||
parser.end(element);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,14 @@
|
|||
</properties>
|
||||
<programcounter register="EIP"/>
|
||||
<segmented_address space="ram" type="real" />
|
||||
<segmentop space="ram" userop="segment" baseinsize="2" innerinsize="2" farpointer="yes">
|
||||
<baseop code="INT_ZEXT"/>
|
||||
<baseop code="INT_LEFT" value="4"/>
|
||||
<innerop code="INT_ZEXT"/>
|
||||
<constresolve>
|
||||
<register name="DS"/>
|
||||
</constresolve>
|
||||
</segmentop>
|
||||
<context_data>
|
||||
<context_set space="ram">
|
||||
<set name="addrsize" val="0"/>
|
||||
|
|
|
@ -31,14 +31,6 @@
|
|||
<range space="ram"/>
|
||||
</global>
|
||||
<stackpointer register="SP" space="ram"/>
|
||||
<segmentop space="ram" userop="segment" baseinsize="2" innerinsize="2" farpointer="yes">
|
||||
<baseop code="INT_ZEXT"/>
|
||||
<baseop code="INT_LEFT" value="4"/>
|
||||
<innerop code="INT_ZEXT"/>
|
||||
<constresolve>
|
||||
<register name="DS"/>
|
||||
</constresolve>
|
||||
</segmentop>
|
||||
<default_proto>
|
||||
<prototype name="__stdcall16near" extrapop="unknown" stackshift="2">
|
||||
<input>
|
||||
|
|
|
@ -8,6 +8,14 @@
|
|||
</properties>
|
||||
<programcounter register="EIP"/>
|
||||
<segmented_address space="ram" type="protected"/>
|
||||
<segmentop space="ram" userop="segment" baseinsize="2" innerinsize="2" farpointer="yes">
|
||||
<baseop code="INT_ZEXT"/>
|
||||
<baseop code="INT_LEFT" value="16"/>
|
||||
<innerop code="INT_ZEXT"/>
|
||||
<constresolve>
|
||||
<register name="DS"/>
|
||||
</constresolve>
|
||||
</segmentop>
|
||||
<context_data>
|
||||
<context_set space="ram">
|
||||
<set name="addrsize" val="0"/>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue