mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
GP-4030: Fix MIPS base and eabi 32/64-bit cspecs
GP-4029: Update base PowerPC 32/64-bit cspecs
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
<description>MIPS32 32-bit addresses, big endian, with mips16e</description>
|
||||
<compiler name="default" spec="mips32be.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips32be.cspec" id="windows"/>
|
||||
<compiler name="eabi" spec="mips32be_eabi.cspec" id="eabi"/>
|
||||
<compiler name="eabi" spec="mips32_eabi.cspec" id="eabi"/>
|
||||
<external_name tool="gnu" name="mips:3000"/>
|
||||
<external_name tool="gnu" name="mips:4000"/>
|
||||
<external_name tool="IDA-PRO" name="mipsb"/>
|
||||
@@ -32,7 +32,7 @@
|
||||
<description>MIPS32 32-bit addresses, little endian, with mips16e</description>
|
||||
<compiler name="default" spec="mips32le.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips32le.cspec" id="windows"/>
|
||||
<compiler name="eabi" spec="mips32le_eabi.cspec" id="eabi"/>
|
||||
<compiler name="eabi" spec="mips32_eabi.cspec" id="eabi"/>
|
||||
<external_name tool="gnu" name="mips:3000"/>
|
||||
<external_name tool="gnu" name="mips:4000"/>
|
||||
<external_name tool="IDA-PRO" name="mipsl"/>
|
||||
@@ -82,7 +82,7 @@
|
||||
manualindexfile="../manuals/mipsM16.idx"
|
||||
id="MIPS:BE:64:default">
|
||||
<description>MIPS64 64-bit addresses, big endian, with mips16e</description>
|
||||
<compiler name="default" spec="mips64.cspec" id="default"/>
|
||||
<compiler name="default" spec="mips64be.cspec" id="default"/>
|
||||
<external_name tool="gnu" name="mips:5000"/>
|
||||
<external_name tool="IDA-PRO" name="mipsb"/>
|
||||
<external_name tool="IDA-PRO" name="r5900r"/>
|
||||
@@ -100,8 +100,8 @@
|
||||
manualindexfile="../manuals/mipsM16.idx"
|
||||
id="MIPS:LE:64:default">
|
||||
<description>MIPS64 64-bit addreses, little endian, with mips16e</description>
|
||||
<compiler name="default" spec="mips64.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips64.cspec" id="windows"/>
|
||||
<compiler name="default" spec="mips64le.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips64le.cspec" id="windows"/>
|
||||
<external_name tool="gnu" name="mips:5000"/>
|
||||
<external_name tool="IDA-PRO" name="mipsl"/>
|
||||
<external_name tool="IDA-PRO" name="r5900l"/>
|
||||
@@ -119,7 +119,7 @@
|
||||
manualindexfile="../manuals/mipsMic.idx"
|
||||
id="MIPS:BE:64:micro">
|
||||
<description>MIPS64 64-bit addresses, big endian, with microMIPS</description>
|
||||
<compiler name="default" spec="mips64.cspec" id="default"/>
|
||||
<compiler name="default" spec="mips64be.cspec" id="default"/>
|
||||
<external_name tool="IDA-PRO" name="mipsb"/>
|
||||
<external_name tool="IDA-PRO" name="r5900r"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
|
||||
@@ -134,8 +134,8 @@
|
||||
manualindexfile="../manuals/mipsMic.idx"
|
||||
id="MIPS:LE:64:micro">
|
||||
<description>MIPS64 64-bit addresses, little endian, with microMIPS</description>
|
||||
<compiler name="default" spec="mips64.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips64.cspec" id="windows"/>
|
||||
<compiler name="default" spec="mips64le.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips64le.cspec" id="windows"/>
|
||||
<external_name tool="IDA-PRO" name="mipsl"/>
|
||||
<external_name tool="IDA-PRO" name="r5900l"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
|
||||
@@ -150,7 +150,7 @@
|
||||
manualindexfile="../manuals/mipsMic.idx"
|
||||
id="MIPS:BE:64:R6">
|
||||
<description>MIPS64 Release-6 64-bit addresses, big endian, with microMIPS</description>
|
||||
<compiler name="default" spec="mips64.cspec" id="default"/>
|
||||
<compiler name="default" spec="mips64be.cspec" id="default"/>
|
||||
<external_name tool="IDA-PRO" name="mipsb"/>
|
||||
<external_name tool="IDA-PRO" name="r5900r"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
|
||||
@@ -167,8 +167,8 @@
|
||||
manualindexfile="../manuals/mipsMic.idx"
|
||||
id="MIPS:LE:64:R6">
|
||||
<description>MIPS64 Release-6 64-bit addresses, little endian, with microMIPS</description>
|
||||
<compiler name="default" spec="mips64.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips64.cspec" id="windows"/>
|
||||
<compiler name="default" spec="mips64le.cspec" id="default"/>
|
||||
<compiler name="Visual Studio" spec="mips64le.cspec" id="windows"/>
|
||||
<external_name tool="IDA-PRO" name="mipsl"/>
|
||||
<external_name tool="IDA-PRO" name="r5900l"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
|
||||
|
||||
@@ -2,7 +2,12 @@
|
||||
|
||||
<compiler_spec>
|
||||
<data_organization>
|
||||
<char_size value="1"/>
|
||||
<short_size value="2"/>
|
||||
<integer_size value="4"/>
|
||||
<pointer_size value="4"/>
|
||||
<long_size value="4"/>
|
||||
<long_long_size value="8"/>
|
||||
<float_size value="4" />
|
||||
<double_size value="8" />
|
||||
<long_double_size value="8" />
|
||||
@@ -65,6 +70,34 @@
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate" maxprimitives="1"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate" maxprimitives="1"/>
|
||||
<goto_stack/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<goto_stack/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct" minsize="5"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union" minsize="5"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join align="true"/>
|
||||
</rule>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
@@ -73,9 +106,21 @@
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="v0" piece2="v1"/>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate" maxprimitives="1"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
@@ -97,21 +142,11 @@
|
||||
<register name="f30"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="at"/>
|
||||
<register name="a0"/>
|
||||
<register name="a1"/>
|
||||
<register name="a2"/>
|
||||
<register name="a3"/>
|
||||
<register name="t0"/>
|
||||
<register name="t1"/>
|
||||
<register name="t2"/>
|
||||
<register name="t3"/>
|
||||
<register name="t4"/>
|
||||
<register name="t5"/>
|
||||
<register name="t6"/>
|
||||
<register name="t7"/>
|
||||
<register name="t8"/>
|
||||
<register name="t9"/>
|
||||
<register name="at"/>
|
||||
<register name="v0"/>
|
||||
<register name="v1"/>
|
||||
<register name="f0"/>
|
||||
<register name="f1"/>
|
||||
</killedbycall>
|
||||
<localrange>
|
||||
<range space="stack" first="0xfff0bdc0" last="0xffffffff"/>
|
||||
@@ -25,6 +25,7 @@
|
||||
</returnaddress>
|
||||
<default_proto>
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0">
|
||||
<!-- This is based on the System V ABI -->
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f12_13"/>
|
||||
@@ -47,6 +48,52 @@
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="16" space="stack"/>
|
||||
</pentry>
|
||||
<!-- Parameters within the ellipses only use integer registers -->
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<varargs first="0"/>
|
||||
<consume storage="general"/>
|
||||
</rule>
|
||||
<!-- special case: first two args are float,double, which produces a 'hole' in the
|
||||
second word of the argument space, which must be explicitly consumed -->
|
||||
<rule>
|
||||
<datatype name="float" minsize="1" maxsize="4"/>
|
||||
<position index="0"/>
|
||||
<datatype_at index="1">
|
||||
<datatype name="float" minsize="5" maxsize="8"/>
|
||||
</datatype_at>
|
||||
<consume storage="float"/>
|
||||
<consume_extra storage="general"/>
|
||||
<consume_extra storage="general"/>
|
||||
</rule>
|
||||
<!-- Only leading floating-point parameters can use float registers -->
|
||||
<rule>
|
||||
<datatype name="float" minsize="1" maxsize="8"/> <!-- float parameter -->
|
||||
<position index="0"/> <!-- as first input parameter -->
|
||||
<consume storage="float"/> <!-- use f12_f13 -->
|
||||
<consume_extra storage="general"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float" minsize="1" maxsize="8"/> <!-- float parameter -->
|
||||
<position index="1"/> <!-- as second input parameter -->
|
||||
<datatype_at index="0"> <!-- if the first input -->
|
||||
<datatype name="float" minsize="1" maxsize="8"/> <!-- is a float parameter -->
|
||||
</datatype_at>
|
||||
<consume storage="float"/> <!-- use f14_f15 -->
|
||||
<consume_extra storage="general"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<join align="true" reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union"/>
|
||||
<join align="true" reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/> <!-- otherwise any parameter -->
|
||||
<join align="true"/> <!-- should split across general purpose registers -->
|
||||
</rule>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
@@ -55,9 +102,25 @@
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="v0" piece2="v1"/>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<hidden_return/> <!-- structures always passed as hidden return parameter -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union"/>
|
||||
<hidden_return/> <!-- unions always passed as hidden return parameter -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
@@ -72,12 +135,24 @@
|
||||
<register name="sp"/>
|
||||
<register name="gp"/>
|
||||
<register name="f20"/>
|
||||
<register name="f21"/>
|
||||
<register name="f22"/>
|
||||
<register name="f23"/>
|
||||
<register name="f24"/>
|
||||
<register name="f25"/>
|
||||
<register name="f26"/>
|
||||
<register name="f27"/>
|
||||
<register name="f28"/>
|
||||
<register name="f29"/>
|
||||
<register name="f30"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="at"/>
|
||||
<register name="v0"/>
|
||||
<register name="v1"/>
|
||||
<register name="f0"/>
|
||||
<register name="f1"/>
|
||||
</killedbycall>
|
||||
<internal_storage>
|
||||
<register name="gp"/> <!-- Compilers may save gp to the stack before a call and restore it afterward -->
|
||||
</internal_storage>
|
||||
|
||||
@@ -47,6 +47,44 @@
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="16" space="stack"/>
|
||||
</pentry>
|
||||
<!-- Parameters within the ellipses only use integer registers -->
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<varargs first="0"/>
|
||||
<consume storage="general"/>
|
||||
</rule>
|
||||
<!-- special case: first two args are float,double, which produces a 'hole' in the
|
||||
second word of the argument space, which must be explicitly consumed -->
|
||||
<rule>
|
||||
<datatype name="float" minsize="1" maxsize="4"/>
|
||||
<position index="0"/>
|
||||
<datatype_at index="1">
|
||||
<datatype name="float" minsize="5" maxsize="8"/>
|
||||
</datatype_at>
|
||||
<consume storage="float"/>
|
||||
<consume_extra storage="general"/>
|
||||
<consume_extra storage="general"/>
|
||||
</rule>
|
||||
<!-- Only leading floating-point parameters can use float registers -->
|
||||
<rule>
|
||||
<datatype name="float" minsize="1" maxsize="8"/> <!-- float parameter -->
|
||||
<position index="0"/> <!-- as first input parameter -->
|
||||
<consume storage="float"/> <!-- use f12_f13 -->
|
||||
<consume_extra storage="general"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float" minsize="1" maxsize="8"/> <!-- float parameter -->
|
||||
<position index="1"/> <!-- as second input parameter -->
|
||||
<datatype_at index="0"> <!-- if the first input -->
|
||||
<datatype name="float" minsize="1" maxsize="8"/> <!-- is a float parameter -->
|
||||
</datatype_at>
|
||||
<consume storage="float"/> <!-- use f14_f15 -->
|
||||
<consume_extra storage="general"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/> <!-- otherwise any parameter -->
|
||||
<join align="true"/> <!-- should split across general purpose registers -->
|
||||
</rule>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
@@ -55,9 +93,25 @@
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="v1" piece2="v0"/>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<hidden_return/> <!-- structures always passed as hidden return parameter -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union"/>
|
||||
<hidden_return/> <!-- unions always passed as hidden return parameter -->
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
@@ -72,12 +126,24 @@
|
||||
<register name="sp"/>
|
||||
<register name="gp"/>
|
||||
<register name="f20"/>
|
||||
<register name="f21"/>
|
||||
<register name="f22"/>
|
||||
<register name="f23"/>
|
||||
<register name="f24"/>
|
||||
<register name="f25"/>
|
||||
<register name="f26"/>
|
||||
<register name="f27"/>
|
||||
<register name="f28"/>
|
||||
<register name="f29"/>
|
||||
<register name="f30"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="at"/>
|
||||
<register name="v0"/>
|
||||
<register name="v1"/>
|
||||
<register name="f0"/>
|
||||
<register name="f1"/>
|
||||
</killedbycall>
|
||||
<internal_storage>
|
||||
<register name="gp"/> <!-- Compilers may save gp to the stack before a call and restore it afterward -->
|
||||
</internal_storage>
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<compiler_spec>
|
||||
<data_organization>
|
||||
<pointer_size value="4"/>
|
||||
<float_size value="4" />
|
||||
<double_size value="8" />
|
||||
<long_double_size value="8" />
|
||||
<size_alignment_map>
|
||||
<entry size="1" alignment="1" />
|
||||
<entry size="2" alignment="2" />
|
||||
<entry size="4" alignment="4" />
|
||||
<entry size="8" alignment="8" />
|
||||
</size_alignment_map>
|
||||
</data_organization>
|
||||
|
||||
<stackpointer register="sp" space="ram"/>
|
||||
<funcptr align="2"/>
|
||||
<global>
|
||||
<range space="ram"/>
|
||||
<range space="register" first="0x2000" last="0x2fff"/>
|
||||
</global>
|
||||
<returnaddress>
|
||||
<register name="ra"/>
|
||||
</returnaddress>
|
||||
<default_proto>
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0">
|
||||
<input>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f12_13"/>
|
||||
</pentry>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f14_15"/>
|
||||
</pentry>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f16_17"/>
|
||||
</pentry>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f18_19"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="t0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="t1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="t2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="t3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f0_1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="v1" piece2="v0"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
<register name="s1"/>
|
||||
<register name="s2"/>
|
||||
<register name="s3"/>
|
||||
<register name="s4"/>
|
||||
<register name="s5"/>
|
||||
<register name="s6"/>
|
||||
<register name="s7"/>
|
||||
<register name="s8"/>
|
||||
<register name="sp"/>
|
||||
<register name="gp"/>
|
||||
<register name="f20"/>
|
||||
<register name="f22"/>
|
||||
<register name="f24"/>
|
||||
<register name="f26"/>
|
||||
<register name="f28"/>
|
||||
<register name="f30"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="at"/>
|
||||
<register name="a0"/>
|
||||
<register name="a1"/>
|
||||
<register name="a2"/>
|
||||
<register name="a3"/>
|
||||
<register name="t0"/>
|
||||
<register name="t1"/>
|
||||
<register name="t2"/>
|
||||
<register name="t3"/>
|
||||
<register name="t4"/>
|
||||
<register name="t5"/>
|
||||
<register name="t6"/>
|
||||
<register name="t7"/>
|
||||
<register name="t8"/>
|
||||
<register name="t9"/>
|
||||
</killedbycall>
|
||||
<localrange>
|
||||
<range space="stack" first="0xfff0bdc0" last="0xffffffff"/>
|
||||
<range space="stack" first="0" last="15"/> <!-- This is backup storage space for register params, but we treat as locals -->
|
||||
</localrange>
|
||||
</prototype>
|
||||
</default_proto>
|
||||
|
||||
</compiler_spec>
|
||||
@@ -1,111 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<compiler_spec>
|
||||
<data_organization>
|
||||
<pointer_size value="8"/>
|
||||
<float_size value="4" />
|
||||
<double_size value="8" />
|
||||
<long_double_size value="16" />
|
||||
<size_alignment_map>
|
||||
<entry size="1" alignment="1" />
|
||||
<entry size="2" alignment="2" />
|
||||
<entry size="4" alignment="4" />
|
||||
<entry size="8" alignment="8" />
|
||||
</size_alignment_map>
|
||||
</data_organization>
|
||||
<stackpointer register="sp" space="ram"/>
|
||||
<funcptr align="2"/>
|
||||
<global>
|
||||
<range space="ram"/>
|
||||
<range space="register" first="0x2000" last="0x2fff"/>
|
||||
</global>
|
||||
<aggressivetrim signext="true"/> <!-- Aggressively try to eliminate sign extensions -->
|
||||
<default_proto>
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0">
|
||||
<input killedbycall="true">
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f12"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f13"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f14"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f15"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f16"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f17"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f18"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f19"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t1"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t3"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="8">
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="9" maxsize="16">
|
||||
<addr space="join" piece1="v0" piece2="v1"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
<register name="s1"/>
|
||||
<register name="s2"/>
|
||||
<register name="s3"/>
|
||||
<register name="s4"/>
|
||||
<register name="s5"/>
|
||||
<register name="s6"/>
|
||||
<register name="s7"/>
|
||||
<register name="s8"/>
|
||||
<register name="sp"/>
|
||||
<register name="gp"/>
|
||||
<register name="f24"/>
|
||||
<register name="f25"/>
|
||||
<register name="f26"/>
|
||||
<register name="f27"/>
|
||||
<register name="f28"/>
|
||||
<register name="f29"/>
|
||||
<register name="f30"/>
|
||||
<register name="f31"/>
|
||||
</unaffected>
|
||||
</prototype>
|
||||
</default_proto>
|
||||
</compiler_spec>
|
||||
189
Ghidra/Processors/MIPS/data/languages/mips64be.cspec
Normal file
189
Ghidra/Processors/MIPS/data/languages/mips64be.cspec
Normal file
@@ -0,0 +1,189 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<compiler_spec>
|
||||
<data_organization>
|
||||
<pointer_size value="8"/>
|
||||
<integer_size value="4" />
|
||||
<long_size value="8" />
|
||||
<float_size value="4" />
|
||||
<double_size value="8" />
|
||||
<long_double_size value="16" />
|
||||
<size_alignment_map>
|
||||
<entry size="1" alignment="1" />
|
||||
<entry size="2" alignment="2" />
|
||||
<entry size="4" alignment="4" />
|
||||
<entry size="8" alignment="8" />
|
||||
</size_alignment_map>
|
||||
</data_organization>
|
||||
<stackpointer register="sp" space="ram"/>
|
||||
<funcptr align="2"/>
|
||||
<global>
|
||||
<range space="ram"/>
|
||||
<range space="register" first="0x2000" last="0x2fff"/>
|
||||
</global>
|
||||
<aggressivetrim signext="true"/> <!-- Aggressively try to eliminate sign extensions -->
|
||||
<default_proto>
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0">
|
||||
<input>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f12"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a0"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f13"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a1"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f14"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a2"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f15"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a3"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f16"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t0"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f17"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t1"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f18"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t2"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f19"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t3"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<pentry minsize="1" maxsize="500" align="8">
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<varargs first="0"/>
|
||||
<join reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<varargs first="0"/>
|
||||
<join reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<join reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<join_dual_class stackspill="true" fillalternate="true" reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union"/>
|
||||
<join reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f0"/>
|
||||
</pentry>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="v1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<join reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="union"/>
|
||||
<join reversejustify="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
<register name="s1"/>
|
||||
<register name="s2"/>
|
||||
<register name="s3"/>
|
||||
<register name="s4"/>
|
||||
<register name="s5"/>
|
||||
<register name="s6"/>
|
||||
<register name="s7"/>
|
||||
<register name="s8"/>
|
||||
<register name="sp"/>
|
||||
<register name="gp"/>
|
||||
<register name="f24"/>
|
||||
<register name="f25"/>
|
||||
<register name="f26"/>
|
||||
<register name="f27"/>
|
||||
<register name="f28"/>
|
||||
<register name="f29"/>
|
||||
<register name="f30"/>
|
||||
<register name="f31"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="at"/>
|
||||
<register name="v0"/>
|
||||
<register name="v1"/>
|
||||
<register name="f0"/>
|
||||
<register name="f2"/>
|
||||
</killedbycall>
|
||||
</prototype>
|
||||
</default_proto>
|
||||
</compiler_spec>
|
||||
173
Ghidra/Processors/MIPS/data/languages/mips64le.cspec
Normal file
173
Ghidra/Processors/MIPS/data/languages/mips64le.cspec
Normal file
@@ -0,0 +1,173 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<compiler_spec>
|
||||
<data_organization>
|
||||
<pointer_size value="8"/>
|
||||
<integer_size value="4" />
|
||||
<long_size value="8" />
|
||||
<float_size value="4" />
|
||||
<double_size value="8" />
|
||||
<long_double_size value="16" />
|
||||
<size_alignment_map>
|
||||
<entry size="1" alignment="1" />
|
||||
<entry size="2" alignment="2" />
|
||||
<entry size="4" alignment="4" />
|
||||
<entry size="8" alignment="8" />
|
||||
</size_alignment_map>
|
||||
</data_organization>
|
||||
<stackpointer register="sp" space="ram"/>
|
||||
<funcptr align="2"/>
|
||||
<global>
|
||||
<range space="ram"/>
|
||||
<range space="register" first="0x2000" last="0x2fff"/>
|
||||
</global>
|
||||
<aggressivetrim signext="true"/> <!-- Aggressively try to eliminate sign extensions -->
|
||||
<default_proto>
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0">
|
||||
<input>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f12"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a0"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f13"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a1"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f14"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a2"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f15"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="a3"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f16"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t0"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f17"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t1"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f18"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t2"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<group>
|
||||
<pentry minsize="1" maxsize="8" metatype="float">
|
||||
<register name="f19"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="t3"/>
|
||||
</pentry>
|
||||
</group>
|
||||
<pentry minsize="1" maxsize="500" align="8">
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<varargs first="0"/>
|
||||
<consume storage="general"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<varargs first="0"/>
|
||||
<join/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="struct"/>
|
||||
<join_dual_class stackspill="true" fillalternate="true"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f0"/>
|
||||
</pentry>
|
||||
<pentry minsize="4" maxsize="8" metatype="float">
|
||||
<register name="f2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="v0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="v1"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="homogeneous-float-aggregate"/>
|
||||
<join_per_primitive storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="float"/>
|
||||
<consume storage="float"/>
|
||||
</rule>
|
||||
<rule>
|
||||
<datatype name="any"/>
|
||||
<join/>
|
||||
</rule>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="s0"/>
|
||||
<register name="s1"/>
|
||||
<register name="s2"/>
|
||||
<register name="s3"/>
|
||||
<register name="s4"/>
|
||||
<register name="s5"/>
|
||||
<register name="s6"/>
|
||||
<register name="s7"/>
|
||||
<register name="s8"/>
|
||||
<register name="sp"/>
|
||||
<register name="gp"/>
|
||||
<register name="f24"/>
|
||||
<register name="f25"/>
|
||||
<register name="f26"/>
|
||||
<register name="f27"/>
|
||||
<register name="f28"/>
|
||||
<register name="f29"/>
|
||||
<register name="f30"/>
|
||||
<register name="f31"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="at"/>
|
||||
<register name="v0"/>
|
||||
<register name="v1"/>
|
||||
<register name="f0"/>
|
||||
<register name="f2"/>
|
||||
</killedbycall>
|
||||
</prototype>
|
||||
</default_proto>
|
||||
</compiler_spec>
|
||||
Reference in New Issue
Block a user