The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
SyscallManager Class Referenceabstract

#include <SyscallManager.h>

+ Inheritance diagram for SyscallManager:
+ Collaboration diagram for SyscallManager:

Classes

class  HandlerLease
 
struct  HandlerSlot
 
struct  PostSyscallAction
 
class  Registration
 

Public Types

enum  PostSyscallActionKind {
  NoPostSyscallAction , TerminateCurrentThread , ExitCurrentProcess , ReturnFromEvent ,
  PopEventState , RestoreProcessorState , JumpToUserspace , RebootSystem
}
 
using FastEntry = uintptr_t(*)(SyscallHandler *, SyscallState &)
 

Public Member Functions

virtual bool registerSyscallHandler (Service_t Service, SyscallHandler *pHandler, Registration &registration, FastEntry entry=nullptr)=0
 
EXPORTED_PUBLIC bool requestThreadExit ()
 
EXPORTED_PUBLIC bool requestProcessExit (int status)
 
EXPORTED_PUBLIC bool requestEventReturn ()
 
EXPORTED_PUBLIC bool requestEventStatePop ()
 
EXPORTED_PUBLIC bool requestStateRestore (const ProcessorState &state)
 
EXPORTED_PUBLIC bool requestUserJump (uintptr_t instructionPointer, uintptr_t stackPointer)
 
EXPORTED_PUBLIC bool requestReboot (Machine::ShutdownType type=Machine::ShutdownType::Restart)
 
virtual uintptr_t syscall (Service_t service, uintptr_t function, uintptr_t p1=0, uintptr_t p2=0, uintptr_t p3=0, uintptr_t p4=0, uintptr_t p5=0)=0
 

Static Public Member Functions

static EXPORTED_PUBLIC SyscallManager & instance ()
 

Protected Member Functions

bool registerHandler (Service_t service, SyscallHandler *pHandler, Registration &registration, FastEntry entry=nullptr)
 
ALWAYS_INLINE uintptr_t dispatchHandler (const HandlerLease &lease, SyscallState &state) const
 
bool closeHandler (Registration &registration)
 
bool unregisterHandler (Registration &registration)
 
bool acquireHandler (Service_t service, HandlerLease &lease, PostSyscallAction &action)
 
 SyscallManager ()
 
virtual ~SyscallManager ()
 

Private Member Functions

bool requestPostSyscallAction (PostSyscallActionKind kind, intptr_t value, const ProcessorState *state=nullptr)
 
 SyscallManager (const SyscallManager &)
 
SyscallManager & operator= (const SyscallManager &)
 

Static Private Member Functions

static uintptr_t dispatchVirtual (SyscallHandler *handler, SyscallState &state)
 
static bool inCallback ()
 
static void abandonedHandlerCleanup (void *context)
 
static void releaseHandler (HandlerLease &lease, bool normalReturn)
 

Private Attributes

Spinlock m_HandlerLock
 
HandlerSlot * m_HandlerSlots [serviceEnd]
 
HandlerSlot * m_Published [serviceEnd]
 

Static Private Attributes

static HandlerSlot m_ClosingSlot
 

Detailed Description

The syscall manager allows syscall handler registrations and handles syscalls

Definition at line 41 of file include/pedigree/kernel/processor/SyscallManager.h.

Member Typedef Documentation

◆ FastEntry

using SyscallManager::FastEntry = uintptr_t (*)(SyscallHandler*, SyscallState&)

Member Enumeration Documentation

◆ PostSyscallActionKind

enum SyscallManager::PostSyscallActionKind

Constructor & Destructor Documentation

◆ SyscallManager() [1/2]

SyscallManager::SyscallManager ( )
protected

The constructor

Definition at line 90 of file SyscallManager.cc.

◆ ~SyscallManager()

SyscallManager::~SyscallManager ( )
protectedvirtualdefault

The destructor

◆ SyscallManager() [2/2]

SyscallManager::SyscallManager ( const SyscallManager &  )
private

The copy-constructor

Note
Not implemented (singleton)

Member Function Documentation

◆ abandonedHandlerCleanup()

void SyscallManager::abandonedHandlerCleanup ( void *  context)
staticprivate

Definition at line 308 of file SyscallManager.cc.

◆ acquireHandler()

bool SyscallManager::acquireHandler ( Service_t  service,
HandlerLease &  lease,
PostSyscallAction &  action 
)
protected

Definition at line 224 of file SyscallManager.cc.

◆ closeHandler()

bool SyscallManager::closeHandler ( Registration &  registration)
protected

Definition at line 139 of file SyscallManager.cc.

◆ dispatchHandler()

ALWAYS_INLINE uintptr_t SyscallManager::dispatchHandler ( const HandlerLease &  lease,
SyscallState &  state 
) const
inlineprotected

