GP-1062 compacted and fixed issues with function start patterns

This commit is contained in:
emteere
2023-09-01 18:14:00 +00:00
parent 9d5ed9a6d1
commit 3bad7422c6

View File

@@ -1,5 +1,27 @@
<patternlist>
<patternpairs totalbits="32" postbits="16">
<patternpairs totalbits="32" postbits="21">
<!-- Higher confidence patterns, after a return and more defined bits -->
<prepatterns>
<data>0x0d 0xf0</data> <!-- ret //0 filler -->
<data>0x0d 0xf0 0x00 </data> <!-- ret //1 filler -->
<data>0x0d 0xf0 0x00 0x00 </data> <!-- ret //2 filler -->
<data>0x0d 0xf0 0x00 0x00 0x00 </data> <!-- ret //3 filler -->
<data>0x80 0x00 0x00 </data> <!-- ret //0 filler -->
<data>0x80 0x00 0x00 0x00 </data> <!-- ret //1 filler -->
<data>0x80 0x00 0x00 0x00 0x00 </data> <!-- ret //2 filler -->
<data>0x80 0x00 0x00 0x00 0x00 0x00 </data> <!-- ret //3 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000 </data> <!-- addi a1,a1,-imm // this only includes stack frame size 0x10->0x80 -->
<data>....0010 10100... ........ ....0000 00010001 11000000 </data> <!-- movi at,off ; subi a1,a1,at -->
<!-- this currently applies to the pre-pattern start, so can't use really should be on postpattern start <align mark="0" bits="2"/> -->
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="32" postbits="21">
<prepatterns>
<data>0x1d 0xf0</data> <!-- retw.n -->
<data>0x1d 0xf0 0x00</data> <!-- retw.n -->
@@ -11,231 +33,54 @@
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="40" postbits="21">
<prepatterns>
<data>00001101 11110000</data> <!-- ret.n //0 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="48" postbits="21">
<prepatterns>
<data>00001101 11110000 00000000</data> <!-- ret.n //1 filler -->
<data>..000110 ........ 1.......</data> <!-- j -off //0 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="48" postbits="21">
<prepatterns>
<data>10000000 00000000 00000000</data> <!-- ret //0 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="56" postbits="21">
<prepatterns>
<data>10000000 00000000 00000000 00000000</data> <!-- ret //1 filler -->
<data>00001101 11110000 00000000 00000000</data> <!-- ret.n //2 filler -->
<data>..000110 ........ 1....... 00000000</data> <!-- j -off //1 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="56" postbits="24">
<prepatterns>
<data>....1010 00010001 00001101 11110000</data> <!-- add.n a1,a1,at ; ret.n //0 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="64" postbits="21">
<prepatterns>
<data>10000000 00000000 00000000 00000000 00000000</data> <!-- ret //2 filler -->
<data>00001101 11110000 00000000 00000000 00000000</data> <!-- ret.n //3 filler -->
<data>..000110 ........ 1....... 00000000 00000000</data> <!-- j -off //2 filler -->
<data>....1010 00010001 00001101 11110000 00000000</data> <!-- add.n a1,a1,at ; ret.n //1 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="64" postbits="24">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000</data> <!-- addi a1,a1,off ; ret.n //0 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="48" postbits="21">
<prepatterns>
<data>10000000 00000000 00000000 00000000 00000000 00000000</data> <!-- ret //3 filler -->
<data>00010010 11000001 0...0000 00001101 11110000 00000000</data> <!-- addi a1,a1,off ; ret.n //1 filler -->
<data>..000110 ........ 1....... 00000000 00000000 00000000</data> <!-- j -off //3 filler -->
<data>....1010 00010001 00001101 11110000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //2 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="64" postbits="21">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //2 filler -->
<data>....1010 00010001 00001101 11110000 00000000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //3 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="80" postbits="21">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000</data> <!-- addi a1,a1,off ; ret.n //0 filler -->
<data>00010010 11000001 0...0000 00001101 11110000 00000000</data> <!-- addi a1,a1,off ; ret.n //1 filler -->
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //2 filler -->
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //3 filler -->
<data>....1010 00010001 00001101 11110000 </data> <!-- add.n a1,a1,at ; ret.n //0 filler -->
<data>....1010 00010001 00001101 11110000 00000000</data> <!-- add.n a1,a1,at ; ret.n //1 filler -->
<data>....1010 00010001 00001101 11110000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //2 filler -->
<data>....1010 00010001 00001101 11110000 00000000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //3 filler -->
</prepatterns>
<postpatterns>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<align mark="0" bits="3"/>
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<!-- this currently applies to the pre-pattern start, so can't use really should be on postpattern start <align mark="0" bits="2"/> -->
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="37" postbits="29">
<patternpairs totalbits="28" postbits="21">
<prepatterns>
<data>00001101 11110000</data> <!-- ret.n //0 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="36" postbits="29">
<prepatterns>
<data>00001101 11110000 00000000</data> <!-- ret.n //1 filler -->
<data>..000110 ........ 1.......</data> <!-- j -off //0 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="50" postbits="29">
<prepatterns>
<data>10000000 00000000 00000000</data> <!-- ret //0 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="44" postbits="29"> <!-- Main patterns -->
<prepatterns>
<data>00001101 11110000 00000000 00000000</data> <!-- ret.n //2 filler -->
<data>..000110 ........ 1....... 00000000</data> <!-- j -off //1 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="47" postbits="29">
<prepatterns>
<data>....1010 00010001 00001101 11110000</data> <!-- add.n a1,a1,at ; ret.n //0 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="52" postbits="29">
<prepatterns>
<data>00001101 11110000 00000000 00000000 00000000</data> <!-- ret.n //3 filler -->
<data>..000110 ........ 1....... 00000000 00000000</data> <!-- j -off //2 filler -->
<data>....1010 00010001 00001101 11110000 00000000</data> <!-- add.n a1,a1,at ; ret.n //1 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="60" postbits="29">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000</data> <!-- addi a1,a1,off ; ret.n //0 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart after="func"/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="60" postbits="29">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000 00000000</data> <!-- addi a1,a1,off ; ret.n //1 filler -->
<data>..000110 ........ 1....... </data> <!-- j -off //0 filler -->
<data>..000110 ........ 1....... 00000000 </data> <!-- j -off //1 filler -->
<data>..000110 ........ 1....... 00000000 00000000 </data> <!-- j -off //2 filler -->
<data>..000110 ........ 1....... 00000000 00000000 00000000</data> <!-- j -off //3 filler -->
<data>....1010 00010001 00001101 11110000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //2 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="64" postbits="29">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //2 filler -->
<data>....1010 00010001 00001101 11110000 00000000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //3 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart/>
</postpatterns>
</patternpairs>
<patternpairs totalbits="64" postbits="29">
<prepatterns>
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //3 filler -->
</prepatterns>
<postpatterns>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<align mark="0" bits="3"/>
<funcstart/>
<data>00010010 11000001 1...0000</data> <!-- addi a1, a1, -offset -->
<!-- this currently applies to the pre-pattern start, so can't use really should be on postpattern start <align mark="0" bits="2"/> -->
<possiblefuncstart/>
</postpatterns>
</patternpairs>
<pattern>
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
<funcstart after="data" />
<align mark="0" bits="2"/>
<possiblefuncstart after="defined" />
</pattern>
<pattern>
<data>00010010 11000001 1...0000</data> <!-- addi a1, a1, -offset -->
<funcstart after="data" />
<align mark="0" bits="2"/>
<possiblefuncstart after="defined" />
</pattern>
<pattern>
<data>0x12 0xc1 0xf0 0x09 0x01 ..000101 ........ ........ 0x08 0x01 0x12 0xc1 0x10 0x0d 0xf0</data>
<!--
@@ -246,7 +91,7 @@
addi a1,a1,0x10
ret.n
-->
<align mark="0" bits="3" />
<align mark="0" bits="2" />
<funcstart validcode="function" thunk="true" />
</pattern>
</patternlist>