NAME

iac

SYNOPSIS

#include <charm.h>

Status iac( marshall_regs *regs, int arena_id )

struct marshall_regs
{
ulong edi;
ulong esi;
ulong ebp;
ulong ebx;
ulong edx;
ulong ecx;
ulong eax;
};

PARAMETERS

marshall_regs a pointer to the data to be passed in the registers.

arena_id denotes the callee arena.

DESCRIPTION

The iac function is used to transfer control and registers from one arena to another. When the call is made, control is passed from the calling to the callee arena and the rest of the timeslice is given over to the callee arena.

An iac call is succesful if the callee arena is valid and has set an entry point using the arena_set_iac_upcall() function. Registers are preserved across the iac.

RETURN VALUES

A successful iac call never returns.

ERRORS

The iac call may returns the following failures:

[NO_SUCH_ARENA] occurs if the arena specified does not exist.

[IAC_NO_ENTRY] occurs if no entry point has been set in the callee using arena_set_iac_upcall().

USAGE FROM ASSEMBLY LANGUAGE

When calling from assembly language, push the parameter for the iac call onto the stack, this frees the registers for use in data transfer. Once registers are initialized an LCALL instruction may be performed which does not require the use of registers.

RELATED INFORMATION

arena_set_iac_upcall(),

last updated: 11/2/99