The Pedigree Project 0.1
Public Member Functions | Private Member Functions | Private Attributes | List of all members
LinuxAmd64Signal::AsyncEvent Class Referencefinal
+ Inheritance diagram for LinuxAmd64Signal::AsyncEvent:
+ Collaboration diagram for LinuxAmd64Signal::AsyncEvent:

Public Member Functions

 AsyncEvent (uintptr_t handler, size_t signal, uint64_t signalMask, bool deferSignal, uint32_t flags, uintptr_t restorer, bool useAlternateStack, bool isDeletable=false)
 
bool requiresExactUserReturnState () const override
 
Event::UserReturnDelivery deliverAtUserReturn (InterruptState &state) override
 
Event::UserReturnDelivery deliverAtUserReturn (SyscallState &state) override
 
EventcloneForDelivery () override
 
SignalEventcloneForDisposition () override
 
uint32_t getFlags () const
 
uintptr_t getRestorer () const
 
- Public Member Functions inherited from SignalEvent
 SignalEvent (uintptr_t handlerAddress, size_t signalNum, size_t specificNestingLevel=~0UL, uint64_t signalMask=0, bool deferSignal=true, bool isDeletable=false, HandlerPrivilege handlerPrivilege=HandlerPrivilege::Kernel, DeliveryDisposition disposition=DeliveryDisposition::CaughtHandler, bool useAlternateUserStack=false, size_t continuationEpoch=0)
 
 SignalEvent (const SignalEvent &other)
 
void setChildStatus (int32_t status, uint64_t userTime, uint64_t systemTime)
 
int32_t childStatus () const
 
uint64_t childUserTime () const
 
uint64_t childSystemTime () const
 
uint64_t rebindGeneration () const
 
void setRebindGeneration (uint64_t value)
 
uint64_t queueSequence () const
 
void setQueueSequence (uint64_t value)
 
bool deliveryActive () const
 
bool queuedIndividually () const
 
bool hasDeliveryState () const
 
void setDeliveryState (const SharedPointer< SignalEventState > &state)
 
void transferDeliveryStateTo (SignalEvent &event)
 
const void * deliverySource () const
 
void timerInfo (int32_t &timerId, int32_t &overrun) const
 
void rejectSignalDelivery () const
 
void completeSignalDelivery (int32_t overrun=0) const
 
void setTraceBypass (bool value=true)
 
bool consumeTraceBypass ()
 
virtual size_t serialize (uint8_t *pBuffer)
 
virtual bool isSignalEvent () const
 
virtual bool prefersAlternateUserStack () const
 
virtual bool isDeliverableWhileProcessSuspended () const
 
void setProcessDirected (bool processDirected)
 
bool isProcessDirected () const
 
void setSignalOrigin (int32_t signalCode, int32_t senderProcess, uint32_t senderUser)
 
int32_t getSignalCode () const
 
int32_t getSenderProcess () const
 
void setSignalValue (uint64_t value)
 
uint64_t getSignalValue () const
 
uint32_t getSenderUser () const
 
uint64_t getDeliverySignalMask () const
 
bool defersDeliveredSignal () const
 
void setContinuationEpoch (size_t continuationEpoch)
 
size_t getContinuationEpoch () const
 
virtual size_t getNumber ()
 
- Public Member Functions inherited from Event
 Event (uintptr_t handlerAddress, bool isDeletable, size_t specificNestingLevel=~0UL, HandlerPrivilege handlerPrivilege=HandlerPrivilege::Kernel)
 
virtual bool isDeletable ()
 
uintptr_t getHandlerAddress ()
 
HandlerPrivilege getHandlerPrivilege () const
 
bool isValidHandlerMapping (size_t mappingFlags) const
 
size_t getSpecificNestingLevel ()
 
 Event (const Event &other)
 
Eventoperator= (const Event &other)
 
size_t pendingCount ()
 
bool tryAcquireRegistration (SendLease &registration)
 
virtual void waitForDeliveries ()
 
void retire ()
 
void beginRetirement (Retirement &retirement)
 

Private Member Functions

 AsyncEvent (const AsyncEvent &other, bool isDeletable)
 

Private Attributes

uint32_t m_Flags
 
uintptr_t m_Restorer
 

Additional Inherited Members

- Public Types inherited from SignalEvent
enum class  DeliveryDisposition { DefaultAction , CaughtHandler }
 
- Public Types inherited from Event
enum class  HandlerPrivilege { Kernel , User }
 
enum class  UserReturnDelivery { NotApplicable , Delivered , Failed }
 
- Static Public Member Functions inherited from SignalEvent
static bool unserialize (uint8_t *pBuffer, Event &event)
 
- Static Public Member Functions inherited from Event
static uintptr_t getTrampoline ()
 
static uintptr_t getSecondaryTrampoline ()
 
static uintptr_t getHandlerBuffer ()
 
static size_t getHandlerBufferSize ()
 
static uintptr_t getLastHandlerBuffer ()
 
static bool unserialize (uint8_t *pBuffer, Event &event)
 
static size_t getEventType (uint8_t *pBuffer)
 
- Protected Member Functions inherited from SignalEvent
 SignalEvent (const SignalEvent &other, bool isDeletable)
 
- Protected Attributes inherited from Event
uintptr_t m_HandlerAddress
 
HandlerPrivilege m_HandlerPrivilege
 
bool m_bIsDeletable
 
size_t m_NestingLevel
 
uint64_t m_Magic
 
List< Thread * > m_Threads
 
Spinlock m_Lock
 

Detailed Description

Definition at line 33 of file linux-amd64-signal.h.

Constructor & Destructor Documentation

◆ AsyncEvent() [1/2]

LinuxAmd64Signal::AsyncEvent::AsyncEvent ( uintptr_t  handler,
size_t  signal,
uint64_t  signalMask,
bool  deferSignal,
uint32_t  flags,
uintptr_t  restorer,
bool  useAlternateStack,
bool  isDeletable = false 
)

Definition at line 406 of file linux-amd64-signal.cc.

◆ AsyncEvent() [2/2]

LinuxAmd64Signal::AsyncEvent::AsyncEvent ( const AsyncEvent other,
bool  isDeletable 
)
private

Definition at line 415 of file linux-amd64-signal.cc.

Member Function Documentation

◆ cloneForDelivery()

Event * LinuxAmd64Signal::AsyncEvent::cloneForDelivery ( )
overridevirtual

Returns the instance to enqueue for one delivery. Most events enqueue themselves; signal dispositions return an independently owned snapshot.

Reimplemented from SignalEvent.

Definition at line 418 of file linux-amd64-signal.cc.

References Event::isDeletable().

◆ cloneForDisposition()

SignalEvent * LinuxAmd64Signal::AsyncEvent::cloneForDisposition ( )
overridevirtual

Copies a stable signal-disposition event without slicing subclasses.

Reimplemented from SignalEvent.

Definition at line 425 of file linux-amd64-signal.cc.

◆ deliverAtUserReturn() [1/2]

Event::UserReturnDelivery LinuxAmd64Signal::AsyncEvent::deliverAtUserReturn ( InterruptState &  )
overridevirtual

Delivers this event by editing an interrupt return frame in place.

Reimplemented from Event.

Definition at line 429 of file linux-amd64-signal.cc.

References ProcessorBase::information().

◆ deliverAtUserReturn() [2/2]

Event::UserReturnDelivery LinuxAmd64Signal::AsyncEvent::deliverAtUserReturn ( SyscallState &  )
overridevirtual

Delivers this event by editing a syscall return frame in place.

Reimplemented from Event.

Definition at line 454 of file linux-amd64-signal.cc.

References ProcessorBase::information().

◆ getFlags()

uint32_t LinuxAmd64Signal::AsyncEvent::getFlags ( ) const
inline

Definition at line 47 of file linux-amd64-signal.h.

◆ getRestorer()

uintptr_t LinuxAmd64Signal::AsyncEvent::getRestorer ( ) const
inline

Definition at line 51 of file linux-amd64-signal.h.

◆ requiresExactUserReturnState()

bool LinuxAmd64Signal::AsyncEvent::requiresExactUserReturnState ( ) const
inlineoverridevirtual

Returns true when this event cannot run without the raw user context.

Reimplemented from Event.

Definition at line 38 of file linux-amd64-signal.h.

Member Data Documentation

◆ m_Flags

uint32_t LinuxAmd64Signal::AsyncEvent::m_Flags
private

Definition at line 58 of file linux-amd64-signal.h.

◆ m_Restorer

uintptr_t LinuxAmd64Signal::AsyncEvent::m_Restorer
private

Definition at line 59 of file linux-amd64-signal.h.


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