Exemple #1
0
bool dyn_lwp::changePC( Address loc, dyn_saved_regs * regs ) {
  if( regs != NULL ) { restoreRegisters( *regs ); }

  /* We can't change the PC to a slot number other than 0. */  
  assert( loc % 16 == 0 );

  // /* DEBUG */ fprintf( stderr, "%s[%d]: (lwp %d) changing PC to 0x%lx\n", __FILE__, __LINE__, get_lwp_id(), loc );
  return (getDBI()->ptrace( PTRACE_POKEUSER, get_lwp_id(), PT_CR_IIP, loc, -1, & errno ) != -1);
} /* end changePC() */
Exemple #2
0
void
IOI2CLM6x::processPowerEvent	(
									UInt32			eventType
								)
{
	switch ( eventType )
	{
		case	kI2CPowerEvent_OFF:
		case	kI2CPowerEvent_SLEEP:
		{
			require_success( saveRegisters(), IOI2CLM6x_processPowerEvent_saveRegistersErr );
			fRegistersAreSaved = true;
			break;
		}

		case	kI2CPowerEvent_ON:
		case	kI2CPowerEvent_WAKE:
		{
			if ( fRegistersAreSaved )
			{
				// Full Power State
				require_success( restoreRegisters(), IOI2CLM6x_processPowerEvent_restoreRegistersErr );
				fRegistersAreSaved = false;
			}
			break;
		}

		case	kI2CPowerEvent_STARTUP:
		{
			require_success( initHW(), IOI2CLM6x_processPowerEvent_initHWErr );
			break;
		}
    }

IOI2CLM6x_processPowerEvent_initHWErr:
IOI2CLM6x_processPowerEvent_saveRegistersErr:
	return;

IOI2CLM6x_processPowerEvent_restoreRegistersErr:
	fRegistersAreSaved = false;
	return;
}
Exemple #3
0
IOReturn AppleLM8x::setPowerState(unsigned long whatState, IOService *dontCare)
{
    DLOG("AppleLM8x::setPowerState called with state:%lu\n", whatState);

    if ( (whatState == kLM8xOffState) )
    {
        // No Power State
        systemIsRestarting = TRUE; // set flag to reflect shutting down state.

        if ( saveRegisters() != kIOReturnSuccess )
            IOLog("AppleLM8x::powerStateWillChangeTo(0x%x) failed to save registers.\n", kLM8xAddr<<1);
    }

    if ( (whatState == kLM8xOnState) )
    {
        // Full Power State
        if ( restoreRegisters() != kIOReturnSuccess )
            IOLog("AppleLM8x::powerStateWillChangeTo(0x%x) failed to restore registers.\n", kLM8xAddr<<1);

        systemIsRestarting = FALSE; // set flag to reflect we are not shutting down.
    }

    return IOPMAckImplied;
}
Exemple #4
0
// Yield to another user thread.
void
yield(void)
{
    labelhack(Resume);

    DEBUG_PRINT("Put self in readyQ and suspend\n");
    Registers saveArea;
    void* localStubBase = stubBase;
    DEBUG_PRINT("stacklet %p cannot be freed\n", stubBase - STACKLET_SIZE);
    DEBUG_PRINT("Store stubBase in localStubBase %p\n", localStubBase);
    saveRegisters();
    void* stackPointer;
    getStackPointer(stackPointer);
    enqReadyQ(&&Resume, stackPointer);

    suspendStub();

Resume:
    restoreRegisters();
    stubBase = localStubBase;
    DEBUG_PRINT("stacklet %p can be freed\n", stubBase - STACKLET_SIZE);
    DEBUG_PRINT("Restore stubBase to be %p.\n", stubBase);
    DEBUG_PRINT("Resumed a ready thread.\n");
}