PAL { global: # Drawbridge ABIs DkVirtualMemoryAlloc; DkVirtualMemoryFree; DkVirtualMemoryProtect; DkThreadCreate; DkThreadDelayExecution; DkThreadYieldExecution; DkThreadExit; DkThreadResume; DkMutexCreate; DkNotificationEventCreate; DkSynchronizationEventCreate; DkMutexRelease; DkEventSet; DkEventClear; DkObjectsWaitAny; DkStreamOpen; DkStreamRead; DkStreamWrite; DkStreamMap; DkStreamUnmap; DkStreamSetLength; DkStreamFlush; DkStreamDelete; DkSendHandle; DkReceiveHandle; # Added by us DkStreamWaitForClient; DkStreamGetName; DkStreamAttributesQuerybyHandle; DkStreamAttributesQuery; DkProcessCreate; DkProcessExit; DkProcessSandboxCreate; DkSystemTimeQuery; DkRandomBitsRead; DkInstructionCacheFlush; DkObjectReference; DkObjectClose; # objects checkpoint? # objects reload? # The ABIs we added in the paper DkSetExceptionHandler; DkExceptionReturn; # exceptions DkCreatePhysicalMemoryChannel; # IPC DkPhysicalMemoryCommit; # IPC DkPhysicalMemoryMap; # IPC DkThreadStackSet; # set stack range DkThreadPrivateSet; DkThreadPrivateGet; # set/get thread private area DkThreadGetCurrent; # get a handle to describe the current thread DkStreamChangeName; DkStreamAttributesSetbyHandle; DkSegmentRegister; # set segment register DkMemoryAvailableQuota; DkCpuIdRetrieve; # retrieve CPUID # Debugging ABIs pal_printf; pal_snprintf; DkDebugAttachBinary; DkDebugDetachBinary; # Control block pal_control; pal_control_addr; local: *; };