◆ dispatchVirtual()

uintptr_t SyscallManager::dispatchVirtual ( SyscallHandler *  handler,
SyscallState &  state 
)
staticprivate

Definition at line 104 of file SyscallManager.cc.

◆ inCallback()

bool SyscallManager::inCallback ( )
staticprivate

Definition at line 108 of file SyscallManager.cc.

◆ instance()

SyscallManager & SyscallManager::instance ( )
static

Get the syscall manager instance

Returns
instance of the syscall manager

Definition at line 49 of file arm64/SyscallManager.cc.

Referenced by KernelCoreSyscallManager::call(), PedigreeCSyscallManager::call(), PosixSyscallManager::call(), and PosixSubsystem::invoke().

+ Here is the caller graph for this function:

◆ operator=()

SyscallManager & SyscallManager::operator= ( const SyscallManager &  )
private

The copy-constructor

Note
Not implemented (singleton)

◆ registerHandler()

bool SyscallManager::registerHandler ( Service_t  service,
SyscallHandler *  pHandler,
Registration &  registration,
FastEntry  entry = nullptr 
)
protected

Definition at line 113 of file SyscallManager.cc.

◆ registerSyscallHandler()

virtual bool SyscallManager::registerSyscallHandler ( Service_t  Service,
SyscallHandler *  pHandler,
Registration &  registration,
FastEntry  entry = nullptr 
)
pure virtual

Register a syscall handler

Parameters
[in]Servicethe service number you want to register
[in]pHandlerthe interrupt handler
[in]entryoptional nonvirtual implementation of the same syscall contract
Returns
true, if successfully registered, false otherwise

Implemented in Arm64SyscallManager, Armv7SyscallManager, HostedSyscallManager, and X64SyscallManager.

◆ releaseHandler()

void SyscallManager::releaseHandler ( HandlerLease &  lease,
bool  normalReturn 
)
staticprivate

Definition at line 274 of file SyscallManager.cc.

◆ requestEventReturn()

bool SyscallManager::requestEventReturn ( )

Definition at line 343 of file SyscallManager.cc.

◆ requestEventStatePop()

bool SyscallManager::requestEventStatePop ( )

Definition at line 347 of file SyscallManager.cc.

◆ requestPostSyscallAction()

bool SyscallManager::requestPostSyscallAction ( PostSyscallActionKind  kind,
intptr_t  value,
const ProcessorState *  state = nullptr 
)
private

Definition at line 315 of file SyscallManager.cc.

◆ requestProcessExit()

bool SyscallManager::requestProcessExit ( int  status)

Definition at line 339 of file SyscallManager.cc.

◆ requestReboot()

bool SyscallManager::requestReboot ( Machine::ShutdownType  type = Machine::ShutdownType::Restart)

Definition at line 362 of file SyscallManager.cc.

◆ requestStateRestore()

bool SyscallManager::requestStateRestore ( const ProcessorState &  state)

Definition at line 351 of file SyscallManager.cc.

◆ requestThreadExit()

bool SyscallManager::requestThreadExit ( )

Queue a terminal operation until the active handler lease is retired.

Definition at line 335 of file SyscallManager.cc.

◆ requestUserJump()

bool SyscallManager::requestUserJump ( uintptr_t  instructionPointer,
uintptr_t  stackPointer 
)

Definition at line 355 of file SyscallManager.cc.

◆ syscall()

virtual uintptr_t SyscallManager::syscall ( Service_t  service,
uintptr_t  function,
uintptr_t  p1 = 0,
uintptr_t  p2 = 0,
uintptr_t  p3 = 0,
uintptr_t  p4 = 0,
uintptr_t  p5 = 0 
)
pure virtual

Calls a syscall.

Implemented in HostedSyscallManager, X64SyscallManager, Arm64SyscallManager, and Armv7SyscallManager.

Referenced by KernelCoreSyscallManager::call(), PedigreeCSyscallManager::call(), and PosixSyscallManager::call().

+ Here is the caller graph for this function:

◆ unregisterHandler()

bool SyscallManager::unregisterHandler ( Registration &  registration)
protected

Definition at line 167 of file SyscallManager.cc.

Member Data Documentation

◆ m_ClosingSlot

SyscallManager::HandlerSlot SyscallManager::m_ClosingSlot
staticprivate

◆ m_HandlerLock

Spinlock SyscallManager::m_HandlerLock
private

◆ m_HandlerSlots

HandlerSlot* SyscallManager::m_HandlerSlots[serviceEnd]
private

◆ m_Published

HandlerSlot* SyscallManager::m_Published[serviceEnd]
private

The documentation for this class was generated from the following files: