GP-2432 golang api snapshot, generics, closures, gcwritebarrier

Apply golang runtime function signatures from info stored in json api
snapshot files.

The api snapshot files are created by a custom go helper program that
uses the go compiler parser to parse the go toolchain source tree and
writes the discovered function and type info into a json file.

The go-api-parser helper program is based off of work contributed by
github user monoidic via issue #6367.

Updates generic functions to take a generic dictionary RTTI
parameter (mostly to allow correct assignment of other parameters).

Updates closure functions to take a closure context parameter.  Closure
contexts are passed via a register that is not involved in normal
parameter passing.

Tweaks the signature of gcWriteBarrier functions so that they don't mess
up decompilation of functions that use them.
This commit is contained in:
dev747368 2024-11-12 10:36:35 -05:00
parent ff90737bdc
commit 36c6c8ef77
185 changed files with 40975 additions and 3816 deletions

View file

@ -146,10 +146,11 @@
<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">
@ -175,9 +176,69 @@
<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">
@ -198,6 +259,7 @@
<register name="RAX"/>
<register name="RBX"/>
<register name="RCX"/>
<register name="RDX"/>
<register name="RSI"/>
<register name="R8"/>
<register name="R9"/>
@ -236,13 +298,14 @@
<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"/>
<register name="R14"/>
</unaffected>
</prototype>