infix
A JIT-Powered FFI Library for C
Loading...
Searching...
No Matches
infix_reverse_abi_spec Struct Reference

Defines the ABI-specific implementation interface for reverse trampolines. More...

#include <infix_internals.h>

Public Attributes

infix_status(* prepare_reverse_call_frame )(infix_arena_t *arena, infix_reverse_call_frame_layout **out_layout, infix_reverse_t *context)
 Analyzes a function signature to create a layout for the reverse call stub's stack frame.
 
infix_status(* generate_reverse_prologue )(code_buffer *buf, infix_reverse_call_frame_layout *layout)
 Generates the reverse stub's prologue (stack setup).
 
infix_status(* generate_reverse_argument_marshalling )(code_buffer *buf, infix_reverse_call_frame_layout *layout, infix_reverse_t *context)
 Generates code to marshal arguments from their native locations (registers/stack) into a void** array.
 
infix_status(* generate_reverse_dispatcher_call )(code_buffer *buf, infix_reverse_call_frame_layout *layout, infix_reverse_t *context)
 Generates the call to the universal C dispatcher (infix_internal_dispatch_callback_fn_impl).
 
infix_status(* generate_reverse_epilogue )(code_buffer *buf, infix_reverse_call_frame_layout *layout, infix_reverse_t *context)
 Generates the reverse stub's epilogue (handling return value, restoring stack, returning).
 

Detailed Description

Defines the ABI-specific implementation interface for reverse trampolines.

This v-table defines the contract for generating the JIT stub for a reverse call (callback). The stub's primary job is to receive arguments in native ABI format, marshal them into a generic void** array, and call the universal C dispatcher.

Member Data Documentation

◆ generate_reverse_argument_marshalling

infix_status(* infix_reverse_abi_spec::generate_reverse_argument_marshalling) (code_buffer *buf, infix_reverse_call_frame_layout *layout, infix_reverse_t *context)

Generates code to marshal arguments from their native locations (registers/stack) into a void** array.

Parameters
[in,out]bufThe code buffer.
[in]layoutThe layout blueprint.
[in]contextThe reverse context.
Returns
INFIX_SUCCESS on success.

◆ generate_reverse_dispatcher_call

infix_status(* infix_reverse_abi_spec::generate_reverse_dispatcher_call) (code_buffer *buf, infix_reverse_call_frame_layout *layout, infix_reverse_t *context)

Generates the call to the universal C dispatcher (infix_internal_dispatch_callback_fn_impl).

Parameters
[in,out]bufThe code buffer.
[in]layoutThe layout blueprint.
[in]contextThe reverse context.
Returns
INFIX_SUCCESS on success.

◆ generate_reverse_epilogue

infix_status(* infix_reverse_abi_spec::generate_reverse_epilogue) (code_buffer *buf, infix_reverse_call_frame_layout *layout, infix_reverse_t *context)

Generates the reverse stub's epilogue (handling return value, restoring stack, returning).

Parameters
[in,out]bufThe code buffer.
[in]layoutThe layout blueprint.
[in]contextThe reverse context.
Returns
INFIX_SUCCESS on success.

◆ generate_reverse_prologue

infix_status(* infix_reverse_abi_spec::generate_reverse_prologue) (code_buffer *buf, infix_reverse_call_frame_layout *layout)

Generates the reverse stub's prologue (stack setup).

Parameters
[in,out]bufThe code buffer.
[in]layoutThe layout blueprint.
Returns
INFIX_SUCCESS on success.

◆ prepare_reverse_call_frame

infix_status(* infix_reverse_abi_spec::prepare_reverse_call_frame) (infix_arena_t *arena, infix_reverse_call_frame_layout **out_layout, infix_reverse_t *context)

Analyzes a function signature to create a layout for the reverse call stub's stack frame.

Parameters
[in]arenaThe temporary arena for allocations.
[out]out_layoutReceives the newly created layout blueprint.
[in]contextThe reverse trampoline context, containing all type info.
Returns
INFIX_SUCCESS on success.

The documentation for this struct was generated from the following file: