mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-19 11:43:56 +00:00
Use ghidra spec from icicle-python
--> https://github.com/icicle-emu/icicle-python
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -575,43 +575,48 @@
|
||||
:CMPXCHG^lockx m8,Reg8 is vexMode=0 & lockx & unlock & byte=0xf; byte=0xb0; m8 & Reg8 ...
|
||||
{
|
||||
build lockx;
|
||||
build m8;
|
||||
subflags(AL,m8);
|
||||
local tmp=AL-m8;
|
||||
resultflags(tmp);
|
||||
local diff = m8^Reg8;
|
||||
m8 = m8 ^ (ZF*diff);
|
||||
diff = AL ^ m8; AL = AL ^ ((ZF==0)*diff);
|
||||
build unlock;
|
||||
local dest = m8;
|
||||
subflags(AL,dest);
|
||||
local diff = AL-dest;
|
||||
resultflags(diff);
|
||||
if (ZF) goto <equal>;
|
||||
AL = dest;
|
||||
goto <inst_end>;
|
||||
<equal>
|
||||
m8 = Reg8;
|
||||
<inst_end>
|
||||
build unlock;
|
||||
}
|
||||
|
||||
:CMPXCHG^lockx m16,Reg16 is vexMode=0 & lockx & unlock & opsize=0 & byte=0xf; byte=0xb1; m16 & Reg16 ...
|
||||
{
|
||||
build lockx;
|
||||
build m16;
|
||||
subflags(AX,m16);
|
||||
local tmp=AX-m16;
|
||||
resultflags(tmp);
|
||||
local diff = m16^Reg16;
|
||||
m16 = m16 ^ (zext(ZF) * diff);
|
||||
diff = AX ^ m16;
|
||||
AX = AX ^ (zext(ZF==0) * diff);
|
||||
local dest = m16;
|
||||
subflags(AX,dest);
|
||||
local diff = AX-dest;
|
||||
resultflags(diff);
|
||||
if (ZF) goto <equal>;
|
||||
AX = dest;
|
||||
goto <inst_end>;
|
||||
<equal>
|
||||
m16 = Reg16;
|
||||
<inst_end>
|
||||
build unlock;
|
||||
}
|
||||
|
||||
:CMPXCHG^lockx m32,Reg32 is vexMode=0 & lockx & unlock & opsize=1 & byte=0xf; byte=0xb1; m32 & Reg32 ... & check_EAX_dest ...
|
||||
{
|
||||
build lockx;
|
||||
build m32;
|
||||
#this instruction writes to either EAX or m32
|
||||
#in 64-bit mode, a 32-bit register that is written to
|
||||
#(and only the register that is written to)
|
||||
#this instruction writes to either EAX or Rmr32
|
||||
#in 64-bit mode, a 32-bit register that is written to
|
||||
#(and only the register that is written to)
|
||||
#must be zero-extended to 64 bits
|
||||
subflags(EAX,m32);
|
||||
local tmp=EAX-m32;
|
||||
resultflags(tmp);
|
||||
if (ZF==1) goto <equal>;
|
||||
EAX = m32;
|
||||
local dest = m32;
|
||||
subflags(EAX,dest);
|
||||
local diff = EAX-dest;
|
||||
resultflags(diff);
|
||||
if (ZF) goto <equal>;
|
||||
EAX = dest;
|
||||
build check_EAX_dest;
|
||||
goto <inst_end>;
|
||||
<equal>
|
||||
@@ -624,26 +629,28 @@
|
||||
:CMPXCHG^lockx m64,Reg64 is $(LONGMODE_ON) & vexMode=0 & lockx & unlock & opsize=2 & byte=0xf; byte=0xb1; m64 & Reg64 ...
|
||||
{
|
||||
build lockx;
|
||||
build m64;
|
||||
subflags(RAX,m64);
|
||||
local tmp=RAX-m64;
|
||||
resultflags(tmp);
|
||||
local diff = m64^Reg64;
|
||||
m64 = m64 ^ (zext(ZF) * diff);
|
||||
diff = RAX ^ m64;
|
||||
RAX = RAX ^ (zext(ZF==0) * diff);
|
||||
build unlock;
|
||||
local dest = m64;
|
||||
subflags(RAX,dest);
|
||||
local diff = RAX-dest;
|
||||
resultflags(diff);
|
||||
if (ZF) goto <equal>;
|
||||
RAX = dest;
|
||||
goto <inst_end>;
|
||||
<equal>
|
||||
m64 = Reg64;
|
||||
<inst_end>
|
||||
build unlock;
|
||||
}
|
||||
@endif
|
||||
|
||||
:CMPXCHG8B^lockx m64 is vexMode=0 & lockx & unlock & byte=0xf; byte=0xc7; ( mod != 0b11 & reg_opcode=1 ) ... & m64
|
||||
{
|
||||
build lockx;
|
||||
build m64;
|
||||
ZF = ((zext(EDX) << 32) | zext(EAX)) == m64;
|
||||
local dest = m64;
|
||||
ZF = ((zext(EDX) << 32) | zext(EAX)) == dest;
|
||||
if (ZF == 1) goto <equal>;
|
||||
EDX = m64(4);
|
||||
EAX = m64:4;
|
||||
EDX = dest(4);
|
||||
EAX = dest:4;
|
||||
goto <done>;
|
||||
<equal>
|
||||
m64 = (zext(ECX) << 32) | zext(EBX);
|
||||
@@ -654,11 +661,11 @@
|
||||
@ifdef IA64
|
||||
:CMPXCHG16B^lockx m128 is $(LONGMODE_ON) & vexMode=0 & lockx & unlock & opsize=2 & byte=0xf; byte=0xc7; ( mod != 0b11 & reg_opcode=1 ) ... & ( m128 ) {
|
||||
build lockx;
|
||||
build m128;
|
||||
ZF = ((zext(RDX) << 64) | zext(RAX)) == m128;
|
||||
local dest = m128;
|
||||
ZF = ((zext(RDX) << 64) | zext(RAX)) == dest;
|
||||
if (ZF == 1) goto <equal>;
|
||||
RDX = m128(8);
|
||||
RAX = m128:8;
|
||||
RDX = dest(8);
|
||||
RAX = dest:8;
|
||||
goto <done>;
|
||||
<equal>
|
||||
m128 = ((zext(RCX) << 64) | zext(RBX));
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
macro conditionalAssign(dest, cond, trueVal, falseVal) {
|
||||
dest = zext(cond) * trueVal | zext(!cond) * falseVal;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,324 @@
|
||||
<?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="4" />
|
||||
<pointer_size value="4" />
|
||||
<wchar_size value="4" /> <!-- matches go's 'rune' -->
|
||||
<short_size value="2" />
|
||||
<integer_size value="4" />
|
||||
<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="4" />
|
||||
</size_alignment_map>
|
||||
</data_organization>
|
||||
|
||||
<global>
|
||||
<range space="ram"/>
|
||||
</global>
|
||||
|
||||
<context_data>
|
||||
</context_data>
|
||||
|
||||
<stackpointer register="ESP" space="ram"/>
|
||||
|
||||
<returnaddress>
|
||||
<varnode space="stack" offset="0" size="4"/>
|
||||
</returnaddress>
|
||||
|
||||
<default_proto>
|
||||
<prototype name="abi0" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="4" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
</unaffected>
|
||||
</prototype>
|
||||
</default_proto>
|
||||
|
||||
<prototype name="duffzero" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDI"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
</input>
|
||||
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDI"/>
|
||||
</pentry>
|
||||
</output>
|
||||
|
||||
<killedbycall>
|
||||
<register name="EDI"/>
|
||||
</killedbycall>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
</unaffected>
|
||||
</prototype>
|
||||
|
||||
<prototype name="duffcopy" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDI"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="ESI"/>
|
||||
</pentry>
|
||||
</input>
|
||||
|
||||
<output>
|
||||
</output>
|
||||
|
||||
<killedbycall>
|
||||
<register name="EDI"/>
|
||||
<register name="ESI"/>
|
||||
<register name="ECX"/>
|
||||
</killedbycall>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
</unaffected>
|
||||
</prototype>
|
||||
|
||||
<prototype name="__cdeclf" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="4" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output killedbycall="true">
|
||||
<pentry minsize="1" maxsize="10">
|
||||
<register name="ST0"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
<register name="ESI"/>
|
||||
<register name="EDI"/>
|
||||
<register name="EBX"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="ECX"/>
|
||||
<register name="EDX"/>
|
||||
</killedbycall>
|
||||
<likelytrash>
|
||||
<register name="EAX"/>
|
||||
</likelytrash>
|
||||
</prototype>
|
||||
<prototype name="__thiscall" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="4" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output killedbycall="true">
|
||||
<pentry minsize="4" maxsize="10" metatype="float" extension="float">
|
||||
<register name="ST0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="EDX" piece2="EAX"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
<register name="ESI"/>
|
||||
<register name="EDI"/>
|
||||
<register name="EBX"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="ECX"/>
|
||||
<register name="EDX"/>
|
||||
<register name="ST0"/>
|
||||
<register name="ST1"/>
|
||||
</killedbycall>
|
||||
<likelytrash>
|
||||
<register name="EAX"/>
|
||||
</likelytrash>
|
||||
</prototype>
|
||||
<prototype name="__regparm3" extrapop="4" stackshift="4"> <!-- Used particularly by linux kernel -->
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="ECX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="4" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output killedbycall="true">
|
||||
<pentry minsize="4" maxsize="10" metatype="float" extension="float">
|
||||
<register name="ST0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="EDX" piece2="EAX"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
<register name="ESI"/>
|
||||
<register name="EDI"/>
|
||||
<register name="EBX"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="ECX"/>
|
||||
<register name="EDX"/>
|
||||
<register name="ST0"/>
|
||||
<register name="ST1"/>
|
||||
</killedbycall>
|
||||
<likelytrash>
|
||||
<register name="EAX"/>
|
||||
</likelytrash>
|
||||
</prototype>
|
||||
<prototype name="__regparm2" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="4" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output killedbycall="true">
|
||||
<pentry minsize="4" maxsize="10" metatype="float" extension="float">
|
||||
<register name="ST0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="EDX" piece2="EAX"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
<register name="ESI"/>
|
||||
<register name="EDI"/>
|
||||
<register name="EBX"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="ECX"/>
|
||||
<register name="EDX"/>
|
||||
<register name="ST0"/>
|
||||
<register name="ST1"/>
|
||||
</killedbycall>
|
||||
<likelytrash>
|
||||
<register name="EAX"/>
|
||||
</likelytrash>
|
||||
</prototype>
|
||||
<prototype name="__regparm1" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="4" space="stack"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output killedbycall="true">
|
||||
<pentry minsize="4" maxsize="10" metatype="float" extension="float">
|
||||
<register name="ST0"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<addr space="join" piece1="EDX" piece2="EAX"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="ESP"/>
|
||||
<register name="EBP"/>
|
||||
<register name="ESI"/>
|
||||
<register name="EDI"/>
|
||||
<register name="EBX"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="ECX"/>
|
||||
<register name="EDX"/>
|
||||
<register name="ST0"/>
|
||||
<register name="ST1"/>
|
||||
</killedbycall>
|
||||
<likelytrash>
|
||||
<register name="EAX"/>
|
||||
</likelytrash>
|
||||
</prototype>
|
||||
<prototype name="syscall" extrapop="4" stackshift="4">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EBX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="ECX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDX"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="ESI"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EDI"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EBP"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output killedbycall="true">
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="EAX"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="EBX"/>
|
||||
<register name="ECX"/>
|
||||
<register name="EDX"/>
|
||||
<register name="EBP"/>
|
||||
<register name="EDI"/>
|
||||
<register name="ESI"/>
|
||||
<register name="ESP"/>
|
||||
<register name="DF"/>
|
||||
</unaffected>
|
||||
<killedbycall>
|
||||
<register name="EAX"/>
|
||||
</killedbycall>
|
||||
</prototype>
|
||||
</compiler_spec>
|
||||
@@ -0,0 +1,9 @@
|
||||
<golang>
|
||||
<register_info versions="all">
|
||||
<int_registers list=""/>
|
||||
<float_registers list=""/>
|
||||
<stack initialoffset="4" maxalign="4"/>
|
||||
<current_goroutine register=""/>
|
||||
<zero_register register=""/>
|
||||
</register_info>
|
||||
</golang>
|
||||
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<processor_spec>
|
||||
<properties>
|
||||
<property key="useOperandReferenceAnalyzerSwitchTables" value="true"/>
|
||||
<property key="assemblyRating:x86:LE:64:compat32" value="GOLD"/>
|
||||
</properties>
|
||||
<programcounter register="RIP"/>
|
||||
<context_data>
|
||||
<context_set space="ram">
|
||||
<set name="addrsize" val="1"/>
|
||||
<set name="opsize" val="1"/>
|
||||
<set name="rexprefix" val="0"/>
|
||||
<set name="longMode" val="0"/>
|
||||
</context_set>
|
||||
<tracked_set space="ram">
|
||||
<set name="DF" val="0"/>
|
||||
</tracked_set>
|
||||
</context_data>
|
||||
<register_data>
|
||||
<register name="DR0" group="DEBUG"/>
|
||||
<register name="DR1" group="DEBUG"/>
|
||||
<register name="DR2" group="DEBUG"/>
|
||||
<register name="DR3" group="DEBUG"/>
|
||||
<register name="DR4" group="DEBUG"/>
|
||||
<register name="DR5" group="DEBUG"/>
|
||||
<register name="DR6" group="DEBUG"/>
|
||||
<register name="DR7" group="DEBUG"/>
|
||||
<register name="DR8" group="DEBUG"/>
|
||||
<register name="DR9" group="DEBUG"/>
|
||||
<register name="DR10" group="DEBUG"/>
|
||||
<register name="DR11" group="DEBUG"/>
|
||||
<register name="DR12" group="DEBUG"/>
|
||||
<register name="DR13" group="DEBUG"/>
|
||||
<register name="DR14" group="DEBUG"/>
|
||||
<register name="DR15" group="DEBUG"/>
|
||||
<register name="CR0" group="CONTROL"/>
|
||||
<register name="CR1" group="CONTROL"/>
|
||||
<register name="CR2" group="CONTROL"/>
|
||||
<register name="CR3" group="CONTROL"/>
|
||||
<register name="CR4" group="CONTROL"/>
|
||||
<register name="CR5" group="CONTROL"/>
|
||||
<register name="CR6" group="CONTROL"/>
|
||||
<register name="CR7" group="CONTROL"/>
|
||||
<register name="CR8" group="CONTROL"/>
|
||||
<register name="CR9" group="CONTROL"/>
|
||||
<register name="CR10" group="CONTROL"/>
|
||||
<register name="CR11" group="CONTROL"/>
|
||||
<register name="CR12" group="CONTROL"/>
|
||||
<register name="CR13" group="CONTROL"/>
|
||||
<register name="CR14" group="CONTROL"/>
|
||||
<register name="CR15" group="CONTROL"/>
|
||||
<register name="C0" group="Cx"/>
|
||||
<register name="C1" group="Cx"/>
|
||||
<register name="C2" group="Cx"/>
|
||||
<register name="C3" group="Cx"/>
|
||||
<register name="ST0" group="ST"/>
|
||||
<register name="ST1" group="ST"/>
|
||||
<register name="ST2" group="ST"/>
|
||||
<register name="ST3" group="ST"/>
|
||||
<register name="ST4" group="ST"/>
|
||||
<register name="ST5" group="ST"/>
|
||||
<register name="ST6" group="ST"/>
|
||||
<register name="ST7" group="ST"/>
|
||||
<register name="FPUControlWord" group="FPU"/>
|
||||
<register name="FPUStatusWord" group="FPU"/>
|
||||
<register name="FPUTagWord" group="FPU"/>
|
||||
<register name="FPUDataPointer" group="FPU"/>
|
||||
<register name="FPUInstructionPointer" group="FPU"/>
|
||||
<register name="FPULastInstructionOpcode" group="FPU"/>
|
||||
<register name="MM0" group="MMX"/>
|
||||
<register name="MM1" group="MMX"/>
|
||||
<register name="MM2" group="MMX"/>
|
||||
<register name="MM3" group="MMX"/>
|
||||
<register name="MM4" group="MMX"/>
|
||||
<register name="MM5" group="MMX"/>
|
||||
<register name="MM6" group="MMX"/>
|
||||
<register name="MM7" group="MMX"/>
|
||||
<register name="YMM0" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM1" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM2" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM3" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM4" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM5" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM6" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM7" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM8" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM9" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM10" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM11" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM12" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM13" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM14" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="YMM15" group="AVX" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM0" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM1" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM2" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM3" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM4" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM5" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM6" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM7" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM8" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM9" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM10" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM11" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM12" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM13" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM14" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="XMM15" vector_lane_sizes="1,2,4,8"/>
|
||||
<register name="CF" group="FLAGS"/>
|
||||
<register name="F1" group="FLAGS"/>
|
||||
<register name="PF" group="FLAGS"/>
|
||||
<register name="F3" group="FLAGS"/>
|
||||
<register name="AF" group="FLAGS"/>
|
||||
<register name="F5" group="FLAGS"/>
|
||||
<register name="ZF" group="FLAGS"/>
|
||||
<register name="SF" group="FLAGS"/>
|
||||
<register name="TF" group="FLAGS"/>
|
||||
<register name="IF" group="FLAGS"/>
|
||||
<register name="DF" group="FLAGS"/>
|
||||
<register name="OF" group="FLAGS"/>
|
||||
<register name="IOPL" group="FLAGS"/>
|
||||
<register name="NT" group="FLAGS"/>
|
||||
<register name="F15" group="FLAGS"/>
|
||||
<register name="RF" group="FLAGS"/>
|
||||
<register name="VM" group="FLAGS"/>
|
||||
<register name="AC" group="FLAGS"/>
|
||||
<register name="VIF" group="FLAGS"/>
|
||||
<register name="VIP" group="FLAGS"/>
|
||||
<register name="ID" group="FLAGS"/>
|
||||
<register name="rflags" group="FLAGS"/>
|
||||
<register name="eflags" group="FLAGS"/>
|
||||
<register name="flags" group="FLAGS"/>
|
||||
<register name="bit64" hidden="true"/>
|
||||
<register name="segover" hidden="true"/>
|
||||
<register name="repneprefx" hidden="true"/>
|
||||
<register name="repprefx" hidden="true"/>
|
||||
<register name="rexWprefix" hidden="true"/>
|
||||
<register name="rexRprefix" hidden="true"/>
|
||||
<register name="rexXprefix" hidden="true"/>
|
||||
<register name="rexBprefix" hidden="true"/>
|
||||
<register name="xmmTmp1" hidden="true"/>
|
||||
<register name="xmmTmp1_Qa" hidden="true"/>
|
||||
<register name="xmmTmp1_Da" hidden="true"/>
|
||||
<register name="xmmTmp1_Db" hidden="true"/>
|
||||
<register name="xmmTmp1_Qb" hidden="true"/>
|
||||
<register name="xmmTmp1_Dc" hidden="true"/>
|
||||
<register name="xmmTmp1_Dd" hidden="true"/>
|
||||
<register name="xmmTmp2" hidden="true"/>
|
||||
<register name="xmmTmp2_Qa" hidden="true"/>
|
||||
<register name="xmmTmp2_Da" hidden="true"/>
|
||||
<register name="xmmTmp2_Db" hidden="true"/>
|
||||
<register name="xmmTmp2_Qb" hidden="true"/>
|
||||
<register name="xmmTmp2_Dc" hidden="true"/>
|
||||
<register name="xmmTmp2_Dd" hidden="true"/>
|
||||
<register name="rexprefix" hidden="true"/>
|
||||
</register_data>
|
||||
</processor_spec>
|
||||
@@ -239,4 +239,135 @@
|
||||
<register name="RBP"/>
|
||||
</returnaddress>
|
||||
</prototype>
|
||||
|
||||
<callfixup name="x86_return_thunk">
|
||||
<target name="__x86_return_thunk"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
RIP = *:8 RSP;
|
||||
RSP = RSP + 8;
|
||||
return [RIP];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="fentry">
|
||||
<target name="__fentry__"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
temp:1 = 0;
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="mcount">
|
||||
<target name="mcount"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
temp:1 = 0;
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_rbp">
|
||||
<target name="__x86_indirect_thunk_rbp"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [RBP];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_rax">
|
||||
<target name="__x86_indirect_thunk_rax"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [RAX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_rbx">
|
||||
<target name="__x86_indirect_thunk_rbx"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [RBX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_rcx">
|
||||
<target name="__x86_indirect_thunk_rcx"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [RCX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_rdx">
|
||||
<target name="__x86_indirect_thunk_rdx"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [RDX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r8">
|
||||
<target name="__x86_indirect_thunk_r8"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R8];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r9">
|
||||
<target name="__x86_indirect_thunk_r9"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R9];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r10">
|
||||
<target name="__x86_indirect_thunk_r10"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R10];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r11">
|
||||
<target name="__x86_indirect_thunk_r11"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R11];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r12">
|
||||
<target name="__x86_indirect_thunk_r12"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R12];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r13">
|
||||
<target name="__x86_indirect_thunk_r13"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R13];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r14">
|
||||
<target name="__x86_indirect_thunk_r14"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R14];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
<callfixup name="x86_indirect_thunk_r15">
|
||||
<target name="__x86_indirect_thunk_r15"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [R15];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
</compiler_spec>
|
||||
|
||||
@@ -0,0 +1,428 @@
|
||||
<?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="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="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" piece2="RAX" piece1="RBX"/>
|
||||
</pentry>
|
||||
<pentry minsize="17" maxsize="24">
|
||||
<addr space="join" piece3="RAX" piece2="RBX" piece1="RCX"/>
|
||||
</pentry>
|
||||
<pentry minsize="25" maxsize="32">
|
||||
<addr space="join" piece4="RAX" piece3="RBX" piece2="RCX" piece1="RDI"/>
|
||||
</pentry>
|
||||
<pentry minsize="33" maxsize="40">
|
||||
<addr space="join" piece5="RAX" piece4="RBX" piece3="RCX" piece2="RDI" piece1="RSI"/>
|
||||
</pentry>
|
||||
<pentry minsize="41" maxsize="48">
|
||||
<addr space="join" piece6="RAX" piece5="RBX" piece4="RCX" piece3="RDI" piece2="RSI" piece1="R8"/>
|
||||
</pentry>
|
||||
<pentry minsize="49" maxsize="56">
|
||||
<addr space="join" piece7="RAX" piece6="RBX" piece5="RCX" piece4="RDI" piece3="RSI" piece2="R8" piece1="R9"/>
|
||||
</pentry>
|
||||
<pentry minsize="57" maxsize="64">
|
||||
<addr space="join" piece8="RAX" piece7="RBX" piece6="RCX" piece5="RDI" piece4="RSI" piece3="R8" piece2="R9" piece1="R10"/>
|
||||
</pentry>
|
||||
<pentry minsize="65" maxsize="72">
|
||||
<addr space="join" piece9="RAX" piece8="RBX" piece7="RCX" piece6="RDI" piece5="RSI" piece4="R8" piece3="R9" piece2="R10" piece1="R11"/>
|
||||
</pentry>
|
||||
</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"/>
|
||||
</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"/>
|
||||
</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="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="RDI"/>
|
||||
<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="__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>
|
||||
@@ -0,0 +1,10 @@
|
||||
<golang>
|
||||
<!-- see https://github.com/golang/go/blob/master/src/internal/abi/abi_amd64.go -->
|
||||
<register_info versions="V1_17,V1_18,V1_19,V1_20"> <!-- "all", or comma list of: V1_2,V1_16,V1_17,V1_18 -->
|
||||
<int_registers list="RAX,RBX,RCX,RDI,RSI,R8,R9,R10,R11"/>
|
||||
<float_registers list="XMM0,XMM1,XMM2,XMM3,XMM4,XMM5,XMM6,XMM7,XMM8,XMM9,XMM10,XMM11,XMM12,XMM13,XMM14"/>
|
||||
<stack initialoffset="8" maxalign="8"/>
|
||||
<current_goroutine register="R14"/>
|
||||
<zero_register register="XMM15"/>
|
||||
</register_info>
|
||||
</golang>
|
||||
@@ -201,6 +201,7 @@
|
||||
</localrange>
|
||||
</prototype>
|
||||
<modelalias name="__cdecl" parent="__fastcall"/>
|
||||
<modelalias name="__stdcall" parent="__fastcall"/>
|
||||
<callfixup name="alloca_probe">
|
||||
<target name="_alloca_probe"/>
|
||||
<target name="_alloca_probe2"/>
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
<context_data>
|
||||
<context_set space="ram">
|
||||
<set name="addrsize" val="2"/>
|
||||
<set name="bit64" val="1"/>
|
||||
<set name="opsize" val="1"/>
|
||||
<set name="rexprefix" val="0"/>
|
||||
<set name="longMode" val="1"/>
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
<compiler name="gcc" spec="x86gcc.cspec" id="gcc"/>
|
||||
<compiler name="Borland C++" spec="x86borland.cspec" id="borlandcpp"/>
|
||||
<compiler name="Delphi" spec="x86delphi.cspec" id="borlanddelphi"/>
|
||||
<compiler name="golang" spec="x86-32-golang.cspec" id="golang"/>
|
||||
<external_name tool="gnu" name="i386:intel"/>
|
||||
<external_name tool="IDA-PRO" name="8086"/>
|
||||
<external_name tool="IDA-PRO" name="80486p"/>
|
||||
@@ -28,6 +29,7 @@
|
||||
<external_name tool="IDA-PRO" name="p4"/>
|
||||
<external_name tool="IDA-PRO" name="metapc"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="x86.dwarf"/>
|
||||
<external_name tool="Golang.register.info.file" name="x86-32-golang.register.info"/>
|
||||
</language>
|
||||
<language processor="x86"
|
||||
endian="little"
|
||||
@@ -61,7 +63,7 @@
|
||||
<external_name tool="IDA-PRO" name="metapc"/>
|
||||
<external_name tool="gnu" name="i8086"/>
|
||||
<external_name tool="gdis.disassembler.options.file" name="x86-16.gdis"/>
|
||||
</language>
|
||||
</language>
|
||||
<language processor="x86"
|
||||
endian="little"
|
||||
size="16"
|
||||
@@ -76,8 +78,8 @@
|
||||
<external_name tool="IDA-PRO" name="8086p"/>
|
||||
<external_name tool="gnu" name="i8086"/>
|
||||
<external_name tool="gdis.disassembler.options.file" name="x86-16.gdis"/>
|
||||
</language>
|
||||
<language processor="x86"
|
||||
</language>
|
||||
<language processor="x86"
|
||||
endian="little"
|
||||
size="64"
|
||||
variant="default"
|
||||
@@ -90,9 +92,25 @@
|
||||
<compiler name="Visual Studio" spec="x86-64-win.cspec" id="windows"/>
|
||||
<compiler name="clang" spec="x86-64-win.cspec" id="clangwindows"/>
|
||||
<compiler name="gcc" spec="x86-64-gcc.cspec" id="gcc"/>
|
||||
<compiler name="golang" spec="x86-64-golang.cspec" id="golang"/>
|
||||
<external_name tool="gnu" name="i386:x86-64:intel"/>
|
||||
<external_name tool="gnu" name="i386:x86-64"/>
|
||||
<external_name tool="IDA-PRO" name="metapc"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="x86-64.dwarf"/>
|
||||
<external_name tool="Golang.register.info.file" name="x86-64-golang.register.info"/>
|
||||
</language>
|
||||
<language processor="x86"
|
||||
endian="little"
|
||||
size="64"
|
||||
variant="compat32"
|
||||
version="2.14"
|
||||
slafile="x86-64.sla"
|
||||
processorspec="x86-64-compat32.pspec"
|
||||
manualindexfile="../manuals/x86.idx"
|
||||
id="x86:LE:64:compat32">
|
||||
<description>Intel/AMD 64-bit x86 in 32-bit compatibility mode (long mode off)</description>
|
||||
<compiler name="Visual Studio" spec="x86win.cspec" id="windows"/>
|
||||
<compiler name="gcc" spec="x86gcc.cspec" id="gcc"/>
|
||||
<external_name tool="DWARF.register.mapping.file" name="x86.dwarf"/>
|
||||
</language>
|
||||
</language_definitions>
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
<opinions>
|
||||
<!-- NOTE: variant="default" is specified for 64-bit to give preference to the default variant -->
|
||||
<constraint loader="Portable Executable (PE)">
|
||||
<constraint compilerSpecID="windows">
|
||||
<constraint primary="332" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="333" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="334" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="34404" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="34404" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint compilerSpecID="clangwindows">
|
||||
<constraint primary="332" secondary="clang" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="333" secondary="clang" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="334" secondary="clang" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="34404" secondary="clang" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="34404" secondary="clang" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint compilerSpecID="borlandcpp">
|
||||
<constraint primary="332" secondary="borlandcpp" processor="x86" endian="little" size="32" />
|
||||
@@ -22,16 +23,20 @@
|
||||
<constraint primary="333" secondary="borlanddelphi" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="334" secondary="borlanddelphi" processor="x86" endian="little" size="32" />
|
||||
</constraint>
|
||||
<constraint compilerSpecID="golang">
|
||||
<constraint primary="332" secondary="golang" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="34404" secondary="golang" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
</constraint>
|
||||
<constraint loader="Debug Symbols (DBG)" compilerSpecID="windows">
|
||||
<constraint primary="332" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="333" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="334" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="34404" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="34404" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint loader="Executable and Linking Format (ELF)" compilerSpecID="gcc">
|
||||
<constraint primary="3" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="62" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="62" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint loader="Module Definition (DEF)" compilerSpecID="windows">
|
||||
<constraint primary="0" processor="x86" endian="little" size="32" />
|
||||
@@ -47,18 +52,18 @@
|
||||
</constraint>
|
||||
<constraint loader="Mac OS X Mach-O" compilerSpecID="gcc">
|
||||
<constraint primary="7" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="16777223" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="16777223" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint loader="DYLD Cache" compilerSpecID="gcc">
|
||||
<constraint primary="x86_64" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="x86_64" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint loader="Common Object File Format (COFF)" compilerSpecID="gcc">
|
||||
<constraint primary="332" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="-31132" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="-31132" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint loader="MS Common Object File Format (COFF)" compilerSpecID="windows">
|
||||
<constraint primary="332" processor="x86" endian="little" size="32" />
|
||||
<constraint primary="-31132" processor="x86" endian="little" size="64" />
|
||||
<constraint primary="-31132" processor="x86" endian="little" size="64" variant="default" />
|
||||
</constraint>
|
||||
<constraint loader="Assembler Output (AOUT)" compilerSpecID="gcc">
|
||||
<constraint primary="134" processor="x86" endian="little" size="32" />
|
||||
|
||||
@@ -331,6 +331,17 @@
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="get_pc_thunk.bp">
|
||||
<target name="__i686.get_pc_thunk.bp"/>
|
||||
<target name="__x86.get_pc_thunk.bp"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
EBP = * ESP;
|
||||
ESP = ESP + 4;
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="get_pc_thunk_bx">
|
||||
<target name="__i686.get_pc_thunk.bx"/>
|
||||
<target name="__x86.get_pc_thunk.bx"/>
|
||||
@@ -364,7 +375,7 @@
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="get_pc_thunk_si">
|
||||
<callfixup name="get_pc_thunk_si">
|
||||
<target name="__i686.get_pc_thunk.si"/>
|
||||
<target name="__x86.get_pc_thunk.si"/>
|
||||
<pcode>
|
||||
@@ -374,4 +385,79 @@
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="x86_return_thunk">
|
||||
<target name="__x86_return_thunk"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
EIP = *:4 ESP;
|
||||
ESP = ESP + 4;
|
||||
return [EIP];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="fentry">
|
||||
<target name="__fentry__"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
temp:1 = 0;
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="mcount">
|
||||
<target name="mcount"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
temp:1 = 0;
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="x86_indirect_thunk_ebp">
|
||||
<target name="__x86_indirect_thunk_ebp"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [EBP];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="x86_indirect_thunk_eax">
|
||||
<target name="__x86_indirect_thunk_eax"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [EAX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="x86_indirect_thunk_ebx">
|
||||
<target name="__x86_indirect_thunk_ebx"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [EBX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="x86_indirect_thunk_ecx">
|
||||
<target name="__x86_indirect_thunk_ecx"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [ECX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="x86_indirect_thunk_edx">
|
||||
<target name="__x86_indirect_thunk_edx"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
call [EDX];
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
</compiler_spec>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<entry size="1" alignment="1" />
|
||||
<entry size="2" alignment="2" />
|
||||
<entry size="4" alignment="4" />
|
||||
<entry size="8" alignment="4" />
|
||||
<entry size="8" alignment="8" />
|
||||
</size_alignment_map>
|
||||
<bitfield_packing>
|
||||
<use_MS_convention value="true"/>
|
||||
@@ -377,4 +377,12 @@
|
||||
</pcode>
|
||||
</callfixup>
|
||||
|
||||
<callfixup name="__RTC_CheckEsp">
|
||||
<target name="__RTC_CheckEsp"/>
|
||||
<pcode>
|
||||
<body><![CDATA[
|
||||
temp:4 = 0;
|
||||
]]></body>
|
||||
</pcode>
|
||||
</callfixup>
|
||||
</compiler_spec>
|
||||
|
||||
Reference in New Issue
Block a user