mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
614 lines
16 KiB
XML
614 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<compiler_spec>
|
|
<data_organization>
|
|
<absolute_max_alignment value="0" />
|
|
<machine_alignment value="2" />
|
|
<default_alignment value="1" />
|
|
<default_pointer_alignment value="8" />
|
|
<pointer_size value="8" />
|
|
<wchar_size value="4" /> <!-- matches go's 'rune' -->
|
|
<short_size value="2" />
|
|
<integer_size value="8" />
|
|
<long_size value="8" />
|
|
<long_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>
|
|
|
|
<global>
|
|
<range space="ram"/>
|
|
</global>
|
|
|
|
<context_data>
|
|
</context_data>
|
|
|
|
<stackpointer register="RSP" space="ram"/>
|
|
|
|
<returnaddress>
|
|
<varnode space="stack" offset="0" size="8"/>
|
|
</returnaddress>
|
|
|
|
<default_proto>
|
|
<prototype name="abi-internal" extrapop="8" stackshift="8">
|
|
<input>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM0_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM1_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM2_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM3_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM4_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM5_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM6_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM7_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM8_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM9_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM10_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM11_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM12_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM13_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM14_Qa"/>
|
|
</pentry>
|
|
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RAX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RBX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RCX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RSI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R8"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R9"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R10"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R11"/>
|
|
</pentry>
|
|
|
|
<pentry minsize="1" maxsize="500" align="1">
|
|
<addr offset="8" space="stack"/>
|
|
</pentry>
|
|
<rule>
|
|
<datatype name="int" minsize="9" maxsize="16"/>
|
|
<join/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="uint" minsize="9" maxsize="16"/>
|
|
<join/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="float"/>
|
|
<consume storage="float"/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="float"/>
|
|
<goto_stack/> <!-- Once float registers are used don't use general purpose-->
|
|
</rule>
|
|
<rule>
|
|
<datatype name="array" minelements="2"/> <!-- Array with 1 element treated like structure -->
|
|
<goto_stack/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="any"/>
|
|
<join_per_primitive/>
|
|
</rule>
|
|
</input>
|
|
|
|
<output>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM0_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM1_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM2_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM3_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM4_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM5_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM6_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM7_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM8_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM9_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM10_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM11_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM12_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM13_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM14_Qa"/>
|
|
</pentry>
|
|
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RAX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RBX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RCX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RSI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R8"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R9"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R10"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R11"/>
|
|
</pentry>
|
|
|
|
<pentry minsize="1" maxsize="500" align="1">
|
|
<addr offset="8" space="stack"/>
|
|
</pentry>
|
|
<rule>
|
|
<datatype name="int" minsize="9" maxsize="16"/>
|
|
<join/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="uint" minsize="9" maxsize="16"/>
|
|
<join/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="float"/>
|
|
<consume storage="float"/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="float"/>
|
|
<goto_stack/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="array" minelements="2"/>
|
|
<goto_stack/>
|
|
</rule>
|
|
<rule>
|
|
<datatype name="any"/>
|
|
<join_per_primitive/>
|
|
</rule>
|
|
</output>
|
|
<sharestack first="input" align="8"/>
|
|
|
|
<killedbycall>
|
|
<register name="RAX"/>
|
|
<register name="RBX"/>
|
|
<register name="RCX"/>
|
|
<register name="RDI"/>
|
|
<register name="RSI"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="R11"/>
|
|
</killedbycall>
|
|
<unaffected>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R14"/>
|
|
<register name="RDX"/>
|
|
</unaffected>
|
|
</prototype>
|
|
</default_proto>
|
|
|
|
<prototype name="abi0" extrapop="8" stackshift="8">
|
|
<input>
|
|
<pentry minsize="1" maxsize="500" align="8">
|
|
<addr offset="8" space="stack"/>
|
|
</pentry>
|
|
</input>
|
|
|
|
<output>
|
|
</output>
|
|
|
|
<killedbycall>
|
|
<register name="RAX"/>
|
|
<register name="RBX"/>
|
|
<register name="RCX"/>
|
|
<register name="RDI"/>
|
|
<register name="RSI"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="R11"/>
|
|
</killedbycall>
|
|
<unaffected>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R14"/>
|
|
<register name="RDX"/>
|
|
</unaffected>
|
|
</prototype>
|
|
|
|
<prototype name="gcwrite_batch" extrapop="8" stackshift="8">
|
|
<input>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R11"/>
|
|
</pentry>
|
|
</input>
|
|
|
|
<output>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R11"/>
|
|
</pentry>
|
|
</output>
|
|
|
|
<killedbycall>
|
|
<register name="R11"/>
|
|
</killedbycall>
|
|
<unaffected>
|
|
<register name="RAX"/>
|
|
<register name="RBX"/>
|
|
<register name="RCX"/>
|
|
<register name="RDX"/>
|
|
<register name="RSI"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R14"/>
|
|
</unaffected>
|
|
</prototype>
|
|
|
|
<prototype name="gcwrite_buffered" extrapop="8" stackshift="8">
|
|
<input>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RAX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
</input>
|
|
|
|
<output></output>
|
|
|
|
<unaffected>
|
|
<register name="RAX"/>
|
|
<register name="RBX"/>
|
|
<register name="RCX"/>
|
|
<register name="RDX"/>
|
|
<register name="RSI"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="R11"/>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R14"/>
|
|
</unaffected>
|
|
</prototype>
|
|
|
|
<prototype name="duffzero" extrapop="8" stackshift="8">
|
|
<input>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
</input>
|
|
|
|
<output>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
</output>
|
|
|
|
<killedbycall>
|
|
<register name="RDI"/>
|
|
</killedbycall>
|
|
<unaffected>
|
|
<register name="RAX"/>
|
|
<register name="RBX"/>
|
|
<register name="RCX"/>
|
|
<register name="RDX"/>
|
|
<register name="RSI"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="R11"/>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R14"/>
|
|
</unaffected>
|
|
</prototype>
|
|
|
|
<prototype name="duffcopy" extrapop="8" stackshift="8">
|
|
<input>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RSI"/>
|
|
</pentry>
|
|
</input>
|
|
|
|
<output>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
<pentry minsize="9" maxsize="16">
|
|
<addr space="join" piece2="RDI" piece1="RSI"/>
|
|
</pentry>
|
|
</output>
|
|
|
|
<killedbycall>
|
|
<register name="RDI"/>
|
|
<register name="RSI"/>
|
|
</killedbycall>
|
|
<unaffected>
|
|
<register name="RAX"/>
|
|
<register name="RBX"/>
|
|
<register name="RCX"/>
|
|
<register name="RDX"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="R11"/>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R14"/>
|
|
</unaffected>
|
|
</prototype>
|
|
|
|
<prototype name="__stdcall" extrapop="8" stackshift="8">
|
|
<!-- Derived from "System V Application Binary Interface AMD64 Architecture Processor Supplement" April 2016 -->
|
|
<input>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM0_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM1_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM2_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM3_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM4_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM5_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM6_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM7_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RSI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RCX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R8"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R9"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="500" align="8">
|
|
<addr offset="8" space="stack"/>
|
|
</pentry>
|
|
</input>
|
|
<output>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM0_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RAX"/>
|
|
</pentry>
|
|
<pentry minsize="9" maxsize="16">
|
|
<addr space="join" piece1="RDX" piece2="RAX"/>
|
|
</pentry>
|
|
</output>
|
|
<killedbycall>
|
|
<register name="RAX"/>
|
|
<register name="RDX"/>
|
|
<register name="XMM0"/>
|
|
</killedbycall>
|
|
<unaffected>
|
|
<register name="RBX"/>
|
|
<register name="RSP"/>
|
|
<register name="RBP"/>
|
|
<register name="R12"/>
|
|
<register name="R13"/>
|
|
<register name="R14"/>
|
|
<register name="R15"/>
|
|
</unaffected>
|
|
</prototype>
|
|
|
|
<prototype name="MSABI" extrapop="8" stackshift="8">
|
|
<input pointermax="8">
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM0_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM1_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM2_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM3_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RCX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R8"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R9"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="500" align="8">
|
|
<addr offset="40" space="stack"/>
|
|
</pentry>
|
|
</input>
|
|
<output>
|
|
<pentry minsize="4" maxsize="8" metatype="float">
|
|
<register name="XMM0_Qa"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RAX"/>
|
|
</pentry>
|
|
</output>
|
|
<unaffected>
|
|
<varnode space="ram" offset="0" size="8"/>
|
|
<register name="RBX"/>
|
|
<register name="RBP"/>
|
|
<register name="RDI"/>
|
|
<register name="RSI"/>
|
|
<register name="RSP"/>
|
|
<register name="R12"/>
|
|
<register name="R13"/>
|
|
<register name="R14"/>
|
|
<register name="R15"/>
|
|
<register name="DF"/>
|
|
</unaffected>
|
|
<killedbycall>
|
|
<register name="RAX"/>
|
|
<register name="XMM0"/>
|
|
</killedbycall>
|
|
<localrange>
|
|
<range space="stack" first="0xfffffffffff0bdc1" last="0xffffffffffffffff"/>
|
|
<range space="stack" first="8" last="39"/>
|
|
</localrange>
|
|
</prototype>
|
|
|
|
<prototype name="syscall" extrapop="8" stackshift="8">
|
|
<input pointermax="8">
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RSI"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RDX"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R10"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R8"/>
|
|
</pentry>
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="R9"/>
|
|
</pentry>
|
|
</input>
|
|
<output killedbycall="true">
|
|
<pentry minsize="1" maxsize="8">
|
|
<register name="RAX"/>
|
|
</pentry>
|
|
</output>
|
|
<unaffected>
|
|
<varnode space="ram" offset="0" size="8"/>
|
|
<register name="RBX"/>
|
|
<register name="RDX"/>
|
|
<register name="RBP"/>
|
|
<register name="RDI"/>
|
|
<register name="RSI"/>
|
|
<register name="RSP"/>
|
|
<register name="R8"/>
|
|
<register name="R9"/>
|
|
<register name="R10"/>
|
|
<register name="R12"/>
|
|
<register name="R13"/>
|
|
<register name="R14"/>
|
|
<register name="R15"/>
|
|
<register name="DF"/>
|
|
</unaffected>
|
|
<killedbycall>
|
|
<register name="RCX"/>
|
|
<register name="R11"/>
|
|
</killedbycall>
|
|
</prototype>
|
|
</compiler_spec>
|