On Fri, Aug 8, 2014 at 5:02 PM, Bill Paul <[email protected]> wrote: > Of all the gin joints in all the towns in all the world, Andrew Fish had to > walk into mine at 16:46:15 on Friday 08 August 2014 and say: > >> I’m still working on porting the CpuExceptionHandlerLib to clang, but I hit >> some code I don’t understand? I have mods in the assembly code but….. >> >> I’m running in QEMU and I’m taking the 1st timer tick and >> CommonExceptionHandler() gets called and ExceptionType is 0x68. But >> ExceptionType is used to index into an array that only has 32 entries? > > Vectors 0 to 31 are reserved for internal CPU exception vector values when > running in protected mode or long mode. Vectors 32 through 255 are available > for software defined interrupts. (In 16-bit real mode, only vectors 0 through > 7 are reserved, which requires you to fiddle with the 8259 PICs a bit when you > enter protected mode to avoid a conflict in the unlikely event that you choose > to use the legacy PICs for interrupt handling.) > > So the exception count is correct, and I guess CommonExceptionHandler() is > assuming that the ExceptionType argument will only ever be an internal > exception value. Presumably there's some other code somewhere that branches > off the handling of vectors 32 to 255 to a different handler (for IRQ > dispatching). > > The question is where is the value 0x68 coming from?
Perhaps: PcAtChipsetPkg/8259InterruptControllerDxe/8259.h #define PROTECTED_MODE_BASE_VECTOR_MASTER 0x68 -Jordan > > -Bill > >> Thanks, >> >> Andrew Fish >> >> >> ~/work/src/edk2(master)>git grep CPU_EXCEPTION_NUM -- *.h >> UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h:29:#define >> CPU_EXCEPTION_NUM 32 >> >> >> https://svn.code.sf.net/p/edk2/code/trunk/edk2/UefiCpuPkg/Library/CpuExcept >> ionHandlerLib/DxeSmmCpuException.c >> >> RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM]; >> EFI_CPU_INTERRUPT_HANDLER >> mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM]; ... >> /** >> Common exception handler. >> >> @param ExceptionType Exception type. >> @param SystemContext Pointer to EFI_SYSTEM_CONTEXT. >> **/ >> VOID >> EFIAPI >> CommonExceptionHandler ( >> IN EFI_EXCEPTION_TYPE ExceptionType, >> IN EFI_SYSTEM_CONTEXT SystemContext >> ) >> { >> EXCEPTION_HANDLER_CONTEXT *ExceptionHandlerContext; >> >> ExceptionHandlerContext = (EXCEPTION_HANDLER_CONTEXT *) (UINTN) >> (SystemContext.SystemContextIa32); >> >> switch (mReservedVectors[ExceptionType].Attribute) { >> … >> >> if (mExternalInterruptHandler[ExceptionType] != NULL) { >> (mExternalInterruptHandler[ExceptionType]) (ExceptionType, >> SystemContext); } else if (ExceptionType < CPU_EXCEPTION_NUM) { >> // >> // Get Spinlock to display CPU information >> // >> while (!AcquireSpinLockOrFail (&mDisplayMessageSpinLock)) { >> CpuPause (); >> } >> // >> // Display ExceptionType, CPU information and Image information >> // >> DumpCpuContent (ExceptionType, SystemContext); >> // >> // Release Spinlock of output message >> // >> ReleaseSpinLock (&mDisplayMessageSpinLock); >> // >> // Enter a dead loop if needn't to execute old IDT handler further >> // >> if (mReservedVectors[ExceptionType].Attribute != >> EFI_VECTOR_HANDOFF_HOOK_BEFORE) { CpuDeadLoop (); >> } >> } > > -- > ============================================================================= > -Bill Paul (510) 749-2329 | Senior Member of Technical Staff, > [email protected] | Master of Unix-Fu - Wind River Systems > ============================================================================= > "I put a dollar in a change machine. Nothing changed." - George Carlin > ============================================================================= > > ------------------------------------------------------------------------------ > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
